diff --git a/.gitignore b/.gitignore index 298a9c370fd..0f9acd74319 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,10 @@ *.pyc *.egg *.so +*.swp .dir-locals.el +.mypy_cache/ .ropeproject/ TAGS .tags @@ -18,3 +20,4 @@ Sphinx.egg-info/ doc/_build/ tests/.coverage tests/build/ +utils/regression_test.js diff --git a/.travis.yml b/.travis.yml index 3f8b7ee3a88..8cef03f445c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,16 +1,38 @@ language: python sudo: false +cache: + directories: + - $HOME/.cache/pip python: - - "2.6" - "2.7" - - "3.3" - "3.4" + - "3.5" + - "nightly" - "pypy" env: - - DOCUTILS=0.11 - - DOCUTILS=0.12 + global: + - TEST='-v --with-timer --timer-top-n 25' + - PYTHONFAULTHANDLER=x + - PYTHONWARNINGS=all + matrix: + - DOCUTILS=0.11 + - DOCUTILS=0.12 +addons: + apt: + packages: + - graphviz + - texlive-latex-recommended + - texlive-latex-extra + - texlive-fonts-recommended + - texlive-fonts-extra + - texlive-xetex + - lmodern install: + - pip install -U pip setuptools - pip install docutils==$DOCUTILS - pip install -r test-reqs.txt -before_script: flake8 -script: make test +before_script: + - if [[ $TRAVIS_PYTHON_VERSION != '2.6' ]]; then flake8; fi +script: + - if [[ $TRAVIS_PYTHON_VERSION == '3.5' ]]; then make style-check test-async; fi + - if [[ $TRAVIS_PYTHON_VERSION != '3.5' ]]; then make test; fi diff --git a/AUTHORS b/AUTHORS index c31cb6976bc..24897985ea4 100644 --- a/AUTHORS +++ b/AUTHORS @@ -11,6 +11,7 @@ Other co-maintainers: * Rob Ruana <@RobRuana> * Robert Lehmann <@lehmannro> * Roland Meister <@rolmei> +* Takeshi Komiya <@tk0miya> Other contributors, listed alphabetically, are: @@ -19,17 +20,18 @@ Other contributors, listed alphabetically, are: * Jakob Lykke Andersen -- Rewritten C++ domain * Henrique Bastos -- SVG support for graphviz extension * Daniel Bültmann -- todo extension +* Jean-François Burnol -- LaTeX improvements * Etienne Desautels -- apidoc module * Michael Droettboom -- inheritance_diagram extension * Charles Duffy -- original graphviz extension * Kevin Dunn -- MathJax extension * Josip Dzolonga -- coverage builder +* Buck Evan -- dummy builder * Hernan Grecco -- search improvements * Horst Gutmann -- internationalization support * Martin Hans -- autodoc improvements * Doug Hellmann -- graphviz improvements -* Timotheus Kampik - stop words language fix -* Takeshi Komiya -- numref feature +* Timotheus Kampik - JS theme & search enhancements * Dave Kuhlman -- original LaTeX writer * Blaise Laflamme -- pyramid theme * Thomas Lamb -- linkcheck builder @@ -40,24 +42,31 @@ Other contributors, listed alphabetically, are: * Martin Mahner -- nature theme * Will Maier -- directory HTML builder * Jacob Mason -- websupport library (GSOC project) +* Glenn Matthews -- python domain signature improvements * Roland Meister -- epub builder * Ezio Melotti -- collapsible sidebar JavaScript +* Bruce Mitchener -- Minor epub improvement * Daniel Neuhäuser -- JavaScript domain, Python 3 support (GSOC) * Christopher Perkins -- autosummary integration * Benjamin Peterson -- unittests -* T. Powers -- HTML output improvements +* \T. Powers -- HTML output improvements * Jeppe Pihl -- literalinclude improvements * Rob Ruana -- napoleon extension * Stefan Seefeld -- toctree improvements -* Shibukawa Yoshiki -- pluggable search API and Japanese search +* Gregory Szorc -- performance improvements +* Shibukawa Yoshiki -- pluggable search API and Japanese search, epub3 builder improvements +* Taku Shimizu -- epub3 builder * Antonio Valentino -- qthelp builder +* Filip Vavera -- napoleon todo directive * Pauli Virtanen -- autodoc improvements, autosummary extension * Stefan van der Walt -- autosummary extension * Thomas Waldmann -- apidoc module fixes * John Waltman -- Texinfo builder * Barry Warsaw -- setup command improvements * Sebastian Wiesner -- image handling, distutils support +* Michael Wilson -- Intersphinx HTTP basic auth support * Joel Wurtz -- cellspanning support in LaTeX +* Hong Xu -- svg support in imgmath extension and various bug fixes Many thanks for all contributions! diff --git a/CHANGES b/CHANGES index a0ac757d36f..0cf91ff7572 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,4 @@ -Release 1.4 (in development) +Release 1.6 (in development) ============================ Incompatible changes @@ -7,13 +7,877 @@ Incompatible changes Features added -------------- +* #3136: Add ``:name:`` option to the directives in ``sphinx.ext.graphviz`` + +Bugs fixed +---------- + +Release 1.5 (released Dec 5, 2016) +================================== + +Incompatible changes +-------------------- + +1.5a1 + +* latex, package fancybox is not longer a dependency of sphinx.sty +* Use ``'locales'`` as a default value of `locale_dirs` +* latex, package ifthen is not any longer a dependency of sphinx.sty +* latex, style file does not modify fancyvrb's Verbatim (also available as + OriginalVerbatim) but uses sphinxVerbatim for name of custom wrapper. +* latex, package newfloat is no longer a dependency of sphinx.sty (ref #2660; + it was shipped with Sphinx since 1.3.4). +* latex, literal blocks in tables do not use OriginalVerbatim but + sphinxVerbatimintable which handles captions and wraps lines(ref #2704). +* latex, replace ``pt`` by TeX equivalent ``bp`` if found in ``width`` or + ``height`` attribute of an image. +* latex, if ``width`` or ``height`` attribute of an image is given with no unit, + use ``px`` rather than ignore it. +* latex: Separate stylesheets of pygments to independent .sty file +* #2454: The filename of sourcelink is now changed. The value of + `html_sourcelink_suffix` will be appended to the original filename (like + ``index.rst.txt``). +* ``sphinx.util.copy_static_entry()`` is now deprecated. + Use ``sphinx.util.fileutil.copy_asset()`` instead. +* ``sphinx.util.osutil.filecopy()`` skips copying if the file has not been changed + (ref: #2510, #2753) +* Internet Explorer 6-8, Opera 12.1x or Safari 5.1+ support is dropped + because jQuery version is updated from 1.11.0 to 3.1.0 (ref: #2634, #2773) +* QtHelpBuilder doens't generate search page (ref: #2352) +* QtHelpBuilder uses ``nonav`` theme instead of default one + to improve readability. +* latex: To provide good default settings to Japanese docs, Sphinx uses ``jsbooks`` + as a docclass by default if the ``language`` is ``ja``. +* latex: To provide good default settings to Japanese docs, Sphinx uses + ``jreport`` and ``jsbooks`` as a docclass by default if the ``language`` is + ``ja``. +* ``sphinx-quickstart`` now allows a project version is empty +* Fix :download: role on epub/qthelp builder. They ignore the role because they don't support it. +* ``sphinx.ext.viewcode`` doesn't work on epub building by default. ``viewcode_enable_epub`` option +* ``sphinx.ext.viewcode`` disabled on singlehtml builder. +* Use make-mode of ``sphinx-quickstart`` by default. To disable this, use + ``-M`` option +* Fix ``genindex.html``, Sphinx's document template, link address to itself to satisfy xhtml standard. +* Use epub3 builder by default. And the old epub builder is renamed to epub2. +* Fix ``epub`` and ``epub3`` builders that contained links to ``genindex`` even if ``epub_use_index = False``. +* `html_translator_class` is now deprecated. + Use `Sphinx.set_translator()` API instead. +* Drop python 2.6 and 3.3 support +* Drop epub3 builder's ``epub3_page_progression_direction`` option (use ``epub3_writing_mode``). +* #2877: Rename ``latex_elements['footer']`` to + ``latex_elements['atendofbody']`` + +1.5a2 + +* #2983: Rename ``epub3_description`` and ``epub3_contributor`` to + ``epub_description`` and ``epub_contributor``. +* Remove themes/basic/defindex.html; no longer used +* Sphinx does not ship anymore (but still uses) LaTeX style file ``fncychap`` +* #2435: Slim down quickstarted conf.py +* The ``sphinx.sty`` latex package does not load itself "hyperref", as this + is done later in the preamble of the latex output via ``'hyperref'`` key. +* Sphinx does not ship anymore a custom modified LaTeX style file ``tabulary``. + The non-modified package is used. +* #3057: By default, footnote marks in latex PDF output are not preceded by a + space anymore, ``\sphinxBeforeFootnote`` allows user customization if needed. + +1.5 final + +* #2986: ``themes/basic/defindex.html`` is now deprecated +* Emit warnings that will be deprecated in Sphinx 1.6 by default. + Users can change the behavior by setting the environment variable + PYTHONWARNINGS. Please refer :ref:`when-deprecation-warnings-are-displayed`. + +Deprecated +---------- + +These features are removed in Sphinx-1.6: + +* LDML format support in i18n feature +* ``sphinx.addnodes.termsep`` +* Some functions and classes in ``sphinx.util.pycompat``: + ``zip_longest``, ``product``, ``all``, ``any``, ``next``, ``open``, + ``class_types``, ``base_exception``, ``relpath``, ``StringIO``, ``BytesIO``. + Please use the standard library version instead; + +If any deprecation warning like ``RemovedInSphinxXXXWarning`` are displayed, +please refer :ref:`when-deprecation-warnings-are-displayed`. + +Features added +-------------- + +1.5a1 + +* #2951: Add ``--implicit-namespaces`` PEP-0420 support to apidoc. +* Add ``:caption:`` option for sphinx.ext.inheritance_diagram. +* #2471: Add config variable for default doctest flags. +* Convert linkcheck builder to requests for better encoding handling +* #2463, #2516: Add keywords of "meta" directive to search index +* ``:maxdepth:`` option of toctree affects ``secnumdepth`` (ref: #2547) +* #2575: Now ``sphinx.ext.graphviz`` allows ``:align:`` option +* Show warnings if unknown key is specified to `latex_elements` +* Show warnings if no domains match with `primary_domain` (ref: #2001) +* C++, show warnings when the kind of role is misleading for the kind + of target it refers to (e.g., using the `class` role for a function). +* latex, writer abstracts more of text styling into customizable macros, e.g. + the ``visit_emphasis`` will output ``\sphinxstyleemphasis`` rather than + ``\emph`` (which may be in use elsewhere or in an added LaTeX package). See + list at end of ``sphinx.sty`` (ref: #2686) +* latex, public names for environments and parameters used by note, warning, + and other admonition types, allowing full customizability from the + ``'preamble'`` key or an input file (ref: feature request #2674, #2685) +* latex, better computes column widths of some tables (as a result, there will + be slight changes as tables now correctly fill the line width; ref: #2708) +* latex, sphinxVerbatim environment is more easily customizable (ref: #2704). + In addition to already existing VerbatimColor and VerbatimBorderColor: + + - two lengths ``\sphinxverbatimsep`` and ``\sphinxverbatimborder``, + - booleans ``\ifsphinxverbatimwithframe`` and ``\ifsphinxverbatimwrapslines``. + +* latex, captions for literal blocks inside tables are handled, and long code + lines wrapped to fit table cell (ref: #2704) +* #2597: Show warning messages as darkred +* latex, allow image dimensions using px unit (default is 96px=1in) +* Show warnings if invalid dimension units found +* #2650: Add ``--pdb`` option to setup.py command +* latex, make the use of ``\small`` for code listings customizable (ref #2721) +* #2663: Add ``--warning-is-error`` option to setup.py command +* Show warnings if deprecated latex options are used +* Add sphinx.config.ENUM to check the config values is in candidates +* math: Add hyperlink marker to each equations in HTML output +* Add new theme ``nonav`` that doesn't include any navigation links. + This is for any help generator like qthelp. +* #2680: `sphinx.ext.todo` now emits warnings if `todo_emit_warnings` enabled. + Also, it emits an additional event named `todo-defined` to handle the TODO + entries in 3rd party extensions. +* Python domain signature parser now uses the xref mixin for 'exceptions', + allowing exception classes to be autolinked. +* #2513: Add `latex_engine` to switch the LaTeX engine by conf.py +* #2682: C++, basic support for attributes (C++11 style and GNU style). + The new configuration variables 'cpp_id_attributes' and 'cpp_paren_attributes' + can be used to introduce custom attributes. +* #1958: C++, add configuration variable 'cpp_index_common_prefix' for removing + prefixes from the index text of C++ objects. +* C++, added concept directive. Thanks to mickk-on-cpp. +* C++, added support for template introduction syntax. Thanks to mickk-on-cpp. +* #2725: latex builder: allow to use user-defined template file (experimental) +* apidoc now avoids invalidating cached files by not writing to files whose + content doesn't change. This can lead to significant performance wins if + apidoc is run frequently. +* #2851: ``sphinx.ext.math`` emits missing-reference event if equation not found +* #1210: ``eqref`` role now supports cross reference +* #2892: Added ``-a`` (``--append-syspath``) option to ``sphinx-apidoc`` +* #1604: epub3 builder: Obey font-related CSS when viewing in iBooks. +* #646: ``option`` directive support '.' character as a part of options +* Add document about kindlegen and fix document structure for it. +* #2474: Add ``intersphinx_timeout`` option to ``sphinx.ext.intersphinx`` +* #2926: EPUB3 builder supports vertical mode (``epub3_writing_mode`` option) +* #2695: ``build_sphinx`` subcommand for setuptools handles exceptions as same + as ``sphinx-build`` does +* #326: `numref` role can also refer sections +* #2916: `numref` role can also refer caption as an its linktext + +1.5a2 + +* #3008: ``linkcheck`` builder ignores self-signed certificate URL +* #3020: new ``'geometry'`` key to ``latex_elements`` whose default uses + LaTeX style file ``geometry.sty`` to set page layout +* #2843: Add :start-at: and :end-at: options to literalinclude directive +* #2527: Add ``:reversed:`` option to toctree directive +* Add ``-t`` and ``-d`` option to ``sphinx-quickstart`` to support templating + generated sphinx project. +* #3028: Add ``{path}`` and ``{basename}`` to the format of + ``figure_language_filename`` +* new ``'hyperref'`` key in the ``latex_elements`` dictionary (ref #3030) +* #3022: Allow code-blocks in footnotes for LaTeX PDF output + +1.5b1 + +* #2513: A better default settings for XeLaTeX +* #3096: ``'maxlistdepth'`` key to work around LaTeX list limitations +* #3060: autodoc supports documentation for attributes of Enum class. Now autodoc render + just the value of Enum attributes instead of Enum attribute representation. +* Add ``--extensions`` to ``sphinx-quickstart`` to support enable arbitrary + extensions from command line (ref: #2904) +* #3104, #3122: ``'sphinxsetup'`` for key=value styling of Sphinx LaTeX +* #3071: Autodoc: Allow mocked module decorators to pass-through functions + unchanged +* #2495: linkcheck: Allow skipping anchor checking using + :confval:`linkcheck_anchors_ignore` +* #3083: let Unicode no-break space act like LaTeX ``~`` (fixed #3019) +* #3116: allow word wrap in PDF output for inline literals (ref #3110) +* #930: sphinx-apidoc allow wildcards for excluding paths. Thanks to Nick Coghlan. +* #3121: add ``inlineliteralwraps`` option to control if inline literal + word-wraps in latex + +1.5 final + +* #3095: Add :confval:`tls_verify` and :confval:`tls_cacerts` to support + self-signed HTTPS servers in linkcheck and intersphinx +* #2215: make.bat generated by sphinx-quickstart can be called from another dir. + Thanks to Timotheus Kampik. +* #3185: Add new warning type ``misc.highlighting_failure`` + +Bugs fixed +---------- + +1.5a1 + +* #2707: (latex) the column width is badly computed for tabular +* #2799: Sphinx installs roles and directives automatically on importing sphinx + module. Now Sphinx installs them on running application. +* `sphinx.ext.autodoc` crashes if target code imports * from mock modules + by `autodoc_mock_imports`. +* #1953: ``Sphinx.add_node`` does not add handlers the translator installed by + `html_translator_class` +* #1797: text builder inserts blank line on top +* #2894: quickstart main() doesn't use argv argument +* #2874: gettext builder could not extract all text under the ``only`` + directives +* #2485: autosummary crashes with multiple source_suffix values +* #1734: Could not translate the caption of toctree directive +* Could not translate the content of meta directive (ref: #1734) +* #2550: external links are opened in help viewer +* #2687: Running Sphinx multiple times produces 'already registered' warnings + +1.5a2 + +* #2810: Problems with pdflatex in an Italian document +* Use ``latex_elements.papersize`` to specify papersize of LaTeX in Makefile +* #2988: linkcheck: retry with GET request if denied HEAD request +* #2990: linkcheck raises "Can't convert 'bytes' object to str implicitly" error + if linkcheck_anchors enabled +* #3004: Invalid link types "top" and "up" are used +* #3009: Bad rendering of parsed-literals in LaTeX since Sphinx 1.4.4 +* #3000: ``option`` directive generates invalid HTML anchors +* #2984: Invalid HTML has been generated if `html_split_index` enabled +* #2986: themes/basic/defindex.html should be changed for html5 friendly +* #2987: Invalid HTML has been generated if multiple IDs are assigned to a list +* #2891: HTML search does not provide all the results +* #1986: Title in PDF Output +* #147: Problem with latex chapter style +* #3018: LaTeX problem with page layout dimensions and chapter titles +* Fix an issue with ``\pysigline`` in LaTeX style file (ref #3023) +* #3038: ``sphinx.ext.math*`` raises TypeError if labels are duplicated +* #3031: incompatibility with LaTeX package ``tocloft`` +* #3003: literal blocks in footnotes are not supported by Latex +* #3047: spacing before footnote in pdf output is not coherent and allows breaks +* #3045: HTML search index creator should ignore "raw" content if now html +* #3039: English stemmer returns wrong word if the word is capitalized +* Fix make-mode Makefile template (ref #3056, #2936) + +1.5b1 + +* #2432: Fix unwanted * between varargs and keyword only args. Thanks to Alex Grönholm. +* #3062: Failed to build PDF using 1.5a2 (undefined ``\hypersetup`` for + Japanese documents since PR#3030) +* Better rendering of multiline signatures in html. +* #777: LaTeX output "too deeply nested" (ref #3096) +* Let LaTeX image inclusion obey ``scale`` before textwidth fit (ref #2865, #3059) +* #3019: LaTeX fails on description of C function with arguments (ref #3083) +* fix latex inline literals where ``< > -`` gobbled a space + +1.5 final + +* #3069: Even if ``'babel'`` key is set to empty string, LaTeX output contains + one ``\addto\captions...`` +* #3123: user ``'babel'`` key setting is not obeyed anymore +* #3155: Fix JavaScript for `html_sourcelink_suffix` fails with IE and Opera +* #3085: keep current directory after breaking build documentation. Thanks to + Timotheus Kampik. +* #3181: pLaTeX crashes with a section contains endash +* #3180: latex: add stretch/shrink between successive singleline or + multipleline cpp signatures (ref #3072) +* #3128: globing images does not support .svgz file +* #3015: fix a broken test on Windows. +* #1843: Fix documentation of descriptor classes that have a custom metaclass. + Thanks to Erik Bray. +* #3190: util.split_docinfo fails to parse multi-line field bodies +* #3024, #3037: In Python3, application.Sphinx._log crushed when the log message cannot + be encoded into console encoding. + +Testing +-------- + +* To simplify, sphinx uses external mock package even if unittest.mock exists. + + +Release 1.4.9 (released Nov 23, 2016) +===================================== + +Bugs fixed +---------- + +* #2936: Fix doc/Makefile that can't build man because doc/man exists +* #3058: Using the same 'caption' attribute in multiple 'toctree' directives + results in warning / error +* #3068: Allow the '=' character in the -D option of sphinx-build.py +* #3074: ``add_source_parser()`` crashes in debug mode +* #3135: ``sphinx.ext.autodoc`` crashes with plain Callable +* #3150: Fix query word splitter in JavaScript. It behaves as same as Python's regular expression. +* #3093: gettext build broken on substituted images. +* #3093: gettext build broken on image node under ``note`` directive. +* imgmath: crashes on showing error messages if image generation failed +* #3117: LaTeX writer crashes if admonition is placed before first section title +* #3164: Change search order of ``sphinx.ext.inheritance_diagram`` + +Release 1.4.8 (released Oct 1, 2016) +==================================== + +Bugs fixed +---------- + +* #2996: The wheel package of Sphinx got crash with ImportError + +Release 1.4.7 (released Oct 1, 2016) +==================================== + +Bugs fixed +---------- + +* #2890: Quickstart should return an error consistently on all error conditions +* #2870: flatten genindex columns' heights. +* #2856: Search on generated HTML site doesnt find some symbols +* #2882: Fall back to a GET request on 403 status in linkcheck +* #2902: jsdump.loads fails to load search index if keywords starts with + underscore +* #2900: Fix epub content.opf: add auto generated orphan files to spine. +* #2899: Fix ``hasdoc()`` function in Jinja2 template. It can detect ``genindex``, ``search`` collectly. +* #2901: Fix epub result: skip creating links from image tags to original image files. +* #2917: inline code is hyphenated on HTML +* #1462: autosummary warns for namedtuple with attribute with trailing underscore +* Could not reference equations if ``:nowrap:`` option specified +* #2873: code-block overflow in latex (due to commas) +* #1060, #2056: sphinx.ext.intersphinx: broken links are generated if relative + paths are used in `intersphinx_mapping` +* #2931: code-block directive with same :caption: causes warning of duplicate + target. Now `code-block` and `literalinclude` does not define hyperlink + target using its caption automatially. +* #2962: latex: missing label of longtable +* #2968: autodoc: show-inheritance option breaks docstrings + +Release 1.4.6 (released Aug 20, 2016) +===================================== + +Incompatible changes +-------------------- + +* #2867: linkcheck builder crashes with six-1.4. Now Sphinx depends on six-1.5 or + later + +Bugs fixed +---------- + +* applehelp: Sphinx crashes if ``hiutil`` or ``codesign`` commands not found +* Fix ``make clean`` abort issue when build dir contains regular files like ``DS_Store``. +* Reduce epubcheck warnings/errors: + + * Fix DOCTYPE to html5 + * Change extension from .html to .xhtml. + * Disable search page on epub results + +* #2778: Fix autodoc crashes if obj.__dict__ is a property method and raises exception +* Fix duplicated toc in epub3 output. +* #2775: Fix failing linkcheck with servers not supporting identidy encoding +* #2833: Fix formatting instance annotations in ext.autodoc. +* #1911: ``-D`` option of ``sphinx-build`` does not override the ``extensions`` variable +* #2789: `sphinx.ext.intersphinx` generates wrong hyperlinks if the inventory is given +* parsing errors for caption of code-blocks are displayed in document (ref: #2845) +* #2846: ``singlehtml`` builder does not include figure numbers +* #2816: Fix data from builds cluttering the ``Domain.initial_data`` class attributes + +Release 1.4.5 (released Jul 13, 2016) +===================================== + +Incompatible changes +-------------------- + +* latex, inclusion of non-inline images from image directive resulted in + non-coherent whitespaces depending on original image width; new behaviour + by necessity differs from earlier one in some cases. (ref: #2672) +* latex, use of ``\includegraphics`` to refer to Sphinx custom variant is + deprecated; in future it will revert to original LaTeX macro, custom one + already has alternative name ``\sphinxincludegraphics``. + +Features added +-------------- + +* new config option ``latex_keep_old_macro_names``, defaults to True. If False, + lets macros (for text styling) be defined only with ``\sphinx``-prefixed names. +* latex writer allows user customization of "shadowed" boxes (topics), via + three length variables. +* woff-format web font files now supported by the epub builder. + +Bugs fixed +---------- + +* jsdump fix for python 3: fixes the HTML search on python > 3 +* #2676: (latex) Error with verbatim text in captions since Sphinx 1.4.4 +* #2629: memoir class crashes LaTeX. Fixed ``by latex_keep_old_macro_names=False`` (ref 2675) +* #2684: `sphinx.ext.intersphinx` crashes with six-1.4.1 +* #2679: ``float`` package needed for ``'figure_align': 'H'`` latex option +* #2671: image directive may lead to inconsistent spacing in pdf +* #2705: ``toctree`` generates empty bullet_list if ``:titlesonly:`` specified +* #2479: `sphinx.ext.viewcode` uses python2 highlighter by default +* #2700: HtmlHelp builder has hard coded index.html +* latex, since 1.4.4 inline literal text is followed by spurious space +* #2722: C++, fix id generation for var/member declarations to include namespaces. +* latex, images (from image directive) in lists or quoted blocks did not obey + indentation (fixed together with #2671) +* #2733: since Sphinx-1.4.4 ``make latexpdf`` generates lots of hyperref warnings +* #2731: `sphinx.ext.autodoc` does not access propertymethods which raises any + exceptions +* #2666: C++, properly look up nested names involving constructors. +* #2579: Could not refer a label including both spaces and colons via + `sphinx.ext.intersphinx` +* #2718: Sphinx crashes if the document file is not readable +* #2699: hyperlinks in help HTMLs are broken if `html_file_suffix` is set +* #2723: extra spaces in latex pdf output from multirow cell +* #2735: latexpdf ``Underfull \hbox (badness 10000)`` warnings from title page +* #2667: latex crashes if resized images appeared in section title +* #2763: (html) Provide default value for required ``alt`` attribute for image + tags of SVG source, required to validate and now consistent w/ other formats. + + +Release 1.4.4 (released Jun 12, 2016) +===================================== + +Bugs fixed +---------- + +* #2630: Latex sphinx.sty Notice Enviroment formatting problem +* #2632: Warning directives fail in quote environment latex build +* #2633: Sphinx crashes with old styled indices +* Fix a ``\begin{\minipage}`` typo in sphinx.sty from 1.4.2 (ref: 68becb1) +* #2622: Latex produces empty pages after title and table of contents +* #2640: 1.4.2 LaTeX crashes if code-block inside warning directive +* Let LaTeX use straight quotes also in inline code (ref #2627) +* #2351: latex crashes if enumerated lists are placed on footnotes +* #2646: latex crashes if math contains twice empty lines +* #2480: `sphinx.ext.autodoc`: memory addresses were shown +* latex: allow code-blocks appearing inside lists and quotes at maximal nesting + depth (ref #777, #2624, #2651) +* #2635: Latex code directives produce inconsistent frames based on viewing + resolution +* #2639: Sphinx now bundles iftex.sty +* Failed to build PDF with framed.sty 0.95 +* Sphinx now bundles needspace.sty + + +Release 1.4.3 (released Jun 5, 2016) +==================================== + +Bugs fixed +---------- + +* #2530: got "Counter too large" error on building PDF if large numbered + footnotes existed in admonitions +* ``width`` option of figure directive does not work if ``align`` option specified at same time (ref: #2595) +* #2590: The ``inputenc`` package breaks compiling under lualatex and xelatex +* #2540: date on latex front page use different font +* Suppress "document isn't included in any toctree" warning if the document is included (ref: #2603) +* #2614: Some tables in PDF output will end up shifted if user sets non zero + \parindent in preamble +* #2602: URL redirection breaks the hyperlinks generated by `sphinx.ext.intersphinx` +* #2613: Show warnings if merged extensions are loaded +* #2619: make sure amstext LaTeX package always loaded (ref: d657225, 488ee52, + 9d82cad and #2615) +* #2593: latex crashes if any figures in the table + + +Release 1.4.2 (released May 29, 2016) +===================================== + +Features added +-------------- + +* Now :confval:`suppress_warnings` accepts following configurations (ref: #2451, #2466): + + - ``app.add_node`` + - ``app.add_directive`` + - ``app.add_role`` + - ``app.add_generic_role`` + - ``app.add_source_parser`` + - ``image.data_uri`` + - ``image.nonlocal_uri`` + +* #2453: LaTeX writer allows page breaks in topic contents; and their + horizontal extent now fits in the line width (with shadow in margin). Also + warning-type admonitions allow page breaks and their vertical spacing has + been made more coherent with the one for hint-type notices (ref #2446). + +* #2459: the framing of literal code-blocks in LaTeX output (and not only the + code lines themselves) obey the indentation in lists or quoted blocks. + +* #2343: the long source lines in code-blocks are wrapped (without modifying + the line numbering) in LaTeX output (ref #1534, #2304). + +Bugs fixed +---------- + +* #2370: the equations are slightly misaligned in LaTeX writer +* #1817, #2077: suppress pep8 warnings on conf.py generated by sphinx-quickstart +* #2407: building docs crash if document includes large data image URIs +* #2436: Sphinx does not check version by :confval:`needs_sphinx` if loading extensions failed +* #2397: Setup shorthandoff for turkish documents +* #2447: VerbatimBorderColor wrongly used also for captions of PDF +* #2456: C++, fix crash related to document merging (e.g., singlehtml and Latex builders). +* #2446: latex(pdf) sets local tables of contents (or more generally topic + nodes) in unbreakable boxes, causes overflow at bottom +* #2476: Omit MathJax markers if :nowrap: is given +* #2465: latex builder fails in case no caption option is provided to toctree directive +* Sphinx crashes if self referenced toctree found +* #2481: spelling mistake for mecab search splitter. Thanks to Naoki Sato. +* #2309: Fix could not refer "indirect hyperlink targets" by ref-role +* intersphinx fails if mapping URL contains any port +* #2088: intersphinx crashes if the mapping URL requires basic auth +* #2304: auto line breaks in latexpdf codeblocks +* #1534: Word wrap long lines in Latex verbatim blocks +* #2460: too much white space on top of captioned literal blocks in PDF output +* Show error reason when multiple math extensions are loaded (ref: #2499) +* #2483: any figure number was not assigned if figure title contains only non text objects +* #2501: Unicode subscript numbers are normalized in LaTeX +* #2492: Figure directive with :figwidth: generates incorrect Latex-code +* The caption of figure is always put on center even if ``:align:`` was specified +* #2526: LaTeX writer crashes if the section having only images +* #2522: Sphinx touches mo files under installed directory that caused permission error. +* #2536: C++, fix crash when an immediately nested scope has the same name as the current scope. +* #2555: Fix crash on any-references with unicode. +* #2517: wrong bookmark encoding in PDF if using LuaLaTeX +* #2521: generated Makefile causes BSD make crashed if sphinx-build not found +* #2470: ``typing`` backport package causes autodoc errors with python 2.7 +* ``sphinx.ext.intersphinx`` crashes if non-string value is used for key of `intersphinx_mapping` +* #2518: `intersphinx_mapping` disallows non alphanumeric keys +* #2558: unpack error on devhelp builder +* #2561: Info builder crashes when a footnote contains a link +* #2565: The descriptions of objects generated by ``sphinx.ext.autosummary`` overflow lines at LaTeX writer +* Extend pdflatex config in sphinx.sty to subparagraphs (ref: #2551) +* #2445: `rst_prolog` and `rst_epilog` affect to non reST sources +* #2576: ``sphinx.ext.imgmath`` crashes if subprocess raises error +* #2577: ``sphinx.ext.imgmath``: Invalid argument are passed to dvisvgm +* #2556: Xapian search does not work with Python 3 +* #2581: The search doesn't work if language="es" (spanish) +* #2382: Adjust spacing after abbreviations on figure numbers in LaTeX writer +* #2383: The generated footnote by `latex_show_urls` overflows lines +* #2497, #2552: The label of search button does not fit for the button itself + + +Release 1.4.1 (released Apr 12, 2016) +===================================== + +Incompatible changes +-------------------- + +* The default format of `today_fmt` and `html_last_updated_fmt` is back to + strftime format again. Locale Date Markup Language is also supported for + backward compatibility until Sphinx-1.5. + +Translations +------------ + +* Added Welsh translation, thanks to Geraint Palmer. +* Added Greek translation, thanks to Stelios Vitalis. +* Added Esperanto translation, thanks to Dinu Gherman. +* Added Hindi translation, thanks to Purnank H. Ghumalia. +* Added Romanian translation, thanks to Razvan Stefanescu. + +Bugs fixed +---------- + +* C++, added support for ``extern`` and ``thread_local``. +* C++, type declarations are now using the prefixes ``typedef``, ``using``, and ``type``, + depending on the style of declaration. +* #2413: C++, fix crash on duplicate declarations +* #2394: Sphinx crashes when html_last_updated_fmt is invalid +* #2408: dummy builder not available in Makefile and make.bat +* #2412: hyperlink targets are broken in LaTeX builder +* figure directive crashes if non paragraph item is given as caption +* #2418: time formats no longer allowed in today_fmt +* #2395: Sphinx crashes if unicode character in image filename +* #2396: "too many values to unpack" in genindex-single +* #2405: numref link in PDF jumps to the wrong location +* #2414: missing number in PDF hyperlinks to code listings +* #2440: wrong import for gmtime. Thanks to Uwe L. Korn. + + +Release 1.4 (released Mar 28, 2016) +=================================== + +Incompatible changes +-------------------- +* Drop ``PorterStemmer`` package support. Use ``PyStemmer`` instead of ``PorterStemmer`` + to accelerate stemming. +* sphinx_rtd_theme has become optional. Please install it manually. + Refs #2087, #2086, #1845 and #2097. Thanks to Victor Zverovich. +* #2231: Use DUrole instead of DUspan for custom roles in LaTeX writer. It enables to take + title of roles as an argument of custom macros. +* #2022: 'Thumbs.db' and '.DS_Store' are added to `exclude_patterns` default values in + conf.py that will be provided on sphinx-quickstart. +* #2027, #2208: The ``html_title`` accepts string values only. And The None value cannot be + accepted. +* ``sphinx.ext.graphviz``: show graph image in inline by default +* #2060, #2224: The ``manpage`` role now generate ``sphinx.addnodes.manpage`` node instead + of ``sphinx.addnodes.literal_emphasis`` node. +* #2022: :confval:`html_extra_path` also copies dotfiles in the extra directory, and + refers to :confval:`exclude_patterns` to exclude extra files and directories. +* #2300: enhance autoclass:: to use the docstring of __new__ if __init__ method's is missing + of empty +* #2251: Previously, under glossary directives, multiple terms for one definition are + converted into single ``term`` node and the each terms in the term node are separated + by ``termsep`` node. In new implementation, each terms are converted into individual + ``term`` nodes and ``termsep`` node is removed. + By this change, output layout of every builders are changed a bit. +* The default highlight language is now Python 3. This means that source code + is highlighted as Python 3 (which is mostly a superset of Python 2), and no + parsing is attempted to distinguish valid code. To get the old behavior back, + add ``highlight_language = "python"`` to conf.py. +* `Locale Date Markup Language + `_ like + ``"MMMM dd, YYYY"`` is default format for `today_fmt` and `html_last_updated_fmt`. + However strftime format like ``"%B %d, %Y"`` is also supported for backward + compatibility until Sphinx-1.5. Later format will be disabled from Sphinx-1.5. +* #2327: `latex_use_parts` is deprecated now. Use `latex_toplevel_sectioning` instead. +* #2337: Use ``\url{URL}`` macro instead of ``\href{URL}{URL}`` in LaTeX writer. +* #1498: manpage writer: don't make whole of item in definition list bold if it includes strong node. +* #582: Remove hint message from quick search box for html output. +* #2378: Sphinx now bundles newfloat.sty + +Features added +-------------- +* #2092: add todo directive support in napoleon package. * #1962: when adding directives, roles or nodes from an extension, warn if such an element is already present (built-in or added by another extension). -* #1935: Make "numfig_format" overridable in latex_elements. * #1909: Add "doc" references to Intersphinx inventories. -* C++ type alias support (e.g., ``.. type:: T = int``) +* C++ type alias support (e.g., ``.. type:: T = int``). * C++ template support for classes, functions, type aliases, and variables (#1729, #1314). * C++, added new scope management directives ``namespace-push`` and ``namespace-pop``. +* #1970: Keyboard shortcuts to navigate Next and Previous topics +* Intersphinx: Added support for fetching Intersphinx inventories with URLs + using HTTP basic auth. +* C++, added support for template parameter in function info field lists. +* C++, added support for pointers to member (function). +* #2113: Allow ``:class:`` option to code-block directive. +* #2192: Imgmath (pngmath with svg support). +* #2200: Support XeTeX and LuaTeX for the LaTeX builder. +* #1906: Use xcolor over color for \fcolorbox where available for LaTeX output. +* #2216: Texinputs makefile improvements. +* #2170: Support for Chinese language search index. +* #2214: Add sphinx.ext.githubpages to publish the docs on GitHub Pages +* #1030: Make page reference names for latex_show_pagerefs translatable +* #2162: Add Sphinx.add_source_parser() to add source_suffix and source_parsers from extension +* #2207: Add sphinx.parsers.Parser class; a base class for new parsers +* #656: Add ``graphviz_dot`` option to graphviz directives to switch the ``dot`` command +* #1939: Added the ``dummy`` builder: syntax check without output. +* #2230: Add ``math_number_all`` option to number all displayed math in math extensions +* #2235: ``needs_sphinx`` supports micro version comparison +* #2282: Add "language" attribute to html tag in the "basic" theme +* #1779: Add EPUB 3 builder +* #1751: Add :confval:`todo_link_only` to avoid file path and line indication on + :rst:dir:`todolist`. Thanks to Francesco Montesano. +* #2199: Use ``imagesize`` package to obtain size of images. +* #1099: Add configurable retries to the linkcheck builder. Thanks to Alex Gaynor. + Also don't check anchors starting with ``!``. +* #2300: enhance autoclass:: to use the docstring of __new__ if __init__ method's is missing + of empty +* #1858: Add Sphinx.add_enumerable_node() to add enumerable nodes for numfig feature +* #1286, #2099: Add ``sphinx.ext.autosectionlabel`` extension to allow reference + sections using its title. Thanks to Tadhg O'Higgins. +* #1854: Allow to choose Janome for Japanese splitter. +* #1853: support custom text splitter on html search with ``language='ja'``. +* #2320: classifier of glossary terms can be used for index entries grouping key. + The classifier also be used for translation. See also :ref:`glossary-directive`. +* #2308: Define ``\tablecontinued`` macro to redefine the style of continued label for + longtables. +* Select an image by similarity if multiple images are globbed by ``.. image:: filename.*`` +* #1921: Support figure substitutions by :confval:`language` and :confval:`figure_language_filename` +* #2245: Add ``latex_elements["passoptionstopackages"]`` option to call PassOptionsToPackages + in early stage of preambles. +* #2340: Math extension: support alignment of multiple equations for MathJAX. +* #2338: Define ``\titleref`` macro to redefine the style of ``title-reference`` roles. +* Define ``\menuselection`` and ``\accelerator`` macros to redefine the style of `menuselection` roles. +* Define ``\crossref`` macro to redefine the style of references +* #2301: Texts in the classic html theme should be hyphenated. +* #2355: Define ``\termref`` macro to redefine the style of ``term`` roles. +* Add :confval:`suppress_warnings` to suppress arbitrary warning message (experimental) +* #2229: Fix no warning is given for unknown options +* #2327: Add `latex_toplevel_sectioning` to switch the top level sectioning of LaTeX document. + +Bugs fixed +---------- +* #1913: C++, fix assert bug for enumerators in next-to-global and global scope. +* C++, fix parsing of 'signed char' and 'unsigned char' as types. +* C++, add missing support for 'friend' functions. +* C++, add missing support for virtual base classes (thanks to Rapptz). +* C++, add support for final classes. +* C++, fix parsing of types prefixed with 'enum'. +* #2023: Dutch search support uses Danish stemming info. +* C++, add support for user-defined literals. +* #1804: Now html output wraps overflowed long-line-text in the sidebar. Thanks to + Hassen ben tanfous. +* #2183: Fix porterstemmer causes ``make json`` to fail. +* #1899: Ensure list is sent to OptParse. +* #2164: Fix wrong check for pdftex inside sphinx.sty (for graphicx package option). +* #2165, #2218: Remove faulty and non-need conditional from sphinx.sty. +* Fix broken LaTeX code is generated if unknown language is given +* #1944: Fix rst_prolog breaks file-wide metadata +* #2074: make gettext should use canonical relative paths for .pot. Thanks to + anatoly techtonik. +* #2311: Fix sphinx.ext.inheritance_diagram raises AttributeError +* #2251: Line breaks in .rst files are transferred to .pot files in a wrong way. +* #794: Fix date formatting in latex output is not localized +* Remove ``image/gif`` from supported_image_types of LaTeX writer (#2272) +* Fix ValueError is raised if LANGUAGE is empty string +* Fix unpack warning is shown when the directives generated from ``Sphinx.add_crossref_type`` is used +* The default highlight language is now ``default``. This means that source code + is highlighted as Python 3 (which is mostly a superset of Python 2) if possible. + To get the old behavior back, add ``highlight_language = "python"`` to conf.py. +* #2329: Refresh environment forcely if source directory has changed. +* #2331: Fix code-blocks are filled by block in dvi; remove ``xcdraw`` option from + xcolor package +* Fix the confval type checker emits warnings if unicode is given to confvals which expects string value +* #2360: Fix numref in LaTeX output is broken +* #2361: Fix additional paragraphs inside the "compound" directive are indented +* #2364: Fix KeyError 'rootSymbol' on Sphinx upgrade from older version. +* #2348: Move amsmath and amssymb to before fontpkg on LaTeX writer. +* #2368: Ignore emacs lock files like ``.#foo.rst`` by default. +* #2262: literal_block and its caption has been separated by pagebreak in LaTeX output. +* #2319: Fix table counter is overrided by code-block's in LaTeX. Thanks to jfbu. +* Fix unpack warning if combinated with 3rd party domain extensions. +* #1153: Fix figures in sidebar causes latex build error. +* #2358: Fix user-preamble could not override the tocdepth definition. +* #2358: Redece tocdepth if ``part`` or ``chapter`` is used for top_sectionlevel. +* #2351: Fix footnote spacing +* #2363: Fix ``toctree()`` in templates generates broken links in SingleHTMLBuilder. +* #2366: Fix empty hyperref is generated on toctree in HTML builder. + +Documentation +------------- + +* #1757: Fix for usage of :confval:`html_last_updated_fmt`. Thanks to Ralf Hemmecke. + + +Release 1.3.6 (released Feb 29, 2016) +===================================== + +Features added +-------------- + +* #1873, #1876, #2278: Add ``page_source_suffix`` html context variable. This should be + introduced with :confval:`source_parsers` feature. Thanks for Eric Holscher. + + +Bugs fixed +---------- + +* #2265: Fix babel is used in spite of disabling it on ``latex_elements`` +* #2295: Avoid mutating dictionary errors while enumerating members in autodoc + with Python 3 +* #2291: Fix pdflatex "Counter too large" error from footnotes inside tables of contents +* #2292: Fix some footnotes disappear from LaTeX output +* #2287: ``sphinx.transforms.Locale`` always uses rst parser. Sphinx i18n feature should + support parsers that specified source_parsers. +* #2290: Fix ``sphinx.ext.mathbase`` use of amsfonts may break user choice of math fonts +* #2324: Print a hint how to increase the recursion limit when it is hit. +* #1565, #2229: Revert new warning; the new warning will be triggered from version 1.4 on. +* #2329: Refresh environment forcely if source directory has changed. +* #2019: Fix the domain objects in search result are not escaped + +Release 1.3.5 (released Jan 24, 2016) +===================================== + +Bugs fixed +---------- + +* Fix line numbers was not shown on warnings in LaTeX and texinfo builders +* Fix filenames were not shown on warnings of citations +* Fix line numbers was not shown on warnings in LaTeX and texinfo builders +* Fix line numbers was not shown on warnings of indices +* #2026: Fix LaTeX builder raises error if parsed-literal includes links +* #2243: Ignore strange docstring types for classes, do not crash +* #2247: Fix #2205 breaks make html for definition list with classifiers + that contains regular-expression like string +* #1565: Sphinx will now emit a warning that highlighting was skipped if the syntax + is incorrect for `code-block`, `literalinclude` and so on. +* #2211: Fix paragraphs in table cell doesn't work in Latex output +* #2253: ``:pyobject:`` option of ``literalinclude`` directive can't detect indented + body block when the block starts with blank or comment lines. +* Fix TOC is not shown when no ``:maxdepth:`` for toctrees (ref: #771) +* Fix warning message for ``:numref:`` if target is in orphaned doc (ref: #2244) + +Release 1.3.4 (released Jan 12, 2016) +===================================== + +Bugs fixed +---------- + +* #2134: Fix figure caption with reference causes latex build error +* #2094: Fix rubric with reference not working in Latex +* #2147: Fix literalinclude code in latex does not break in pages +* #1833: Fix email addresses is showed again if latex_show_urls is not None +* #2176: sphinx.ext.graphviz: use instead of to embed svg +* #967: Fix SVG inheritance diagram is not hyperlinked (clickable) +* #1237: Fix footnotes not working in definition list in LaTeX +* #2168: Fix raw directive does not work for text writer +* #2171: Fix cannot linkcheck url with unicode +* #2182: LaTeX: support image file names with more than 1 dots +* #2189: Fix previous sibling link for first file in subdirectory uses last file, not + intended previous from root toctree +* #2003: Fix decode error under python2 (only) when ``make linkcheck`` is run +* #2186: Fix LaTeX output of \mathbb in math +* #1480, #2188: LaTeX: Support math in section titles +* #2071: Fix same footnote in more than two section titles => LaTeX/PDF Bug +* #2040: Fix UnicodeDecodeError in sphinx-apidoc when author contains non-ascii characters +* #2193: Fix shutil.SameFileError if source directory and destination directory are same +* #2178: Fix unparseable C++ cross-reference when referencing a function with :cpp:any: +* #2206: Fix Sphinx latex doc build failed due to a footnotes +* #2201: Fix wrong table caption for tables with over 30 rows +* #2213: Set
in the classic theme to fit with

+* #1815: Fix linkcheck does not raise an exception if warniserror set to true and link is + broken +* #2197: Fix slightly cryptic error message for missing index.rst file +* #1894: Unlisted phony targets in quickstart Makefile +* #2125: Fix unifies behavior of collapsed fields (``GroupedField`` and ``TypedField``) +* #1408: Check latex_logo validity before copying +* #771: Fix latex output doesn't set tocdepth +* #1820: On Windows, console coloring is broken with colorama version 0.3.3. + Now sphinx use colorama>=0.3.5 to avoid this problem. +* #2072: Fix footnotes in chapter-titles do not appear in PDF output +* #1580: Fix paragraphs in longtable don't work in Latex output +* #1366: Fix centered image not centered in latex +* #1860: Fix man page using ``:samp:`` with braces - font doesn't reset +* #1610: Sphinx crashes in japanese indexing in some systems +* Fix Sphinx crashes if mecab initialization failed +* #2160: Fix broken TOC of PDFs if section includes an image +* #2172: Fix dysfunctional admonition \py@lightbox in sphinx.sty. Thanks to jfbu. +* #2198,#2205: ``make gettext`` generate broken msgid for definition lists. +* #2062: Escape characters in doctests are treated incorrectly with Python 2. +* #2225: Fix if the option does not begin with dash, linking is not performed +* #2226: Fix math is not HTML-encoded when :nowrap: is given (jsmath, mathjax) +* #1601, #2220: 'any' role breaks extended domains behavior. Affected extensions doesn't + support resolve_any_xref and resolve_xref returns problematic node instead of None. + sphinxcontrib-httpdomain is one of them. +* #2229: Fix no warning is given for unknown options + +Release 1.3.3 (released Dec 2, 2015) +==================================== + +Bugs fixed +---------- + +* #2177: Fix parallel hangs +* #2012: Fix exception occurred if ``numfig_format`` is invalid +* #2142: Provide non-minified JS code in ``sphinx/search/non-minified-js/*.js`` for + source distribution on PyPI. +* #2148: Error while building devhelp target with non-ASCII document. + + +Release 1.3.2 (released Nov 29, 2015) +===================================== + +Features added +-------------- + +* #1935: Make "numfig_format" overridable in latex_elements. Bugs fixed ---------- @@ -22,9 +886,8 @@ Bugs fixed * Add a "default.css" stylesheet (which imports "classic.css") for compatibility. * #1788: graphviz extension raises exception when caption option is present. * #1789: ``:pyobject:`` option of ``literalinclude`` directive includes following - lines after class definitions. -* #1790: ``literalinclude`` strips empty lines at the head and tail. -* #1913: C++, fix assert bug for enumerators in next-to-global and global scope. + lines after class definitions +* #1790: ``literalinclude`` strips empty lines at the head and tail * #1802: load plugin themes automatically when theme.conf use it as 'inherit'. Thanks to Takayuki Hirai. * #1794: custom theme extended from alabaster or sphinx_rtd_theme can't find base theme. @@ -33,7 +896,7 @@ Bugs fixed * #1823: '.' as for sphinx-apidoc cause an unfriendly error. Now '.' is converted to absolute path automatically. * Fix a crash when setting up extensions which do not support metadata. -* #1784: Provide non-minified JS code in ``sphinx/search/*.py`` +* #1784: Provide non-minified JS code in ``sphinx/search/non-minified-js/*.js`` * #1822, #1892: Fix regression for #1061. autosummary can't generate doc for imported members since sphinx-1.3b3. Thanks to Eric Larson. * #1793, #1819: "see also" misses a linebreak in text output. Thanks to Takayuki Hirai. @@ -48,7 +911,6 @@ Bugs fixed * #1923: Use babel features only if the babel latex element is nonempty. * #1942: Fix a KeyError in websupport. * #1903: Fix strange id generation for glossary terms. -* #1796, On py3, automated .mo building cause UnicodeDecodeError * ``make text`` will crush if a definition list item has more than 1 classifiers as: ``term : classifier1 : classifier2``. * #1855: make gettext generates broken po file for definition lists with classifier. @@ -64,15 +926,24 @@ Bugs fixed * #1994: More supporting non-standard parser (like recommonmark parser) for Translation and WebSupport feature. Now node.rawsource is fall backed to node.astext() during docutils transforming. -* C++, fix parsing of 'signed char' and 'unsigned char' as types. -* C++, add missing support for 'friend' functions. -* C++, add missing support for virtual base classes (thanks to Rapptz). -* C++, add support for final classes. -* C++, fix parsing of types prefixed with 'enum'. -* #2023: Dutch search support uses Danish stemming info - -Documentation -------------- +* #1989: "make blahblah" on Windows indicate help messages for sphinx-build every time. + It was caused by wrong make.bat that generated by Sphinx-1.3.0/1.3.1. +* On Py2 environment, conf.py that is generated by sphinx-quickstart should have u prefixed + config value for 'version' and 'release'. +* #2102: On Windows + Py3, using ``|today|`` and non-ASCII date format will raise + UnicodeEncodeError. +* #1974: UnboundLocalError: local variable 'domain' referenced before assignment when + using `any` role and `sphinx.ext.intersphinx` in same time. +* #2121: multiple words search doesn't find pages when words across on the page title and + the page content. +* #1884, #1885: plug-in html themes cannot inherit another plug-in theme. Thanks to + Suzumizaki. +* #1818: `sphinx.ext.todo` directive generates broken html class attribute as + 'admonition-' when :confval:`language` is specified with non-ASCII linguistic area like + 'ru' or 'ja'. To fix this, now ``todo`` directive can use ``:class:`` option. +* #2140: Fix footnotes in table has broken in LaTeX +* #2127: MecabBinder for html searching feature doesn't work with Python 3. + Thanks to Tomoko Uchida. Release 1.3.1 (released Mar 17, 2015) @@ -154,7 +1025,7 @@ Incompatible changes * Dependency requirement updates: docutils 0.11, Pygments 2.0 * The ``gettext_enables`` config value has been renamed to `gettext_additional_targets`. -* #1735: Use https://doc.python.org/ instead of ``http`` protocol. +* #1735: Use https://docs.python.org/ instead of ``http`` protocol. It was used for `sphinx.ext.intersphinx` and some documentation. Features added @@ -549,7 +1420,7 @@ Bugs fixed if they contain uppercase letters. * #923: Take the entire LaTeX document into account when caching pngmath-generated images. This rebuilds them correctly when - `pngmath_latex_preamble` changes. + ``pngmath_latex_preamble`` changes. * #901: Emit a warning when using docutils' new "math" markup without a Sphinx math extension active. * #845: In code blocks, when the selected lexer fails, display line numbers @@ -878,13 +1749,12 @@ Features added * Command-line interfaces: - PR#75: Added ``--follow-links`` option to sphinx-apidoc. - - #869: sphinx-build now has the option :option:`-T` for printing the full + - #869: sphinx-build now has the option ``-T`` for printing the full traceback after an unhandled exception. - - sphinx-build now supports the standard :option:`--help` and - :option:`--version` options. + - sphinx-build now supports the standard ``--help`` and ``--version`` options. - sphinx-build now provides more specific error messages when called with invalid options or arguments. - - sphinx-build now has a verbose option :option:`-v` which can be repeated for + - sphinx-build now has a verbose option ``-v`` which can be repeated for greater effect. A single occurrence provides a slightly more verbose output than normal. Two or more occurrences of this option provides more detailed output which may be useful for debugging. @@ -906,7 +1776,7 @@ Features added stemming routines. Saves about 20 seconds when building the Python documentation. - PR#108: Add experimental support for parallel building with a new - :option:`-j` option. + :option:`sphinx-build -j` option. Documentation ------------- @@ -1168,7 +2038,7 @@ Features added indicators. - #367: Added automatic exclusion of hidden members in inheritance diagrams, and an option to selectively enable it. - - Added `pngmath_add_tooltips`. + - Added ``pngmath_add_tooltips``. - The math extension displaymath directives now support ``name`` in addition to ``label`` for giving the equation label, for compatibility with Docutils. @@ -1496,7 +2366,7 @@ Features added * General: - Added a "nitpicky" mode that emits warnings for all missing - references. It is activated by the :option:`-n` command-line switch + references. It is activated by the :option:`sphinx-build -n` command-line switch or the `nitpicky` config value. - Added ``latexpdf`` target in quickstart Makefile. diff --git a/EXAMPLES b/EXAMPLES index eab35dc4fd6..d6770436b14 100644 --- a/EXAMPLES +++ b/EXAMPLES @@ -4,22 +4,27 @@ 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. -Documentation using the default theme +Documentation using the alabaster theme +--------------------------------------- + +* PyLangAcq: http://pylangacq.org/ + +Documentation using the classic theme ------------------------------------- * APSW: http://apidoc.apsw.googlecode.com/hg/index.html * ASE: https://wiki.fysik.dtu.dk/ase/ * Calibre: http://manual.calibre-ebook.com/ -* CodePy: http://documen.tician.de/codepy/ +* CodePy: https://documen.tician.de/codepy/ * Cython: http://docs.cython.org/ * Cormoran: http://cormoran.nhopkg.org/docs/ * Director: http://pythonhosted.org/director/ -* Dirigible: http://www.projectdirigible.com/documentation/ +* Dirigible: http://www.projectdirigible.com/ * F2py: http://f2py.sourceforge.net/docs/ * GeoDjango: https://docs.djangoproject.com/en/dev/ref/contrib/gis/ * Genomedata: @@ -31,10 +36,10 @@ Documentation using the default theme * Heapkeeper: http://heapkeeper.org/ * Hands-on Python Tutorial: http://anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/ -* Hedge: http://documen.tician.de/hedge/ +* Hedge: https://documen.tician.de/hedge/ * Leo: http://leoeditor.com/ -* Lino: http://lino.saffre-rumma.net/ -* MeshPy: http://documen.tician.de/meshpy/ +* Lino: http://www.lino-framework.org/ +* MeshPy: https://documen.tician.de/meshpy/ * mpmath: http://mpmath.googlecode.com/svn/trunk/doc/build/index.html * OpenEXR: http://excamera.com/articles/26/doc/index.html * OpenGDA: http://www.opengda.org/gdadoc/html/ @@ -42,19 +47,21 @@ Documentation using the default theme * Paste: http://pythonpaste.org/script/ * Paver: http://paver.github.io/paver/ * Pioneers and Prominent Men of Utah: http://pioneers.rstebbing.com/ -* PyCantonese: http://pycantonese.github.io/ +* PyCantonese: http://pycantonese.org/ * Pyccuracy: https://github.com/heynemann/pyccuracy/wiki/ -* PyCuda: http://documen.tician.de/pycuda/ +* PyCuda: https://documen.tician.de/pycuda/ * Pyevolve: http://pyevolve.sourceforge.net/ -* Pylo: http://documen.tician.de/pylo/ +* Pylo: https://documen.tician.de/pylo/ * PyMQI: http://pythonhosted.org/pymqi/ * PyPubSub: http://pubsub.sourceforge.net/ * pySPACE: http://pyspace.github.io/pyspace/ -* Python: https://docs.python.org/ +* Python: https://docs.python.org/3/ * python-apt: http://apt.alioth.debian.org/python-apt-doc/ -* PyUblas: http://documen.tician.de/pyublas/ +* PyUblas: https://documen.tician.de/pyublas/ * Quex: http://quex.sourceforge.net/doc/html/main.html +* Ring programming language: http://ring-lang.sourceforge.net/doc/index.html * Scapy: http://www.secdev.org/projects/scapy/doc/ +* Seaborn: https://stanford.edu/~mwaskom/software/seaborn/ * Segway: http://noble.gs.washington.edu/proj/segway/doc/1.1.0/segway.html * SimPy: http://simpy.readthedocs.org/en/latest/ * SymPy: http://docs.sympy.org/ @@ -62,11 +69,12 @@ Documentation using the default theme * z3c: http://www.ibiblio.org/paulcarduner/z3ctutorial/ -Documentation using a customized version of the default theme +Documentation using a customized version of the classic theme ------------------------------------------------------------- * Advanced Generic Widgets: http://xoomer.virgilio.it/infinity77/AGW_Docs/index.html +* Arb: http://fredrikj.net/arb/ * Bazaar: http://doc.bazaar.canonical.com/en/ * CakePHP: http://book.cakephp.org/2.0/en/index.html * Chaco: http://docs.enthought.com/chaco/ @@ -78,7 +86,6 @@ Documentation using a customized version of the default theme 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 * Kaa: http://api.freevo.org/kaa-base/ * LEPL: http://www.acooke.org/lepl/ * Mayavi: http://docs.enthought.com/mayavi/mayavi/ @@ -87,11 +94,12 @@ Documentation using a customized version of the default theme * NumPy: http://docs.scipy.org/doc/numpy/reference/ * OpenCV: http://docs.opencv.org/ * Peach^3: http://peach3.nl/doc/latest/userdoc/ -* Sage: http://sagemath.org/doc/ +* Pygame: http://www.pygame.org/docs/ +* Sage: http://www.sagemath.org/doc/ * SciPy: http://docs.scipy.org/doc/scipy/reference/ * simuPOP: http://simupop.sourceforge.net/manual_release/build/userGuide.html * Sprox: http://sprox.org/ -* TurboGears: http://turbogears.org/2.0/docs/ +* TurboGears: http://turbogears.readthedocs.org/en/latest/ * Varnish: https://www.varnish-cache.org/docs/ * Zentyal: http://doc.zentyal.org/ * Zope: http://docs.zope.org/zope2/index.html @@ -114,18 +122,20 @@ Documentation using the sphinxdoc theme * Python Wild Magic: http://vmlaker.github.io/pythonwildmagic/ * Reteisi: http://www.reteisi.org/contents.html * Sqlkit: http://sqlkit.argolinux.org/ -* Tau: http://www.tango-controls.org/static/tau/latest/doc/html/index.html * Turbulenz: http://docs.turbulenz.com/ -* WebFaction: http://docs.webfaction.com/ +* WebFaction: https://docs.webfaction.com/ Documentation using another builtin theme ----------------------------------------- * C/C++ Development with Eclipse: http://eclipsebook.in/ (agogo) +* ESWP3 (http://eswp3.org) (sphinx_rtd_theme) * Jinja: http://jinja.pocoo.org/ (scrolls) * jsFiddle: http://doc.jsfiddle.net/ (nature) * libLAS: http://www.liblas.org/ (nature) +* Linguistica: http://linguistica-uchicago.github.io/lxa5/ (sphinx_rtd_theme) +* MoinMoin: https://moin-20.readthedocs.io/en/latest/ (sphinx_rtd_theme) * MPipe: http://vmlaker.github.io/mpipe/ (sphinx13) * pip: https://pip.pypa.io/en/latest/ (sphinx_rtd_theme) * Pyramid web framework: @@ -145,12 +155,12 @@ Documentation using another builtin theme Documentation using a custom theme/integrated in a site ------------------------------------------------------- -* Blender: http://www.blender.org/documentation/250PythonDoc/ +* Blender: https://www.blender.org/api/250PythonDoc/ * Blinker: http://discorporate.us/projects/Blinker/docs/ -* Ceph: http://ceph.com/docs/master/ +* Ceph: http://docs.ceph.com/docs/master/ * Classy: http://www.pocoo.org/projects/classy/ * DEAP: http://deap.gel.ulaval.ca/doc/0.8/index.html -* Django: http://docs.djangoproject.com/ +* Django: https://docs.djangoproject.com/ * Elemental: http://libelemental.org/documentation/dev/index.html * Enterprise Toolkit for Acrobat products: http://www.adobe.com/devnet-docs/acrobatetk/ @@ -159,34 +169,33 @@ Documentation using a custom theme/integrated in a site * Flask-OpenID: http://pythonhosted.org/Flask-OpenID/ * Gameduino: http://excamera.com/sphinx/gameduino/ * GeoServer: http://docs.geoserver.org/ +* GHC - Glasgow Haskell Compiler: http://downloads.haskell.org/~ghc/master/users-guide/ * Glashammer: http://glashammer.org/ -* Istihza (Turkish Python documentation project): - http://www.istihza.com/py2/icindekiler_python.html +* Istihza (Turkish Python documentation project): http://belgeler.istihza.com/py2/ * Lasso: http://lassoguide.com/ * Manage documentation such as source code (fr): http://redaction-technique.org/ * MathJax: http://docs.mathjax.org/en/latest/ * MirrorBrain: http://mirrorbrain.org/docs/ * MyHDL: http://docs.myhdl.org/en/latest/ * nose: http://nose.readthedocs.org/en/latest/ -* NoTex: https://notex.ch/overview/ +* NoTex: https://www.notex.ch/overview/ * ObjectListView: http://objectlistview.sourceforge.net/python/ -* Open ERP: http://doc.openerp.com/ +* Open ERP: https://doc.odoo.com/ * OpenCV: http://docs.opencv.org/ -* Open Dylan: http://opendylan.org/documentation/ and also provides a - `dylan domain `__ +* Open Dylan: http://opendylan.org/documentation/ * OpenLayers: http://docs.openlayers.org/ * PyEphem: http://rhodesmill.org/pyephem/ * German Plone user manual: http://www.hasecke.com/plone-benutzerhandbuch/ -* PSI4: http://sirius.chem.vt.edu/psi4manual/latest/index.html +* PSI4: http://www.psicode.org/psi4manual/master/index.html * Pylons: http://docs.pylonsproject.org/projects/pylons-webframework/en/latest/ -* PyMOTW: http://pymotw.com/2/ +* PyMOTW: https://pymotw.com/2/ * python-aspectlib: http://python-aspectlib.readthedocs.org/en/latest/ (`sphinx-py3doc-enhanced-theme`_) * QGIS: http://qgis.org/en/docs/index.html * qooxdoo: http://manual.qooxdoo.org/current/ * Roundup: http://www.roundup-tracker.org/ * Selenium: http://docs.seleniumhq.org/docs/ -* Self: http://selflanguage.org/ +* Self: http://www.selflanguage.org/ * Substance D: http://docs.pylonsproject.org/projects/substanced/en/latest/ * Tablib: http://tablib.org/ * SQLAlchemy: http://www.sqlalchemy.org/docs/ @@ -201,14 +210,12 @@ Documentation using a custom theme/integrated in a site Homepages and other non-documentation sites ------------------------------------------- -* Applied Mathematics at the Stellenbosch University: http://dip.sun.ac.za/ * A personal page: http://www.dehlia.in/ * Benoit Boissinot: http://bboissin.appspot.com/ * lunarsite: http://lunaryorn.de/ -* Red Hot Chili Python: http://redhotchilipython.com/ * The Wine Cellar Book: http://www.thewinecellarbook.com/doc/en/ * UC Berkeley Advanced Control Systems course: - http://www.me.berkeley.edu/ME233/sp14/ + http://msc.berkeley.edu/tomizuka/me233spring13/ * VOR: http://www.vor-cycling.be/ @@ -217,11 +224,11 @@ Books produced using Sphinx * "The ``repoze.bfg`` Web Application Framework": http://www.amazon.com/repoze-bfg-Web-Application-Framework-Version/dp/0615345379 -* A Theoretical Physics Reference book: http://theoretical-physics.net/ +* A Theoretical Physics Reference book: http://www.theoretical-physics.net/ * "Simple and Steady Way of Learning for Software Engineering" (in Japanese): http://www.amazon.co.jp/dp/477414259X/ * "Expert Python Programming": - http://www.packtpub.com/expert-python-programming/book + https://www.packtpub.com/application-development/expert-python-programming * "Expert Python Programming" (Japanese translation): http://www.amazon.co.jp/dp/4048686291/ * "Pomodoro Technique Illustrated" (Japanese translation): @@ -231,7 +238,7 @@ Books produced using Sphinx * "Die Wahrheit des Sehens. Der DEKALOG von Krzysztof Kieślowski": http://www.hasecke.eu/Dekalog/ * The "Varnish Book": - https://www.varnish-software.com/static/book/ + http://book.varnish-software.com/4.0/ * "Learning Sphinx" (in Japanese): http://www.oreilly.co.jp/books/9784873116488/ * "LassoGuide": diff --git a/LICENSE b/LICENSE index 4944ef5a1b4..8f9e7f1acba 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ License for Sphinx ================== -Copyright (c) 2007-2015 by the Sphinx team (see AUTHORS file). +Copyright (c) 2007-2016 by the Sphinx team (see AUTHORS file). All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/MANIFEST.in b/MANIFEST.in index 4cafcdca6c8..e2560383c17 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -13,14 +13,15 @@ include sphinx-build.py include sphinx-quickstart.py include sphinx-apidoc.py +recursive-include sphinx/templates * recursive-include sphinx/texinputs * recursive-include sphinx/themes * recursive-include sphinx/locale * +recursive-include sphinx/search/non-minified-js *.js recursive-include sphinx/ext/autosummary/templates * recursive-include tests * recursive-include utils * -include sphinx/pycode/Grammar-py2.txt -include sphinx/pycode/Grammar-py3.txt +include sphinx/pycode/Grammar-py* recursive-include doc * prune doc/_build diff --git a/Makefile b/Makefile index 629140242cb..86226f3b53b 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,17 @@ PYTHON ?= python -.PHONY: all style-check clean clean-pyc clean-patchfiles clean-backupfiles \ +.PHONY: all style-check type-check clean clean-pyc clean-patchfiles clean-backupfiles \ clean-generated pylint reindent test covertest build DONT_CHECK = -i build -i dist -i sphinx/style/jquery.js \ -i sphinx/pycode/pgen2 -i sphinx/util/smartypants.py \ -i .ropeproject -i doc/_build -i tests/path.py \ - -i tests/coverage.py -i env -i utils/convert.py \ + -i tests/coverage.py -i utils/convert.py \ -i tests/typing_test_data.py \ + -i tests/test_autodoc_py35.py \ + -i tests/roots/test-warnings/undecodable.rst \ + -i tests/build \ + -i tests/roots/test-warnings/undecodable.rst \ -i sphinx/search/da.py \ -i sphinx/search/de.py \ -i sphinx/search/en.py \ @@ -26,17 +30,23 @@ DONT_CHECK = -i build -i dist -i sphinx/style/jquery.js \ -i sphinx/search/tr.py \ -i .tox -all: clean-pyc clean-backupfiles style-check test +all: clean-pyc clean-backupfiles style-check type-check test style-check: @$(PYTHON) utils/check_sources.py $(DONT_CHECK) . -clean: clean-pyc clean-patchfiles clean-backupfiles clean-generated +type-check: + mypy sphinx/ + +clean: clean-pyc clean-pycache clean-patchfiles clean-backupfiles clean-generated clean-testfiles clean-buildfiles clean-pyc: find . -name '*.pyc' -exec rm -f {} + find . -name '*.pyo' -exec rm -f {} + +clean-pycache: + find . -name __pycache__ -exec rm -rf {} + + clean-patchfiles: find . -name '*.orig' -exec rm -f {} + find . -name '*.rej' -exec rm -f {} + @@ -48,6 +58,13 @@ clean-backupfiles: clean-generated: rm -f utils/*3.py* +clean-testfiles: + rm -rf tests/build + rm -rf .tox/ + +clean-buildfiles: + rm -rf build + pylint: @pylint --rcfile utils/pylintrc sphinx @@ -55,6 +72,9 @@ reindent: @$(PYTHON) utils/reindent.py -r -n . test: + @cd tests; $(PYTHON) run.py -I py35 -d -m '^[tT]est' $(TEST) + +test-async: @cd tests; $(PYTHON) run.py -d -m '^[tT]est' $(TEST) covertest: diff --git a/README.rst b/README.rst index 391d0bd1adb..384e2cc6ab0 100644 --- a/README.rst +++ b/README.rst @@ -33,6 +33,12 @@ Install from cloned source as editable:: pip install -e . +Release signatures +================== + +Releases are signed with `498D6B9E `_ + + Reading the docs ================ diff --git a/doc/Makefile b/doc/Makefile index 55909649320..d0e4e297b69 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -8,11 +8,13 @@ SPHINXPROJ = sphinx SOURCEDIR = . BUILDDIR = _build -# Has to be explicit, otherwise we don't get "make" without targets right. +# Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) +.PHONY: help Makefile + # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: +%: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/doc/_static/bookcover.png b/doc/_static/bookcover.png index 5b521b67b59..0a8167fcc6a 100644 Binary files a/doc/_static/bookcover.png and b/doc/_static/bookcover.png differ diff --git a/doc/_static/conf.py.txt b/doc/_static/conf.py.txt new file mode 100644 index 00000000000..ab54f15b8ab --- /dev/null +++ b/doc/_static/conf.py.txt @@ -0,0 +1,360 @@ +# -*- coding: utf-8 -*- +# +# test documentation build configuration file, created by +# sphinx-quickstart on Sun Jun 26 00:00:43 2016. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The encoding of source files. +# +# source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'test' +copyright = u'2016, test' +author = u'test' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'test' +# The full version, including alpha/beta/rc tags. +release = u'test' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +# +# today = '' +# +# Else, today_fmt is used as the format for a strftime call. +# +# today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +# +# default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +# +# add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +# +# add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +# +# show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +# modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +# keep_warnings = False + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'alabaster' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +# html_theme_path = [] + +# The name for this set of Sphinx documents. +# " v documentation" by default. +# +# html_title = u'test vtest' + +# A shorter title for the navigation bar. Default is the same as html_title. +# +# html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +# +# html_logo = None + +# The name of an image file (relative to this directory) to use as a favicon of +# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +# +# html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +# +# html_extra_path = [] + +# If not None, a 'Last updated on:' timestamp is inserted at every page +# bottom, using the given strftime format. +# The empty string is equivalent to '%b %d, %Y'. +# +# html_last_updated_fmt = None + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +# +# html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +# +# html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +# +# html_additional_pages = {} + +# If false, no module index is generated. +# +# html_domain_indices = True + +# If false, no index is generated. +# +# html_use_index = True + +# If true, the index is split into individual pages for each letter. +# +# html_split_index = False + +# If true, links to the reST sources are added to the pages. +# +# html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +# +# html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +# +# html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +# +# html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +# html_file_suffix = None + +# Language to be used for generating the HTML full-text search index. +# Sphinx supports the following languages: +# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' +# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh' +# +# html_search_language = 'en' + +# A dictionary with options for the search language support, empty by default. +# 'ja' uses this config value. +# 'zh' user can custom change `jieba` dictionary path. +# +# html_search_options = {'type': 'default'} + +# The name of a javascript file (relative to the configuration directory) that +# implements a search results scorer. If empty, the default will be used. +# +# html_search_scorer = 'scorer.js' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'testdoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'test.tex', u'test Documentation', + u'test', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +# +# latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +# +# latex_use_parts = False + +# If true, show page references after internal links. +# +# latex_show_pagerefs = False + +# If true, show URL addresses after external links. +# +# latex_show_urls = False + +# Documents to append as an appendix to all manuals. +# +# latex_appendices = [] + +# If false, will not define \strong, \code, \titleref, \crossref ... but only +# \sphinxstrong, ..., \sphinxtitleref, ... to help avoid clash with user added +# packages. +# +# latex_keep_old_macro_names = True + +# If false, no module index is generated. +# +# latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'test', u'test Documentation', + [author], 1) +] + +# If true, show URL addresses after external links. +# +# man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'test', u'test Documentation', + author, 'test', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +# +# texinfo_appendices = [] + +# If false, no module index is generated. +# +# texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +# +# texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +# +# texinfo_no_detailmenu = False + +# -- A random example ----------------------------------------------------- + +import sys, os +sys.path.insert(0, os.path.abspath('.')) +exclude_patterns = ['zzz'] + +numfig = True +#language = 'ja' + +extensions.append('sphinx.ext.todo') +extensions.append('sphinx.ext.autodoc') +#extensions.append('sphinx.ext.autosummary') +extensions.append('sphinx.ext.intersphinx') +extensions.append('sphinx.ext.mathjax') +extensions.append('sphinx.ext.viewcode') +extensions.append('sphinx.ext.graphviz') + + +autosummary_generate = True +html_theme = 'default' +#source_suffix = ['.rst', '.txt'] diff --git a/doc/_static/pocoo.png b/doc/_static/pocoo.png index 67663b976b0..1648bb8d74e 100644 Binary files a/doc/_static/pocoo.png and b/doc/_static/pocoo.png differ diff --git a/doc/_static/sphinx.png b/doc/_static/sphinx.png index 4bd9c7536cc..0a103cd3ee3 100644 Binary files a/doc/_static/sphinx.png and b/doc/_static/sphinx.png differ diff --git a/doc/_templates/index.html b/doc/_templates/index.html index ccef89a788d..755a79122ad 100644 --- a/doc/_templates/index.html +++ b/doc/_templates/index.html @@ -5,17 +5,16 @@

{{ _('Welcome') }}

{%trans%}What users say:{%endtrans%}

-

{%trans%}“Cheers for a great tool that actually makes programmers want - to write documentation!”{%endtrans%}

+

{%trans%}“Cheers for a great tool that actually makes programmers want + to write documentation!“{%endtrans%}

{%trans%} Sphinx is a tool that makes it easy to create intelligent and beautiful documentation, written by Georg Brandl and licensed under the BSD license.{%endtrans%}

{%trans%}It was originally created for the - new Python documentation, and it has excellent facilities for the - documentation of Python projects, but C/C++ is already supported as well, - and it is planned to add special support for other languages as well. Of + Python documentation, and it has excellent facilities for the + documentation of software projects in a range of languages. Of course, this site is also created from reStructuredText sources using Sphinx! The following features should be highlighted:{%endtrans%}

@@ -31,7 +30,7 @@

{{ _('Welcome') }}

module indices{%endtrans%}
  • {%trans%}Code handling: automatic highlighting using the Pygments highlighter{%endtrans%}
  • -
  • {%trans path=pathto('extensions')%}Extensions: automatic testing of code snippets, inclusion of +
  • {%trans path=pathto('ext/builtins')%}Extensions: automatic testing of code snippets, inclusion of docstrings from Python modules (API docs), and more{%endtrans%}
  • {%trans path=pathto('develop')%}Contributed extensions: more than @@ -39,34 +38,34 @@

    {{ _('Welcome') }}

    in a second repository; most of them installable from PyPI{%endtrans%}
  • {%trans%} - Sphinx uses reStructuredText + Sphinx uses reStructuredText as its markup language, and many of its strengths come from the power and straightforwardness of reStructuredText and its parsing and translating - suite, the Docutils.{%endtrans%} + suite, the Docutils.{%endtrans%}

    {%trans%}Documentation{%endtrans%}

    - -
    + +
    - - - + + {%- if hasdoc('search') %}{%- endif %} + {%- if hasdoc('genindex') %}{%- endif %}

    {%trans%} - You can also download PDF versions of the Sphinx documentation: - a version generated from + You can also download PDF/EPUB versions of the Sphinx documentation: + a PDF version generated from the LaTeX Sphinx produces, and - a version generated - by rst2pdf.{%endtrans%} + a EPUB version. + {%endtrans%}

    {%trans%}Examples{%endtrans%}

    diff --git a/doc/_templates/indexsidebar.html b/doc/_templates/indexsidebar.html index 56094809f39..b6f12f031cb 100644 --- a/doc/_templates/indexsidebar.html +++ b/doc/_templates/indexsidebar.html @@ -14,15 +14,7 @@

    Download

    {%trans%}Current version: {{ version }}{%endtrans%}

    {%trans%}Get Sphinx from the Python Package Index, or install it with:{%endtrans%}

    -{% if version.split('b')|length > 1 %} -
    pip install Sphinx=={{ version }}
    -

    {%trans%}Stable version docs -are also available.{%endtrans%}

    -{% else %}
    pip install -U Sphinx
    -

    {%trans%}Latest development version docs -are also available.{%endtrans%}

    -{% endif %} {% endif %}

    {%trans%}Questions? Suggestions?{%endtrans%}

    diff --git a/doc/_themes/sphinx13/layout.html b/doc/_themes/sphinx13/layout.html index 0e6294cc497..5a2a71bfcd5 100644 --- a/doc/_themes/sphinx13/layout.html +++ b/doc/_themes/sphinx13/layout.html @@ -4,7 +4,7 @@ Sphinx layout template for the sphinxdoc theme. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. #} {%- extends "basic/layout.html" %} @@ -57,8 +57,8 @@ {% endblock %} {% block rootrellink %} -
  • Sphinx home |
  • -
  • Documentation »
  • +
  • Sphinx home |
  • +
  • Documentation »
  • {% endblock %} {% block header %} diff --git a/doc/_themes/sphinx13/static/bodybg.png b/doc/_themes/sphinx13/static/bodybg.png index ebe92f66911..6f667b99e1c 100644 Binary files a/doc/_themes/sphinx13/static/bodybg.png and b/doc/_themes/sphinx13/static/bodybg.png differ diff --git a/doc/_themes/sphinx13/static/footerbg.png b/doc/_themes/sphinx13/static/footerbg.png index df783e2c76c..d1bcb009b75 100644 Binary files a/doc/_themes/sphinx13/static/footerbg.png and b/doc/_themes/sphinx13/static/footerbg.png differ diff --git a/doc/_themes/sphinx13/static/headerbg.png b/doc/_themes/sphinx13/static/headerbg.png index 22830f99ef3..522504964d5 100644 Binary files a/doc/_themes/sphinx13/static/headerbg.png and b/doc/_themes/sphinx13/static/headerbg.png differ diff --git a/doc/_themes/sphinx13/static/listitem.png b/doc/_themes/sphinx13/static/listitem.png index e45715f914d..f7f814d0021 100644 Binary files a/doc/_themes/sphinx13/static/listitem.png and b/doc/_themes/sphinx13/static/listitem.png differ diff --git a/doc/_themes/sphinx13/static/relbg.png b/doc/_themes/sphinx13/static/relbg.png index 2006af7d2ac..68a9b77eb74 100644 Binary files a/doc/_themes/sphinx13/static/relbg.png and b/doc/_themes/sphinx13/static/relbg.png differ diff --git a/doc/_themes/sphinx13/static/sphinx13.css b/doc/_themes/sphinx13/static/sphinx13.css index 222432d5c72..26df65b452e 100644 --- a/doc/_themes/sphinx13/static/sphinx13.css +++ b/doc/_themes/sphinx13/static/sphinx13.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- sphinx13 theme. * - * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -384,6 +384,10 @@ div.warning ul, div.warning ol { padding: 0; } +div.admonition div.highlight { + background: none; +} + .viewcode-back { font-family: 'Open Sans', 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif; @@ -394,3 +398,9 @@ div.viewcode-block:target { border-top: 1px solid #ac9; border-bottom: 1px solid #ac9; } + +.contentstable { + margin-left: 30px; + margin: 0 auto; + table-layout: fixed; +} diff --git a/doc/_themes/sphinx13/static/sphinxheader.png b/doc/_themes/sphinx13/static/sphinxheader.png index 12988c3d196..845da4ab94d 100644 Binary files a/doc/_themes/sphinx13/static/sphinxheader.png and b/doc/_themes/sphinx13/static/sphinxheader.png differ diff --git a/doc/builders.rst b/doc/builders.rst index 4fbd5bae639..f3bacb13992 100644 --- a/doc/builders.rst +++ b/doc/builders.rst @@ -23,6 +23,8 @@ The builder's "name" must be given to the **-b** command-line option of .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types .. class:: DirectoryHTMLBuilder @@ -36,6 +38,8 @@ The builder's "name" must be given to the **-b** command-line option of .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types .. versionadded:: 0.6 @@ -48,6 +52,8 @@ The builder's "name" must be given to the **-b** command-line option of .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types .. versionadded:: 1.0 @@ -61,6 +67,8 @@ The builder's "name" must be given to the **-b** command-line option of .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types .. module:: sphinx.builders.qthelp @@ -72,9 +80,11 @@ The builder's "name" must be given to the **-b** command-line option of .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types - .. _Qt help: http://qt-project.org/doc/qt-4.8/qthelp-framework.html + .. _Qt help: http://doc.qt.io/qt-4.8/qthelp-framework.html .. module:: sphinx.builders.applehelp .. class:: AppleHelpBuilder @@ -96,6 +106,8 @@ The builder's "name" must be given to the **-b** command-line option of .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types .. versionadded:: 1.3 @@ -109,6 +121,8 @@ The builder's "name" must be given to the **-b** command-line option of .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types .. module:: sphinx.builders.epub @@ -117,13 +131,41 @@ The builder's "name" must be given to the **-b** command-line option of This builder produces the same output as the standalone HTML builder, but also generates an *epub* file for ebook readers. See :ref:`epub-faq` for details about it. For definition of the epub format, have a look at - ``_ or ``_. + ``_ or ``_. The builder creates *EPUB 2* files. .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types + .. deprecated:: 1.5 + + Since Sphinx-1.5, the epub3 builder is used for the default builder of epub. + Now EpubBuilder is renamed to epub2. + +.. module:: sphinx.builders.epub3 +.. class:: Epub3Builder + + This builder produces the same output as the standalone HTML builder, but + also generates an *epub* file for ebook readers. See :ref:`epub-faq` for + details about it. For definition of the epub format, have a look at + ``_ or ``_. + The builder creates *EPUB 3* files. + + .. autoattribute:: name + + .. autoattribute:: format + + .. autoattribute:: supported_image_types + + .. versionadded:: 1.4 + + .. versionchanged:: 1.5 + + Since Sphinx-1.5, the epub3 builder is used for the default builder of epub. + .. module:: sphinx.builders.latex .. class:: LaTeXBuilder @@ -145,10 +187,12 @@ The builder's "name" must be given to the **-b** command-line option of .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types Note that a direct PDF builder using ReportLab is available in `rst2pdf -`_ version 0.12 or greater. You need to add +`_ version 0.12 or greater. You need to add ``'rst2pdf.pdfbuilder'`` to your :confval:`extensions` to enable it, its name is ``pdf``. Refer to the `rst2pdf manual `_ for details. @@ -162,6 +206,8 @@ for details. .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types .. versionadded:: 0.4 @@ -175,6 +221,8 @@ for details. .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types .. versionadded:: 1.0 @@ -196,6 +244,8 @@ for details. .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types .. versionadded:: 1.1 @@ -227,8 +277,7 @@ for details. A module that implements `dump()`, `load()`, `dumps()` and `loads()` functions that conform to the functions with the same names from the pickle module. Known modules implementing this interface are - `simplejson` (or `json` in Python 2.6), `phpserialize`, `plistlib`, - and others. + `simplejson`, `phpserialize`, `plistlib`, and others. .. attribute:: out_suffix @@ -261,6 +310,8 @@ for details. The old name ``web`` still works as well. + .. autoattribute:: format + .. autoattribute:: supported_image_types The file suffix is ``.fpickle``. The global context is called @@ -276,6 +327,8 @@ for details. .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types The file suffix is ``.fjson``. The global context is called @@ -293,6 +346,8 @@ for details. .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types .. versionadded:: 1.1 @@ -307,8 +362,22 @@ for details. .. autoattribute:: name + .. autoattribute:: format + + .. autoattribute:: supported_image_types + +.. module:: sphinx.builders.dummy +.. class:: DummyBuilder + + This builder produces no output. The input is only parsed and checked for + consistency. This is useful for linting purposes. + + .. autoattribute:: name + .. autoattribute:: supported_image_types + .. versionadded:: 1.4 + .. module:: sphinx.builders.linkcheck .. class:: CheckExternalLinksBuilder @@ -318,6 +387,8 @@ for details. .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types .. module:: sphinx.builders.xml @@ -329,6 +400,8 @@ for details. .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types .. versionadded:: 1.2 @@ -343,6 +416,8 @@ for details. .. autoattribute:: name + .. autoattribute:: format + .. autoattribute:: supported_image_types .. versionadded:: 1.2 diff --git a/doc/conf.py b/doc/conf.py index 22ab60972fe..349c0e745a1 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -15,7 +15,7 @@ exclude_patterns = ['_build'] project = 'Sphinx' -copyright = '2007-2015, Georg Brandl and the Sphinx team' +copyright = '2007-2016, Georg Brandl and the Sphinx team' version = sphinx.__released__ release = version show_authors = True @@ -36,9 +36,9 @@ epub_publisher = 'http://sphinx-doc.org/' epub_scheme = 'url' epub_identifier = epub_publisher -epub_pre_files = [('index.html', 'Welcome')] -epub_post_files = [('install.html', 'Installing Sphinx'), - ('develop.html', 'Sphinx development')] +epub_pre_files = [('index.xhtml', 'Welcome')] +epub_post_files = [('install.xhtml', 'Installing Sphinx'), + ('develop.xhtml', 'Sphinx development')] epub_exclude_files = ['_static/opensearch.xml', '_static/doctools.js', '_static/jquery.js', '_static/searchtools.js', '_static/underscore.js', '_static/basic.css', @@ -47,13 +47,15 @@ epub_max_image_width = 0 epub_show_urls = 'inline' epub_use_index = False -epub_guide = (('toc', 'contents.html', u'Table of Contents'),) +epub_guide = (('toc', 'contents.xhtml', u'Table of Contents'),) +epub_description = 'Sphinx documentation generator system manual' latex_documents = [('contents', 'sphinx.tex', 'Sphinx Documentation', 'Georg Brandl', 'manual', 1)] latex_logo = '_static/sphinx.png' latex_elements = { 'fontpkg': '\\usepackage{palatino}', + 'passoptionstopackages': '\\PassOptionsToPackage{svgnames}{xcolor}', } latex_show_urls = 'footnote' diff --git a/doc/config.rst b/doc/config.rst index f3ebd7f6f4e..9c74d664fa1 100644 --- a/doc/config.rst +++ b/doc/config.rst @@ -40,7 +40,7 @@ Important points to note: delete them from the namespace with ``del`` if appropriate. Modules are removed automatically, so you don't need to ``del`` your imports after use. -.. _conf-tags: + .. _conf-tags: * There is a special object named ``tags`` available in the config file. It can be used to query and change the tags (see :ref:`tags`). Use @@ -56,7 +56,7 @@ General configuration .. confval:: extensions - A list of strings that are module names of Sphinx extensions. These can be + A list of strings that are module names of :ref:`extensions`. These can be extensions coming with Sphinx (named ``sphinx.ext.*``) or custom ones. Note that you can extend :data:`sys.path` within the conf file if your @@ -96,8 +96,11 @@ General configuration If given, a dictionary of parser classes for different source suffices. The keys are the suffix, the values can be either a class or a string giving a - fully-qualified name of a parser class. Files with a suffix that is not in - the dictionary will be parsed with the default reStructuredText parser. + fully-qualified name of a parser class. The parser class can be either + ``docutils.parsers.Parser`` or :class:`sphinx.parsers.Parser`. Files with a + suffix that is not in the dictionary will be parsed with the default + reStructuredText parser. + For example:: @@ -128,7 +131,7 @@ General configuration :confval:`exclude_dirnames`) :confval:`exclude_patterns` is also consulted when looking for static files - in :confval:`html_static_path`. + in :confval:`html_static_path` and :confval:`html_extra_path`. .. versionadded:: 1.0 @@ -209,6 +212,38 @@ General configuration .. versionadded:: 0.5 +.. confval:: suppress_warnings + + A list of warning types to suppress arbitrary warning messages. + + Sphinx supports following warning types: + + * app.add_node + * app.add_directive + * app.add_role + * app.add_generic_role + * app.add_source_parser + * image.data_uri + * image.nonlocal_uri + * ref.term + * ref.ref + * ref.numref + * ref.keyword + * ref.option + * ref.citation + * ref.doc + * misc.highlighting_failure + + You can choose from these types. + + Now, this option should be considered *experimental*. + + .. versionadded:: 1.4 + + .. versionchanged:: 1.5 + + Added ``misc.highlighting_failure`` + .. confval:: needs_sphinx If set to a ``major.minor`` version string like ``'1.1'``, Sphinx will @@ -217,6 +252,9 @@ General configuration .. versionadded:: 1.0 + .. versionchanged:: 1.4 + also accepts micro version string + .. confval:: needs_extensions This value can be a dictionary specifying version requirements for extensions @@ -234,7 +272,7 @@ General configuration If true, Sphinx will warn about *all* references where the target cannot be found. Default is ``False``. You can activate this mode temporarily using - the :option:`-n` command-line switch. + the :option:`-n ` command-line switch. .. versionadded:: 1.0 @@ -250,16 +288,25 @@ General configuration .. confval:: numfig If true, figures, tables and code-blocks are automatically numbered if they - have a caption. For now, it works only with the HTML builder. Default is ``False``. + have a caption. At same time, the `numref` role is enabled. For now, it + works only with the HTML builder and LaTeX builder. Default is ``False``. + + .. note:: + + The LaTeX builder always assigns numbers whether this option is enabled or + not. .. versionadded:: 1.3 .. confval:: numfig_format - A dictionary mapping ``'figure'``, ``'table'`` and ``'code-block'`` to - strings that are used for format of figure numbers. Default is to use - ``'Fig. %s'`` for ``'figure'``, ``'Table %s'`` for ``'table'`` and - ``'Listing %s'`` for ``'code-block'``. + A dictionary mapping ``'figure'``, ``'table'``, ``'code-block'`` and + ``'section'`` to strings that are used for format of figure numbers. + As a special character, `%s` will be replaced to figure number. + + Default is to use ``'Fig. %s'`` for ``'figure'``, ``'Table %s'`` for + ``'table'``, ``'Listing %s'`` for ``'code-block'`` and ``'Section'`` for + ``'section'``. .. versionadded:: 1.3 @@ -272,6 +319,21 @@ General configuration .. versionadded:: 1.3 +.. confval:: tls_verify + + If true, Sphinx verifies server certifications. Default is ``True``. + + .. versionadded:: 1.5 + +.. confval:: tls_cacerts + + A path to a certification file of CA or a path to directory which + contains the certificates. This also allows a dictionary mapping + hostname to the path to certificate file. + The certificates are used to verify server certifications. + + .. versionadded:: 1.5 + Project information ------------------- @@ -309,16 +371,35 @@ Project information The default is no :confval:`today` and a :confval:`today_fmt` of ``'%B %d, %Y'`` (or, if translation is enabled with :confval:`language`, an equivalent - %format for the selected locale). + format for the selected locale). + + .. versionchanged:: 1.4 + + Format specification was changed from strftime to Locale Data Markup + Language. strftime format is also supported for backward compatibility + until Sphinx-1.5. + + .. versionchanged:: 1.4.1 + + Format specification was changed again from Locale Data Markup Language + to strftime. LDML format is also supported for backward compatibility + until Sphinx-1.5. .. confval:: highlight_language The default language to highlight source code in. The default is - ``'python'``. The value should be a valid Pygments lexer name, see + ``'python3'``. The value should be a valid Pygments lexer name, see :ref:`code-examples` for more details. .. versionadded:: 0.5 + .. versionchanged:: 1.4 + The default is now ``'default'``. It is similar to ``'python3'``; + it is mostly a superset of ``'python'``. but it fallbacks to + ``'none'`` without warning if failed. ``'python3'`` and other + languages will emit warning if failed. If you prefer Python 2 + only highlighting, you can set it back to ``'python'``. + .. confval:: highlight_options A dictionary of options that modify how the lexer specified by @@ -397,12 +478,18 @@ documentation on :ref:`intl` for details. The code for the language the docs are written in. Any text automatically generated by Sphinx will be in that language. Also, Sphinx will try to substitute individual paragraphs from your documents with the translation - sets obtained from :confval:`locale_dirs`. In the LaTeX builder, a suitable - language will be selected as an option for the *Babel* package. Default is - ``None``, which means that no translation will be done. + sets obtained from :confval:`locale_dirs`. Sphinx will search + language-specific figures named by `figure_language_filename` and substitute + them for original figures. In the LaTeX builder, a suitable language will + be selected as an option for the *Babel* package. Default is ``None``, + which means that no translation will be done. .. versionadded:: 0.5 + .. versionchanged:: 1.4 + + Support figure substitution + Currently supported languages by Sphinx are: * ``bn`` -- Bengali @@ -453,12 +540,15 @@ documentation on :ref:`intl` for details. this path are searched by the standard :mod:`gettext` module. Internal messages are fetched from a text domain of ``sphinx``; so if you - add the directory :file:`./locale` to this settting, the message catalogs + add the directory :file:`./locale` to this setting, the message catalogs (compiled from ``.po`` format using :program:`msgfmt`) must be in :file:`./locale/{language}/LC_MESSAGES/sphinx.mo`. The text domain of individual documents depends on :confval:`gettext_compact`. - The default is ``[]``. + The default is ``['locales']``. + + .. versionchanged:: 1.5 + Use ``locales`` directory as a default value .. confval:: gettext_compact @@ -521,6 +611,30 @@ documentation on :ref:`intl` for details. .. versionadded:: 1.3 +.. confval:: figure_language_filename + + The filename format for language-specific figures. The default value is + ``{root}.{language}{ext}``. It will be expanded to + ``dirname/filename.en.png`` from ``.. image:: dirname/filename.png``. + The available format tokens are: + + * ``{root}`` - the filename, including any path component, without the file + extension, e.g. ``dirname/filename`` + * ``{path}`` - the directory path component of the filename, with a trailing + slash if non-empty, e.g. ``dirname/`` + * ``{basename}`` - the filename without the directory path or file extension + components, e.g. ``filename`` + * ``{ext}`` - the file extension, e.g. ``.png`` + * ``{language}`` - the translation language, e.g. ``en`` + + For example, setting this to ``{path}{language}/{basename}{ext}`` will + expand to ``dirname/en/filename.png`` instead. + + .. versionadded:: 1.4 + + .. versionchanged:: 1.5 + Added ``{path}`` and ``{basename}`` tokens. + .. _html-options: Options for HTML output @@ -565,8 +679,7 @@ that use Sphinx's HTMLWriter class. The "title" for HTML documentation generated with Sphinx's own templates. This is appended to the ```` tag of individual pages, and used in the navigation bar as the "topmost" element. It defaults to :samp:`'{<project>} - v{<revision>} documentation'` (with the values coming from the config - values). + v{<revision>} documentation'`. .. confval:: html_short_title @@ -580,7 +693,7 @@ that use Sphinx's HTMLWriter class. A dictionary of values to pass into the template engine's context for all pages. Single values can also be put in this dictionary using the - :option:`-A` command-line option of ``sphinx-build``. + :option:`-A <sphinx-build -A>` command-line option of ``sphinx-build``. .. versionadded:: 0.5 @@ -635,11 +748,30 @@ that use Sphinx's HTMLWriter class. .. versionadded:: 1.2 + .. versionchanged:: 1.4 + The dotfiles in the extra directory will be copied to the output directory. + And it refers :confval:`exclude_patterns` on copying extra files and + directories, and ignores if path matches to patterns. + .. confval:: html_last_updated_fmt - If this is not the empty string, a 'Last updated on:' timestamp is inserted - at every page bottom, using the given :func:`strftime` format. Default is - ``'%b %d, %Y'`` (or a locale-dependent equivalent). + If this is not None, a 'Last updated on:' timestamp is inserted + at every page bottom, using the given :func:`strftime` format. + The empty string is equivalent to ``'%b %d, %Y'`` (or a + locale-dependent equivalent). + + .. versionchanged:: 1.4 + + Format specification was changed from strftime to Locale Data Markup + Language. strftime format is also supported for backward compatibility + until Sphinx-1.5. + + .. versionchanged:: 1.4.1 + + Format specification was changed again from Locale Data Markup Language + to strftime. LDML format is also supported for backward compatibility + until Sphinx-1.5. + .. confval:: html_use_smartypants @@ -778,9 +910,16 @@ that use Sphinx's HTMLWriter class. .. versionadded:: 0.6 +.. confval:: html_sourcelink_suffix + + Suffix to be appended to source links (see :confval:`html_show_sourcelink`), + unless they have this suffix already. Default is ``'.txt'``. + + .. versionadded:: 1.5 + .. confval:: html_use_opensearch - If nonempty, an `OpenSearch <http://opensearch.org>`_ description file will be + If nonempty, an `OpenSearch <http://www.opensearch.org/Home>`_ description file will be output, and all pages will contain a ``<link>`` tag referring to it. Since OpenSearch doesn't support relative URLs for its search page location, the value of this option must be the base URL from which these documents are @@ -811,6 +950,11 @@ that use Sphinx's HTMLWriter class. .. seealso:: :meth:`~sphinx.application.Sphinx.set_translator` + .. deprecated:: 1.5 + + Implement your translator as extension and use `Sphinx.set_translator` + instead. + .. confval:: html_show_copyright If true, "(C) Copyright ..." is shown in the HTML footer. Default is @@ -873,6 +1017,7 @@ that use Sphinx's HTMLWriter class. * ``es`` -- Spanish * ``sv`` -- Swedish * ``tr`` -- Turkish + * ``zh`` -- Chinese .. admonition:: Accelerating build speed @@ -898,15 +1043,65 @@ that use Sphinx's HTMLWriter class. The Japanese support has these options: - * ``type`` -- ``'mecab'`` or ``'default'`` (selects either MeCab or - TinySegmenter word splitter algorithm) - * ``dic_enc`` -- the encoding for the MeCab algorithm - * ``dict`` -- the dictionary to use for the MeCab algorithm - * ``lib`` -- the library name for finding the MeCab library via ctypes if the - Python binding is not installed + :type: + _`type` is dotted module path string to specify Splitter implementation which + should be derived from :class:`sphinx.search.ja.BaseSplitter`. + If not specified or None is specified, ``'sphinx.search.ja.DefaultSplitter'`` will + be used. + + You can choose from these modules: + + :'sphinx.search.ja.DefaultSplitter': + TinySegmenter algorithm. This is default splitter. + :'sphinx.search.ja.MeCabSplitter': + MeCab binding. To use this splitter, 'mecab' python binding or dynamic link + library ('libmecab.so' for linux, 'libmecab.dll' for windows) is required. + :'sphinx.search.ja.JanomeSplitter': + Janome binding. To use this splitter, + `Janome <https://pypi.python.org/pypi/Janome>`_ is required. + + To keep compatibility, ``'mecab'``, ``'janome'`` and ``'default'`` are also + acceptable. However it will be deprecated in Sphinx-1.6. + + + Other option values depend on splitter value which you choose. + + Options for ``'mecab'``: + :dic_enc: + _`dic_enc option` is the encoding for the MeCab algorithm. + :dict: + _`dict option` is the dictionary to use for the MeCab algorithm. + :lib: + _`lib option` is the library name for finding the MeCab library via ctypes if + the Python binding is not installed. + + For example:: + + html_search_options = { + 'type': 'mecab', + 'dic_enc': 'utf-8', + 'dict': '/path/to/mecab.dic', + 'lib': '/path/to/libmecab.so', + } + + Options for ``'janome'``: + :user_dic: _`user_dic option` is the user dictionary file path for Janome. + :user_dic_enc: + _`user_dic_enc option` is the encoding for the user dictionary file specified by + ``user_dic`` option. Default is 'utf8'. .. versionadded:: 1.1 + .. versionchanged:: 1.4 + html_search_options for Japanese is re-organized and any custom splitter can be + used by `type`_ settings. + + + The Chinese support has these options: + + * ``dict`` -- the ``jieba`` dictionary path if want to use + custom dictionary. + .. confval:: html_search_scorer The name of a JavaScript file (relative to the configuration directory) that @@ -1127,11 +1322,31 @@ the `Dublin Core metadata <http://dublincore.org/>`_. The title of the document. It defaults to the :confval:`html_title` option but can be set independently for epub creation. +.. confval:: epub_description + + The description of the document. The default value is ``''``. + + .. versionadded:: 1.4 + + .. versionchanged:: 1.5 + Renamed from ``epub3_description`` + .. confval:: epub_author The author of the document. This is put in the Dublin Core metadata. The default value is ``'unknown'``. +.. confval:: epub_contributor + + The name of a person, organization, etc. that played a secondary role in + the creation of the content of an EPUB Publication. The default value is + ``'unknown'``. + + .. versionadded:: 1.4 + + .. versionchanged:: 1.5 + Renamed from ``epub3_contributor`` + .. confval:: epub_language The language of the document. This is put in the Dublin Core metadata. The @@ -1234,6 +1449,10 @@ the `Dublin Core metadata <http://dublincore.org/>`_. a chapter, but can be confusing because it mixes entries of different depth in one list. The default value is ``True``. + .. note:: + + ``epub3`` builder ignores ``epub_tocdup`` option(always ``False``) + .. confval:: epub_tocscope This setting control the scope of the epub table of contents. The setting @@ -1287,12 +1506,60 @@ the `Dublin Core metadata <http://dublincore.org/>`_. .. versionadded:: 1.2 +.. confval:: epub_writing_mode + + It specifies writing direction. It can accept ``'horizontal'`` (default) and + ``'vertical'`` + + .. list-table:: + :header-rows: 1 + :stub-columns: 1 + + - * ``epub_writing_mode`` + * ``'horizontal'`` + * ``'vertical'`` + - * writing-mode [#]_ + * ``horizontal-tb`` + * ``vertical-rl`` + - * page progression + * left to right + * right to left + - * iBook's Scroll Theme support + * scroll-axis is vertical. + * scroll-axis is horizontal. + + .. [#] https://developer.mozilla.org/en-US/docs/Web/CSS/writing-mode + +.. confval:: epub3_page_progression_direction + + The global direction in which the content flows. + Allowed values are ``'ltr'`` (left-to-right), ``'rtl'`` (right-to-left) and + ``'default'``. The default value is ``'ltr'``. + + When the ``'default'`` value is specified, the Author is expressing no + preference and the Reading System may chose the rendering direction. + + .. versionadded:: 1.4 + + .. deprecated:: 1.5 + Use ``epub_writing_mode`` instead. + .. _latex-options: Options for LaTeX output ------------------------ -These options influence LaTeX output. +These options influence LaTeX output. See further :doc:`latex`. + +.. confval:: latex_engine + + The LaTeX engine to build the docs. The setting can have the following + values: + + * ``'pdflatex'`` -- PDFLaTeX (default) + * ``'xelatex'`` -- XeLaTeX + * ``'lualatex'`` -- LuaLaTeX + * ``'platex'`` -- pLaTeX (default if :confval:`language` is ``'ja'``) .. confval:: latex_documents @@ -1312,11 +1579,13 @@ These options influence LaTeX output. * *author*: Author for the LaTeX document. The same LaTeX markup caveat as for *title* applies. Use ``\and`` to separate multiple authors, as in: ``'John \and Sarah'``. - * *documentclass*: Normally, one of ``'manual'`` or ``'howto'`` (provided by - Sphinx). Other document classes can be given, but they must include the - "sphinx" package in order to define Sphinx's custom LaTeX commands. "howto" - documents will not get appendices. Also, howtos will have a simpler title - page. + * *documentclass*: Normally, one of ``'manual'`` or ``'howto'`` (provided + by Sphinx and based on ``'report'``, resp. ``'article'``; Japanese + documents use ``'jsbook'``, resp. ``'jreport'``.) "howto" (non-Japanese) + documents will not get appendices. Also they have a simpler title page. + Other document classes can be given. Independently of the document class, + the "sphinx" package is always loaded in order to define Sphinx's custom + LaTeX commands. * *toctree_only*: Must be ``True`` or ``False``. If true, the *startdoc* document itself is not included in the output, only the documents @@ -1337,6 +1606,15 @@ These options influence LaTeX output. configuration directory) that is the logo of the docs. It is placed at the top of the title page. Default: ``None``. +.. confval:: latex_toplevel_sectioning + + This value determines the topmost sectioning unit. It should be chosen from + ``part``, ``chapter`` or ``section``. The default is ``None``; the topmost + sectioning unit is switched by documentclass. ``section`` is used if + documentclass will be ``howto``, otherwise ``chapter`` will be used. + + .. versionadded:: 1.4 + .. confval:: latex_use_parts If true, the topmost sectioning unit is parts, else it is chapters. Default: @@ -1344,6 +1622,9 @@ These options influence LaTeX output. .. versionadded:: 0.3 + .. deprecated:: 1.4 + Use :confval:`latex_toplevel_sectioning`. + .. confval:: latex_appendices A list of document names to append as an appendix to all manuals. @@ -1388,6 +1669,21 @@ These options influence LaTeX output. value selected the ``'inline'`` display. For backwards compatibility, ``True`` is still accepted. +.. confval:: latex_keep_old_macro_names + + If ``True`` (default) the ``\strong``, ``\code``, ``\bfcode``, ``\email``, + ``\tablecontinued``, ``\titleref``, ``\menuselection``, ``\accelerator``, + ``\crossref``, ``\termref``, and ``\optional`` text styling macros are + pre-defined by Sphinx and may be user-customized by some + ``\renewcommand``'s inserted either via ``'preamble'`` key or :dudir:`raw + <raw-data-pass-through>` directive. If ``False``, only ``\sphinxstrong``, + etc... macros are defined (and may be redefined by user). Setting to + ``False`` may help solve macro name conflicts caused by user-added latex + packages. + + .. versionadded:: 1.4.5 + + .. confval:: latex_elements .. versionadded:: 0.5 @@ -1406,8 +1702,40 @@ These options influence LaTeX output. ``'pointsize'`` Point size option of the document class (``'10pt'``, ``'11pt'`` or ``'12pt'``), default ``'10pt'``. + ``'pxunit'`` + the value of the ``px`` when used in image attributes ``width`` and + ``height``. The default value is ``'49336sp'`` which achieves + ``96px=1in`` (``1in = 72.27*65536 = 4736286.72sp``, and all dimensions + in TeX are internally integer multiples of ``sp``). To obtain for + example ``100px=1in``, one can use ``'0.01in'`` but it is more precise + to use ``'47363sp'``. To obtain ``72px=1in``, use ``'1bp'``. + + .. versionadded:: 1.5 + ``'sphinxsetup'`` + A comma separated list of ``key=value`` package options for the Sphinx + LaTeX style, default empty. See :doc:`latex`. + + .. versionadded:: 1.5 + ``'passoptionstopackages'`` + A string which will be positioned early in the preamble, designed to + contain ``\\PassOptionsToPackage{options}{foo}`` commands. Default empty. + + .. versionadded:: 1.4 + ``'geometry'`` + "geometry" package inclusion, the default definition is: + + ``'\\usepackage[margin=1in,marginparwidth=0.5in]{geometry}'``. + + .. versionadded:: 1.5 ``'babel'`` - "babel" package inclusion, default ``'\\usepackage{babel}'``. + "babel" package inclusion, default ``'\\usepackage{babel}'`` (the + suitable document language string is passed as class option, and + ``english`` is used if no language.) For Japanese documents, the + default is the empty string. + + .. versionchanged:: 1.5 + For :confval:`latex_engine` set to ``'xelatex'``, the default + is ``'\\usepackage{polyglossia}\n\\setmainlanguage{<language>}'``. ``'fontpkg'`` Font package inclusion, default ``'\\usepackage{times}'`` (which uses Times and Helvetica). You can set this to ``''`` to use the Computer @@ -1416,45 +1744,104 @@ These options influence LaTeX output. .. versionchanged:: 1.2 Defaults to ``''`` when the :confval:`language` uses the Cyrillic script. + .. versionchanged:: 1.5 + Defaults to ``''`` when :confval:`latex_engine` is ``'xelatex'``. ``'fncychap'`` Inclusion of the "fncychap" package (which makes fancy chapter titles), - default ``'\\usepackage[Bjarne]{fncychap}'`` for English documentation, + default ``'\\usepackage[Bjarne]{fncychap}'`` for English documentation + (this option is slightly customized by Sphinx), ``'\\usepackage[Sonny]{fncychap}'`` for internationalized docs (because the "Bjarne" style uses numbers spelled out in English). Other - "fncychap" styles you can try include "Lenny", "Glenn", "Conny" and - "Rejne". You can also set this to ``''`` to disable fncychap. + "fncychap" styles you can try are "Lenny", "Glenn", "Conny", "Rejne" and + "Bjornstrup". You can also set this to ``''`` to disable fncychap. ``'preamble'`` - Additional preamble content, default empty. + Additional preamble content, default empty. See :doc:`latex`. + ``'atendofbody'`` + Additional document content (right before the indices), default empty. + + .. versionadded:: 1.5 ``'figure_align'`` Latex figure float alignment, default 'htbp' (here, top, bottom, page). Whenever an image doesn't fit into the current page, it will be 'floated' into the next page but may be preceded by any other text. If you don't like this behavior, use 'H' which will disable floating and position figures strictly in the order they appear in the source. + + .. versionadded:: 1.3 ``'footer'`` Additional footer content (before the indices), default empty. + .. deprecated:: 1.5 + Use ``'atendofbody'`` key instead. + * Keys that don't need be overridden unless in special cases are: + ``'maxlistdepth'`` + LaTeX allows by default at most 6 levels for nesting list and + quote-like environments, with at most 4 enumerated lists, and 4 bullet + lists. Setting this key for example to ``'10'`` (as a string) will + allow up to 10 nested levels (of all sorts). Leaving it to the empty + string means to obey the LaTeX default. + + .. warning:: + + - Using this key may prove incompatible with some LaTeX packages + or special document classes which do their own list customization. + + - The key setting is silently *ignored* if ``\usepackage{enumitem}`` + is executed inside the document preamble. Use then rather the + dedicated commands of this LaTeX package. + + .. versionadded:: 1.5 ``'inputenc'`` - "inputenc" package inclusion, default - ``'\\usepackage[utf8]{inputenc}'``. + "inputenc" package inclusion, defaults to + ``'\\usepackage[utf8]{inputenc}'`` when using pdflatex. + Otherwise empty. + + .. versionchanged:: 1.4.3 + Previously ``'\\usepackage[utf8]{inputenc}'`` was used for all + compilers. ``'cmappkg'`` "cmap" package inclusion, default ``'\\usepackage{cmap}'``. .. versionadded:: 1.2 ``'fontenc'`` "fontenc" package inclusion, default ``'\\usepackage[T1]{fontenc}'``. + + .. versionchanged:: 1.5 + Defaults to ``'\\usepackage{fontspec}'`` when + :confval:`latex_engine` is ``'xelatex'``. + ``'hyperref'`` + "hyperref" package inclusion; also loads package "hypcap" and issues + ``\urlstyle{same}``. This is done after :file:`sphinx.sty` file is + loaded and before executing the contents of ``'preamble'`` key. + + .. attention:: + + Loading of packages "hyperref" and "hypcap" is mandatory. + + .. versionadded:: 1.5 + Previously this was done from inside :file:`sphinx.sty`. ``'maketitle'`` - "maketitle" call, default ``'\\maketitle'``. Override if you want to + "maketitle" call, default ``'\\maketitle'`` (but it has been + redefined by the Sphinx ``manual`` and ``howto`` classes.) Override + if you want to generate a differently-styled title page. ``'releasename'`` value that prefixes ``'release'`` element on title page, default ``'Release'``. ``'tableofcontents'`` - "tableofcontents" call, default ``'\\tableofcontents'``. Override if + "tableofcontents" call, default ``'\\sphinxtableofcontents'`` (it is a + wrapper of unmodified ``\tableofcontents``, which may itself be + customized by user loaded packages.) + Override if you want to generate a different table of contents or put content between the title page and the TOC. + + .. versionchanged:: 1.5 + Previously the meaning of ``\tableofcontents`` itself was modified + by Sphinx. This created an incompatibility with dedicated packages + modifying it also such as "tocloft" or "etoc". ``'transition'`` Commands used to display transitions, default ``'\n\n\\bigskip\\hrule{}\\bigskip\n\n'``. Override if you want to @@ -1464,7 +1851,9 @@ These options influence LaTeX output. ``'printindex'`` "printindex" call, the last thing in the file, default ``'\\printindex'``. Override if you want to generate the index - differently or append some content after the index. + differently or append some content after the index. For example + ``'\\footnotesize\\raggedright\\printindex'`` is advisable when the + index is full of long entries. * Keys that are set by other options and therefore should not be overridden are: @@ -1487,6 +1876,11 @@ These options influence LaTeX output. .. versionadded:: 1.0 + .. versionchanged:: 1.5 + + In Japanese docs (:confval:`language` is ``'ja'``), by default + ``'jreport'`` is used for ``'howto'`` and ``'jsbook'`` for ``'manual'``. + .. confval:: latex_additional_files A list of file names, relative to the configuration directory, to copy to the @@ -1715,11 +2109,17 @@ Options for the linkcheck builder .. versionadded:: 1.1 +.. confval:: linkcheck_retries + + The number of times the linkcheck builder will attempt to check a URL before + declaring it broken. Defaults to 1 attempt. + + .. versionadded:: 1.4 + .. confval:: linkcheck_timeout - A timeout value, in seconds, for the linkcheck builder. **Only works in - Python 2.6 and higher.** The default is to use Python's global socket - timeout. + A timeout value, in seconds, for the linkcheck builder. The default is to + use Python's global socket timeout. .. versionadded:: 1.1 @@ -1738,6 +2138,17 @@ Options for the linkcheck builder .. versionadded:: 1.2 +.. confval:: linkcheck_anchors_ignore + + A list of regular expressions that match URIs that should skip checking + the validity of anchors in links. This allows skipping entire sites, where + anchors are used to control dynamic pages, or just specific anchors within + a page, where javascript is used to add anchors dynamically, or use the + fragment as part of to trigger an internal REST request. Default is + ``["/#!"]``. + + .. versionadded:: 1.5 + Options for the XML builder --------------------------- @@ -1755,3 +2166,38 @@ Options for the XML builder constructs ``*``, ``?``, ``[...]`` and ``[!...]`` with the feature that these all don't match slashes. A double star ``**`` can be used to match any sequence of characters *including* slashes. + + +.. _cpp-config: + +Options for the C++ domain +-------------------------- + +.. confval:: cpp_index_common_prefix + + A list of prefixes that will be ignored when sorting C++ objects in the global index. + For example ``['awesome_lib::']``. + + .. versionadded:: 1.5 + +.. confval:: cpp_id_attributes + + A list of strings that the parser additionally should accept as attributes. + This can for example be used when attributes have been ``#define`` d for portability. + + .. versionadded:: 1.5 + +.. confval:: cpp_paren_attributes + + A list of strings that the parser additionally should accept as attributes with one argument. + That is, if ``my_align_as`` is in the list, then ``my_align_as(X)`` is parsed as an attribute + for all strings ``X`` that have balanced brances (``()``, ``[]``, and ``{}``). + This can for example be used when attributes have been ``#define`` d for portability. + + .. versionadded:: 1.5 + +Example of configuration file +============================= + +.. literalinclude:: _static/conf.py.txt + :language: python diff --git a/doc/contents.rst b/doc/contents.rst index a51910b815d..0f5527baef6 100644 --- a/doc/contents.rst +++ b/doc/contents.rst @@ -1,3 +1,4 @@ + .. _contents: Sphinx documentation contents @@ -17,6 +18,7 @@ Sphinx documentation contents intl theming templating + latex extensions extdev/index websupport @@ -32,7 +34,14 @@ Sphinx documentation contents Indices and tables ================== -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` -* :ref:`glossary` +.. only:: builder_html + + * :ref:`genindex` + * :ref:`modindex` + * :ref:`search` + * :ref:`glossary` + +.. only:: not builder_html + + * :ref:`modindex` + * :ref:`glossary` diff --git a/doc/develop.rst b/doc/develop.rst index bc6842eb975..f2f336cfa6c 100644 --- a/doc/develop.rst +++ b/doc/develop.rst @@ -10,7 +10,7 @@ Sphinx is a maintained by a group of volunteers. We value every contribution! * Issues and feature requests should be raised in the `tracker <https://github.com/sphinx-doc/sphinx/issues>`_. * The mailing list for development is at `Google Groups - <https://groups.google.com/group/sphinx-dev/>`_. + <https://groups.google.com/forum/#!forum/sphinx-dev>`_. * There is also the #sphinx-doc IRC channel on `freenode <http://freenode.net/>`_. @@ -21,7 +21,7 @@ Extensions To learn how to write your own extension, see :ref:`dev-extensions`. -The `sphinx-contrib <http://bitbucket.org/birkenfeld/sphinx-contrib/>`_ +The `sphinx-contrib <https://bitbucket.org/birkenfeld/sphinx-contrib/>`_ repository contains many contributed extensions. Some of them have their own releases on PyPI, others you can install from a checkout. @@ -96,14 +96,14 @@ own extensions. .. _aafigure: https://launchpad.net/aafigure .. _gnuplot: http://www.gnuplot.info/ -.. _paver: http://www.blueskyonmars.com/projects/paver/ +.. _paver: http://paver.github.io/paver/ .. _Sword: http://www.crosswire.org/sword/ .. _Lilypond: http://lilypond.org/ .. _sdedit: http://sdedit.sourceforge.net/ .. _Trac: http://trac.edgewall.org .. _TracLinks: http://trac.edgewall.org/wiki/TracLinks .. _OmegaT: http://www.omegat.org/ -.. _PlantUML: http://plantuml.sourceforge.net/ +.. _PlantUML: http://plantuml.com/ .. _PyEnchant: http://www.rfk.id.au/software/pyenchant/ .. _sadisplay: https://bitbucket.org/estin/sadisplay/wiki/Home .. _blockdiag: http://blockdiag.com/en/ @@ -112,24 +112,24 @@ own extensions. .. _nwdiag: http://blockdiag.com/en/ .. _Google Analytics: http://www.google.com/analytics/ .. _Google Chart: https://developers.google.com/chart/ -.. _Google Maps: https://maps.google.com/ +.. _Google Maps: https://www.google.com/maps .. _Google style: http://google-styleguide.googlecode.com/svn/trunk/pyguide.html .. _NumPy style: https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt -.. _hyphenator: http://code.google.com/p/hyphenator/ +.. _hyphenator: https://github.com/mnater/hyphenator .. _exceltable: http://pythonhosted.org/sphinxcontrib-exceltable/ .. _YouTube: http://www.youtube.com/ .. _ClearQuest: http://www-03.ibm.com/software/products/en/clearquest .. _Zope interfaces: http://docs.zope.org/zope.interface/README.html .. _slideshare: http://www.slideshare.net/ -.. _TikZ/PGF LaTeX package: http://sourceforge.net/projects/pgf/ +.. _TikZ/PGF LaTeX package: https://sourceforge.net/projects/pgf/ .. _MATLAB: http://www.mathworks.com/products/matlab/ -.. _swf: http://bitbucket.org/klorenz/sphinxcontrib-swf -.. _findanything: http://bitbucket.org/klorenz/sphinxcontrib-findanything -.. _cmakedomain: http://bitbucket.org/klorenz/sphinxcontrib-cmakedomain +.. _swf: https://bitbucket.org/klorenz/sphinxcontrib-swf +.. _findanything: https://bitbucket.org/klorenz/sphinxcontrib-findanything +.. _cmakedomain: https://bitbucket.org/klorenz/sphinxcontrib-cmakedomain .. _GNU Make: http://www.gnu.org/software/make/ -.. _makedomain: http://bitbucket.org/klorenz/sphinxcontrib-makedomain +.. _makedomain: https://bitbucket.org/klorenz/sphinxcontrib-makedomain .. _inlinesyntaxhighlight: http://sphinxcontrib-inlinesyntaxhighlight.readthedocs.org -.. _CMake: http://cmake.org -.. _domaintools: http://bitbucket.org/klorenz/sphinxcontrib-domaintools +.. _CMake: https://cmake.org +.. _domaintools: https://bitbucket.org/klorenz/sphinxcontrib-domaintools .. _restbuilder: https://pypi.python.org/pypi/sphinxcontrib-restbuilder .. _Lasso: http://www.lassosoft.com/ diff --git a/doc/devguide.rst b/doc/devguide.rst index 313b026bebd..f29646550c2 100644 --- a/doc/devguide.rst +++ b/doc/devguide.rst @@ -111,9 +111,14 @@ These are the basic steps needed to start developing on Sphinx. * Run the unit tests:: - pip install nose mock + pip install -r test-reqs.txt make test + * Again, it's useful to turn on deprecation warnings on so they're shown in + the test output:: + + PYTHONWARNINGS=all make test + * Build the documentation and check the output for different builders:: cd doc @@ -272,3 +277,55 @@ Debugging Tips $ npm install $ node_modules/.bin/grunt build # -> dest/*.global.js + +Deprecating a feature +--------------------- + +There are a couple reasons that code in Sphinx might be deprecated: + +* If a feature has been improved or modified in a backwards-incompatible way, + the old feature or behavior will be deprecated. + +* Sometimes Sphinx will include a backport of a Python library that's not + included in a version of Python that Sphinx currently supports. When Sphinx + no longer needs to support the older version of Python that doesn't include + the library, the library will be deprecated in Sphinx. + +As the :ref:`deprecation-policy` describes, +the first release of Sphinx that deprecates a feature (``A.B``) should raise a +``RemovedInSphinxXXWarning`` (where XX is the Sphinx version where the feature +will be removed) when the deprecated feature is invoked. Assuming we have good +test coverage, these warnings are converted to errors when running the test +suite with warnings enabled: ``python -Wall tests/run.py``. Thus, when adding +a ``RemovedInSphinxXXWarning`` you need to eliminate or silence any warnings +generated when running the tests. + +.. _deprecation-policy: + +Deprecation policy +------------------ + +A feature release may deprecate certain features from previous releases. If a +feature is deprecated in feature release 1.A, it will continue to work in all +1.A.x versions (for all versions of x) but raise warnings. Deprecated features +will be removed in the first 1.B release, or 1.B.1 for features deprecated in +the last 1.A.x feature release to ensure deprecations are done over at least 2 +feature releases. + +So, for example, if we decided to start the deprecation of a function in +Sphinx 1.4: + +* Sphinx 1.4.x will contain a backwards-compatible replica of the function + which will raise a ``RemovedInSphinx16Warning``. + +* Sphinx 1.5 (the version that follows 1.4) will still contain the + backwards-compatible replica. + +* Sphinx 1.6 will remove the feature outright. + +The warnings are displayed by default. You can turn off display of these +warnings with: + +* ``PYTHONWARNINGS= make html`` (Linux/Mac) +* ``export PYTHONWARNINGS=`` and do ``make html`` (Linux/Mac) +* ``set PYTHONWARNINGS=`` and do ``make html`` (Windows) diff --git a/doc/domains.rst b/doc/domains.rst index 1ebcd3b7de7..7ff0d2f5f54 100644 --- a/doc/domains.rst +++ b/doc/domains.rst @@ -359,6 +359,25 @@ single word, like this:: :param int priority: The priority of the message, can be a number 1-5 +.. versionadded:: 1.5 + +Container types such as lists and dictionaries can be linked automatically +using the following syntax:: + + :type priorities: list(int) + :type priorities: list[int] + :type mapping: dict(str, int) + :type mapping: dict[str, int] + :type point: tuple(float, float) + :type point: tuple[float, float] + +Multiple types in a type field will be linked automatically if separated by +the word "or":: + + :type an_arg: int or None + :vartype a_var: str or int + :rtype: float or str + .. _python-roles: Cross-referencing Python objects @@ -538,17 +557,17 @@ a visibility statement (``public``, ``private`` or ``protected``). .. cpp:class:: template<typename T, std::size_t N> std::array - or with a line beak:: + or with a line break:: .. cpp:class:: template<typename T, std::size_t N> \ std::array Full and partial template specialisations can be declared:: - .. cpp::class:: template<> \ + .. cpp:class:: template<> \ std::array<bool, 256> - .. cpp::class:: template<typename T> \ + .. cpp:class:: template<typename T> \ std::array<T, 42> @@ -594,7 +613,7 @@ a visibility statement (``public``, ``private`` or ``protected``). .. rst:directive:: .. cpp:member:: (member) variable declaration .. cpp:var:: (member) variable declaration - Describe a varible or member variable, e.g.,:: + Describe a variable or member variable, e.g.,:: .. cpp:member:: std::string MyClass::myMember @@ -629,9 +648,26 @@ a visibility statement (``public``, ``private`` or ``protected``). A type alias can also be templated:: - .. cpp:type:: template<typename T> + .. cpp:type:: template<typename T> \ MyContainer = std::vector<T> + The example are rendered as follows. + + .. cpp:type:: std::vector<int> MyList + + A typedef-like declaration of a type. + + .. cpp:type:: MyContainer::const_iterator + + Declaration of a type alias with unspecified type. + + .. cpp:type:: MyType = std::unordered_map<int, std::string> + + Declaration of a type alias. + + .. cpp:type:: template<typename T> \ + MyContainer = std::vector<T> + .. rst:directive:: .. cpp:enum:: unscoped enum declaration .. cpp:enum-struct:: scoped enum declaration @@ -663,15 +699,98 @@ a visibility statement (``public``, ``private`` or ``protected``). Describe an enumerator, optionally with its value defined, e.g.,:: - .. cpp::enumerator:: MyEnum::myEnumerator + .. cpp:enumerator:: MyEnum::myEnumerator + + .. cpp:enumerator:: MyEnum::myOtherEnumerator = 42 + + +.. rst:directive:: .. cpp:concept:: template-parameter-list name + .. cpp:concept:: template-parameter-list name() + + .. warning:: The support for concepts is experimental. It is based on the + Concepts Technical Specification, and the features may change as the TS evolves. + + Describe a variable concept or a function concept. Both must have exactly 1 + template parameter list. The name may be a nested name. Examples:: + + .. cpp:concept:: template<typename It> std::Iterator + + Proxy to an element of a notional sequence that can be compared, + indirected, or incremented. + + .. cpp:concept:: template<typename Cont> std::Container() + + Holder of elements, to which it can provide access via + :cpp:concept:`Iterator` s. + + They will render as follows: + + .. cpp:concept:: template<typename It> std::Iterator + + Proxy to an element of a notional sequence that can be compared, + indirected, or incremented. + + .. cpp:concept:: template<typename Cont> std::Container() + + Holder of elements, to which it can provide access via + :cpp:concept:`Iterator` s. + +Constrained Templates +~~~~~~~~~~~~~~~~~~~~~ + +.. warning:: The support for constrained templates is experimental. It is based on the + Concepts Technical Specification, and the features may change as the TS evolves. + +.. note:: Sphinx does not currently support ``requires`` clauses. + +Placeholders +............ + +Declarations may use the name of a concept to introduce constrained template +parameters, or the keyword ``auto`` to introduce unconstrained template parameters:: + + .. cpp:function:: void f(auto &&arg) + + A function template with a single unconstrained template parameter. + + .. cpp:function:: void f(std::Iterator it) + + A function template with a single template parameter, constrained by the + Iterator concept. - .. cpp::enumerator:: MyEnum::myOtherEnumerator = 42 +Template Introductions +...................... + +Simple constrained function or class templates can be declared with a +`template introduction` instead of a template parameter list:: + + .. cpp:function:: std::Iterator{It} void advance(It &it) + + A function template with a template parameter constrained to be an Iterator. + + .. cpp:class:: std::LessThanComparable{T} MySortedContainer + + A class template with a template parameter constrained to be LessThanComparable. + +They are rendered as follows. + +.. cpp:function:: std::Iterator{It} void advance(It &it) + + A function template with a template parameter constrained to be an Iterator. + +.. cpp:class:: std::LessThanComparable{T} MySortedContainer + + A class template with a template parameter constrained to be LessThanComparable. + +Note however that no checking is performed with respect to parameter +compatibility. E.g., ``Iterator{A, B, C}`` will be accepted as an introduction +even though it would not be valid C++. Namespacing ~~~~~~~~~~~~~~~~~ -Declarations in the C++ doamin are as default placed in global scope. +Declarations in the C++ domain are as default placed in global scope. The current scope can be changed using three namespace directives. They manage a stack declarations where ``cpp:namespace`` resets the stack and changes a given scope. @@ -755,6 +874,7 @@ Info field lists The C++ directives support the following info fields (see also :ref:`info-field-lists`): * `param`, `parameter`, `arg`, `argument`: Description of a parameter. +* `tparam`: Description of a template parameter. * `returns`, `return`: Description of a return value. * `throws`, `throw`, `exception`: Description of a possibly thrown exception. @@ -764,7 +884,7 @@ The C++ directives support the following info fields (see also :ref:`info-field- Cross-referencing ~~~~~~~~~~~~~~~~~ -These roles link to the given object types: +These roles link to the given declaration types: .. rst:role:: cpp:any cpp:class @@ -772,22 +892,23 @@ These roles link to the given object types: cpp:member cpp:var cpp:type + cpp:concept cpp:enum cpp:enumerator - Reference a C++ object by name. The name must be properly qualified relative to the - position of the link. + Reference a C++ declaration by name (see below for details). + The name must be properly qualified relative to the position of the link. - .. note:: +.. admonition:: Note on References with Templates Parameters/Arguments - Sphinx's syntax to give references a custom title can interfere with - linking to template classes, if nothing follows the closing angle - bracket, i.e. if the link looks like this: ``:cpp:class:`MyClass<T>```. - This is interpreted as a link to ``T`` with a title of ``MyClass``. - In this case, please escape the opening angle bracket with a backslash, - like this: ``:cpp:class:`MyClass\<T>```. + Sphinx's syntax to give references a custom title can interfere with + linking to template classes, if nothing follows the closing angle + bracket, i.e. if the link looks like this: ``:cpp:class:`MyClass<int>```. + This is interpreted as a link to ``int`` with a title of ``MyClass``. + In this case, please escape the opening angle bracket with a backslash, + like this: ``:cpp:class:`MyClass\<int>```. -.. admonition:: Note on References +.. admonition:: Note on References to Overloaded Functions It is currently impossible to link to a specific version of an overloaded method. Currently the C++ domain is the first domain @@ -796,6 +917,85 @@ These roles link to the given object types: specific overload. Currently Sphinx will link to the first overloaded version of the method / function. +Declarations without template parameters and template arguments +................................................................. + +For linking to non-templated declarations the name must be a nested name, +e.g., ``f`` or ``MyClass::f``. + +Templated declarations +...................... + +Assume the following declarations. + +.. cpp:class:: Wrapper + + .. cpp:class:: template<typename TOuter> \ + Outer + + .. cpp:class:: template<typename TInner> \ + Inner + +In general the reference must include the template paraemter declarations, e.g., +``template\<typename TOuter> Wrapper::Outer`` (:cpp:class:`template\<typename TOuter> Wrapper::Outer`). +Currently the lookup only succeed if the template parameter identifiers are equal strings. That is, +``template\<typename UOuter> Wrapper::Outer`` will not work. + +The inner template class can not be directly referenced, unless the current namespace +is changed or the following shorthand is used. +If a template parameter list is omitted, then the lookup will assume either a template or a non-template, +but not a partial template specialisation. +This means the following references work. + +- ``Wrapper::Outer`` (:cpp:class:`Wrapper::Outer`) +- ``Wrapper::Outer::Inner`` (:cpp:class:`Wrapper::Outer::Inner`) +- ``template\<typename TInner> Wrapper::Outer::Inner`` (:cpp:class:`template\<typename TInner> Wrapper::Outer::Inner`) + +(Full) Template Specialisations +................................ + +Assume the following declarations. + +.. cpp:class:: template<typename TOuter> \ + Outer + + .. cpp:class:: template<typename TInner> \ + Inner + +.. cpp:class:: template<> \ + Outer<int> + + .. cpp:class:: template<typename TInner> \ + Inner + + .. cpp:class:: template<> \ + Inner<bool> + +In general the reference must include a template parameter list for each template argument list. +The full specialisation above can therefore be referenced with ``template\<> Outer\<int>`` (:cpp:class:`template\<> Outer\<int>`) +and ``template\<> template\<> Outer\<int>::Inner\<bool>`` (:cpp:class:`template\<> template\<> Outer\<int>::Inner\<bool>`). +As a shorthand the empty template parameter list can be omitted, e.g., ``Outer\<int>`` (:cpp:class:`Outer\<int>`) +and ``Outer\<int>::Inner\<bool>`` (:cpp:class:`Outer\<int>::Inner\<bool>`). + + +Partial Template Specialisations +................................. + +Assume the following declaration. + +.. cpp:class:: template<typename T> \ + Outer<T*> + +References to partial specialisations must always include the template parameter lists, e.g., +``template\<typename T> Outer\<T*>`` (:cpp:class:`template\<typename T> Outer\<T*>`). +Currently the lookup only succeed if the template parameter identifiers are equal strings. + + +Configuration Variables +~~~~~~~~~~~~~~~~~~~~~~~ + +See :ref:`cpp-config`. + The Standard Domain ------------------- diff --git a/doc/ext/autodoc.rst b/doc/ext/autodoc.rst index 844c636840a..50004e57578 100644 --- a/doc/ext/autodoc.rst +++ b/doc/ext/autodoc.rst @@ -41,7 +41,7 @@ you can also enable the :mod:`napoleon <sphinx.ext.napoleon>` extension. docstrings to correct reStructuredText before :mod:`autodoc` processes them. .. _Google: - http://google-styleguide.googlecode.com/svn/trunk/pyguide.html#Comments + https://google.github.io/styleguide/pyguide.html#Comments .. _NumPy: https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt @@ -314,6 +314,12 @@ There are also new config values that you can set: .. versionadded:: 0.3 + If the class has no ``__init__`` method or if the ``__init__`` method's + docstring is empty, but the class has a ``__new__`` method's docstring, + it is used instead. + + .. versionadded:: 1.4 + .. confval:: autodoc_member_order This value selects if automatically documented members are sorted @@ -440,6 +446,11 @@ member should be included in the documentation by using the following event: documentation. The member is excluded if a handler returns ``True``. It is included if the handler returns ``False``. + If more than one enabled extension handles the ``autodoc-skip-member`` + event, autodoc will use the first non-``None`` value returned by a handler. + Handlers should return ``None`` to fall back to the skipping behavior of + autodoc and other enabled extensions. + :param app: the Sphinx application object :param what: the type of the object which the docstring belongs to (one of ``"module"``, ``"class"``, ``"exception"``, ``"function"``, ``"method"``, diff --git a/doc/ext/autosectionlabel.rst b/doc/ext/autosectionlabel.rst new file mode 100644 index 00000000000..10d998075ea --- /dev/null +++ b/doc/ext/autosectionlabel.rst @@ -0,0 +1,25 @@ +.. highlight:: rest + +:mod:`sphinx.ext.autosectionlabel` -- Allow reference sections using its title +============================================================================== + +.. module:: sphinx.ext.autosectionlabel + :synopsis: Allow reference section its title. + +.. versionadded:: 1.4 + +This extension allows you to refer sections its title. This affects to the +reference role (:rst:role:`ref`). + +For example:: + + A Plain Title + ------------- + + This is the text of the section. + + It refers to the section title, see :ref:`A Plain Title`. + + +Internally, this extension generates the labels for each section. If same +section names are used in whole of document, any one is used for a target. diff --git a/doc/ext/builtins.rst b/doc/ext/builtins.rst new file mode 100644 index 00000000000..6d5e59a89fd --- /dev/null +++ b/doc/ext/builtins.rst @@ -0,0 +1,24 @@ +Builtin Sphinx extensions +------------------------- + +These extensions are built in and can be activated by respective entries in the +:confval:`extensions` configuration value: + +.. toctree:: + + autodoc + autosectionlabel + autosummary + coverage + doctest + extlinks + githubpages + graphviz + ifconfig + inheritance + intersphinx + linkcode + math + napoleon + todo + viewcode diff --git a/doc/ext/doctest.rst b/doc/ext/doctest.rst index 9b1b4e6d4ff..818b8600703 100644 --- a/doc/ext/doctest.rst +++ b/doc/ext/doctest.rst @@ -33,11 +33,14 @@ There are two kinds of test blocks: * *code-output-style* blocks consist of an ordinary piece of Python code, and optionally, a piece of output for that code. -The doctest extension provides four directives. The *group* argument is -interpreted as follows: if it is empty, the block is assigned to the group named -``default``. If it is ``*``, the block is assigned to all groups (including the -``default`` group). Otherwise, it must be a comma-separated list of group -names. + +Directives +---------- + +The *group* argument below is interpreted as follows: if it is empty, the block +is assigned to the group named ``default``. If it is ``*``, the block is +assigned to all groups (including the ``default`` group). Otherwise, it must be +a comma-separated list of group names. .. rst:directive:: .. testsetup:: [group] @@ -56,12 +59,9 @@ names. .. rst:directive:: .. doctest:: [group] A doctest-style code block. You can use standard :mod:`doctest` flags for - controlling how actual output is compared with what you give as output. By - default, these options are enabled: ``ELLIPSIS`` (allowing you to put - ellipses in the expected output that match anything in the actual output), - ``IGNORE_EXCEPTION_DETAIL`` (not comparing tracebacks), - ``DONT_ACCEPT_TRUE_FOR_1`` (by default, doctest accepts "True" in the output - where "1" is given -- this is a relic of pre-Python 2.2 times). + controlling how actual output is compared with what you give as output. The + default set of flags is specified by the :confval:`doctest_default_flags` + configuration variable. This directive supports two options: @@ -174,7 +174,24 @@ The following is an example for the usage of the directives. The test via This parrot wouldn't voom if you put 3000 volts through it! -There are also these config values for customizing the doctest extension: +Configuration +------------- + +The doctest extension uses the following configuration values: + +.. confval:: doctest_default_flags + + By default, these options are enabled: + + - ``ELLIPSIS``, allowing you to put ellipses in the expected output that + match anything in the actual output; + - ``IGNORE_EXCEPTION_DETAIL``, causing everything following the leftmost + colon and any module information in the exception name to be ignored; + - ``DONT_ACCEPT_TRUE_FOR_1``, rejecting "True" in the output where "1" is + given -- the default behavior of accepting this substitution is a relic of + pre-Python 2.2 times. + + .. versionadded:: 1.5 .. confval:: doctest_path diff --git a/doc/ext/example_google.py b/doc/ext/example_google.py index 337b06d4f37..34a720e360b 100644 --- a/doc/ext/example_google.py +++ b/doc/ext/example_google.py @@ -24,6 +24,10 @@ one convention to document module level variables and be consistent with it. +Todo: + * For module TODOs + * You have to also use ``sphinx.ext.todo`` extension + .. _Google Python Style Guide: http://google.github.io/styleguide/pyguide.html @@ -39,6 +43,39 @@ """ +def function_with_types_in_docstring(param1, param2): + """Example function with types documented in the docstring. + + `PEP 484`_ type annotations are supported. If attribute, parameter, and + return types are annotated according to `PEP 484`_, they do not need to be + included in the docstring: + + Args: + param1 (int): The first parameter. + param2 (str): The second parameter. + + Returns: + bool: The return value. True for success, False otherwise. + + .. _PEP 484: + https://www.python.org/dev/peps/pep-0484/ + + """ + + +def function_with_pep484_type_annotations(param1: int, param2: str) -> bool: + """Example function with PEP 484 type annotations. + + Args: + param1: The first parameter. + param2: The second parameter. + + Returns: + The return value. True for success, False otherwise. + + """ + + def module_level_function(param1, param2=None, *args, **kwargs): """This is an example of a module level function. @@ -46,9 +83,6 @@ def module_level_function(param1, param2=None, *args, **kwargs): of each parameter is required. The type and description of each parameter is optional, but should be included if not obvious. - Parameter types -- if given -- should be specified according to - `PEP 484`_, though `PEP 484`_ conformance isn't required or enforced. - If \*args or \*\*kwargs are accepted, they should be listed as ``*args`` and ``**kwargs``. @@ -63,7 +97,7 @@ def module_level_function(param1, param2=None, *args, **kwargs): Args: param1 (int): The first parameter. - param2 (Optional[str]): The second parameter. Defaults to None. + param2 (:obj:`str`, optional): The second parameter. Defaults to None. Second line of description should be indented. *args: Variable length argument list. **kwargs: Arbitrary keyword arguments. @@ -90,10 +124,6 @@ def module_level_function(param1, param2=None, *args, **kwargs): that are relevant to the interface. ValueError: If `param2` is equal to `param1`. - - .. _PEP 484: - https://www.python.org/dev/peps/pep-0484/ - """ if param1 == param2: raise ValueError('param1 may not be equal to param2') @@ -135,7 +165,7 @@ class ExampleError(Exception): Args: msg (str): Human readable string describing the exception. - code (Optional[int]): Error code. + code (:obj:`int`, optional): Error code. Attributes: msg (str): Human readable string describing the exception. @@ -159,16 +189,9 @@ class ExampleClass(object): Properties created with the ``@property`` decorator should be documented in the property's getter method. - Attribute and property types -- if given -- should be specified according - to `PEP 484`_, though `PEP 484`_ conformance isn't required or enforced. - Attributes: attr1 (str): Description of `attr1`. - attr2 (Optional[int]): Description of `attr2`. - - - .. _PEP 484: - https://www.python.org/dev/peps/pep-0484/ + attr2 (:obj:`int`, optional): Description of `attr2`. """ @@ -186,20 +209,20 @@ def __init__(self, param1, param2, param3): Args: param1 (str): Description of `param1`. - param2 (Optional[int]): Description of `param2`. Multiple + param2 (:obj:`int`, optional): Description of `param2`. Multiple lines are supported. - param3 (List[str]): Description of `param3`. + param3 (list(str)): Description of `param3`. """ self.attr1 = param1 self.attr2 = param2 self.attr3 = param3 #: Doc comment *inline* with attribute - #: List[str]: Doc comment *before* attribute, with type specified + #: list(str): Doc comment *before* attribute, with type specified self.attr4 = ['attr4'] self.attr5 = None - """Optional[str]: Docstring *after* attribute, with type specified.""" + """str: Docstring *after* attribute, with type specified.""" @property def readonly_property(self): @@ -208,8 +231,8 @@ def readonly_property(self): @property def readwrite_property(self): - """List[str]: Properties with both a getter and setter should only - be documented in their getter method. + """list(str): Properties with both a getter and setter + should only be documented in their getter method. If the setter method contains notable behavior, it should be mentioned here. @@ -237,16 +260,17 @@ def example_method(self, param1, param2): return True def __special__(self): - """By default special members with docstrings are included. + """By default special members with docstrings are not included. Special members are any methods or attributes that start with and end with a double underscore. Any special member with a docstring - will be included in the output. + will be included in the output, if + ``napoleon_include_special_with_doc`` is set to True. - This behavior can be disabled by changing the following setting in + This behavior can be enabled by changing the following setting in Sphinx's conf.py:: - napoleon_include_special_with_doc = False + napoleon_include_special_with_doc = True """ pass diff --git a/doc/ext/example_google.rst b/doc/ext/example_google.rst index 06508082c1e..a06f161b94a 100644 --- a/doc/ext/example_google.rst +++ b/doc/ext/example_google.rst @@ -9,7 +9,9 @@ Example Google Style Python Docstrings :ref:`example_numpy` -Download: :download:`example_google.py <example_google.py>` +.. only:: builder_html + + Download: :download:`example_google.py <example_google.py>` .. literalinclude:: example_google.py :language: python diff --git a/doc/ext/example_numpy.py b/doc/ext/example_numpy.py index 68bc9d28973..7a2db94ccfa 100644 --- a/doc/ext/example_numpy.py +++ b/doc/ext/example_numpy.py @@ -37,6 +37,7 @@ one convention to document module level variables and be consistent with it. + .. _NumPy Documentation HOWTO: https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt @@ -52,6 +53,52 @@ """ +def function_with_types_in_docstring(param1, param2): + """Example function with types documented in the docstring. + + `PEP 484`_ type annotations are supported. If attribute, parameter, and + return types are annotated according to `PEP 484`_, they do not need to be + included in the docstring: + + Parameters + ---------- + param1 : int + The first parameter. + param2 : str + The second parameter. + + Returns + ------- + bool + True if successful, False otherwise. + + .. _PEP 484: + https://www.python.org/dev/peps/pep-0484/ + + """ + + +def function_with_pep484_type_annotations(param1: int, param2: str) -> bool: + """Example function with PEP 484 type annotations. + + The return type must be duplicated in the docstring to comply + with the NumPy docstring style. + + Parameters + ---------- + param1 + The first parameter. + param2 + The second parameter. + + Returns + ------- + bool + True if successful, False otherwise. + + """ + + def module_level_function(param1, param2=None, *args, **kwargs): """This is an example of a module level function. @@ -59,9 +106,6 @@ def module_level_function(param1, param2=None, *args, **kwargs): The name of each parameter is required. The type and description of each parameter is optional, but should be included if not obvious. - Parameter types -- if given -- should be specified according to - `PEP 484`_, though `PEP 484`_ conformance isn't required or enforced. - If \*args or \*\*kwargs are accepted, they should be listed as ``*args`` and ``**kwargs``. @@ -81,7 +125,7 @@ def module_level_function(param1, param2=None, *args, **kwargs): ---------- param1 : int The first parameter. - param2 : Optional[str] + param2 : :obj:`str`, optional The second parameter. *args Variable length argument list. @@ -113,10 +157,6 @@ def module_level_function(param1, param2=None, *args, **kwargs): ValueError If `param2` is equal to `param1`. - - .. _PEP 484: - https://www.python.org/dev/peps/pep-0484/ - """ if param1 == param2: raise ValueError('param1 may not be equal to param2') @@ -166,7 +206,7 @@ class ExampleError(Exception): ---------- msg : str Human readable string describing the exception. - code : Optional[int] + code : :obj:`int`, optional Numeric error code. Attributes @@ -194,20 +234,13 @@ class ExampleClass(object): Properties created with the ``@property`` decorator should be documented in the property's getter method. - Attribute and property types -- if given -- should be specified according - to `PEP 484`_, though `PEP 484`_ conformance isn't required or enforced. - Attributes ---------- attr1 : str Description of `attr1`. - attr2 : Optional[int] + attr2 : :obj:`int`, optional Description of `attr2`. - - .. _PEP 484: - https://www.python.org/dev/peps/pep-0484/ - """ def __init__(self, param1, param2, param3): @@ -227,10 +260,10 @@ def __init__(self, param1, param2, param3): ---------- param1 : str Description of `param1`. - param2 : List[str] + param2 : list(str) Description of `param2`. Multiple lines are supported. - param3 : Optional[int] + param3 : :obj:`int`, optional Description of `param3`. """ @@ -238,11 +271,11 @@ def __init__(self, param1, param2, param3): self.attr2 = param2 self.attr3 = param3 #: Doc comment *inline* with attribute - #: List[str]: Doc comment *before* attribute, with type specified + #: list(str): Doc comment *before* attribute, with type specified self.attr4 = ["attr4"] self.attr5 = None - """Optional[str]: Docstring *after* attribute, with type specified.""" + """str: Docstring *after* attribute, with type specified.""" @property def readonly_property(self): @@ -251,8 +284,8 @@ def readonly_property(self): @property def readwrite_property(self): - """List[str]: Properties with both a getter and setter should only - be documented in their getter method. + """list(str): Properties with both a getter and setter + should only be documented in their getter method. If the setter method contains notable behavior, it should be mentioned here. @@ -286,16 +319,17 @@ def example_method(self, param1, param2): return True def __special__(self): - """By default special members with docstrings are included. + """By default special members with docstrings are not included. Special members are any methods or attributes that start with and end with a double underscore. Any special member with a docstring - will be included in the output. + will be included in the output, if + ``napoleon_include_special_with_doc`` is set to True. - This behavior can be disabled by changing the following setting in + This behavior can be enabled by changing the following setting in Sphinx's conf.py:: - napoleon_include_special_with_doc = False + napoleon_include_special_with_doc = True """ pass diff --git a/doc/ext/example_numpy.rst b/doc/ext/example_numpy.rst index a3b41613ecb..38d3439c8af 100644 --- a/doc/ext/example_numpy.rst +++ b/doc/ext/example_numpy.rst @@ -9,7 +9,9 @@ Example NumPy Style Python Docstrings :ref:`example_google` -Download: :download:`example_numpy.py <example_numpy.py>` +.. only:: builder_html + + Download: :download:`example_numpy.py <example_numpy.py>` .. literalinclude:: example_numpy.py :language: python diff --git a/doc/ext/githubpages.rst b/doc/ext/githubpages.rst new file mode 100644 index 00000000000..0cd76a2c9c8 --- /dev/null +++ b/doc/ext/githubpages.rst @@ -0,0 +1,12 @@ +.. highlight:: rest + +:mod:`sphinx.ext.githubpages` -- Publish HTML docs in GitHub Pages +================================================================== + +.. module:: sphinx.ext.githubpages + :synopsis: Publish HTML docs in GitHub Pages + +.. versionadded:: 1.4 + +This extension creates ``.nojekyll`` file on generated HTML directory to publish +the document on GitHub Pages. diff --git a/doc/ext/graphviz.rst b/doc/ext/graphviz.rst index d5a5969f474..555df7c2806 100644 --- a/doc/ext/graphviz.rst +++ b/doc/ext/graphviz.rst @@ -87,6 +87,22 @@ It adds these directives: caption to the diagram. Naturally, diagrams marked as "inline" cannot have a caption. +.. deprecated:: 1.4 + ``inline`` option is deprecated. + All three directives generate inline node by default. If ``caption`` is given, + these generate block node instead. + +.. versionchanged:: 1.4 + All three directives support a ``graphviz_dot`` option that can be switch the + ``dot`` command within the directive. + +.. versionadded:: 1.5 + All three directives support a ``align`` option to align the graph horizontal. + The values "left", "center", "right" are allowed. + +.. versionadded:: 1.6 + All three directives support a ``name`` option to set the label to graph. + There are also these new config values: .. confval:: graphviz_dot @@ -97,8 +113,8 @@ There are also these new config values: Since this setting is not portable from system to system, it is normally not useful to set it in ``conf.py``; rather, giving it on the - :program:`sphinx-build` command line via the :option:`-D` option should be - preferable, like this:: + :program:`sphinx-build` command line via the :option:`-D <sphinx-build -D>` + option should be preferable, like this:: sphinx-build -b html -D graphviz_dot=C:\graphviz\bin\dot.exe . _build/html @@ -111,7 +127,18 @@ There are also these new config values: .. confval:: graphviz_output_format The output format for Graphviz when building HTML files. This must be either - ``'png'`` or ``'svg'``; the default is ``'png'``. + ``'png'`` or ``'svg'``; the default is ``'png'``. If ``'svg'`` is used, in + order to make the URL links work properly, an appropriate ``target`` + attribute must be set, such as ``"_top"`` and ``"_blank"``. For example, the + link in the following graph should work in the svg output: :: + + .. graphviz:: + + digraph example { + a [label="sphinx", href="http://sphinx-doc.org", target="_top"]; + b [label="other"]; + a -> b; + } .. versionadded:: 1.0 Previously, output always was PNG. diff --git a/doc/ext/inheritance.rst b/doc/ext/inheritance.rst index 5e0a76fcc0f..bd287aa4981 100644 --- a/doc/ext/inheritance.rst +++ b/doc/ext/inheritance.rst @@ -33,10 +33,15 @@ It adds this directive: It also supports a ``private-bases`` flag option; if given, private base classes (those whose name starts with ``_``) will be included. + You can use ``caption`` option to give a caption to the diagram. + .. versionchanged:: 1.1 Added ``private-bases`` option; previously, all bases were always included. + .. versionchanged:: 1.5 + Added ``caption`` option + New config values are: diff --git a/doc/ext/intersphinx.rst b/doc/ext/intersphinx.rst index 785164a0c5e..fb0114fc4b4 100644 --- a/doc/ext/intersphinx.rst +++ b/doc/ext/intersphinx.rst @@ -121,3 +121,14 @@ linking: The maximum number of days to cache remote inventories. The default is ``5``, meaning five days. Set this to a negative value to cache inventories for unlimited time. + +.. confval:: intersphinx_timeout + + The number of seconds for timeout. The default is ``None``, meaning do not + timeout. + + .. note:: + + timeout is not a time limit on the entire response download; rather, an + exception is raised if the server has not issued a response for timeout + seconds. diff --git a/doc/ext/math.rst b/doc/ext/math.rst index 4c154610927..56a44a217b2 100644 --- a/doc/ext/math.rst +++ b/doc/ext/math.rst @@ -4,7 +4,7 @@ Math support in Sphinx ====================== .. module:: sphinx.ext.mathbase - :synopsis: Common math support for pngmath and mathjax / jsmath. + :synopsis: Common math support for imgmath and mathjax / jsmath. .. versionadded:: 0.5 @@ -17,7 +17,7 @@ support extensions should, if possible, reuse that support too. .. note:: :mod:`.mathbase` is not meant to be added to the :confval:`extensions` config - value, instead, use either :mod:`sphinx.ext.pngmath` or + value, instead, use either :mod:`sphinx.ext.imgmath` or :mod:`sphinx.ext.mathjax` as described below. The input language for mathematics is LaTeX markup. This is the de-facto @@ -28,6 +28,13 @@ Keep in mind that when you put math markup in **Python docstrings** read by :mod:`autodoc <sphinx.ext.autodoc>`, you either have to double all backslashes, or use Python raw strings (``r"raw"``). +:mod:`.mathbase` provides the following config values: + +.. confval:: math_number_all + + Set this option to ``True`` if you want all displayed math to be numbered. + The default is ``False``. + :mod:`.mathbase` defines these new markup elements: .. rst:role:: math @@ -96,20 +103,27 @@ or use Python raw strings (``r"raw"``). beautiful mathematical formulas. -:mod:`sphinx.ext.pngmath` -- Render math as PNG images ------------------------------------------------------- +:mod:`sphinx.ext.imgmath` -- Render math as images +-------------------------------------------------- -.. module:: sphinx.ext.pngmath - :synopsis: Render math as PNG images. +.. module:: sphinx.ext.imgmath + :synopsis: Render math as PNG or SVG images. -This extension renders math via LaTeX and dvipng_ into PNG images. This of -course means that the computer where the docs are built must have both programs -available. +.. versionadded:: 1.4 + +This extension renders math via LaTeX and dvipng_ or dvisvgm_ into PNG or SVG +images. This of course means that the computer where the docs are built must +have both programs available. There are various config values you can set to influence how the images are built: -.. confval:: pngmath_latex +.. confval:: imgmath_image_format + + The output image format. The default is ``'png'``. It should be either + ``'png'`` or ``'svg'``. + +.. confval:: imgmath_latex The command name with which to invoke LaTeX. The default is ``'latex'``; you may need to set this to a full path if ``latex`` is not in the executable @@ -117,45 +131,54 @@ built: Since this setting is not portable from system to system, it is normally not useful to set it in ``conf.py``; rather, giving it on the - :program:`sphinx-build` command line via the :option:`-D` option should be - preferable, like this:: + :program:`sphinx-build` command line via the :option:`-D <sphinx-build -D>` + option should be preferable, like this:: - sphinx-build -b html -D pngmath_latex=C:\tex\latex.exe . _build/html + sphinx-build -b html -D imgmath_latex=C:\tex\latex.exe . _build/html - .. versionchanged:: 0.5.1 - This value should only contain the path to the latex executable, not - further arguments; use :confval:`pngmath_latex_args` for that purpose. + This value should only contain the path to the latex executable, not further + arguments; use :confval:`imgmath_latex_args` for that purpose. -.. confval:: pngmath_dvipng +.. confval:: imgmath_dvipng The command name with which to invoke ``dvipng``. The default is ``'dvipng'``; you may need to set this to a full path if ``dvipng`` is not in - the executable search path. + the executable search path. This option is only used when + ``imgmath_image_format`` is set to ``'png'``. -.. confval:: pngmath_latex_args +.. confval:: imgmath_dvisvgm + + The command name with which to invoke ``dvisvgm``. The default is + ``'dvisvgm'``; you may need to set this to a full path if ``dvisvgm`` is not + in the executable search path. This option is only used when + ``imgmath_image_format`` is ``'svg'``. + +.. confval:: imgmath_latex_args Additional arguments to give to latex, as a list. The default is an empty list. - .. versionadded:: 0.5.1 - -.. confval:: pngmath_latex_preamble +.. confval:: imgmath_latex_preamble Additional LaTeX code to put into the preamble of the short LaTeX files that are used to translate the math snippets. This is empty by default. Use it e.g. to add more packages whose commands you want to use in the math. -.. confval:: pngmath_dvipng_args +.. confval:: imgmath_dvipng_args Additional arguments to give to dvipng, as a list. The default value is ``['-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. + transparent background. This option is used only when + ``imgmath_image_format`` is ``'png'``. - .. versionchanged:: 1.2 - Now includes ``-bg Transparent`` by default. +.. confval:: imgmath_dvisvgm_args -.. confval:: pngmath_use_preview + Additional arguments to give to dvisvgm, as a list. The default value is + ``['--no-fonts']``. This option is used only when ``imgmath_image_format`` + is ``'svg'``. + +.. confval:: imgmath_use_preview ``dvipng`` has the ability to determine the "depth" of the rendered text: for example, when typesetting a fraction inline, the baseline of surrounding text @@ -165,14 +188,20 @@ built: ``vertical-align`` style that correctly aligns the baselines. Unfortunately, this only works when the `preview-latex package`_ is - installed. Therefore, the default for this option is ``False``. + installed. Therefore, the default for this option is ``False``. + + Currently this option is only used when ``imgmath_image_format`` is + ``'png'``. -.. confval:: pngmath_add_tooltips +.. confval:: imgmath_add_tooltips Default: ``True``. If false, do not add the LaTeX code as an "alt" attribute for math images. - .. versionadded:: 1.1 +.. confval:: imgmath_font_size + + The font size (in ``pt``) of the displayed math. The default value is + ``12``. It must be a positive integer. :mod:`sphinx.ext.mathjax` -- Render math via JavaScript @@ -235,7 +264,8 @@ package jsMath_. It provides this config value: .. _dvipng: http://savannah.nongnu.org/projects/dvipng/ -.. _MathJax: http://www.mathjax.org/ +.. _dvisvgm: http://dvisvgm.bplaced.net/ +.. _MathJax: https://www.mathjax.org/ .. _jsMath: http://www.math.union.edu/~dpvc/jsmath/ .. _preview-latex package: http://www.gnu.org/software/auctex/preview-latex.html .. _AmSMath LaTeX package: http://www.ams.org/publications/authors/tex/amslatex diff --git a/doc/ext/napoleon.rst b/doc/ext/napoleon.rst index 7bd74aabd2c..ea3e4042fee 100644 --- a/doc/ext/napoleon.rst +++ b/doc/ext/napoleon.rst @@ -11,6 +11,8 @@ Napoleon - *Marching toward legible docstrings* =============================================== +.. highlight:: text + Are you tired of writing docstrings that look like this:: :param path: The path of the file to wrap @@ -48,7 +50,7 @@ the documentation, so it doesn't modify any of the docstrings in your actual source code files. .. _ReStructuredText: http://docutils.sourceforge.net/rst.html -.. _docstrings: http://www.python.org/dev/peps/pep-0287/ +.. _docstrings: https://www.python.org/dev/peps/pep-0287/ .. _Google Python Style Guide: http://google.github.io/styleguide/pyguide.html .. _Google: @@ -110,6 +112,7 @@ All of the following section headers are supported: * ``Raises`` * ``References`` * ``See Also`` + * ``Todo`` * ``Warning`` * ``Warnings`` *(alias of Warning)* * ``Warns`` @@ -123,7 +126,9 @@ Napoleon supports two styles of docstrings: `Google`_ and `NumPy`_. The main difference between the two styles is that Google uses indention to separate sections, whereas NumPy uses underlines. -Google style:: +Google style: + +.. code-block:: python3 def func(arg1, arg2): """Summary line. @@ -140,7 +145,9 @@ Google style:: """ return True -NumPy style:: +NumPy style: + +.. code-block:: python3 def func(arg1, arg2): """Summary line. @@ -179,11 +186,60 @@ not be mixed. Choose one style for your project and be consistent with it. * :ref:`example_google` * :ref:`example_numpy` - For Python type annotations, see `PEP 484`_. + +Type Annotations +---------------- + +`PEP 484`_ introduced a standard way to express types in Python code. +This is an alternative to expressing types directly in docstrings. +One benefit of expressing types according to `PEP 484`_ is that +type checkers and IDEs can take advantage of them for static code +analysis. + +Google style with Python 3 type annotations:: + + def func(arg1: int, arg2: str) -> bool: + """Summary line. + + Extended description of function. + + Args: + arg1: Description of arg1 + arg2: Description of arg2 + + Returns: + Description of return value + + """ + return True + +Google style with types in docstrings:: + + def func(arg1, arg2): + """Summary line. + + Extended description of function. + + Args: + arg1 (int): Description of arg1 + arg2 (str): Description of arg2 + + Returns: + bool: Description of return value + + """ + return True + +.. Note:: + `Python 2/3 compatible annotations`_ aren't currently + supported by Sphinx and won't show up in the docs. .. _PEP 484: https://www.python.org/dev/peps/pep-0484/ +.. _Python 2/3 compatible annotations: + https://www.python.org/dev/peps/pep-0484/#suggested-syntax-for-python-2-7-and-straddling-code + Configuration ============= @@ -201,6 +257,7 @@ enabled in `conf.py`:: # Napoleon settings napoleon_google_docstring = True napoleon_numpy_docstring = True + napoleon_include_init_with_doc = False napoleon_include_private_with_doc = False napoleon_include_special_with_doc = True napoleon_use_admonition_for_examples = False @@ -227,6 +284,23 @@ enabled in `conf.py`:: True to parse `NumPy style`_ docstrings. False to disable support for NumPy style docstrings. *Defaults to True.* +.. confval:: napoleon_include_init_with_doc + + True to list ``__init___`` docstrings separately from the class + docstring. False to fall back to Sphinx's default behavior, which + considers the ``__init___`` docstring as part of the class + documentation. *Defaults to False.* + + **If True**:: + + def __init__(self): + \"\"\" + This will be included in the docs because it has a docstring + \"\"\" + + def __init__(self): + # This will NOT be included in the docs + .. confval:: napoleon_include_private_with_doc True to include private members (like ``_membername``) with docstrings @@ -364,6 +438,22 @@ enabled in `conf.py`:: * **arg2** (*int, optional*) -- Description of `arg2`, defaults to 0 +.. confval:: napoleon_use_keyword + + True to use a ``:keyword:`` role for each function keyword argument. + False to use a single ``:keyword arguments:`` role for all the + keywords. + *Defaults to True.* + + This behaves similarly to :attr:`napoleon_use_param`. Note unlike docutils, + ``:keyword:`` and ``:param:`` will not be treated the same way - there will + be a separate "Keyword Arguments" section, rendered in the same fashion as + "Parameters" section (type links created if possible) + + .. seealso:: + + :attr:`napoleon_use_param` + .. confval:: napoleon_use_rtype True to use the ``:rtype:`` role for the return type. False to output diff --git a/doc/ext/thirdparty.rst b/doc/ext/thirdparty.rst new file mode 100644 index 00000000000..6304e4af3e3 --- /dev/null +++ b/doc/ext/thirdparty.rst @@ -0,0 +1,35 @@ +Third-party extensions +---------------------- + +You can find several extensions contributed by users in the `Sphinx Contrib`_ +repository. It is open for anyone who wants to maintain an extension +publicly; just send a short message asking for write permissions. + +There are also several extensions hosted elsewhere. The `Sphinx extension +survey <http://sphinxext-survey.readthedocs.org/en/latest/>`__ contains a +comprehensive list. + +If you write an extension that you think others will find useful or you think +should be included as a part of Sphinx, please write to the project mailing +list (`join here <https://groups.google.com/forum/#!forum/sphinx-dev>`_). + +.. _Sphinx Contrib: https://bitbucket.org/birkenfeld/sphinx-contrib + + +Where to put your own extensions? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Extensions local to a project should be put within the project's directory +structure. Set Python's module search path, ``sys.path``, accordingly so that +Sphinx can find them. +E.g., if your extension ``foo.py`` lies in the ``exts`` subdirectory of the +project root, put into :file:`conf.py`:: + + import sys, os + + sys.path.append(os.path.abspath('exts')) + + extensions = ['foo'] + +You can also install extensions anywhere else on ``sys.path``, e.g. in the +``site-packages`` directory. diff --git a/doc/ext/todo.rst b/doc/ext/todo.rst index c0d94ba1daa..09abfa9b817 100644 --- a/doc/ext/todo.rst +++ b/doc/ext/todo.rst @@ -16,6 +16,10 @@ There are two additional directives when using this extension: It will only show up in the output if :confval:`todo_include_todos` is ``True``. + .. versionadded:: 1.3.2 + This directive supports an ``class`` option that determines the class attribute + for HTML output. If not given, the class defaults to ``admonition-todo``. + .. rst:directive:: todolist @@ -29,3 +33,26 @@ There is also an additional config value: If this is ``True``, :rst:dir:`todo` and :rst:dir:`todolist` produce output, else they produce nothing. The default is ``False``. + +.. confval:: todo_emit_warnings + + If this is ``True``, :rst:dir:`todo` emits a warning for each TODO entries. + The default is ``False``. + + .. versionadded:: 1.5 + +.. confval:: todo_link_only + + If this is ``True``, :rst:dir:`todolist` produce output without file path and line, + The default is ``False``. + + .. versionadded:: 1.4 + +autodoc provides the following an additional event: + +.. event:: todo-defined (app, node) + + .. versionadded:: 1.5 + + Emitted when a todo is defined. *node* is the defined ``sphinx.ext.todo.todo_node`` + node. diff --git a/doc/ext/viewcode.rst b/doc/ext/viewcode.rst index f2b6c9283c9..5823090f6c1 100644 --- a/doc/ext/viewcode.rst +++ b/doc/ext/viewcode.rst @@ -15,11 +15,12 @@ a highlighted version of the source code, and a link will be added to all object descriptions that leads to the source code of the described object. A link back from the source to the description will also be inserted. -There are currently no configuration values for this extension; you just need to -add ``'sphinx.ext.viewcode'`` to your :confval:`extensions` value for it to -work. +This extension works only on HTML related builders like ``html``, +``applehelp``, ``devhelp``, ``htmlhelp``, ``qthelp`` and so on except +``singlehtml``. By default ``epub`` builder doesn't +support this extension (see :confval:`viewcode_enable_epub`). -There is also an additional config value: +There is an additional config value: .. confval:: viewcode_import @@ -38,3 +39,26 @@ There is also an additional config value: main routine is protected by a ``if __name__ == '__main__'`` condition. .. versionadded:: 1.3 + +.. confval:: viewcode_enable_epub + + If this is ``True``, viewcode extension is also enabled even if you use + epub builders. This extension generates pages outside toctree, but this + is not preferred as epub format. + + Until 1.4.x, this extension is always enabled. If you want to generate + epub as same as 1.4.x, you should set ``True``, but epub format checker's + score becomes worse. + + The default is ``False``. + + .. versionadded:: 1.5 + + .. warning:: + + Not all epub readers support pages generated by viewcode extension. + These readers ignore links to pages are not under toctree. + + Some reader's rendering result are corrupted and + `epubcheck <https://github.com/IDPF/epubcheck>`_'s score + becomes worse even if the reader supports. diff --git a/doc/extdev/appapi.rst b/doc/extdev/appapi.rst index c2ee4cc86d6..b3ffb7af002 100644 --- a/doc/extdev/appapi.rst +++ b/doc/extdev/appapi.rst @@ -125,6 +125,28 @@ package. .. versionchanged:: 0.5 Added the support for keyword arguments giving visit functions. +.. method:: Sphinx.add_enumerable_node(node, figtype, title_getter=None, **kwds) + + Register a Docutils node class as a numfig target. Sphinx numbers the node + automatically. And then the users can refer it using :rst:role:`numref`. + + *figtype* is a type of enumerable nodes. Each figtypes have individual + numbering sequences. As a system figtypes, ``figure``, ``table`` and + ``code-block`` are defined. It is able to add custom nodes to these + default figtypes. It is also able to define new custom figtype if new + figtype is given. + + *title_getter* is a getter function to obtain the title of node. It takes + an instance of the enumerable node, and it must return its title as string. + The title is used to the default title of references for :rst:role:`ref`. + By default, Sphinx searches ``docutils.nodes.caption`` or + ``docutils.nodes.title`` from the node as a title. + + Other keyword arguments are used for node visitor functions. See the + :meth:`Sphinx.add_node` for details. + + .. versionadded:: 1.4 + .. method:: Sphinx.add_directive(name, func, content, arguments, **options) Sphinx.add_directive(name, directiveclass) @@ -155,7 +177,7 @@ package. add_directive('literalinclude', literalinclude_directive, content = 0, arguments = (1, 0, 0), linenos = directives.flag, - language = direcitves.unchanged, + language = directives.unchanged, encoding = directives.encoding) .. versionchanged:: 0.6 @@ -336,6 +358,12 @@ package. .. versionadded:: 1.1 +.. method:: Sphinx.add_source_parser(suffix, parser) + + Register a parser class for specified *suffix*. + + .. versionadded:: 1.4 + .. method:: Sphinx.require_sphinx(version) Compare *version* (which must be a ``major.minor`` version string, diff --git a/doc/extdev/envapi.rst b/doc/extdev/envapi.rst index 84ad3e0d956..729725fc584 100644 --- a/doc/extdev/envapi.rst +++ b/doc/extdev/envapi.rst @@ -17,7 +17,11 @@ Build environment API .. attribute:: srcdir - Source directory (the directory containing ``conf.py``). + Source directory. + + .. attribute:: confdir + + Directory containing ``conf.py``. .. attribute:: doctreedir diff --git a/doc/extdev/index.rst b/doc/extdev/index.rst index 5144c5f8b2e..b27db4b2de0 100644 --- a/doc/extdev/index.rst +++ b/doc/extdev/index.rst @@ -52,4 +52,5 @@ APIs used for writing extensions builderapi markupapi domainapi + parserapi nodes diff --git a/doc/extdev/markupapi.rst b/doc/extdev/markupapi.rst index 577a39e0d7b..533660c848f 100644 --- a/doc/extdev/markupapi.rst +++ b/doc/extdev/markupapi.rst @@ -125,6 +125,8 @@ Both APIs parse the content into a given node. They are used like this:: node = docutils.nodes.paragraph() # either + from sphinx.ext.autodoc import AutodocReporter + self.state.memo.reporter = AutodocReporter(self.result, self.state.memo.reporter) # override reporter to avoid errors from "include" directive nested_parse_with_titles(self.state, self.result, node) # or self.state.nested_parse(self.result, 0, node) @@ -135,5 +137,5 @@ return ``node.children`` from the Directive. .. seealso:: - `Creating directives <http://docutils.sf.net/docs/howto/rst-directives.html>`_ + `Creating directives <http://docutils.sourceforge.net/docs/howto/rst-directives.html>`_ HOWTO of the Docutils documentation diff --git a/doc/extdev/nodes.rst b/doc/extdev/nodes.rst index e67fa3da683..359410e25a7 100644 --- a/doc/extdev/nodes.rst +++ b/doc/extdev/nodes.rst @@ -10,6 +10,7 @@ Nodes for domain-specific object descriptions .. autoclass:: desc .. autoclass:: desc_signature +.. autoclass:: desc_signature_line .. autoclass:: desc_addname .. autoclass:: desc_type .. autoclass:: desc_returns diff --git a/doc/extdev/parserapi.rst b/doc/extdev/parserapi.rst new file mode 100644 index 00000000000..7008a15a8b6 --- /dev/null +++ b/doc/extdev/parserapi.rst @@ -0,0 +1,8 @@ +.. _parser-api: + +Parser API +========== + +.. module:: sphinx.parsers + +.. autoclass:: Parser diff --git a/doc/extensions.rst b/doc/extensions.rst index 8347f4965c0..afd211c3472 100644 --- a/doc/extensions.rst +++ b/doc/extensions.rst @@ -10,62 +10,7 @@ any aspect of document processing. This chapter describes the extensions bundled with Sphinx. For the API documentation on writing your own extension, see :ref:`dev-extensions`. -Builtin Sphinx extensions -------------------------- - -These extensions are built in and can be activated by respective entries in the -:confval:`extensions` configuration value: - .. toctree:: - ext/autodoc - ext/autosummary - ext/doctest - ext/intersphinx - ext/math - ext/graphviz - ext/inheritance - ext/ifconfig - ext/coverage - ext/todo - ext/extlinks - ext/viewcode - ext/linkcode - ext/napoleon - - -Third-party extensions ----------------------- - -You can find several extensions contributed by users in the `Sphinx Contrib`_ -repository. It is open for anyone who wants to maintain an extension -publicly; just send a short message asking for write permissions. - -There are also several extensions hosted elsewhere. The `Sphinx extension -survey <http://sphinxext-survey.readthedocs.org/en/latest/>`__ contains a -comprehensive list. - -If you write an extension that you think others will find useful or you think -should be included as a part of Sphinx, please write to the project mailing -list (`join here <https://groups.google.com/group/sphinx-dev>`_). - -.. _Sphinx Contrib: https://bitbucket.org/birkenfeld/sphinx-contrib - - -Where to put your own extensions? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Extensions local to a project should be put within the project's directory -structure. Set Python's module search path, ``sys.path``, accordingly so that -Sphinx can find them. -E.g., if your extension ``foo.py`` lies in the ``exts`` subdirectory of the -project root, put into :file:`conf.py`:: - - import sys, os - - sys.path.append(os.path.abspath('exts')) - - extensions = ['foo'] - -You can also install extensions anywhere else on ``sys.path``, e.g. in the -``site-packages`` directory. + ext/builtins + ext/thirdparty diff --git a/doc/faq.rst b/doc/faq.rst index 7a49aed63fe..eaa663d924e 100644 --- a/doc/faq.rst +++ b/doc/faq.rst @@ -10,7 +10,7 @@ How do I... ----------- ... create PDF files without LaTeX? - You can use `rst2pdf <http://rst2pdf.googlecode.com>`_ version 0.12 or + You can use `rst2pdf <https://github.com/rst2pdf/rst2pdf>`_ version 0.12 or greater which comes with built-in Sphinx integration. See the :ref:`builders` section for details. @@ -82,7 +82,7 @@ GitHub Pages Sphinx HTML output properly. MediaWiki - See https://bitbucket.org/kevindunn/sphinx-wiki, a project by Kevin Dunn. + See https://bitbucket.org/kevindunn/sphinx-wiki/wiki/Home, a project by Kevin Dunn. Google Analytics You can use a custom ``layout.html`` template, like this: @@ -140,7 +140,7 @@ The following list gives some hints for the creation of epub files: are often cut at the right margin. The default Courier font (or variant) is quite wide and you can only display up to 60 characters on a line. If you replace it with a narrower font, you can get more characters on a line. You - may even use `FontForge <http://fontforge.org/>`_ and create + may even use `FontForge <http://fontforge.github.io/>`_ and create narrow variants of some free font. In my case I get up to 70 characters on a line. @@ -149,7 +149,7 @@ The following list gives some hints for the creation of epub files: * Test the created epubs. You can use several alternatives. The ones I am aware of are Epubcheck_, Calibre_, FBreader_ (although it does not render the CSS), and Bookworm_. For bookworm you can download the source from - http://code.google.com/p/threepress/ and run your own local server. + https://code.google.com/archive/p/threepress and run your own local server. * Large floating divs are not displayed properly. If they cover more than one page, the div is only shown on the first page. @@ -167,11 +167,45 @@ The following list gives some hints for the creation of epub files: :confval:`html_static_path` directory and reference it with its full path in the :confval:`epub_cover` config option. -.. _Epubcheck: http://code.google.com/p/epubcheck/ -.. _Calibre: http://calibre-ebook.com/ -.. _FBreader: http://fbreader.org/ -.. _Bookworm: http://oreilly.com/bookworm/index.html +* kindlegen_ command can convert from epub3 resulting file to ``.mobi`` file + for Kindle. You can get ``yourdoc.mobi`` under ``_build/epub`` after the + following command: + + .. code-block:: bash + + $ make epub + $ kindlegen _build/epub/yourdoc.epub + + kindlegen commands doesn't accept documents that have section + titles surrounding ``toctree`` directive: + + .. code-block:: rst + + Section Title + ============= + + .. toctree:: + + subdocument + + Section After Toc Tree + ====================== + kindlegen assumes all documents order in line, but resulting document + has complecated order for kindlegen:: + + ``parent.xhtml`` -> ``child.xhtml`` -> ``parent.xhtml`` + + If you got the following error, fix document structure:: + + Error(prcgen):E24011: TOC section scope is not included in the parent chapter:(title) + Error(prcgen):E24001: The table of content could not be built. + +.. _Epubcheck: https://code.google.com/archive/p/epubcheck +.. _Calibre: http://calibre-ebook.com/ +.. _FBreader: https://fbreader.org/ +.. _Bookworm: http://www.oreilly.com/bookworm/index.html +.. _kindlegen: https://www.amazon.com/gp/feature.html?docId=1000765211 .. _texinfo-faq: @@ -213,7 +247,7 @@ If you want Emacs to display Info files produced by Sphinx using the value Info files, try adding the following Emacs Lisp code to your start-up file, ``~/.emacs.d/init.el``. -:: +.. code-block:: elisp (defadvice info-insert-file-contents (after sphinx-info-insert-file-contents @@ -248,10 +282,6 @@ The following notes may be helpful if you want to create Texinfo files: info:Texinfo#makeinfo_options - which produces: - - info:Texinfo#makeinfo_options - - Inline markup The standard formatting for ``*strong*`` and ``_emphasis_`` can diff --git a/doc/glossary.rst b/doc/glossary.rst index 3ef1623db04..a92e52b980f 100644 --- a/doc/glossary.rst +++ b/doc/glossary.rst @@ -73,6 +73,11 @@ Glossary directive" (e.g. :rst:dir:`function` or :rst:dir:`object`) creates such a block; and most objects can be cross-referenced to. + RemoveInSphinxXXXWarning + The feature which is warned will be removed in Sphinx-XXX version. + It usually caused from Sphinx extensions which is using deprecated. + See also :ref:`when-deprecation-warnings-are-displayed`. + role A reStructuredText markup element that allows marking a piece of text. Like directives, roles are extensible. The basic syntax looks like this: diff --git a/doc/install.rst b/doc/install.rst index dda034843e0..b3519e1ba23 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -4,7 +4,7 @@ Installing Sphinx ================= Since Sphinx is written in the Python language, you need to install Python -(the required version is at least 2.6) and Sphinx. +(the required version is at least 2.7) and Sphinx. Sphinx packages are available on the `Python Package Index <https://pypi.python.org/pypi/Sphinx>`_. @@ -72,7 +72,7 @@ Install Python Most Windows users do not have Python, so we begin with the installation of Python itself. If you have already installed Python, please skip this section. -Go to http://python.org, the main download site for Python. Look at the left +Go to https://www.python.org/, the main download site for Python. Look at the left sidebar and under "Quick Links", click "Windows Installer" to download. .. image:: pythonorg.png @@ -80,8 +80,8 @@ sidebar and under "Quick Links", click "Windows Installer" to download. .. note:: Currently, Python offers two major versions, 2.x and 3.x. Sphinx 1.3 can run - under Python 2.6, 2.7, 3.3, 3.4, with the recommended version being - 2.7. This chapter assumes you have installed Python 2.7. + under Python 2.7, 3.4, 3.5, with the recommended version being 2.7. This + chapter assumes you have installed Python 2.7. Follow the Windows installer for Python. @@ -135,7 +135,7 @@ install. .. note:: ``pip`` has been contained in the Python official installation after version - of Python-3.4.0 or Python-2.7.9. + of Python-3.4.0 or Python-2.7.9. Installing Sphinx with pip diff --git a/doc/installpython.jpg b/doc/installpython.jpg index b0e458e40dd..fff4630ae01 100644 Binary files a/doc/installpython.jpg and b/doc/installpython.jpg differ diff --git a/doc/intl.rst b/doc/intl.rst index a358c436aad..005b0360149 100644 --- a/doc/intl.rst +++ b/doc/intl.rst @@ -63,7 +63,7 @@ be translated you need to follow these instructions: msgfmt "usage.po" -o "locale/es/LC_MESSAGES/usage.mo" * Set :confval:`locale_dirs` to ``["locale/"]``. -* Set :confval:`language` to ``es`` (also possible via :option:`-D`). +* Set :confval:`language` to ``es`` (also possible via :option:`-D <sphinx-build -D>`). * Run your desired build. @@ -88,14 +88,18 @@ This section describe a easy way to translate with sphinx-intl. :confval:`gettext_compact` is set to `False` (the Sphinx document is already configured as such). -#. Extract document's translatable messages into pot files:: +#. Extract document's translatable messages into pot files: + + .. code-block:: console $ make gettext As a result, many pot files are generated under ``_build/locale`` directory. -#. Setup/Update your `locale_dir`:: +#. Setup/Update your `locale_dir`: + + .. code-block:: console $ sphinx-intl update -p _build/locale -l de -l ja @@ -106,17 +110,25 @@ This section describe a easy way to translate with sphinx-intl. #. Translate your po files under `./locale/<lang>/LC_MESSAGES/`. -#. Build mo files and make translated document. +#. make translated document. You need a :confval:`language` parameter in ``conf.py`` or you may also - specify the parameter on the command line:: + specify the parameter on the command line: + + .. code-block:: console - $ sphinx-intl build $ make -e SPHINXOPTS="-D language='de'" html Congratulations! You got the translated documentation in the ``_build/html`` directory. +.. versionadded:: 1.3 + + sphinx-build that is invoked by make command will build po files into mo files. + + If you are using 1.2.x or earlier, please invoke ``sphinx-intl build`` command + before make command. + Translating ^^^^^^^^^^^ @@ -157,7 +169,7 @@ and to apply differences to translated po files. In order to apply the updating difference of a pot file to po file, use the :command:`sphinx-intl update` command. -.. code-block:: bash +.. code-block:: console $ sphinx-intl update -p _build/locale @@ -176,7 +188,7 @@ easy to fetch and push translations. You need :command:`tx` command to upload resources (pot files). - .. code-block:: bash + .. code-block:: console $ pip install transifex-client @@ -200,7 +212,7 @@ easy to fetch and push translations. This process will create ``.tx/config`` in the current directory, as well as a ``~/.transifexrc`` file that includes auth information. - .. code-block:: bash + .. code-block:: console $ tx init Creating .tx folder... @@ -215,7 +227,7 @@ easy to fetch and push translations. Register pot files to ``.tx/config`` file: - .. code-block:: bash + .. code-block:: console $ cd /your/document/root $ sphinx-intl update-txconfig-resources --pot-dir _build/locale \ @@ -223,7 +235,7 @@ easy to fetch and push translations. and upload pot files: - .. code-block:: bash + .. code-block:: console $ tx push -s Pushing translations for resource sphinx-document-test_1_0.builders: @@ -242,7 +254,7 @@ easy to fetch and push translations. Get translated catalogs and build mo files (ex. for 'de'): - .. code-block:: bash + .. code-block:: console $ cd /your/document/root $ tx pull -l de @@ -251,9 +263,10 @@ easy to fetch and push translations. ... Done. - Build po files into mo and make html:: + Invoke make html: + + .. code-block:: console - $ sphinx-intl build $ make -e SPHINXOPTS="-D language='de'" html @@ -297,5 +310,5 @@ There is `sphinx translation page`_ for Sphinx-1.3 documentation. .. _`transifex-client`: https://pypi.python.org/pypi/transifex-client .. _`sphinx-intl`: https://pypi.python.org/pypi/sphinx-intl .. _Transifex: https://www.transifex.com/ -.. _`sphinx translation page`: https://www.transifex.com/projects/p/sphinx-doc-1_3/ -.. _`Transifex Client v0.8 — Transifex documentation`: http://help.transifex.com/features/client/index.html +.. _`sphinx translation page`: https://www.transifex.com/sphinx-doc/sphinx-doc-1_3/ +.. _`Transifex Client v0.8 — Transifex documentation`: http://docs.transifex.com/developer/client/ diff --git a/doc/intro.rst b/doc/intro.rst index 44c57529cb8..b79f7f4a483 100644 --- a/doc/intro.rst +++ b/doc/intro.rst @@ -9,12 +9,12 @@ possibly subdirectories of docs in there as well), Sphinx can generate a nicely-organized arrangement of HTML files (in some other directory) for easy browsing and navigation. But from the same source, it can also generate a LaTeX file that you can compile into a PDF version of the documents, or a -PDF file directly using `rst2pdf <http://rst2pdf.googlecode.com>`_. +PDF file directly using `rst2pdf <https://github.com/rst2pdf/rst2pdf>`_. The focus is on hand-written documentation, rather than auto-generated API docs. Though there is support for that kind of docs as well (which is intended to be freely mixed with hand-written content), if you need pure API docs have a look -at `Epydoc <http://epydoc.sf.net/>`_, which also understands reST. +at `Epydoc <http://epydoc.sourceforge.net/>`_, which also understands reST. For a great "introduction" to writing docs in general -- the whys and hows, see also `Write the docs <http://write-the-docs.readthedocs.org/>`_, written by Eric @@ -36,12 +36,12 @@ to reStructuredText/Sphinx from other documentation systems. code to convert Python-doc-style LaTeX markup to Sphinx reST. * Marcin Wojdyr has written a script to convert Docbook to reST with Sphinx - markup; it is at `Google Code <http://code.google.com/p/db2rst/>`_. + markup; it is at `Google Code <https://github.com/wojdyr/db2rst>`_. * Christophe de Vienne wrote a tool to convert from Open/LibreOffice documents to Sphinx: `odt2sphinx <https://pypi.python.org/pypi/odt2sphinx/>`_. -* To convert different markups, `Pandoc <http://johnmacfarlane.net/pandoc/>`_ is +* To convert different markups, `Pandoc <http://pandoc.org/>`_ is a very helpful tool. @@ -54,13 +54,13 @@ See the :ref:`pertinent section in the FAQ list <usingwith>`. Prerequisites ------------- -Sphinx needs at least **Python 2.6** or **Python 3.3** to run, as well as the +Sphinx needs at least **Python 2.7** or **Python 3.4** to run, as well as the docutils_ and Jinja2_ libraries. Sphinx should work with docutils version 0.10 or some (not broken) SVN trunk snapshot. If you like to have source code highlighting support, you must also install the Pygments_ library. -.. _reStructuredText: http://docutils.sf.net/rst.html -.. _docutils: http://docutils.sf.net/ +.. _reStructuredText: http://docutils.sourceforge.net/rst.html +.. _docutils: http://docutils.sourceforge.net/ .. _Jinja2: http://jinja.pocoo.org/ .. _Pygments: http://pygments.org/ diff --git a/doc/invocation.rst b/doc/invocation.rst index 1d0c613c378..a16ab21285d 100644 --- a/doc/invocation.rst +++ b/doc/invocation.rst @@ -6,7 +6,9 @@ Invocation of sphinx-quickstart =============================== The :program:`sphinx-quickstart` script generates a Sphinx documentation set. -It is called like this:: +It is called like this: + + .. code-block:: console $ sphinx-quickstart [options] [projectdir] @@ -100,9 +102,9 @@ Extension options Enable `sphinx.ext.coverage` extension. -.. option:: --ext-pngmath +.. option:: --ext-imgmath - Enable `sphinx.ext.pngmath` extension. + Enable `sphinx.ext.imgmath` extension. .. option:: --ext-mathjax @@ -116,13 +118,20 @@ Extension options Enable `sphinx.ext.viewcode` extension. +.. option:: --extensions=EXTENSIONS + + Enable arbitary extensions. + Makefile and Batchfile creation options --------------------------------------- .. option:: --use-make-mode, --no-use-make-mode - Makefile/make.bat uses (or not use) make-mode. Default is not use. + Makefile/make.bat uses (or not use) make-mode. Default is use. + + .. versionchanged:: 1.5 + make-mode is default. .. option:: --makefile, --no-makefile @@ -136,14 +145,42 @@ Makefile and Batchfile creation options .. versionadded:: 1.3 Add various options for sphinx-quickstart invocation. +Project templating +------------------ + +.. option:: -t, --templatedir=TEMPLATEDIR + + Template directory for template files. You can modify the templates of + sphinx project files generated by quickstart. Following Jinja2 template + files are allowed: + + * master_doc.rst_t + * conf.py_t + * Makefile_t + * Makefile.new_t + * make.bat_t + * make.bat.new_t + + In detail, please refer the system template files Sphinx provides. + (sphinx/templates/quickstart) + +.. option:: -d NAME=VALUE + + Define a template variable + +.. versionadded:: 1.5 + Project templating options for sphinx-quickstart + Invocation of sphinx-build ========================== The :program:`sphinx-build` script builds a Sphinx documentation set. It is -called like this:: +called like this: + +.. code-block:: console - $ sphinx-build [options] sourcedir builddir [filenames] + $ sphinx-build [options] sourcedir builddir [filenames] where *sourcedir* is the :term:`source directory`, and *builddir* is the directory in which you want to place the built documentation. Most of the time, @@ -373,6 +410,23 @@ variables to customize behavior: Additional options for :program:`sphinx-build`. +.. _when-deprecation-warnings-are-displayed: + +Deprecation Warnings +-------------------- + +If any deprecation warning like ``RemovedInSphinxXXXWarning`` are displayed +when building a user's document, some Sphinx extension is using deprecated +features. In that case, please report it to author of the extension. + +To disable the deprecation warnings, please set ``PYTHONWARNINGS=`` environment +variable to your environment. For example: + +* ``PYTHONWARNINGS= make html`` (Linux/Mac) +* ``export PYTHONWARNINGS=`` and do ``make html`` (Linux/Mac) +* ``set PYTHONWARNINGS=`` and do ``make html`` (Windows) +* modify your Makefile/make.bat and set the environment variable + .. _invocation-apidoc: @@ -380,9 +434,11 @@ Invocation of sphinx-apidoc =========================== The :program:`sphinx-apidoc` generates completely automatic API documentation -for a Python package. It is called like this:: +for a Python package. It is called like this: + +.. code-block:: console - $ sphinx-apidoc [options] -o outputdir packagedir [pathnames] + $ sphinx-apidoc [options] -o outputdir packagedir [pathnames] where *packagedir* is the path to the package to document, and *outputdir* is the directory where the generated sources are placed. Any *pathnames* given @@ -447,11 +503,24 @@ The :program:`sphinx-apidoc` script has several options: to default values, but you can influence the most important ones using the following options. +.. option:: --implicit-namespaces + + By default sphinx-apidoc processes sys.path searching for modules only. + Python 3.3 introduced :pep:`420` implicit namespaces that allow module path + structures such as ``foo/bar/module.py`` or ``foo/bar/baz/__init__.py`` + (notice that ``bar`` and ``foo`` are namespaces, not modules). + + Specifying this option interprets paths recursively according to PEP-0420. + .. option:: -M This option makes sphinx-apidoc put module documentation before submodule documentation. +.. option:: -a + + Append module_path to sys.path. + .. option:: -H project Sets the project name to put in generated files (see :confval:`project`). diff --git a/doc/latex.rst b/doc/latex.rst new file mode 100644 index 00000000000..d378f209044 --- /dev/null +++ b/doc/latex.rst @@ -0,0 +1,445 @@ +.. highlightlang:: python + +.. _latex: + +LaTeX customization +=================== + +.. module:: latex + :synopsis: LaTeX specifics. + +The *latex* target does not benefit from pre-prepared themes like the +*html* target does (see :doc:`theming`). + +.. raw:: latex + + \begingroup + \sphinxsetup{verbatimwithframe=false,% + VerbatimColor={named}{OldLace}, TitleColor={named}{DarkGoldenrod},% + hintBorderColor={named}{LightCoral}, attentionBgColor={named}{LightPink},% + attentionborder=3pt, attentionBorderColor={named}{Crimson},% + noteBorderColor={named}{Olive}, noteborder=2pt,% + cautionBorderColor={named}{Cyan}, cautionBgColor={named}{LightCyan},% + cautionborder=3pt} + \relax + + +Basic customization +------------------- + +It is available from ``conf.py`` via usage of the +:ref:`latex-options` as described in :doc:`config` (backslashes must be doubled +in Python string literals to reach latex.) For example:: + + # inside conf.py + latex_engine = 'xelatex' + latex_elements = { + 'fontenc': '\\usepackage{fontspec}', + 'fontpkg': '''\ + \\setmainfont{DejaVu Serif} + \\setsansfont{DejaVu Sans} + \\setmonofont{DejaVu Sans Mono}''', + 'geometry': '\\usepackage[vmargin=2.5cm, hmargin=3cm]{geometry}', + 'preamble': '''\ + \\usepackage[titles]{tocloft} + \\cftsetpnumwidth {1.25cm}\\cftsetrmarg{1.5cm} + \\setlength{\\cftchapnumwidth}{0.75cm} + \\setlength{\\cftsecindent}{\\cftchapnumwidth} + \\setlength{\\cftsecnumwidth}{1.25cm}''', + 'fncychap': '\\usepackage[Bjornstrup]{fncychap}', + 'printindex': '\\footnotesize\\raggedright\\printindex', + } + latex_show_urls = 'footnote' + +.. the above was tested on Sphinx's own 1.5a2 documentation with good effect ! + +.. highlight:: latex + +More advanced customization will be obtained via insertion into the LaTeX +preamble of relevant ``\renewcommand``, ``\renewenvironment``, ``\setlength``, +or ``\definecolor`` commands. The ``'preamble'`` key of +:confval:`latex_elements` will serve for inserting these commands. If they are +numerous, it may prove more convenient to assemble them into a specialized +file :file:`mystyle.tex` and then use:: + + 'preamble': r'\makeatletter\input{mystyle.tex}\makeatother', + +or, better, to set up a style file +:file:`mystyle.sty` which can then be loaded via:: + + 'preamble': r'\usepackage{mystyle}', + +The :ref:`build configuration file <build-config>` file for the project needs +to have its variable :confval:`latex_additional_files` appropriately +configured, for example:: + + latex_additional_files = ["mystyle.sty"] + +The Sphinx LaTeX style package options +-------------------------------------- + +The ``'sphinxsetup'`` key to :confval:`latex_elements` provides a +more convenient interface to various style parameters. It is a comma separated +string of ``key=value`` instructions:: + + key1=value1,key2=value2, ... + +- if a key is repeated, it is its last occurence which counts, +- spaces around the commas and equal signs are ignored. + +If non-empty, it will be passed as argument to the ``\sphinxsetup`` command:: + + \usepackage{sphinx} + \sphinxsetup{key1=value1,key2=value2,...} + +.. versionadded:: 1.5 + +.. note:: + + - Most options described next could also have been positioned as + :file:`sphinx.sty` package options. But for those where the key value + contains some LaTeX code the use of ``\sphinxsetup`` is mandatory. Hence + the whole ``'sphinxsetup'`` string is passed as argument to + ``\sphinxsetup``. + + - As an alternative to the ``'sphinxsetup'`` key, it is possibly + to insert explicitely the ``\\sphinxsetup{key=value,..}`` inside the + ``'preamble'`` key. It is even possible to use the ``\sphinxsetup`` in + the body of the document, via the :rst:dir:`raw` directive, to modify + dynamically the option values: this is actually what we did for the + duration of this chapter for the PDF output, which is styled using:: + + verbatimwithframe=false, + VerbatimColor={named}{OldLace}, TitleColor={named}{DarkGoldenrod}, + hintBorderColor={named}{LightCoral}, attentionBgColor={named}{LightPink}, + attentionborder=3pt, attentionBorderColor={named}{Crimson}, + noteBorderColor={named}{Olive}, noteborder=2pt, + cautionBorderColor={named}{Cyan}, cautionBgColor={named}{LightCyan}, + cautionborder=3pt + + and with the ``svgnames`` option having been passed to "xcolor" package:: + + latex_elements = { + 'passoptionstopackages': r'\PassOptionsToPackage{svgnames}{xcolor}', + } + + +Here are the currently available options together with their default values. + +.. caution:: + + These options correspond to what has been so far the default LaTeX + rendering by Sphinx; if in future Sphinx offers various *themes* for LaTeX, + the interface may change. + +``verbatimwithframe`` + default ``true``. Boolean to specify if :rst:dir:`code-block`\ s and literal + includes are framed. Setting it to ``false`` does not deactivate use of + package "framed", because it is still in use for the optional background + colour (see below). + + .. attention:: + + LaTeX requires ``true`` or ``false`` to be specified in *lowercase*. + +``verbatimwrapslines`` + default ``true``. Tells whether long lines in :rst:dir:`code-block`\ s + should be wrapped. + + .. (comment) It is theoretically possible to customize this even + more and decide at which characters a line-break can occur and whether + before or after, but this is accessible currently only by re-defining some + macros with complicated LaTeX syntax from :file:`sphinx.sty`. + +``inlineliteralwraps`` + default ``true``. Allows linebreaks inside inline literals: but extra + potential break-points (additionally to those allowed by LaTeX at spaces + or for hyphenation) are currently inserted only after the characters + ``. , ; ? ! /``. Due to TeX internals, white space in the line will be + stretched + (or shrinked) in order to accomodate the linebreak. + + .. versionadded:: 1.5 + set this option to ``false`` to recover former behaviour. + +``verbatimvisiblespace`` + default ``\textcolor{red}{\textvisiblespace}``. When a long code line is + split, space characters located at end of the line before the break are + displayed using this code. + +``verbatimcontinued`` + The default is:: + + \makebox[2\fontcharwd\font`\x][r]{\textcolor{red}{\tiny$\hookrightarrow$}} + + It is printed at start of continuation lines. This rather formidable + expression reserves twice the width of a typical character in the current + (monospaced) font and puts there a small red hook pointing to the right. + + .. versionchanged:: 1.5 + The breaking of long code lines was introduced at 1.4.2. The space + reserved to the continuation symbol was changed at 1.5 to obey the + current font characteristics (this was needed as Sphinx 1.5 LaTeX + allows code-blocks in footnotes which use a smaller font size). + + .. hint:: + + This specification gives the same spacing as before 1.5:: + + \normalfont\normalsize\makebox[3ex][r]{\textcolor{red}{\tiny$\hookrightarrow$} + +``TitleColor`` + default ``{rgb}{0.126,0.263,0.361}``. The colour for titles (as configured + via use of package "titlesec".) It must obey the syntax of the + ``\definecolor`` command. Check the documentation of packages ``color`` or + ``xcolor``. + +``InnerLinkColor`` + default ``{rgb}{0.208,0.374,0.486}``. A colour passed to ``hyperref`` as + value of ``linkcolor`` and ``citecolor``. + +``OuterLinkColor`` + default ``{rgb}{0.216,0.439,0.388}``. A colour passed to ``hyperref`` as + value of ``filecolor``, ``menucolor``, and ``urlcolor``. + +``VerbatimColor`` + default ``{rgb}{1,1,1}``. The background colour for + :rst:dir:`code-block`\ s. The default is white. + +``VerbatimBorderColor`` + default ``{rgb}{0,0,0}``. The frame color, defaults to black. + +``verbatimsep`` + default ``\fboxsep``. The separation between code lines and the frame. + +``verbatimborder`` + default ``\fboxrule``. The width of the frame around + :rst:dir:`code-block`\ s. + +``shadowsep`` + default ``5pt``. The separation between contents and frame for + :dudir:`contents` and :dudir:`topic` boxes. + +``shadowsize`` + default ``4pt``. The width of the lateral "shadow" to the right. + +``shadowrule`` + default ``\fboxrule``. The width of the frame around :dudir:`topic` boxes. + +``noteBorderColor`` + default ``{rgb}{0,0,0}``. The colour for the two horizontal rules used by + Sphinx in LaTeX for styling a + :dudir:`note` admonition. Defaults to black. + + .. note:: + + The actual name of the colour as declared to "color" or "xcolor" is + ``sphinxnoteBorderColor``. The same "sphinx" prefix applies to all + colours for notices and admonitions. + +``hintBorderColor`` + default ``{rgb}{0,0,0}``. id. + +``importantBorderColor`` + default ``{rgb}{0,0,0}``. id. + +``tipBorderColor`` + default ``{rgb}{0,0,0}``. id. + +``noteborder`` + default ``0.5pt``. The width of the two horizontal rules. + +``hintborder`` + default ``0.5pt``. id. + +``importantborder`` + default ``0.5pt``. id. + +``tipborder`` + default ``0.5pt``. id. + +``warningBorderColor`` + default ``{rgb}{0,0,0}``. The colour of the frame for :dudir:`warning` type + admonitions. Defaults to black. + +``cautionBorderColor`` + default ``{rgb}{0,0,0}``. id. + +``attentionBorderColor`` + default ``{rgb}{0,0,0}``. id. + +``dangerBorderColor`` + default ``{rgb}{0,0,0}``. id. + +``errorBorderColor`` + default ``{rgb}{0,0,0}``. id. + +``warningBgColor`` + default ``{rgb}{1,1,1}``. The background colour for :dudir:`warning` type + admonition, defaults to white. + +``cautionBgColor`` + default ``{rgb}{1,1,1}``. id. + +``attentionBgColor`` + default ``{rgb}{1,1,1}``. id. + +``dangerBgColor`` + default ``{rgb}{1,1,1}``. id. + +``errorBgColor`` + default ``{rgb}{1,1,1}``. id. + +``warningborder`` + default ``1pt``. The width of the frame. + +``cautionborder`` + default ``1pt``. id. + +``attentionborder`` + default ``1pt``. id. + +``dangerborder`` + default ``1pt``. id. + +``errorborder`` + default ``1pt``. id. + +``AtStartFootnote`` + default ``\mbox{ }``. LaTeX macros inserted at the start of the footnote + text at bottom of page, after the footnote number. + +``BeforeFootnote`` + default ``\leavevmode\unskip``. LaTeX macros inserted before the footnote + mark. The default removes possible space before it. + + It can be set to empty (``BeforeFootnote={},``) to recover the earlier + behaviour of Sphinx, or alternatively contain a ``\nobreak\space`` or a + ``\thinspace`` after the ``\unskip`` to insert some chosen + (non-breakable) space. + + .. versionadded:: 1.5 + formerly, footnotes from explicit mark-up were + preceded by a space (hence a linebreak there was possible), but + automatically generated footnotes had no such space. + +``HeaderFamily`` + default ``\sffamily\bfseries``. Sets the font used by headings. + +As seen above, key values may even be used for LaTeX commands. But don't +forget to double the backslashes if not using "raw" Python strings. + +The LaTeX environments defined by Sphinx +---------------------------------------- + +Let us now list some macros from the package file +:file:`sphinx.sty` and class file :file:`sphinxhowto.cls` or +:file:`sphinxmanual.cls`, which can be entirely redefined, if desired. + +- text styling commands (they have one argument): ``\sphinx<foo>`` with + ``<foo>`` being one of ``strong``, ``bfcode``, ``email``, ``tablecontinued``, + ``titleref``, ``menuselection``, ``accelerator``, ``crossref``, ``termref``, + ``optional``. By default and for backwards compatibility the ``\sphinx<foo>`` + expands to ``\<foo>`` hence the user can choose to customize rather the latter + (the non-prefixed macros will be left undefined if option + :confval:`latex_keep_old_macro_names` is set to ``False`` in :file:`conf.py`.) + + .. versionchanged:: 1.4.5 + use of ``\sphinx`` prefixed macro names to limit possibilities of conflict + with user added packages: if + :confval:`latex_keep_old_macro_names` is set to ``False`` in + :file:`conf.py` only the prefixed names are defined. +- more text styling commands: ``\sphinxstyle<bar>`` with ``<bar>`` one of + ``indexentry``, ``indexextra``, ``indexpageref``, ``topictitle``, + ``sidebartitle``, ``othertitle``, ``sidebarsubtitle``, ``thead``, + ``emphasis``, ``literalemphasis``, ``strong``, ``literalstrong``, + ``abbreviation``, ``literalintitle``. + + .. versionadded:: 1.5 + the new macros are wrappers of the formerly hard-coded ``\texttt``, + ``\emph``, ... The default definitions can be found in + :file:`sphinx.sty`. +- paragraph level environments: for each admonition type ``<foo>``, the + used environment is named ``sphinx<foo>``. They may be ``\renewenvironment`` + 'd individually, and must then be defined with one argument (it is the heading + of the notice, for example ``Warning:`` for :dudir:`warning` directive, if + English is the document language). Their default definitions use either the + *sphinxheavybox* (for the first listed directives) or the *sphinxlightbox* + environments, configured to use the parameters (colours, border thickness) + specific to each type, which can be set via ``'sphinxsetup'`` string. + + .. versionchanged:: 1.5 + use of public environment names, separate customizability of the parameters. +- the :dudir:`contents` directive (with ``:local:`` option) and the + :dudir:`topic` directive are implemented by environment ``sphinxShadowBox``. + See above for the three dimensions associated with it. + + .. versionchanged:: 1.5 + use of public names for the three lengths. The environment itself was + redefined to allow page breaks at release 1.4.2. +- the literal blocks (:rst:dir:`code-block` directives, etc ...), are + implemented using ``sphinxVerbatim`` environment which is a wrapper of + ``Verbatim`` environment from package ``fancyvrb.sty``. It adds the handling + of the top caption and the wrapping of long lines, and a frame which allows + pagebreaks. Inside tables the used + environment is ``sphinxVerbatimintable`` (it does not draw a frame, but + allows a caption). + + .. versionchanged:: 1.5 + ``Verbatim`` keeps exact same meaning as in ``fancyvrb.sty`` (meaning + which is the one of ``OriginalVerbatim`` too), and custom one is called + ``sphinxVerbatim``. Also, earlier version of Sphinx used + ``OriginalVerbatim`` inside tables (captions were lost, long code lines + were not wrapped), it now uses there ``sphinxVerbatimintable``. + .. versionadded:: 1.5 + the two customizable lengths, the ``sphinxVerbatimintable``, the boolean + toggles described above. +- by default the Sphinx style file ``sphinx.sty`` includes the command + ``\fvset{fontsize=\small}`` as part of its configuration of + ``fancyvrb.sty``. The user may override this for example via + ``\fvset{fontsize=auto}`` which will use for listings the ambient + font size. Refer to ``fancyvrb.sty``'s documentation for further keys. + + .. versionadded:: 1.5 + formerly, the use of ``\small`` for code listings was not customizable. +- the section, subsection, ... headings are set using *titlesec*'s + ``\titleformat`` command. Check :file:`sphinx.sty` for the definitions. +- for the ``'sphinxmanual'`` class (corresponding to the fifth element of + :confval:`latex_documents` being set to ``'manual'``), the chapter headings + can be customized using *fncychap*'s commands ``\ChNameVar``, ``\ChNumVar``, + ``\ChTitleVar``. Check :file:`sphinx.sty` for the default definitions. They + are applied only if *fncychap* is loaded with option ``Bjarne``. It is also + possible to use an empty ``'fncychap'`` key, and use the *titlesec* + ``\titleformat`` command to style the chapter titles. + + .. versionchanged:: 1.5 + formerly, use of *fncychap* with other styles than ``Bjarne`` was + dysfunctional. +- the table of contents is typeset via ``\sphinxtableofcontents`` which is a + wrapper (whose definition can be found in :file:`sphinxhowto.cls` or in + :file:`sphinxmanual.cls`) of standard ``\tableofcontents``. + + .. versionchanged:: 1.5 + formerly, the meaning of ``\tableofcontents`` was modified by Sphinx. +- the bibliography and Python Module index are typeset respectively within + environments ``sphinxthebibliography`` and ``sphinxtheindex``, which are + simple wrappers of the non-modified ``thebibliography`` and ``theindex`` + environments. + + .. versionchanged:: 1.5 + formerly, the original environments were modified by Sphinx. + +- the list is not exhaustive: refer to :file:`sphinx.sty` for more. + +.. hint:: + + As an experimental feature, Sphinx can use user-defined template file for + LaTeX source if you have a file named ``_templates/latex.tex_t`` on your + project. Now all template variables are unstable and undocumented. They + will be changed in future version. + + .. versionadded:: 1.5 + +.. raw:: latex + + \endgroup diff --git a/doc/man/sphinx-apidoc.rst b/doc/man/sphinx-apidoc.rst index a01d2a82f04..be0c3d3a376 100644 --- a/doc/man/sphinx-apidoc.rst +++ b/doc/man/sphinx-apidoc.rst @@ -49,6 +49,7 @@ Options These options are used with ``-F``: +-a Append module_path to sys.path. -H <project> Project name to put into the configuration. -A <author> Author name(s) to put into the configuration. -V <version> Project version. diff --git a/doc/markup/code.rst b/doc/markup/code.rst index c7672644101..c7cb0f9111b 100644 --- a/doc/markup/code.rst +++ b/doc/markup/code.rst @@ -21,8 +21,8 @@ an "unused" primary prompt; this is an example of what *not* to do:: 2 >>> -Syntax highlighting is done with `Pygments <http://pygments.org>`_ (if it's -installed) and handled in a smart way: +Syntax highlighting is done with `Pygments <http://pygments.org>`_ and handled +in a smart way: * There is a "highlighting language" for each source file. Per default, this is ``'python'`` as the majority of files will have to highlight Python snippets, @@ -77,7 +77,7 @@ installed) and handled in a smart way: Line numbers ^^^^^^^^^^^^ -If installed, Pygments can generate line numbers for code blocks. For +Pygments can generate line numbers for code blocks. For automatically-highlighted blocks (those started by ``::``), line numbers must be switched on in a :rst:dir:`highlight` directive, with the ``linenothreshold`` option:: @@ -241,7 +241,7 @@ Dedent .. versionadded:: 1.3 -A ``dedent`` option can be given to strip a precedence characters from the code +A ``dedent`` option can be given to strip indentation characters from the code block. For example:: .. literalinclude:: example.rb diff --git a/doc/markup/inline.rst b/doc/markup/inline.rst index 10db17d7910..a59585babc1 100644 --- a/doc/markup/inline.rst +++ b/doc/markup/inline.rst @@ -200,21 +200,34 @@ Referencing downloadable files The ``example.py`` file will be copied to the output directory, and a suitable link generated to it. + Not to show unavailable download links, you should wrap whole paragraphs that + have this role:: + + .. only:: builder_html + + See :download:`this example script <../example.py>`. Cross-referencing figures by figure number ------------------------------------------ .. versionadded:: 1.3 +.. versionchanged:: 1.5 + `numref` role can also refer sections. + And `numref` allows `{name}` for the link text. + .. rst:role:: numref - Link to the specified figures, tables and code-blocks; the standard reST - labels are used. When you use this role, it will insert a reference to the - figure with link text by its figure number like "Fig. 1.1". + Link to the specified figures, tables, code-blocks and sections; the standard + reST labels are used. When you use this role, it will insert a reference to + the figure with link text by its figure number like "Fig. 1.1". If an explicit link text is given (like usual: ``:numref:`Image of Sphinx (Fig. %s) <my-figure>```), the link caption will be the title of the reference. - As a special character, `%s` will be replaced to figure number. + As a special character, `%s` and `{number}` will be replaced to figure + number. `{name}` will be replaced to figure caption. + If no explicit link text is given, the value of :confval:`numfig_format` is + used to default value of link text. If :confval:`numfig` is ``False``, figures are not numbered. so this role inserts not a reference but labels or link text. @@ -242,9 +255,8 @@ objects: .. rst:role:: option - A command-line option to an executable program. The leading hyphen(s) must - be included. This generates a link to a :rst:dir:`option` directive, if it - exists. + A command-line option to an executable program. This generates a link to + a :rst:dir:`option` directive, if it exists. The following role creates a cross-reference to a term in a diff --git a/doc/markup/misc.rst b/doc/markup/misc.rst index 2855f1fadef..bdfc3346ce0 100644 --- a/doc/markup/misc.rst +++ b/doc/markup/misc.rst @@ -191,7 +191,7 @@ Including content based on tags All tags must follow the standard Python identifier syntax as set out in the `Identifiers and keywords - <https://docs.python.org/reference/lexical_analysis.html#identifiers>`_ + <https://docs.python.org/2/reference/lexical_analysis.html#identifiers>`_ documentation. That is, a tag expression may only consist of tags that conform to the syntax of Python variables. In ASCII, this consists of the uppercase and lowercase letters ``A`` through ``Z``, the underscore ``_`` @@ -238,10 +238,19 @@ following directive exists: By default, Sphinx uses a table layout with ``L`` for every column. + .. hint:: + + For columns which are known to be much narrower than the others it is + recommended to use the lowercase specifiers. For more information, check + the ``tabulary`` manual. + .. versionadded:: 0.3 .. warning:: + Tables with more than 30 rows are rendered using ``longtable``, not + ``tabulary``, in order to allow pagebreaks. + Tables that contain list-like elements such as object descriptions, blockquotes or any kind of lists cannot be set out of the box with ``tabulary``. They are therefore set with the standard LaTeX ``tabular`` @@ -253,8 +262,6 @@ following directive exists: literal block are always set with ``tabular``. Also, the verbatim environment used for literal blocks only works in ``p{width}`` columns, which means that by default, Sphinx generates such column specs for such tables. - Use the :rst:dir:`tabularcolumns` directive to get finer control over such - tables. .. rubric:: Footnotes diff --git a/doc/markup/para.rst b/doc/markup/para.rst index cc03a9f135f..ba2cc52f56f 100644 --- a/doc/markup/para.rst +++ b/doc/markup/para.rst @@ -183,6 +183,24 @@ Glossary (When the glossary is sorted, the first term determines the sort order.) + If you want to specify "grouping key" for general index entries, you can put a "key" + as "term : key". For example:: + + .. glossary:: + + term 1 : A + term 2 : B + Definition of both terms. + + Note that "key" is used for grouping key as is. + The "key" isn't normalized; key "A" and "a" become different groups. + The whole characters in "key" is used instead of a first character; it is used for + "Combining Character Sequence" and "Surrogate Pairs" grouping key. + + In i18n situation, you can specify "localized term : key" even if original text only + have "term" part. In this case, translated "localized term" will be categorized in + "key" group. + .. versionadded:: 0.6 You can now give the glossary directive a ``:sorted:`` flag that will automatically sort the entries alphabetically. @@ -190,6 +208,8 @@ Glossary .. versionchanged:: 1.1 Now supports multiple terms and inline markup in terms. + .. versionchanged:: 1.4 + Index key for glossary term should be considered *experimental*. Grammar production displays --------------------------- diff --git a/doc/markup/toctree.rst b/doc/markup/toctree.rst index 4123ee95d0a..a0161ee3c3e 100644 --- a/doc/markup/toctree.rst +++ b/doc/markup/toctree.rst @@ -123,6 +123,16 @@ tables of contents. The ``toctree`` directive is the central element. toctree directive. This is useful if you want to generate a "sitemap" from the toctree. + You can use the ``reversed`` flag option to reverse the order of the entries + in the list. This can be useful when using the ``glob`` flag option to + reverse the ordering of the files. Example:: + + .. toctree:: + :glob: + :reversed: + + recipe/* + You can also give a "hidden" option to the directive, like this:: .. toctree:: @@ -223,11 +233,8 @@ The special document names (and pages generated for them) are: .. rubric:: Footnotes -.. [#] The ``maxdepth`` option does not apply to the LaTeX writer, where the - whole table of contents will always be presented at the begin of the - document, and its depth is controlled by the ``tocdepth`` counter, which - you can reset in your :confval:`latex_preamble` config value using - e.g. ``\setcounter{tocdepth}{2}``. +.. [#] The LaTeX writer only refers the ``maxdepth`` option of first toctree + directive in the document. .. [#] A note on available globbing syntax: you can use the standard shell constructs ``*``, ``?``, ``[...]`` and ``[!...]`` with the feature that diff --git a/doc/more.png b/doc/more.png index a27a0fcba03..97553a8b7e0 100644 Binary files a/doc/more.png and b/doc/more.png differ diff --git a/doc/pythonorg.png b/doc/pythonorg.png index 32f0787d188..cf9ccbbdb74 100644 Binary files a/doc/pythonorg.png and b/doc/pythonorg.png differ diff --git a/doc/rest.rst b/doc/rest.rst index c6a4ada04a6..7b2b92ddcc8 100644 --- a/doc/rest.rst +++ b/doc/rest.rst @@ -196,6 +196,8 @@ Use ```Link text <http://example.com/>`_`` for inline web links. If the link text should be the web address, you don't need special markup at all, the parser finds links and mail addresses in ordinary text. +.. important:: There must be a space between the link text and the opening \< for the URL. + You can also separate the link and the target definition (:duref:`ref <hyperlink-targets>`), like this:: @@ -223,8 +225,10 @@ as long as the text:: ================= Normally, there are no heading levels assigned to certain characters as the -structure is determined from the succession of headings. However, for the -Python documentation, this convention is used which you may follow: +structure is determined from the succession of headings. However, this +convention is used in `Python's Style Guide for documentating +<https://docs.python.org/devguide/documenting.html#style-guide>`_ which you may +follow: * ``#`` with overline, for parts * ``*`` with overline, for chapters @@ -359,8 +363,9 @@ directory on building (e.g. the ``_static`` directory for HTML output.) Interpretation of image size options (``width`` and ``height``) is as follows: if the size has no unit or the unit is pixels, the given size will only be -respected for output channels that support pixels (i.e. not in LaTeX output). -Other units (like ``pt`` for points) will be used for HTML and LaTeX output. +respected for output channels that support pixels. Other units (like ``pt`` +for points) will be used for HTML and LaTeX output (the latter replaces ``pt`` +by ``bp`` as this is the TeX unit such that ``72bp=1in``). Sphinx extends the standard docutils behavior by allowing an asterisk for the extension:: @@ -382,6 +387,9 @@ Note that image file names should not contain spaces. .. versionchanged:: 0.6 Image paths can now be absolute. +.. versionchanged:: 1.5 + latex target supports pixels (default is ``96px=1in``). + Footnotes --------- diff --git a/doc/templating.rst b/doc/templating.rst index 5286e0312e5..b9f9410defb 100644 --- a/doc/templating.rst +++ b/doc/templating.rst @@ -377,6 +377,7 @@ are in HTML form), these variables are also available: The name of the copied source file for the current document. This is only nonempty if the :confval:`html_copy_source` value is ``True``. + This has empty value on creating automatically-generated files. .. data:: toc diff --git a/doc/themes/agogo.png b/doc/themes/agogo.png index 453a1f7dc62..5a09cb96c17 100644 Binary files a/doc/themes/agogo.png and b/doc/themes/agogo.png differ diff --git a/doc/themes/alabaster.png b/doc/themes/alabaster.png index 6e02c35caf4..4a49c1ad089 100644 Binary files a/doc/themes/alabaster.png and b/doc/themes/alabaster.png differ diff --git a/doc/themes/bizstyle.png b/doc/themes/bizstyle.png index 4deae9a7901..e19fb6b34f4 100644 Binary files a/doc/themes/bizstyle.png and b/doc/themes/bizstyle.png differ diff --git a/doc/themes/classic.png b/doc/themes/classic.png index 6989ebe9b2e..3b3c9cbd8c1 100644 Binary files a/doc/themes/classic.png and b/doc/themes/classic.png differ diff --git a/doc/themes/fullsize/agogo.png b/doc/themes/fullsize/agogo.png index bfdba3a17e1..106a16cea4b 100644 Binary files a/doc/themes/fullsize/agogo.png and b/doc/themes/fullsize/agogo.png differ diff --git a/doc/themes/fullsize/alabaster.png b/doc/themes/fullsize/alabaster.png index 3e026c9997b..5eca2091235 100644 Binary files a/doc/themes/fullsize/alabaster.png and b/doc/themes/fullsize/alabaster.png differ diff --git a/doc/themes/fullsize/bizstyle.png b/doc/themes/fullsize/bizstyle.png index d917e2ff21e..5860647658d 100644 Binary files a/doc/themes/fullsize/bizstyle.png and b/doc/themes/fullsize/bizstyle.png differ diff --git a/doc/themes/fullsize/classic.png b/doc/themes/fullsize/classic.png index 9c00f6899c5..269dab22f38 100644 Binary files a/doc/themes/fullsize/classic.png and b/doc/themes/fullsize/classic.png differ diff --git a/doc/themes/fullsize/haiku.png b/doc/themes/fullsize/haiku.png index 8d807f4e1ff..707d2bfecd0 100644 Binary files a/doc/themes/fullsize/haiku.png and b/doc/themes/fullsize/haiku.png differ diff --git a/doc/themes/fullsize/nature.png b/doc/themes/fullsize/nature.png index 02d8743b38c..00730c0a518 100644 Binary files a/doc/themes/fullsize/nature.png and b/doc/themes/fullsize/nature.png differ diff --git a/doc/themes/fullsize/pyramid.png b/doc/themes/fullsize/pyramid.png index 961cb896c04..3b9d04d13ac 100644 Binary files a/doc/themes/fullsize/pyramid.png and b/doc/themes/fullsize/pyramid.png differ diff --git a/doc/themes/fullsize/scrolls.png b/doc/themes/fullsize/scrolls.png index 4e5c45f210a..8a1c1faf518 100644 Binary files a/doc/themes/fullsize/scrolls.png and b/doc/themes/fullsize/scrolls.png differ diff --git a/doc/themes/fullsize/sphinx_rtd_theme.png b/doc/themes/fullsize/sphinx_rtd_theme.png index 4a3d74c88bd..95cff4ccd0e 100644 Binary files a/doc/themes/fullsize/sphinx_rtd_theme.png and b/doc/themes/fullsize/sphinx_rtd_theme.png differ diff --git a/doc/themes/fullsize/sphinxdoc.png b/doc/themes/fullsize/sphinxdoc.png index b746334524e..eb498e3e8d2 100644 Binary files a/doc/themes/fullsize/sphinxdoc.png and b/doc/themes/fullsize/sphinxdoc.png differ diff --git a/doc/themes/fullsize/traditional.png b/doc/themes/fullsize/traditional.png index da69efe12df..07ad00875a4 100644 Binary files a/doc/themes/fullsize/traditional.png and b/doc/themes/fullsize/traditional.png differ diff --git a/doc/themes/haiku.png b/doc/themes/haiku.png index 78a2570c4d4..4530debb9b0 100644 Binary files a/doc/themes/haiku.png and b/doc/themes/haiku.png differ diff --git a/doc/themes/nature.png b/doc/themes/nature.png index cbe773d5c43..ad39b32b798 100644 Binary files a/doc/themes/nature.png and b/doc/themes/nature.png differ diff --git a/doc/themes/pyramid.png b/doc/themes/pyramid.png index eb13cd5f201..72749dd6bb8 100644 Binary files a/doc/themes/pyramid.png and b/doc/themes/pyramid.png differ diff --git a/doc/themes/scrolls.png b/doc/themes/scrolls.png index 30ccc8d497e..1a117379ffc 100644 Binary files a/doc/themes/scrolls.png and b/doc/themes/scrolls.png differ diff --git a/doc/themes/sphinx_rtd_theme.png b/doc/themes/sphinx_rtd_theme.png index e13f52b04fb..7c3b7ae05de 100644 Binary files a/doc/themes/sphinx_rtd_theme.png and b/doc/themes/sphinx_rtd_theme.png differ diff --git a/doc/themes/sphinxdoc.png b/doc/themes/sphinxdoc.png index 31512d8d88b..587363e614c 100644 Binary files a/doc/themes/sphinxdoc.png and b/doc/themes/sphinxdoc.png differ diff --git a/doc/themes/traditional.png b/doc/themes/traditional.png index 5ff44f86961..9820fd0ea8e 100644 Binary files a/doc/themes/traditional.png and b/doc/themes/traditional.png differ diff --git a/doc/theming.rst b/doc/theming.rst index 13e672b694d..1d895ec19e6 100644 --- a/doc/theming.rst +++ b/doc/theming.rst @@ -51,7 +51,7 @@ The third form provides your theme path dynamically to Sphinx if the called ``sphinx_themes`` in your setup.py file and write a ``get_path`` function that has to return the directory with themes in it:: - // in your 'setup.py' + # 'setup.py' setup( ... @@ -63,7 +63,7 @@ that has to return the directory with themes in it:: ... ) - // in 'your_package.py' + # 'your_package.py' from os import path package_dir = path.abspath(path.dirname(__file__)) @@ -81,38 +81,33 @@ that has to return the directory with themes in it:: Builtin themes -------------- -.. cssclass:: right +.. cssclass:: longtable +--------------------+--------------------+ | **Theme overview** | | +--------------------+--------------------+ -| |alabaster| | |sphinx_rtd_theme| | +| |alabaster| | |classic| | | | | -| *alabaster* | *sphinx_rtd_theme* | +| *alabaster* | *classic* | +--------------------+--------------------+ -| |classic| | |sphinxdoc| | +| |sphinxdoc| | |scrolls| | | | | -| *classic* | *sphinxdoc* | +| *sphinxdoc* | *scrolls* | +--------------------+--------------------+ -| |scrolls| | |agogo| | +| |agogo| | |traditional| | | | | -| *scrolls* | *agogo* | +| *agogo* | *traditional* | +--------------------+--------------------+ -| |traditional| | |nature| | +| |nature| | |haiku| | | | | -| *traditional* | *nature* | +| *nature* | *haiku* | +--------------------+--------------------+ -| |haiku| | |pyramid| | +| |pyramid| | |bizstyle| | | | | -| *haiku* | *pyramid* | -+--------------------+--------------------+ -| |bizstyle| | | -| | | -| *bizstyle* | | +| *pyramid* | *bizstyle* | +--------------------+--------------------+ .. |alabaster| image:: themes/alabaster.png -.. |sphinx_rtd_theme| image:: themes/sphinx_rtd_theme.png .. |classic| image:: themes/classic.png .. |sphinxdoc| image:: themes/sphinxdoc.png .. |scrolls| image:: themes/scrolls.png @@ -147,16 +142,9 @@ These themes are: .. _Alabaster theme: https://pypi.python.org/pypi/alabaster -* **sphinx_rtd_theme** -- `Read the Docs Sphinx Theme`_. - This is a mobile-friendly sphinx theme that was made for readthedocs.org. - View a working demo over on readthedocs.org. You can get options information - at `Read the Docs Sphinx Theme`_ page. - - .. _Read the Docs Sphinx Theme: https://pypi.python.org/pypi/sphinx_rtd_theme - -* **classic** -- This is the classic theme, which looks like `the Python - documentation <https://docs.python.org/>`_. It can be customized via these - options: +* **classic** -- This is the classic theme, which looks like `the Python 2 + documentation <https://docs.python.org/2/>`_. It can be customized via + these options: - **rightsidebar** (true or false): Put the sidebar on the right side. Defaults to ``False``. @@ -242,7 +230,7 @@ These themes are: *sidebarwidth*. * **haiku** -- A theme without sidebar inspired by the `Haiku OS user guide - <http://www.haiku-os.org/docs/userguide/en/contents.html>`_. The following + <https://www.haiku-os.org/docs/userguide/en/contents.html>`_. The following options are supported: - **full_logo** (true or false, default ``False``): If this is true, the @@ -275,7 +263,7 @@ These themes are: .. versionchanged:: 1.3 The 'default' theme has been renamed to 'classic'. 'default' is still - available, however it will emit notice a recommendation that using new + available, however it will emit a notice that it is an alias for the new 'alabaster' theme. Creating themes @@ -359,3 +347,28 @@ is built with the classic theme, the output directory will contain a .. [1] It is not an executable Python file, as opposed to :file:`conf.py`, because that would pose an unnecessary security risk if themes are shared. + +Third Party Themes +------------------ + +.. cssclass:: longtable + ++--------------------+--------------------+ +| **Theme overview** | | ++--------------------+--------------------+ +| |sphinx_rtd_theme| | | +| | | +| *sphinx_rtd_theme* | | ++--------------------+--------------------+ + +.. |sphinx_rtd_theme| image:: themes/sphinx_rtd_theme.png + +* **sphinx_rtd_theme** -- `Read the Docs Sphinx Theme`_. + This is a mobile-friendly sphinx theme that was made for readthedocs.org. + View a working demo over on readthedocs.org. You can get install and options + information at `Read the Docs Sphinx Theme`_ page. + + .. _Read the Docs Sphinx Theme: https://pypi.python.org/pypi/sphinx_rtd_theme + + .. versionchanged:: 1.4 + **sphinx_rtd_theme** has become optional. diff --git a/doc/translation.png b/doc/translation.png index 347e287f6ae..11f3d02cdff 100644 Binary files a/doc/translation.png and b/doc/translation.png differ diff --git a/doc/tutorial.rst b/doc/tutorial.rst index 95bd61ebc3f..bced21ade7d 100644 --- a/doc/tutorial.rst +++ b/doc/tutorial.rst @@ -122,8 +122,9 @@ this:: $ sphinx-build -b html sourcedir builddir where *sourcedir* is the :term:`source directory`, and *builddir* is the -directory in which you want to place the built documentation. The :option:`-b` -option selects a builder; in this example Sphinx will build HTML files. +directory in which you want to place the built documentation. +The :option:`-b <sphinx-build -b>` option selects a builder; in this example +Sphinx will build HTML files. |more| See :ref:`invocation` for all options that :program:`sphinx-build` supports. @@ -299,12 +300,17 @@ features of intersphinx. More topics to be covered ------------------------- -- Other extensions (math, viewcode, doctest) +- :doc:`Other extensions <extensions>`: + + * :doc:`ext/math`, + * :doc:`ext/viewcode`, + * :doc:`ext/doctest`, + * ... - Static files -- Selecting a theme -- Templating +- :doc:`Selecting a theme <theming>` +- :ref:`Templating <templating>` - Using extensions -- Writing extensions +- :ref:`Writing extensions <dev-extensions>` .. rubric:: Footnotes diff --git a/doc/web/quickstart.rst b/doc/web/quickstart.rst index 996942db665..1611774c1f4 100644 --- a/doc/web/quickstart.rst +++ b/doc/web/quickstart.rst @@ -135,7 +135,7 @@ add this data to the ``COMMENT_OPTIONS`` that are used in the template. .. note:: - This only works works if your documentation is served from your + This only works if your documentation is served from your document root. If it is served from another directory, you will need to prefix the url route with that directory, and give the `docroot` keyword argument when creating the web support object:: diff --git a/ez_setup.py b/ez_setup.py deleted file mode 100644 index a523401e97a..00000000000 --- a/ez_setup.py +++ /dev/null @@ -1,332 +0,0 @@ -#!/usr/bin/env python -"""Bootstrap setuptools installation - -To use setuptools in your package's setup.py, include this -file in the same directory and add this to the top of your setup.py:: - - from ez_setup import use_setuptools - use_setuptools() - -To require a specific version of setuptools, set a download -mirror, or use an alternate download directory, simply supply -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 tempfile -import zipfile -import optparse -import subprocess -import platform -import textwrap -import contextlib - -from distutils import log - -try: - from urllib.request import urlopen -except ImportError: - from urllib2 import urlopen - -try: - from site import USER_SITE -except ImportError: - USER_SITE = None - -DEFAULT_VERSION = "7.0" -DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/" - -def _python_cmd(*args): - """ - Return True if the command succeeded. - """ - args = (sys.executable,) + args - return subprocess.call(args) == 0 - - -def _install(archive_filename, install_args=()): - with archive_context(archive_filename): - # installing - log.warn('Installing Setuptools') - 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 - - -def _build_egg(egg, archive_filename, to_dir): - with archive_context(archive_filename): - # building an egg - log.warn('Building a Setuptools egg in %s', to_dir) - _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir) - # returning the result - log.warn(egg) - if not os.path.exists(egg): - raise IOError('Could not build the egg.') - - -class ContextualZipFile(zipfile.ZipFile): - """ - Supplement ZipFile class to support context manager for Python 2.6 - """ - - def __enter__(self): - return self - - def __exit__(self, type, value, traceback): - self.close() - - def __new__(cls, *args, **kwargs): - """ - Construct a ZipFile or ContextualZipFile as appropriate - """ - if hasattr(zipfile.ZipFile, '__exit__'): - return zipfile.ZipFile(*args, **kwargs) - return super(ContextualZipFile, cls).__new__(cls) - - -@contextlib.contextmanager -def archive_context(filename): - # extracting the archive - tmpdir = tempfile.mkdtemp() - log.warn('Extracting in %s', tmpdir) - old_wd = os.getcwd() - try: - os.chdir(tmpdir) - with ContextualZipFile(filename) as archive: - archive.extractall() - - # going in the directory - subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) - os.chdir(subdir) - log.warn('Now working in %s', subdir) - yield - - finally: - os.chdir(old_wd) - shutil.rmtree(tmpdir) - - -def _do_download(version, download_base, to_dir, download_delay): - egg = os.path.join(to_dir, 'setuptools-%s-py%d.%d.egg' - % (version, sys.version_info[0], sys.version_info[1])) - if not os.path.exists(egg): - archive = download_setuptools(version, download_base, - to_dir, download_delay) - _build_egg(egg, archive, to_dir) - sys.path.insert(0, egg) - - # Remove previously-imported pkg_resources if present (see - # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details). - if 'pkg_resources' in sys.modules: - del sys.modules['pkg_resources'] - - import setuptools - setuptools.bootstrap_install_from = egg - - -def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, - to_dir=os.curdir, download_delay=15): - to_dir = os.path.abspath(to_dir) - rep_modules = 'pkg_resources', 'setuptools' - imported = set(sys.modules).intersection(rep_modules) - try: - import pkg_resources - except ImportError: - return _do_download(version, download_base, to_dir, download_delay) - try: - pkg_resources.require("setuptools>=" + version) - return - except pkg_resources.DistributionNotFound: - return _do_download(version, download_base, to_dir, download_delay) - except pkg_resources.VersionConflict as VC_err: - if imported: - msg = textwrap.dedent(""" - The required version of setuptools (>={version}) is not available, - and can't be installed while this script is running. Please - install a more recent version first, using - 'easy_install -U setuptools'. - - (Currently using {VC_err.args[0]!r}) - """).format(VC_err=VC_err, version=version) - sys.stderr.write(msg) - sys.exit(2) - - # otherwise, reload ok - del pkg_resources, sys.modules['pkg_resources'] - return _do_download(version, download_base, to_dir, download_delay) - -def _clean_check(cmd, target): - """ - Run the command to download target. If the command fails, clean up before - re-raising the error. - """ - try: - subprocess.check_call(cmd) - except subprocess.CalledProcessError: - if os.access(target, os.F_OK): - os.unlink(target) - raise - -def download_file_powershell(url, target): - """ - Download the file at url to target using Powershell (which will validate - trust). Raise an exception if the command cannot complete. - """ - target = os.path.abspath(target) - ps_cmd = ( - "[System.Net.WebRequest]::DefaultWebProxy.Credentials = " - "[System.Net.CredentialCache]::DefaultCredentials; " - "(new-object System.Net.WebClient).DownloadFile(%(url)r, %(target)r)" - % vars() - ) - cmd = [ - 'powershell', - '-Command', - ps_cmd, - ] - _clean_check(cmd, target) - -def has_powershell(): - if platform.system() != 'Windows': - return False - cmd = ['powershell', '-Command', 'echo test'] - with open(os.path.devnull, 'wb') as devnull: - try: - subprocess.check_call(cmd, stdout=devnull, stderr=devnull) - except Exception: - return False - return True - -download_file_powershell.viable = has_powershell - -def download_file_curl(url, target): - cmd = ['curl', url, '--silent', '--output', target] - _clean_check(cmd, target) - -def has_curl(): - cmd = ['curl', '--version'] - with open(os.path.devnull, 'wb') as devnull: - try: - subprocess.check_call(cmd, stdout=devnull, stderr=devnull) - except Exception: - return False - return True - -download_file_curl.viable = has_curl - -def download_file_wget(url, target): - cmd = ['wget', url, '--quiet', '--output-document', target] - _clean_check(cmd, target) - -def has_wget(): - cmd = ['wget', '--version'] - with open(os.path.devnull, 'wb') as devnull: - try: - subprocess.check_call(cmd, stdout=devnull, stderr=devnull) - except Exception: - return False - return True - -download_file_wget.viable = has_wget - -def download_file_insecure(url, target): - """ - Use Python to download the file, even though it cannot authenticate the - connection. - """ - src = urlopen(url) - try: - # Read all the data in one block. - data = src.read() - finally: - src.close() - - # Write all the data in one block to avoid creating a partial file. - with open(target, "wb") as dst: - dst.write(data) - -download_file_insecure.viable = lambda: True - -def get_best_downloader(): - downloaders = ( - download_file_powershell, - download_file_curl, - download_file_wget, - download_file_insecure, - ) - viable_downloaders = (dl for dl in downloaders if dl.viable()) - return next(viable_downloaders, None) - -def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, - to_dir=os.curdir, delay=15, downloader_factory=get_best_downloader): - """ - Download setuptools from a specified location and return its filename - - `version` should be a valid setuptools version number that is available - as an sdist for download under the `download_base` URL (which should end - with a '/'). `to_dir` is the directory where the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download - attempt. - - ``downloader_factory`` should be a function taking no arguments and - returning a function for downloading a URL to a target. - """ - # making sure we use the absolute path - to_dir = os.path.abspath(to_dir) - zip_name = "setuptools-%s.zip" % version - url = download_base + zip_name - saveto = os.path.join(to_dir, zip_name) - if not os.path.exists(saveto): # Avoid repeated downloads - log.warn("Downloading %s", url) - downloader = downloader_factory() - downloader(url, saveto) - return os.path.realpath(saveto) - -def _build_install_args(options): - """ - Build the arguments to 'python setup.py install' on the setuptools package - """ - return ['--user'] if options.user_install else [] - -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 setuptools package') - parser.add_option( - '--insecure', dest='downloader_factory', action='store_const', - const=lambda: download_file_insecure, default=get_best_downloader, - help='Use internal, non-validating downloader' - ) - parser.add_option( - '--version', help="Specify which version to download", - default=DEFAULT_VERSION, - ) - options, args = parser.parse_args() - # positional arguments are ignored - return options - -def main(): - """Install or upgrade setuptools and EasyInstall""" - options = _parse_args() - archive = download_setuptools( - version=options.version, - download_base=options.download_base, - downloader_factory=options.downloader_factory, - ) - return _install(archive, _build_install_args(options)) - -if __name__ == '__main__': - sys.exit(main()) diff --git a/mypy.ini b/mypy.ini new file mode 100644 index 00000000000..17ded7ab8f3 --- /dev/null +++ b/mypy.ini @@ -0,0 +1,6 @@ +[mypy] +python_version = 2.7 +silent_imports = True +fast_parser = True +incremental = True +check_untyped_defs = True diff --git a/setup.cfg b/setup.cfg index 2d2f3b535c4..533a71b0ae3 100644 --- a/setup.cfg +++ b/setup.cfg @@ -25,5 +25,5 @@ universal = 1 [flake8] max-line-length=95 -ignore=E113,E116,E221,E226,E241,E251 -exclude=ez_setup.py,utils/*,tests/*,build/*,sphinx/search/*,sphinx/pycode/pgen2/* +ignore=E113,E116,E221,E226,E241,E251,E901 +exclude=tests/*,build/*,sphinx/search/*,sphinx/pycode/pgen2/*,doc/ext/example*.py,.tox/* diff --git a/setup.py b/setup.py index cc977f50ff9..051581cc41b 100644 --- a/setup.py +++ b/setup.py @@ -1,14 +1,10 @@ # -*- coding: utf-8 -*- -try: - from setuptools import setup, find_packages -except ImportError: - import ez_setup - ez_setup.use_setuptools() - from setuptools import setup, find_packages +from setuptools import setup, find_packages import os import sys from distutils import log +from distutils.cmd import Command import sphinx @@ -41,24 +37,26 @@ * Setuptools integration ''' -if sys.version_info < (2, 6) or (3, 0) <= sys.version_info < (3, 3): - print('ERROR: Sphinx requires at least Python 2.6 or 3.3 to run.') +if sys.version_info < (2, 7) or (3, 0) <= sys.version_info < (3, 4): + print('ERROR: Sphinx requires at least Python 2.7 or 3.4 to run.') sys.exit(1) requires = [ - 'six>=1.4', + 'six>=1.5', 'Jinja2>=2.3', 'Pygments>=2.0', 'docutils>=0.11', 'snowballstemmer>=1.1', 'babel>=1.3,!=2.0', 'alabaster>=0.7,<0.8', - 'sphinx_rtd_theme>=0.1,<2.0', + 'imagesize', + 'requests', + 'typing', ] extras_require = { # Environment Marker works for wheel 0.24 or later ':sys_platform=="win32"': [ - 'colorama', + 'colorama>=0.3.5', ], 'websupport': [ 'sqlalchemy>=0.9', @@ -66,14 +64,15 @@ ], 'test': [ 'nose', - 'mock', # it would be better for 'test:python_version in "2.6,2.7"' + 'mock', # it would be better for 'test:python_version in 2.7' 'simplejson', # better: 'test:platform_python_implementation=="PyPy"' + 'html5lib', ], } # for sdist installation with pip-1.5.6 if sys.platform == 'win32': - requires.append('colorama') + requires.append('colorama>=0.3.5') # Provide a "compile_catalog" command that also creates the translated # JavaScript files if Babel is available. @@ -102,6 +101,13 @@ class compile_catalog_plusjs(compile_catalog): def run(self): compile_catalog.run(self) + if isinstance(self.domain, list): + for domain in self.domain: + self._run_domain_js(domain) + else: + self._run_domain_js(self.domain) + + def _run_domain_js(self, domain): po_files = [] js_files = [] @@ -110,20 +116,20 @@ def run(self): po_files.append((self.locale, os.path.join(self.directory, self.locale, 'LC_MESSAGES', - self.domain + '.po'))) + domain + '.po'))) js_files.append(os.path.join(self.directory, self.locale, 'LC_MESSAGES', - self.domain + '.js')) + domain + '.js')) else: for locale in os.listdir(self.directory): po_file = os.path.join(self.directory, locale, 'LC_MESSAGES', - self.domain + '.po') + domain + '.po') if os.path.exists(po_file): po_files.append((locale, po_file)) js_files.append(os.path.join(self.directory, locale, 'LC_MESSAGES', - self.domain + '.js')) + domain + '.js')) else: po_files.append((self.locale, self.input_file)) if self.output_file: @@ -131,14 +137,11 @@ def run(self): else: js_files.append(os.path.join(self.directory, self.locale, 'LC_MESSAGES', - self.domain + '.js')) + domain + '.js')) for js_file, (locale, po_file) in zip(js_files, po_files): - infile = open(po_file, 'r') - try: + with open(po_file, 'r') as infile: catalog = read_po(infile, locale) - finally: - infile.close() if catalog.fuzzy and not self.use_fuzzy: continue @@ -155,8 +158,7 @@ def run(self): msgid = msgid[0] jscatalog[msgid] = message.string - outfile = open(js_file, 'wb') - try: + with open(js_file, 'wt') as outfile: outfile.write('Documentation.addTranslations(') dump(dict( messages=jscatalog, @@ -164,12 +166,36 @@ def run(self): locale=str(catalog.locale) ), outfile, sort_keys=True) outfile.write(');') - finally: - outfile.close() cmdclass['compile_catalog'] = compile_catalog_plusjs +class CompileGrammarCommand(Command): + description = 'Compile python grammar file for pycode' + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + from sphinx.pycode.pgen2.driver import compile_grammar + + compile_grammar('sphinx/pycode/Grammar-py2.txt') + print('sphinx/pycode/Grammar-py2.txt ... done') + + compile_grammar('sphinx/pycode/Grammar-py3.txt') + print('sphinx/pycode/Grammar-py3.txt ... done') + + def sub_commands(self): + pass + + +cmdclass['compile_grammar'] = CompileGrammarCommand + + setup( name='Sphinx', version=sphinx.__version__, diff --git a/sphinx-apidoc.py b/sphinx-apidoc.py index 7752fc0d1d6..56394ea96e2 100755 --- a/sphinx-apidoc.py +++ b/sphinx-apidoc.py @@ -4,7 +4,7 @@ Sphinx - Python documentation toolchain ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ diff --git a/sphinx-autogen.py b/sphinx-autogen.py index ea085573fac..bcb63085592 100755 --- a/sphinx-autogen.py +++ b/sphinx-autogen.py @@ -4,7 +4,7 @@ Sphinx - Python documentation toolchain ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ diff --git a/sphinx-build.py b/sphinx-build.py index 7c539d6432a..ab7919dbbea 100755 --- a/sphinx-build.py +++ b/sphinx-build.py @@ -4,7 +4,7 @@ Sphinx - Python documentation toolchain ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ diff --git a/sphinx-quickstart.py b/sphinx-quickstart.py index 89ad8f891e5..fcc5941322b 100755 --- a/sphinx-quickstart.py +++ b/sphinx-quickstart.py @@ -4,7 +4,7 @@ Sphinx - Python documentation toolchain ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ diff --git a/sphinx/__init__.py b/sphinx/__init__.py index 1abbd23aa54..405fc2ff2f3 100644 --- a/sphinx/__init__.py +++ b/sphinx/__init__.py @@ -5,23 +5,38 @@ The Sphinx documentation toolchain. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ # Keep this file executable as-is in Python 3! # (Otherwise getting the version out of it from setup.py is impossible.) +from __future__ import absolute_import + +import os import sys +import warnings from os import path -__version__ = '1.4a0+' -__released__ = '1.4a0' # used when Sphinx builds its own docs +from .deprecation import RemovedInNextVersionWarning + +# by default, all DeprecationWarning under sphinx package will be emit. +# Users can avoid this by using environment variable: PYTHONWARNINGS= +if 'PYTHONWARNINGS' not in os.environ: + warnings.filterwarnings('default', + category=RemovedInNextVersionWarning, module='sphinx') +# docutils.io using mode='rU' for open +warnings.filterwarnings('ignore', "'U' mode is deprecated", + DeprecationWarning, module='docutils.io') + +__version__ = '1.6' +__released__ = '1.6+' # used when Sphinx builds its own docs # version info for better programmatic use # possible values for 3rd element: 'alpha', 'beta', 'rc', 'final' # 'final' has 0 as the last element -version_info = (1, 4, 0, 'alpha', 0) +version_info = (1, 6, 0, 'beta', 1) package_dir = path.abspath(path.dirname(__file__)) @@ -39,7 +54,7 @@ stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = p.communicate() if out: - __display_version__ += '/' + out.decode().strip() + __display_version__ += '/' + out.decode().strip() # type: ignore except Exception: pass @@ -53,9 +68,9 @@ def main(argv=sys.argv): def build_main(argv=sys.argv): """Sphinx build "main" command-line entry.""" - if (sys.version_info[:3] < (2, 6, 0) or - (3, 0, 0) <= sys.version_info[:3] < (3, 3, 0)): - sys.stderr.write('Error: Sphinx requires at least Python 2.6 or 3.3 to run.\n') + if (sys.version_info[:3] < (2, 7, 0) or + (3, 0, 0) <= sys.version_info[:3] < (3, 4, 0)): + sys.stderr.write('Error: Sphinx requires at least Python 2.7 or 3.4 to run.\n') return 1 try: from sphinx import cmdline diff --git a/sphinx/__main__.py b/sphinx/__main__.py index cd19db39389..42022bf50f5 100644 --- a/sphinx/__main__.py +++ b/sphinx/__main__.py @@ -5,7 +5,7 @@ The Sphinx documentation toolchain. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ import sys diff --git a/sphinx/addnodes.py b/sphinx/addnodes.py index b30bd40aecc..95f58052d01 100644 --- a/sphinx/addnodes.py +++ b/sphinx/addnodes.py @@ -5,16 +5,63 @@ Additional docutils nodes. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ +import warnings + from docutils import nodes +from sphinx.deprecation import RemovedInSphinx16Warning + + +class translatable(object): + """Node which supports translation. + + The translation goes forward with following steps: + + 1. Preserve original translatable messages + 2. Apply translated messages from message catalog + 3. Extract preserved messages (for gettext builder) + + The translatable nodes MUST preserve original messages. + And these messages should not be overridden at applying step. + Because they are used at final step; extraction. + """ + def preserve_original_messages(self): + """Preserve original translatable messages.""" + raise NotImplementedError -class toctree(nodes.General, nodes.Element): + def apply_translated_message(self, original_message, translated_message): + """Apply translated message.""" + raise NotImplementedError + + def extract_original_messages(self): + """Extract translation messages. + + :returns: list of extracted messages or messages generator + """ + raise NotImplementedError + + +class toctree(nodes.General, nodes.Element, translatable): """Node for inserting a "TOC tree".""" + def preserve_original_messages(self): + if 'caption' in self: + self['rawcaption'] = self['caption'] + + def apply_translated_message(self, original_message, translated_message): + if self.get('rawcaption') == original_message: + self['caption'] = translated_message + + def extract_original_messages(self): + if 'rawcaption' in self: + return [self['rawcaption']] + else: + return [] + # domain-specific object descriptions (class, function etc.) @@ -30,13 +77,27 @@ class desc_signature(nodes.Part, nodes.Inline, nodes.TextElement): """Node for object signatures. The "term" part of the custom Sphinx definition list. + + As default the signature is a single line signature, + but set ``is_multiline = True`` to describe a multi-line signature. + In that case all child nodes must be ``desc_signature_line`` nodes. """ -# nodes to use within a desc_signature +class desc_signature_line(nodes.Part, nodes.Inline, nodes.TextElement): + """Node for a line in a multi-line object signatures. + + It should only be used in a ``desc_signature`` with ``is_multiline`` set. + Set ``add_permalink = True`` for the line that should get the permalink. + """ + + +# nodes to use within a desc_signature or desc_signature_line class desc_addname(nodes.Part, nodes.Inline, nodes.TextElement): """Node for additional name parts (module name, class name).""" + + # compatibility alias desc_classname = desc_addname @@ -114,10 +175,14 @@ class index(nodes.Invisible, nodes.Inline, nodes.TextElement): """Node for index entries. This node is created by the ``index`` directive and has one attribute, - ``entries``. Its value is a list of 4-tuples of ``(entrytype, entryname, - target, ignored)``. + ``entries``. Its value is a list of 5-tuples of ``(entrytype, entryname, + target, ignored, key)``. *entrytype* is one of "single", "pair", "double", "triple". + + *key* is categolziation characters (usually it is single character) for + general index page. For the detail of this, please see also: + :rst:dir:`glossary` and issue #2320. """ @@ -209,7 +274,20 @@ class abbreviation(nodes.Inline, nodes.TextElement): class termsep(nodes.Structural, nodes.Element): - """Separates two terms within a <term> node.""" + """Separates two terms within a <term> node. + + .. versionchanged:: 1.4 + sphinx.addnodes.termsep is deprecated. It will be removed at Sphinx-1.6. + """ + + def __init__(self, *args, **kw): + warnings.warn('sphinx.addnodes.termsep will be removed at Sphinx-1.6', + RemovedInSphinx16Warning, stacklevel=2) + super(termsep, self).__init__(*args, **kw) + + +class manpage(nodes.Inline, nodes.TextElement): + """Node for references to manpages.""" # make the new nodes known to docutils; needed because the HTML writer will diff --git a/sphinx/apidoc.py b/sphinx/apidoc.py index 805e862c9c7..e48a527a510 100644 --- a/sphinx/apidoc.py +++ b/sphinx/apidoc.py @@ -11,7 +11,7 @@ Copyright 2008 Société des arts technologiques (SAT), http://www.sat.qc.ca/ - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import print_function @@ -20,10 +20,16 @@ import sys import optparse from os import path +from six import binary_type +from fnmatch import fnmatch -from sphinx.util.osutil import walk +from sphinx.util.osutil import FileAvoidWrite, walk from sphinx import __display_version__ +if False: + # For type annotation + from typing import Any, Tuple # NOQA + # automodule options if 'SPHINX_APIDOC_OPTIONS' in os.environ: OPTIONS = os.environ['SPHINX_APIDOC_OPTIONS'].split(',') @@ -40,6 +46,7 @@ def makename(package, module): + # type: (unicode, unicode) -> unicode """Join package and module with a dot.""" # Both package and module can be None/empty. if package: @@ -52,6 +59,7 @@ def makename(package, module): def write_file(name, text, opts): + # type: (unicode, unicode, Any) -> None """Write the output file for module/package <name>.""" fname = path.join(opts.destdir, '%s.%s' % (name, opts.suffix)) if opts.dryrun: @@ -61,20 +69,19 @@ def write_file(name, text, opts): print('File %s already exists, skipping.' % fname) else: print('Creating file %s.' % fname) - f = open(fname, 'w') - try: + with FileAvoidWrite(fname) as f: f.write(text) - finally: - f.close() def format_heading(level, text): + # type: (int, unicode) -> unicode """Create a heading of <level> [1, 2 or 3 supported].""" underlining = ['=', '-', '~', ][level - 1] * len(text) return '%s\n%s\n\n' % (text, underlining) def format_directive(module, package=None): + # type: (unicode, unicode) -> unicode """Create the automodule directive and add the options.""" directive = '.. automodule:: %s\n' % makename(package, module) for option in OPTIONS: @@ -83,6 +90,7 @@ def format_directive(module, package=None): def create_module_file(package, module, opts): + # type: (unicode, unicode, Any) -> None """Build the text of the file and write the file.""" if not opts.noheadings: text = format_heading(1, '%s module' % module) @@ -93,11 +101,13 @@ def create_module_file(package, module, opts): write_file(makename(package, module), text, opts) -def create_package_file(root, master_package, subroot, py_files, opts, subs): +def create_package_file(root, master_package, subroot, py_files, opts, subs, is_namespace): + # type: (unicode, unicode, unicode, List[unicode], Any, List[unicode], bool) -> None """Build the text of the file and write the file.""" - text = format_heading(1, '%s package' % makename(master_package, subroot)) + text = format_heading(1, ('%s package' if not is_namespace else "%s namespace") + % makename(master_package, subroot)) - if opts.modulefirst: + if opts.modulefirst and not is_namespace: text += format_directive(subroot, master_package) text += '\n' @@ -140,7 +150,7 @@ def create_package_file(root, master_package, subroot, py_files, opts, subs): text += '\n' text += '\n' - if not opts.modulefirst: + if not opts.modulefirst and not is_namespace: text += format_heading(2, 'Module contents') text += format_directive(subroot, master_package) @@ -148,13 +158,14 @@ def create_package_file(root, master_package, subroot, py_files, opts, subs): def create_modules_toc_file(modules, opts, name='modules'): + # type: (List[unicode], Any, unicode) -> None """Create the module's index.""" text = format_heading(1, '%s' % opts.header) text += '.. toctree::\n' text += ' :maxdepth: %s\n\n' % opts.maxdepth modules.sort() - prev_module = '' + prev_module = '' # type: unicode for module in modules: # look if the module is a subpackage and, if yes, ignore it if module.startswith(prev_module + '.'): @@ -166,10 +177,16 @@ def create_modules_toc_file(modules, opts, name='modules'): def shall_skip(module, opts): + # type: (unicode, Any) -> bool """Check if we want to skip this module.""" + # skip if the file doesn't exist and not using implicit namespaces + if not opts.implicit_namespaces and not path.exists(module): + return True + # skip it if there is nothing (or just \n or \r\n) in the file - if path.getsize(module) <= 2: + if path.exists(module) and path.getsize(module) <= 2: return True + # skip if it has a "private" name and this is selected filename = path.basename(module) if filename != '__init__.py' and filename.startswith('_') and \ @@ -179,6 +196,7 @@ def shall_skip(module, opts): def recurse_tree(rootpath, excludes, opts): + # type: (unicode, List[unicode], Any) -> List[unicode] """ Look for every file in the directory tree and create the corresponding ReST files. @@ -193,37 +211,42 @@ def recurse_tree(rootpath, excludes, opts): toplevels = [] followlinks = getattr(opts, 'followlinks', False) includeprivate = getattr(opts, 'includeprivate', False) + implicit_namespaces = getattr(opts, 'implicit_namespaces', False) for root, subs, files in walk(rootpath, followlinks=followlinks): # document only Python module files (that aren't excluded) py_files = sorted(f for f in files if path.splitext(f)[1] in PY_SUFFIXES and not is_excluded(path.join(root, f), excludes)) is_pkg = INITPY in py_files + is_namespace = INITPY not in py_files and implicit_namespaces if is_pkg: py_files.remove(INITPY) py_files.insert(0, INITPY) elif root != rootpath: - # only accept non-package at toplevel - del subs[:] - continue + # only accept non-package at toplevel unless using implicit namespaces + if not implicit_namespaces: + del subs[:] + continue # remove hidden ('.') and private ('_') directories, as well as # excluded dirs if includeprivate: - exclude_prefixes = ('.',) + exclude_prefixes = ('.',) # type: Tuple[unicode, ...] else: exclude_prefixes = ('.', '_') subs[:] = sorted(sub for sub in subs if not sub.startswith(exclude_prefixes) and not is_excluded(path.join(root, sub), excludes)) - if is_pkg: + if is_pkg or is_namespace: # we are in a package with something to document - if subs or len(py_files) > 1 or not \ - shall_skip(path.join(root, INITPY), opts): + if subs or len(py_files) > 1 or not shall_skip(path.join(root, INITPY), opts): subpackage = root[len(rootpath):].lstrip(path.sep).\ replace(path.sep, '.') - create_package_file(root, root_package, subpackage, - py_files, opts, subs) - toplevels.append(makename(root_package, subpackage)) + # if this is not a namespace or + # a namespace and there is something there to document + if not is_namespace or len(py_files) > 0: + create_package_file(root, root_package, subpackage, + py_files, opts, subs, is_namespace) + toplevels.append(makename(root_package, subpackage)) else: # if we are at the root level, we don't require it to be a package assert root == rootpath and root_package is None @@ -237,33 +260,36 @@ def recurse_tree(rootpath, excludes, opts): def normalize_excludes(rootpath, excludes): + # type: (unicode, List[unicode]) -> List[unicode] """Normalize the excluded directory list.""" return [path.abspath(exclude) for exclude in excludes] def is_excluded(root, excludes): + # type: (unicode, List[unicode]) -> bool """Check if the directory is in the exclude list. Note: by having trailing slashes, we avoid common prefix issues, like e.g. an exlude "foo" also accidentally excluding "foobar". """ for exclude in excludes: - if root == exclude: + if fnmatch(root, exclude): # type: ignore return True return False def main(argv=sys.argv): + # type: (List[str]) -> int """Parse and check the command line arguments.""" parser = optparse.OptionParser( usage="""\ -usage: %prog [options] -o <output_path> <module_path> [exclude_path, ...] +usage: %prog [options] -o <output_path> <module_path> [exclude_pattern, ...] Look recursively in <module_path> for Python modules and packages and create one reST file with automodule directives per package in the <output_path>. -The <exclude_path>s can be files and/or directories that will be excluded -from generation. +The <exclude_pattern>s can be file and/or directory patterns that will be +excluded from generation. Note: By default this script will not overwrite already created files.""") @@ -297,10 +323,17 @@ def main(argv=sys.argv): dest='modulefirst', help='Put module documentation before submodule ' 'documentation') + parser.add_option('--implicit-namespaces', action='store_true', + dest='implicit_namespaces', + help='Interpret module paths according to PEP-0420 ' + 'implicit namespaces specification') parser.add_option('-s', '--suffix', action='store', dest='suffix', help='file suffix (default: rst)', default='rst') parser.add_option('-F', '--full', action='store_true', dest='full', help='Generate a full project with sphinx-quickstart') + parser.add_option('-a', '--append-syspath', action='store_true', + dest='append_syspath', + help='Append module_path to sys.path, used when --full is given') parser.add_option('-H', '--doc-project', action='store', dest='header', help='Project name (default: root module name)') parser.add_option('-A', '--doc-author', action='store', dest='author', @@ -342,7 +375,7 @@ def main(argv=sys.argv): if opts.full: from sphinx import quickstart as qs modules.sort() - prev_module = '' + prev_module = '' # type: unicode text = '' for module in modules: if module.startswith(prev_module + '.'): @@ -368,12 +401,24 @@ def main(argv=sys.argv): mastertocmaxdepth = opts.maxdepth, mastertoctree = text, language = 'en', + module_path = rootpath, + append_syspath = opts.append_syspath, ) + if isinstance(opts.header, binary_type): + d['project'] = d['project'].decode('utf-8') + if isinstance(opts.author, binary_type): + d['author'] = d['author'].decode('utf-8') + if isinstance(opts.version, binary_type): + d['version'] = d['version'].decode('utf-8') + if isinstance(opts.release, binary_type): + d['release'] = d['release'].decode('utf-8') + if not opts.dryrun: qs.generate(d, silent=True, overwrite=opts.force) elif not opts.notoc: create_modules_toc_file(modules, opts) + # So program can be started with "python -m sphinx.apidoc ..." if __name__ == "__main__": main() diff --git a/sphinx/application.py b/sphinx/application.py index db456e3f7de..ca3c40be780 100644 --- a/sphinx/application.py +++ b/sphinx/application.py @@ -7,7 +7,7 @@ Gracefully adapted from the TextPress system by Armin. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import print_function @@ -22,29 +22,38 @@ from six import iteritems, itervalues, text_type from six.moves import cStringIO + from docutils import nodes from docutils.parsers.rst import convert_directive_function, \ directives, roles import sphinx from sphinx import package_dir, locale -from sphinx.roles import XRefRole from sphinx.config import Config from sphinx.errors import SphinxError, SphinxWarning, ExtensionError, \ VersionRequirementError, ConfigError -from sphinx.domains import ObjType, BUILTIN_DOMAINS +from sphinx.domains import ObjType from sphinx.domains.std import GenericObject, Target, StandardDomain -from sphinx.builders import BUILTIN_BUILDERS -from sphinx.environment import BuildEnvironment, SphinxStandaloneReader -from sphinx.util import pycompat # noqa: imported for side-effects +from sphinx.environment import BuildEnvironment +from sphinx.io import SphinxStandaloneReader +from sphinx.roles import XRefRole +from sphinx.util import pycompat # noqa: F401 from sphinx.util import import_object from sphinx.util.tags import Tags from sphinx.util.osutil import ENOENT -from sphinx.util.console import bold, lightgray, darkgray, darkgreen, \ - term_width_line - -if hasattr(sys, 'intern'): - intern = sys.intern +from sphinx.util.logging import is_suppressed_warning +from sphinx.util.console import ( # type: ignore + bold, lightgray, darkgray, darkred, darkgreen, term_width_line +) +from sphinx.util.i18n import find_catalog_source_files + +if False: + # For type annotation + from typing import Any, Callable, IO, Iterable, Iterator, Tuple, Type, Union # NOQA + from docutils.parsers import Parser # NOQA + from docutils.transform import Transform # NOQA + from sphinx.builders import Builder # NOQA + from sphinx.domains import Domain # NOQA # List of all known core events. Maps name to arguments description. events = { @@ -61,11 +70,45 @@ 'html-collect-pages': 'builder', 'html-page-context': 'pagename, context, doctree or None', 'build-finished': 'exception', -} +} # type: Dict[unicode, unicode] +builtin_extensions = ( + 'sphinx.builders.applehelp', + 'sphinx.builders.changes', + 'sphinx.builders.epub', + 'sphinx.builders.epub3', + 'sphinx.builders.devhelp', + 'sphinx.builders.dummy', + 'sphinx.builders.gettext', + 'sphinx.builders.html', + 'sphinx.builders.htmlhelp', + 'sphinx.builders.latex', + 'sphinx.builders.linkcheck', + 'sphinx.builders.manpage', + 'sphinx.builders.qthelp', + 'sphinx.builders.texinfo', + 'sphinx.builders.text', + 'sphinx.builders.websupport', + 'sphinx.builders.xml', + 'sphinx.domains.c', + 'sphinx.domains.cpp', + 'sphinx.domains.javascript', + 'sphinx.domains.python', + 'sphinx.domains.rst', + 'sphinx.domains.std', + 'sphinx.directives', + 'sphinx.directives.code', + 'sphinx.directives.other', + 'sphinx.directives.patches', + 'sphinx.roles', +) # type: Tuple[unicode, ...] CONFIG_FILENAME = 'conf.py' ENV_PICKLE_FILENAME = 'environment.pickle' +# list of deprecated extensions. Keys are extension name. +# Values are Sphinx version that merge the extension. +EXTENSION_BLACKLIST = {"sphinxjp.themecore": "1.2"} # type: Dict[unicode, unicode] + class Sphinx(object): @@ -73,17 +116,20 @@ def __init__(self, srcdir, confdir, outdir, doctreedir, buildername, confoverrides=None, status=sys.stdout, warning=sys.stderr, freshenv=False, warningiserror=False, tags=None, verbosity=0, parallel=0): + # type: (unicode, unicode, unicode, unicode, unicode, Dict, IO, IO, bool, bool, unicode, int, int) -> None # NOQA self.verbosity = verbosity self.next_listener_id = 0 - self._extensions = {} - self._extension_metadata = {} - self._listeners = {} - self._setting_up_extension = ['?'] - self.domains = BUILTIN_DOMAINS.copy() + self._extensions = {} # type: Dict[unicode, Any] + self._extension_metadata = {} # type: Dict[unicode, Dict[unicode, Any]] + self._additional_source_parsers = {} # type: Dict[unicode, Parser] + self._listeners = {} # type: Dict[unicode, Dict[int, Callable]] + self._setting_up_extension = ['?'] # type: List[unicode] + self.domains = {} # type: Dict[unicode, Type[Domain]] self.buildername = buildername - self.builderclasses = BUILTIN_BUILDERS.copy() - self.builder = None - self.env = None + self.builderclasses = {} # type: Dict[unicode, Type[Builder]] + self.builder = None # type: Builder + self.env = None # type: BuildEnvironment + self.enumerable_nodes = {} # type: Dict[nodes.Node, Tuple[unicode, Callable]] # NOQA self.srcdir = srcdir self.confdir = confdir @@ -93,24 +139,24 @@ def __init__(self, srcdir, confdir, outdir, doctreedir, buildername, self.parallel = parallel if status is None: - self._status = cStringIO() + self._status = cStringIO() # type: IO self.quiet = True else: self._status = status self.quiet = False if warning is None: - self._warning = cStringIO() + self._warning = cStringIO() # type: IO else: self._warning = warning self._warncount = 0 self.warningiserror = warningiserror self._events = events.copy() - self._translators = {} + self._translators = {} # type: Dict[unicode, nodes.GenericNodeVisitor] # keep last few messages for traceback - self.messagelog = deque(maxlen=10) + self.messagelog = deque(maxlen=10) # type: deque # say hello to the world self.info(bold('Running Sphinx v%s' % sphinx.__display_version__)) @@ -129,11 +175,30 @@ def __init__(self, srcdir, confdir, outdir, doctreedir, buildername, self.config.check_unicode(self.warn) # defer checking types until i18n has been initialized + # initialize some limited config variables before loading extensions + self.config.pre_init_values(self.warn) + + # check the Sphinx version if requested + if self.config.needs_sphinx and self.config.needs_sphinx > sphinx.__display_version__: + raise VersionRequirementError( + 'This project needs at least Sphinx v%s and therefore cannot ' + 'be built with this version.' % self.config.needs_sphinx) + + # force preload html_translator_class + if self.config.html_translator_class: + translator_class = self.import_object(self.config.html_translator_class, + 'html_translator_class setting') + self.set_translator('html', translator_class) + # set confdir to srcdir if -C given (!= no confdir); a few pieces # of code expect a confdir to be set if self.confdir is None: self.confdir = self.srcdir + # load all built-in extension modules + for extension in builtin_extensions: + self.setup_extension(extension) + # extension loading support for alabaster theme # self.config.html_theme is not set from conf.py at here # for now, sphinx always load a 'alabaster' extension. @@ -159,13 +224,6 @@ def __init__(self, srcdir, confdir, outdir, doctreedir, buildername, # now that we know all config values, collect them from conf.py self.config.init_values(self.warn) - # check the Sphinx version if requested - if self.config.needs_sphinx and \ - self.config.needs_sphinx > sphinx.__display_version__[:3]: - raise VersionRequirementError( - 'This project needs at least Sphinx v%s and therefore cannot ' - 'be built with this version.' % self.config.needs_sphinx) - # check extension versions if requested if self.config.needs_extensions: for extname, needs_ver in self.config.needs_extensions.items(): @@ -181,29 +239,42 @@ def __init__(self, srcdir, confdir, outdir, doctreedir, buildername, 'version %s and therefore cannot be built with the ' 'loaded version (%s).' % (extname, needs_ver, has_ver)) + # check primary_domain if requested + if self.config.primary_domain and self.config.primary_domain not in self.domains: + self.warn('primary_domain %r not found, ignored.' % self.config.primary_domain) + # set up translation infrastructure self._init_i18n() # check all configuration values for permissible types self.config.check_types(self.warn) + # set up source_parsers + self._init_source_parsers() # set up the build environment self._init_env(freshenv) # set up the builder self._init_builder(self.buildername) + # set up the enumerable nodes + self._init_enumerable_nodes() def _init_i18n(self): + # type: () -> None """Load translated strings from the configured localedirs if enabled in the configuration. """ if self.config.language is not None: self.info(bold('loading translations [%s]... ' % self.config.language), nonl=True) - locale_dirs = [None, path.join(package_dir, 'locale')] + \ - [path.join(self.srcdir, x) for x in self.config.locale_dirs] + user_locale_dirs = [ + path.join(self.srcdir, x) for x in self.config.locale_dirs] + # compile mo files if sphinx.po file in user locale directories are updated + for catinfo in find_catalog_source_files( + user_locale_dirs, self.config.language, domains=['sphinx'], + charset=self.config.source_encoding): + catinfo.write_mo(self.config.language) + locale_dirs = [None, path.join(package_dir, 'locale')] + user_locale_dirs else: locale_dirs = [] - self.translator, has_translation = locale.init(locale_dirs, - self.config.language, - charset=self.config.source_encoding) + self.translator, has_translation = locale.init(locale_dirs, self.config.language) if self.config.language is not None: if has_translation or self.config.language == 'en': # "en" never needs to be translated @@ -211,10 +282,19 @@ def _init_i18n(self): else: self.info('not available for built-in messages') + def _init_source_parsers(self): + # type: () -> None + for suffix, parser in iteritems(self._additional_source_parsers): + if suffix not in self.config.source_suffix: + self.config.source_suffix.append(suffix) + if suffix not in self.config.source_parsers: + self.config.source_parsers[suffix] = parser + def _init_env(self, freshenv): + # type: (bool) -> None if freshenv: - self.env = BuildEnvironment(self.srcdir, self.doctreedir, - self.config) + self.env = BuildEnvironment(self.srcdir, self.doctreedir, self.config) + self.env.set_warnfunc(self.warn) self.env.find_files(self.config) for domain in self.domains.keys(): self.env.domains[domain] = self.domains[domain](self.env) @@ -222,7 +302,9 @@ def _init_env(self, freshenv): try: self.info(bold('loading pickled environment... '), nonl=True) self.env = BuildEnvironment.frompickle( - self.config, path.join(self.doctreedir, ENV_PICKLE_FILENAME)) + self.srcdir, self.config, path.join(self.doctreedir, ENV_PICKLE_FILENAME)) + self.env.set_warnfunc(self.warn) + self.env.init_managers() self.env.domains = {} for domain in self.domains.keys(): # this can raise if the data version doesn't fit @@ -233,11 +315,10 @@ def _init_env(self, freshenv): self.info('not yet created') else: self.info('failed: %s' % err) - return self._init_env(freshenv=True) - - self.env.set_warnfunc(self.warn) + self._init_env(freshenv=True) def _init_builder(self, buildername): + # type: (unicode) -> None if buildername is None: print('No builder selected, using default: html', file=self._status) buildername = 'html' @@ -245,17 +326,18 @@ def _init_builder(self, buildername): raise SphinxError('Builder name %s not registered' % buildername) builderclass = self.builderclasses[buildername] - if isinstance(builderclass, tuple): - # builtin builder - mod, cls = builderclass - builderclass = getattr( - __import__('sphinx.builders.' + mod, None, None, [cls]), cls) self.builder = builderclass(self) self.emit('builder-inited') + def _init_enumerable_nodes(self): + # type: () -> None + for node, settings in iteritems(self.enumerable_nodes): + self.env.get_domain('std').enumerable_nodes[node] = settings # type: ignore + # ---- main "build" method ------------------------------------------------- def build(self, force_all=False, filenames=None): + # type: (bool, List[unicode]) -> None try: if force_all: self.builder.compile_all_catalogs() @@ -289,18 +371,23 @@ def build(self, force_all=False, filenames=None): # ---- logging handling ---------------------------------------------------- def _log(self, message, wfile, nonl=False): + # type: (unicode, IO, bool) -> None try: wfile.write(message) except UnicodeEncodeError: encoding = getattr(wfile, 'encoding', 'ascii') or 'ascii' - wfile.write(message.encode(encoding, 'replace')) + # wfile.write accept only str, not bytes.So, we encode and replace + # non-encodable characters, then decode them. + wfile.write(message.encode(encoding, 'replace').decode(encoding)) if not nonl: wfile.write('\n') if hasattr(wfile, 'flush'): wfile.flush() self.messagelog.append(message) - def warn(self, message, location=None, prefix='WARNING: '): + def warn(self, message, location=None, prefix='WARNING: ', + type=None, subtype=None, colorfunc=darkred): + # type: (unicode, unicode, unicode, unicode, unicode, Callable) -> None """Emit a warning. If *location* is given, it should either be a tuple of (docname, lineno) @@ -308,12 +395,17 @@ def warn(self, message, location=None, prefix='WARNING: '): *prefix* usually should not be changed. + *type* and *subtype* are used to suppress warnings with :confval:`suppress_warnings`. + .. note:: For warnings emitted during parsing, you should use :meth:`.BuildEnvironment.warn` since that will collect all warnings during parsing for later output. """ + if is_suppressed_warning(type, subtype, self.config.suppress_warnings): + return + if isinstance(location, tuple): docname, lineno = location if docname: @@ -325,9 +417,10 @@ def warn(self, message, location=None, prefix='WARNING: '): if self.warningiserror: raise SphinxWarning(warntext) self._warncount += 1 - self._log(warntext, self._warning, True) + self._log(colorfunc(warntext), self._warning, True) def info(self, message='', nonl=False): + # type: (unicode, bool) -> None """Emit an informational message. If *nonl* is true, don't emit a newline at the end (which implies that @@ -336,6 +429,7 @@ def info(self, message='', nonl=False): self._log(message, self._status, nonl) def verbose(self, message, *args, **kwargs): + # type: (unicode, Any, Any) -> None """Emit a verbose informational message. The message will only be emitted for verbosity levels >= 1 (i.e. at @@ -351,6 +445,7 @@ def verbose(self, message, *args, **kwargs): self._log(message, self._status) def debug(self, message, *args, **kwargs): + # type: (unicode, Any, Any) -> None """Emit a debug-level informational message. The message will only be emitted for verbosity levels >= 2 (i.e. at @@ -366,6 +461,7 @@ def debug(self, message, *args, **kwargs): self._log(darkgray(message), self._status) def debug2(self, message, *args, **kwargs): + # type: (unicode, Any, Any) -> None """Emit a lowlevel debug-level informational message. The message will only be emitted for verbosity level 3 (i.e. three @@ -381,6 +477,7 @@ def debug2(self, message, *args, **kwargs): self._log(lightgray(message), self._status) def _display_chunk(chunk): + # type: (Any) -> unicode if isinstance(chunk, (list, tuple)): if len(chunk) == 1: return text_type(chunk[0]) @@ -389,12 +486,13 @@ def _display_chunk(chunk): def old_status_iterator(self, iterable, summary, colorfunc=darkgreen, stringify_func=_display_chunk): + # type: (Iterable, unicode, Callable, Callable) -> Iterator l = 0 for item in iterable: if l == 0: - self.info(bold(summary), nonl=1) + self.info(bold(summary), nonl=True) l = 1 - self.info(colorfunc(stringify_func(item)) + ' ', nonl=1) + self.info(colorfunc(stringify_func(item)) + ' ', nonl=True) yield item if l == 1: self.info() @@ -402,6 +500,7 @@ def old_status_iterator(self, iterable, summary, colorfunc=darkgreen, # new version with progress info def status_iterator(self, iterable, summary, colorfunc=darkgreen, length=0, stringify_func=_display_chunk): + # type: (Iterable, unicode, Callable, int, Callable) -> Iterable if length == 0: for item in self.old_status_iterator(iterable, summary, colorfunc, stringify_func): @@ -417,7 +516,7 @@ def status_iterator(self, iterable, summary, colorfunc=darkgreen, length=0, s += '\n' else: s = term_width_line(s) - self.info(s, nonl=1) + self.info(s, nonl=True) yield item if l > 0: self.info() @@ -425,10 +524,16 @@ def status_iterator(self, iterable, summary, colorfunc=darkgreen, length=0, # ---- general extensibility interface ------------------------------------- def setup_extension(self, extension): + # type: (unicode) -> None """Import and setup a Sphinx extension module. No-op if called twice.""" self.debug('[app] setting up extension: %r', extension) if extension in self._extensions: return + if extension in EXTENSION_BLACKLIST: + self.warn('the extension %r was already merged with Sphinx since version %s; ' + 'this extension is ignored.' % ( + extension, EXTENSION_BLACKLIST[extension])) + return self._setting_up_extension.append(extension) try: mod = __import__(extension, None, None, ['setup']) @@ -467,22 +572,25 @@ def setup_extension(self, extension): self._setting_up_extension.pop() def require_sphinx(self, version): + # type: (unicode) -> None # check the Sphinx version if requested if version > sphinx.__display_version__[:3]: raise VersionRequirementError(version) def import_object(self, objname, source=None): + # type: (str, unicode) -> Any """Import an object from a 'module.name' string.""" return import_object(objname, source=None) # event interface def _validate_event(self, event): - event = intern(event) + # type: (unicode) -> None if event not in self._events: raise ExtensionError('Unknown event name: %s' % event) def connect(self, event, callback): + # type: (unicode, Callable) -> int self._validate_event(event) listener_id = self.next_listener_id if event not in self._listeners: @@ -495,11 +603,13 @@ def connect(self, event, callback): return listener_id def disconnect(self, listener_id): + # type: (int) -> None self.debug('[app] disconnecting event: [id=%s]', listener_id) for event in itervalues(self._listeners): event.pop(listener_id, None) def emit(self, event, *args): + # type: (unicode, Any) -> List try: self.debug2('[app] emitting event: %r%s', event, repr(args)[:100]) except Exception: @@ -513,6 +623,7 @@ def emit(self, event, *args): return results def emit_firstresult(self, event, *args): + # type: (unicode, Any) -> Any for result in self.emit(event, *args): if result is not None: return result @@ -521,45 +632,48 @@ def emit_firstresult(self, event, *args): # registering addon parts def add_builder(self, builder): + # type: (Type[Builder]) -> None self.debug('[app] adding builder: %r', builder) if not hasattr(builder, 'name'): raise ExtensionError('Builder class %s has no "name" attribute' % builder) if builder.name in self.builderclasses: - if isinstance(self.builderclasses[builder.name], tuple): - raise ExtensionError('Builder %r is a builtin builder' % - builder.name) - else: - raise ExtensionError( - 'Builder %r already exists (in module %s)' % ( - builder.name, self.builderclasses[builder.name].__module__)) + raise ExtensionError( + 'Builder %r already exists (in module %s)' % ( + builder.name, self.builderclasses[builder.name].__module__)) self.builderclasses[builder.name] = builder - def add_config_value(self, name, default, rebuild): - self.debug('[app] adding config value: %r', (name, default, rebuild)) + def add_config_value(self, name, default, rebuild, types=()): + # type: (unicode, Any, Union[bool, unicode], Any) -> None + self.debug('[app] adding config value: %r', + (name, default, rebuild) + ((types,) if types else ())) # type: ignore if name in self.config.values: raise ExtensionError('Config value %r already present' % name) if rebuild in (False, True): rebuild = rebuild and 'env' or '' - self.config.values[name] = (default, rebuild) + self.config.values[name] = (default, rebuild, types) def add_event(self, name): + # type: (unicode) -> None self.debug('[app] adding event: %r', name) if name in self._events: raise ExtensionError('Event %r already present' % name) self._events[name] = '' def set_translator(self, name, translator_class): + # type: (unicode, Any) -> None self.info(bold('A Translator for the %s builder is changed.' % name)) self._translators[name] = translator_class def add_node(self, node, **kwds): + # type: (nodes.Node, Any) -> None self.debug('[app] adding node: %r', (node, kwds)) if not kwds.pop('override', False) and \ hasattr(nodes.GenericNodeVisitor, 'visit_' + node.__name__): self.warn('while setting up extension %s: node class %r is ' 'already registered, its visitors will be overridden' % - (self._setting_up_extension, node.__name__)) + (self._setting_up_extension, node.__name__), + type='app', subtype='add_node') nodes._add_node_class_names([node.__name__]) for key, val in iteritems(kwds): try: @@ -571,17 +685,15 @@ def add_node(self, node, **kwds): if translator is not None: pass elif key == 'html': - from sphinx.writers.html import HTMLTranslator as translator + from sphinx.writers.html import HTMLTranslator as translator # type: ignore elif key == 'latex': - from sphinx.writers.latex import LaTeXTranslator as translator + from sphinx.writers.latex import LaTeXTranslator as translator # type: ignore elif key == 'text': - from sphinx.writers.text import TextTranslator as translator + from sphinx.writers.text import TextTranslator as translator # type: ignore elif key == 'man': - from sphinx.writers.manpage import ManualPageTranslator \ - as translator + from sphinx.writers.manpage import ManualPageTranslator as translator # type: ignore # NOQA elif key == 'texinfo': - from sphinx.writers.texinfo import TexinfoTranslator \ - as translator + from sphinx.writers.texinfo import TexinfoTranslator as translator # type: ignore # NOQA else: # ignore invalid keys for compatibility continue @@ -589,11 +701,17 @@ def add_node(self, node, **kwds): if depart: setattr(translator, 'depart_'+node.__name__, depart) + def add_enumerable_node(self, node, figtype, title_getter=None, **kwds): + # type: (nodes.Node, unicode, Callable, Any) -> None + self.enumerable_nodes[node] = (figtype, title_getter) + self.add_node(node, **kwds) + def _directive_helper(self, obj, content=None, arguments=None, **options): + # type: (Any, unicode, Any, Any) -> Any if isinstance(obj, (types.FunctionType, types.MethodType)): - obj.content = content - obj.arguments = arguments or (0, 0, False) - obj.options = options + obj.content = content # type: ignore + obj.arguments = arguments or (0, 0, False) # type: ignore + obj.options = options # type: ignore return convert_directive_function(obj) else: if content or arguments or options: @@ -602,41 +720,49 @@ def _directive_helper(self, obj, content=None, arguments=None, **options): return obj def add_directive(self, name, obj, content=None, arguments=None, **options): + # type: (unicode, Any, unicode, Any, Any) -> None self.debug('[app] adding directive: %r', (name, obj, content, arguments, options)) if name in directives._directives: self.warn('while setting up extension %s: directive %r is ' 'already registered, it will be overridden' % - (self._setting_up_extension[-1], name)) + (self._setting_up_extension[-1], name), + type='app', subtype='add_directive') directives.register_directive( name, self._directive_helper(obj, content, arguments, **options)) def add_role(self, name, role): + # type: (unicode, Any) -> None self.debug('[app] adding role: %r', (name, role)) if name in roles._roles: self.warn('while setting up extension %s: role %r is ' 'already registered, it will be overridden' % - (self._setting_up_extension[-1], name)) + (self._setting_up_extension[-1], name), + type='app', subtype='add_role') roles.register_local_role(name, role) def add_generic_role(self, name, nodeclass): + # type: (unicode, Any) -> None # don't use roles.register_generic_role because it uses # register_canonical_role self.debug('[app] adding generic role: %r', (name, nodeclass)) if name in roles._roles: self.warn('while setting up extension %s: role %r is ' 'already registered, it will be overridden' % - (self._setting_up_extension[-1], name)) + (self._setting_up_extension[-1], name), + type='app', subtype='add_generic_role') role = roles.GenericRole(name, nodeclass) roles.register_local_role(name, role) def add_domain(self, domain): + # type: (Type[Domain]) -> None self.debug('[app] adding domain: %r', domain) if domain.name in self.domains: raise ExtensionError('domain %s already registered' % domain.name) self.domains[domain.name] = domain def override_domain(self, domain): + # type: (Type[Domain]) -> None self.debug('[app] overriding domain: %r', domain) if domain.name not in self.domains: raise ExtensionError('domain %s not yet registered' % domain.name) @@ -647,6 +773,7 @@ def override_domain(self, domain): def add_directive_to_domain(self, domain, name, obj, content=None, arguments=None, **options): + # type: (unicode, unicode, Any, unicode, Any, Any) -> None self.debug('[app] adding directive to domain: %r', (domain, name, obj, content, arguments, options)) if domain not in self.domains: @@ -655,12 +782,14 @@ def add_directive_to_domain(self, domain, name, obj, self._directive_helper(obj, content, arguments, **options) def add_role_to_domain(self, domain, name, role): + # type: (unicode, unicode, Any) -> None self.debug('[app] adding role to domain: %r', (domain, name, role)) if domain not in self.domains: raise ExtensionError('domain %s not yet registered' % domain) self.domains[domain].roles[name] = role def add_index_to_domain(self, domain, index): + # type: (unicode, unicode) -> None self.debug('[app] adding index to domain: %r', (domain, index)) if domain not in self.domains: raise ExtensionError('domain %s not yet registered' % domain) @@ -669,15 +798,16 @@ def add_index_to_domain(self, domain, index): def add_object_type(self, directivename, rolename, indextemplate='', parse_node=None, ref_nodeclass=None, objname='', doc_field_types=[]): + # type: (unicode, unicode, unicode, Callable, nodes.Node, unicode, List) -> None self.debug('[app] adding object type: %r', (directivename, rolename, indextemplate, parse_node, ref_nodeclass, objname, doc_field_types)) StandardDomain.object_types[directivename] = \ ObjType(objname or directivename, rolename) # create a subclass of GenericObject as the new directive - new_directive = type(directivename, (GenericObject, object), + new_directive = type(directivename, (GenericObject, object), # type: ignore {'indextemplate': indextemplate, - 'parse_node': staticmethod(parse_node), + 'parse_node': staticmethod(parse_node), # type: ignore 'doc_field_types': doc_field_types}) StandardDomain.directives[directivename] = new_directive # XXX support more options? @@ -688,23 +818,26 @@ def add_object_type(self, directivename, rolename, indextemplate='', def add_crossref_type(self, directivename, rolename, indextemplate='', ref_nodeclass=None, objname=''): + # type: (unicode, unicode, unicode, nodes.Node, unicode) -> None self.debug('[app] adding crossref type: %r', (directivename, rolename, indextemplate, ref_nodeclass, objname)) StandardDomain.object_types[directivename] = \ ObjType(objname or directivename, rolename) # create a subclass of Target as the new directive - new_directive = type(directivename, (Target, object), + new_directive = type(directivename, (Target, object), # type: ignore {'indextemplate': indextemplate}) StandardDomain.directives[directivename] = new_directive # XXX support more options? StandardDomain.roles[rolename] = XRefRole(innernodeclass=ref_nodeclass) def add_transform(self, transform): + # type: (Transform) -> None self.debug('[app] adding transform: %r', transform) SphinxStandaloneReader.transforms.append(transform) def add_javascript(self, filename): + # type: (unicode) -> None self.debug('[app] adding javascript: %r', filename) from sphinx.builders.html import StandaloneHTMLBuilder if '://' in filename: @@ -714,6 +847,7 @@ def add_javascript(self, filename): posixpath.join('_static', filename)) def add_stylesheet(self, filename): + # type: (unicode) -> None self.debug('[app] adding stylesheet: %r', filename) from sphinx.builders.html import StandaloneHTMLBuilder if '://' in filename: @@ -723,11 +857,12 @@ def add_stylesheet(self, filename): posixpath.join('_static', filename)) def add_latex_package(self, packagename, options=None): + # type: (unicode, unicode) -> None self.debug('[app] adding latex package: %r', packagename) - from sphinx.builders.latex import LaTeXBuilder - LaTeXBuilder.usepackages.append((packagename, options)) + self.builder.usepackages.append((packagename, options)) def add_lexer(self, alias, lexer): + # type: (unicode, Any) -> None self.debug('[app] adding lexer: %r', (alias, lexer)) from sphinx.highlighting import lexers if lexers is None: @@ -735,22 +870,35 @@ def add_lexer(self, alias, lexer): lexers[alias] = lexer def add_autodocumenter(self, cls): + # type: (Any) -> None self.debug('[app] adding autodocumenter: %r', cls) from sphinx.ext import autodoc autodoc.add_documenter(cls) self.add_directive('auto' + cls.objtype, autodoc.AutoDirective) def add_autodoc_attrgetter(self, type, getter): + # type: (Any, Callable) -> None self.debug('[app] adding autodoc attrgetter: %r', (type, getter)) from sphinx.ext import autodoc autodoc.AutoDirective._special_attrgetters[type] = getter def add_search_language(self, cls): + # type: (Any) -> None self.debug('[app] adding search language: %r', cls) from sphinx.search import languages, SearchLanguage assert issubclass(cls, SearchLanguage) languages[cls.lang] = cls + def add_source_parser(self, suffix, parser): + # type: (unicode, Parser) -> None + self.debug('[app] adding search source_parser: %r, %r', suffix, parser) + if suffix in self._additional_source_parsers: + self.warn('while setting up extension %s: source_parser for %r is ' + 'already registered, it will be overridden' % + (self._setting_up_extension[-1], suffix), + type='app', subtype='add_source_parser') + self._additional_source_parsers[suffix] = parser + class TemplateBridge(object): """ @@ -759,6 +907,7 @@ class TemplateBridge(object): """ def init(self, builder, theme=None, dirs=None): + # type: (Builder, unicode, List[unicode]) -> None """Called by the builder to initialize the template system. *builder* is the builder object; you'll probably want to look at the @@ -770,6 +919,7 @@ def init(self, builder, theme=None, dirs=None): raise NotImplementedError('must be implemented in subclasses') def newest_template_mtime(self): + # type: () -> float """Called by the builder to determine if output files are outdated because of template changes. Return the mtime of the newest template file that was changed. The default implementation returns ``0``. @@ -777,12 +927,14 @@ def newest_template_mtime(self): return 0 def render(self, template, context): + # type: (unicode, Dict) -> None """Called by the builder to render a template given as a filename with a specified context (a Python dictionary). """ raise NotImplementedError('must be implemented in subclasses') def render_string(self, template, context): + # type: (unicode, Dict) -> unicode """Called by the builder to render a template given as a string with a specified context (a Python dictionary). """ diff --git a/sphinx/builders/__init__.py b/sphinx/builders/__init__.py index eebd6af64da..78ce7d89ec1 100644 --- a/sphinx/builders/__init__.py +++ b/sphinx/builders/__init__.py @@ -5,7 +5,7 @@ Builder superclass for all builders. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -14,16 +14,15 @@ try: import multiprocessing - import threading except ImportError: - multiprocessing = threading = None + multiprocessing = None from docutils import nodes from sphinx.util import i18n, path_stabilize from sphinx.util.osutil import SEP, relative_uri from sphinx.util.i18n import find_catalog -from sphinx.util.console import bold, darkgreen +from sphinx.util.console import bold, darkgreen # type: ignore from sphinx.util.parallel import ParallelTasks, SerialTasks, make_chunks, \ parallel_available @@ -31,6 +30,15 @@ from sphinx import roles # noqa from sphinx import directives # noqa +if False: + # For type annotation + from typing import Any, Callable, Iterable, Sequence, Tuple, Union # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.config import Config # NOQA + from sphinx.environment import BuildEnvironment # NOQA + from sphinx.util.i18n import CatalogInfo # NOQA + from sphinx.util.tags import Tags # NOQA + class Builder(object): """ @@ -48,7 +56,8 @@ class Builder(object): allow_parallel = False def __init__(self, app): - self.env = app.env + # type: (Sphinx) -> None + self.env = app.env # type: BuildEnvironment self.env.set_versioning_method(self.versioning_method, self.versioning_compare) self.srcdir = app.srcdir @@ -58,11 +67,11 @@ def __init__(self, app): if not path.isdir(self.doctreedir): os.makedirs(self.doctreedir) - self.app = app - self.warn = app.warn - self.info = app.info - self.config = app.config - self.tags = app.tags + self.app = app # type: Sphinx + self.warn = app.warn # type: Callable + self.info = app.info # type: Callable + self.config = app.config # type: Config + self.tags = app.tags # type: Tags self.tags.add(self.format) self.tags.add(self.name) self.tags.add("format_%s" % self.format) @@ -72,7 +81,7 @@ def __init__(self, app): self.old_status_iterator = app.old_status_iterator # images that need to be copied over (source -> dest) - self.images = {} + self.images = {} # type: Dict[unicode, unicode] # basename of images directory self.imagedir = "" # relative path to image directory from current docname (used at writing docs) @@ -80,7 +89,7 @@ def __init__(self, app): # these get set later self.parallel_ok = False - self.finish_tasks = None + self.finish_tasks = None # type: Any # load default translator class self.translator_class = app._translators.get(self.name) @@ -89,12 +98,14 @@ def __init__(self, app): # helper methods def init(self): + # type: () -> None """Load necessary templates and perform initialization. The default implementation does nothing. """ pass def create_template_bridge(self): + # type: () -> None """Return the template bridge configured.""" if self.config.template_bridge: self.templates = self.app.import_object( @@ -104,6 +115,7 @@ def create_template_bridge(self): self.templates = BuiltinTemplateLoader() def get_target_uri(self, docname, typ=None): + # type: (unicode, unicode) -> unicode """Return the target URI for a document name. *typ* can be used to qualify the link characteristic for individual @@ -112,6 +124,7 @@ def get_target_uri(self, docname, typ=None): raise NotImplementedError def get_relative_uri(self, from_, to, typ=None): + # type: (unicode, unicode, unicode) -> unicode """Return a relative URI between two source filenames. May raise environment.NoUri if there's no way to return a sensible URI. @@ -120,6 +133,7 @@ def get_relative_uri(self, from_, to, typ=None): self.get_target_uri(to, typ)) def get_outdated_docs(self): + # type: () -> Union[unicode, Iterable[unicode]] """Return an iterable of output files that are outdated, or a string describing what an update build will build. @@ -129,9 +143,10 @@ def get_outdated_docs(self): """ raise NotImplementedError - supported_image_types = [] + supported_image_types = [] # type: List[unicode] def post_process_images(self, doctree): + # type: (nodes.Node) -> None """Pick the best candidate for all image URIs.""" for node in doctree.traverse(nodes.image): if '?' in node['candidates']: @@ -158,6 +173,7 @@ def post_process_images(self, doctree): # compile po methods def compile_catalogs(self, catalogs, message): + # type: (Set[CatalogInfo], unicode) -> None if not self.config.gettext_auto_build: return @@ -171,6 +187,7 @@ def cat2relpath(cat): catalog.write_mo(self.config.language) def compile_all_catalogs(self): + # type: () -> None catalogs = i18n.find_catalog_source_files( [path.join(self.srcdir, x) for x in self.config.locale_dirs], self.config.language, @@ -181,6 +198,7 @@ def compile_all_catalogs(self): self.compile_catalogs(catalogs, message) def compile_specific_catalogs(self, specified_files): + # type: (List[unicode]) -> None def to_domain(fpath): docname, _ = path.splitext(path_stabilize(fpath)) dom = find_catalog(docname, self.config.gettext_compact) @@ -197,6 +215,7 @@ def to_domain(fpath): self.compile_catalogs(catalogs, message) def compile_update_catalogs(self): + # type: () -> None catalogs = i18n.find_catalog_source_files( [path.join(self.srcdir, x) for x in self.config.locale_dirs], self.config.language, @@ -208,16 +227,19 @@ def compile_update_catalogs(self): # build methods def build_all(self): + # type: () -> None """Build all source files.""" self.build(None, summary='all source files', method='all') def build_specific(self, filenames): + # type: (List[unicode]) -> None """Only rebuild as much as needed for changes in the *filenames*.""" # bring the filenames to the canonical format, that is, # relative to the source directory and without source_suffix. dirlen = len(self.srcdir) + 1 to_write = [] - suffixes = tuple(self.config.source_suffix) + suffixes = None # type: Tuple[unicode] + suffixes = tuple(self.config.source_suffix) # type: ignore for filename in filenames: filename = path.normpath(path.abspath(filename)) if not filename.startswith(self.srcdir): @@ -241,6 +263,7 @@ def build_specific(self, filenames): 'line' % len(to_write)) def build_update(self): + # type: () -> None """Only rebuild what was changed or added since last build.""" to_build = self.get_outdated_docs() if isinstance(to_build, str): @@ -252,6 +275,7 @@ def build_update(self): 'out of date' % len(to_build)) def build(self, docnames, summary=None, method='update'): + # type: (Iterable[unicode], unicode, unicode) -> None """Main build method. First updates the environment, and then calls :meth:`write`. @@ -261,12 +285,12 @@ def build(self, docnames, summary=None, method='update'): # while reading, collect all warnings from docutils warnings = [] - self.env.set_warnfunc(lambda *args: warnings.append(args)) + self.env.set_warnfunc(lambda *args, **kwargs: warnings.append((args, kwargs))) updated_docnames = set(self.env.update(self.config, self.srcdir, self.doctreedir, self.app)) self.env.set_warnfunc(self.warn) - for warning in warnings: - self.warn(*warning) + for warning, kwargs in warnings: + self.warn(*warning, **kwargs) doccount = len(updated_docnames) self.info(bold('looking for now-outdated files... '), nonl=1) @@ -329,6 +353,7 @@ def build(self, docnames, summary=None, method='update'): self.finish_tasks.join() def write(self, build_docnames, updated_docnames, method='update'): + # type: (Iterable[unicode], Sequence[unicode], unicode) -> None if build_docnames is None or build_docnames == ['__all__']: # build_all build_docnames = self.env.found_docs @@ -350,8 +375,8 @@ def write(self, build_docnames, updated_docnames, method='update'): self.prepare_writing(docnames) self.info('done') - warnings = [] - self.env.set_warnfunc(lambda *args: warnings.append(args)) + warnings = [] # type: List[Tuple[Tuple, Dict]] + self.env.set_warnfunc(lambda *args, **kwargs: warnings.append((args, kwargs))) if self.parallel_ok: # number of subprocesses is parallel-1 because the main process # is busy loading doctrees and doing write_doc_serialized() @@ -362,18 +387,24 @@ def write(self, build_docnames, updated_docnames, method='update'): self.env.set_warnfunc(self.warn) def _write_serial(self, docnames, warnings): + # type: (Sequence[unicode], List[Tuple[Tuple, Dict]]) -> None for docname in self.app.status_iterator( docnames, 'writing output... ', darkgreen, len(docnames)): doctree = self.env.get_and_resolve_doctree(docname, self) self.write_doc_serialized(docname, doctree) self.write_doc(docname, doctree) - for warning in warnings: - self.warn(*warning) + for warning, kwargs in warnings: + self.warn(*warning, **kwargs) def _write_parallel(self, docnames, warnings, nproc): + # type: (Iterable[unicode], List[Tuple[Tuple, Dict]], int) -> None def write_process(docs): + # type: (List[Tuple[unicode, nodes.Node]]) -> List[Tuple[Tuple, Dict]] local_warnings = [] - self.env.set_warnfunc(lambda *args: local_warnings.append(args)) + + def warnfunc(*args, **kwargs): + local_warnings.append((args, kwargs)) + self.env.set_warnfunc(warnfunc) for docname, doctree in docs: self.write_doc(docname, doctree) return local_warnings @@ -382,7 +413,7 @@ def add_warnings(docs, wlist): warnings.extend(wlist) # warm up caches/compile templates using the first document - firstname, docnames = docnames[0], docnames[1:] + firstname, docnames = docnames[0], docnames[1:] # type: ignore doctree = self.env.get_and_resolve_doctree(firstname, self) self.write_doc_serialized(firstname, doctree) self.write_doc(firstname, doctree) @@ -403,24 +434,28 @@ def add_warnings(docs, wlist): self.info(bold('waiting for workers...')) tasks.join() - for warning in warnings: - self.warn(*warning) + for warning, kwargs in warnings: + self.warn(*warning, **kwargs) def prepare_writing(self, docnames): + # type: (Set[unicode]) -> None """A place where you can add logic before :meth:`write_doc` is run""" raise NotImplementedError def write_doc(self, docname, doctree): + # type: (unicode, nodes.Node) -> None """Where you actually write something to the filesystem.""" raise NotImplementedError def write_doc_serialized(self, docname, doctree): + # type: (unicode, nodes.Node) -> None """Handle parts of write_doc that must be called in the main process if parallel build is active. """ pass def finish(self): + # type: () -> None """Finish the building process. The default implementation does nothing. @@ -428,6 +463,7 @@ def finish(self): pass def cleanup(self): + # type: () -> None """Cleanup any resources. The default implementation does nothing. @@ -435,6 +471,7 @@ def cleanup(self): pass def get_builder_config(self, option, default): + # type: (unicode, unicode) -> Any """Return a builder specific option. This method allows customization of common builder settings by @@ -449,27 +486,3 @@ def get_builder_config(self, option, default): except AttributeError: optname = '%s_%s' % (default, option) return getattr(self.config, optname) - -BUILTIN_BUILDERS = { - 'html': ('html', 'StandaloneHTMLBuilder'), - 'dirhtml': ('html', 'DirectoryHTMLBuilder'), - 'singlehtml': ('html', 'SingleFileHTMLBuilder'), - 'pickle': ('html', 'PickleHTMLBuilder'), - 'json': ('html', 'JSONHTMLBuilder'), - 'web': ('html', 'PickleHTMLBuilder'), - 'htmlhelp': ('htmlhelp', 'HTMLHelpBuilder'), - 'devhelp': ('devhelp', 'DevhelpBuilder'), - 'qthelp': ('qthelp', 'QtHelpBuilder'), - 'applehelp': ('applehelp', 'AppleHelpBuilder'), - 'epub': ('epub', 'EpubBuilder'), - 'latex': ('latex', 'LaTeXBuilder'), - 'text': ('text', 'TextBuilder'), - 'man': ('manpage', 'ManualPageBuilder'), - 'texinfo': ('texinfo', 'TexinfoBuilder'), - 'changes': ('changes', 'ChangesBuilder'), - 'linkcheck': ('linkcheck', 'CheckExternalLinksBuilder'), - 'websupport': ('websupport', 'WebSupportBuilder'), - 'gettext': ('gettext', 'MessageCatalogBuilder'), - 'xml': ('xml', 'XMLBuilder'), - 'pseudoxml': ('xml', 'PseudoXMLBuilder'), -} diff --git a/sphinx/builders/applehelp.py b/sphinx/builders/applehelp.py index c98962633e0..05a5a29773d 100644 --- a/sphinx/builders/applehelp.py +++ b/sphinx/builders/applehelp.py @@ -5,7 +5,7 @@ Build Apple help books. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import print_function @@ -13,23 +13,28 @@ import codecs import pipes -from os import path +from os import path, environ +import shlex from sphinx.builders.html import StandaloneHTMLBuilder -from sphinx.util import copy_static_entry -from sphinx.util.osutil import copyfile, ensuredir -from sphinx.util.console import bold +from sphinx.config import string_classes +from sphinx.util.osutil import copyfile, ensuredir, make_filename +from sphinx.util.console import bold # type: ignore +from sphinx.util.fileutil import copy_asset from sphinx.util.pycompat import htmlescape -from sphinx.util.matching import compile_matchers +from sphinx.util.matching import Matcher from sphinx.errors import SphinxError import plistlib import subprocess +if False: + # For type annotation + from sphinx.application import Sphinx # NOQA # Use plistlib.dump in 3.4 and above try: - write_plist = plistlib.dump + write_plist = plistlib.dump # type: ignore except AttributeError: write_plist = plistlib.writePlist @@ -81,9 +86,11 @@ class AppleHelpBuilder(StandaloneHTMLBuilder): search = False def init(self): + # type: () -> None super(AppleHelpBuilder, self).init() # the output files for HTML help must be .html only self.out_suffix = '.html' + self.link_suffix = '.html' if self.config.applehelp_bundle_id is None: raise SphinxError('You must set applehelp_bundle_id before ' @@ -98,27 +105,28 @@ def init(self): self.config.applehelp_locale + '.lproj') def handle_finish(self): + # type: () -> None super(AppleHelpBuilder, self).handle_finish() self.finish_tasks.add_task(self.copy_localized_files) self.finish_tasks.add_task(self.build_helpbook) def copy_localized_files(self): - source_dir = path.join(self.confdir, - self.config.applehelp_locale + '.lproj') + # type: () -> None + source_dir = path.join(self.confdir, self.config.applehelp_locale + '.lproj') target_dir = self.outdir if path.isdir(source_dir): self.info(bold('copying localized files... '), nonl=True) - ctx = self.globalcontext.copy() - matchers = compile_matchers(self.config.exclude_patterns) - copy_static_entry(source_dir, target_dir, self, ctx, - exclude_matchers=matchers) + excluded = Matcher(self.config.exclude_patterns + ['**/.*']) + copy_asset(source_dir, target_dir, excluded, + context=self.globalcontext, renderer=self.templates) self.info('done') def build_helpbook(self): + # type: () -> None contents_dir = path.join(self.bundle_path, 'Contents') resources_dir = path.join(contents_dir, 'Resources') language_dir = path.join(resources_dir, @@ -178,14 +186,11 @@ def build_helpbook(self): # Build the access page self.info(bold('building access page...'), nonl=True) - f = codecs.open(path.join(language_dir, '_access.html'), 'w') - try: + with codecs.open(path.join(language_dir, '_access.html'), 'w') as f: f.write(access_page_template % { 'toc': htmlescape(toc, quote=True), 'title': htmlescape(self.config.applehelp_title) }) - finally: - f.close() self.info('done') # Generate the help index @@ -216,16 +221,19 @@ def build_helpbook(self): self.warn('you will need to index this help book with:\n %s' % (' '.join([pipes.quote(arg) for arg in args]))) else: - p = subprocess.Popen(args, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT) + try: + p = subprocess.Popen(args, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) - output = p.communicate()[0] + output = p.communicate()[0] - if p.returncode != 0: - raise AppleHelpIndexerFailed(output) - else: - self.info('done') + if p.returncode != 0: + raise AppleHelpIndexerFailed(output) + else: + self.info('done') + except OSError: + raise AppleHelpIndexerFailed('Command not found: %s' % args[0]) # If we've been asked to, sign the bundle if self.config.applehelp_codesign_identity: @@ -247,13 +255,49 @@ def build_helpbook(self): self.warn('you will need to sign this help book with:\n %s' % (' '.join([pipes.quote(arg) for arg in args]))) else: - p = subprocess.Popen(args, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT) - - output = p.communicate()[0] - - if p.returncode != 0: - raise AppleHelpCodeSigningFailed(output) - else: - self.info('done') + try: + p = subprocess.Popen(args, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + + output = p.communicate()[0] + + if p.returncode != 0: + raise AppleHelpCodeSigningFailed(output) + else: + self.info('done') + except OSError: + raise AppleHelpCodeSigningFailed('Command not found: %s' % args[0]) + + +def setup(app): + # type: (Sphinx) -> None + app.setup_extension('sphinx.builders.html') + app.add_builder(AppleHelpBuilder) + + app.add_config_value('applehelp_bundle_name', + lambda self: make_filename(self.project), 'applehelp') + app.add_config_value('applehelp_bundle_id', None, 'applehelp', string_classes) + app.add_config_value('applehelp_dev_region', 'en-us', 'applehelp') + app.add_config_value('applehelp_bundle_version', '1', 'applehelp') + app.add_config_value('applehelp_icon', None, 'applehelp', string_classes) + app.add_config_value('applehelp_kb_product', + lambda self: '%s-%s' % (make_filename(self.project), self.release), + 'applehelp') + app.add_config_value('applehelp_kb_url', None, 'applehelp', string_classes) + app.add_config_value('applehelp_remote_url', None, 'applehelp', string_classes) + app.add_config_value('applehelp_index_anchors', False, 'applehelp', string_classes) + app.add_config_value('applehelp_min_term_length', None, 'applehelp', string_classes) + app.add_config_value('applehelp_stopwords', + lambda self: self.language or 'en', 'applehelp') + app.add_config_value('applehelp_locale', lambda self: self.language or 'en', 'applehelp') + app.add_config_value('applehelp_title', lambda self: self.project + ' Help', 'applehelp') + app.add_config_value('applehelp_codesign_identity', + lambda self: environ.get('CODE_SIGN_IDENTITY', None), + 'applehelp') + app.add_config_value('applehelp_codesign_flags', + lambda self: shlex.split(environ.get('OTHER_CODE_SIGN_FLAGS', '')), + 'applehelp') + app.add_config_value('applehelp_indexer_path', '/usr/bin/hiutil', 'applehelp') + app.add_config_value('applehelp_codesign_path', '/usr/bin/codesign', 'applehelp') + app.add_config_value('applehelp_disable_external_tools', False, None) diff --git a/sphinx/builders/changes.py b/sphinx/builders/changes.py index 4fb98ba120f..034722929c4 100644 --- a/sphinx/builders/changes.py +++ b/sphinx/builders/changes.py @@ -5,7 +5,7 @@ Changelog builder. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -15,14 +15,19 @@ from six import iteritems from sphinx import package_dir -from sphinx.util import copy_static_entry from sphinx.locale import _ from sphinx.theming import Theme from sphinx.builders import Builder from sphinx.util.osutil import ensuredir, os_path -from sphinx.util.console import bold +from sphinx.util.console import bold # type: ignore +from sphinx.util.fileutil import copy_asset_file from sphinx.util.pycompat import htmlescape +if False: + # For type annotation + from typing import Any, Tuple # NOQA + from sphinx.application import Sphinx # NOQA + class ChangesBuilder(Builder): """ @@ -31,6 +36,7 @@ class ChangesBuilder(Builder): name = 'changes' def init(self): + # type: () -> None self.create_template_bridge() Theme.init_themes(self.confdir, self.config.html_theme_path, warn=self.warn) @@ -38,19 +44,21 @@ def init(self): self.templates.init(self, self.theme) def get_outdated_docs(self): + # type: () -> unicode return self.outdir typemap = { 'versionadded': 'added', 'versionchanged': 'changed', 'deprecated': 'deprecated', - } + } # type: Dict[unicode, unicode] def write(self, *ignored): + # type: (Any) -> None version = self.config.version - libchanges = {} - apichanges = [] - otherchanges = {} + libchanges = {} # type: Dict[unicode, List[Tuple[unicode, unicode, int]]] + apichanges = [] # type: List[Tuple[unicode, unicode, int]] + otherchanges = {} # type: Dict[Tuple[unicode, unicode], List[Tuple[unicode, unicode, int]]] # NOQA if version not in self.env.versionchanges: self.info(bold('no changes in version %s.' % version)) return @@ -101,16 +109,10 @@ def write(self, *ignored): 'show_copyright': self.config.html_show_copyright, 'show_sphinx': self.config.html_show_sphinx, } - f = codecs.open(path.join(self.outdir, 'index.html'), 'w', 'utf8') - try: + with codecs.open(path.join(self.outdir, 'index.html'), 'w', 'utf8') as f: # type: ignore # NOQA f.write(self.templates.render('changes/frameset.html', ctx)) - finally: - f.close() - f = codecs.open(path.join(self.outdir, 'changes.html'), 'w', 'utf8') - try: + with codecs.open(path.join(self.outdir, 'changes.html'), 'w', 'utf8') as f: # type: ignore # NOQA f.write(self.templates.render('changes/versionchanges.html', ctx)) - finally: - f.close() hltext = ['.. versionadded:: %s' % version, '.. versionchanged:: %s' % version, @@ -126,37 +128,31 @@ def hl(no, line): self.info(bold('copying source files...')) for docname in self.env.all_docs: - f = codecs.open(self.env.doc2path(docname), 'r', - self.env.config.source_encoding) - try: - lines = f.readlines() - except UnicodeDecodeError: - self.warn('could not read %r for changelog creation' % docname) - continue - finally: - f.close() + with codecs.open(self.env.doc2path(docname), 'r', # type: ignore + self.env.config.source_encoding) as f: + try: + lines = f.readlines() + except UnicodeDecodeError: + self.warn('could not read %r for changelog creation' % docname) + continue targetfn = path.join(self.outdir, 'rst', os_path(docname)) + '.html' ensuredir(path.dirname(targetfn)) - f = codecs.open(targetfn, 'w', 'utf-8') - try: + with codecs.open(targetfn, 'w', 'utf-8') as f: # type: ignore text = ''.join(hl(i+1, line) for (i, line) in enumerate(lines)) ctx = { 'filename': self.env.doc2path(docname, None), 'text': text } f.write(self.templates.render('changes/rstsource.html', ctx)) - finally: - f.close() themectx = dict(('theme_' + key, val) for (key, val) in iteritems(self.theme.get_options({}))) - copy_static_entry(path.join(package_dir, 'themes', 'default', - 'static', 'default.css_t'), - self.outdir, self, themectx) - copy_static_entry(path.join(package_dir, 'themes', 'basic', - 'static', 'basic.css'), - self.outdir, self) + copy_asset_file(path.join(package_dir, 'themes', 'default', 'static', 'default.css_t'), + self.outdir, context=themectx, renderer=self.templates) + copy_asset_file(path.join(package_dir, 'themes', 'basic', 'static', 'basic.css'), + self.outdir) def hl(self, text, version): + # type: (unicode, unicode) -> unicode text = htmlescape(text) for directive in ['versionchanged', 'versionadded', 'deprecated']: text = text.replace('.. %s:: %s' % (directive, version), @@ -164,4 +160,10 @@ def hl(self, text, version): return text def finish(self): + # type: () -> None pass + + +def setup(app): + # type: (Sphinx) -> None + app.add_builder(ChangesBuilder) diff --git a/sphinx/builders/devhelp.py b/sphinx/builders/devhelp.py index e6199e62160..f0b313e7f8c 100644 --- a/sphinx/builders/devhelp.py +++ b/sphinx/builders/devhelp.py @@ -7,38 +7,30 @@ .. _Devhelp: http://live.gnome.org/devhelp - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import absolute_import import re +import gzip from os import path from docutils import nodes from sphinx import addnodes +from sphinx.util.osutil import make_filename from sphinx.builders.html import StandaloneHTMLBuilder try: import xml.etree.ElementTree as etree except ImportError: - try: - import lxml.etree as etree - except ImportError: - try: - import elementtree.ElementTree as etree - except ImportError: - import cElementTree as etree + import lxml.etree as etree # type: ignore -try: - import gzip - - def comp_open(filename, mode='rb'): - return gzip.open(filename + '.gz', mode) -except ImportError: - def comp_open(filename, mode='rb'): - return open(filename, mode) +if False: + # For type annotation + from typing import Any # NOQA + from sphinx.application import Sphinx # NOQA class DevhelpBuilder(StandaloneHTMLBuilder): @@ -57,13 +49,17 @@ class DevhelpBuilder(StandaloneHTMLBuilder): embedded = True def init(self): + # type: () -> None StandaloneHTMLBuilder.init(self) self.out_suffix = '.html' + self.link_suffix = '.html' def handle_finish(self): + # type: () -> None self.build_devhelp(self.outdir, self.config.devhelp_basename) def build_devhelp(self, outdir, outname): + # type: (unicode, unicode) -> None self.info('dumping devhelp index...') # Basic info @@ -81,6 +77,7 @@ def build_devhelp(self, outdir, outname): self.config.master_doc, self, prune_toctrees=False) def write_toc(node, parent): + # type: (nodes.Node, nodes.Node) -> None if isinstance(node, addnodes.compact_paragraph) or \ isinstance(node, nodes.bullet_list): for subnode in node: @@ -91,9 +88,10 @@ def write_toc(node, parent): write_toc(subnode, item) elif isinstance(node, nodes.reference): parent.attrib['link'] = node['refuri'] - parent.attrib['name'] = node.astext().encode('utf-8') + parent.attrib['name'] = node.astext() def istoctree(node): + # type: (nodes.Node) -> bool return isinstance(node, addnodes.compact_paragraph) and \ 'toctree' in node @@ -105,6 +103,7 @@ def istoctree(node): index = self.env.create_index(self) def write_index(title, refs, subitems): + # type: (unicode, List[Any], Any) -> None if len(refs) == 0: pass elif len(refs) == 1: @@ -117,18 +116,24 @@ def write_index(title, refs, subitems): link=ref[1]) if subitems: - parent_title = re.sub(r'\s*\(.*\)\s*$', '', title) + parent_title = re.sub(r'\s*\(.*\)\s*$', '', title) # type: ignore for subitem in subitems: write_index("%s %s" % (parent_title, subitem[0]), subitem[1], []) for (key, group) in index: - for title, (refs, subitems) in group: + for title, (refs, subitems, key) in group: write_index(title, refs, subitems) # Dump the XML file - f = comp_open(path.join(outdir, outname + '.devhelp'), 'w') - try: - tree.write(f) - finally: - f.close() + xmlfile = path.join(outdir, outname + '.devhelp.gz') + with gzip.open(xmlfile, 'w') as f: # type: ignore + tree.write(f, 'utf-8') + + +def setup(app): + # type: (Sphinx) -> None + app.setup_extension('sphinx.builders.html') + app.add_builder(DevhelpBuilder) + + app.add_config_value('devhelp_basename', lambda self: make_filename(self.project), None) diff --git a/sphinx/builders/dummy.py b/sphinx/builders/dummy.py new file mode 100644 index 00000000000..b119d9687dd --- /dev/null +++ b/sphinx/builders/dummy.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +""" + sphinx.builders.dummy + ~~~~~~~~~~~~~~~~~~~~~ + + Do syntax checks, but no writing. + + :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + + +from sphinx.builders import Builder + + +class DummyBuilder(Builder): + name = 'dummy' + allow_parallel = True + + def init(self): + pass + + def get_outdated_docs(self): + return self.env.found_docs + + def get_target_uri(self, docname, typ=None): + return '' + + def prepare_writing(self, docnames): + pass + + def write_doc(self, docname, doctree): + pass + + def finish(self): + pass + + +def setup(app): + app.add_builder(DummyBuilder) diff --git a/sphinx/builders/epub.py b/sphinx/builders/epub.py index 2a80642dd01..2b8aba7bd50 100644 --- a/sphinx/builders/epub.py +++ b/sphinx/builders/epub.py @@ -6,7 +6,7 @@ Build epub files. Originally derived from qthelp.py. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -15,6 +15,7 @@ import codecs import zipfile from os import path +from datetime import datetime try: from PIL import Image @@ -28,9 +29,14 @@ from sphinx import addnodes from sphinx.builders.html import StandaloneHTMLBuilder -from sphinx.util.osutil import ensuredir, copyfile, ustrftime, EEXIST +from sphinx.util.osutil import ensuredir, copyfile, make_filename, EEXIST from sphinx.util.smartypants import sphinx_smarty_pants as ssp -from sphinx.util.console import brown +from sphinx.util.console import brown # type: ignore + +if False: + # For type annotation + from typing import Any, Tuple # NOQA + from sphinx.application import Sphinx # NOQA # (Fragment) templates from which the metainfo files content.opf, toc.ncx, @@ -39,9 +45,9 @@ # output but that may be customized by (re-)setting module attributes, # e.g. from conf.py. -_mimetype_template = 'application/epub+zip' # no EOL! +MIMETYPE_TEMPLATE = 'application/epub+zip' # no EOL! -_container_template = u'''\ +CONTAINER_TEMPLATE = u'''\ <?xml version="1.0" encoding="UTF-8"?> <container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container"> @@ -52,7 +58,7 @@ </container> ''' -_toc_template = u'''\ +TOC_TEMPLATE = u'''\ <?xml version="1.0"?> <ncx version="2005-1" xmlns="http://www.daisy.org/z3986/2005/ncx/"> <head> @@ -70,7 +76,7 @@ </ncx> ''' -_navpoint_template = u'''\ +NAVPOINT_TEMPLATE = u'''\ %(indent)s <navPoint id="%(navpoint)s" playOrder="%(playorder)d"> %(indent)s <navLabel> %(indent)s <text>%(text)s</text> @@ -78,10 +84,10 @@ %(indent)s <content src="%(refuri)s" /> %(indent)s </navPoint>''' -_navpoint_indent = ' ' -_navPoint_template = 'navPoint%d' +NAVPOINT_INDENT = ' ' +NODE_NAVPOINT_TEMPLATE = 'navPoint%d' -_content_template = u'''\ +CONTENT_TEMPLATE = u'''\ <?xml version="1.0" encoding="UTF-8"?> <package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="%(uid)s"> @@ -108,41 +114,47 @@ </package> ''' -_cover_template = u'''\ +COVER_TEMPLATE = u'''\ <meta name="cover" content="%(cover)s"/> ''' -_coverpage_name = u'epub-cover.html' +COVERPAGE_NAME = u'epub-cover.xhtml' -_file_template = u'''\ +FILE_TEMPLATE = u'''\ <item id="%(id)s" href="%(href)s" media-type="%(media_type)s" />''' -_spine_template = u'''\ +SPINE_TEMPLATE = u'''\ <itemref idref="%(idref)s" />''' -_guide_template = u'''\ +NO_LINEAR_SPINE_TEMPLATE = u'''\ + <itemref idref="%(idref)s" linear="no" />''' + +GUIDE_TEMPLATE = u'''\ <reference type="%(type)s" title="%(title)s" href="%(uri)s" />''' -_toctree_template = u'toctree-l%d' +TOCTREE_TEMPLATE = u'toctree-l%d' + +DOCTYPE = u'''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" + "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">''' -_link_target_template = u' [%(uri)s]' +LINK_TARGET_TEMPLATE = u' [%(uri)s]' -_footnote_label_template = u'#%d' +FOOTNOTE_LABEL_TEMPLATE = u'#%d' -_footnotes_rubric_name = u'Footnotes' +FOOTNOTES_RUBRIC_NAME = u'Footnotes' -_css_link_target_class = u'link-target' +CSS_LINK_TARGET_CLASS = u'link-target' # XXX These strings should be localized according to epub_language -_guide_titles = { +GUIDE_TITLES = { 'toc': u'Table of Contents', 'cover': u'Cover' } -_media_types = { - '.html': 'application/xhtml+xml', +MEDIA_TYPES = { + '.xhtml': 'application/xhtml+xml', '.css': 'text/css', '.png': 'image/png', '.gif': 'image/gif', @@ -151,14 +163,15 @@ '.jpeg': 'image/jpeg', '.otf': 'application/x-font-otf', '.ttf': 'application/x-font-ttf', -} + '.woff': 'application/font-woff', +} # type: Dict[unicode, unicode] -_vector_graphics_extensions = ('.svg',) +VECTOR_GRAPHICS_EXTENSIONS = ('.svg',) # Regular expression to match colons only in local fragment identifiers. # If the URI contains a colon before the #, # it is an external link that should not change. -_refuri_re = re.compile("([^#:]*#)(.*)") +REFURI_RE = re.compile("([^#:]*#)(.*)") # The epub publisher @@ -171,7 +184,7 @@ class EpubBuilder(StandaloneHTMLBuilder): META-INF/container.xml. Afterwards, all necessary files are zipped to an epub file. """ - name = 'epub' + name = 'epub2' # don't copy the reST source copysource = False @@ -180,21 +193,55 @@ class EpubBuilder(StandaloneHTMLBuilder): # don't add links add_permalinks = False + # don't use # as current path. ePub check reject it. + allow_sharp_as_current_path = False # don't add sidebar etc. embedded = True + # disable download role + download_support = False + # dont' create links to original images from images + html_scaled_image_link = False + # don't generate search index or include search page + search = False + + mimetype_template = MIMETYPE_TEMPLATE + container_template = CONTAINER_TEMPLATE + toc_template = TOC_TEMPLATE + navpoint_template = NAVPOINT_TEMPLATE + navpoint_indent = NAVPOINT_INDENT + node_navpoint_template = NODE_NAVPOINT_TEMPLATE + content_template = CONTENT_TEMPLATE + cover_template = COVER_TEMPLATE + coverpage_name = COVERPAGE_NAME + file_template = FILE_TEMPLATE + spine_template = SPINE_TEMPLATE + no_linear_spine_template = NO_LINEAR_SPINE_TEMPLATE + guide_template = GUIDE_TEMPLATE + toctree_template = TOCTREE_TEMPLATE + doctype = DOCTYPE + link_target_template = LINK_TARGET_TEMPLATE + css_link_target_class = CSS_LINK_TARGET_CLASS + guide_titles = GUIDE_TITLES + media_types = MEDIA_TYPES + refuri_re = REFURI_RE def init(self): + # type: () -> None StandaloneHTMLBuilder.init(self) # the output files for epub must be .html only - self.out_suffix = '.html' + self.out_suffix = '.xhtml' + self.link_suffix = '.xhtml' self.playorder = 0 self.tocid = 0 + self.use_index = self.get_builder_config('use_index', 'epub') def get_theme_config(self): + # type: () -> Tuple[unicode, Dict] return self.config.epub_theme, self.config.epub_theme_options # generic support functions def make_id(self, name, id_cache={}): + # type: (unicode, Dict[unicode, unicode]) -> unicode # id_cache is intentionally mutable """Return a unique id for name.""" id = id_cache.get(name) @@ -204,6 +251,7 @@ def make_id(self, name, id_cache={}): return id def esc(self, name): + # type: (unicode) -> unicode """Replace all characters not allowed in text an attribute values.""" # Like cgi.escape, but also replace apostrophe name = name.replace('&', '&') @@ -214,6 +262,7 @@ def esc(self, name): return name def get_refnodes(self, doctree, result): + # type: (nodes.Node, List[Dict[unicode, Any]]) -> List[Dict[unicode, Any]] """Collect section titles, their depth in the toc and the refuri.""" # XXX: is there a better way than checking the attribute # toctree-l[1-8] on the parent node? @@ -224,7 +273,7 @@ def get_refnodes(self, doctree, result): return result classes = doctree.parent.attributes['classes'] for level in range(8, 0, -1): # or range(1, 8)? - if (_toctree_template % level) in classes: + if (self.toctree_template % level) in classes: result.append({ 'level': level, 'refuri': self.esc(refuri), @@ -237,6 +286,7 @@ def get_refnodes(self, doctree, result): return result def get_toc(self): + # type: () -> None """Get the total table of contents, containing the master_doc and pre and post files not managed by sphinx. """ @@ -252,11 +302,12 @@ def get_toc(self): self.toc_add_files(self.refnodes) def toc_add_files(self, refnodes): + # type: (List[nodes.Node]) -> None """Add the master_doc, pre and post files to a list of refnodes. """ refnodes.insert(0, { 'level': 1, - 'refuri': self.esc(self.config.master_doc + '.html'), + 'refuri': self.esc(self.config.master_doc + self.out_suffix), 'text': ssp(self.esc( self.env.titles[self.config.master_doc].astext())) }) @@ -274,10 +325,12 @@ def toc_add_files(self, refnodes): }) def fix_fragment(self, prefix, fragment): + # type: (unicode, unicode) -> unicode """Return a href/id attribute with colons replaced by hyphens.""" return prefix + fragment.replace(':', '-') def fix_ids(self, tree): + # type: (nodes.Node) -> None """Replace colons with hyphens in href and id attributes. Some readers crash because they interpret the part as a @@ -285,7 +338,7 @@ def fix_ids(self, tree): """ for node in tree.traverse(nodes.reference): if 'refuri' in node: - m = _refuri_re.match(node['refuri']) + m = self.refuri_re.match(node['refuri']) if m: node['refuri'] = self.fix_fragment(m.group(1), m.group(2)) if 'refid' in node: @@ -298,9 +351,11 @@ def fix_ids(self, tree): node.attributes['ids'] = newids def add_visible_links(self, tree, show_urls='inline'): + # type: (nodes.Node, unicode) -> None """Add visible link targets for external links""" def make_footnote_ref(doc, label): + # type: (nodes.Node, unicode) -> nodes.footnote_reference """Create a footnote_reference node with children""" footnote_ref = nodes.footnote_reference('[#]_') footnote_ref.append(nodes.Text(label)) @@ -308,6 +363,7 @@ def make_footnote_ref(doc, label): return footnote_ref def make_footnote(doc, label, uri): + # type: (nodes.Node, unicode, unicode) -> nodes.footnote """Create a footnote node with children""" footnote = nodes.footnote(uri) para = nodes.paragraph() @@ -318,6 +374,7 @@ def make_footnote(doc, label, uri): return footnote def footnote_spot(tree): + # type: (nodes.Node) -> Tuple[nodes.Node, int] """Find or create a spot to place footnotes. The function returns the tuple (parent, index).""" @@ -331,11 +388,11 @@ def footnote_spot(tree): return fn.parent, fn.parent.index(fn) + 1 for node in tree.traverse(nodes.rubric): if len(node.children) == 1 and \ - node.children[0].astext() == _footnotes_rubric_name: + node.children[0].astext() == FOOTNOTES_RUBRIC_NAME: return node.parent, node.parent.index(node) + 1 doc = tree.traverse(nodes.document)[0] rub = nodes.rubric() - rub.append(nodes.Text(_footnotes_rubric_name)) + rub.append(nodes.Text(FOOTNOTES_RUBRIC_NAME)) doc.append(rub) return doc, doc.index(rub) + 1 @@ -351,12 +408,12 @@ def footnote_spot(tree): uri.startswith('ftp:')) and uri not in node.astext(): idx = node.parent.index(node) + 1 if show_urls == 'inline': - uri = _link_target_template % {'uri': uri} + uri = self.link_target_template % {'uri': uri} link = nodes.inline(uri, uri) - link['classes'].append(_css_link_target_class) + link['classes'].append(self.css_link_target_class) node.parent.insert(idx, link) elif show_urls == 'footnote': - label = _footnote_label_template % nr + label = FOOTNOTE_LABEL_TEMPLATE % nr nr += 1 footnote_ref = make_footnote_ref(doc, label) node.parent.insert(idx, footnote_ref) @@ -367,6 +424,7 @@ def footnote_spot(tree): fn_idx += 1 def write_doc(self, docname, doctree): + # type: (unicode, nodes.Node) -> None """Write one document file. This method is overwritten in order to fix fragment identifiers @@ -374,32 +432,35 @@ def write_doc(self, docname, doctree): """ self.fix_ids(doctree) self.add_visible_links(doctree, self.config.epub_show_urls) - return StandaloneHTMLBuilder.write_doc(self, docname, doctree) + StandaloneHTMLBuilder.write_doc(self, docname, doctree) def fix_genindex(self, tree): + # type: (nodes.Node) -> None """Fix href attributes for genindex pages.""" # XXX: modifies tree inline # Logic modeled from themes/basic/genindex.html for key, columns in tree: - for entryname, (links, subitems) in columns: + for entryname, (links, subitems, key_) in columns: for (i, (ismain, link)) in enumerate(links): - m = _refuri_re.match(link) + m = self.refuri_re.match(link) if m: links[i] = (ismain, self.fix_fragment(m.group(1), m.group(2))) for subentryname, subentrylinks in subitems: for (i, (ismain, link)) in enumerate(subentrylinks): - m = _refuri_re.match(link) + m = self.refuri_re.match(link) if m: subentrylinks[i] = (ismain, self.fix_fragment(m.group(1), m.group(2))) def is_vector_graphics(self, filename): + # type: (unicode) -> bool """Does the filename extension indicate a vector graphic format?""" ext = path.splitext(filename)[-1] - return ext in _vector_graphics_extensions + return ext in VECTOR_GRAPHICS_EXTENSIONS def copy_image_files_pil(self): + # type: () -> None """Copy images using the PIL. The method tries to read and write the files with the PIL, converting the format and resizing the image if necessary/possible. @@ -438,6 +499,7 @@ def copy_image_files_pil(self): (path.join(self.srcdir, src), err)) def copy_image_files(self): + # type: () -> None """Copy image files to destination directory. This overwritten method can use the PIL to convert image files. """ @@ -451,20 +513,29 @@ def copy_image_files(self): else: super(EpubBuilder, self).copy_image_files() + def copy_download_files(self): + # type: () -> None + pass + def handle_page(self, pagename, addctx, templatename='page.html', outfilename=None, event_arg=None): + # type: (unicode, Dict, unicode, unicode, Any) -> None """Create a rendered page. This method is overwritten for genindex pages in order to fix href link attributes. """ if pagename.startswith('genindex'): + if not self.use_index: + return self.fix_genindex(addctx['genindexentries']) + addctx['doctype'] = self.doctype StandaloneHTMLBuilder.handle_page(self, pagename, addctx, templatename, outfilename, event_arg) # Finish by building the epub file def handle_finish(self): + # type: () -> None """Create the metainfo files and finally the epub.""" self.get_toc() self.build_mimetype(self.outdir, 'mimetype') @@ -474,15 +545,14 @@ def handle_finish(self): self.build_epub(self.outdir, self.config.epub_basename + '.epub') def build_mimetype(self, outdir, outname): + # type: (unicode, unicode) -> None """Write the metainfo file mimetype.""" self.info('writing %s file...' % outname) - f = codecs.open(path.join(outdir, outname), 'w', 'utf-8') - try: - f.write(_mimetype_template) - finally: - f.close() + with codecs.open(path.join(outdir, outname), 'w', 'utf-8') as f: # type: ignore + f.write(self.mimetype_template) def build_container(self, outdir, outname): + # type: (unicode, unicode) -> None """Write the metainfo file META-INF/cointainer.xml.""" self.info('writing %s file...' % outname) fn = path.join(outdir, outname) @@ -491,17 +561,15 @@ def build_container(self, outdir, outname): except OSError as err: if err.errno != EEXIST: raise - f = codecs.open(path.join(outdir, outname), 'w', 'utf-8') - try: - f.write(_container_template) - finally: - f.close() + with codecs.open(path.join(outdir, outname), 'w', 'utf-8') as f: # type: ignore + f.write(self.container_template) # type: ignore def content_metadata(self, files, spine, guide): + # type: (List[unicode], Any, Any) -> Dict[unicode, Any] """Create a dictionary with all metadata for the content.opf file properly escaped. """ - metadata = {} + metadata = {} # type: Dict[unicode, Any] metadata['title'] = self.esc(self.config.epub_title) metadata['author'] = self.esc(self.config.epub_author) metadata['uid'] = self.esc(self.config.epub_uid) @@ -510,13 +578,14 @@ def content_metadata(self, files, spine, guide): metadata['copyright'] = self.esc(self.config.epub_copyright) metadata['scheme'] = self.esc(self.config.epub_scheme) metadata['id'] = self.esc(self.config.epub_identifier) - metadata['date'] = self.esc(ustrftime('%Y-%m-%d')) + metadata['date'] = self.esc(datetime.utcnow().strftime("%Y-%m-%d")) metadata['files'] = files metadata['spine'] = spine metadata['guide'] = guide return metadata def build_content(self, outdir, outname): + # type: (unicode, unicode) -> None """Write the metainfo file content.opf It contains bibliographic data, a file list and the spine (the reading order). """ @@ -526,53 +595,66 @@ def build_content(self, outdir, outname): if not outdir.endswith(os.sep): outdir += os.sep olen = len(outdir) - projectfiles = [] - self.files = [] + projectfiles = [] # type: List[unicode] + self.files = [] # type: List[unicode] self.ignored_files = ['.buildinfo', 'mimetype', 'content.opf', 'toc.ncx', 'META-INF/container.xml', + 'Thumbs.db', 'ehthumbs.db', '.DS_Store', self.config.epub_basename + '.epub'] + \ self.config.epub_exclude_files + if not self.use_index: + self.ignored_files.append('genindex' + self.out_suffix) for root, dirs, files in os.walk(outdir): for fn in files: filename = path.join(root, fn)[olen:] if filename in self.ignored_files: continue ext = path.splitext(filename)[-1] - if ext not in _media_types: + if ext not in self.media_types: # we always have JS and potentially OpenSearch files, don't # always warn about them if ext not in ('.js', '.xml'): self.warn('unknown mimetype for %s, ignoring' % filename) continue filename = filename.replace(os.sep, '/') - projectfiles.append(_file_template % { + projectfiles.append(self.file_template % { 'href': self.esc(filename), 'id': self.esc(self.make_id(filename)), - 'media_type': self.esc(_media_types[ext]) + 'media_type': self.esc(self.media_types[ext]) }) self.files.append(filename) # spine spine = [] + spinefiles = set() for item in self.refnodes: if '#' in item['refuri']: continue if item['refuri'] in self.ignored_files: continue - spine.append(_spine_template % { + spine.append(self.spine_template % { 'idref': self.esc(self.make_id(item['refuri'])) }) + spinefiles.add(item['refuri']) for info in self.domain_indices: - spine.append(_spine_template % { + spine.append(self.spine_template % { 'idref': self.esc(self.make_id(info[0] + self.out_suffix)) }) - if self.get_builder_config('use_index', 'epub'): - spine.append(_spine_template % { + spinefiles.add(info[0] + self.out_suffix) + if self.use_index: + spine.append(self.spine_template % { 'idref': self.esc(self.make_id('genindex' + self.out_suffix)) }) + spinefiles.add('genindex' + self.out_suffix) + # add auto generated files + for name in self.files: + if name not in spinefiles and name.endswith(self.out_suffix): + spine.append(self.no_linear_spine_template % { + 'idref': self.esc(self.make_id(name)) + }) # add the optional cover - content_tmpl = _content_template + content_tmpl = self.content_template html_tmpl = None if self.config.epub_cover: image, html_tmpl = self.config.epub_cover @@ -580,22 +662,23 @@ def build_content(self, outdir, outname): mpos = content_tmpl.rfind('</metadata>') cpos = content_tmpl.rfind('\n', 0, mpos) + 1 content_tmpl = content_tmpl[:cpos] + \ - _cover_template % {'cover': self.esc(self.make_id(image))} + \ + COVER_TEMPLATE % {'cover': self.esc(self.make_id(image))} + \ content_tmpl[cpos:] if html_tmpl: - spine.insert(0, _spine_template % { - 'idref': self.esc(self.make_id(_coverpage_name))}) - if _coverpage_name not in self.files: - ext = path.splitext(_coverpage_name)[-1] - self.files.append(_coverpage_name) - projectfiles.append(_file_template % { - 'href': self.esc(_coverpage_name), - 'id': self.esc(self.make_id(_coverpage_name)), - 'media_type': self.esc(_media_types[ext]) + spine.insert(0, self.spine_template % { + 'idref': self.esc(self.make_id(self.coverpage_name))}) + if self.coverpage_name not in self.files: + ext = path.splitext(self.coverpage_name)[-1] + self.files.append(self.coverpage_name) + projectfiles.append(self.file_template % { + 'href': self.esc(self.coverpage_name), + 'id': self.esc(self.make_id(self.coverpage_name)), + 'media_type': self.esc(self.media_types[ext]) }) ctx = {'image': self.esc(image), 'title': self.config.project} self.handle_page( - path.splitext(_coverpage_name)[0], ctx, html_tmpl) + path.splitext(self.coverpage_name)[0], ctx, html_tmpl) + spinefiles.add(self.coverpage_name) guide = [] auto_add_cover = True @@ -609,47 +692,46 @@ def build_content(self, outdir, outname): auto_add_cover = False if type == 'toc': auto_add_toc = False - guide.append(_guide_template % { + guide.append(self.guide_template % { 'type': self.esc(type), 'title': self.esc(title), 'uri': self.esc(uri) }) if auto_add_cover and html_tmpl: - guide.append(_guide_template % { + guide.append(self.guide_template % { 'type': 'cover', - 'title': _guide_titles['cover'], - 'uri': self.esc(_coverpage_name) + 'title': self.guide_titles['cover'], + 'uri': self.esc(self.coverpage_name) }) if auto_add_toc and self.refnodes: - guide.append(_guide_template % { + guide.append(self.guide_template % { 'type': 'toc', - 'title': _guide_titles['toc'], + 'title': self.guide_titles['toc'], 'uri': self.esc(self.refnodes[0]['refuri']) }) - projectfiles = '\n'.join(projectfiles) - spine = '\n'.join(spine) - guide = '\n'.join(guide) + projectfiles = '\n'.join(projectfiles) # type: ignore + spine = '\n'.join(spine) # type: ignore + guide = '\n'.join(guide) # type: ignore # write the project file - f = codecs.open(path.join(outdir, outname), 'w', 'utf-8') - try: - f.write(content_tmpl % + with codecs.open(path.join(outdir, outname), 'w', 'utf-8') as f: # type: ignore + f.write(content_tmpl % # type: ignore self.content_metadata(projectfiles, spine, guide)) - finally: - f.close() def new_navpoint(self, node, level, incr=True): + # type: (nodes.Node, int, bool) -> unicode """Create a new entry in the toc from the node at given level.""" # XXX Modifies the node if incr: self.playorder += 1 self.tocid += 1 - node['indent'] = _navpoint_indent * level - node['navpoint'] = self.esc(_navPoint_template % self.tocid) + node['indent'] = self.navpoint_indent * level + node['navpoint'] = self.esc(self.node_navpoint_template % self.tocid) node['playorder'] = self.playorder - return _navpoint_template % node + return self.navpoint_template % node def insert_subnav(self, node, subnav): + # type: (nodes.Node, unicode) -> unicode """Insert nested navpoints for given node. The node and subnav are already rendered to text. @@ -659,6 +741,7 @@ def insert_subnav(self, node, subnav): return '\n'.join(nlist) def build_navpoints(self, nodes): + # type: (nodes.Node) -> unicode """Create the toc navigation structure. Subelements of a node are nested inside the navpoint. For nested nodes @@ -702,10 +785,11 @@ def build_navpoints(self, nodes): return '\n'.join(navlist) def toc_metadata(self, level, navpoints): + # type: (int, List[unicode]) -> Dict[unicode, Any] """Create a dictionary with all metadata for the toc.ncx file properly escaped. """ - metadata = {} + metadata = {} # type: Dict[unicode, Any] metadata['uid'] = self.config.epub_uid metadata['title'] = self.config.epub_title metadata['level'] = level @@ -713,6 +797,7 @@ def toc_metadata(self, level, navpoints): return metadata def build_toc(self, outdir, outname): + # type: (unicode, unicode) -> None """Write the metainfo file toc.ncx.""" self.info('writing %s file...' % outname) @@ -728,26 +813,55 @@ def build_toc(self, outdir, outname): navpoints = self.build_navpoints(refnodes) level = max(item['level'] for item in self.refnodes) level = min(level, self.config.epub_tocdepth) - f = codecs.open(path.join(outdir, outname), 'w', 'utf-8') - try: - f.write(_toc_template % self.toc_metadata(level, navpoints)) - finally: - f.close() + with codecs.open(path.join(outdir, outname), 'w', 'utf-8') as f: # type: ignore + f.write(self.toc_template % self.toc_metadata(level, navpoints)) # type: ignore def build_epub(self, outdir, outname): + # type: (unicode, unicode) -> None """Write the epub file. It is a zip file with the mimetype file stored uncompressed as the first entry. """ self.info('writing %s file...' % outname) - projectfiles = ['META-INF/container.xml', 'content.opf', 'toc.ncx'] \ - + self.files - epub = zipfile.ZipFile(path.join(outdir, outname), 'w', + projectfiles = ['META-INF/container.xml', 'content.opf', 'toc.ncx'] # type: List[unicode] # NOQA + projectfiles.extend(self.files) + epub = zipfile.ZipFile(path.join(outdir, outname), 'w', # type: ignore zipfile.ZIP_DEFLATED) - epub.write(path.join(outdir, 'mimetype'), 'mimetype', + epub.write(path.join(outdir, 'mimetype'), 'mimetype', # type: ignore zipfile.ZIP_STORED) for file in projectfiles: fp = path.join(outdir, file) - epub.write(fp, file, zipfile.ZIP_DEFLATED) + epub.write(fp, file, zipfile.ZIP_DEFLATED) # type: ignore epub.close() + + +def setup(app): + # type: (Sphinx) -> None + app.setup_extension('sphinx.builders.html') + app.add_builder(EpubBuilder) + + # config values + app.add_config_value('epub_basename', lambda self: make_filename(self.project), None) + app.add_config_value('epub_theme', 'epub', 'html') + app.add_config_value('epub_theme_options', {}, 'html') + app.add_config_value('epub_title', lambda self: self.html_title, 'html') + app.add_config_value('epub_author', 'unknown', 'html') + app.add_config_value('epub_language', lambda self: self.language or 'en', 'html') + app.add_config_value('epub_publisher', 'unknown', 'html') + app.add_config_value('epub_copyright', lambda self: self.copyright, 'html') + app.add_config_value('epub_identifier', 'unknown', 'html') + app.add_config_value('epub_scheme', 'unknown', 'html') + app.add_config_value('epub_uid', 'unknown', 'env') + app.add_config_value('epub_cover', (), 'env') + app.add_config_value('epub_guide', (), 'env') + app.add_config_value('epub_pre_files', [], 'env') + app.add_config_value('epub_post_files', [], 'env') + app.add_config_value('epub_exclude_files', [], 'env') + app.add_config_value('epub_tocdepth', 3, 'env') + app.add_config_value('epub_tocdup', True, 'env') + app.add_config_value('epub_tocscope', 'default', 'env') + app.add_config_value('epub_fix_images', False, 'env') + app.add_config_value('epub_max_image_width', 0, 'env') + app.add_config_value('epub_show_urls', 'inline', 'html') + app.add_config_value('epub_use_index', lambda self: self.html_use_index, 'html') diff --git a/sphinx/builders/epub3.py b/sphinx/builders/epub3.py new file mode 100644 index 00000000000..ae799986ef6 --- /dev/null +++ b/sphinx/builders/epub3.py @@ -0,0 +1,283 @@ +# -*- coding: utf-8 -*- +""" + sphinx.builders.epub3 + ~~~~~~~~~~~~~~~~~~~~~ + + Build epub3 files. + Originally derived from epub.py. + + :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import codecs +from os import path +from datetime import datetime + +from sphinx.config import string_classes +from sphinx.builders.epub import EpubBuilder + + +# (Fragment) templates from which the metainfo files content.opf, toc.ncx, +# mimetype, and META-INF/container.xml are created. +# This template section also defines strings that are embedded in the html +# output but that may be customized by (re-)setting module attributes, +# e.g. from conf.py. + +NAVIGATION_DOC_TEMPLATE = u'''\ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml"\ + xmlns:epub="http://www.idpf.org/2007/ops" lang="%(lang)s" xml:lang="%(lang)s"> + <head> + <title>%(toc_locale)s + + + + + +''' + +NAVLIST_TEMPLATE = u'''%(indent)s
  • %(text)s
  • ''' +NAVLIST_TEMPLATE_HAS_CHILD = u'''%(indent)s
  • %(text)s''' +NAVLIST_TEMPLATE_BEGIN_BLOCK = u'''%(indent)s
      ''' +NAVLIST_TEMPLATE_END_BLOCK = u'''%(indent)s
    +%(indent)s
  • ''' +NAVLIST_INDENT = ' ' + +PACKAGE_DOC_TEMPLATE = u'''\ + + + + %(lang)s + %(title)s + %(description)s + %(author)s + %(contributor)s + %(publisher)s + %(copyright)s + %(id)s + %(date)s + %(date)s + %(version)s + true + true + %(ibook_scroll_axis)s + + + + +%(files)s + + +%(spine)s + + +%(guide)s + + +''' + +DOCTYPE = u'''''' + +# The epub3 publisher + + +class Epub3Builder(EpubBuilder): + """ + Builder that outputs epub3 files. + + It creates the metainfo files content.opf, nav.xhtml, toc.ncx, mimetype, + and META-INF/container.xml. Afterwards, all necessary files are zipped to + an epub file. + """ + name = 'epub' + + navigation_doc_template = NAVIGATION_DOC_TEMPLATE + navlist_template = NAVLIST_TEMPLATE + navlist_template_has_child = NAVLIST_TEMPLATE_HAS_CHILD + navlist_template_begin_block = NAVLIST_TEMPLATE_BEGIN_BLOCK + navlist_template_end_block = NAVLIST_TEMPLATE_END_BLOCK + navlist_indent = NAVLIST_INDENT + content_template = PACKAGE_DOC_TEMPLATE + doctype = DOCTYPE + + # Finish by building the epub file + def handle_finish(self): + """Create the metainfo files and finally the epub.""" + self.get_toc() + self.build_mimetype(self.outdir, 'mimetype') + self.build_container(self.outdir, 'META-INF/container.xml') + self.build_content(self.outdir, 'content.opf') + self.build_navigation_doc(self.outdir, 'nav.xhtml') + self.build_toc(self.outdir, 'toc.ncx') + self.build_epub(self.outdir, self.config.epub_basename + '.epub') + + def content_metadata(self, files, spine, guide): + """Create a dictionary with all metadata for the content.opf + file properly escaped. + """ + metadata = super(Epub3Builder, self).content_metadata( + files, spine, guide) + metadata['description'] = self.esc(self.config.epub_description) + metadata['contributor'] = self.esc(self.config.epub_contributor) + metadata['page_progression_direction'] = self._page_progression_direction() + metadata['ibook_scroll_axis'] = self._ibook_scroll_axis() + metadata['date'] = self.esc(datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")) + metadata['version'] = self.esc(self.config.version) + return metadata + + def _page_progression_direction(self): + if self.config.epub_writing_mode == 'horizontal': + page_progression_direction = 'ltr' + elif self.config.epub_writing_mode == 'vertical': + page_progression_direction = 'rtl' + else: + page_progression_direction = 'default' + return page_progression_direction + + def _ibook_scroll_axis(self): + if self.config.epub_writing_mode == 'horizontal': + scroll_axis = 'vertical' + elif self.config.epub_writing_mode == 'vertical': + scroll_axis = 'horizontal' + else: + scroll_axis = 'default' + return scroll_axis + + def _css_writing_mode(self): + if self.config.epub_writing_mode == 'vertical': + editing_mode = 'vertical-rl' + else: + editing_mode = 'horizontal-tb' + return editing_mode + + def prepare_writing(self, docnames): + super(Epub3Builder, self).prepare_writing(docnames) + self.globalcontext['theme_writing_mode'] = self._css_writing_mode() + + def new_navlist(self, node, level, has_child): + """Create a new entry in the toc from the node at given level.""" + # XXX Modifies the node + self.tocid += 1 + node['indent'] = self.navlist_indent * level + if has_child: + return self.navlist_template_has_child % node + else: + return self.navlist_template % node + + def begin_navlist_block(self, level): + return self.navlist_template_begin_block % { + "indent": self.navlist_indent * level + } + + def end_navlist_block(self, level): + return self.navlist_template_end_block % {"indent": self.navlist_indent * level} + + def build_navlist(self, nodes): + """Create the toc navigation structure. + + This method is almost same as build_navpoints method in epub.py. + This is because the logical navigation structure of epub3 is not + different from one of epub2. + + The difference from build_navpoints method is templates which are used + when generating navigation documents. + """ + navlist = [] + level = 1 + usenodes = [] + for node in nodes: + if not node['text']: + continue + file = node['refuri'].split('#')[0] + if file in self.ignored_files: + continue + if node['level'] > self.config.epub_tocdepth: + continue + usenodes.append(node) + for i, node in enumerate(usenodes): + curlevel = node['level'] + if curlevel == level + 1: + navlist.append(self.begin_navlist_block(level)) + while curlevel < level: + level -= 1 + navlist.append(self.end_navlist_block(level)) + level = curlevel + if i != len(usenodes) - 1 and usenodes[i + 1]['level'] > level: + has_child = True + else: + has_child = False + navlist.append(self.new_navlist(node, level, has_child)) + while level != 1: + level -= 1 + navlist.append(self.end_navlist_block(level)) + return '\n'.join(navlist) + + def navigation_doc_metadata(self, navlist): + """Create a dictionary with all metadata for the nav.xhtml file + properly escaped. + """ + metadata = {} + metadata['lang'] = self.esc(self.config.epub_language) + metadata['toc_locale'] = self.esc(self.guide_titles['toc']) + metadata['navlist'] = navlist + return metadata + + def build_navigation_doc(self, outdir, outname): + """Write the metainfo file nav.xhtml.""" + self.info('writing %s file...' % outname) + + if self.config.epub_tocscope == 'default': + doctree = self.env.get_and_resolve_doctree( + self.config.master_doc, self, + prune_toctrees=False, includehidden=False) + refnodes = self.get_refnodes(doctree, []) + self.toc_add_files(refnodes) + else: + # 'includehidden' + refnodes = self.refnodes + navlist = self.build_navlist(refnodes) + with codecs.open(path.join(outdir, outname), 'w', 'utf-8') as f: + f.write(self.navigation_doc_template % + self.navigation_doc_metadata(navlist)) + + # Add nav.xhtml to epub file + if outname not in self.files: + self.files.append(outname) + + +def validate_config_values(app): + if app.config.epub3_description is not None: + app.warn('epub3_description is deprecated. Use epub_description instead.') + app.config.epub_description = app.config.epub3_description + + if app.config.epub3_contributor is not None: + app.warn('epub3_contributor is deprecated. Use epub_contributor instead.') + app.config.epub_contributor = app.config.epub3_contributor + + if app.config.epub3_page_progression_direction is not None: + app.warn('epub3_page_progression_direction option is deprecated' + ' from 1.5. Use epub_writing_mode instead.') + + +def setup(app): + app.setup_extension('sphinx.builders.epub') + app.add_builder(Epub3Builder) + app.connect('builder-inited', validate_config_values) + + app.add_config_value('epub_description', '', 'epub3', string_classes) + app.add_config_value('epub_contributor', 'unknown', 'epub3', string_classes) + app.add_config_value('epub_writing_mode', 'horizontal', 'epub3', string_classes) + app.add_config_value('epub3_description', None, 'epub3', string_classes) + app.add_config_value('epub3_contributor', None, 'epub3', string_classes) + app.add_config_value('epub3_page_progression_direction', None, 'epub3', string_classes) diff --git a/sphinx/builders/gettext.py b/sphinx/builders/gettext.py index ec6a1880509..dbe696a0b27 100644 --- a/sphinx/builders/gettext.py +++ b/sphinx/builders/gettext.py @@ -5,13 +5,13 @@ The MessageCatalogBuilder class. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import unicode_literals -from os import path, walk +from os import path, walk, getenv from codecs import open from time import time from datetime import datetime, tzinfo, timedelta @@ -22,12 +22,20 @@ from sphinx.builders import Builder from sphinx.util import split_index_msg +from sphinx.util.tags import Tags from sphinx.util.nodes import extract_messages, traverse_translatable_index -from sphinx.util.osutil import safe_relpath, ensuredir, SEP +from sphinx.util.osutil import safe_relpath, ensuredir, canon_path from sphinx.util.i18n import find_catalog -from sphinx.util.console import darkgreen, purple, bold +from sphinx.util.console import darkgreen, purple, bold # type: ignore from sphinx.locale import pairindextypes +if False: + # For type annotation + from typing import Any, Iterable, Tuple # NOQA + from docutils import nodes # NOQA + from sphinx.util.i18n import CatalogInfo # NOQA + from sphinx.application import Sphinx # NOQA + POHEADER = r""" # SOME DESCRIPTIVE TITLE. # Copyright (C) %(copyright)s @@ -54,10 +62,14 @@ class Catalog(object): """Catalog of translatable messages.""" def __init__(self): - self.messages = [] # retain insertion order, a la OrderedDict - self.metadata = {} # msgid -> file, line, uid + # type: () -> None + self.messages = [] # type: List[unicode] + # retain insertion order, a la OrderedDict + self.metadata = {} # type: Dict[unicode, List[Tuple[unicode, int, unicode]]] + # msgid -> file, line, uid def add(self, msg, origin): + # type: (unicode, MsgOrigin) -> None if not hasattr(origin, 'uid'): # Nodes that are replicated like todo don't have a uid, # however i18n is also unnecessary. @@ -74,11 +86,23 @@ class MsgOrigin(object): """ def __init__(self, source, line): + # type: (unicode, int) -> None self.source = source self.line = line self.uid = uuid4().hex +class I18nTags(Tags): + """Dummy tags module for I18nBuilder. + + To translate all text inside of only nodes, this class + always returns True value even if no tags are defined. + """ + def eval_condition(self, condition): + # type: (Any) -> bool + return True + + class I18nBuilder(Builder): """ General i18n builder. @@ -88,26 +112,34 @@ class I18nBuilder(Builder): versioning_compare = None # be set by `gettext_uuid` def __init__(self, app): + # type: (Sphinx) -> None self.versioning_compare = app.env.config.gettext_uuid super(I18nBuilder, self).__init__(app) def init(self): + # type: () -> None Builder.init(self) - self.catalogs = defaultdict(Catalog) + self.tags = I18nTags() + self.catalogs = defaultdict(Catalog) # type: defaultdict[unicode, Catalog] def get_target_uri(self, docname, typ=None): + # type: (unicode, unicode) -> unicode return '' def get_outdated_docs(self): + # type: () -> Set[unicode] return self.env.found_docs def prepare_writing(self, docnames): + # type: (Set[unicode]) -> None return def compile_catalogs(self, catalogs, message): + # type: (Set[CatalogInfo], unicode) -> None return def write_doc(self, docname, doctree): + # type: (unicode, nodes.Node) -> None catalog = self.catalogs[find_catalog(docname, self.config.gettext_compact)] @@ -117,7 +149,7 @@ def write_doc(self, docname, doctree): if 'index' in self.env.config.gettext_additional_targets: # Extract translatable messages from index entries. for node, entries in traverse_translatable_index(doctree): - for typ, msg, tid, main in entries: + for typ, msg, tid, main, key_ in entries: for m in split_index_msg(typ, msg): if typ == 'pair' and m in pairindextypes.values(): # avoid built-in translated message was incorporated @@ -130,20 +162,30 @@ def write_doc(self, docname, doctree): timestamp = time() tzdelta = datetime.fromtimestamp(timestamp) - \ datetime.utcfromtimestamp(timestamp) +# set timestamp from SOURCE_DATE_EPOCH if set +# see https://reproducible-builds.org/specs/source-date-epoch/ +source_date_epoch = getenv('SOURCE_DATE_EPOCH') +if source_date_epoch is not None: + timestamp = float(source_date_epoch) + tzdelta = timedelta(0) class LocalTimeZone(tzinfo): def __init__(self, *args, **kw): - super(LocalTimeZone, self).__init__(*args, **kw) + # type: (Any, Any) -> None + super(LocalTimeZone, self).__init__(*args, **kw) # type: ignore self.tzdelta = tzdelta def utcoffset(self, dt): + # type: (datetime) -> timedelta return self.tzdelta def dst(self, dt): + # type: (datetime) -> timedelta return timedelta(0) + ltz = LocalTimeZone() @@ -154,23 +196,25 @@ class MessageCatalogBuilder(I18nBuilder): name = 'gettext' def init(self): + # type: () -> None I18nBuilder.init(self) self.create_template_bridge() self.templates.init(self) def _collect_templates(self): + # type: () -> Set[unicode] template_files = set() for template_path in self.config.templates_path: tmpl_abs_path = path.join(self.app.srcdir, template_path) for dirpath, dirs, files in walk(tmpl_abs_path): for fn in files: if fn.endswith('.html'): - filename = path.join(dirpath, fn) - filename = filename.replace(path.sep, SEP) + filename = canon_path(path.join(dirpath, fn)) template_files.add(filename) return template_files def _extract_from_template(self): + # type: () -> None files = self._collect_templates() self.info(bold('building [%s]: ' % self.name), nonl=1) self.info('targets for %d template files' % len(files)) @@ -179,23 +223,25 @@ def _extract_from_template(self): for template in self.app.status_iterator( files, 'reading templates... ', purple, len(files)): - with open(template, 'r', encoding='utf-8') as f: + with open(template, 'r', encoding='utf-8') as f: # type: ignore context = f.read() for line, meth, msg in extract_translations(context): origin = MsgOrigin(template, line) self.catalogs['sphinx'].add(msg, origin) def build(self, docnames, summary=None, method='update'): + # type: (Iterable[unicode], unicode, unicode) -> None self._extract_from_template() I18nBuilder.build(self, docnames, summary, method) def finish(self): + # type: () -> None I18nBuilder.finish(self) data = dict( version = self.config.version, copyright = self.config.copyright, project = self.config.project, - ctime = datetime.fromtimestamp( + ctime = datetime.fromtimestamp( # type: ignore timestamp, ltz).strftime('%Y-%m-%d %H:%M%z'), ) for textdomain, catalog in self.app.status_iterator( @@ -206,28 +252,36 @@ def finish(self): ensuredir(path.join(self.outdir, path.dirname(textdomain))) pofn = path.join(self.outdir, textdomain + '.pot') - pofile = open(pofn, 'w', encoding='utf-8') - try: - pofile.write(POHEADER % data) + with open(pofn, 'w', encoding='utf-8') as pofile: # type: ignore + pofile.write(POHEADER % data) # type: ignore for message in catalog.messages: positions = catalog.metadata[message] if self.config.gettext_location: # generate "#: file1:line1\n#: file2:line2 ..." - pofile.write("#: %s\n" % "\n#: ".join( - "%s:%s" % (safe_relpath(source, self.outdir), line) + pofile.write("#: %s\n" % "\n#: ".join( # type: ignore + "%s:%s" % (canon_path( + safe_relpath(source, self.outdir)), line) for source, line, _ in positions)) if self.config.gettext_uuid: # generate "# uuid1\n# uuid2\n ..." - pofile.write("# %s\n" % "\n# ".join( + pofile.write("# %s\n" % "\n# ".join( # type: ignore uid for _, _, uid in positions)) # message contains *one* line of text ready for translation message = message.replace('\\', r'\\'). \ replace('"', r'\"'). \ replace('\n', '\\n"\n"') - pofile.write('msgid "%s"\nmsgstr ""\n\n' % message) + pofile.write('msgid "%s"\nmsgstr ""\n\n' % message) # type: ignore + + +def setup(app): + # type: (Sphinx) -> None + app.add_builder(MessageCatalogBuilder) - finally: - pofile.close() + app.add_config_value('gettext_compact', True, 'gettext') + app.add_config_value('gettext_location', True, 'gettext') + app.add_config_value('gettext_uuid', False, 'gettext') + app.add_config_value('gettext_auto_build', True, 'env') + app.add_config_value('gettext_additional_targets', [], 'env') diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py index 79fd0690296..b5d68c843e2 100644 --- a/sphinx/builders/html.py +++ b/sphinx/builders/html.py @@ -5,7 +5,7 @@ Several HTML builders. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -19,6 +19,7 @@ from six import iteritems, text_type, string_types from six.moves import cPickle as pickle + from docutils import nodes from docutils.io import DocTreeInput, StringOutput from docutils.core import Publisher @@ -27,21 +28,30 @@ from docutils.readers.doctree import Reader as DoctreeReader from sphinx import package_dir, __display_version__ -from sphinx.util import jsonimpl, copy_static_entry +from sphinx.util import jsonimpl +from sphinx.util.i18n import format_date from sphinx.util.osutil import SEP, os_path, relative_uri, ensuredir, \ - movefile, ustrftime, copyfile + movefile, copyfile from sphinx.util.nodes import inline_all_toctrees -from sphinx.util.matching import patmatch, compile_matchers -from sphinx.locale import _ +from sphinx.util.fileutil import copy_asset +from sphinx.util.matching import patmatch, Matcher, DOTFILES +from sphinx.config import string_classes +from sphinx.locale import _, l_ from sphinx.search import js_index from sphinx.theming import Theme from sphinx.builders import Builder from sphinx.application import ENV_PICKLE_FILENAME from sphinx.highlighting import PygmentsBridge -from sphinx.util.console import bold, darkgreen, brown +from sphinx.util.console import bold, darkgreen, brown # type: ignore from sphinx.writers.html import HTMLWriter, HTMLTranslator, \ SmartyPantsHTMLTranslator +if False: + # For type annotation + from typing import Any, Iterable, Iterator, Tuple, Union # NOQA + from sphinx.domains import Domain, Index # NOQA + from sphinx.application import Sphinx # NOQA + #: the filename for the inventory of objects INVENTORY_FILENAME = 'objects.inv' #: the filename for the "last build" file (for serializing builders) @@ -49,6 +59,7 @@ def get_stable_hash(obj): + # type: (Any) -> unicode """ Return a stable hash for a Python data structure. We can't just use the md5 of str(obj) since for example dictionary items are enumerated @@ -73,18 +84,26 @@ class StandaloneHTMLBuilder(Builder): link_suffix = '.html' # defaults to matching out_suffix indexer_format = js_index indexer_dumps_unicode = True + # create links to original images from images [True/False] + html_scaled_image_link = True supported_image_types = ['image/svg+xml', 'image/png', 'image/gif', 'image/jpeg'] searchindex_filename = 'searchindex.js' add_permalinks = True + allow_sharp_as_current_path = True embedded = False # for things like HTML help or Qt help: suppresses sidebar search = True # for things like HTML help and Apple help: suppress search + use_index = False + download_support = True # enable download role # This is a class attribute because it is mutated by Sphinx.add_javascript. script_files = ['_static/jquery.js', '_static/underscore.js', - '_static/doctools.js'] + '_static/doctools.js'] # type: List[unicode] # Dito for this one. - css_files = [] + css_files = [] # type: List[unicode] + + imgpath = None # type: unicode + domain_indices = [] # type: List[Tuple[unicode, Index, unicode, bool]] default_sidebars = ['localtoc.html', 'relations.html', 'sourcelink.html', 'searchbox.html'] @@ -93,15 +112,16 @@ class StandaloneHTMLBuilder(Builder): _publisher = None def init(self): + # type: () -> None # a hash of all config values that, if changed, cause a full rebuild - self.config_hash = '' - self.tags_hash = '' + self.config_hash = '' # type: unicode + self.tags_hash = '' # type: unicode # basename of images directory self.imagedir = '_images' # section numbers for headings in the currently visited document - self.secnumbers = {} + self.secnumbers = {} # type: Dict[unicode, Tuple[int, ...]] # currently written docname - self.current_docname = None + self.current_docname = None # type: unicode self.init_templates() self.init_highlighter() @@ -117,8 +137,10 @@ def init(self): if self.config.language is not None: if self._get_translations_js(): self.script_files.append('_static/translations.js') + self.use_index = self.get_builder_config('use_index', 'html') def _get_translations_js(self): + # type: () -> unicode candidates = [path.join(package_dir, 'locale', self.config.language, 'LC_MESSAGES', 'sphinx.js'), path.join(sys.prefix, 'share/sphinx/locale', @@ -132,9 +154,11 @@ def _get_translations_js(self): return None def get_theme_config(self): + # type: () -> Tuple[unicode, Dict] return self.config.html_theme, self.config.html_theme_options def init_templates(self): + # type: () -> None Theme.init_themes(self.confdir, self.config.html_theme_path, warn=self.warn) themename, themeoptions = self.get_theme_config() @@ -144,6 +168,7 @@ def init_templates(self): self.templates.init(self, self.theme) def init_highlighter(self): + # type: () -> None # determine Pygments style and create the highlighter if self.config.pygments_style is not None: style = self.config.pygments_style @@ -155,27 +180,23 @@ def init_highlighter(self): self.config.trim_doctest_flags) def init_translator_class(self): - if self.translator_class is not None: - pass - elif self.config.html_translator_class: - self.translator_class = self.app.import_object( - self.config.html_translator_class, - 'html_translator_class setting') - elif self.config.html_use_smartypants: - self.translator_class = SmartyPantsHTMLTranslator - else: - self.translator_class = HTMLTranslator + # type: () -> None + if self.translator_class is None: + if self.config.html_use_smartypants: + self.translator_class = SmartyPantsHTMLTranslator + else: + self.translator_class = HTMLTranslator - def get_outdated_docs(self): + def get_outdated_docs(self): # type: ignore + # type: () -> Iterator[unicode] cfgdict = dict((name, self.config[name]) for (name, desc) in iteritems(self.config.values) if desc[1] == 'html') self.config_hash = get_stable_hash(cfgdict) - self.tags_hash = get_stable_hash(sorted(self.tags)) + self.tags_hash = get_stable_hash(sorted(self.tags)) # type: ignore old_config_hash = old_tags_hash = '' try: - fp = open(path.join(self.outdir, '.buildinfo')) - try: + with open(path.join(self.outdir, '.buildinfo')) as fp: version = fp.readline() if version.rstrip() != '# Sphinx build info version 1': raise ValueError @@ -186,8 +207,6 @@ def get_outdated_docs(self): tag, old_tags_hash = fp.readline().strip().split(': ') if tag != 'tags': raise ValueError - finally: - fp.close() except ValueError: self.warn('unsupported build info format in %r, building all' % path.join(self.outdir, '.buildinfo')) @@ -222,6 +241,7 @@ def get_outdated_docs(self): pass def render_partial(self, node): + # type: (nodes.Nodes) -> Dict[unicode, unicode] """Utility: Render a lone doctree node.""" if node is None: return {'fragment': ''} @@ -247,6 +267,7 @@ def render_partial(self, node): return pub.writer.parts def prepare_writing(self, docnames): + # type: (Iterable[unicode]) -> nodes.Node # create the search indexer self.indexer = None if self.search: @@ -272,6 +293,7 @@ def prepare_writing(self, docnames): indices_config = self.config.html_domain_indices if indices_config: for domain_name in sorted(self.env.domains): + domain = None # type: Domain domain = self.env.domains[domain_name] for indexcls in domain.indices: indexname = '%s-%s' % (domain.name, indexcls.name) @@ -291,7 +313,9 @@ def prepare_writing(self, docnames): # typically doesn't include the time of day lufmt = self.config.html_last_updated_fmt if lufmt is not None: - self.last_updated = ustrftime(lufmt or _('%b %d, %Y')) + self.last_updated = format_date(lufmt or _('%b %d, %Y'), + language=self.config.language, + warn=self.warn) else: self.last_updated = None @@ -309,9 +333,9 @@ def prepare_writing(self, docnames): self.relations = self.env.collect_relations() rellinks = [] - if self.get_builder_config('use_index', 'html'): + if self.use_index: rellinks.append(('genindex', _('General Index'), 'I', _('index'))) - for indexname, indexcls, content, collapse in self.domain_indices: + for indexname, indexcls, content, collapse in self.domain_indices: # type: ignore # if it has a short name if indexcls.shortname: rellinks.append((indexname, indexcls.localname, @@ -339,6 +363,7 @@ def prepare_writing(self, docnames): show_sphinx = self.config.html_show_sphinx, has_source = self.config.html_copy_source, show_source = self.config.html_show_sourcelink, + sourcelink_suffix = self.config.html_sourcelink_suffix, file_suffix = self.out_suffix, script_files = self.script_files, language = self.config.language, @@ -350,7 +375,7 @@ def prepare_writing(self, docnames): parents = [], logo = logo, favicon = favicon, - ) + ) # type: Dict[unicode, Any] if self.theme: self.globalcontext.update( ('theme_' + key, val) for (key, val) in @@ -358,6 +383,7 @@ def prepare_writing(self, docnames): self.globalcontext.update(self.config.html_context) def get_doc_context(self, docname, body, metatags): + # type: (unicode, unicode, Dict) -> Dict[unicode, Any] """Collect items for the template context of a page.""" # find out relations prev = next = None @@ -402,15 +428,21 @@ def get_doc_context(self, docname, body, metatags): # title rendered as HTML title = self.env.longtitles.get(docname) title = title and self.render_partial(title)['title'] or '' + + # Suffix for the document + source_suffix = path.splitext(self.env.doc2path(docname))[1] + # the name for the copied source - sourcename = self.config.html_copy_source and docname + '.txt' or '' + if self.config.html_copy_source: + sourcename = docname + source_suffix + if source_suffix != self.config.html_sourcelink_suffix: + sourcename += self.config.html_sourcelink_suffix + else: + sourcename = '' # metadata for the document meta = self.env.metadata.get(docname) - # Suffix for the document - source_suffix = '.' + self.env.doc2path(docname).split('.')[-1] - # local TOC and global TOC tree self_toc = self.env.get_toc_for(docname, self) toc = self.render_partial(self_toc)['fragment'] @@ -432,6 +464,7 @@ def get_doc_context(self, docname, body, metatags): ) def write_doc(self, docname, doctree): + # type: (unicode, nodes.Node) -> None destination = StringOutput(encoding='utf-8') doctree.settings = self.docsettings @@ -449,6 +482,7 @@ def write_doc(self, docname, doctree): self.handle_page(docname, ctx, event_arg=doctree) def write_doc_serialized(self, docname, doctree): + # type: (unicode, nodes.Node) -> None self.imgpath = relative_uri(self.get_target_uri(docname), self.imagedir) self.post_process_images(doctree) title = self.env.longtitles.get(docname) @@ -456,6 +490,7 @@ def write_doc_serialized(self, docname, doctree): self.index_page(docname, doctree, title) def finish(self): + # type: () -> None self.finish_tasks.add_task(self.gen_indices) self.finish_tasks.add_task(self.gen_additional_pages) self.finish_tasks.add_task(self.copy_image_files) @@ -468,10 +503,11 @@ def finish(self): self.handle_finish() def gen_indices(self): + # type: () -> None self.info(bold('generating indices...'), nonl=1) # the global general index - if self.get_builder_config('use_index', 'html'): + if self.use_index: self.write_genindex() # the global domain-specific indices @@ -480,6 +516,7 @@ def gen_indices(self): self.info() def gen_additional_pages(self): + # type: () -> None # pages from extensions for pagelist in self.app.emit('html-collect-pages'): for pagename, context, template in pagelist: @@ -506,13 +543,14 @@ def gen_additional_pages(self): self.info() def write_genindex(self): + # type: () -> None # the total count of lines for each index letter, used to distribute # the entries into two columns genindex = self.env.create_index(self) indexcounts = [] for _k, entries in genindex: indexcounts.append(sum(1 + len(subitems) - for _, (_, subitems) in entries)) + for _, (_, subitems, _) in entries)) genindexcontext = dict( genindexentries = genindex, @@ -535,6 +573,7 @@ def write_genindex(self): self.handle_page('genindex', genindexcontext, 'genindex.html') def write_domain_indices(self): + # type: () -> None for indexname, indexcls, content, collapse in self.domain_indices: indexcontext = dict( indextitle = indexcls.localname, @@ -545,6 +584,7 @@ def write_domain_indices(self): self.handle_page(indexname, indexcontext, 'domainindex.html') def copy_image_files(self): + # type: () -> None # copy image files if self.images: ensuredir(path.join(self.outdir, self.imagedir)) @@ -559,6 +599,7 @@ def copy_image_files(self): (path.join(self.srcdir, src), err)) def copy_download_files(self): + # type: () -> None def to_relpath(f): return relative_path(self.srcdir, f) # copy downloadable files @@ -577,13 +618,13 @@ def to_relpath(f): (path.join(self.srcdir, src), err)) def copy_static_files(self): + # type: () -> None # copy static files self.info(bold('copying static files... '), nonl=True) ensuredir(path.join(self.outdir, '_static')) # first, create pygments style file - f = open(path.join(self.outdir, '_static', 'pygments.css'), 'w') - f.write(self.highlighter.get_stylesheet()) - f.close() + with open(path.join(self.outdir, '_static', 'pygments.css'), 'w') as f: + f.write(self.highlighter.get_stylesheet()) # then, copy translations JavaScript file if self.config.language is not None: jsfile = self._get_translations_js() @@ -605,21 +646,19 @@ def copy_static_files(self): # then, copy over theme-supplied static files if self.theme: - themeentries = [path.join(themepath, 'static') - for themepath in self.theme.get_dirchain()[::-1]] - for entry in themeentries: - copy_static_entry(entry, path.join(self.outdir, '_static'), - self, ctx) + for theme_path in self.theme.get_dirchain()[::-1]: + entry = path.join(theme_path, 'static') + copy_asset(entry, path.join(self.outdir, '_static'), excluded=DOTFILES, + context=ctx, renderer=self.templates) # then, copy over all user-supplied static files - staticentries = [path.join(self.confdir, spath) - for spath in self.config.html_static_path] - matchers = compile_matchers(self.config.exclude_patterns) - for entry in staticentries: + excluded = Matcher(self.config.exclude_patterns + ["**/.*"]) + for static_path in self.config.html_static_path: + entry = path.join(self.confdir, static_path) if not path.exists(entry): self.warn('html_static_path entry %r does not exist' % entry) continue - copy_static_entry(entry, path.join(self.outdir, '_static'), self, - ctx, exclude_matchers=matchers) + copy_asset(entry, path.join(self.outdir, '_static'), excluded, + context=ctx, renderer=self.templates) # copy logo and favicon files if not already in static path if self.config.html_logo: logobase = path.basename(self.config.html_logo) @@ -640,41 +679,44 @@ def copy_static_files(self): self.info('done') def copy_extra_files(self): + # type: () -> None # copy html_extra_path files self.info(bold('copying extra files... '), nonl=True) - extraentries = [path.join(self.confdir, epath) - for epath in self.config.html_extra_path] - for entry in extraentries: + excluded = Matcher(self.config.exclude_patterns) + + for extra_path in self.config.html_extra_path: + entry = path.join(self.confdir, extra_path) if not path.exists(entry): self.warn('html_extra_path entry %r does not exist' % entry) continue - copy_static_entry(entry, self.outdir, self) + + copy_asset(entry, self.outdir, excluded) self.info('done') def write_buildinfo(self): + # type: () -> None # write build info file - fp = open(path.join(self.outdir, '.buildinfo'), 'w') - try: + with open(path.join(self.outdir, '.buildinfo'), 'w') as fp: fp.write('# Sphinx build info version 1\n' '# This file hashes the configuration used when building' ' these files. When it is not found, a full rebuild will' ' be done.\nconfig: %s\ntags: %s\n' % (self.config_hash, self.tags_hash)) - finally: - fp.close() def cleanup(self): + # type: () -> None # clean up theme stuff if self.theme: self.theme.cleanup() def post_process_images(self, doctree): + # type: (nodes.Node) -> None """Pick the best candidate for an image and link down-scaled images to their high res version. """ Builder.post_process_images(self, doctree) - if self.config.html_scaled_image_link: + if self.config.html_scaled_image_link and self.html_scaled_image_link: for node in doctree.traverse(nodes.image): scale_keys = ('scale', 'width', 'height') if not any((key in node) for key in scale_keys) or \ @@ -694,17 +736,16 @@ def post_process_images(self, doctree): reference.append(node) def load_indexer(self, docnames): + # type: (Set[unicode]) -> None keep = set(self.env.all_docs) - set(docnames) try: searchindexfn = path.join(self.outdir, self.searchindex_filename) if self.indexer_dumps_unicode: - f = codecs.open(searchindexfn, 'r', encoding='utf-8') + f = codecs.open(searchindexfn, 'r', encoding='utf-8') # type: ignore else: - f = open(searchindexfn, 'rb') - try: - self.indexer.load(f, self.indexer_format) - finally: - f.close() + f = open(searchindexfn, 'rb') # type: ignore + with f: + self.indexer.load(f, self.indexer_format) # type: ignore except (IOError, OSError, ValueError): if keep: self.warn('search index couldn\'t be loaded, but not all ' @@ -714,20 +755,29 @@ def load_indexer(self, docnames): self.indexer.prune(keep) def index_page(self, pagename, doctree, title): + # type: (unicode, nodes.Node, unicode) -> None # only index pages with title if self.indexer is not None and title: - self.indexer.feed(pagename, title, doctree) + filename = self.env.doc2path(pagename, base=None) + try: + self.indexer.feed(pagename, filename, title, doctree) + except TypeError: + # fallback for old search-adapters + self.indexer.feed(pagename, title, doctree) def _get_local_toctree(self, docname, collapse=True, **kwds): + # type: (unicode, bool, Any) -> unicode if 'includehidden' not in kwds: kwds['includehidden'] = False return self.render_partial(self.env.get_toctree_for( docname, self, collapse, **kwds))['fragment'] def get_outfilename(self, pagename): + # type: (unicode) -> unicode return path.join(self.outdir, os_path(pagename) + self.out_suffix) def add_sidebars(self, pagename, ctx): + # type: (unicode, Dict) -> None def has_wildcard(pattern): return any(char in pattern for char in '*?[') sidebars = None @@ -760,11 +810,14 @@ def has_wildcard(pattern): # --------- these are overwritten by the serialization builder def get_target_uri(self, docname, typ=None): + # type: (unicode, unicode) -> unicode return docname + self.link_suffix def handle_page(self, pagename, addctx, templatename='page.html', outfilename=None, event_arg=None): + # type: (unicode, Dict, unicode, unicode, Any) -> None ctx = self.globalcontext.copy() + ctx['warn'] = self.warn # current_page_name is backwards compatibility ctx['pagename'] = ctx['current_page_name'] = pagename default_baseuri = self.get_target_uri(pagename) @@ -779,9 +832,21 @@ def pathto(otheruri, resource=False, baseuri=default_baseuri): elif not resource: otheruri = self.get_target_uri(otheruri) uri = relative_uri(baseuri, otheruri) or '#' + if uri == '#' and not self.allow_sharp_as_current_path: + uri = baseuri return uri ctx['pathto'] = pathto - ctx['hasdoc'] = lambda name: name in self.env.all_docs + + def hasdoc(name): + if name in self.env.all_docs: + return True + elif name == 'search' and self.search: + return True + elif name == 'genindex' and self.get_builder_config('use_index', 'html'): + return True + return False + ctx['hasdoc'] = hasdoc + if self.name != 'htmlhelp': ctx['encoding'] = encoding = self.config.html_output_encoding else: @@ -808,11 +873,8 @@ def pathto(otheruri, resource=False, baseuri=default_baseuri): # outfilename's path is in general different from self.outdir ensuredir(path.dirname(outfilename)) try: - f = codecs.open(outfilename, 'w', encoding, 'xmlcharrefreplace') - try: + with codecs.open(outfilename, 'w', encoding, 'xmlcharrefreplace') as f: # type: ignore # NOQA f.write(output) - finally: - f.close() except (IOError, OSError) as err: self.warn("error writing file %s: %s" % (outfilename, err)) if self.copysource and ctx.get('sourcename'): @@ -823,14 +885,15 @@ def pathto(otheruri, resource=False, baseuri=default_baseuri): copyfile(self.env.doc2path(pagename), source_name) def handle_finish(self): + # type: () -> None if self.indexer: self.finish_tasks.add_task(self.dump_search_index) self.finish_tasks.add_task(self.dump_inventory) def dump_inventory(self): + # type: () -> None self.info(bold('dumping object inventory... '), nonl=True) - f = open(path.join(self.outdir, INVENTORY_FILENAME), 'wb') - try: + with open(path.join(self.outdir, INVENTORY_FILENAME), 'wb') as f: f.write((u'# Sphinx inventory version 2\n' u'# Project: %s\n' u'# Version: %s\n' @@ -852,11 +915,10 @@ def dump_inventory(self): (u'%s %s:%s %s %s %s\n' % (name, domainname, type, prio, uri, dispname)).encode('utf-8'))) f.write(compressor.flush()) - finally: - f.close() self.info('done') def dump_search_index(self): + # type: () -> None self.info( bold('dumping search index in %s ... ' % self.indexer.label()), nonl=True) @@ -865,13 +927,11 @@ def dump_search_index(self): # first write to a temporary file, so that if dumping fails, # the existing index won't be overwritten if self.indexer_dumps_unicode: - f = codecs.open(searchindexfn + '.tmp', 'w', encoding='utf-8') + f = codecs.open(searchindexfn + '.tmp', 'w', encoding='utf-8') # type: ignore else: - f = open(searchindexfn + '.tmp', 'wb') - try: - self.indexer.dump(f, self.indexer_format) - finally: - f.close() + f = open(searchindexfn + '.tmp', 'wb') # type: ignore + with f: + self.indexer.dump(f, self.indexer_format) # type: ignore movefile(searchindexfn + '.tmp', searchindexfn) self.info('done') @@ -885,6 +945,7 @@ class DirectoryHTMLBuilder(StandaloneHTMLBuilder): name = 'dirhtml' def get_target_uri(self, docname, typ=None): + # type: (unicode, unicode) -> unicode if docname == 'index': return '' if docname.endswith(SEP + 'index'): @@ -892,6 +953,7 @@ def get_target_uri(self, docname, typ=None): return docname + SEP def get_outfilename(self, pagename): + # type: (unicode) -> unicode if pagename == 'index' or pagename.endswith(SEP + 'index'): outfilename = path.join(self.outdir, os_path(pagename) + self.out_suffix) @@ -902,6 +964,7 @@ def get_outfilename(self, pagename): return outfilename def prepare_writing(self, docnames): + # type: (Iterable[unicode]) -> None StandaloneHTMLBuilder.prepare_writing(self, docnames) self.globalcontext['no_search_suffix'] = True @@ -914,10 +977,12 @@ class SingleFileHTMLBuilder(StandaloneHTMLBuilder): name = 'singlehtml' copysource = False - def get_outdated_docs(self): + def get_outdated_docs(self): # type: ignore + # type: () -> Union[unicode, List[unicode]] return 'all documents' def get_target_uri(self, docname, typ=None): + # type: (unicode, unicode) -> unicode if docname in self.env.all_docs: # all references are on the same page... return self.config.master_doc + self.out_suffix + \ @@ -927,10 +992,12 @@ def get_target_uri(self, docname, typ=None): return docname + self.out_suffix def get_relative_uri(self, from_, to, typ=None): + # type: (unicode, unicode, unicode) -> unicode # ignore source return self.get_target_uri(to, typ) def fix_refuris(self, tree): + # type: (nodes.Node) -> None # fix refuris with double anchor fname = self.config.master_doc + self.out_suffix for refnode in tree.traverse(nodes.reference): @@ -944,7 +1011,16 @@ def fix_refuris(self, tree): if hashindex >= 0: refnode['refuri'] = fname + refuri[hashindex:] + def _get_local_toctree(self, docname, collapse=True, **kwds): + # type: (unicode, bool, Any) -> unicode + if 'includehidden' not in kwds: + kwds['includehidden'] = False + toctree = self.env.get_toctree_for(docname, self, collapse, **kwds) + self.fix_refuris(toctree) + return self.render_partial(toctree)['fragment'] + def assemble_doctree(self): + # type: () -> nodes.Node master = self.config.master_doc tree = self.env.get_doctree(master) tree = inline_all_toctrees(self, set(), master, tree, darkgreen, [master]) @@ -954,6 +1030,7 @@ def assemble_doctree(self): return tree def assemble_toc_secnumbers(self): + # type: () -> Dict[unicode, Dict[Tuple[unicode, unicode], Tuple[int, ...]]] # Assemble toc_secnumbers to resolve section numbers on SingleHTML. # Merge all secnumbers to single secnumber. # @@ -970,9 +1047,31 @@ def assemble_toc_secnumbers(self): return {self.config.master_doc: new_secnumbers} + def assemble_toc_fignumbers(self): + # type: () -> Dict[unicode, Dict[Tuple[unicode, unicode], Dict[unicode, Tuple[int, ...]]]] # NOQA + # Assemble toc_fignumbers to resolve figure numbers on SingleHTML. + # Merge all fignumbers to single fignumber. + # + # Note: current Sphinx has refid confliction in singlehtml mode. + # To avoid the problem, it replaces key of secnumbers to + # tuple of docname and refid. + # + # There are related codes in inline_all_toctres() and + # HTMLTranslter#add_fignumber(). + new_fignumbers = {} # type: Dict[Tuple[unicode, unicode], Dict[unicode, Tuple[int, ...]]] # NOQA + # {u'foo': {'figure': {'id2': (2,), 'id1': (1,)}}, u'bar': {'figure': {'id1': (3,)}}} + for docname, fignumlist in iteritems(self.env.toc_fignumbers): + for figtype, fignums in iteritems(fignumlist): + new_fignumbers.setdefault((docname, figtype), {}) + for id, fignum in iteritems(fignums): + new_fignumbers[(docname, figtype)][id] = fignum + + return {self.config.master_doc: new_fignumbers} + def get_doc_context(self, docname, body, metatags): + # type: (unicode, unicode, Dict) -> Dict # no relation links... - toc = self.env.get_toctree_for(self.config.master_doc, self, False) + toc = self.env.get_toctree_for(self.config.master_doc, self, False) # type: Any # if there is no toctree, toc is None if toc: self.fix_refuris(toc) @@ -997,6 +1096,7 @@ def get_doc_context(self, docname, body, metatags): ) def write(self, *ignored): + # type: (Any) -> None docnames = self.env.all_docs self.info(bold('preparing documents... '), nonl=True) @@ -1006,6 +1106,7 @@ def write(self, *ignored): self.info(bold('assembling single document... '), nonl=True) doctree = self.assemble_doctree() self.env.toc_secnumbers = self.assemble_toc_secnumbers() + self.env.toc_fignumbers = self.assemble_toc_fignumbers() self.info() self.info(bold('writing... '), nonl=True) self.write_doc_serialized(self.config.master_doc, doctree) @@ -1013,6 +1114,7 @@ def write(self, *ignored): self.info('done') def finish(self): + # type: () -> None # no indices or search pages are supported self.info(bold('writing additional files...'), nonl=1) @@ -1043,27 +1145,32 @@ class SerializingHTMLBuilder(StandaloneHTMLBuilder): #: the serializing implementation to use. Set this to a module that #: implements a `dump`, `load`, `dumps` and `loads` functions #: (pickle, simplejson etc.) - implementation = None + implementation = None # type: Any implementation_dumps_unicode = False #: additional arguments for dump() additional_dump_args = () #: the filename for the global context file - globalcontext_filename = None + globalcontext_filename = None # type: unicode supported_image_types = ['image/svg+xml', 'image/png', 'image/gif', 'image/jpeg'] def init(self): + # type: () -> None self.config_hash = '' self.tags_hash = '' self.imagedir = '_images' + self.current_docname = None self.theme = None # no theme necessary self.templates = None # no template bridge necessary self.init_translator_class() + self.init_templates() self.init_highlighter() + self.use_index = self.get_builder_config('use_index', 'html') def get_target_uri(self, docname, typ=None): + # type: (unicode, unicode) -> unicode if docname == 'index': return '' if docname.endswith(SEP + 'index'): @@ -1071,17 +1178,17 @@ def get_target_uri(self, docname, typ=None): return docname + SEP def dump_context(self, context, filename): + # type: (Dict, unicode) -> None if self.implementation_dumps_unicode: - f = codecs.open(filename, 'w', encoding='utf-8') + f = codecs.open(filename, 'w', encoding='utf-8') # type: ignore else: - f = open(filename, 'wb') - try: + f = open(filename, 'wb') # type: ignore + with f: self.implementation.dump(context, f, *self.additional_dump_args) - finally: - f.close() def handle_page(self, pagename, ctx, templatename='page.html', outfilename=None, event_arg=None): + # type: (unicode, Dict, unicode, unicode, Any) -> None ctx['current_page_name'] = pagename self.add_sidebars(pagename, ctx) @@ -1105,6 +1212,7 @@ def handle_page(self, pagename, ctx, templatename='page.html', copyfile(self.env.doc2path(pagename), source_name) def handle_finish(self): + # type: () -> None # dump the global context outfilename = path.join(self.outdir, self.globalcontext_filename) self.dump_context(self.globalcontext, outfilename) @@ -1136,6 +1244,7 @@ class PickleHTMLBuilder(SerializingHTMLBuilder): globalcontext_filename = 'globalcontext.pickle' searchindex_filename = 'searchindex.pickle' + # compatibility alias WebHTMLBuilder = PickleHTMLBuilder @@ -1154,4 +1263,63 @@ class JSONHTMLBuilder(SerializingHTMLBuilder): searchindex_filename = 'searchindex.json' def init(self): + # type: () -> None SerializingHTMLBuilder.init(self) + + +def validate_config_values(app): + # type: (Sphinx) -> None + if app.config.html_translator_class: + app.warn('html_translator_class is deprecated. ' + 'Use Sphinx.set_translator() API instead.') + + +def setup(app): + # type: (Sphinx) -> None + # builders + app.add_builder(StandaloneHTMLBuilder) + app.add_builder(DirectoryHTMLBuilder) + app.add_builder(SingleFileHTMLBuilder) + app.add_builder(PickleHTMLBuilder) + app.add_builder(JSONHTMLBuilder) + + app.connect('builder-inited', validate_config_values) + + # config values + app.add_config_value('html_theme', 'alabaster', 'html') + app.add_config_value('html_theme_path', [], 'html') + app.add_config_value('html_theme_options', {}, 'html') + app.add_config_value('html_title', + lambda self: l_('%s %s documentation') % (self.project, self.release), + 'html', string_classes) + app.add_config_value('html_short_title', lambda self: self.html_title, 'html') + app.add_config_value('html_style', None, 'html', string_classes) + app.add_config_value('html_logo', None, 'html', string_classes) + app.add_config_value('html_favicon', None, 'html', string_classes) + app.add_config_value('html_static_path', [], 'html') + app.add_config_value('html_extra_path', [], 'html') + app.add_config_value('html_last_updated_fmt', None, 'html', string_classes) + app.add_config_value('html_use_smartypants', True, 'html') + app.add_config_value('html_sidebars', {}, 'html') + app.add_config_value('html_additional_pages', {}, 'html') + app.add_config_value('html_use_modindex', True, 'html') # deprecated + app.add_config_value('html_domain_indices', True, 'html', [list]) + app.add_config_value('html_add_permalinks', u'\u00B6', 'html') + app.add_config_value('html_use_index', True, 'html') + app.add_config_value('html_split_index', False, 'html') + app.add_config_value('html_copy_source', True, 'html') + app.add_config_value('html_show_sourcelink', True, 'html') + app.add_config_value('html_sourcelink_suffix', '.txt', 'html') + app.add_config_value('html_use_opensearch', '', 'html') + app.add_config_value('html_file_suffix', None, 'html', string_classes) + app.add_config_value('html_link_suffix', None, 'html', string_classes) + app.add_config_value('html_show_copyright', True, 'html') + app.add_config_value('html_show_sphinx', True, 'html') + app.add_config_value('html_context', {}, 'html') + app.add_config_value('html_output_encoding', 'utf-8', 'html') + app.add_config_value('html_compact_lists', True, 'html') + app.add_config_value('html_secnumber_suffix', '. ', 'html') + app.add_config_value('html_search_language', None, 'html', string_classes) + app.add_config_value('html_search_options', {}, 'html') + app.add_config_value('html_search_scorer', '', None) + app.add_config_value('html_scaled_image_link', True, 'html') diff --git a/sphinx/builders/htmlhelp.py b/sphinx/builders/htmlhelp.py index 9a21fb15bee..ecc752b6060 100644 --- a/sphinx/builders/htmlhelp.py +++ b/sphinx/builders/htmlhelp.py @@ -6,7 +6,7 @@ Build HTML help support files. Parts adapted from Python's Doc/tools/prechm.py. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import print_function @@ -18,6 +18,7 @@ from docutils import nodes from sphinx import addnodes +from sphinx.util.osutil import make_filename from sphinx.builders.html import StandaloneHTMLBuilder from sphinx.util.pycompat import htmlescape @@ -63,7 +64,7 @@ Compiled file=%(outname)s.chm Contents file=%(outname)s.hhc Default Window=%(outname)s -Default topic=index.html +Default topic=%(master_doc)s Display compile progress=No Full text search stop list file=%(outname)s.stp Full-text search=Yes @@ -73,7 +74,7 @@ [WINDOWS] %(outname)s="%(title)s","%(outname)s.hhc","%(outname)s.hhk",\ -"index.html","index.html",,,,,0x63520,220,0x10384e,[0,0,1024,768],,,,,,,0 +"%(master_doc)s","%(master_doc)s",,,,,0x63520,220,0x10384e,[0,0,1024,768],,,,,,,0 [FILES] ''' @@ -183,6 +184,7 @@ def init(self): StandaloneHTMLBuilder.init(self) # the output files for HTML help must be .html only self.out_suffix = '.html' + self.link_suffix = '.html' # determine the correct locale setting locale = chm_locales.get(self.config.language) if locale is not None: @@ -196,23 +198,30 @@ def open_file(self, outdir, basename, mode='w'): def handle_finish(self): self.build_hhx(self.outdir, self.config.htmlhelp_basename) + def write_doc(self, docname, doctree): + for node in doctree.traverse(nodes.reference): + # add ``target=_blank`` attributes to external links + if node.get('internal') is None and 'refuri' in node: + node['target'] = '_blank' + + StandaloneHTMLBuilder.write_doc(self, docname, doctree) + def build_hhx(self, outdir, outname): self.info('dumping stopword list...') - f = self.open_file(outdir, outname+'.stp') - try: + with self.open_file(outdir, outname+'.stp') as f: for word in sorted(stopwords): print(word, file=f) - finally: - f.close() self.info('writing project file...') - f = self.open_file(outdir, outname+'.hhp') - try: - f.write(project_template % {'outname': outname, - 'title': self.config.html_title, - 'version': self.config.version, - 'project': self.config.project, - 'lcid': self.lcid}) + with self.open_file(outdir, outname+'.hhp') as f: + f.write(project_template % { + 'outname': outname, + 'title': self.config.html_title, + 'version': self.config.version, + 'project': self.config.project, + 'lcid': self.lcid, + 'master_doc': self.config.master_doc + self.out_suffix + }) if not outdir.endswith(os.sep): outdir += os.sep olen = len(outdir) @@ -223,16 +232,13 @@ def build_hhx(self, outdir, outname): fn.endswith('.html'): print(path.join(root, fn)[olen:].replace(os.sep, '\\'), file=f) - finally: - f.close() self.info('writing TOC file...') - f = self.open_file(outdir, outname+'.hhc') - try: + with self.open_file(outdir, outname+'.hhc') as f: f.write(contents_header) # special books f.write('
  • ' + object_sitemap % (self.config.html_short_title, - 'index.html')) + self.config.master_doc + self.out_suffix)) for indexname, indexcls, content, collapse in self.domain_indices: f.write('
  • ' + object_sitemap % (indexcls.localname, '%s.html' % indexname)) @@ -266,13 +272,10 @@ def istoctree(node): for node in tocdoc.traverse(istoctree): write_toc(node) f.write(contents_footer) - finally: - f.close() self.info('writing index file...') index = self.env.create_index(self) - f = self.open_file(outdir, outname+'.hhk') - try: + with self.open_file(outdir, outname+'.hhk') as f: f.write('
      \n') def write_index(title, refs, subitems): @@ -299,8 +302,13 @@ def write_param(name, value): write_index(subitem[0], subitem[1], []) f.write('
    ') for (key, group) in index: - for title, (refs, subitems) in group: + for title, (refs, subitems, key_) in group: write_index(title, refs, subitems) f.write('\n') - finally: - f.close() + + +def setup(app): + app.setup_extension('sphinx.builders.html') + app.add_builder(HTMLHelpBuilder) + + app.add_config_value('htmlhelp_basename', lambda self: make_filename(self.project), None) diff --git a/sphinx/builders/latex.py b/sphinx/builders/latex.py index 1eef58d6634..92eb39b7438 100644 --- a/sphinx/builders/latex.py +++ b/sphinx/builders/latex.py @@ -5,7 +5,7 @@ LaTeX builder. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -13,21 +13,30 @@ from os import path from six import iteritems + from docutils import nodes from docutils.io import FileOutput from docutils.utils import new_document from docutils.frontend import OptionParser -from sphinx import package_dir, addnodes +from sphinx import package_dir, addnodes, highlighting from sphinx.util import texescape +from sphinx.config import string_classes, ENUM +from sphinx.errors import SphinxError from sphinx.locale import _ from sphinx.builders import Builder from sphinx.environment import NoUri from sphinx.util.nodes import inline_all_toctrees -from sphinx.util.osutil import SEP, copyfile -from sphinx.util.console import bold, darkgreen +from sphinx.util.fileutil import copy_asset_file +from sphinx.util.osutil import SEP, make_filename +from sphinx.util.console import bold, darkgreen # type: ignore from sphinx.writers.latex import LaTeXWriter +if False: + # For type annotation + from typing import Any, Iterable, Tuple, Union # NOQA + from sphinx.application import Sphinx # NOQA + class LaTeXBuilder(Builder): """ @@ -35,48 +44,64 @@ class LaTeXBuilder(Builder): """ name = 'latex' format = 'latex' - supported_image_types = ['application/pdf', 'image/png', - 'image/gif', 'image/jpeg'] - usepackages = [] + supported_image_types = ['application/pdf', 'image/png', 'image/jpeg'] def init(self): - self.docnames = [] - self.document_data = [] + # type: () -> None + self.docnames = [] # type: Iterable[unicode] + self.document_data = [] # type: List[Tuple[unicode, unicode, unicode, unicode, unicode, bool]] # NOQA + self.usepackages = [] # type: List[unicode] texescape.init() def get_outdated_docs(self): + # type: () -> Union[unicode, List[unicode]] return 'all documents' # for now def get_target_uri(self, docname, typ=None): + # type: (unicode, unicode) -> unicode if docname not in self.docnames: raise NoUri else: return '%' + docname def get_relative_uri(self, from_, to, typ=None): + # type: (unicode, unicode, unicode) -> unicode # ignore source path return self.get_target_uri(to, typ) def init_document_data(self): + # type: () -> None preliminary_document_data = [list(x) for x in self.config.latex_documents] if not preliminary_document_data: self.warn('no "latex_documents" config value found; no documents ' 'will be written') return # assign subdirs to titles - self.titles = [] + self.titles = [] # type: List[Tuple[unicode, unicode]] for entry in preliminary_document_data: docname = entry[0] if docname not in self.env.all_docs: self.warn('"latex_documents" config value references unknown ' 'document %s' % docname) continue - self.document_data.append(entry) + self.document_data.append(entry) # type: ignore if docname.endswith(SEP+'index'): docname = docname[:-5] self.titles.append((docname, entry[2])) + def write_stylesheet(self): + # type: () -> None + highlighter = highlighting.PygmentsBridge( + 'latex', self.config.pygments_style, self.config.trim_doctest_flags) + stylesheet = path.join(self.outdir, 'sphinxhighlight.sty') + with open(stylesheet, 'w') as f: + f.write('\\NeedsTeXFormat{LaTeX2e}[1995/12/01]\n') + f.write('\\ProvidesPackage{sphinxhighlight}' + '[2016/05/29 stylesheet for highlighting with pygments]\n\n') + f.write(highlighter.get_stylesheet()) + def write(self, *ignored): + # type: (Any) -> None docwriter = LaTeXWriter(self) docsettings = OptionParser( defaults=self.env.settings, @@ -84,6 +109,7 @@ def write(self, *ignored): read_config_files=True).get_default_values() self.init_document_data() + self.write_stylesheet() for entry in self.document_data: docname, targetname, title, author, docclass = entry[:5] @@ -94,9 +120,18 @@ def write(self, *ignored): destination_path=path.join(self.outdir, targetname), encoding='utf-8') self.info("processing " + targetname + "... ", nonl=1) + toctrees = self.env.get_doctree(docname).traverse(addnodes.toctree) + if toctrees: + if toctrees[0].get('maxdepth') > 0: + tocdepth = toctrees[0].get('maxdepth') + else: + tocdepth = None + else: + tocdepth = None doctree = self.assemble_doctree( docname, toctree_only, appendices=((docclass != 'howto') and self.config.latex_appendices or [])) + doctree['tocdepth'] = tocdepth self.post_process_images(doctree) self.info("writing... ", nonl=1) doctree.settings = docsettings @@ -109,16 +144,18 @@ def write(self, *ignored): self.info("done") def get_contentsname(self, indexfile): + # type: (unicode) -> unicode tree = self.env.get_doctree(indexfile) contentsname = None for toctree in tree.traverse(addnodes.toctree): - if toctree['caption']: + if 'caption' in toctree: contentsname = toctree['caption'] break return contentsname def assemble_doctree(self, indexfile, toctree_only, appendices): + # type: (unicode, bool, List[unicode]) -> nodes.Node self.docnames = set([indexfile] + appendices) self.info(darkgreen(indexfile) + " ", nonl=1) tree = self.env.get_doctree(indexfile) @@ -162,35 +199,126 @@ def assemble_doctree(self, indexfile, toctree_only, appendices): return largetree def finish(self): + # type: () -> None # copy image files if self.images: self.info(bold('copying images...'), nonl=1) for src, dest in iteritems(self.images): self.info(' '+src, nonl=1) - copyfile(path.join(self.srcdir, src), - path.join(self.outdir, dest)) + copy_asset_file(path.join(self.srcdir, src), + path.join(self.outdir, dest)) self.info() # copy TeX support files from texinputs + context = {'latex_engine': self.config.latex_engine} self.info(bold('copying TeX support files...')) staticdirname = path.join(package_dir, 'texinputs') for filename in os.listdir(staticdirname): if not filename.startswith('.'): - copyfile(path.join(staticdirname, filename), - path.join(self.outdir, filename)) + copy_asset_file(path.join(staticdirname, filename), + self.outdir, context=context) # copy additional files if self.config.latex_additional_files: self.info(bold('copying additional files...'), nonl=1) for filename in self.config.latex_additional_files: self.info(' '+filename, nonl=1) - copyfile(path.join(self.confdir, filename), - path.join(self.outdir, path.basename(filename))) + copy_asset_file(path.join(self.confdir, filename), self.outdir) self.info() # the logo is handled differently if self.config.latex_logo: - logobase = path.basename(self.config.latex_logo) - copyfile(path.join(self.confdir, self.config.latex_logo), - path.join(self.outdir, logobase)) + if not path.isfile(path.join(self.confdir, self.config.latex_logo)): + raise SphinxError('logo file %r does not exist' % self.config.latex_logo) + else: + copy_asset_file(path.join(self.confdir, self.config.latex_logo), self.outdir) self.info('done') + + +def validate_config_values(app): + # type: (Sphinx) -> None + if app.config.latex_toplevel_sectioning not in (None, 'part', 'chapter', 'section'): + app.warn('invalid latex_toplevel_sectioning, ignored: %s' % + app.config.latex_toplevel_sectioning) + app.config.latex_toplevel_sectioning = None # type: ignore + + if app.config.latex_use_parts: + if app.config.latex_toplevel_sectioning: + app.warn('latex_use_parts conflicts with latex_toplevel_sectioning, ignored.') + else: + app.warn('latex_use_parts is deprecated. Use latex_toplevel_sectioning instead.') + app.config.latex_toplevel_sectioning = 'parts' # type: ignore + + if app.config.latex_use_modindex is not True: # changed by user + app.warn('latex_use_modeindex is deprecated. Use latex_domain_indices instead.') + + if app.config.latex_preamble: + if app.config.latex_elements.get('preamble'): + app.warn("latex_preamble conflicts with latex_elements['preamble'], ignored.") + else: + app.warn("latex_preamble is deprecated. Use latex_elements['preamble'] instead.") + app.config.latex_elements['preamble'] = app.config.latex_preamble + + if app.config.latex_paper_size != 'letter': + if app.config.latex_elements.get('papersize'): + app.warn("latex_paper_size conflicts with latex_elements['papersize'], ignored.") + else: + app.warn("latex_paper_size is deprecated. " + "Use latex_elements['papersize'] instead.") + if app.config.latex_paper_size: + app.config.latex_elements['papersize'] = app.config.latex_paper_size + 'paper' + + if app.config.latex_font_size != '10pt': + if app.config.latex_elements.get('pointsize'): + app.warn("latex_font_size conflicts with latex_elements['pointsize'], ignored.") + else: + app.warn("latex_font_size is deprecated. Use latex_elements['pointsize'] instead.") + app.config.latex_elements['pointsize'] = app.config.latex_font_size + + if 'footer' in app.config.latex_elements: + if 'postamble' in app.config.latex_elements: + app.warn("latex_elements['footer'] conflicts with " + "latex_elements['postamble'], ignored.") + else: + app.warn("latex_elements['footer'] is deprecated. " + "Use latex_elements['preamble'] instead.") + app.config.latex_elements['postamble'] = app.config.latex_elements['footer'] + + +def setup(app): + # type: (Sphinx) -> None + app.add_builder(LaTeXBuilder) + app.connect('builder-inited', validate_config_values) + + app.add_config_value('latex_engine', + lambda self: 'pdflatex' if self.language != 'ja' else 'platex', + None, + ENUM('pdflatex', 'xelatex', 'lualatex', 'platex')) + app.add_config_value('latex_documents', + lambda self: [(self.master_doc, make_filename(self.project) + '.tex', + self.project, '', 'manual')], + None) + app.add_config_value('latex_logo', None, None, string_classes) + app.add_config_value('latex_appendices', [], None) + app.add_config_value('latex_keep_old_macro_names', True, None) + # now deprecated - use latex_toplevel_sectioning + app.add_config_value('latex_use_parts', False, None) + app.add_config_value('latex_toplevel_sectioning', None, None, [str]) + app.add_config_value('latex_use_modindex', True, None) # deprecated + app.add_config_value('latex_domain_indices', True, None, [list]) + app.add_config_value('latex_show_urls', 'no', None) + app.add_config_value('latex_show_pagerefs', False, None) + # paper_size and font_size are still separate values + # so that you can give them easily on the command line + app.add_config_value('latex_paper_size', 'letter', None) + app.add_config_value('latex_font_size', '10pt', None) + app.add_config_value('latex_elements', {}, None) + app.add_config_value('latex_additional_files', [], None) + + japanese_default = {'manual': 'jsbook', + 'howto': 'jreport'} + app.add_config_value('latex_docclass', + lambda self: japanese_default if self.language == 'ja' else {}, + None) + # now deprecated - use latex_elements + app.add_config_value('latex_preamble', '', None) diff --git a/sphinx/builders/linkcheck.py b/sphinx/builders/linkcheck.py index b05c5b2e0ef..83670937564 100644 --- a/sphinx/builders/linkcheck.py +++ b/sphinx/builders/linkcheck.py @@ -5,7 +5,7 @@ The CheckExternalLinksBuilder class. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -15,11 +15,11 @@ import threading from os import path -from six.moves import queue -from six.moves.urllib.request import build_opener, Request, HTTPRedirectHandler -from six.moves.urllib.parse import unquote, urlsplit, quote -from six.moves.urllib.error import HTTPError +from requests.exceptions import HTTPError +from six.moves import queue # type: ignore +from six.moves.urllib.parse import unquote from six.moves.html_parser import HTMLParser + from docutils import nodes # 2015-06-25 barry@python.org. This exception was deprecated in Python 3.3 and @@ -27,65 +27,56 @@ # going to just remove it. If it doesn't exist, define an exception that will # never be caught but leaves the code in check_anchor() intact. try: - from six.moves.html_parser import HTMLParseError + from six.moves.html_parser import HTMLParseError # type: ignore except ImportError: - class HTMLParseError(Exception): + class HTMLParseError(Exception): # type: ignore pass from sphinx.builders import Builder -from sphinx.util.console import purple, red, darkgreen, darkgray, \ - darkred, turquoise -from sphinx.util.pycompat import TextIOWrapper - - -class RedirectHandler(HTTPRedirectHandler): - """A RedirectHandler that records the redirect code we got.""" - - def redirect_request(self, req, fp, code, msg, headers, newurl): - new_req = HTTPRedirectHandler.redirect_request(self, req, fp, code, - msg, headers, newurl) - req.redirect_code = code - return new_req +from sphinx.util import encode_uri, requests +from sphinx.util.console import ( # type: ignore + purple, red, darkgreen, darkgray, darkred, turquoise +) +from sphinx.util.requests import is_ssl_error -# create an opener that will simulate a browser user-agent -opener = build_opener(RedirectHandler) -opener.addheaders = [('User-agent', 'Mozilla/5.0 (X11; Linux x86_64; rv:25.0) ' - 'Gecko/20100101 Firefox/25.0')] - - -class HeadRequest(Request): - """Subclass of urllib2.Request that sends a HEAD request.""" - def get_method(self): - return 'HEAD' +if False: + # For type annotation + from typing import Any, Tuple, Union # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.util.requests.requests import Response # NOQA class AnchorCheckParser(HTMLParser): """Specialized HTML parser that looks for a specific anchor.""" def __init__(self, search_anchor): + # type: (unicode) -> None HTMLParser.__init__(self) self.search_anchor = search_anchor self.found = False def handle_starttag(self, tag, attrs): + # type: (Any, Dict[unicode, unicode]) -> None for key, value in attrs: if key in ('id', 'name') and value == self.search_anchor: self.found = True + break -def check_anchor(f, hash): - """Reads HTML data from a filelike object 'f' searching for anchor 'hash'. +def check_anchor(response, anchor): + # type: (Response, unicode) -> bool + """Reads HTML data from a response object `response` searching for `anchor`. Returns True if anchor was found, False otherwise. """ - parser = AnchorCheckParser(hash) + parser = AnchorCheckParser(anchor) try: - # Read file in chunks of 8192 bytes. If we find a matching anchor, we - # break the loop early in hopes not to have to download the whole thing. - chunk = f.read(8192) - while chunk and not parser.found: + # Read file in chunks. If we find a matching anchor, we break + # the loop early in hopes not to have to download the whole thing. + for chunk in response.iter_content(chunk_size=4096, decode_unicode=True): parser.feed(chunk) - chunk = f.read(8192) + if parser.found: + break parser.close() except HTMLParseError: # HTMLParser is usually pretty good with sloppy HTML, but it tends to @@ -101,10 +92,13 @@ class CheckExternalLinksBuilder(Builder): name = 'linkcheck' def init(self): + # type: () -> None self.to_ignore = [re.compile(x) for x in self.app.config.linkcheck_ignore] - self.good = set() - self.broken = {} - self.redirected = {} + self.anchors_ignore = [re.compile(x) + for x in self.app.config.linkcheck_anchors_ignore] + self.good = set() # type: Set[unicode] + self.broken = {} # type: Dict[unicode, unicode] + self.redirected = {} # type: Dict[unicode, Tuple[unicode, int]] # set a timeout for non-responding servers socket.setdefaulttimeout(5.0) # create output file @@ -113,7 +107,7 @@ def init(self): # create queues and worker threads self.wqueue = queue.Queue() self.rqueue = queue.Queue() - self.workers = [] + self.workers = [] # type: List[threading.Thread] for i in range(self.app.config.linkcheck_workers): thread = threading.Thread(target=self.check_thread) thread.setDaemon(True) @@ -121,99 +115,107 @@ def init(self): self.workers.append(thread) def check_thread(self): + # type: () -> None kwargs = {} if self.app.config.linkcheck_timeout: kwargs['timeout'] = self.app.config.linkcheck_timeout - 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:': - return 'unchecked', '', 0 - elif not (uri[0:5] == 'http:' or uri[0:6] == 'https:'): - return 'local', '', 0 - elif uri in self.good: - return 'working', 'old', 0 - elif uri in self.broken: - return 'broken', self.broken[uri], 0 - elif uri in self.redirected: - return 'redirected', self.redirected[uri][0], self.redirected[uri][1] - for rex in self.to_ignore: - if rex.match(uri): - return 'ignored', '', 0 + kwargs['allow_redirects'] = True + def check_uri(): + # type: () -> Tuple[unicode, unicode, int] # split off anchor if '#' in uri: - req_url, hash = uri.split('#', 1) + req_url, anchor = uri.split('#', 1) + for rex in self.anchors_ignore: + if rex.match(anchor): + anchor = None + break else: req_url = uri - hash = None + anchor = None # handle non-ASCII URIs try: req_url.encode('ascii') except UnicodeError: - split = urlsplit(req_url) - req_url = (split[0].encode() + '://' + # scheme - split[1].encode('idna') + # netloc - quote(split[2].encode('utf-8'))) # path - if split[3]: # query - req_url += '?' + quote(split[3].encode('utf-8')) - # go back to Unicode strings which is required by Python 3 - # (but now all parts are pure ascii) - req_url = req_url.decode('ascii') + req_url = encode_uri(req_url) - # need to actually check the URI try: - if hash and self.app.config.linkcheck_anchors: - # Read the whole document and see if #hash exists - req = Request(req_url) - f = opener.open(req, **kwargs) - encoding = 'utf-8' - if hasattr(f.headers, 'get_content_charset'): - encoding = f.headers.get_content_charset() or encoding - found = check_anchor(TextIOWrapper(f, encoding), unquote(hash)) - f.close() + if anchor and self.app.config.linkcheck_anchors: + # Read the whole document and see if #anchor exists + response = requests.get(req_url, stream=True, config=self.app.config, + **kwargs) + found = check_anchor(response, unquote(anchor)) if not found: - raise Exception("Anchor '%s' not found" % hash) + raise Exception("Anchor '%s' not found" % anchor) else: try: - # try a HEAD request, which should be easier on + # try a HEAD request first, which should be easier on # the server and the network - req = HeadRequest(req_url) - f = opener.open(req, **kwargs) - f.close() + response = requests.head(req_url, config=self.app.config, **kwargs) + response.raise_for_status() except HTTPError as err: - if err.code != 405: - raise - # retry with GET if that fails, some servers - # don't like HEAD requests and reply with 405 - req = Request(req_url) - f = opener.open(req, **kwargs) - f.close() + # retry with GET request if that fails, some servers + # don't like HEAD requests. + response = requests.get(req_url, stream=True, config=self.app.config, + **kwargs) + response.raise_for_status() except HTTPError as err: - if err.code == 401: + if err.response.status_code == 401: # We'll take "Unauthorized" as working. - self.good.add(uri) return 'working', ' - unauthorized', 0 else: - self.broken[uri] = str(err) return 'broken', str(err), 0 except Exception as err: - self.broken[uri] = str(err) - return 'broken', str(err), 0 - if f.url.rstrip('/') == req_url.rstrip('/'): - self.good.add(uri) + if is_ssl_error(err): + return 'ignored', str(err), 0 + else: + return 'broken', str(err), 0 + if response.url.rstrip('/') == req_url.rstrip('/'): return 'working', '', 0 else: - new_url = f.url - if hash: - new_url += '#' + hash - code = getattr(req, 'redirect_code', 0) - self.redirected[uri] = (new_url, code) + new_url = response.url + if anchor: + new_url += '#' + anchor + # history contains any redirects, get last + if response.history: + code = response.history[-1].status_code return 'redirected', new_url, code + def check(): + # type: () -> Tuple[unicode, unicode, int] + # check for various conditions without bothering the network + if len(uri) == 0 or uri.startswith(('#', 'mailto:', 'ftp:')): + return 'unchecked', '', 0 + elif not uri.startswith(('http:', 'https:')): + return 'local', '', 0 + elif uri in self.good: + return 'working', 'old', 0 + elif uri in self.broken: + return 'broken', self.broken[uri], 0 + elif uri in self.redirected: + return 'redirected', self.redirected[uri][0], self.redirected[uri][1] + for rex in self.to_ignore: + if rex.match(uri): + return 'ignored', '', 0 + + # need to actually check the URI + for _ in range(self.app.config.linkcheck_retries): + status, info, code = check_uri() + if status != "broken": + break + + if status == "working": + self.good.add(uri) + elif status == "broken": + self.broken[uri] = info + elif status == "redirected": + self.redirected[uri] = (info, code) + + return (status, info, code) + while True: uri, docname, lineno = self.wqueue.get() if uri is None: @@ -222,6 +224,7 @@ def check(): self.rqueue.put((uri, docname, lineno, status, info, code)) def process_result(self, result): + # type: (Tuple[unicode, unicode, int, unicode, unicode, int]) -> None uri, docname, lineno, status, info, code = result if status == 'unchecked': return @@ -230,18 +233,22 @@ def process_result(self, result): if lineno: self.info('(line %4d) ' % lineno, nonl=1) if status == 'ignored': - self.info(darkgray('-ignored- ') + uri) + if info: + self.info(darkgray('-ignored- ') + uri + ': ' + info) + else: + self.info(darkgray('-ignored- ') + uri) elif status == 'local': self.info(darkgray('-local- ') + uri) self.write_entry('local', docname, lineno, uri) elif status == 'working': self.info(darkgreen('ok ') + uri + info) elif status == 'broken': - self.info(red('broken ') + uri + red(' - ' + info)) self.write_entry('broken', docname, lineno, uri + ': ' + info) - if self.app.quiet: - self.warn('broken link: %s' % uri, + if self.app.quiet or self.app.warningiserror: + self.warn('broken link: %s (%s)' % (uri, info), '%s:%s' % (self.env.doc2path(docname), lineno)) + else: + self.info(red('broken ') + uri + red(' - ' + info)) elif status == 'redirected': text, color = { 301: ('permanently', darkred), @@ -255,15 +262,19 @@ def process_result(self, result): self.info(color('redirect ') + uri + color(' - ' + text + ' to ' + info)) def get_target_uri(self, docname, typ=None): + # type: (unicode, unicode) -> unicode return '' def get_outdated_docs(self): + # type: () -> Set[unicode] return self.env.found_docs def prepare_writing(self, docnames): + # type: (nodes.Node) -> None return def write_doc(self, docname, doctree): + # type: (unicode, nodes.Node) -> None self.info() n = 0 for node in doctree.traverse(nodes.reference): @@ -287,11 +298,26 @@ def write_doc(self, docname, doctree): self.app.statuscode = 1 def write_entry(self, what, docname, line, uri): - output = codecs.open(path.join(self.outdir, 'output.txt'), 'a', 'utf-8') - output.write("%s:%s: [%s] %s\n" % (self.env.doc2path(docname, None), - line, what, uri)) - output.close() + # type: (unicode, unicode, int, unicode) -> None + with codecs.open(path.join(self.outdir, 'output.txt'), 'a', 'utf-8') as output: # type: ignore # NOQA + output.write("%s:%s: [%s] %s\n" % (self.env.doc2path(docname, None), + line, what, uri)) def finish(self): + # type: () -> None for worker in self.workers: self.wqueue.put((None, None, None), False) + + +def setup(app): + # type: (Sphinx) -> None + app.add_builder(CheckExternalLinksBuilder) + + app.add_config_value('linkcheck_ignore', [], None) + app.add_config_value('linkcheck_retries', 1, None) + app.add_config_value('linkcheck_timeout', None, None, [int]) + app.add_config_value('linkcheck_workers', 5, None) + app.add_config_value('linkcheck_anchors', True, None) + # Anchors starting with ! are ignored since they are + # commonly used for dynamic pages + app.add_config_value('linkcheck_anchors_ignore', ["^!"], None) diff --git a/sphinx/builders/manpage.py b/sphinx/builders/manpage.py index 2af853dd83b..a208ac74ef6 100644 --- a/sphinx/builders/manpage.py +++ b/sphinx/builders/manpage.py @@ -5,13 +5,14 @@ Manual pages builder. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from os import path from six import string_types + from docutils.io import FileOutput from docutils.frontend import OptionParser @@ -19,9 +20,15 @@ from sphinx.builders import Builder from sphinx.environment import NoUri from sphinx.util.nodes import inline_all_toctrees -from sphinx.util.console import bold, darkgreen +from sphinx.util.osutil import make_filename +from sphinx.util.console import bold, darkgreen # type: ignore from sphinx.writers.manpage import ManualPageWriter +if False: + # For type annotation + from typing import Any, Union # NOQA + from sphinx.application import Sphinx # NOQA + class ManualPageBuilder(Builder): """ @@ -29,22 +36,26 @@ class ManualPageBuilder(Builder): """ name = 'man' format = 'man' - supported_image_types = [] + supported_image_types = [] # type: List[unicode] def init(self): + # type: () -> None if not self.config.man_pages: self.warn('no "man_pages" config value found; no manual pages ' 'will be written') def get_outdated_docs(self): + # type: () -> Union[unicode, List[unicode]] return 'all manpages' # for now def get_target_uri(self, docname, typ=None): + # type: (unicode, unicode) -> unicode if typ == 'token': return '' raise NoUri def write(self, *ignored): + # type: (Any) -> None docwriter = ManualPageWriter(self) docsettings = OptionParser( defaults=self.env.settings, @@ -68,7 +79,7 @@ def write(self, *ignored): encoding='utf-8') tree = self.env.get_doctree(docname) - docnames = set() + docnames = set() # type: Set[unicode] largetree = inline_all_toctrees(self, docnames, docname, tree, darkgreen, [docname]) self.info('} ', nonl=True) @@ -87,4 +98,16 @@ def write(self, *ignored): self.info() def finish(self): + # type: () -> None pass + + +def setup(app): + # type: (Sphinx) -> None + app.add_builder(ManualPageBuilder) + + app.add_config_value('man_pages', + lambda self: [(self.master_doc, make_filename(self.project).lower(), + '%s %s' % (self.project, self.release), [], 1)], + None) + app.add_config_value('man_show_urls', False, None) diff --git a/sphinx/builders/qthelp.py b/sphinx/builders/qthelp.py index 825f5651fb1..18764b7fb40 100644 --- a/sphinx/builders/qthelp.py +++ b/sphinx/builders/qthelp.py @@ -5,7 +5,7 @@ Build input files for the Qt collection generator. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -16,13 +16,20 @@ from os import path from six import text_type + from docutils import nodes from sphinx import addnodes from sphinx.builders.html import StandaloneHTMLBuilder from sphinx.util import force_decode +from sphinx.util.osutil import make_filename from sphinx.util.pycompat import htmlescape +if False: + # For type annotation + from typing import Any, Tuple # NOQA + from sphinx.application import Sphinx # NOQA + _idpattern = re.compile( r'(?P.+) (\((class in )?(?P<id>[\w\.]+)( (?P<descr>\w+))?\))$') @@ -104,19 +111,33 @@ class QtHelpBuilder(StandaloneHTMLBuilder): # don't add links add_permalinks = False + # don't add sidebar etc. embedded = True + # disable download role + download_support = False + + # don't generate the search index or include the search page + search = False def init(self): + # type: () -> None StandaloneHTMLBuilder.init(self) # the output files for HTML help must be .html only self.out_suffix = '.html' + self.link_suffix = '.html' # self.config.html_style = 'traditional.css' + def get_theme_config(self): + # type: () -> Tuple[unicode, Dict] + return self.config.qthelp_theme, self.config.qthelp_theme_options + def handle_finish(self): + # type: () -> None self.build_qhp(self.outdir, self.config.qthelp_basename) def build_qhp(self, outdir, outname): + # type: (unicode, unicode) -> None self.info('writing project file...') # sections @@ -142,15 +163,15 @@ def istoctree(node): new_sections.append(force_decode(section, None)) else: new_sections.append(section) - sections = u'\n'.join(new_sections) + sections = u'\n'.join(new_sections) # type: ignore # keywords keywords = [] index = self.env.create_index(self, group_entries=False) for (key, group) in index: - for title, (refs, subitems) in group: + for title, (refs, subitems, key_) in group: keywords.extend(self.build_keywords(title, refs, subitems)) - keywords = u'\n'.join(keywords) + keywords = u'\n'.join(keywords) # type: ignore # files if not outdir.endswith(os.sep): @@ -168,7 +189,7 @@ def istoctree(node): filename = path.join(root, fn)[olen:] projectfiles.append(file_template % {'filename': htmlescape(filename)}) - projectfiles = '\n'.join(projectfiles) + projectfiles = '\n'.join(projectfiles) # type: ignore # it seems that the "namespace" may not contain non-alphanumeric # characters, and more than one successive dot, or leading/trailing @@ -179,9 +200,8 @@ def istoctree(node): nspace = nspace.lower() # write the project file - f = codecs.open(path.join(outdir, outname+'.qhp'), 'w', 'utf-8') - try: - f.write(project_template % { + with codecs.open(path.join(outdir, outname+'.qhp'), 'w', 'utf-8') as f: # type: ignore + f.write(project_template % { # type: ignore 'outname': htmlescape(outname), 'title': htmlescape(self.config.html_title), 'version': htmlescape(self.config.version), @@ -191,25 +211,21 @@ def istoctree(node): 'sections': sections, 'keywords': keywords, 'files': projectfiles}) - finally: - f.close() homepage = 'qthelp://' + posixpath.join( nspace, 'doc', self.get_target_uri(self.config.master_doc)) startpage = 'qthelp://' + posixpath.join(nspace, 'doc', 'index.html') self.info('writing collection project file...') - f = codecs.open(path.join(outdir, outname+'.qhcp'), 'w', 'utf-8') - try: - f.write(collection_template % { + with codecs.open(path.join(outdir, outname+'.qhcp'), 'w', 'utf-8') as f: # type: ignore # NOQA + f.write(collection_template % { # type: ignore 'outname': htmlescape(outname), 'title': htmlescape(self.config.html_short_title), 'homepage': htmlescape(homepage), 'startpage': htmlescape(startpage)}) - finally: - f.close() def isdocnode(self, node): + # type: (nodes.Node) -> bool if not isinstance(node, nodes.list_item): return False if len(node.children) != 2: @@ -223,8 +239,9 @@ def isdocnode(self, node): return True def write_toc(self, node, indentlevel=4): + # type: (nodes.Node, int) -> List[unicode] # XXX this should return a Unicode string, not a bytestring - parts = [] + parts = [] # type: List[unicode] if self.isdocnode(node): refnode = node.children[0][0] link = refnode['refuri'] @@ -242,7 +259,7 @@ def write_toc(self, node, indentlevel=4): link = node['refuri'] title = htmlescape(node.astext()).replace('"', '"') item = section_template % {'title': title, 'ref': link} - item = u' ' * 4 * indentlevel + item + item = u' ' * 4 * indentlevel + item # type: ignore parts.append(item.encode('ascii', 'xmlcharrefreplace')) elif isinstance(node, nodes.bullet_list): for subnode in node: @@ -254,7 +271,8 @@ def write_toc(self, node, indentlevel=4): return parts def keyword_item(self, name, ref): - matchobj = _idpattern.match(name) + # type: (unicode, Any) -> unicode + matchobj = _idpattern.match(name) # type: ignore if matchobj: groupdict = matchobj.groupdict() shortname = groupdict['title'] @@ -275,7 +293,8 @@ def keyword_item(self, name, ref): return item def build_keywords(self, title, refs, subitems): - keywords = [] + # type: (unicode, List[Any], Any) -> List[unicode] + keywords = [] # type: List[unicode] title = htmlescape(title) # if len(refs) == 0: # XXX @@ -296,3 +315,13 @@ def build_keywords(self, title, refs, subitems): keywords.extend(self.build_keywords(subitem[0], subitem[1], [])) return keywords + + +def setup(app): + # type: (Sphinx) -> None + app.setup_extension('sphinx.builders.html') + app.add_builder(QtHelpBuilder) + + app.add_config_value('qthelp_basename', lambda self: make_filename(self.project), None) + app.add_config_value('qthelp_theme', 'nonav', 'html') + app.add_config_value('qthelp_theme_options', {}, 'html') diff --git a/sphinx/builders/texinfo.py b/sphinx/builders/texinfo.py index 7528c07774e..61b5d4e77a0 100644 --- a/sphinx/builders/texinfo.py +++ b/sphinx/builders/texinfo.py @@ -5,13 +5,14 @@ Texinfo builder. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from os import path from six import iteritems + from docutils import nodes from docutils.io import FileOutput from docutils.utils import new_document @@ -22,10 +23,15 @@ from sphinx.builders import Builder from sphinx.environment import NoUri from sphinx.util.nodes import inline_all_toctrees -from sphinx.util.osutil import SEP, copyfile -from sphinx.util.console import bold, darkgreen +from sphinx.util.osutil import SEP, copyfile, make_filename +from sphinx.util.console import bold, darkgreen # type: ignore from sphinx.writers.texinfo import TexinfoWriter +if False: + # For type annotation + from sphinx.application import Sphinx # NOQA + from typing import Any, Iterable, Tuple, Union # NOQA + TEXINFO_MAKEFILE = '''\ # Makefile for Sphinx Texinfo output @@ -91,47 +97,53 @@ class TexinfoBuilder(Builder): 'image/gif'] def init(self): - self.docnames = [] - self.document_data = [] + # type: () -> None + self.docnames = [] # type: Iterable[unicode] + self.document_data = [] # type: List[Tuple[unicode, unicode, unicode, unicode, unicode, unicode, unicode, bool]] # NOQA def get_outdated_docs(self): + # type: () -> Union[unicode, List[unicode]] return 'all documents' # for now def get_target_uri(self, docname, typ=None): + # type: (unicode, unicode) -> unicode if docname not in self.docnames: raise NoUri else: return '%' + docname def get_relative_uri(self, from_, to, typ=None): + # type: (unicode, unicode, unicode) -> unicode # ignore source path return self.get_target_uri(to, typ) def init_document_data(self): + # type: () -> None preliminary_document_data = [list(x) for x in self.config.texinfo_documents] if not preliminary_document_data: self.warn('no "texinfo_documents" config value found; no documents ' 'will be written') return # assign subdirs to titles - self.titles = [] + self.titles = [] # type: List[Tuple[unicode, unicode]] for entry in preliminary_document_data: docname = entry[0] if docname not in self.env.all_docs: self.warn('"texinfo_documents" config value references unknown ' 'document %s' % docname) continue - self.document_data.append(entry) + self.document_data.append(entry) # type: ignore if docname.endswith(SEP+'index'): docname = docname[:-5] self.titles.append((docname, entry[2])) def write(self, *ignored): + # type: (Any) -> None self.init_document_data() for entry in self.document_data: docname, targetname, title, author = entry[:4] targetname += '.texi' - direntry = description = category = '' + direntry = description = category = '' # type: unicode if len(entry) > 6: direntry, description, category = entry[4:7] toctree_only = False @@ -164,6 +176,7 @@ def write(self, *ignored): self.info("done") def assemble_doctree(self, indexfile, toctree_only, appendices): + # type: (unicode, bool, List[unicode]) -> nodes.Node self.docnames = set([indexfile] + appendices) self.info(darkgreen(indexfile) + " ", nonl=1) tree = self.env.get_doctree(indexfile) @@ -206,6 +219,7 @@ def assemble_doctree(self, indexfile, toctree_only, appendices): return largetree def finish(self): + # type: () -> None # copy image files if self.images: self.info(bold('copying images...'), nonl=1) @@ -220,11 +234,26 @@ def finish(self): fn = path.join(self.outdir, 'Makefile') self.info(fn, nonl=1) try: - mkfile = open(fn, 'w') - try: + with open(fn, 'w') as mkfile: mkfile.write(TEXINFO_MAKEFILE) - finally: - mkfile.close() except (IOError, OSError) as err: self.warn("error writing file %s: %s" % (fn, err)) self.info(' done') + + +def setup(app): + # type: (Sphinx) -> None + app.add_builder(TexinfoBuilder) + + app.add_config_value('texinfo_documents', + lambda self: [(self.master_doc, make_filename(self.project).lower(), + self.project, '', make_filename(self.project), + 'The %s reference manual.' % + make_filename(self.project), + 'Python')], + None) + app.add_config_value('texinfo_appendices', [], None) + app.add_config_value('texinfo_elements', {}, None) + app.add_config_value('texinfo_domain_indices', True, None, [list]) + app.add_config_value('texinfo_show_urls', 'footnote', None) + app.add_config_value('texinfo_no_detailmenu', False, None) diff --git a/sphinx/builders/text.py b/sphinx/builders/text.py index 9e624d0d5d1..e14ce215bce 100644 --- a/sphinx/builders/text.py +++ b/sphinx/builders/text.py @@ -5,7 +5,7 @@ Plain-text Sphinx builder. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -25,6 +25,8 @@ class TextBuilder(Builder): out_suffix = '.txt' allow_parallel = True + current_docname = None # type: unicode + def init(self): pass @@ -60,13 +62,17 @@ def write_doc(self, docname, doctree): outfilename = path.join(self.outdir, os_path(docname) + self.out_suffix) ensuredir(path.dirname(outfilename)) try: - f = codecs.open(outfilename, 'w', 'utf-8') - try: + with codecs.open(outfilename, 'w', 'utf-8') as f: f.write(self.writer.output) - finally: - f.close() except (IOError, OSError) as err: self.warn("error writing file %s: %s" % (outfilename, err)) def finish(self): pass + + +def setup(app): + app.add_builder(TextBuilder) + + app.add_config_value('text_sectionchars', '*=-~"+`', 'env') + app.add_config_value('text_newlines', 'unix', 'env') diff --git a/sphinx/builders/websupport.py b/sphinx/builders/websupport.py index 66af0ab8027..d8ff5ad8d30 100644 --- a/sphinx/builders/websupport.py +++ b/sphinx/builders/websupport.py @@ -5,7 +5,7 @@ Builder for the web support package. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -165,3 +165,7 @@ def handle_finish(self): def dump_search_index(self): self.indexer.finish_indexing() + + +def setup(app): + app.add_builder(WebSupportBuilder) diff --git a/sphinx/builders/xml.py b/sphinx/builders/xml.py index 18d8cbfb58a..e0e33312c51 100644 --- a/sphinx/builders/xml.py +++ b/sphinx/builders/xml.py @@ -5,7 +5,7 @@ Docutils-native XML and pseudo-XML builders. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -77,11 +77,8 @@ def write_doc(self, docname, doctree): outfilename = path.join(self.outdir, os_path(docname) + self.out_suffix) ensuredir(path.dirname(outfilename)) try: - f = codecs.open(outfilename, 'w', 'utf-8') - try: + with codecs.open(outfilename, 'w', 'utf-8') as f: f.write(self.writer.output) - finally: - f.close() except (IOError, OSError) as err: self.warn("error writing file %s: %s" % (outfilename, err)) @@ -98,3 +95,10 @@ class PseudoXMLBuilder(XMLBuilder): out_suffix = '.pseudoxml' _writer_class = PseudoXMLWriter + + +def setup(app): + app.add_builder(XMLBuilder) + app.add_builder(PseudoXMLBuilder) + + app.add_config_value('xml_pretty', True, 'env') diff --git a/sphinx/cmdline.py b/sphinx/cmdline.py index e411836c315..7a97e10e2cd 100644 --- a/sphinx/cmdline.py +++ b/sphinx/cmdline.py @@ -5,7 +5,7 @@ sphinx-build command-line handling. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import print_function @@ -16,16 +16,22 @@ from os import path from six import text_type, binary_type + from docutils.utils import SystemMessage from sphinx import __display_version__ 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.console import red, nocolor, color_terminal # type: ignore +from sphinx.util.docutils import docutils_namespace from sphinx.util.osutil import abspath, fs_encoding from sphinx.util.pycompat import terminal_safe +if False: + # For type annotation + from typing import Any, IO, Union # NOQA + USAGE = """\ Sphinx v%s @@ -44,18 +50,72 @@ class MyFormatter(optparse.IndentedHelpFormatter): def format_usage(self, usage): + # type: (Any) -> Any return usage def format_help(self, formatter): - result = [] - if self.description: + # type: (Any) -> unicode + result = [] # type: List[unicode] + if self.description: # type: ignore result.append(self.format_description(formatter)) - if self.option_list: - result.append(self.format_option_help(formatter)) + if self.option_list: # type: ignore + result.append(self.format_option_help(formatter)) # type: ignore return "\n".join(result) +def handle_exception(app, opts, exception, stderr=sys.stderr): + # type: (Sphinx, Any, Union[Exception, KeyboardInterrupt], IO) -> None + if opts.pdb: + import pdb + print(red('Exception occurred while building, starting debugger:'), + file=stderr) + traceback.print_exc() + pdb.post_mortem(sys.exc_info()[2]) + else: + print(file=stderr) + if opts.verbosity or opts.traceback: + traceback.print_exc(None, stderr) + print(file=stderr) + if isinstance(exception, KeyboardInterrupt): + print('interrupted!', file=stderr) + elif isinstance(exception, SystemMessage): + print(red('reST markup error:'), file=stderr) + print(terminal_safe(exception.args[0]), file=stderr) + elif isinstance(exception, SphinxError): + print(red('%s:' % exception.category), file=stderr) + print(terminal_safe(text_type(exception)), file=stderr) + elif isinstance(exception, UnicodeError): + print(red('Encoding error:'), file=stderr) + print(terminal_safe(text_type(exception)), file=stderr) + tbpath = save_traceback(app) + print(red('The full traceback has been saved in %s, if you want ' + 'to report the issue to the developers.' % tbpath), + file=stderr) + elif isinstance(exception, RuntimeError) and 'recursion depth' in str(exception): + print(red('Recursion error:'), file=stderr) + print(terminal_safe(text_type(exception)), file=stderr) + print(file=stderr) + print('This can happen with very large or deeply nested source ' + 'files. You can carefully increase the default Python ' + 'recursion limit of 1000 in conf.py with e.g.:', file=stderr) + print(' import sys; sys.setrecursionlimit(1500)', file=stderr) + else: + print(red('Exception occurred:'), file=stderr) + print(format_exception_cut_frames().rstrip(), file=stderr) + tbpath = save_traceback(app) + print(red('The full traceback has been saved in %s, if you ' + 'want to report the issue to the developers.' % tbpath), + file=stderr) + print('Please also report this if it was a user error, so ' + 'that a better error message can be provided next time.', + file=stderr) + print('A bug report can be filed in the tracker at ' + '<https://github.com/sphinx-doc/sphinx/issues>. Thanks!', + file=stderr) + + def main(argv): + # type: (List[unicode]) -> int if not color_terminal(): nocolor() @@ -120,7 +180,7 @@ def main(argv): # parse options try: - opts, args = parser.parse_args(argv[1:]) + opts, args = parser.parse_args(list(argv[1:])) except SystemExit as err: return err.code @@ -144,6 +204,10 @@ def main(argv): file=sys.stderr) return 1 outdir = abspath(args[1]) + if srcdir == outdir: + print('Error: source directory and destination directory are same.', + file=sys.stderr) + return 1 except IndexError: parser.print_help() return 1 @@ -155,11 +219,11 @@ def main(argv): # handle remaining filename arguments filenames = args[2:] - err = 0 + err = 0 # type: ignore for filename in filenames: if not path.isfile(filename): print('Error: Cannot find file %r.' % filename, file=sys.stderr) - err = 1 + err = 1 # type: ignore if err: return 1 @@ -194,13 +258,13 @@ def main(argv): print('Error: Cannot open warning file %r: %s' % (opts.warnfile, exc), file=sys.stderr) sys.exit(1) - warning = Tee(warning, warnfp) + warning = Tee(warning, warnfp) # type: ignore error = warning confoverrides = {} for val in opts.define: try: - key, val = val.split('=') + key, val = val.split('=', 1) except ValueError: print('Error: -D option argument must be in the form name=value.', file=sys.stderr) @@ -234,49 +298,12 @@ def main(argv): app = None try: - app = Sphinx(srcdir, confdir, outdir, doctreedir, opts.builder, - confoverrides, status, warning, opts.freshenv, - opts.warningiserror, opts.tags, opts.verbosity, opts.jobs) - app.build(opts.force_all, filenames) - return app.statuscode - except (Exception, KeyboardInterrupt) as err: - if opts.pdb: - import pdb - print(red('Exception occurred while building, starting debugger:'), - file=error) - traceback.print_exc() - pdb.post_mortem(sys.exc_info()[2]) - else: - print(file=error) - if opts.verbosity or opts.traceback: - traceback.print_exc(None, error) - print(file=error) - if isinstance(err, KeyboardInterrupt): - print('interrupted!', file=error) - elif isinstance(err, SystemMessage): - print(red('reST markup error:'), file=error) - print(terminal_safe(err.args[0]), file=error) - elif isinstance(err, SphinxError): - print(red('%s:' % err.category), file=error) - print(terminal_safe(text_type(err)), file=error) - elif isinstance(err, UnicodeError): - print(red('Encoding error:'), file=error) - print(terminal_safe(text_type(err)), file=error) - tbpath = save_traceback(app) - print(red('The full traceback has been saved in %s, if you want ' - 'to report the issue to the developers.' % tbpath), - file=error) - else: - print(red('Exception occurred:'), file=error) - print(format_exception_cut_frames().rstrip(), file=error) - tbpath = save_traceback(app) - print(red('The full traceback has been saved in %s, if you ' - 'want to report the issue to the developers.' % tbpath), - file=error) - print('Please also report this if it was a user error, so ' - 'that a better error message can be provided next time.', - file=error) - print('A bug report can be filed in the tracker at ' - '<https://github.com/sphinx-doc/sphinx/issues>. Thanks!', - file=error) - return 1 + with docutils_namespace(): + app = Sphinx(srcdir, confdir, outdir, doctreedir, opts.builder, + confoverrides, status, warning, opts.freshenv, + opts.warningiserror, opts.tags, opts.verbosity, opts.jobs) + app.build(opts.force_all, filenames) + return app.statuscode + except (Exception, KeyboardInterrupt) as exc: + handle_exception(app, opts, exc, error) + return 1 diff --git a/sphinx/config.py b/sphinx/config.py index 090875a79d7..5872ce8bb77 100644 --- a/sphinx/config.py +++ b/sphinx/config.py @@ -5,32 +5,60 @@ Build configuration file handling. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ import re -from os import path, environ -import shlex +from os import path, getenv -from six import PY3, iteritems, string_types, binary_type, integer_types +from six import PY2, PY3, iteritems, string_types, binary_type, text_type, integer_types from sphinx.errors import ConfigError from sphinx.locale import l_ -from sphinx.util.osutil import make_filename, cd -from sphinx.util.pycompat import execfile_ +from sphinx.util.i18n import format_date +from sphinx.util.osutil import cd +from sphinx.util.pycompat import execfile_, NoneType + +if False: + # For type annotation + from typing import Any, Callable, Tuple # NOQA + from sphinx.util.tags import Tags # NOQA nonascii_re = re.compile(br'[\x80-\xff]') +copyright_year_re = re.compile(r'^((\d{4}-)?)(\d{4})(?=[ ,])') CONFIG_SYNTAX_ERROR = "There is a syntax error in your configuration file: %s" if PY3: CONFIG_SYNTAX_ERROR += "\nDid you change the syntax from 2.x to 3.x?" CONFIG_EXIT_ERROR = "The configuration file (or one of the modules it imports) " \ "called sys.exit()" +CONFIG_ENUM_WARNING = "The config value `{name}` has to be a one of {candidates}, " \ + "but `{current}` is given." +CONFIG_PERMITTED_TYPE_WARNING = "The config value `{name}' has type `{current.__name__}', " \ + "expected to {permitted}." +CONFIG_TYPE_WARNING = "The config value `{name}' has type `{current.__name__}', " \ + "defaults to `{default.__name__}'." + + +class ENUM(object): + """represents the config value should be a one of candidates. + + Example: + app.add_config_value('latex_show_urls', 'no', ENUM('no', 'footnote', 'inline')) + """ + def __init__(self, *candidates): + # type: (unicode) -> None + self.candidates = candidates -IGNORE_CONFIG_TYPE_CHECKS = ( - 'html_domain_indices', 'latex_domain_indices', 'texinfo_domain_indices' -) + def match(self, value): + # type: (unicode) -> bool + return value in self.candidates + + +string_classes = [text_type] # type: List +if PY2: + string_classes.append(binary_type) # => [str, unicode] class Config(object): @@ -50,222 +78,59 @@ class Config(object): version = ('', 'env'), release = ('', 'env'), today = ('', 'env'), - today_fmt = (None, 'env'), # the real default is locale-dependent + # the real default is locale-dependent + today_fmt = (None, 'env', string_classes), - language = (None, 'env'), - locale_dirs = ([], 'env'), + language = (None, 'env', string_classes), + locale_dirs = (['locales'], 'env'), + figure_language_filename = (u'{root}.{language}{ext}', 'env', [str]), master_doc = ('contents', 'env'), source_suffix = (['.rst'], 'env'), source_encoding = ('utf-8-sig', 'env'), source_parsers = ({}, 'env'), exclude_patterns = ([], 'env'), - default_role = (None, 'env'), + default_role = (None, 'env', string_classes), add_function_parentheses = (True, 'env'), add_module_names = (True, 'env'), trim_footnote_reference_space = (False, 'env'), show_authors = (False, 'env'), - pygments_style = (None, 'html'), - highlight_language = ('python', 'env'), + pygments_style = (None, 'html', string_classes), + highlight_language = ('default', 'env'), highlight_options = ({}, 'env'), templates_path = ([], 'html'), - template_bridge = (None, 'html'), + template_bridge = (None, 'html', string_classes), keep_warnings = (False, 'env'), + suppress_warnings = ([], 'env'), modindex_common_prefix = ([], 'html'), - rst_epilog = (None, 'env'), - rst_prolog = (None, 'env'), + rst_epilog = (None, 'env', string_classes), + rst_prolog = (None, 'env', string_classes), trim_doctest_flags = (True, 'env'), - primary_domain = ('py', 'env'), - needs_sphinx = (None, None), + primary_domain = ('py', 'env', [NoneType]), + needs_sphinx = (None, None, string_classes), needs_extensions = ({}, None), - nitpicky = (False, 'env'), - nitpick_ignore = ([], 'html'), + nitpicky = (False, None), + nitpick_ignore = ([], None), numfig = (False, 'env'), numfig_secnum_depth = (1, 'env'), - numfig_format = ({'figure': l_('Fig. %s'), + numfig_format = ({'section': l_('Section %s'), + 'figure': l_('Fig. %s'), 'table': l_('Table %s'), 'code-block': l_('Listing %s')}, 'env'), - # HTML options - html_theme = ('alabaster', 'html'), - html_theme_path = ([], 'html'), - html_theme_options = ({}, 'html'), - html_title = (lambda self: l_('%s %s documentation') % - (self.project, self.release), - 'html'), - html_short_title = (lambda self: self.html_title, 'html'), - html_style = (None, 'html'), - html_logo = (None, 'html'), - html_favicon = (None, 'html'), - html_static_path = ([], 'html'), - html_extra_path = ([], 'html'), - # the real default is locale-dependent - html_last_updated_fmt = (None, 'html'), - html_use_smartypants = (True, 'html'), - html_translator_class = (None, 'html'), - html_sidebars = ({}, 'html'), - html_additional_pages = ({}, 'html'), - html_use_modindex = (True, 'html'), # deprecated - html_domain_indices = (True, 'html'), - html_add_permalinks = (u'\u00B6', 'html'), - html_use_index = (True, 'html'), - html_split_index = (False, 'html'), - html_copy_source = (True, 'html'), - html_show_sourcelink = (True, 'html'), - html_use_opensearch = ('', 'html'), - html_file_suffix = (None, 'html'), - html_link_suffix = (None, 'html'), - html_show_copyright = (True, 'html'), - html_show_sphinx = (True, 'html'), - html_context = ({}, 'html'), - html_output_encoding = ('utf-8', 'html'), - html_compact_lists = (True, 'html'), - html_secnumber_suffix = ('. ', 'html'), - html_search_language = (None, 'html'), - html_search_options = ({}, 'html'), - html_search_scorer = ('', None), - html_scaled_image_link = (True, 'html'), - - # HTML help only options - htmlhelp_basename = (lambda self: make_filename(self.project), None), - - # Qt help only options - qthelp_basename = (lambda self: make_filename(self.project), None), - - # Devhelp only options - devhelp_basename = (lambda self: make_filename(self.project), None), - - # Apple help options - applehelp_bundle_name = (lambda self: make_filename(self.project), - 'applehelp'), - applehelp_bundle_id = (None, 'applehelp'), - applehelp_dev_region = ('en-us', 'applehelp'), - applehelp_bundle_version = ('1', 'applehelp'), - applehelp_icon = (None, 'applehelp'), - applehelp_kb_product = (lambda self: '%s-%s' % - (make_filename(self.project), self.release), - 'applehelp'), - applehelp_kb_url = (None, 'applehelp'), - applehelp_remote_url = (None, 'applehelp'), - applehelp_index_anchors = (False, 'applehelp'), - applehelp_min_term_length = (None, 'applehelp'), - applehelp_stopwords = (lambda self: self.language or 'en', 'applehelp'), - applehelp_locale = (lambda self: self.language or 'en', 'applehelp'), - applehelp_title = (lambda self: self.project + ' Help', 'applehelp'), - applehelp_codesign_identity = (lambda self: - environ.get('CODE_SIGN_IDENTITY', None), - 'applehelp'), - applehelp_codesign_flags = (lambda self: - shlex.split( - environ.get('OTHER_CODE_SIGN_FLAGS', - '')), - 'applehelp'), - applehelp_indexer_path = ('/usr/bin/hiutil', 'applehelp'), - applehelp_codesign_path = ('/usr/bin/codesign', 'applehelp'), - applehelp_disable_external_tools = (False, None), - - # Epub options - epub_basename = (lambda self: make_filename(self.project), None), - epub_theme = ('epub', 'html'), - epub_theme_options = ({}, 'html'), - epub_title = (lambda self: self.html_title, 'html'), - epub_author = ('unknown', 'html'), - epub_language = (lambda self: self.language or 'en', 'html'), - epub_publisher = ('unknown', 'html'), - epub_copyright = (lambda self: self.copyright, 'html'), - epub_identifier = ('unknown', 'html'), - epub_scheme = ('unknown', 'html'), - epub_uid = ('unknown', 'env'), - epub_cover = ((), 'env'), - epub_guide = ((), 'env'), - epub_pre_files = ([], 'env'), - epub_post_files = ([], 'env'), - epub_exclude_files = ([], 'env'), - epub_tocdepth = (3, 'env'), - epub_tocdup = (True, 'env'), - epub_tocscope = ('default', 'env'), - epub_fix_images = (False, 'env'), - epub_max_image_width = (0, 'env'), - epub_show_urls = ('inline', 'html'), - epub_use_index = (lambda self: self.html_use_index, 'html'), - - # LaTeX options - latex_documents = (lambda self: [(self.master_doc, - make_filename(self.project) + '.tex', - self.project, - '', 'manual')], - None), - latex_logo = (None, None), - latex_appendices = ([], None), - latex_use_parts = (False, None), - latex_use_modindex = (True, None), # deprecated - latex_domain_indices = (True, None), - latex_show_urls = ('no', None), - latex_show_pagerefs = (False, None), - # paper_size and font_size are still separate values - # so that you can give them easily on the command line - latex_paper_size = ('letter', None), - latex_font_size = ('10pt', None), - latex_elements = ({}, None), - latex_additional_files = ([], None), - latex_docclass = ({}, None), - # now deprecated - use latex_elements - latex_preamble = ('', None), - - # text options - text_sectionchars = ('*=-~"+`', 'env'), - text_newlines = ('unix', 'env'), - - # manpage options - man_pages = (lambda self: [(self.master_doc, - make_filename(self.project).lower(), - '%s %s' % (self.project, self.release), - [], 1)], - None), - man_show_urls = (False, None), - - # Texinfo options - texinfo_documents = (lambda self: [(self.master_doc, - make_filename(self.project).lower(), - self.project, '', - make_filename(self.project), - 'The %s reference manual.' % - make_filename(self.project), - 'Python')], - None), - texinfo_appendices = ([], None), - texinfo_elements = ({}, None), - texinfo_domain_indices = (True, None), - texinfo_show_urls = ('footnote', None), - texinfo_no_detailmenu = (False, None), - - # linkcheck options - linkcheck_ignore = ([], None), - linkcheck_timeout = (None, None), - linkcheck_workers = (5, None), - linkcheck_anchors = (True, None), - - # gettext options - gettext_compact = (True, 'gettext'), - gettext_location = (True, 'gettext'), - gettext_uuid = (False, 'gettext'), - gettext_auto_build = (True, 'env'), - gettext_additional_targets = ([], 'env'), - - # XML options - xml_pretty = (True, 'env'), - ) + tls_verify = (True, 'env'), + tls_cacerts = (None, 'env'), + + # pre-initialized confval for HTML builder + html_translator_class = (None, 'html', string_classes), + ) # type: Dict[unicode, Tuple] def __init__(self, dirname, filename, overrides, tags): + # type: (unicode, unicode, Dict, Tags) -> None self.overrides = overrides self.values = Config.config_values.copy() - config = {} - if 'extensions' in overrides: # XXX do we need this? - if isinstance(overrides['extensions'], string_types): - config['extensions'] = overrides.pop('extensions').split(',') - else: - config['extensions'] = overrides.pop('extensions') + config = {} # type: Dict[unicode, Any] if dirname is not None: config_file = path.join(dirname, filename) config['__file__'] = config_file @@ -283,85 +148,141 @@ def __init__(self, dirname, filename, overrides, tags): self._raw_config = config # these two must be preinitialized because extensions can add their # own config values - self.setup = config.get('setup', None) - self.extensions = config.get('extensions', []) + self.setup = config.get('setup', None) # type: Callable + + if 'extensions' in overrides: + if isinstance(overrides['extensions'], string_types): + config['extensions'] = overrides.pop('extensions').split(',') + else: + config['extensions'] = overrides.pop('extensions') + self.extensions = config.get('extensions', []) # type: List[unicode] + + # correct values of copyright year that are not coherent with + # the SOURCE_DATE_EPOCH environment variable (if set) + # See https://reproducible-builds.org/specs/source-date-epoch/ + if getenv('SOURCE_DATE_EPOCH') is not None: + for k in ('copyright', 'epub_copyright'): + if k in config: + config[k] = copyright_year_re.sub('\g<1>%s' % format_date('%Y'), # type: ignore # NOQA + config[k]) def check_types(self, warn): + # type: (Callable) -> None # check all values for deviation from the default value's type, since # that can result in TypeErrors all over the place # NB. since config values might use l_() we have to wait with calling # this method until i18n is initialized for name in self._raw_config: - if name in IGNORE_CONFIG_TYPE_CHECKS: - continue # for a while, ignore multiple types config value. see #1781 - if name not in Config.config_values: + if name not in self.values: continue # we don't know a default value - default, dummy_rebuild = Config.config_values[name] + settings = self.values[name] + default, dummy_rebuild = settings[:2] + permitted = settings[2] if len(settings) == 3 else () + if hasattr(default, '__call__'): default = default(self) # could invoke l_() - if default is None: - continue + if default is None and not permitted: + continue # neither inferrable nor expliclitly permitted types current = self[name] - if type(current) is type(default): - continue - common_bases = (set(type(current).__bases__ + (type(current),)) & - set(type(default).__bases__)) - common_bases.discard(object) - if common_bases: - continue # at least we share a non-trivial base class - warn("the config value %r has type `%s', defaults to `%s.'" % - (name, type(current).__name__, type(default).__name__)) + if isinstance(permitted, ENUM): + if not permitted.match(current): + warn(CONFIG_ENUM_WARNING.format( + name=name, current=current, candidates=permitted.candidates)) + else: + if type(current) is type(default): + continue + if type(current) in permitted: + continue + + common_bases = (set(type(current).__bases__ + (type(current),)) & + set(type(default).__bases__)) + common_bases.discard(object) + if common_bases: + continue # at least we share a non-trivial base class + + if permitted: + warn(CONFIG_PERMITTED_TYPE_WARNING.format( + name=name, current=type(current), + permitted=str([cls.__name__ for cls in permitted]))) + else: + warn(CONFIG_TYPE_WARNING.format( + name=name, current=type(current), default=type(default))) def check_unicode(self, warn): + # type: (Callable) -> None # check all string values for non-ASCII characters in bytestrings, # since that can result in UnicodeErrors all over the place for name, value in iteritems(self._raw_config): - if isinstance(value, binary_type) and nonascii_re.search(value): + if isinstance(value, binary_type) and nonascii_re.search(value): # type: ignore warn('the config value %r is set to a string with non-ASCII ' 'characters; this can lead to Unicode errors occurring. ' 'Please use Unicode strings, e.g. %r.' % (name, u'Content')) + def convert_overrides(self, name, value): + # type: (unicode, Any) -> Any + if not isinstance(value, string_types): + return value + else: + defvalue = self.values[name][0] + if isinstance(defvalue, dict): + raise ValueError('cannot override dictionary config setting %r, ' + 'ignoring (use %r to set individual elements)' % + (name, name + '.key=value')) + elif isinstance(defvalue, list): + return value.split(',') # type: ignore + elif isinstance(defvalue, integer_types): + try: + return int(value) # type: ignore + except ValueError: + raise ValueError('invalid number %r for config value %r, ignoring' % + (value, name)) + elif hasattr(defvalue, '__call__'): + return value + elif defvalue is not None and not isinstance(defvalue, string_types): + raise ValueError('cannot override config setting %r with unsupported ' + 'type, ignoring' % name) + else: + return value + + def pre_init_values(self, warn): + # type: (Callable) -> None + """Initialize some limited config variables before loading extensions""" + variables = ['needs_sphinx', 'suppress_warnings', 'html_translator_class'] + for name in variables: + try: + if name in self.overrides: + self.__dict__[name] = self.convert_overrides(name, self.overrides[name]) + elif name in self._raw_config: + self.__dict__[name] = self._raw_config[name] + except ValueError as exc: + warn(exc) + def init_values(self, warn): + # type: (Callable) -> None config = self._raw_config for valname, value in iteritems(self.overrides): - if '.' in valname: - realvalname, key = valname.split('.', 1) - config.setdefault(realvalname, {})[key] = value - continue - elif valname not in self.values: - warn('unknown config value %r in override, ignoring' % valname) - continue - defvalue = self.values[valname][0] - if isinstance(value, string_types): - if isinstance(defvalue, dict): - warn('cannot override dictionary config setting %r, ' - 'ignoring (use %r to set individual elements)' % - (valname, valname + '.key=value')) + try: + if '.' in valname: + realvalname, key = valname.split('.', 1) + config.setdefault(realvalname, {})[key] = value # type: ignore continue - elif isinstance(defvalue, list): - config[valname] = value.split(',') - elif isinstance(defvalue, integer_types): - try: - config[valname] = int(value) - except ValueError: - warn('invalid number %r for config value %r, ignoring' - % (value, valname)) - elif hasattr(defvalue, '__call__'): - config[valname] = value - elif defvalue is not None and not isinstance(defvalue, string_types): - warn('cannot override config setting %r with unsupported ' - 'type, ignoring' % valname) + elif valname not in self.values: + warn('unknown config value %r in override, ignoring' % valname) + continue + if isinstance(value, string_types): + config[valname] = self.convert_overrides(valname, value) else: config[valname] = value - else: - config[valname] = value + except ValueError as exc: + warn(exc) for name in config: if name in self.values: self.__dict__[name] = config[name] - if isinstance(self.source_suffix, string_types): - self.source_suffix = [self.source_suffix] + if isinstance(self.source_suffix, string_types): # type: ignore + self.source_suffix = [self.source_suffix] # type: ignore def __getattr__(self, name): + # type: (unicode) -> Any if name.startswith('_'): raise AttributeError(name) if name not in self.values: @@ -372,13 +293,17 @@ def __getattr__(self, name): return default def __getitem__(self, name): + # type: (unicode) -> unicode return getattr(self, name) def __setitem__(self, name, value): + # type: (unicode, Any) -> None setattr(self, name, value) def __delitem__(self, name): + # type: (unicode) -> None delattr(self, name) def __contains__(self, name): + # type: (unicode) -> bool return name in self.values diff --git a/sphinx/deprecation.py b/sphinx/deprecation.py new file mode 100644 index 00000000000..a5d14762ff0 --- /dev/null +++ b/sphinx/deprecation.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +""" + sphinx.deprecation + ~~~~~~~~~~~~~~~~~~ + + Sphinx deprecation classes and utilities. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + + +class RemovedInSphinx16Warning(DeprecationWarning): + pass + + +class RemovedInSphinx17Warning(PendingDeprecationWarning): + pass + + +RemovedInNextVersionWarning = RemovedInSphinx16Warning diff --git a/sphinx/directives/__init__.py b/sphinx/directives/__init__.py index 2200cdb6c66..ea09daff59c 100644 --- a/sphinx/directives/__init__.py +++ b/sphinx/directives/__init__.py @@ -5,7 +5,7 @@ Handlers for additional ReST directives. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -17,9 +17,23 @@ from sphinx import addnodes from sphinx.util.docfields import DocFieldTransformer -# import and register directives -from sphinx.directives.code import * # noqa -from sphinx.directives.other import * # noqa +# import all directives sphinx provides +from sphinx.directives.code import ( # noqa + Highlight, CodeBlock, LiteralInclude +) +from sphinx.directives.other import ( # noqa + TocTree, Author, Index, VersionChange, SeeAlso, + TabularColumns, Centered, Acks, HList, Only, Include, Class +) +from sphinx.directives.patches import ( # noqa + Figure, Meta +) + +if False: + # For type annotation + from typing import Any # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.environment import BuildEnvironment # NOQA # RE to strip backslash escapes @@ -43,9 +57,13 @@ class ObjectDescription(Directive): } # types of doc fields that this directive handles, see sphinx.util.docfields - doc_field_types = [] + doc_field_types = [] # type: List[Any] + domain = None # type: unicode + objtype = None # type: unicode + indexnode = None # type: addnodes.index def get_signatures(self): + # type: () -> List[unicode] """ Retrieve the signatures to document from the directive arguments. By default, signatures are given as arguments, one per line. @@ -57,6 +75,7 @@ def get_signatures(self): return [strip_backslash_re.sub(r'\1', line.strip()) for line in lines] def handle_signature(self, sig, signode): + # type: (unicode, addnodes.desc_signature) -> Any """ Parse the signature *sig* into individual nodes and append them to *signode*. If ValueError is raised, parsing is aborted and the whole @@ -69,6 +88,7 @@ def handle_signature(self, sig, signode): raise ValueError def add_target_and_index(self, name, sig, signode): + # type: (Any, unicode, addnodes.desc_signature) -> None """ Add cross-reference IDs and entries to self.indexnode, if applicable. @@ -77,6 +97,7 @@ def add_target_and_index(self, name, sig, signode): return # do nothing by default def before_content(self): + # type: () -> None """ Called before parsing content. Used to set information about the current directive context on the build environment. @@ -84,6 +105,7 @@ def before_content(self): pass def after_content(self): + # type: () -> None """ Called after parsing content. Used to reset information about the current directive context on the build environment. @@ -91,6 +113,7 @@ def after_content(self): pass def run(self): + # type: () -> List[nodes.Node] """ Main directive entry function, called by docutils upon encountering the directive. @@ -112,7 +135,7 @@ def run(self): self.domain, self.objtype = self.name.split(':', 1) else: self.domain, self.objtype = '', self.name - self.env = self.state.document.settings.env + self.env = self.state.document.settings.env # type: BuildEnvironment self.indexnode = addnodes.index(entries=[]) node = addnodes.desc() @@ -122,7 +145,7 @@ def run(self): node['objtype'] = node['desctype'] = self.objtype node['noindex'] = noindex = ('noindex' in self.options) - self.names = [] + self.names = [] # type: List[unicode] signatures = self.get_signatures() for i, sig in enumerate(signatures): # add a signature node for each signature in the current unit @@ -159,6 +182,7 @@ def run(self): self.after_content() return [self.indexnode, node] + # backwards compatible old name DescDirective = ObjectDescription @@ -172,6 +196,7 @@ class DefaultRole(Directive): final_argument_whitespace = False def run(self): + # type: () -> List[nodes.Node] if not self.arguments: if '' in roles._roles: # restore the "default" default role @@ -200,9 +225,10 @@ class DefaultDomain(Directive): required_arguments = 1 optional_arguments = 0 final_argument_whitespace = False - option_spec = {} + option_spec = {} # type: Dict def run(self): + # type: () -> List[nodes.Node] env = self.state.document.settings.env domain_name = self.arguments[0].lower() # if domain_name not in env.domains: @@ -215,8 +241,10 @@ def run(self): return [] -directives.register_directive('default-role', DefaultRole) -directives.register_directive('default-domain', DefaultDomain) -directives.register_directive('describe', ObjectDescription) -# new, more consistent, name -directives.register_directive('object', ObjectDescription) +def setup(app): + # type: (Sphinx) -> None + directives.register_directive('default-role', DefaultRole) + directives.register_directive('default-domain', DefaultDomain) + directives.register_directive('describe', ObjectDescription) + # new, more consistent, name + directives.register_directive('object', ObjectDescription) diff --git a/sphinx/directives/code.py b/sphinx/directives/code.py index f31ba7a99f6..e401a50de69 100644 --- a/sphinx/directives/code.py +++ b/sphinx/directives/code.py @@ -3,7 +3,7 @@ sphinx.directives.code ~~~~~~~~~~~~~~~~~~~~~~ - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -11,16 +11,22 @@ import codecs from difflib import unified_diff +from six import string_types + from docutils import nodes from docutils.parsers.rst import Directive, directives from docutils.statemachine import ViewList -from six import string_types - from sphinx import addnodes +from sphinx.locale import _ from sphinx.util import parselinenos from sphinx.util.nodes import set_source_info +if False: + # For type annotation + from typing import Any # NOQA + from sphinx.application import Sphinx # NOQA + class Highlight(Directive): """ @@ -37,6 +43,7 @@ class Highlight(Directive): } def run(self): + # type: () -> List[nodes.Node] if 'linenothreshold' in self.options: try: linenothreshold = int(self.options['linenothreshold']) @@ -49,6 +56,7 @@ def run(self): def dedent_lines(lines, dedent): + # type: (List[unicode], int) -> List[unicode] if not dedent: return lines @@ -63,11 +71,14 @@ def dedent_lines(lines, dedent): def container_wrapper(directive, literal_node, caption): + # type: (Directive, nodes.Node, unicode) -> nodes.container container_node = nodes.container('', literal_block=True, classes=['literal-block-wrapper']) parsed = nodes.Element() directive.state.nested_parse(ViewList([caption], source=''), directive.content_offset, parsed) + if isinstance(parsed[0], nodes.system_message): + raise ValueError(parsed[0]) caption_node = nodes.caption(parsed[0].rawsource, '', *parsed[0].children) caption_node.source = parsed[0].source @@ -93,10 +104,12 @@ class CodeBlock(Directive): 'lineno-start': int, 'emphasize-lines': directives.unchanged_required, 'caption': directives.unchanged_required, + 'class': directives.class_option, 'name': directives.unchanged, } def run(self): + # type: () -> List[nodes.Node] code = u'\n'.join(self.content) linespec = self.options.get('emphasize-lines') @@ -119,6 +132,7 @@ def run(self): literal['language'] = self.arguments[0] literal['linenos'] = 'linenos' in self.options or \ 'lineno-start' in self.options + literal['classes'] += self.options.get('class', []) extra_args = literal['highlight_args'] = {} if hl_lines is not None: extra_args['hl_lines'] = hl_lines @@ -128,8 +142,12 @@ def run(self): caption = self.options.get('caption') if caption: - self.options.setdefault('name', nodes.fully_normalize_name(caption)) - literal = container_wrapper(self, literal, caption) + try: + literal = container_wrapper(self, literal, caption) + except ValueError as exc: + document = self.state.document + errmsg = _('Invalid caption: %s' % exc[0][0].astext()) # type: ignore + return [document.reporter.warning(errmsg, line=self.lineno)] # literal will be note_implicit_target that is linked from caption and numref. # when options['name'] is provided, it should be primary ID. @@ -161,22 +179,25 @@ class LiteralInclude(Directive): 'lines': directives.unchanged_required, 'start-after': directives.unchanged_required, 'end-before': directives.unchanged_required, + 'start-at': directives.unchanged_required, + 'end-at': directives.unchanged_required, 'prepend': directives.unchanged_required, 'append': directives.unchanged_required, 'emphasize-lines': directives.unchanged_required, 'caption': directives.unchanged, + 'class': directives.class_option, 'name': directives.unchanged, 'diff': directives.unchanged_required, } def read_with_encoding(self, filename, document, codec_info, encoding): - f = None + # type: (unicode, nodes.Node, Any, unicode) -> List try: - f = codecs.StreamReaderWriter(open(filename, 'rb'), codec_info[2], - codec_info[3], 'strict') - lines = f.readlines() - lines = dedent_lines(lines, self.options.get('dedent')) - return lines + with codecs.StreamReaderWriter(open(filename, 'rb'), codec_info[2], + codec_info[3], 'strict') as f: + lines = f.readlines() + lines = dedent_lines(lines, self.options.get('dedent')) # type: ignore + return lines except (IOError, OSError): return [document.reporter.warning( 'Include file %r not found or reading it failed' % filename, @@ -186,11 +207,9 @@ def read_with_encoding(self, filename, document, codec_info, encoding): 'Encoding %r used for reading included file %r seems to ' 'be wrong, try giving an :encoding: option' % (encoding, filename))] - finally: - if f is not None: - f.close() def run(self): + # type: () -> List[nodes.Node] document = self.state.document if not document.settings.file_insertion_enabled: return [document.reporter.warning('File insertion disabled', @@ -214,6 +233,16 @@ def run(self): 'Cannot use "lineno-match" and "append" or "prepend"', line=self.lineno)] + if 'start-after' in self.options and 'start-at' in self.options: + return [document.reporter.warning( + 'Cannot use both "start-after" and "start-at" options', + line=self.lineno)] + + if 'end-before' in self.options and 'end-at' in self.options: + return [document.reporter.warning( + 'Cannot use both "end-before" and "end-at" options', + line=self.lineno)] + encoding = self.options.get('encoding', env.config.source_encoding) codec_info = codecs.lookup(encoding) @@ -286,17 +315,29 @@ def run(self): else: hl_lines = None - startafter = self.options.get('start-after') - endbefore = self.options.get('end-before') - if startafter is not None or endbefore is not None: - use = not startafter + start_str = self.options.get('start-after') + start_inclusive = False + if self.options.get('start-at') is not None: + start_str = self.options.get('start-at') + start_inclusive = True + end_str = self.options.get('end-before') + end_inclusive = False + if self.options.get('end-at') is not None: + end_str = self.options.get('end-at') + end_inclusive = True + if start_str is not None or end_str is not None: + use = not start_str res = [] for line_number, line in enumerate(lines): - if not use and startafter and startafter in line: + if not use and start_str and start_str in line: if 'lineno-match' in self.options: linenostart += line_number + 1 use = True - elif use and endbefore and endbefore in line: + if start_inclusive: + res.append(line) + elif use and end_str and end_str in line: + if end_inclusive: + res.append(line) break elif use: res.append(line) @@ -322,6 +363,7 @@ def run(self): retnode['linenos'] = 'linenos' in self.options or \ 'lineno-start' in self.options or \ 'lineno-match' in self.options + retnode['classes'] += self.options.get('class', []) extra_args = retnode['highlight_args'] = {} if hl_lines is not None: extra_args['hl_lines'] = hl_lines @@ -332,8 +374,12 @@ def run(self): if caption is not None: if not caption: caption = self.arguments[0] - self.options.setdefault('name', nodes.fully_normalize_name(caption)) - retnode = container_wrapper(self, retnode, caption) + try: + retnode = container_wrapper(self, retnode, caption) + except ValueError as exc: + document = self.state.document + errmsg = _('Invalid caption: %s' % exc[0][0].astext()) # type: ignore + return [document.reporter.warning(errmsg, line=self.lineno)] # retnode will be note_implicit_target that is linked from caption and numref. # when options['name'] is provided, it should be primary ID. @@ -342,8 +388,10 @@ def run(self): return [retnode] -directives.register_directive('highlight', Highlight) -directives.register_directive('highlightlang', Highlight) # old -directives.register_directive('code-block', CodeBlock) -directives.register_directive('sourcecode', CodeBlock) -directives.register_directive('literalinclude', LiteralInclude) +def setup(app): + # type: (Sphinx) -> None + directives.register_directive('highlight', Highlight) + directives.register_directive('highlightlang', Highlight) # old + directives.register_directive('code-block', CodeBlock) + directives.register_directive('sourcecode', CodeBlock) + directives.register_directive('literalinclude', LiteralInclude) diff --git a/sphinx/directives/other.py b/sphinx/directives/other.py index 794dbda5ee0..15944668ee2 100644 --- a/sphinx/directives/other.py +++ b/sphinx/directives/other.py @@ -3,11 +3,12 @@ sphinx.directives.other ~~~~~~~~~~~~~~~~~~~~~~~ - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from six.moves import range + from docutils import nodes from docutils.parsers.rst import Directive, directives from docutils.parsers.rst.directives.admonitions import BaseAdmonition @@ -21,8 +22,14 @@ process_index_entry from sphinx.util.matching import patfilter +if False: + # For type annotation + from typing import Tuple # NOQA + from sphinx.application import Sphinx # NOQA + def int_or_nothing(argument): + # type: (unicode) -> int if not argument: return 999 return int(argument) @@ -46,20 +53,19 @@ class TocTree(Directive): 'includehidden': directives.flag, 'numbered': int_or_nothing, 'titlesonly': directives.flag, + 'reversed': directives.flag, } def run(self): + # type: () -> List[nodes.Node] env = self.state.document.settings.env suffixes = env.config.source_suffix glob = 'glob' in self.options - caption = self.options.get('caption') - if caption: - self.options.setdefault('name', nodes.fully_normalize_name(caption)) ret = [] # (title, ref) pairs, where ref may be a document, or an external link, # and title may be None if the document's title is to be used - entries = [] + entries = [] # type: List[Tuple[unicode, unicode]] includefiles = [] all_docnames = env.found_docs.copy() # don't add the currently visited file in catch-all patterns @@ -109,11 +115,13 @@ def run(self): subnode = addnodes.toctree() subnode['parent'] = env.docname # entries contains all entries (self references, external links etc.) + if 'reversed' in self.options: + entries.reverse() subnode['entries'] = entries # includefiles only entries that are documents subnode['includefiles'] = includefiles subnode['maxdepth'] = self.options.get('maxdepth', -1) - subnode['caption'] = caption + subnode['caption'] = self.options.get('caption') subnode['glob'] = glob subnode['hidden'] = 'hidden' in self.options subnode['includehidden'] = 'includehidden' in self.options @@ -136,9 +144,10 @@ class Author(Directive): required_arguments = 1 optional_arguments = 0 final_argument_whitespace = True - option_spec = {} + option_spec = {} # type: Dict def run(self): + # type: () -> List[nodes.Node] env = self.state.document.settings.env if not env.config.show_authors: return [] @@ -168,20 +177,21 @@ class Index(Directive): required_arguments = 1 optional_arguments = 0 final_argument_whitespace = True - option_spec = {} + option_spec = {} # type: Dict def run(self): + # type: () -> List[nodes.Node] arguments = self.arguments[0].split('\n') env = self.state.document.settings.env targetid = 'index-%s' % env.new_serialno('index') targetnode = nodes.target('', '', ids=[targetid]) self.state.document.note_explicit_target(targetnode) indexnode = addnodes.index() - indexnode['entries'] = ne = [] + indexnode['entries'] = [] indexnode['inline'] = False set_source_info(self, indexnode) for entry in arguments: - ne.extend(process_index_entry(entry, targetid)) + indexnode['entries'].extend(process_index_entry(entry, targetid)) return [indexnode, targetnode] @@ -193,9 +203,10 @@ class VersionChange(Directive): required_arguments = 1 optional_arguments = 1 final_argument_whitespace = True - option_spec = {} + option_spec = {} # type: Dict def run(self): + # type: () -> List[nodes.Node] node = addnodes.versionmodified() node.document = self.state.document set_source_info(self, node) @@ -248,9 +259,10 @@ class TabularColumns(Directive): required_arguments = 1 optional_arguments = 0 final_argument_whitespace = True - option_spec = {} + option_spec = {} # type: Dict def run(self): + # type: () -> List[nodes.Node] node = addnodes.tabular_col_spec() node['spec'] = self.arguments[0] set_source_info(self, node) @@ -265,9 +277,10 @@ class Centered(Directive): required_arguments = 1 optional_arguments = 0 final_argument_whitespace = True - option_spec = {} + option_spec = {} # type: Dict def run(self): + # type: () -> List[nodes.Node] if not self.arguments: return [] subnode = addnodes.centered() @@ -285,9 +298,10 @@ class Acks(Directive): required_arguments = 0 optional_arguments = 0 final_argument_whitespace = False - option_spec = {} + option_spec = {} # type: Dict def run(self): + # type: () -> List[nodes.Node] node = addnodes.acks() node.document = self.state.document self.state.nested_parse(self.content, self.content_offset, node) @@ -311,6 +325,7 @@ class HList(Directive): } def run(self): + # type: () -> List[nodes.Node] ncolumns = self.options.get('columns', 2) node = nodes.paragraph() node.document = self.state.document @@ -342,9 +357,10 @@ class Only(Directive): required_arguments = 1 optional_arguments = 0 final_argument_whitespace = True - option_spec = {} + option_spec = {} # type: Dict def run(self): + # type: () -> List[nodes.Node] node = addnodes.only() node.document = self.state.document set_source_info(self, node) @@ -398,6 +414,7 @@ class Include(BaseInclude): """ def run(self): + # type: () -> List[nodes.Node] env = self.state.document.settings.env if self.arguments[0].startswith('<') and \ self.arguments[0].endswith('>'): @@ -405,27 +422,30 @@ def run(self): return BaseInclude.run(self) rel_filename, filename = env.relfn2path(self.arguments[0]) self.arguments[0] = filename + env.note_included(filename) return BaseInclude.run(self) -directives.register_directive('toctree', TocTree) -directives.register_directive('sectionauthor', Author) -directives.register_directive('moduleauthor', Author) -directives.register_directive('codeauthor', Author) -directives.register_directive('index', Index) -directives.register_directive('deprecated', VersionChange) -directives.register_directive('versionadded', VersionChange) -directives.register_directive('versionchanged', VersionChange) -directives.register_directive('seealso', SeeAlso) -directives.register_directive('tabularcolumns', TabularColumns) -directives.register_directive('centered', Centered) -directives.register_directive('acks', Acks) -directives.register_directive('hlist', HList) -directives.register_directive('only', Only) -directives.register_directive('include', Include) - -# register the standard rst class directive under a different name -# only for backwards compatibility now -directives.register_directive('cssclass', Class) -# new standard name when default-domain with "class" is in effect -directives.register_directive('rst-class', Class) +def setup(app): + # type: (Sphinx) -> None + directives.register_directive('toctree', TocTree) + directives.register_directive('sectionauthor', Author) + directives.register_directive('moduleauthor', Author) + directives.register_directive('codeauthor', Author) + directives.register_directive('index', Index) + directives.register_directive('deprecated', VersionChange) + directives.register_directive('versionadded', VersionChange) + directives.register_directive('versionchanged', VersionChange) + directives.register_directive('seealso', SeeAlso) + directives.register_directive('tabularcolumns', TabularColumns) + directives.register_directive('centered', Centered) + directives.register_directive('acks', Acks) + directives.register_directive('hlist', HList) + directives.register_directive('only', Only) + directives.register_directive('include', Include) + + # register the standard rst class directive under a different name + # only for backwards compatibility now + directives.register_directive('cssclass', Class) + # new standard name when default-domain with "class" is in effect + directives.register_directive('rst-class', Class) diff --git a/sphinx/directives/patches.py b/sphinx/directives/patches.py new file mode 100644 index 00000000000..041bee36050 --- /dev/null +++ b/sphinx/directives/patches.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +""" + sphinx.directives.patches + ~~~~~~~~~~~~~~~~~~~~~~~~~ + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from docutils import nodes +from docutils.parsers.rst import directives +from docutils.parsers.rst.directives import images, html + +from sphinx import addnodes + + +class Figure(images.Figure): + """The figure directive which applies `:name:` option to the figure node + instead of the image node. + """ + + def run(self): + name = self.options.pop('name', None) + result = images.Figure.run(self) + if len(result) == 2 or isinstance(result[0], nodes.system_message): + return result + + (figure_node,) = result + if name: + self.options['name'] = name + self.add_name(figure_node) + + # fill lineno using image node + if figure_node.line is None and len(figure_node) == 2: + figure_node.line = figure_node[1].line + + return [figure_node] + + +class Meta(html.Meta): + def run(self): + env = self.state.document.settings.env + result = html.Meta.run(self) + for node in result: + if (isinstance(node, nodes.pending) and + isinstance(node.details['nodes'][0], html.MetaBody.meta)): + meta = node.details['nodes'][0] + meta.source = env.doc2path(env.docname) + meta.line = self.lineno + meta.rawcontent = meta['content'] + + # docutils' meta nodes aren't picklable because the class is nested + meta.__class__ = addnodes.meta + + return result + + +def setup(app): + directives.register_directive('figure', Figure) + directives.register_directive('meta', Meta) diff --git a/sphinx/domains/__init__.py b/sphinx/domains/__init__.py index 5d530ae5b4b..a90ee84aa4a 100644 --- a/sphinx/domains/__init__.py +++ b/sphinx/domains/__init__.py @@ -6,15 +6,24 @@ Support for domains, which are groupings of description directives and roles describing e.g. constructs of one programming language. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ +import copy + from six import iteritems from sphinx.errors import SphinxError from sphinx.locale import _ +if False: + # For type annotation + from typing import Any, Callable, Iterable, Tuple, Type, Union # NOQA + from docutils import nodes # NOQA + from sphinx.builders import Builder # NOQA + from sphinx.environment import BuildEnvironment # NOQA + class ObjType(object): """ @@ -36,9 +45,10 @@ class ObjType(object): } def __init__(self, lname, *roles, **attrs): - self.lname = lname - self.roles = roles - self.attrs = self.known_attrs.copy() + # type: (unicode, Any, Any) -> None + self.lname = lname # type: unicode + self.roles = roles # type: Tuple + self.attrs = self.known_attrs.copy() # type: Dict self.attrs.update(attrs) @@ -57,17 +67,19 @@ class Index(object): domains using :meth:`~sphinx.application.Sphinx.add_index_to_domain()`. """ - name = None - localname = None - shortname = None + name = None # type: unicode + localname = None # type: unicode + shortname = None # type: unicode def __init__(self, domain): + # type: (Domain) -> None if self.name is None or self.localname is None: raise SphinxError('Index subclass %s has no valid name or localname' % self.__class__.__name__) self.domain = domain def generate(self, docnames=None): + # type: (List[unicode]) -> Tuple[List[Tuple[unicode, List[List[Union[unicode, int]]]]], bool] # NOQA """Return entries for the index given by *name*. If *docnames* is given, restrict to entries referring to these docnames. @@ -126,44 +138,48 @@ class Domain(object): #: domain label: longer, more descriptive (used in messages) label = '' #: type (usually directive) name -> ObjType instance - object_types = {} + object_types = {} # type: Dict[unicode, Any] #: directive name -> directive class - directives = {} + directives = {} # type: Dict[unicode, Any] #: role name -> role callable - roles = {} + roles = {} # type: Dict[unicode, Callable] #: a list of Index subclasses - indices = [] + indices = [] # type: List[Type[Index]] #: role name -> a warning message if reference is missing - dangling_warnings = {} + dangling_warnings = {} # type: Dict[unicode, unicode] #: data value for a fresh environment - initial_data = {} + initial_data = {} # type: Dict + #: data value + data = None # type: Dict #: data version, bump this when the format of `self.data` changes data_version = 0 def __init__(self, env): - self.env = env + # type: (BuildEnvironment) -> None + self.env = env # type: BuildEnvironment if self.name not in env.domaindata: assert isinstance(self.initial_data, dict) - new_data = self.initial_data.copy() + new_data = copy.deepcopy(self.initial_data) new_data['version'] = self.data_version self.data = env.domaindata[self.name] = new_data else: self.data = env.domaindata[self.name] if self.data['version'] != self.data_version: raise IOError('data of %r domain out of date' % self.label) - self._role_cache = {} - self._directive_cache = {} - self._role2type = {} - self._type2role = {} + self._role_cache = {} # type: Dict[unicode, Callable] + self._directive_cache = {} # type: Dict[unicode, Callable] + self._role2type = {} # type: Dict[unicode, List[unicode]] + self._type2role = {} # type: Dict[unicode, unicode] for name, obj in iteritems(self.object_types): for rolename in obj.roles: self._role2type.setdefault(rolename, []).append(name) self._type2role[name] = obj.roles[0] if obj.roles else '' - self.objtypes_for_role = self._role2type.get - self.role_for_objtype = self._type2role.get + self.objtypes_for_role = self._role2type.get # type: Callable[[unicode], List[unicode]] # NOQA + self.role_for_objtype = self._type2role.get # type: Callable[[unicode], unicode] def role(self, name): + # type: (unicode) -> Callable """Return a role adapter function that always gives the registered role its full name ('domain:name') as the first argument. """ @@ -181,6 +197,7 @@ def role_adapter(typ, rawtext, text, lineno, inliner, return role_adapter def directive(self, name): + # type: (unicode) -> Callable """Return a directive adapter class that always gives the registered directive its full name ('domain:name') as ``self.name``. """ @@ -191,7 +208,7 @@ def directive(self, name): fullname = '%s:%s' % (self.name, name) BaseDirective = self.directives[name] - class DirectiveAdapter(BaseDirective): + class DirectiveAdapter(BaseDirective): # type: ignore def run(self): self.name = fullname return BaseDirective.run(self) @@ -201,10 +218,12 @@ def run(self): # methods that should be overwritten def clear_doc(self, docname): + # type: (unicode) -> None """Remove traces of a document in the domain-specific inventories.""" pass def merge_domaindata(self, docnames, otherdata): + # type: (List[unicode], Dict) -> None """Merge in data regarding *docnames* from a different domaindata inventory (coming from a subprocess in parallel builds). """ @@ -213,11 +232,13 @@ def merge_domaindata(self, docnames, otherdata): self.__class__) def process_doc(self, env, docname, document): + # type: (BuildEnvironment, unicode, nodes.Node) -> None """Process a document after it is read by the environment.""" pass def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, unicode, nodes.Node, nodes.Node) -> nodes.Node # NOQA """Resolve the pending_xref *node* with the given *typ* and *target*. This method should return a new node, to replace the xref node, @@ -234,6 +255,7 @@ def resolve_xref(self, env, fromdocname, builder, pass def resolve_any_xref(self, env, fromdocname, builder, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, nodes.Node, nodes.Node) -> List[Tuple[unicode, nodes.Node]] # NOQA """Resolve the pending_xref *node* with the given *target*. The reference comes from an "any" or similar role, which means that we @@ -250,6 +272,7 @@ def resolve_any_xref(self, env, fromdocname, builder, target, node, contnode): raise NotImplementedError def get_objects(self): + # type: () -> Iterable[Tuple[unicode, unicode, unicode, unicode, unicode, int]] """Return an iterable of "object descriptions", which are tuples with five items: @@ -269,24 +292,8 @@ def get_objects(self): return [] def get_type_name(self, type, primary=False): + # type: (ObjType, bool) -> unicode """Return full name for given ObjType.""" if primary: return type.lname return _('%s %s') % (self.label, type.lname) - - -from sphinx.domains.c import CDomain # noqa -from sphinx.domains.cpp import CPPDomain # noqa -from sphinx.domains.std import StandardDomain # noqa -from sphinx.domains.python import PythonDomain # noqa -from sphinx.domains.javascript import JavaScriptDomain # noqa -from sphinx.domains.rst import ReSTDomain # noqa - -BUILTIN_DOMAINS = { - 'std': StandardDomain, - 'py': PythonDomain, - 'c': CDomain, - 'cpp': CPPDomain, - 'js': JavaScriptDomain, - 'rst': ReSTDomain, -} diff --git a/sphinx/domains/c.py b/sphinx/domains/c.py index 6b71f882ddd..cf4c23d5d8b 100644 --- a/sphinx/domains/c.py +++ b/sphinx/domains/c.py @@ -5,7 +5,7 @@ The C language domain. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -22,6 +22,13 @@ from sphinx.util.nodes import make_refnode from sphinx.util.docfields import Field, TypedField +if False: + # For type annotation + from typing import Any, Iterator, Tuple # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.builders import Builder # NOQA + from sphinx.environment import BuildEnvironment # NOQA + # RE to split at word boundaries wsplit_re = re.compile(r'(\W+)') @@ -74,8 +81,9 @@ class CObject(ObjectDescription): )) def _parse_type(self, node, ctype): + # type: (nodes.Node, unicode) -> None # add cross-ref nodes for all words - for part in [_f for _f in wsplit_re.split(ctype) if _f]: + for part in [_f for _f in wsplit_re.split(ctype) if _f]: # type: ignore tnode = nodes.Text(part, part) if part[0] in string.ascii_letters+'_' and \ part not in self.stopwords: @@ -88,11 +96,12 @@ def _parse_type(self, node, ctype): node += tnode def _parse_arglist(self, arglist): + # type: (unicode) -> Iterator[unicode] while True: - m = c_funcptr_arg_sig_re.match(arglist) + m = c_funcptr_arg_sig_re.match(arglist) # type: ignore if m: yield m.group() - arglist = c_funcptr_arg_sig_re.sub('', arglist) + arglist = c_funcptr_arg_sig_re.sub('', arglist) # type: ignore if ',' in arglist: _, arglist = arglist.split(',', 1) else: @@ -106,11 +115,12 @@ def _parse_arglist(self, arglist): break def handle_signature(self, sig, signode): + # type: (unicode, addnodes.desc_signature) -> unicode """Transform a C signature into RST nodes.""" # first try the function pointer signature regex, it's more specific - m = c_funcptr_sig_re.match(sig) + m = c_funcptr_sig_re.match(sig) # type: ignore if m is None: - m = c_sig_re.match(sig) + m = c_sig_re.match(sig) # type: ignore if m is None: raise ValueError('no match') rettype, name, arglist, const = m.groups() @@ -151,7 +161,7 @@ def handle_signature(self, sig, signode): arg = arg.strip() param = addnodes.desc_parameter('', '', noemph=True) try: - m = c_funcptr_arg_sig_re.match(arg) + m = c_funcptr_arg_sig_re.match(arg) # type: ignore if m: self._parse_type(param, m.group(1) + '(') param += nodes.emphasis(m.group(2), m.group(2)) @@ -173,6 +183,7 @@ def handle_signature(self, sig, signode): return fullname def get_index_text(self, name): + # type: (unicode) -> unicode if self.objtype == 'function': return _('%s (C function)') % name elif self.objtype == 'member': @@ -187,6 +198,7 @@ def get_index_text(self, name): return '' def add_target_and_index(self, name, sig, signode): + # type: (unicode, unicode, addnodes.desc_signature) -> None # for C API items we add a prefix since names are usually not qualified # by a module name and so easily clash with e.g. section titles targetname = 'c.' + name @@ -206,9 +218,10 @@ def add_target_and_index(self, name, sig, signode): indextext = self.get_index_text(name) if indextext: self.indexnode['entries'].append(('single', indextext, - targetname, '')) + targetname, '', None)) def before_content(self): + # type: () -> None self.typename_set = False if self.name == 'c:type': if self.names: @@ -216,12 +229,14 @@ def before_content(self): self.typename_set = True def after_content(self): + # type: () -> None if self.typename_set: self.env.ref_context.pop('c:type', None) class CXRefRole(XRefRole): def process_link(self, env, refnode, has_explicit_title, title, target): + # type: (BuildEnvironment, nodes.Node, bool, unicode, unicode) -> Tuple[unicode, unicode] # NOQA if not has_explicit_title: target = target.lstrip('~') # only has a meaning for the title # if the first character is a tilde, don't display the module/class @@ -262,14 +277,16 @@ class CDomain(Domain): } initial_data = { 'objects': {}, # fullname -> docname, objtype - } + } # type: Dict[unicode, Dict[unicode, Tuple[unicode, Any]]] def clear_doc(self, docname): + # type: (unicode) -> None for fullname, (fn, _l) in list(self.data['objects'].items()): if fn == docname: del self.data['objects'][fullname] def merge_domaindata(self, docnames, otherdata): + # type: (List[unicode], Dict) -> None # XXX check duplicates for fullname, (fn, objtype) in otherdata['objects'].items(): if fn in docnames: @@ -277,8 +294,12 @@ def merge_domaindata(self, docnames, otherdata): def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, unicode, nodes.Node, nodes.Node) -> nodes.Node # NOQA # strip pointer asterisk target = target.rstrip(' *') + # becase TypedField can generate xrefs + if target in CObject.stopwords: + return contnode if target not in self.data['objects']: return None obj = self.data['objects'][target] @@ -287,6 +308,7 @@ def resolve_xref(self, env, fromdocname, builder, def resolve_any_xref(self, env, fromdocname, builder, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, nodes.Node, nodes.Node) -> List[Tuple[unicode, nodes.Node]] # NOQA # strip pointer asterisk target = target.rstrip(' *') if target not in self.data['objects']: @@ -297,5 +319,11 @@ def resolve_any_xref(self, env, fromdocname, builder, target, contnode, target))] def get_objects(self): + # type: () -> Iterator[Tuple[unicode, unicode, unicode, unicode, unicode, int]] for refname, (docname, type) in list(self.data['objects'].items()): yield (refname, refname, type, docname, 'c.' + refname, 1) + + +def setup(app): + # type: (Sphinx) -> None + app.add_domain(CDomain) diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py index 552b32252f7..5eeabcb11a6 100644 --- a/sphinx/domains/cpp.py +++ b/sphinx/domains/cpp.py @@ -5,7 +5,7 @@ The C++ language domain. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -13,6 +13,7 @@ from copy import deepcopy from six import iteritems, text_type + from docutils import nodes from sphinx import addnodes @@ -25,8 +26,18 @@ from sphinx.util.pycompat import UnicodeMixin from sphinx.util.docfields import Field, GroupedField +if False: + # For type annotation + from typing import Any, Iterator, Match, Pattern, Tuple, Union # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.builders import Builder # NOQA + from sphinx.config import Config # NOQA + from sphinx.environment import BuildEnvironment # NOQA + """ - Important note on ids: + Important note on ids + ---------------------------------------------------------------------------- + Multiple id generation schemes are used due to backwards compatibility. - v1: 1.2.3 <= version < 1.3 The style used before the rewrite. @@ -38,8 +49,23 @@ All versions are generated and attached to elements. The newest is used for the index. All of the versions should work as permalinks. + + Tagnames + ---------------------------------------------------------------------------- + + Each desc_signature node will have the attribute 'sphinx_cpp_tagname' set to + - 'templateParams', if the line is on the form 'template<...>', + - 'templateIntroduction, if the line is on the form 'conceptName{...}' + - 'declarator', if the line contains the name of the declared object. + No other desc_signature nodes should exist (so far). + + + Grammar + ---------------------------------------------------------------------------- + See http://www.nongnu.org/hcb/ for the grammar, - or https://github.com/cplusplus/draft/blob/master/source/grammar.tex + and https://github.com/cplusplus/draft/blob/master/source/grammar.tex, + and https://github.com/cplusplus/concepts-ts for the newest grammar. common grammar things: @@ -75,8 +101,13 @@ decl-specifier -> storage-class-specifier -> - "static" (only for member_object and function_object) + ( "static" (only for member_object and function_object) + | "extern" (only for member_object and function_object) | "register" + ) + thread_local[opt] (only for member_object) + (it can also appear before the others) + | type-specifier -> trailing-type-specifier | function-specifier -> "inline" | "virtual" | "explicit" (only for function_object) @@ -151,7 +182,7 @@ | "& attribute-specifier-seq[opt] | "&&" attribute-specifier-seq[opt] | "::"[opt] nested-name-specifier "*" attribute-specifier-seq[opt] - cv-qualifier-seq[opt] # TOOD: not implemented + cv-qualifier-seq[opt] # function_object must use a parameters-and-qualifiers, the others may # use it (e.g., function poitners) parameters-and-qualifiers -> @@ -181,6 +212,17 @@ We additionally add the possibility for specifying the visibility as the first thing. + concept_object: + goal: + just a declaration of the name (for now) + either a variable concept or function concept + + grammar: only a single template parameter list, and the nested name + may not have any template argument lists + + "template" "<" template-parameter-list ">" + nested-name-specifier "()"[opt] + type_object: goal: either a single type (e.g., "MyClass:Something_T" or a typedef-like @@ -284,7 +326,7 @@ 'signed long': 'l', 'unsigned long': 'L', 'bool': 'b' -} +} # type: Dict[unicode, unicode] _id_shorthands_v1 = { 'std::string': 'ss', 'std::ostream': 'os', @@ -292,7 +334,7 @@ 'std::iostream': 'ios', 'std::vector': 'v', 'std::map': 'm' -} +} # type: Dict[unicode, unicode] _id_operator_v1 = { 'new': 'new-operator', 'new[]': 'new-array-operator', @@ -341,7 +383,7 @@ '->': 'pointer-operator', '()': 'call-operator', '[]': 'subscript-operator' -} +} # type: Dict[unicode, unicode] # ------------------------------------------------------------------------------ # Id v2 constants @@ -387,7 +429,7 @@ 'auto': 'Da', 'decltype(auto)': 'Dc', 'std::nullptr_t': 'Dn' -} +} # type: Dict[unicode, unicode] _id_operator_v2 = { 'new': 'nw', 'new[]': 'na', @@ -436,32 +478,50 @@ '->': 'pt', '()': 'cl', '[]': 'ix' -} +} # type: Dict[unicode, unicode] class NoOldIdError(UnicodeMixin, Exception): # Used to avoid implementing unneeded id generation for old id schmes. def __init__(self, description=""): + # type: (unicode) -> None self.description = description def __unicode__(self): + # type: () -> unicode return self.description class DefinitionError(UnicodeMixin, Exception): def __init__(self, description): + # type: (unicode) -> None self.description = description def __unicode__(self): + # type: () -> unicode return self.description +class _DuplicateSymbolError(UnicodeMixin, Exception): + def __init__(self, symbol, candSymbol): + # type: (Symbol, Symbol) -> None + assert symbol + assert candSymbol + self.symbol = symbol + self.candSymbol = candSymbol + + def __unicode__(self): + # type: () -> unicode + return "Internal C++ duplicate symbol error:\n%s" % self.symbol.dump(0) + + class ASTBase(UnicodeMixin): def __eq__(self, other): + # type: (Any) -> bool if type(self) is not type(other): return False try: - for key, value in iteritems(self.__dict__): + for key, value in iteritems(self.__dict__): # type: ignore if value != getattr(other, key): return False except AttributeError: @@ -469,23 +529,28 @@ def __eq__(self, other): return True def __ne__(self, other): + # type: (Any) -> bool return not self.__eq__(other) - __hash__ = None + __hash__ = None # type: None def clone(self): + # type: () -> ASTBase """Clone a definition expression node.""" return deepcopy(self) def get_id_v1(self): + # type: () -> unicode """Return the v1 id for the node.""" raise NotImplementedError(repr(self)) def get_id_v2(self): + # type: () -> unicode """Return the v2 id for the node.""" raise NotImplementedError(repr(self)) def get_name(self): + # type: () -> unicode """Return the name. Returns either `None` or a node with a name you might call @@ -494,10 +559,12 @@ def get_name(self): raise NotImplementedError(repr(self)) def prefix_nested_name(self, prefix): + # type: (unicode) -> unicode """Prefix a name node (a node returned by :meth:`get_name`).""" raise NotImplementedError(repr(self)) def __unicode__(self): + # type: () -> unicode raise NotImplementedError(repr(self)) def __repr__(self): @@ -505,22 +572,114 @@ def __repr__(self): def _verify_description_mode(mode): + # type: (unicode) -> None if mode not in ('lastIsName', 'noneIsName', 'markType', 'param'): raise Exception("Description mode '%s' is invalid." % mode) +class ASTCPPAttribute(ASTBase): + def __init__(self, arg): + # type: (unicode) -> None + self.arg = arg + + def __unicode__(self): + # type: () -> unicode + return "[[" + self.arg + "]]" + + def describe_signature(self, signode): + # type: (addnodes.desc_signature) -> None + txt = text_type(self) + signode.append(nodes.Text(txt, txt)) + + +class ASTGnuAttribute(ASTBase): + def __init__(self, name, args): + # type: (unicode, Any) -> None + self.name = name + self.args = args + + def __unicode__(self): + # type: () -> unicode + res = [self.name] # type: List[unicode] + if self.args: + res.append('(') + res.append(text_type(self.args)) + res.append(')') + return ''.join(res) + + +class ASTGnuAttributeList(ASTBase): + def __init__(self, attrs): + # type: (List[Any]) -> None + self.attrs = attrs + + def __unicode__(self): + # type: () -> unicode + res = ['__attribute__(('] # type: List[unicode] + first = True + for attr in self.attrs: + if not first: + res.append(', ') + first = False + res.append(text_type(attr)) + res.append('))') + return ''.join(res) + + def describe_signature(self, signode): + # type: (addnodes.desc_signature) -> None + txt = text_type(self) + signode.append(nodes.Text(txt, txt)) + + +class ASTIdAttribute(ASTBase): + """For simple attributes defined by the user.""" + + def __init__(self, id): + # type: (unicode) -> None + self.id = id + + def __unicode__(self): + # type: () -> unicode + return self.id + + def describe_signature(self, signode): + # type: (addnodes.desc_signature) -> None + signode.append(nodes.Text(self.id, self.id)) + + +class ASTParenAttribute(ASTBase): + """For paren attributes defined by the user.""" + + def __init__(self, id, arg): + # type: (unicode, unicode) -> None + self.id = id + self.arg = arg + + def __unicode__(self): + # type: () -> unicode + return self.id + '(' + self.arg + ')' + + def describe_signature(self, signode): + # type: (addnodes.desc_signature) -> None + txt = text_type(self) + signode.append(nodes.Text(txt, txt)) + + class ASTIdentifier(ASTBase): def __init__(self, identifier): + # type: (unicode) -> None assert identifier is not None self.identifier = identifier def get_id_v1(self): + # type: () -> unicode if self.identifier == 'size_t': return 's' else: return self.identifier def get_id_v2(self): + # type: () -> unicode if self.identifier == "std": return 'St' elif self.identifier[0] == "~": @@ -530,18 +689,21 @@ def get_id_v2(self): return text_type(len(self.identifier)) + self.identifier def __unicode__(self): + # type: () -> unicode return self.identifier def describe_signature(self, signode, mode, env, prefix, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, unicode, Symbol) -> None _verify_description_mode(mode) if mode == 'markType': targetText = prefix + self.identifier - pnode = addnodes.pending_xref('', refdomain='cpp', reftype='type', + pnode = addnodes.pending_xref('', refdomain='cpp', + reftype='typeOrConcept', reftarget=targetText, modname=None, classname=None) key = symbol.get_lookup_key() assert key - pnode['cpp:parentKey'] = key + pnode['cpp:parent_key'] = key pnode += nodes.Text(self.identifier) signode += pnode elif mode == 'lastIsName': @@ -554,6 +716,7 @@ def describe_signature(self, signode, mode, env, prefix, symbol): class ASTTemplateKeyParamPackIdDefault(ASTBase): def __init__(self, key, identifier, parameterPack, default): + # type: (unicode, Any, bool, Any) -> None assert key if parameterPack: assert default is None @@ -563,9 +726,11 @@ def __init__(self, key, identifier, parameterPack, default): self.default = default def get_identifier(self): + # type: () -> unicode return self.identifier def get_id_v2(self): + # type: () -> unicode # this is not part of the normal name mangling in C++ res = [] if self.parameterPack: @@ -575,7 +740,8 @@ def get_id_v2(self): return ''.join(res) def __unicode__(self): - res = [self.key] + # type: () -> unicode + res = [self.key] # type: List[unicode] if self.parameterPack: if self.identifier: res.append(' ') @@ -590,6 +756,7 @@ def __unicode__(self): return ''.join(res) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None signode += nodes.Text(self.key) if self.parameterPack: if self.identifier: @@ -606,18 +773,22 @@ def describe_signature(self, signode, mode, env, symbol): class ASTTemplateParamType(ASTBase): def __init__(self, data): + # type: (Any) -> None assert data self.data = data @property def name(self): + # type: () -> ASTNestedName id = self.get_identifier() return ASTNestedName([ASTNestedNameElement(id, None)], rooted=False) def get_identifier(self): + # type: () -> unicode return self.data.get_identifier() def get_id_v2(self, objectType=None, symbol=None): + # type: (unicode, Symbol) -> unicode # this is not part of the normal name mangling in C++ if symbol: # the anchor will be our parent @@ -626,14 +797,17 @@ def get_id_v2(self, objectType=None, symbol=None): return self.data.get_id_v2() def __unicode__(self): + # type: () -> unicode return text_type(self.data) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None self.data.describe_signature(signode, mode, env, symbol) class ASTTemplateParamTemplateType(ASTBase): def __init__(self, nestedParams, data): + # type: (Any, Any) -> None assert nestedParams assert data self.nestedParams = nestedParams @@ -641,13 +815,16 @@ def __init__(self, nestedParams, data): @property def name(self): + # type: () -> ASTNestedName id = self.get_identifier() return ASTNestedName([ASTNestedNameElement(id, None)], rooted=False) def get_identifier(self): + # type: () -> unicode return self.data.get_identifier() def get_id_v2(self, objectType=None, symbol=None): + # type: (unicode, Symbol) -> unicode # this is not part of the normal name mangling in C++ if symbol: # the anchor will be our parent @@ -656,9 +833,11 @@ def get_id_v2(self, objectType=None, symbol=None): return self.nestedParams.get_id_v2() + self.data.get_id_v2() def __unicode__(self): + # type: () -> unicode return text_type(self.nestedParams) + text_type(self.data) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None self.nestedParams.describe_signature(signode, 'noneIsName', env, symbol) signode += nodes.Text(' ') self.data.describe_signature(signode, mode, env, symbol) @@ -666,15 +845,18 @@ def describe_signature(self, signode, mode, env, symbol): class ASTTemplateParamNonType(ASTBase): def __init__(self, param): + # type: (Any) -> None assert param self.param = param @property def name(self): + # type: () -> ASTNestedName id = self.get_identifier() return ASTNestedName([ASTNestedNameElement(id, None)], rooted=False) def get_identifier(self): + # type: () -> unicode name = self.param.name if name: assert len(name.names) == 1 @@ -685,6 +867,7 @@ def get_identifier(self): return None def get_id_v2(self, objectType=None, symbol=None): + # type: (unicode, Symbol) -> unicode # this is not part of the normal name mangling in C++ if symbol: # the anchor will be our parent @@ -693,18 +876,22 @@ def get_id_v2(self, objectType=None, symbol=None): return '_' + self.param.get_id_v2() def __unicode__(self): + # type: () -> unicode return text_type(self.param) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None self.param.describe_signature(signode, mode, env, symbol) class ASTTemplateParams(ASTBase): def __init__(self, params): + # type: (Any) -> None assert params is not None self.params = params def get_id_v2(self): + # type: () -> unicode res = [] res.append("I") for param in self.params: @@ -713,6 +900,7 @@ def get_id_v2(self): return ''.join(res) def __unicode__(self): + # type: () -> unicode res = [] res.append(u"template<") res.append(u", ".join(text_type(a) for a in self.params)) @@ -720,6 +908,8 @@ def __unicode__(self): return ''.join(res) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None + signode.sphinx_cpp_tagname = 'templateParams' signode += nodes.Text("template<") first = True for param in self.params: @@ -730,8 +920,105 @@ def describe_signature(self, signode, mode, env, symbol): signode += nodes.Text(">") +class ASTTemplateIntroductionParameter(ASTBase): + def __init__(self, identifier, parameterPack): + # type: (Any, Any) -> None + self.identifier = identifier + self.parameterPack = parameterPack + + def get_identifier(self): + # type: () -> unicode + return self.identifier + + def get_id_v2(self, objectType=None, symbol=None): + # type: (unicode, Symbol) -> unicode + # this is not part of the normal name mangling in C++ + if symbol: + # the anchor will be our parent + return symbol.parent.declaration.get_id_v2(prefixed=None) + else: + if self.parameterPack: + return 'Dp' + else: + return '0' # we need to put something + + def get_id_v2_as_arg(self): + # type: () -> unicode + # used for the implicit requires clause + res = self.identifier.get_id_v2() + if self.parameterPack: + return u'sp' + res + else: + return res + + def __unicode__(self): + # type: () -> unicode + res = [] # type: List[unicode] + if self.parameterPack: + res.append('...') + res.append(text_type(self.identifier)) + return ''.join(res) + + def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None + if self.parameterPack: + signode += nodes.Text('...') + self.identifier.describe_signature(signode, mode, env, '', symbol) + + +class ASTTemplateIntroduction(ASTBase): + def __init__(self, concept, params): + # type: (Any, List[Any]) -> None + assert len(params) > 0 + self.concept = concept + self.params = params + + # id_v1 does not exist + + def get_id_v2(self): + # type: () -> unicode + # first do the same as a normal template parameter list + res = [] + res.append("I") + for param in self.params: + res.append(param.get_id_v2()) + res.append("E") + # let's use X expr E, which is otherwise for constant template args + res.append("X") + res.append(self.concept.get_id_v2()) + res.append("I") + for param in self.params: + res.append(param.get_id_v2_as_arg()) + res.append("E") + res.append("E") + return ''.join(res) + + def __unicode__(self): + # type: () -> unicode + res = [] + res.append(text_type(self.concept)) + res.append('{') + res.append(', '.join(text_type(param) for param in self.params)) + res.append('} ') + return ''.join(res) + + def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None + signode.sphinx_cpp_tagname = 'templateIntroduction' + self.concept.describe_signature(signode, 'markType', env, symbol) + signode += nodes.Text('{') + first = True + for param in self.params: + if not first: + signode += nodes.Text(', ') + first = False + param.describe_signature(signode, mode, env, symbol) + signode += nodes.Text('}') + + class ASTTemplateDeclarationPrefix(ASTBase): def __init__(self, templates): + # type: (List[Any]) -> None assert templates is not None assert len(templates) > 0 self.templates = templates @@ -739,6 +1026,7 @@ def __init__(self, templates): # id_v1 does not exist def get_id_v2(self): + # type: () -> unicode # this is not part of a normal name mangling system res = [] for t in self.templates: @@ -746,45 +1034,53 @@ def get_id_v2(self): return u''.join(res) def __unicode__(self): + # type: () -> unicode res = [] for t in self.templates: res.append(text_type(t)) return u''.join(res) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) for t in self.templates: - templateNode = nodes.line() + templateNode = addnodes.desc_signature_line() t.describe_signature(templateNode, 'lastIsName', env, symbol) signode += templateNode class ASTOperatorBuildIn(ASTBase): def __init__(self, op): + # type: (unicode) -> None self.op = op def is_operator(self): + # type: () -> bool return True def get_id_v1(self): + # type: () -> unicode if self.op not in _id_operator_v1: raise Exception('Internal error: Build-in operator "%s" can not ' 'be mapped to an id.' % self.op) return _id_operator_v1[self.op] def get_id_v2(self): + # type: () -> unicode if self.op not in _id_operator_v2: raise Exception('Internal error: Build-in operator "%s" can not ' 'be mapped to an id.' % self.op) return _id_operator_v2[self.op] def __unicode__(self): + # type: () -> unicode if self.op in ('new', 'new[]', 'delete', 'delete[]'): return u'operator ' + self.op else: return u'operator' + self.op def describe_signature(self, signode, mode, env, prefix, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, unicode, Symbol) -> None _verify_description_mode(mode) identifier = text_type(self) if mode == 'lastIsName': @@ -795,24 +1091,62 @@ def describe_signature(self, signode, mode, env, prefix, symbol): class ASTOperatorType(ASTBase): def __init__(self, type): + # type: (Any) -> None self.type = type def is_operator(self): + # type: () -> bool return True def get_id_v1(self): + # type: () -> unicode return u'castto-%s-operator' % self.type.get_id_v1() def get_id_v2(self): + # type: () -> unicode return u'cv' + self.type.get_id_v2() def __unicode__(self): + # type: () -> unicode return u''.join(['operator ', text_type(self.type)]) def get_name_no_template(self): + # type: () -> unicode return text_type(self) def describe_signature(self, signode, mode, env, prefix, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, unicode, Symbol) -> None + _verify_description_mode(mode) + identifier = text_type(self) + if mode == 'lastIsName': + signode += addnodes.desc_name(identifier, identifier) + else: + signode += addnodes.desc_addname(identifier, identifier) + + +class ASTOperatorLiteral(ASTBase): + def __init__(self, identifier): + # type: (Any) -> None + self.identifier = identifier + + def is_operator(self): + # type: () -> bool + return True + + def get_id_v1(self): + # type: () -> unicode + raise NoOldIdError() + + def get_id_v2(self): + # type: () -> unicode + return u'li' + self.identifier.get_id_v2() + + def __unicode__(self): + # type: () -> unicode + return u'operator""' + text_type(self.identifier) + + def describe_signature(self, signode, mode, env, prefix, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, unicode, Symbol) -> None _verify_description_mode(mode) identifier = text_type(self) if mode == 'lastIsName': @@ -823,38 +1157,46 @@ def describe_signature(self, signode, mode, env, prefix, symbol): class ASTTemplateArgConstant(ASTBase): def __init__(self, value): + # type: (Any) -> None self.value = value def __unicode__(self): + # type: () -> unicode return text_type(self.value) def get_id_v1(self): + # type: () -> unicode return text_type(self).replace(u' ', u'-') def get_id_v2(self): + # type: () -> unicode # TODO: doing this properly needs parsing of expressions, let's just # juse it verbatim for now return u'X' + text_type(self) + u'E' def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) signode += nodes.Text(text_type(self)) class ASTTemplateArgs(ASTBase): def __init__(self, args): + # type: (List[Any]) -> None assert args is not None assert len(args) > 0 self.args = args def get_id_v1(self): - res = [] + # type: () -> unicode + res = [] # type: List[unicode] res.append(':') res.append(u'.'.join(a.get_id_v1() for a in self.args)) res.append(':') return u''.join(res) def get_id_v2(self): + # type: () -> unicode res = [] res.append('I') for a in self.args: @@ -863,10 +1205,12 @@ def get_id_v2(self): return u''.join(res) def __unicode__(self): + # type: () -> unicode res = ', '.join(text_type(a) for a in self.args) return '<' + res + '>' def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) signode += nodes.Text('<') first = True @@ -880,31 +1224,37 @@ def describe_signature(self, signode, mode, env, symbol): class ASTNestedNameElement(ASTBase): def __init__(self, identifier, templateArgs): + # type: (Any, Any) -> None self.identifier = identifier self.templateArgs = templateArgs def is_operator(self): + # type: () -> bool return False def get_id_v1(self): + # type: () -> unicode res = self.identifier.get_id_v1() if self.templateArgs: res += self.templateArgs.get_id_v1() return res def get_id_v2(self): + # type: () -> unicode res = self.identifier.get_id_v2() if self.templateArgs: res += self.templateArgs.get_id_v2() return res def __unicode__(self): + # type: () -> unicode res = text_type(self.identifier) if self.templateArgs: res += text_type(self.templateArgs) return res def describe_signature(self, signode, mode, env, prefix, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, unicode, Symbol) -> None self.identifier.describe_signature(signode, mode, env, prefix, symbol) if self.templateArgs: self.templateArgs.describe_signature(signode, mode, env, symbol) @@ -912,17 +1262,18 @@ def describe_signature(self, signode, mode, env, prefix, symbol): class ASTNestedName(ASTBase): def __init__(self, names, rooted): + # type: (List[Any], bool) -> None assert len(names) > 0 self.names = names self.rooted = rooted - for i in range(len(names) - 1): - assert not names[i].is_operator() @property def name(self): + # type: () -> ASTNestedName return self def num_templates(self): + # type: () -> int count = 0 for n in self.names: if n.is_operator(): @@ -932,6 +1283,7 @@ def num_templates(self): return count def get_id_v1(self): + # type: () -> unicode tt = text_type(self) if tt in _id_shorthands_v1: return _id_shorthands_v1[tt] @@ -939,7 +1291,8 @@ def get_id_v1(self): return u'::'.join(n.get_id_v1() for n in self.names) def get_id_v2(self, modifiers=""): - res = [] + # type: (unicode) -> unicode + res = [] # type: List[unicode] if len(self.names) > 1 or len(modifiers) > 0: res.append('N') res.append(modifiers) @@ -950,7 +1303,8 @@ def get_id_v2(self, modifiers=""): return u''.join(res) def __unicode__(self): - res = [] + # type: () -> unicode + res = [] # type: List[unicode] if self.rooted: res.append('') for n in self.names: @@ -958,15 +1312,16 @@ def __unicode__(self): return '::'.join(res) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) # just print the name part, with template args, not template params if mode == 'lastIsName': - addname = [] + addname = [] # type: List[unicode] if self.rooted: addname.append('') for n in self.names[:-1]: addname.append(text_type(n)) - addname = '::'.join(addname) + addname = '::'.join(addname) # type: ignore if len(self.names) > 1: addname += '::' signode += addnodes.desc_addname(addname, addname) @@ -980,7 +1335,7 @@ def describe_signature(self, signode, mode, env, symbol): # each element should be a pending xref targeting the complete # prefix. however, only the identifier part should be a link, such # that template args can be a link as well. - prefix = '' + prefix = '' # type: unicode first = True for name in self.names: if not first: @@ -988,7 +1343,7 @@ def describe_signature(self, signode, mode, env, symbol): prefix += '::' first = False if name != '': - name.describe_signature(signode, mode, env, prefix, symbol) + name.describe_signature(signode, mode, env, prefix, symbol) # type: ignore prefix += text_type(name) else: raise Exception('Unknown description mode: %s' % mode) @@ -996,12 +1351,15 @@ def describe_signature(self, signode, mode, env, symbol): class ASTTrailingTypeSpecFundamental(ASTBase): def __init__(self, name): + # type: (unicode) -> None self.name = name def __unicode__(self): + # type: () -> unicode return self.name def get_id_v1(self): + # type: () -> unicode res = [] for a in self.name.split(' '): if a in _id_fundamental_v1: @@ -1011,6 +1369,7 @@ def get_id_v1(self): return u'-'.join(res) def get_id_v2(self): + # type: () -> unicode if self.name not in _id_fundamental_v2: raise Exception( 'Semi-internal error: Fundamental type "%s" can not be mapped ' @@ -1019,26 +1378,32 @@ def get_id_v2(self): return _id_fundamental_v2[self.name] def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None signode += nodes.Text(text_type(self.name)) class ASTTrailingTypeSpecName(ASTBase): def __init__(self, prefix, nestedName): + # type: (unicode, Any) -> None self.prefix = prefix self.nestedName = nestedName @property def name(self): + # type: () -> Any return self.nestedName def get_id_v1(self): + # type: () -> unicode return self.nestedName.get_id_v1() def get_id_v2(self): + # type: () -> unicode return self.nestedName.get_id_v2() def __unicode__(self): - res = [] + # type: () -> unicode + res = [] # type: List[unicode] if self.prefix: res.append(self.prefix) res.append(' ') @@ -1046,6 +1411,7 @@ def __unicode__(self): return u''.join(res) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None if self.prefix: signode += addnodes.desc_annotation(self.prefix, self.prefix) signode += nodes.Text(' ') @@ -1054,28 +1420,33 @@ def describe_signature(self, signode, mode, env, symbol): class ASTFunctinoParameter(ASTBase): def __init__(self, arg, ellipsis=False): + # type: (Any, bool) -> None self.arg = arg self.ellipsis = ellipsis def get_id_v1(self): + # type: () -> unicode if self.ellipsis: return 'z' else: return self.arg.get_id_v1() def get_id_v2(self): + # type: () -> unicode if self.ellipsis: return 'z' else: return self.arg.get_id_v2() def __unicode__(self): + # type: () -> unicode if self.ellipsis: return '...' else: return text_type(self.arg) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) if self.ellipsis: signode += nodes.Text('...') @@ -1086,6 +1457,7 @@ def describe_signature(self, signode, mode, env, symbol): class ASTParametersQualifiers(ASTBase): def __init__(self, args, volatile, const, refQual, exceptionSpec, override, final, initializer): + # type: (List[Any], bool, bool, unicode, unicode, bool, bool, unicode) -> None self.args = args self.volatile = volatile self.const = const @@ -1098,6 +1470,7 @@ def __init__(self, args, volatile, const, refQual, exceptionSpec, override, # Id v1 ------------------------------------------------------------------ def get_modifiers_id_v1(self): + # type: () -> unicode res = [] if self.volatile: res.append('V') @@ -1110,6 +1483,7 @@ def get_modifiers_id_v1(self): return u''.join(res) def get_param_id_v1(self): + # type: () -> unicode if len(self.args) == 0: return '' else: @@ -1118,6 +1492,7 @@ def get_param_id_v1(self): # Id v2 ------------------------------------------------------------------ def get_modifiers_id_v2(self): + # type: () -> unicode res = [] if self.volatile: res.append('V') @@ -1130,13 +1505,15 @@ def get_modifiers_id_v2(self): return u''.join(res) def get_param_id_v2(self): + # type: () -> unicode if len(self.args) == 0: return 'v' else: return u''.join(a.get_id_v2() for a in self.args) def __unicode__(self): - res = [] + # type: () -> unicode + res = [] # type: List[unicode] res.append('(') first = True for a in self.args: @@ -1165,6 +1542,7 @@ def __unicode__(self): return u''.join(res) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) paramlist = addnodes.desc_parameterlist() for arg in self.args: @@ -1200,9 +1578,11 @@ def _add_text(signode, text): class ASTDeclSpecsSimple(ASTBase): - def __init__(self, storage, inline, virtual, explicit, - constexpr, volatile, const, friend): + def __init__(self, storage, threadLocal, inline, virtual, explicit, + constexpr, volatile, const, friend, attrs): + # type: (unicode, bool, bool, bool, bool, bool, bool, bool, bool, List[Any]) -> None self.storage = storage + self.threadLocal = threadLocal self.inline = inline self.virtual = virtual self.explicit = explicit @@ -1210,23 +1590,31 @@ def __init__(self, storage, inline, virtual, explicit, self.volatile = volatile self.const = const self.friend = friend + self.attrs = attrs def mergeWith(self, other): + # type: (ASTDeclSpecsSimple) -> ASTDeclSpecsSimple if not other: return self return ASTDeclSpecsSimple(self.storage or other.storage, + self.threadLocal or other.threadLocal, self.inline or other.inline, self.virtual or other.virtual, self.explicit or other.explicit, self.constexpr or other.constexpr, self.volatile or other.volatile, self.const or other.const, - self.friend or other.friend) + self.friend or other.friend, + self.attrs + other.attrs) def __unicode__(self): - res = [] + # type: () -> unicode + res = [] # type: List[unicode] + res.extend(text_type(attr) for attr in self.attrs) if self.storage: res.append(self.storage) + if self.threadLocal: + res.append('thread_local') if self.inline: res.append('inline') if self.friend: @@ -1244,12 +1632,19 @@ def __unicode__(self): return u' '.join(res) def describe_signature(self, modifiers): + # type: (List[nodes.Node]) -> None def _add(modifiers, text): if len(modifiers) > 0: modifiers.append(nodes.Text(' ')) modifiers.append(addnodes.desc_annotation(text, text)) + for attr in self.attrs: + if len(modifiers) > 0: + modifiers.append(nodes.Text(' ')) + modifiers.append(attr.describe_signature(modifiers)) if self.storage: _add(modifiers, self.storage) + if self.threadLocal: + _add(modifiers, 'thread_local') if self.inline: _add(modifiers, 'inline') if self.friend: @@ -1278,9 +1673,11 @@ def __init__(self, outer, leftSpecs, rightSpecs, trailing): @property def name(self): + # type: () -> unicode return self.trailingTypeSpec.name def get_id_v1(self): + # type: () -> unicode res = [] res.append(self.trailingTypeSpec.get_id_v1()) if self.allSpecs.volatile: @@ -1290,6 +1687,7 @@ def get_id_v1(self): return u''.join(res) def get_id_v2(self): + # type: () -> unicode res = [] if self.leftSpecs.volatile or self.rightSpecs.volatile: res.append('V') @@ -1299,7 +1697,8 @@ def get_id_v2(self): return u''.join(res) def __unicode__(self): - res = [] + # type: () -> unicode + res = [] # type: List[unicode] l = text_type(self.leftSpecs) if len(l) > 0: if len(res) > 0: @@ -1317,8 +1716,9 @@ def __unicode__(self): return "".join(res) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) - modifiers = [] + modifiers = [] # type: List[nodes.Node] def _add(modifiers, text): if len(modifiers) > 0: @@ -1344,15 +1744,19 @@ def _add(modifiers, text): class ASTArray(ASTBase): def __init__(self, size): + # type: (unicode) -> None self.size = size def __unicode__(self): + # type: () -> unicode return u''.join(['[', text_type(self.size), ']']) def get_id_v1(self): + # type: () -> unicode return u'A' def get_id_v2(self): + # type: () -> unicode # TODO: this should maybe be done differently return u'A' + text_type(self.size) + u'_' @@ -1363,6 +1767,7 @@ def describe_signature(self, signode, mode, env): class ASTDeclaratorPtr(ASTBase): def __init__(self, next, volatile, const): + # type: (Any, bool, bool) -> None assert next self.next = next self.volatile = volatile @@ -1370,30 +1775,41 @@ def __init__(self, next, volatile, const): @property def name(self): + # type: () -> unicode return self.next.name def require_space_after_declSpecs(self): + # type: () -> bool # TODO: if has paramPack, then False ? return True def __unicode__(self): - res = ['*'] + # type: () -> unicode + res = ['*'] # type: List[unicode] if self.volatile: - res.append('volatile ') + res.append('volatile') if self.const: - res.append('const ') + if self.volatile: + res.append(' ') + res.append('const') + if self.const or self.volatile: + if self.next.require_space_after_declSpecs: + res.append(' ') res.append(text_type(self.next)) return u''.join(res) # Id v1 ------------------------------------------------------------------ def get_modifiers_id_v1(self): + # type: () -> unicode return self.next.get_modifiers_id_v1() def get_param_id_v1(self): + # type: () -> unicode return self.next.get_param_id_v1() def get_ptr_suffix_id_v1(self): + # type: () -> unicode res = 'P' if self.volatile: res += 'V' @@ -1404,13 +1820,16 @@ def get_ptr_suffix_id_v1(self): # Id v2 ------------------------------------------------------------------ def get_modifiers_id_v2(self): + # type: () -> unicode return self.next.get_modifiers_id_v2() def get_param_id_v2(self): + # type: () -> unicode return self.next.get_param_id_v2() def get_ptr_suffix_id_v2(self): - res = [self.next.get_ptr_suffix_id_v2()] + # type: () -> unicode + res = [self.next.get_ptr_suffix_id_v2()] # type: List[unicode] res.append('P') if self.volatile: res.append('V') @@ -1419,8 +1838,9 @@ def get_ptr_suffix_id_v2(self): return u''.join(res) def get_type_id_v2(self, returnTypeId): + # type: (unicode) -> unicode # ReturnType *next, so we are part of the return type of 'next - res = ['P'] + res = ['P'] # type: List[unicode] if self.volatile: res.append('V') if self.const: @@ -1431,61 +1851,88 @@ def get_type_id_v2(self, returnTypeId): # ------------------------------------------------------------------------ def is_function_type(self): + # type: () -> bool return self.next.is_function_type() def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) signode += nodes.Text("*") + + def _add_anno(signode, text): + signode += addnodes.desc_annotation(text, text) + if self.volatile: + _add_anno(signode, 'volatile') + if self.const: + if self.volatile: + signode += nodes.Text(' ') + _add_anno(signode, 'const') + if self.const or self.volatile: + if self.next.require_space_after_declSpecs: + signode += nodes.Text(' ') self.next.describe_signature(signode, mode, env, symbol) class ASTDeclaratorRef(ASTBase): def __init__(self, next): + # type: (Any) -> None assert next self.next = next @property def name(self): + # type: () -> unicode return self.next.name def require_space_after_declSpecs(self): + # type: () -> bool return self.next.require_space_after_declSpecs() def __unicode__(self): + # type: () -> unicode return '&' + text_type(self.next) # Id v1 ------------------------------------------------------------------ def get_modifiers_id_v1(self): + # type: () -> unicode return self.next.get_modifiers_id_v1() def get_param_id_v1(self): # only the parameters (if any) + # type: () -> unicode return self.next.get_param_id_v1() def get_ptr_suffix_id_v1(self): + # type: () -> unicode return u'R' + self.next.get_ptr_suffix_id_v1() # Id v2 ------------------------------------------------------------------ def get_modifiers_id_v2(self): + # type: () -> unicode return self.next.get_modifiers_id_v2() def get_param_id_v2(self): # only the parameters (if any) + # type: () -> unicode return self.next.get_param_id_v2() def get_ptr_suffix_id_v2(self): + # type: () -> unicode return self.next.get_ptr_suffix_id_v2() + u'R' def get_type_id_v2(self, returnTypeId): + # type: (unicode) -> unicode # ReturnType &next, so we are part of the return type of 'next return self.next.get_type_id_v2(returnTypeId=u'R' + returnTypeId) # ------------------------------------------------------------------------ def is_function_type(self): + # type: () -> bool return self.next.is_function_type() def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) signode += nodes.Text("&") self.next.describe_signature(signode, mode, env, symbol) @@ -1493,17 +1940,21 @@ def describe_signature(self, signode, mode, env, symbol): class ASTDeclaratorParamPack(ASTBase): def __init__(self, next): + # type: (Any) -> None assert next self.next = next @property def name(self): + # type: () -> unicode return self.next.name def require_space_after_declSpecs(self): + # type: () -> bool return False def __unicode__(self): + # type: () -> unicode res = text_type(self.next) if self.next.name: res = ' ' + res @@ -1512,35 +1963,43 @@ def __unicode__(self): # Id v1 ------------------------------------------------------------------ def get_modifiers_id_v1(self): + # type: () -> unicode return self.next.get_modifiers_id_v1() def get_param_id_v1(self): # only the parameters (if any) + # type: () -> unicode return self.next.get_param_id_v1() def get_ptr_suffix_id_v1(self): + # type: () -> unicode return 'Dp' + self.next.get_ptr_suffix_id_v2() # Id v2 ------------------------------------------------------------------ def get_modifiers_id_v2(self): + # type: () -> unicode return self.next.get_modifiers_id_v2() def get_param_id_v2(self): # only the parameters (if any) return self.next.get_param_id_v2() def get_ptr_suffix_id_v2(self): + # type: () -> unicode return self.next.get_ptr_suffix_id_v2() + u'Dp' def get_type_id_v2(self, returnTypeId): + # type: (unicode) -> unicode # ReturnType... next, so we are part of the return type of 'next return self.next.get_type_id_v2(returnTypeId=u'Dp' + returnTypeId) # ------------------------------------------------------------------------ def is_function_type(self): + # type: () -> bool return self.next.is_function_type() def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) signode += nodes.Text("...") if self.next.name: @@ -1548,8 +2007,110 @@ def describe_signature(self, signode, mode, env, symbol): self.next.describe_signature(signode, mode, env, symbol) +class ASTDeclaratorMemPtr(ASTBase): + def __init__(self, className, const, volatile, next): + # type: (Any, bool, bool, Any) -> None + assert className + assert next + self.className = className + self.const = const + self.volatile = volatile + self.next = next + + @property + def name(self): + # type: () -> unicode + return self.next.name + + def require_space_after_declSpecs(self): + # type: () -> bool + return True + + def __unicode__(self): + # type: () -> unicode + res = [] + res.append(text_type(self.className)) + res.append('::*') + if self.volatile: + res.append(' volatile') + if self.const: + res.append(' const') + if self.next.require_space_after_declSpecs(): + res.append(' ') + res.append(text_type(self.next)) + return ''.join(res) + + # Id v1 ------------------------------------------------------------------ + + def get_modifiers_id_v1(self): + # type: () -> unicode + raise NoOldIdError() + + def get_param_id_v1(self): # only the parameters (if any) + # type: () -> unicode + raise NoOldIdError() + + def get_ptr_suffix_id_v1(self): + # type: () -> unicode + raise NoOldIdError() + + # Id v2 ------------------------------------------------------------------ + + def get_modifiers_id_v2(self): + # type: () -> unicode + return self.next.get_modifiers_id_v2() + + def get_param_id_v2(self): # only the parameters (if any) + # type: () -> unicode + return self.next.get_param_id_v2() + + def get_ptr_suffix_id_v2(self): + # type: () -> unicode + raise NotImplementedError() + return self.next.get_ptr_suffix_id_v2() + u'Dp' + + def get_type_id_v2(self, returnTypeId): + # type: (unicode) -> unicode + # ReturnType name::* next, so we are part of the return type of next + nextReturnTypeId = '' # type: unicode + if self.volatile: + nextReturnTypeId += 'V' + if self.const: + nextReturnTypeId += 'K' + nextReturnTypeId += 'M' + nextReturnTypeId += self.className.get_id_v2() + nextReturnTypeId += returnTypeId + return self.next.get_type_id_v2(nextReturnTypeId) + + # ------------------------------------------------------------------------ + + def is_function_type(self): + # type: () -> bool + return self.next.is_function_type() + + def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None + _verify_description_mode(mode) + self.className.describe_signature(signode, mode, env, symbol) + signode += nodes.Text('::*') + + def _add_anno(signode, text): + signode += addnodes.desc_annotation(text, text) + if self.volatile: + _add_anno(signode, 'volatile') + if self.const: + if self.volatile: + signode += nodes.Text(' ') + _add_anno(signode, 'const') + if self.next.require_space_after_declSpecs(): + if self.volatile or self.const: + signode += nodes.Text(' ') + self.next.describe_signature(signode, mode, env, symbol) + + class ASTDeclaratorParen(ASTBase): def __init__(self, inner, next): + # type: (Any, Any) -> None assert inner assert next self.inner = inner @@ -1558,13 +2119,16 @@ def __init__(self, inner, next): @property def name(self): + # type: () -> unicode return self.inner.name def require_space_after_declSpecs(self): + # type: () -> bool return True def __unicode__(self): - res = ['('] + # type: () -> unicode + res = ['('] # type: List[unicode] res.append(text_type(self.inner)) res.append(')') res.append(text_type(self.next)) @@ -1573,12 +2137,15 @@ def __unicode__(self): # Id v1 ------------------------------------------------------------------ def get_modifiers_id_v1(self): + # type: () -> unicode return self.inner.get_modifiers_id_v1() def get_param_id_v1(self): # only the parameters (if any) + # type: () -> unicode return self.inner.get_param_id_v1() def get_ptr_suffix_id_v1(self): + # type: () -> unicode raise NoOldIdError() # TODO: was this implemented before? return self.next.get_ptr_suffix_id_v2() + \ self.inner.get_ptr_suffix_id_v2() @@ -1586,16 +2153,20 @@ def get_ptr_suffix_id_v1(self): # Id v2 ------------------------------------------------------------------ def get_modifiers_id_v2(self): + # type: () -> unicode return self.inner.get_modifiers_id_v2() def get_param_id_v2(self): # only the parameters (if any) + # type: () -> unicode return self.inner.get_param_id_v2() def get_ptr_suffix_id_v2(self): + # type: () -> unicode return self.inner.get_ptr_suffix_id_v2() + \ self.next.get_ptr_suffix_id_v2() def get_type_id_v2(self, returnTypeId): + # type: (unicode) -> unicode # ReturnType (inner)next, so 'inner' returns everything outside nextId = self.next.get_type_id_v2(returnTypeId) return self.inner.get_type_id_v2(returnTypeId=nextId) @@ -1603,9 +2174,11 @@ def get_type_id_v2(self, returnTypeId): # ------------------------------------------------------------------------ def is_function_type(self): + # type: () -> bool return self.inner.is_function_type() def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) signode += nodes.Text('(') self.inner.describe_signature(signode, mode, env, symbol) @@ -1615,17 +2188,20 @@ def describe_signature(self, signode, mode, env, symbol): class ASTDecleratorNameParamQual(ASTBase): def __init__(self, declId, arrayOps, paramQual): + # type: (Any, List[Any], Any) -> None self.declId = declId self.arrayOps = arrayOps self.paramQual = paramQual @property def name(self): + # type: () -> unicode return self.declId # Id v1 ------------------------------------------------------------------ def get_modifiers_id_v1(self): # only the modifiers for a function, e.g., + # type: () -> unicode # cv-qualifiers if self.paramQual: return self.paramQual.get_modifiers_id_v1() @@ -1633,17 +2209,20 @@ def get_modifiers_id_v1(self): # only the modifiers for a function, e.g., "This should only be called on a function: %s" % text_type(self)) def get_param_id_v1(self): # only the parameters (if any) + # type: () -> unicode if self.paramQual: return self.paramQual.get_param_id_v1() else: return '' def get_ptr_suffix_id_v1(self): # only the array specifiers + # type: () -> unicode return u''.join(a.get_id_v1() for a in self.arrayOps) # Id v2 ------------------------------------------------------------------ def get_modifiers_id_v2(self): # only the modifiers for a function, e.g., + # type: () -> unicode # cv-qualifiers if self.paramQual: return self.paramQual.get_modifiers_id_v2() @@ -1651,15 +2230,18 @@ def get_modifiers_id_v2(self): # only the modifiers for a function, e.g., "This should only be called on a function: %s" % text_type(self)) def get_param_id_v2(self): # only the parameters (if any) + # type: () -> unicode if self.paramQual: return self.paramQual.get_param_id_v2() else: return '' def get_ptr_suffix_id_v2(self): # only the array specifiers + # type: () -> unicode return u''.join(a.get_id_v2() for a in self.arrayOps) def get_type_id_v2(self, returnTypeId): + # type: (unicode) -> unicode res = [] # TOOD: can we actually have both array ops and paramQual? res.append(self.get_ptr_suffix_id_v2()) @@ -1676,12 +2258,15 @@ def get_type_id_v2(self, returnTypeId): # ------------------------------------------------------------------------ def require_space_after_declSpecs(self): + # type: () -> bool return self.declId is not None def is_function_type(self): + # type: () -> bool return self.paramQual is not None def __unicode__(self): + # type: () -> unicode res = [] if self.declId: res.append(text_type(self.declId)) @@ -1692,6 +2277,7 @@ def __unicode__(self): return u''.join(res) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) if self.declId: self.declId.describe_signature(signode, mode, env, symbol) @@ -1703,18 +2289,22 @@ def describe_signature(self, signode, mode, env, symbol): class ASTInitializer(ASTBase): def __init__(self, value): + # type: (unicode) -> None self.value = value def __unicode__(self): + # type: () -> unicode return u''.join([' = ', text_type(self.value)]) def describe_signature(self, signode, mode): + # type: (addnodes.desc_signature, unicode) -> None _verify_description_mode(mode) signode += nodes.Text(text_type(self)) class ASTType(ASTBase): def __init__(self, declSpecs, decl): + # type: (Any, Any) -> None assert declSpecs assert decl self.declSpecs = declSpecs @@ -1722,10 +2312,12 @@ def __init__(self, declSpecs, decl): @property def name(self): + # type: () -> unicode name = self.decl.name return name def get_id_v1(self, objectType=None, symbol=None): + # type: (unicode, Symbol) -> unicode res = [] if objectType: # needs the name if objectType == 'function': # also modifiers @@ -1750,6 +2342,7 @@ def get_id_v1(self, objectType=None, symbol=None): return u''.join(res) def get_id_v2(self, objectType=None, symbol=None): + # type: (unicode, Symbol) -> unicode res = [] if objectType: # needs the name if objectType == 'function': # also modifiers @@ -1770,6 +2363,7 @@ def get_id_v2(self, objectType=None, symbol=None): return u''.join(res) def __unicode__(self): + # type: () -> unicode res = [] declSpecs = text_type(self.declSpecs) res.append(declSpecs) @@ -1778,7 +2372,15 @@ def __unicode__(self): res.append(text_type(self.decl)) return u''.join(res) + def get_type_declaration_prefix(self): + # type: () -> unicode + if self.declSpecs.trailingTypeSpec: + return 'typedef' + else: + return 'type' + def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) self.declSpecs.describe_signature(signode, 'markType', env, symbol) if (self.decl.require_space_after_declSpecs() and @@ -1789,14 +2391,17 @@ def describe_signature(self, signode, mode, env, symbol): class ASTTypeWithInit(ASTBase): def __init__(self, type, init): + # type: (Any, Any) -> None self.type = type self.init = init @property def name(self): + # type: () -> unicode return self.type.name def get_id_v1(self, objectType=None, symbol=None): + # type: (unicode, Symbol) -> unicode if objectType == 'member': return symbol.get_full_nested_name().get_id_v1() + u'__' \ + self.type.get_id_v1() @@ -1804,12 +2409,14 @@ def get_id_v1(self, objectType=None, symbol=None): return self.type.get_id_v1(objectType) def get_id_v2(self, objectType=None, symbol=None): + # type: (unicode, Symbol) -> unicode if objectType == 'member': - return symbol.declaration.name.get_id_v2() + return symbol.get_full_nested_name().get_id_v2() else: return self.type.get_id_v2() def __unicode__(self): + # type: () -> unicode res = [] res.append(text_type(self.type)) if self.init: @@ -1817,6 +2424,7 @@ def __unicode__(self): return u''.join(res) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) self.type.describe_signature(signode, mode, env, symbol=symbol) if self.init: @@ -1825,16 +2433,20 @@ def describe_signature(self, signode, mode, env, symbol): class ASTTypeUsing(ASTBase): def __init__(self, name, type): + # type: (Any, Any) -> None self.name = name self.type = type def get_id_v1(self, objectType=None, symbol=None): + # type: (unicode, Symbol) -> unicode raise NoOldIdError() def get_id_v2(self, objectType=None, symbol=None): + # type: (unicode, Symbol) -> unicode return symbol.get_full_nested_name().get_id_v2() def __unicode__(self): + # type: () -> unicode res = [] res.append(text_type(self.name)) if self.type: @@ -1842,7 +2454,12 @@ def __unicode__(self): res.append(text_type(self.type)) return u''.join(res) + def get_type_declaration_prefix(self): + # type: () -> unicode + return 'using' + def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) self.name.describe_signature(signode, mode, env, symbol=symbol) if self.type: @@ -1850,15 +2467,56 @@ def describe_signature(self, signode, mode, env, symbol): self.type.describe_signature(signode, 'markType', env, symbol=symbol) +class ASTConcept(ASTBase): + def __init__(self, nestedName, isFunction, initializer): + # type: (Any, bool, Any) -> None + self.nestedName = nestedName + self.isFunction = isFunction # otherwise it's a variable concept + self.initializer = initializer + + @property + def name(self): + # type: () -> unicode + return self.nestedName + + def get_id_v1(self, objectType=None, symbol=None): + # type: (unicode, Symbol) -> unicode + raise NoOldIdError() + + def get_id_v2(self, objectType, symbol): # type: ignore + # type: (unicode, Symbol) -> unicode + return symbol.get_full_nested_name().get_id_v2() + + def __unicode__(self): + # type: () -> unicode + res = text_type(self.nestedName) + if self.isFunction: + res += "()" + if self.initializer: + res += text_type(self.initializer) + return res + + def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None + signode += nodes.Text(text_type("bool ")) + self.nestedName.describe_signature(signode, mode, env, symbol) + if self.isFunction: + signode += nodes.Text("()") + if self.initializer: + self.initializer.describe_signature(signode, mode) + + class ASTBaseClass(ASTBase): def __init__(self, name, visibility, virtual, pack): + # type: (Any, unicode, bool, bool) -> None self.name = name self.visibility = visibility self.virtual = virtual self.pack = pack def __unicode__(self): - res = [] + # type: () -> unicode + res = [] # type: List[unicode] if self.visibility != 'private': res.append(self.visibility) res.append(' ') @@ -1870,6 +2528,7 @@ def __unicode__(self): return u''.join(res) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) if self.visibility != 'private': signode += addnodes.desc_annotation(self.visibility, @@ -1885,17 +2544,21 @@ def describe_signature(self, signode, mode, env, symbol): class ASTClass(ASTBase): def __init__(self, name, final, bases): + # type: (Any, bool, List[Any]) -> None self.name = name self.final = final self.bases = bases - def get_id_v1(self, objectType, symbol): + def get_id_v1(self, objectType, symbol): # type: ignore + # type: (unicode, Symbol) -> unicode return symbol.get_full_nested_name().get_id_v1() - def get_id_v2(self, objectType, symbol): + def get_id_v2(self, objectType, symbol): # type: ignore + # type: (unicode, Symbol) -> unicode return symbol.get_full_nested_name().get_id_v2() def __unicode__(self): + # type: () -> unicode res = [] res.append(text_type(self.name)) if self.final: @@ -1911,6 +2574,7 @@ def __unicode__(self): return u''.join(res) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) self.name.describe_signature(signode, mode, env, symbol=symbol) if self.final: @@ -1926,18 +2590,22 @@ def describe_signature(self, signode, mode, env, symbol): class ASTEnum(ASTBase): def __init__(self, name, scoped, underlyingType): + # type: (Any, unicode, Any) -> None self.name = name self.scoped = scoped self.underlyingType = underlyingType - def get_id_v1(self, objectType, symbol): + def get_id_v1(self, objectType, symbol): # type: ignore + # type: (unicode, Symbol) -> unicode raise NoOldIdError() - def get_id_v2(self, objectType, symbol): + def get_id_v2(self, objectType, symbol): # type: ignore + # type: (unicode, Symbol) -> unicode return symbol.get_full_nested_name().get_id_v2() def __unicode__(self): - res = [] + # type: () -> unicode + res = [] # type: List[unicode] if self.scoped: res.append(self.scoped) res.append(' ') @@ -1948,6 +2616,7 @@ def __unicode__(self): return u''.join(res) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) # self.scoped has been done by the CPPEnumObject self.name.describe_signature(signode, mode, env, symbol=symbol) @@ -1959,16 +2628,20 @@ def describe_signature(self, signode, mode, env, symbol): class ASTEnumerator(ASTBase): def __init__(self, name, init): + # type: (Any, Any) -> None self.name = name self.init = init - def get_id_v1(self, objectType, symbol): + def get_id_v1(self, objectType, symbol): # type: ignore + # type: (unicode, Symbol) -> unicode raise NoOldIdError() - def get_id_v2(self, objectType, symbol): + def get_id_v2(self, objectType, symbol): # type: ignore + # type: (unicode, Symbol) -> unicode return symbol.get_full_nested_name().get_id_v2() def __unicode__(self): + # type: () -> unicode res = [] res.append(text_type(self.name)) if self.init: @@ -1976,6 +2649,7 @@ def __unicode__(self): return u''.join(res) def describe_signature(self, signode, mode, env, symbol): + # type: (addnodes.desc_signature, unicode, BuildEnvironment, Symbol) -> None _verify_description_mode(mode) self.name.describe_signature(signode, mode, env, symbol=symbol) if self.init: @@ -1984,24 +2658,43 @@ def describe_signature(self, signode, mode, env, symbol): class ASTDeclaration(ASTBase): def __init__(self, objectType, visibility, templatePrefix, declaration): + # type: (unicode, unicode, Any, Any) -> None self.objectType = objectType self.visibility = visibility self.templatePrefix = templatePrefix self.declaration = declaration - self.symbol = None - self.declarationScope = None # set by Symbol.add_declaration + self.symbol = None # type: Symbol + # set by CPPObject._add_enumerator_to_parent + self.enumeratorScopedSymbol = None # type: Any + + def clone(self): + # type: () -> ASTDeclaration + if self.templatePrefix: + templatePrefixClone = self.templatePrefix.clone() + else: + templatePrefixClone = None + return ASTDeclaration(self.objectType, self.visibility, + templatePrefixClone, + self.declaration.clone()) @property def name(self): + # type: () -> unicode return self.declaration.name def get_id_v1(self): + # type: () -> unicode if self.templatePrefix: raise NoOldIdError() + if self.objectType == 'enumerator' and self.enumeratorScopedSymbol: + return self.enumeratorScopedSymbol.declaration.get_id_v1() return self.declaration.get_id_v1(self.objectType, self.symbol) def get_id_v2(self, prefixed=True): + # type: (bool) -> unicode + if self.objectType == 'enumerator' and self.enumeratorScopedSymbol: + return self.enumeratorScopedSymbol.declaration.get_id_v2(prefixed) if prefixed: res = [_id_prefix_v2] else: @@ -2012,10 +2705,12 @@ def get_id_v2(self, prefixed=True): return u''.join(res) def get_newest_id(self): + # type: () -> unicode return self.get_id_v2() def __unicode__(self): - res = [] + # type: () -> unicode + res = [] # type: List[unicode] if self.visibility and self.visibility != "public": res.append(self.visibility) res.append(u' ') @@ -2025,65 +2720,86 @@ def __unicode__(self): return u''.join(res) def describe_signature(self, signode, mode, env): + # type: (addnodes.desc_signature, unicode, BuildEnvironment) -> None _verify_description_mode(mode) + # The caller of the domain added a desc_signature node. + # Always enable multiline: + signode['is_multiline'] = True + # Put each line in a desc_signature_line node. + mainDeclNode = addnodes.desc_signature_line() + mainDeclNode.sphinx_cpp_tagname = 'declarator' + mainDeclNode['add_permalink'] = True + assert self.symbol - if not self.declarationScope: - raise NotImplementedError("hmm, a bug? %s" % text_type(self)) - assert self.declarationScope - if self.visibility and self.visibility != "public": - signode += addnodes.desc_annotation(self.visibility + " ", - self.visibility + " ") if self.templatePrefix: self.templatePrefix.describe_signature(signode, mode, env, symbol=self.symbol) + signode += mainDeclNode + if self.visibility and self.visibility != "public": + mainDeclNode += addnodes.desc_annotation(self.visibility + " ", + self.visibility + " ") if self.objectType == 'type': - signode += addnodes.desc_annotation('type ', 'type ') + prefix = self.declaration.get_type_declaration_prefix() + prefix += ' ' + mainDeclNode += addnodes.desc_annotation(prefix, prefix) + elif self.objectType == 'concept': + mainDeclNode += addnodes.desc_annotation('concept ', 'concept ') elif self.objectType == 'member': pass elif self.objectType == 'function': pass elif self.objectType == 'class': - signode += addnodes.desc_annotation('class ', 'class ') + mainDeclNode += addnodes.desc_annotation('class ', 'class ') elif self.objectType == 'enum': prefix = 'enum ' - if self.scoped: - prefix += self.scoped + if self.scoped: # type: ignore + prefix += self.scoped # type: ignore prefix += ' ' - signode += addnodes.desc_annotation(prefix, prefix) + mainDeclNode += addnodes.desc_annotation(prefix, prefix) elif self.objectType == 'enumerator': - signode += addnodes.desc_annotation('enumerator ', 'enumerator ') + mainDeclNode += addnodes.desc_annotation('enumerator ', 'enumerator ') else: assert False - self.declaration.describe_signature(signode, mode, env, + self.declaration.describe_signature(mainDeclNode, mode, env, symbol=self.symbol) class ASTNamespace(ASTBase): def __init__(self, nestedName, templatePrefix): + # type: (Any, Any) -> None self.nestedName = nestedName self.templatePrefix = templatePrefix class Symbol(object): - def __init__(self, parent, identifier, - templateParams, templateArgs, declaration): - if not parent: + def _assert_invariants(self): + # type: () -> None + if not self.parent: # parent == None means global scope, so declaration means a parent - assert not identifier - assert not templateParams - assert not templateArgs - assert not declaration + assert not self.identifier + assert not self.templateParams + assert not self.templateArgs + assert not self.declaration + assert not self.docname else: - if not identifier: + if not self.identifier: # in case it's an operator - assert declaration + assert self.declaration + if self.declaration: + assert self.docname + + def __init__(self, parent, identifier, + templateParams, templateArgs, declaration, docname): + # type: (Any, Any, Any, Any, Any, unicode) -> None self.parent = parent self.identifier = identifier self.templateParams = templateParams # template<templateParams> self.templateArgs = templateArgs # identifier<templateArgs> self.declaration = declaration + self.docname = docname + self._assert_invariants() - self.children = [] + self.children = [] # type: List[Any] if self.parent: self.parent.children.append(self) if self.declaration: @@ -2094,19 +2810,52 @@ def __init__(self, parent, identifier, for p in self.templateParams.params: if not p.get_identifier(): continue - decl = ASTDeclaration('templateParam', None, None, p) + # only add a declaration if we our selfs from a declaration + if declaration: + decl = ASTDeclaration('templateParam', None, None, p) + else: + decl = None nne = ASTNestedNameElement(p.get_identifier(), None) nn = ASTNestedName([nne], rooted=False) - self._add_symbols(nn, [], decl) + self._add_symbols(nn, [], decl, docname) + + def _fill_empty(self, declaration, docname): + # type: (Any, unicode) -> None + self._assert_invariants() + assert not self.declaration + assert not self.docname + assert declaration + assert docname + self.declaration = declaration + self.declaration.symbol = self + self.docname = docname + self._assert_invariants() + + def clear_doc(self, docname): + # type: (unicode) -> None + newChildren = [] + for sChild in self.children: + sChild.clear_doc(docname) + if sChild.declaration and sChild.docname == docname: + sChild.declaration = None + sChild.docname = None + # Just remove operators, because there is no identification if + # they got removed. + # Don't remove other symbols because they may be used in namespace + # directives. + if sChild.identifier or sChild.declaration: + newChildren.append(sChild) + self.children = newChildren def get_all_symbols(self): - # assumed to be in post-order + # type: () -> Iterator[Any] + yield self for sChild in self.children: for s in sChild.get_all_symbols(): yield s - yield self def get_lookup_key(self): + # type: () -> List[Tuple[ASTNestedNameElement, Any]] if not self.parent: # specialise for the root return None @@ -2117,56 +2866,67 @@ def get_lookup_key(self): s = s.parent symbols.reverse() key = [] - for s in symbols[:-1]: - assert s.identifier - nne = ASTNestedNameElement(s.identifier, s.templateArgs) + for s in symbols: + if s.identifier: + nne = ASTNestedNameElement(s.identifier, s.templateArgs) + else: + assert s.declaration + nne = s.declaration.name.names[-1] key.append((nne, s.templateParams)) - s = symbols[-1] - if s.identifier: - nne = ASTNestedNameElement(s.identifier, s.templateArgs) - else: - assert self.declaration - nne = s.declaration.name.names[-1] - key.append((nne, s.templateParams)) return key def get_full_nested_name(self): + # type: () -> ASTNestedName names = [] for nne, templateParams in self.get_lookup_key(): names.append(nne) return ASTNestedName(names, rooted=False) def _find_named_symbol(self, identifier, templateParams, - templateArgs, operator): + templateArgs, operator, + templateShorthand, matchSelf): + # type: (Any, Any, Any, Any, Any, bool) -> Symbol assert (identifier is None) != (operator is None) - for s in self.children: + + def matches(s): if s.identifier != identifier: - continue + return False if not s.identifier: if not s.declaration: - continue + return False assert operator name = s.declaration.name.names[-1] if not name.is_operator(): - continue + return False if text_type(name) != text_type(operator): - continue + return False if (s.templateParams is None) != (templateParams is None): - continue - if s.templateParams: + if templateParams is not None: + # we query with params, they must match params + return False + if not templateShorthand: + # we don't query with params, and we do care about them + return False + if templateParams: # TODO: do better comparison if text_type(s.templateParams) != text_type(templateParams): - continue + return False if (s.templateArgs is None) != (templateArgs is None): - continue + return False if s.templateArgs: # TODO: do better comparison if text_type(s.templateArgs) != text_type(templateArgs): - continue - return s + return False + return True + if matchSelf and matches(self): + return self + for s in self.children: + if matches(s): + return s return None - def _add_symbols(self, nestedName, templateDecls, declaration): + def _add_symbols(self, nestedName, templateDecls, declaration, docname): + # type: (Any, List[Any], Any, unicode) -> Symbol # This condition should be checked at the parser level. # Each template argument list must have a template parameter list. # But to declare a template there must be an additional template parameter list. @@ -2177,107 +2937,168 @@ def _add_symbols(self, nestedName, templateDecls, declaration): if nestedName.rooted: while parentSymbol.parent: parentSymbol = parentSymbol.parent - declarationScope = parentSymbol names = nestedName.names iTemplateDecl = 0 - for iName in range(len(names)): - name = names[iName] - if iName + 1 == len(names): - if name.is_operator(): - identifier = None - templateArgs = None - operator = name - else: - identifier = name.identifier - templateArgs = name.templateArgs - operator = None - if iTemplateDecl < len(templateDecls): - if iTemplateDecl + 1 != len(templateDecls): - print(text_type(templateDecls)) - print(text_type(nestedName)) - assert iTemplateDecl + 1 == len(templateDecls) - templateParams = templateDecls[iTemplateDecl] - else: - assert iTemplateDecl == len(templateDecls) - templateParams = None - symbol = parentSymbol._find_named_symbol(identifier, - templateParams, - templateArgs, - operator) - if symbol: - if not declaration: - # good, just a scope creation - return symbol - if not symbol.declaration: - # If someone first opened the scope, and then later - # declares it, e.g, - # .. namespace:: Test - # .. namespace:: nullptr - # .. class:: Test - symbol.declaration = declaration - declaration.symbol = symbol - declaration.declarationScope = declarationScope - return symbol - # it may simply be a functin overload - # TODO: it could be a duplicate but let's just insert anyway - # the id generation will warn about it - symbol = Symbol(parent=parentSymbol, identifier=identifier, - templateParams=templateParams, - templateArgs=templateArgs, - declaration=declaration) - declaration.declarationScope = declarationScope - else: - symbol = Symbol(parent=parentSymbol, identifier=identifier, - templateParams=templateParams, - templateArgs=templateArgs, - declaration=declaration) - if declaration: - declaration.declarationScope = declarationScope + for name in names[:-1]: + # there shouldn't be anything inside an operator + # (other than template parameters, which are not added this way, right?) + assert not name.is_operator() + identifier = name.identifier + templateArgs = name.templateArgs + if templateArgs: + assert iTemplateDecl < len(templateDecls) + templateParams = templateDecls[iTemplateDecl] + iTemplateDecl += 1 + else: + templateParams = None + symbol = parentSymbol._find_named_symbol(identifier, + templateParams, + templateArgs, + operator=None, + templateShorthand=False, + matchSelf=False) + if symbol is None: + symbol = Symbol(parent=parentSymbol, identifier=identifier, + templateParams=templateParams, + templateArgs=templateArgs, declaration=None, + docname=None) + parentSymbol = symbol + name = names[-1] + if name.is_operator(): + identifier = None + templateArgs = None + operator = name + else: + identifier = name.identifier + templateArgs = name.templateArgs + operator = None + if iTemplateDecl < len(templateDecls): + if iTemplateDecl + 1 != len(templateDecls): + print(text_type(templateDecls)) + print(text_type(nestedName)) + assert iTemplateDecl + 1 == len(templateDecls) + templateParams = templateDecls[iTemplateDecl] + else: + assert iTemplateDecl == len(templateDecls) + templateParams = None + symbol = parentSymbol._find_named_symbol(identifier, + templateParams, + templateArgs, + operator, + templateShorthand=False, + matchSelf=False) + if symbol: + if not declaration: + # good, just a scope creation return symbol + if not symbol.declaration: + # If someone first opened the scope, and then later + # declares it, e.g, + # .. namespace:: Test + # .. namespace:: nullptr + # .. class:: Test + symbol._fill_empty(declaration, docname) + return symbol + # It may simply be a functin overload, so let's compare ids. + candSymbol = Symbol(parent=parentSymbol, identifier=identifier, + templateParams=templateParams, + templateArgs=templateArgs, + declaration=declaration, + docname=docname) + newId = declaration.get_newest_id() + oldId = symbol.declaration.get_newest_id() + if newId != oldId: + # we already inserted the symbol, so return the new one + symbol = candSymbol else: - # there shouldn't be anything inside an operator - assert not name.is_operator() - identifier = name.identifier - templateArgs = name.templateArgs - if templateArgs: - assert iTemplateDecl < len(templateDecls) - templateParams = templateDecls[iTemplateDecl] - iTemplateDecl += 1 + # Redeclaration of the same symbol. + # Let the new one be there, but raise an error to the client + # so it can use the real symbol as subscope. + # This will probably result in a duplicate id warning. + raise _DuplicateSymbolError(symbol, candSymbol) + else: + symbol = Symbol(parent=parentSymbol, identifier=identifier, + templateParams=templateParams, + templateArgs=templateArgs, + declaration=declaration, + docname=docname) + return symbol + + def merge_with(self, other, docnames, env): + # type: (Any, List[unicode], BuildEnvironment) -> None + assert other is not None + for otherChild in other.children: + if not otherChild.identifier: + if not otherChild.declaration: + print("Problem in symbol tree merging") + print("OtherChild.dump:") + print(otherChild.dump(0)) + print("Other.dump:") + print(other.dump(0)) + assert otherChild.declaration + operator = otherChild.declaration.name.names[-1] + assert operator.is_operator() + else: + operator = None + ourChild = self._find_named_symbol(otherChild.identifier, + otherChild.templateParams, + otherChild.templateArgs, + operator, + templateShorthand=False, + matchSelf=False) + if ourChild is None: + # TODO: hmm, should we prune by docnames? + self.children.append(otherChild) + otherChild.parent = self + otherChild._assert_invariants() + continue + if otherChild.declaration and otherChild.docname in docnames: + if not ourChild.declaration: + ourChild._fill_empty(otherChild.declaration, otherChild.docname) + elif ourChild.docname != otherChild.docname: + name = text_type(ourChild.declaration) + msg = "Duplicate declaration, also defined in '%s'.\n" + msg += "Declaration is '%s'." + msg = msg % (ourChild.docname, name) + env.warn(otherChild.docname, msg) else: - templateParams = None - symbol = parentSymbol._find_named_symbol(identifier, - templateParams, - templateArgs, - operator=None) - if symbol is None: - symbol = Symbol(parent=parentSymbol, identifier=identifier, - templateParams=templateParams, - templateArgs=templateArgs, declaration=None) - parentSymbol = symbol - assert False # should have returned in the loop + # Both have declarations, and in the same docname. + # This can apparently happen, it should be safe to + # just ignore it, right? + pass + ourChild.merge_with(otherChild, docnames, env) def add_name(self, nestedName, templatePrefix=None): + # type: (unicode, Any) -> Symbol if templatePrefix: templateDecls = templatePrefix.templates else: templateDecls = [] - return self._add_symbols(nestedName, templateDecls, declaration=None) + return self._add_symbols(nestedName, templateDecls, + declaration=None, docname=None) - def add_declaration(self, declaration): + def add_declaration(self, declaration, docname): + # type: (Any, unicode) -> Symbol + assert declaration + assert docname nestedName = declaration.name if declaration.templatePrefix: templateDecls = declaration.templatePrefix.templates else: templateDecls = [] - return self._add_symbols(nestedName, templateDecls, declaration) + return self._add_symbols(nestedName, templateDecls, declaration, docname) - def find_identifier(self, identifier): + def find_identifier(self, identifier, matchSelf): + # type: (Any, bool) -> Symbol + if matchSelf and self.identifier and self.identifier == identifier: + return self for s in self.children: if s.identifier and s.identifier == identifier: return s return None def direct_lookup(self, key): + # type: (List[Tuple[Any, Any]]) -> Symbol s = self for name, templateParams in key: if name.is_operator(): @@ -2289,12 +3110,17 @@ def direct_lookup(self, key): templateArgs = name.templateArgs operator = None s = s._find_named_symbol(identifier, templateParams, - templateArgs, operator) + templateArgs, operator, + templateShorthand=False, + matchSelf=False) if not s: return None return s - def find_name(self, nestedName, templateDecls, specific_specialisation): + def find_name(self, nestedName, templateDecls, templateShorthand, matchSelf): + # type: (Any, Any, Any, bool) -> Symbol + # templateShorthand: missing template parameter lists for templates is ok + # TODO: unify this with the _add_symbols # This condition should be checked at the parser level. assert len(templateDecls) <= nestedName.num_templates() + 1 @@ -2308,7 +3134,8 @@ def find_name(self, nestedName, templateDecls, specific_specialisation): firstName = names[0] if not firstName.is_operator(): while parentSymbol.parent: - if parentSymbol.find_identifier(firstName.identifier): + if parentSymbol.find_identifier(firstName.identifier, + matchSelf=matchSelf): break parentSymbol = parentSymbol.parent @@ -2333,12 +3160,12 @@ def find_name(self, nestedName, templateDecls, specific_specialisation): symbol = parentSymbol._find_named_symbol(identifier, templateParams, templateArgs, - operator) + operator, + templateShorthand=templateShorthand, + matchSelf=matchSelf) if symbol: return symbol else: - # TODO: search for version without template args, - # if not specific_specialisation return None else: # there shouldn't be anything inside an operator @@ -2353,29 +3180,48 @@ def find_name(self, nestedName, templateDecls, specific_specialisation): symbol = parentSymbol._find_named_symbol(identifier, templateParams, templateArgs, - operator=None) + operator=None, + templateShorthand=templateShorthand, + matchSelf=matchSelf) if symbol is None: # TODO: maybe search without template args return None + # We have now matched part of a nested name, and need to match more + # so even if we should matchSelf before, we definitely shouldn't + # even more. (see also issue #2666) + matchSelf = False parentSymbol = symbol assert False # should have returned in the loop - def dump(self, indent): - res = ['\t'*indent] - if self.identifier: + def to_string(self, indent): + # type: (int) -> unicode + res = ['\t'*indent] # type: List[unicode] + if not self.parent: + res.append('::') + else: if self.templateParams: res.append(text_type(self.templateParams)) res.append('\n') res.append('\t'*indent) - res.append(text_type(self.identifier)) + if self.identifier: + res.append(text_type(self.identifier)) + else: + res.append(text_type(self.declaration)) if self.templateArgs: res.append(text_type(self.templateArgs)) if self.declaration: res.append(": ") res.append(text_type(self.declaration)) - else: - res.append('::') + if self.docname: + res.append('\t(') + res.append(self.docname) + res.append(')') res.append('\n') + return ''.join(res) + + def dump(self, indent): + # type: (int) -> unicode + res = [self.to_string(indent)] for c in self.children: res.append(c.dump(indent + 1)) return ''.join(res) @@ -2391,28 +3237,59 @@ class DefinitionParser(object): _prefix_keys = ('class', 'struct', 'enum', 'union', 'typename') - def __init__(self, definition, warnEnv): + def __init__(self, definition, warnEnv, config): + # type: (Any, Any, Config) -> None self.definition = definition.strip() self.pos = 0 self.end = len(self.definition) - self.last_match = None - self._previous_state = (0, None) + self.last_match = None # type: Match + self._previous_state = (0, None) # type: Tuple[int, Match] self.warnEnv = warnEnv + self.config = config + + def _make_multi_error(self, errors, header): + # type: (List[Any], unicode) -> DefinitionError + if len(errors) == 1: + return DefinitionError(header + '\n' + errors[0][0].description) + result = [header, '\n'] + for e in errors: + if len(e[1]) > 0: + ident = ' ' + result.append(e[1]) + result.append(':\n') + for line in e[0].description.split('\n'): + if len(line) == 0: + continue + result.append(ident) + result.append(line) + result.append('\n') + else: + result.append(e[0].description) + return DefinitionError(''.join(result)) + + def status(self, msg): + # type: (unicode) -> unicode + # for debugging + indicator = '-' * self.pos + '^' + print("%s\n%s\n%s" % (msg, self.definition, indicator)) def fail(self, msg): + # type: (unicode) -> None indicator = '-' * self.pos + '^' raise DefinitionError( 'Invalid definition: %s [error at %d]\n %s\n %s' % (msg, self.pos, self.definition, indicator)) def warn(self, msg): + # type: (unicode) -> None if self.warnEnv: self.warnEnv.warn(msg) else: print("Warning: %s" % msg) def match(self, regex): + # type: (Pattern) -> bool match = regex.match(self.definition, self.pos) if match is not None: self._previous_state = (self.pos, self.last_match) @@ -2422,9 +3299,11 @@ def match(self, regex): return False def backout(self): + # type: () -> None self.pos, self.last_match = self._previous_state def skip_string(self, string): + # type: (unicode) -> bool strlen = len(string) if self.definition[self.pos:self.pos + strlen] == string: self.pos += strlen @@ -2432,23 +3311,35 @@ def skip_string(self, string): return False def skip_word(self, word): + # type: (unicode) -> bool return self.match(re.compile(r'\b%s\b' % re.escape(word))) def skip_ws(self): + # type: (unicode) -> bool return self.match(_whitespace_re) def skip_word_and_ws(self, word): + # type: (unicode) -> bool if self.skip_word(word): self.skip_ws() return True return False + def skip_string_and_ws(self, string): + # type: (unicode) -> bool + if self.skip_string(string): + self.skip_ws() + return True + return False + @property def eof(self): + # type: () -> bool return self.pos >= self.end @property def current_char(self): + # type: () -> unicode try: return self.definition[self.pos] except IndexError: @@ -2456,21 +3347,105 @@ def current_char(self): @property def matched_text(self): + # type: () -> unicode if self.last_match is not None: return self.last_match.group() def read_rest(self): + # type: () -> unicode rv = self.definition[self.pos:] self.pos = self.end return rv def assert_end(self): + # type: () -> None self.skip_ws() if not self.eof: - self.fail('expected end of definition, got %r' % - self.definition[self.pos:]) + self.fail('Expected end of definition.') + + def _parse_balanced_token_seq(self, end): + # type: (List[unicode]) -> unicode + # TODO: add handling of string literals and similar + brackets = {'(': ')', '[': ']', '{': '}'} # type: Dict[unicode, unicode] + startPos = self.pos + symbols = [] # type: List[unicode] + while not self.eof: + if len(symbols) == 0 and self.current_char in end: + break + if self.current_char in brackets.keys(): + symbols.append(brackets[self.current_char]) + elif len(symbols) > 0 and self.current_char == symbols[-1]: + symbols.pop() + elif self.current_char in ")]}": + self.fail("Unexpected '%s' in balanced-token-seq." % self.current_char) + self.pos += 1 + if self.eof: + self.fail("Could not find end of balanced-token-seq starting at %d." + % startPos) + return self.definition[startPos:self.pos] + + def _parse_attribute(self): + # type: () -> Any + self.skip_ws() + # try C++11 style + startPos = self.pos + if self.skip_string_and_ws('['): + if not self.skip_string('['): + self.pos = startPos + else: + # TODO: actually implement the correct grammar + arg = self._parse_balanced_token_seq(end=[']']) + if not self.skip_string_and_ws(']'): + self.fail("Expected ']' in end of attribute.") + if not self.skip_string_and_ws(']'): + self.fail("Expected ']' in end of attribute after [[...]") + return ASTCPPAttribute(arg) + + # try GNU style + if self.skip_word_and_ws('__attribute__'): + if not self.skip_string_and_ws('('): + self.fail("Expected '(' after '__attribute__'.") + if not self.skip_string_and_ws('('): + self.fail("Expected '(' after '__attribute__('.") + attrs = [] + while 1: + if self.match(_identifier_re): + name = self.matched_text + self.skip_ws() + if self.skip_string_and_ws('('): + self.fail('Parameterized GNU style attribute not yet supported.') + attrs.append(ASTGnuAttribute(name, None)) + # TODO: parse arguments for the attribute + if self.skip_string_and_ws(','): + continue + elif self.skip_string_and_ws(')'): + break + else: + self.fail("Expected identifier, ')', or ',' in __attribute__.") + if not self.skip_string_and_ws(')'): + self.fail("Expected ')' after '__attribute__((...)'") + return ASTGnuAttributeList(attrs) + + # try the simple id attributes defined by the user + for id in self.config.cpp_id_attributes: + if self.skip_word_and_ws(id): + return ASTIdAttribute(id) + + # try the paren attributes defined by the user + for id in self.config.cpp_paren_attributes: + if not self.skip_string_and_ws(id): + continue + if not self.skip_string('('): + self.fail("Expected '(' after user-defined paren-attribute.") + arg = self._parse_balanced_token_seq(end=[')']) + if not self.skip_string(')'): + self.fail("Expected ')' to end user-defined paren-attribute.") + return ASTParenAttribute(id, arg) + + return None def _parse_expression(self, end): + # type: (List[unicode]) -> unicode # Stupidly "parse" an expression. # 'end' should be a list of characters which ends the expression. assert end @@ -2480,8 +3455,8 @@ def _parse_expression(self, end): value = self.matched_text else: # TODO: add handling of more bracket-like things, and quote handling - brackets = {'(': ')', '[': ']'} - symbols = [] + brackets = {'(': ')', '[': ']'} # type: Dict[unicode, unicode] + symbols = [] # type: List[unicode] while not self.eof: if (len(symbols) == 0 and self.current_char in end): break @@ -2497,6 +3472,7 @@ def _parse_expression(self, end): return value.strip() def _parse_operator(self): + # type: () -> Any self.skip_ws() # adapted from the old code # thank god, a regular operator definition @@ -2515,16 +3491,26 @@ def _parse_operator(self): op += '[]' return ASTOperatorBuildIn(op) + # user-defined literal? + if self.skip_string('""'): + self.skip_ws() + if not self.match(_identifier_re): + self.fail("Expected user-defined literal suffix.") + identifier = ASTIdentifier(self.matched_text) + return ASTOperatorLiteral(identifier) + # oh well, looks like a cast operator definition. # In that case, eat another type. type = self._parse_type(named=False, outer="operatorCast") return ASTOperatorType(type) def _parse_template_argument_list(self): + # type: () -> ASTTemplateArgs self.skip_ws() if not self.skip_string('<'): return None - templateArgs = [] + prevErrors = [] + templateArgs = [] # type: List while 1: pos = self.pos parsedComma = False @@ -2540,7 +3526,7 @@ def _parse_template_argument_list(self): self.fail('Expected ">" or "," in template argument list.') templateArgs.append(type) except DefinitionError as e: - errorType = e.description + prevErrors.append((e, "If type argument")) self.pos = pos try: value = self._parse_expression(end=[',', '>']) @@ -2553,18 +3539,17 @@ def _parse_template_argument_list(self): self.fail('Expected ">" or "," in template argument list.') templateArgs.append(ASTTemplateArgConstant(value)) except DefinitionError as e: - errorExpr = e.description - msg = "Error in parsing template argument list. " \ - "Error if type argument:\n%s\n" \ - "Error if non-type argument:\n%s" \ - % (errorType, errorExpr) - self.fail(msg) + self.pos = pos + prevErrors.append((e, "If non-type argument")) + header = "Error in parsing template argument list." + raise self._make_multi_error(prevErrors, header) if parsedEnd: assert not parsedComma break return ASTTemplateArgs(templateArgs) - def _parse_nested_name(self): + def _parse_nested_name(self, memberPointer=False): + # type: (bool) -> ASTNestedName names = [] self.skip_ws() @@ -2580,6 +3565,8 @@ def _parse_nested_name(self): names.append(op) else: if not self.match(_identifier_re): + if memberPointer and len(names) > 0: + break self.fail("Expected identifier in nested name.") identifier = self.matched_text # make sure there isn't a keyword @@ -2587,15 +3574,18 @@ def _parse_nested_name(self): self.fail("Expected identifier in nested name, " "got keyword: %s" % identifier) templateArgs = self._parse_template_argument_list() - identifier = ASTIdentifier(identifier) + identifier = ASTIdentifier(identifier) # type: ignore names.append(ASTNestedNameElement(identifier, templateArgs)) self.skip_ws() if not self.skip_string('::'): + if memberPointer: + self.fail("Expected '::' in pointer to member (function).") break return ASTNestedName(names, rooted) def _parse_trailing_type_spec(self): + # type: () -> Any # fundemental types self.skip_ws() for t in self._simple_fundemental_types: @@ -2641,6 +3631,7 @@ def _parse_trailing_type_spec(self): return ASTTrailingTypeSpecName(prefix, nestedName) def _parse_parameters_and_qualifiers(self, paramMode): + # type: (unicode) -> ASTParametersQualifiers self.skip_ws() if not self.skip_string('('): if paramMode == 'function': @@ -2659,10 +3650,9 @@ def _parse_parameters_and_qualifiers(self, paramMode): self.fail('Expected ")" after "..." in ' 'parameters_and_qualifiers.') break - if paramMode == 'function': - arg = self._parse_type_with_init(outer=None, named='maybe') - else: - arg = self._parse_type(named=False) + # note: it seems that function arguments can always sbe named, + # even in function pointers and similar. + arg = self._parse_type_with_init(outer=None, named='single') # TODO: parse default parameters # TODO: didn't we just do that? args.append(ASTFunctinoParameter(arg)) @@ -2676,7 +3666,10 @@ def _parse_parameters_and_qualifiers(self, paramMode): 'Expecting "," or ")" in parameters_and_qualifiers, ' 'got "%s".' % self.current_char) - if paramMode != 'function': + # TODO: why did we have this bail-out? + # does it hurt to parse the extra stuff? + # it's needed for pointer to member functions + if paramMode != 'function' and False: return ASTParametersQualifiers( args, None, None, None, None, None, None, None) @@ -2728,8 +3721,10 @@ def _parse_parameters_and_qualifiers(self, paramMode): initializer) def _parse_decl_specs_simple(self, outer, typed): + # type: (unicode, bool) -> ASTDeclSpecsSimple """Just parse the simple ones.""" storage = None + threadLocal = None inline = None virtual = None explicit = None @@ -2737,6 +3732,7 @@ def _parse_decl_specs_simple(self, outer, typed): volatile = None const = None friend = None + attrs = [] while 1: # accept any permutation of a subset of some decl-specs self.skip_ws() if not storage: @@ -2744,6 +3740,9 @@ def _parse_decl_specs_simple(self, outer, typed): if self.skip_word('static'): storage = 'static' continue + if self.skip_word('extern'): + storage = 'extern' + continue if outer == 'member': if self.skip_word('mutable'): storage = 'mutable' @@ -2751,6 +3750,10 @@ def _parse_decl_specs_simple(self, outer, typed): if self.skip_word('register'): storage = 'register' continue + if not threadLocal and outer == 'member': + threadLocal = self.skip_word('thread_local') + if threadLocal: + continue if outer == 'function': # function-specifiers @@ -2783,11 +3786,17 @@ def _parse_decl_specs_simple(self, outer, typed): const = self.skip_word('const') if const: continue + attr = self._parse_attribute() + if attr: + attrs.append(attr) + continue break - return ASTDeclSpecsSimple(storage, inline, virtual, explicit, constexpr, - volatile, const, friend) + return ASTDeclSpecsSimple(storage, threadLocal, inline, virtual, + explicit, constexpr, volatile, const, + friend, attrs) def _parse_decl_specs(self, outer, typed=True): + # type: (unicode, bool) -> ASTDeclSpecs if outer: if outer not in ('type', 'member', 'function', 'templateParam'): raise Exception('Internal error, unknown outer "%s".' % outer) @@ -2815,28 +3824,30 @@ def _parse_decl_specs(self, outer, typed=True): return ASTDeclSpecs(outer, leftSpecs, rightSpecs, trailing) def _parse_declarator_name_param_qual(self, named, paramMode, typed): + # type: (Union[bool, unicode], unicode, bool) -> ASTDecleratorNameParamQual # now we should parse the name, and then suffixes if named == 'maybe': + pos = self.pos try: declId = self._parse_nested_name() except DefinitionError: + self.pos = pos declId = None elif named == 'single': if self.match(_identifier_re): identifier = ASTIdentifier(self.matched_text) nne = ASTNestedNameElement(identifier, None) declId = ASTNestedName([nne], rooted=False) + # if it's a member pointer, we may have '::', which should be an error + self.skip_ws() + if self.current_char == ':': + self.fail("Unexpected ':' after identifier.") else: declId = None elif named: declId = self._parse_nested_name() else: declId = None - self.skip_ws() - if typed and declId: - if self.skip_string("*"): - self.fail("Member pointers not implemented.") - arrayOps = [] while 1: self.skip_ws() @@ -2853,10 +3864,12 @@ def _parse_declarator_name_param_qual(self, named, paramMode, typed): paramQual=paramQual) def _parse_declerator(self, named, paramMode, typed=True): + # type: (Union[bool, unicode], unicode, bool) -> Any # 'typed' here means 'parse return type stuff' if paramMode not in ('type', 'function', 'operatorCast'): raise Exception( "Internal error, unknown paramMode '%s'." % paramMode) + prevErrors = [] self.skip_ws() if typed and self.skip_string('*'): self.skip_ws() @@ -2875,13 +3888,39 @@ def _parse_declerator(self, named, paramMode, typed=True): next = self._parse_declerator(named, paramMode, typed) return ASTDeclaratorPtr(next=next, volatile=volatile, const=const) # TODO: shouldn't we parse an R-value ref here first? - elif typed and self.skip_string("&"): + if typed and self.skip_string("&"): next = self._parse_declerator(named, paramMode, typed) return ASTDeclaratorRef(next=next) - elif typed and self.skip_string("..."): + if typed and self.skip_string("..."): next = self._parse_declerator(named, paramMode, False) return ASTDeclaratorParamPack(next=next) - elif typed and self.current_char == '(': # note: peeking, not skipping + if typed: # pointer to member + pos = self.pos + try: + name = self._parse_nested_name(memberPointer=True) + self.skip_ws() + if not self.skip_string('*'): + self.fail("Expected '*' in pointer to member declarator.") + self.skip_ws() + except DefinitionError as e: + self.pos = pos + prevErrors.append((e, "If pointer to member declarator")) + else: + volatile = False + const = False + while 1: + if not volatile: + volatile = self.skip_word_and_ws('volatile') + if volatile: + continue + if not const: + const = self.skip_word_and_ws('const') + if const: + continue + break + next = self._parse_declerator(named, paramMode, typed) + return ASTDeclaratorMemPtr(name, const, volatile, next=next) + if typed and self.current_char == '(': # note: peeking, not skipping if paramMode == "operatorCast": # TODO: we should be able to parse cast operators which return # function pointers. For now, just hax it and ignore. @@ -2889,14 +3928,15 @@ def _parse_declerator(self, named, paramMode, typed=True): paramQual=None) # maybe this is the beginning of params and quals,try that first, # otherwise assume it's noptr->declarator > ( ptr-declarator ) - startPos = self.pos + pos = self.pos try: # assume this is params and quals res = self._parse_declarator_name_param_qual(named, paramMode, typed) return res except DefinitionError as exParamQual: - self.pos = startPos + prevErrors.append((exParamQual, "If declId, parameters, and qualifiers")) + self.pos = pos try: assert self.current_char == '(' self.skip_string('(') @@ -2911,22 +3951,28 @@ def _parse_declerator(self, named, paramMode, typed=True): typed=typed) return ASTDeclaratorParen(inner=inner, next=next) except DefinitionError as exNoPtrParen: - raise DefinitionError( - "If declId, parameters, and qualifiers {\n%s\n" - "} else If parenthesis in noptr-declarator {\n%s\n}" - % (exParamQual, exNoPtrParen)) - else: - return self._parse_declarator_name_param_qual(named, paramMode, - typed) + self.pos = pos + prevErrors.append((exNoPtrParen, "If parenthesis in noptr-declarator")) + header = "Error in declarator" + raise self._make_multi_error(prevErrors, header) + pos = self.pos + try: + return self._parse_declarator_name_param_qual(named, paramMode, typed) + except DefinitionError as e: + self.pos = pos + prevErrors.append((e, "If declarator-id")) + header = "Error in declarator or parameters and qualifiers" + raise self._make_multi_error(prevErrors, header) def _parse_initializer(self, outer=None): + # type: (unicode) -> ASTInitializer self.skip_ws() # TODO: support paren and brace initialization for memberObject if not self.skip_string('='): return None else: if outer == 'member': - value = self.read_rest().strip() + value = self.read_rest().strip() # type: unicode elif outer == 'templateParam': value = self._parse_expression(end=[',', '>']) elif outer is None: # function parameter @@ -2937,6 +3983,7 @@ def _parse_initializer(self, outer=None): return ASTInitializer(value) def _parse_type(self, named, outer=None): + # type: (Union[bool, unicode], unicode) -> ASTType """ named=False|'maybe'|True: 'maybe' is e.g., for function objects which doesn't need to name the arguments @@ -2954,6 +4001,7 @@ def _parse_type(self, named, outer=None): # We allow type objects to just be a name. # Some functions don't have normal return types: constructors, # destrutors, cast operators + prevErrors = [] startPos = self.pos # first try without the type try: @@ -2962,37 +4010,49 @@ def _parse_type(self, named, outer=None): typed=False) self.assert_end() except DefinitionError as exUntyped: + if outer == 'type': + desc = "If just a name" + elif outer == 'function': + desc = "If the function has no return type" + else: + assert False + prevErrors.append((exUntyped, desc)) self.pos = startPos try: declSpecs = self._parse_decl_specs(outer=outer) decl = self._parse_declerator(named=True, paramMode=outer) except DefinitionError as exTyped: + self.pos = startPos + if outer == 'type': + desc = "If typedef-like declaration" + elif outer == 'function': + desc = "If the function has a return type" + else: + assert False + prevErrors.append((exTyped, desc)) # Retain the else branch for easier debugging. # TODO: it would be nice to save the previous stacktrace # and output it here. if True: if outer == 'type': - desc = ('Type must be either just a name or a ' - 'typedef-like declaration.\n' - 'Just a name error: %s\n' - 'Typedef-like expression error: %s') + header = "Type must be either just a name or a " + header += "typedef-like declaration." elif outer == 'function': - desc = ('Error when parsing function declaration:\n' - 'If no return type {\n%s\n' - '} else if return type {\n%s\n}') + header = "Error when parsing function declaration." else: assert False - raise DefinitionError( - desc % (exUntyped.description, exTyped.description)) + raise self._make_multi_error(prevErrors, header) else: # For testing purposes. # do it again to get the proper traceback (how do you # relieable save a traceback when an exception is # constructed?) + pass self.pos = startPos - declSpecs = self._parse_decl_specs(outer=outer, typed=False) + typed = True + declSpecs = self._parse_decl_specs(outer=outer, typed=typed) decl = self._parse_declerator(named=True, paramMode=outer, - typed=False) + typed=typed) else: paramMode = 'type' if outer == 'member': # i.e., member @@ -3007,6 +4067,7 @@ def _parse_type(self, named, outer=None): return ASTType(declSpecs, decl) def _parse_type_with_init(self, named, outer): + # type: (Union[bool, unicode], unicode) -> ASTTypeWithInit if outer: assert outer in ('type', 'member', 'function', 'templateParam') type = self._parse_type(outer=outer, named=named) @@ -3014,6 +4075,7 @@ def _parse_type_with_init(self, named, outer): return ASTTypeWithInit(type, init) def _parse_type_using(self): + # type: () -> ASTTypeUsing name = self._parse_nested_name() self.skip_ws() if not self.skip_string('='): @@ -3021,7 +4083,26 @@ def _parse_type_using(self): type = self._parse_type(False, None) return ASTTypeUsing(name, type) + def _parse_concept(self): + # type: () -> ASTConcept + nestedName = self._parse_nested_name() + isFunction = False + + self.skip_ws() + if self.skip_string('('): + isFunction = True + self.skip_ws() + if not self.skip_string(')'): + self.fail("Expected ')' in function concept declaration.") + + initializer = self._parse_initializer('member') + if initializer and isFunction: + self.fail("Function concept with initializer.") + + return ASTConcept(nestedName, isFunction, initializer) + def _parse_class(self): + # type: () -> ASTClass name = self._parse_nested_name() self.skip_ws() final = self.skip_word_and_ws('final') @@ -3030,7 +4111,7 @@ def _parse_class(self): if self.skip_string(':'): while 1: self.skip_ws() - visibility = 'private' + visibility = 'private' # type: unicode virtual = False pack = False if self.skip_word_and_ws('virtual'): @@ -3052,7 +4133,8 @@ def _parse_class(self): return ASTClass(name, final, bases) def _parse_enum(self): - scoped = None # is set by CPPEnumObject + # type: () -> ASTEnum + scoped = None # type: unicode # is set by CPPEnumObject self.skip_ws() name = self._parse_nested_name() self.skip_ws() @@ -3062,6 +4144,7 @@ def _parse_enum(self): return ASTEnum(name, scoped, underlyingType) def _parse_enumerator(self): + # type: () -> ASTEnumerator name = self._parse_nested_name() self.skip_ws() init = None @@ -3071,14 +4154,15 @@ def _parse_enumerator(self): return ASTEnumerator(name, init) def _parse_template_parameter_list(self): + # type: () -> ASTTemplateParams # only: '<' parameter-list '>' # we assume that 'template' has just been parsed - templateParams = [] + templateParams = [] # type: List self.skip_ws() if not self.skip_string("<"): self.fail("Expected '<' after 'template'") while 1: - extraError = '' + prevErrors = [] self.skip_ws() if self.skip_word('template'): # declare a tenplate template parameter @@ -3112,7 +4196,7 @@ def _parse_template_parameter_list(self): parameterPack, default) if nestedParams: # template type - param = ASTTemplateParamTemplateType(nestedParams, data) + param = ASTTemplateParamTemplateType(nestedParams, data) # type: Any else: # type param = ASTTemplateParamType(data) @@ -3124,34 +4208,87 @@ def _parse_template_parameter_list(self): param = self._parse_type_with_init('maybe', 'templateParam') templateParams.append(ASTTemplateParamNonType(param)) except DefinitionError as e: + prevErrors.append((e, "If non-type template parameter")) self.pos = pos - extraError = "Error if non-type template parameter: %s" - extraError = extraError % e.description self.skip_ws() if self.skip_string('>'): return ASTTemplateParams(templateParams) elif self.skip_string(','): continue else: - msg = 'Expected "=", ",", or ">" in template parameter list.' - if len(extraError) > 0: - msg += '\n%s' % extraError - self.fail(msg) + header = "Error in template parameter list." + try: + self.fail('Expected "=", ",", or ">".') + except DefinitionError as e: + prevErrors.append((e, "")) + raise self._make_multi_error(prevErrors, header) - def _parse_template_declaration_prefix(self): - templates = [] + def _parse_template_introduction(self): + # type: () -> ASTTemplateIntroduction + pos = self.pos + try: + concept = self._parse_nested_name() + except: + self.pos = pos + return None + self.skip_ws() + if not self.skip_string('{'): + self.pos = pos + return None + + # for sure it must be a template introduction now + params = [] while 1: self.skip_ws() - if not self.skip_word("template"): + parameterPack = self.skip_string('...') + self.skip_ws() + if not self.match(_identifier_re): + self.fail("Expected identifier in template introduction list.") + identifier = self.matched_text + # make sure there isn't a keyword + if identifier in _keywords: + self.fail("Expected identifier in template introduction list, " + "got keyword: %s" % identifier) + identifier = ASTIdentifier(identifier) # type: ignore + params.append(ASTTemplateIntroductionParameter(identifier, parameterPack)) + + self.skip_ws() + if self.skip_string('}'): break - params = self._parse_template_parameter_list() + elif self.skip_string(','): + continue + else: + self.fail("Error in template introduction list. " + 'Expected ",", or "}".') + return ASTTemplateIntroduction(concept, params) + + def _parse_template_declaration_prefix(self, objectType): + # type: (unicode) -> ASTTemplateDeclarationPrefix + templates = [] # type: List + while 1: + self.skip_ws() + # the saved position is only used to provide a better error message + pos = self.pos + if self.skip_word("template"): + params = self._parse_template_parameter_list() # type: Any + else: + params = self._parse_template_introduction() + if not params: + break + if objectType == 'concept' and len(templates) > 0: + self.pos = pos + self.fail("More than 1 template parameter list for concept.") templates.append(params) + if len(templates) == 0 and objectType == 'concept': + self.fail('Missing template parameter list for concept.') if len(templates) == 0: return None else: return ASTTemplateDeclarationPrefix(templates) - def _check_template_consistency(self, nestedName, templatePrefix): + def _check_template_consistency(self, nestedName, templatePrefix, + fullSpecShorthand): + # type: (Any, Any, bool) -> ASTTemplateDeclarationPrefix numArgs = nestedName.num_templates() if not templatePrefix: numParams = 0 @@ -3163,15 +4300,16 @@ def _check_template_consistency(self, nestedName, templatePrefix): % (numArgs, numParams)) if numArgs > numParams: numExtra = numArgs - numParams - msg = "Too many template argument lists compared to parameter" \ - " lists. Argument lists: %d, Parameter lists: %d," \ - " Extra empty parameters lists prepended: %d." \ - % (numArgs, numParams, numExtra) - msg += " Declaration:\n\t" - if templatePrefix: - msg += "%s\n\t" % text_type(templatePrefix) - msg += text_type(nestedName) - self.warn(msg) + if not fullSpecShorthand: + msg = "Too many template argument lists compared to parameter" \ + " lists. Argument lists: %d, Parameter lists: %d," \ + " Extra empty parameters lists prepended: %d." \ + % (numArgs, numParams, numExtra) # type: unicode + msg += " Declaration:\n\t" + if templatePrefix: + msg += "%s\n\t" % text_type(templatePrefix) + msg += text_type(nestedName) + self.warn(msg) newTemplates = [] for i in range(numExtra): @@ -3182,40 +4320,41 @@ def _check_template_consistency(self, nestedName, templatePrefix): return templatePrefix def parse_declaration(self, objectType): - if objectType not in ('type', 'member', + # type: (unicode) -> ASTDeclaration + if objectType not in ('type', 'concept', 'member', 'function', 'class', 'enum', 'enumerator'): raise Exception('Internal error, unknown objectType "%s".' % objectType) visibility = None templatePrefix = None - declaration = None + declaration = None # type: Any self.skip_ws() if self.match(_visibility_re): visibility = self.matched_text - if objectType in ('type', 'member', 'function', 'class'): - templatePrefix = self._parse_template_declaration_prefix() + if objectType in ('type', 'concept', 'member', 'function', 'class'): + templatePrefix = self._parse_template_declaration_prefix(objectType) if objectType == 'type': - error = None + prevErrors = [] pos = self.pos try: if not templatePrefix: declaration = self._parse_type(named=True, outer='type') except DefinitionError as e: - error = e.description + prevErrors.append((e, "If typedef-like declaration")) self.pos = pos + pos = self.pos try: if not declaration: declaration = self._parse_type_using() except DefinitionError as e: - if error: - msg = "Error if typedef:\n%s\n" \ - "Error if type alias or template alias:\n%s" \ - % (error, e.description) - raise DefinitionError(msg) - else: - raise e + self.pos = pos + prevErrors.append((e, "If type alias or template alias")) + header = "Error in type declaration." + raise self._make_multi_error(prevErrors, header) + elif objectType == 'concept': + declaration = self._parse_concept() elif objectType == 'member': declaration = self._parse_type_with_init(named=True, outer='member') elif objectType == 'function': @@ -3229,27 +4368,34 @@ def parse_declaration(self, objectType): else: assert False templatePrefix = self._check_template_consistency(declaration.name, - templatePrefix) + templatePrefix, + fullSpecShorthand=False) return ASTDeclaration(objectType, visibility, templatePrefix, declaration) def parse_namespace_object(self): - templatePrefix = self._parse_template_declaration_prefix() + # type: () -> ASTNamespace + templatePrefix = self._parse_template_declaration_prefix(objectType="namespace") name = self._parse_nested_name() - templatePrefix = self._check_template_consistency(name, templatePrefix) + templatePrefix = self._check_template_consistency(name, templatePrefix, + fullSpecShorthand=False) res = ASTNamespace(name, templatePrefix) res.objectType = 'namespace' return res def parse_xref_object(self): - templatePrefix = self._parse_template_declaration_prefix() + # type: () -> ASTNamespace + templatePrefix = self._parse_template_declaration_prefix(objectType="xref") name = self._parse_nested_name() + templatePrefix = self._check_template_consistency(name, templatePrefix, + fullSpecShorthand=True) res = ASTNamespace(name, templatePrefix) res.objectType = 'xref' return res def _make_phony_error_name(): + # type: () -> ASTNestedName nne = ASTNestedNameElement(ASTIdentifier("PhonyNameDueToError"), None) return ASTNestedName([nne], rooted=False) @@ -3261,6 +4407,9 @@ class CPPObject(ObjectDescription): GroupedField('parameter', label=l_('Parameters'), names=('param', 'parameter', 'arg', 'argument'), can_collapse=True), + GroupedField('template parameter', label=l_('Template Parameters'), + names=('tparam', 'template parameter'), + can_collapse=True), GroupedField('exceptions', label=l_('Throws'), rolename='cpp:class', names=('throws', 'throw', 'exception'), can_collapse=True), @@ -3269,9 +4418,11 @@ class CPPObject(ObjectDescription): ] def warn(self, msg): - self.state_machine.reporter.warning(msg, lineno=self.lineno) + # type: (unicode) -> None + self.state_machine.reporter.warning(msg, line=self.lineno) def _add_enumerator_to_parent(self, ast): + # type: (Any) -> None assert ast.objectType == 'enumerator' # find the parent, if it exists && is an enum # && it's unscoped, @@ -3301,15 +4452,19 @@ def _add_enumerator_to_parent(self, ast): return targetSymbol = parentSymbol.parent - s = targetSymbol.find_identifier(symbol.identifier) + s = targetSymbol.find_identifier(symbol.identifier, matchSelf=False) if s is not None: # something is already declared with that name return + declClone = symbol.declaration.clone() + declClone.enumeratorScopedSymbol = symbol Symbol(parent=targetSymbol, identifier=symbol.identifier, templateParams=None, templateArgs=None, - declaration=symbol.declaration.clone()) + declaration=declClone, + docname=self.env.docname) def add_target_and_index(self, ast, sig, signode): + # type: (Any, unicode, addnodes.desc_signature) -> None # general note: name must be lstrip(':')'ed, to remove "::" try: id_v1 = ast.get_id_v1() @@ -3317,7 +4472,7 @@ def add_target_and_index(self, ast, sig, signode): id_v1 = None id_v2 = ast.get_id_v2() # store them in reverse order, so the newest is first - ids = [id_v2, id_v1] + ids = [id_v2, id_v1] newestId = ids[0] assert newestId # shouldn't be None @@ -3326,8 +4481,13 @@ def add_target_and_index(self, ast, sig, signode): 'report as bug (id=%s).' % (text_type(ast), newestId)) name = text_type(ast.symbol.get_full_nested_name()).lstrip(':') - indexText = self.get_index_text(name) - self.indexnode['entries'].append(('single', indexText, newestId, '')) + strippedName = name + for prefix in self.env.config.cpp_index_common_prefix: + if name.startswith(prefix): + strippedName = strippedName[len(prefix):] + break + indexText = self.get_index_text(strippedName) + self.indexnode['entries'].append(('single', indexText, newestId, '', None)) if newestId not in self.state.document.ids: # if the name is not unique, the first one will win @@ -3338,25 +4498,34 @@ def add_target_and_index(self, ast, sig, signode): else: # print("[CPP] non-unique name:", name) pass - for id in ids: - if id: # is None when the element didn't exist in that version + # always add the newest id + assert newestId + signode['ids'].append(newestId) + # only add compatibility ids when there are no conflicts + for id in ids[1:]: + if not id: # is None when the element didn't exist in that version + continue + if id not in self.state.document.ids: signode['ids'].append(id) - signode['first'] = (not self.names) # hmm, what is this abound? + signode['first'] = (not self.names) # hmm, what is this about? self.state.document.note_explicit_target(signode) def parse_definition(self, parser): + # type: (Any) -> Any raise NotImplementedError() def describe_signature(self, signode, ast, parentScope): + # type: (addnodes.desc_signature, Any, Any) -> None raise NotImplementedError() def handle_signature(self, sig, signode): - if 'cpp:parentSymbol' not in self.env.ref_context: - root = self.env.domaindata['cpp']['rootSymbol'] - self.env.ref_context['cpp:parentSymbol'] = root - parentSymbol = self.env.ref_context['cpp:parentSymbol'] + # type: (unicode, addnodes.desc_signature) -> Any + if 'cpp:parent_symbol' not in self.env.ref_context: + root = self.env.domaindata['cpp']['root_symbol'] + self.env.ref_context['cpp:parent_symbol'] = root + parentSymbol = self.env.ref_context['cpp:parent_symbol'] - parser = DefinitionParser(sig, self) + parser = DefinitionParser(sig, self, self.env.config) try: ast = self.parse_definition(parser) parser.assert_end() @@ -3366,11 +4535,16 @@ def handle_signature(self, sig, signode): # the possibly inner declarations. name = _make_phony_error_name() symbol = parentSymbol.add_name(name) - self.env.ref_context['cpp:lastSymbol'] = symbol + self.env.ref_context['cpp:last_symbol'] = symbol raise ValueError - symbol = parentSymbol.add_declaration(ast) - self.env.ref_context['cpp:lastSymbol'] = symbol - symbol.docname = self.env.docname + + try: + symbol = parentSymbol.add_declaration(ast, docname=self.env.docname) + self.env.ref_context['cpp:last_symbol'] = symbol + except _DuplicateSymbolError as e: + # Assume we are actually in the old symbol, + # instead of the newly created duplicate. + self.env.ref_context['cpp:last_symbol'] = e.symbol if ast.objectType == 'enumerator': self._add_enumerator_to_parent(ast) @@ -3378,74 +4552,95 @@ def handle_signature(self, sig, signode): self.describe_signature(signode, ast) return ast + def before_content(self): + # type: () -> None + lastSymbol = self.env.ref_context['cpp:last_symbol'] + assert lastSymbol + self.oldParentSymbol = self.env.ref_context['cpp:parent_symbol'] + self.env.ref_context['cpp:parent_symbol'] = lastSymbol + + def after_content(self): + # type: () -> None + self.env.ref_context['cpp:parent_symbol'] = self.oldParentSymbol + class CPPTypeObject(CPPObject): def get_index_text(self, name): + # type: (unicode) -> unicode return _('%s (C++ type)') % name def parse_definition(self, parser): + # type: (Any) -> Any return parser.parse_declaration("type") - def describe_signature(self, signode, ast): + def describe_signature(self, signode, ast): # type: ignore + # type: (addnodes.desc_signature, Any) -> None + ast.describe_signature(signode, 'lastIsName', self.env) + + +class CPPConceptObject(CPPObject): + def get_index_text(self, name): + # type: (unicode) -> unicode + return _('%s (C++ concept)') % name + + def parse_definition(self, parser): + # type: (Any) -> Any + return parser.parse_declaration("concept") + + def describe_signature(self, signode, ast): # type: ignore + # type: (addnodes.desc_signature, Any) -> None ast.describe_signature(signode, 'lastIsName', self.env) class CPPMemberObject(CPPObject): def get_index_text(self, name): + # type: (unicode) -> unicode return _('%s (C++ member)') % name def parse_definition(self, parser): + # type: (Any) -> Any return parser.parse_declaration("member") - def describe_signature(self, signode, ast): + def describe_signature(self, signode, ast): # type: ignore + # type: (addnodes.desc_signature, Any) -> None ast.describe_signature(signode, 'lastIsName', self.env) class CPPFunctionObject(CPPObject): def get_index_text(self, name): + # type: (unicode) -> unicode return _('%s (C++ function)') % name def parse_definition(self, parser): + # type: (Any) -> Any return parser.parse_declaration("function") - def describe_signature(self, signode, ast): + def describe_signature(self, signode, ast): # type: ignore + # type: (addnodes.desc_signature, Any) -> None ast.describe_signature(signode, 'lastIsName', self.env) class CPPClassObject(CPPObject): def get_index_text(self, name): + # type: (unicode) -> unicode return _('%s (C++ class)') % name - def before_content(self): - lastSymbol = self.env.ref_context['cpp:lastSymbol'] - assert lastSymbol - self.oldParentSymbol = self.env.ref_context['cpp:parentSymbol'] - self.env.ref_context['cpp:parentSymbol'] = lastSymbol - - def after_content(self): - self.env.ref_context['cpp:parentSymbol'] = self.oldParentSymbol - def parse_definition(self, parser): + # type: (Any) -> Any return parser.parse_declaration("class") - def describe_signature(self, signode, ast): + def describe_signature(self, signode, ast): # type: ignore + # type: (addnodes.desc_signature, Any) -> None ast.describe_signature(signode, 'lastIsName', self.env) class CPPEnumObject(CPPObject): def get_index_text(self, name): + # type: (unicode) -> unicode return _('%s (C++ enum)') % name - def before_content(self): - lastSymbol = self.env.ref_context['cpp:lastSymbol'] - assert lastSymbol - self.oldParentSymbol = self.env.ref_context['cpp:parentSymbol'] - self.env.ref_context['cpp:parentSymbol'] = lastSymbol - - def after_content(self): - self.env.ref_context['cpp:parentSymbol'] = self.oldParentSymbol - def parse_definition(self, parser): + # type: (Any) -> Any ast = parser.parse_declaration("enum") # self.objtype is set by ObjectDescription in run() if self.objtype == "enum": @@ -3458,18 +4653,22 @@ def parse_definition(self, parser): assert False return ast - def describe_signature(self, signode, ast): + def describe_signature(self, signode, ast): # type: ignore + # type: (addnodes.desc_signature, Any) -> None ast.describe_signature(signode, 'lastIsName', self.env) class CPPEnumeratorObject(CPPObject): def get_index_text(self, name): + # type: (unicode) -> unicode return _('%s (C++ enumerator)') % name def parse_definition(self, parser): + # type: (Any) -> Any return parser.parse_declaration("enumerator") - def describe_signature(self, signode, ast): + def describe_signature(self, signode, ast): # type: ignore + # type: (addnodes.desc_signature, Any) -> None ast.describe_signature(signode, 'lastIsName', self.env) @@ -3483,31 +4682,32 @@ class CPPNamespaceObject(Directive): required_arguments = 1 optional_arguments = 0 final_argument_whitespace = True - option_spec = {} + option_spec = {} # type: Dict def warn(self, msg): - self.state_machine.reporter.warning(msg, lineno=self.lineno) + # type: (unicode) -> None + self.state_machine.reporter.warning(msg, line=self.lineno) def run(self): + # type: () -> List[nodes.Node] env = self.state.document.settings.env - rootSymbol = env.domaindata['cpp']['rootSymbol'] + rootSymbol = env.domaindata['cpp']['root_symbol'] if self.arguments[0].strip() in ('NULL', '0', 'nullptr'): symbol = rootSymbol - stack = [] + stack = [] # type: List[Symbol] else: - parser = DefinitionParser(self.arguments[0], self) + parser = DefinitionParser(self.arguments[0], self, env.config) try: ast = parser.parse_namespace_object() parser.assert_end() except DefinitionError as e: - self.state_machine.reporter.warning(e.description, - line=self.lineno) + self.warn(e.description) name = _make_phony_error_name() ast = ASTNamespace(name, None) symbol = rootSymbol.add_name(ast.nestedName, ast.templatePrefix) stack = [symbol] - env.ref_context['cpp:parentSymbol'] = symbol - env.temp_data['cpp:namespaceStack'] = stack + env.ref_context['cpp:parent_symbol'] = symbol + env.temp_data['cpp:namespace_stack'] = stack return [] @@ -3516,32 +4716,33 @@ class CPPNamespacePushObject(Directive): required_arguments = 1 optional_arguments = 0 final_argument_whitespace = True - option_spec = {} + option_spec = {} # type: Dict def warn(self, msg): - self.state_machine.reporter.warning(msg, lineno=self.lineno) + # type: (unicode) -> None + self.state_machine.reporter.warning(msg, line=self.lineno) def run(self): + # type: () -> List[nodes.Node] env = self.state.document.settings.env if self.arguments[0].strip() in ('NULL', '0', 'nullptr'): return - parser = DefinitionParser(self.arguments[0], self) + parser = DefinitionParser(self.arguments[0], self, env.config) try: ast = parser.parse_namespace_object() parser.assert_end() except DefinitionError as e: - self.state_machine.reporter.warning(e.description, - line=self.lineno) + self.warn(e.description) name = _make_phony_error_name() ast = ASTNamespace(name, None) - oldParent = env.ref_context.get('cpp:parentSymbol', None) + oldParent = env.ref_context.get('cpp:parent_symbol', None) if not oldParent: - oldParent = env.domaindata['cpp']['rootSymbol'] + oldParent = env.domaindata['cpp']['root_symbol'] symbol = oldParent.add_name(ast.nestedName, ast.templatePrefix) - stack = env.temp_data.get('cpp:namespaceStack', []) + stack = env.temp_data.get('cpp:namespace_stack', []) stack.append(symbol) - env.ref_context['cpp:parentSymbol'] = symbol - env.temp_data['cpp:namespaceStack'] = stack + env.ref_context['cpp:parent_symbol'] = symbol + env.temp_data['cpp:namespace_stack'] = stack return [] @@ -3550,14 +4751,16 @@ class CPPNamespacePopObject(Directive): required_arguments = 0 optional_arguments = 0 final_argument_whitespace = True - option_spec = {} + option_spec = {} # type: Dict def warn(self, msg): - self.state_machine.reporter.warning(msg, lineno=self.lineno) + # type: (unicode) -> None + self.state_machine.reporter.warning(msg, line=self.lineno) def run(self): + # type: () -> List[nodes.Node] env = self.state.document.settings.env - stack = env.temp_data.get('cpp:namespaceStack', None) + stack = env.temp_data.get('cpp:namespace_stack', None) if not stack or len(stack) == 0: self.warn("C++ namespace pop on empty stack. Defaulting to gobal scope.") stack = [] @@ -3566,17 +4769,25 @@ def run(self): if len(stack) > 0: symbol = stack[-1] else: - symbol = env.domaindata['cpp']['rootSymbol'] - env.ref_context['cpp:parentSymbol'] = symbol - env.temp_data['cpp:namespaceStack'] = stack + symbol = env.domaindata['cpp']['root_symbol'] + env.ref_context['cpp:parent_symbol'] = symbol + env.temp_data['cpp:namespace_stack'] = stack return [] class CPPXRefRole(XRefRole): def process_link(self, env, refnode, has_explicit_title, title, target): - parent = env.ref_context.get('cpp:parentSymbol', None) + # type: (BuildEnvironment, nodes.Node, bool, unicode, unicode) -> Tuple[unicode, unicode] # NOQA + parent = env.ref_context.get('cpp:parent_symbol', None) if parent: - refnode['cpp:parentKey'] = parent.get_lookup_key() + refnode['cpp:parent_key'] = parent.get_lookup_key() + if refnode['reftype'] == 'any': + # Assume the removal part of fix_parens for :any: refs. + # The addition part is done with the reference is resolved. + if not has_explicit_title and title.endswith('()'): + title = title[:-2] + if target.endswith('()'): + target = target[:-2] # TODO: should this really be here? if not has_explicit_title: target = target.lstrip('~') # only has a meaning for the title @@ -3599,6 +4810,7 @@ class CPPDomain(Domain): 'function': ObjType(l_('function'), 'func'), 'member': ObjType(l_('member'), 'member'), 'type': ObjType(l_('type'), 'type'), + 'concept': ObjType(l_('concept'), 'concept'), 'enum': ObjType(l_('enum'), 'enum'), 'enumerator': ObjType(l_('enumerator'), 'enumerator') } @@ -3609,6 +4821,7 @@ class CPPDomain(Domain): 'member': CPPMemberObject, 'var': CPPMemberObject, 'type': CPPTypeObject, + 'concept': CPPConceptObject, 'enum': CPPEnumObject, 'enum-struct': CPPEnumObject, 'enum-class': CPPEnumObject, @@ -3624,60 +4837,64 @@ class CPPDomain(Domain): 'member': CPPXRefRole(), 'var': CPPXRefRole(), 'type': CPPXRefRole(), + 'concept': CPPXRefRole(), 'enum': CPPXRefRole(), 'enumerator': CPPXRefRole() } initial_data = { - 'rootSymbol': Symbol(None, None, None, None, None), + 'root_symbol': Symbol(None, None, None, None, None, None), 'names': {} # full name for indexing -> docname } def clear_doc(self, docname): - rootSymbol = self.data['rootSymbol'] - for symbol in rootSymbol.get_all_symbols(): - if not symbol.declaration: - continue - try: - sDocname = symbol.docname - except AttributeError: - # it's a template parameter - # the symbols are yielded in post-order, so this should be fine - assert symbol.parent - sDocname = symbol.parent.docname - if sDocname != docname: - continue - symbol.declaration = None - symbol.docname = None + # type: (unicode) -> None + rootSymbol = self.data['root_symbol'] + rootSymbol.clear_doc(docname) for name, nDocname in list(self.data['names'].items()): if nDocname == docname: del self.data['names'][name] def process_doc(self, env, docname, document): + # type: (BuildEnvironment, unicode, nodes.Node) -> None # just for debugging - # print(self.data['rootSymbol'].dump(0)) + # print(docname) + # print(self.data['root_symbol'].dump(0)) pass - # def merge_domaindata(self, docnames, otherdata): - # # TODO: merge rootSymbol + def merge_domaindata(self, docnames, otherdata): + # type: (List[unicode], Dict) -> None + self.data['root_symbol'].merge_with(otherdata['root_symbol'], + docnames, self.env) + ourNames = self.data['names'] + for name, docname in otherdata['names'].items(): + if docname in docnames: + if name in ourNames: + msg = "Duplicate declaration, also defined in '%s'.\n" + msg += "Name of declaration is '%s'." + msg = msg % (ourNames[name], name) + self.env.warn(docname, msg) + else: + ourNames[name] = docname - def _resolve_xref_inner(self, env, fromdocname, builder, + def _resolve_xref_inner(self, env, fromdocname, builder, typ, target, node, contnode, emitWarnings=True): + # type: (BuildEnvironment, unicode, Builder, unicode, unicode, nodes.Node, nodes.Node, bool) -> nodes.Node # NOQA class Warner(object): def warn(self, msg): if emitWarnings: env.warn_node(msg, node) warner = Warner() - parser = DefinitionParser(target, warner) + parser = DefinitionParser(target, warner, env.config) try: ast = parser.parse_xref_object() parser.skip_ws() - if not parser.eof: - raise DefinitionError('') - except DefinitionError: - warner.warn('Unparseable C++ cross-reference: %r' % target) + parser.assert_end() + except DefinitionError as e: + warner.warn('Unparseable C++ cross-reference: %r\n%s' + % (target, text_type(e.description))) return None, None - parentKey = node.get("cpp:parentKey", None) - rootSymbol = self.data['rootSymbol'] + parentKey = node.get("cpp:parent_key", None) + rootSymbol = self.data['root_symbol'] if parentKey: parentSymbol = rootSymbol.direct_lookup(parentKey) if not parentSymbol: @@ -3693,46 +4910,85 @@ def warn(self, msg): else: templateDecls = [] s = parentSymbol.find_name(name, templateDecls, - specific_specialisation=False) + templateShorthand=True, + matchSelf=True) if s is None or s.declaration is None: return None, None + + if typ.startswith('cpp:'): + typ = typ[4:] + if typ == 'func': + typ = 'function' + declTyp = s.declaration.objectType + + def checkType(): + if typ == 'any': + return True + if declTyp == 'templateParam': + return True + if typ == 'var' or typ == 'member': + return declTyp in ['var', 'member'] + if typ in ['enum', 'enumerator', 'function', 'class', 'concept']: + return declTyp == typ + validForType = ['enum', 'class', 'function', 'type'] + if typ == 'typeOrConcept': + return declTyp == 'concept' or declTyp in validForType + if typ == 'type': + return declTyp in validForType + print("Type is %s" % typ) + assert False + if not checkType(): + warner.warn("cpp:%s targets a %s (%s)." + % (typ, s.declaration.objectType, + s.get_full_nested_name())) + declaration = s.declaration fullNestedName = s.get_full_nested_name() name = text_type(fullNestedName).lstrip(':') - try: - docname = s.docname - except AttributeError: - # it's a template parameter - assert s.parent - docname = s.parent.docname + docname = s.docname + assert docname + if typ == 'any' and declaration.objectType == 'function': + if env.config.add_function_parentheses: + if not node['refexplicit']: + title = contnode.pop(0).astext() + contnode += nodes.Text(title + '()') return make_refnode(builder, fromdocname, docname, declaration.get_newest_id(), contnode, name ), declaration.objectType def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode): - return self._resolve_xref_inner(env, fromdocname, builder, target, - node, contnode)[0] + # type: (BuildEnvironment, unicode, Builder, unicode, unicode, nodes.Node, nodes.Node) -> nodes.Node # NOQA + return self._resolve_xref_inner(env, fromdocname, builder, typ, + target, node, contnode)[0] def resolve_any_xref(self, env, fromdocname, builder, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, nodes.Node, nodes.Node) -> List[Tuple[unicode, nodes.Node]] # NOQA node, objtype = self._resolve_xref_inner(env, fromdocname, builder, - target, node, contnode, + 'any', target, node, contnode, emitWarnings=False) if node: return [('cpp:' + self.role_for_objtype(objtype), node)] return [] def get_objects(self): - rootSymbol = self.data['rootSymbol'] + # type: () -> Iterator[Tuple[unicode, unicode, unicode, unicode, unicode, int]] + rootSymbol = self.data['root_symbol'] for symbol in rootSymbol.get_all_symbols(): - if not symbol.declaration: + if symbol.declaration is None: continue + assert symbol.docname name = text_type(symbol.get_full_nested_name()).lstrip(':') objectType = symbol.declaration.objectType - try: - docname = symbol.docname - except AttributeError: - continue + docname = symbol.docname newestId = symbol.declaration.get_newest_id() yield (name, name, objectType, docname, newestId, 1) + + +def setup(app): + # type: (Sphinx) -> None + app.add_domain(CPPDomain) + app.add_config_value("cpp_index_common_prefix", [], 'env') + app.add_config_value("cpp_id_attributes", [], 'env') + app.add_config_value("cpp_paren_attributes", [], 'env') diff --git a/sphinx/domains/javascript.py b/sphinx/domains/javascript.py index 843629b3b80..5c2eead01e6 100644 --- a/sphinx/domains/javascript.py +++ b/sphinx/domains/javascript.py @@ -5,7 +5,7 @@ The JavaScript domain. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -18,6 +18,14 @@ from sphinx.util.nodes import make_refnode from sphinx.util.docfields import Field, GroupedField, TypedField +if False: + # For type annotation + from typing import Iterator, Tuple # NOQA + from docutils import nodes # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.builders import Builder # NOQA + from sphinx.environment import BuildEnvironment # NOQA + class JSObject(ObjectDescription): """ @@ -28,9 +36,10 @@ class JSObject(ObjectDescription): has_arguments = False #: what is displayed right before the documentation entry - display_prefix = None + display_prefix = None # type: unicode def handle_signature(self, sig, signode): + # type: (unicode, addnodes.desc_signature) -> Tuple[unicode, unicode] sig = sig.strip() if '(' in sig and sig[-1:] == ')': prefix, arglist = sig.split('(', 1) @@ -76,6 +85,7 @@ def handle_signature(self, sig, signode): return fullname, nameprefix def add_target_and_index(self, name_obj, sig, signode): + # type: (Tuple[unicode, unicode], unicode, addnodes.desc_signature) -> None objectname = self.options.get( 'object', self.env.ref_context.get('js:object')) fullname = name_obj[0] @@ -97,9 +107,10 @@ def add_target_and_index(self, name_obj, sig, signode): if indextext: self.indexnode['entries'].append(('single', indextext, fullname.replace('$', '_S_'), - '')) + '', None)) def get_index_text(self, objectname, name_obj): + # type: (unicode, Tuple[unicode, unicode]) -> unicode name, obj = name_obj if self.objtype == 'function': if not obj: @@ -139,6 +150,7 @@ class JSConstructor(JSCallable): class JSXRefRole(XRefRole): def process_link(self, env, refnode, has_explicit_title, title, target): + # type: (BuildEnvironment, nodes.Node, bool, unicode, unicode) -> Tuple[unicode, unicode] # NOQA # basically what sphinx.domains.python.PyXRefRole does refnode['js:object'] = env.ref_context.get('js:object') if not has_explicit_title: @@ -180,20 +192,23 @@ class JavaScriptDomain(Domain): } initial_data = { 'objects': {}, # fullname -> docname, objtype - } + } # type: Dict[unicode, Dict[unicode, Tuple[unicode, unicode]]] def clear_doc(self, docname): + # type: (unicode) -> None for fullname, (fn, _l) in list(self.data['objects'].items()): if fn == docname: del self.data['objects'][fullname] def merge_domaindata(self, docnames, otherdata): + # type: (List[unicode], Dict) -> None # XXX check duplicates for fullname, (fn, objtype) in otherdata['objects'].items(): if fn in docnames: self.data['objects'][fullname] = (fn, objtype) def find_obj(self, env, obj, name, typ, searchorder=0): + # type: (BuildEnvironment, unicode, unicode, unicode, int) -> Tuple[unicode, Tuple[unicode, unicode]] # NOQA if name[-2:] == '()': name = name[:-2] objects = self.data['objects'] @@ -212,6 +227,7 @@ def find_obj(self, env, obj, name, typ, searchorder=0): def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, unicode, nodes.Node, nodes.Node) -> nodes.Node # NOQA objectname = node.get('js:object') searchorder = node.hasattr('refspecific') and 1 or 0 name, obj = self.find_obj(env, objectname, target, typ, searchorder) @@ -222,6 +238,7 @@ def resolve_xref(self, env, fromdocname, builder, typ, target, node, def resolve_any_xref(self, env, fromdocname, builder, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, nodes.Node, nodes.Node) -> List[Tuple[unicode, nodes.Node]] # NOQA objectname = node.get('js:object') name, obj = self.find_obj(env, objectname, target, None, 1) if not obj: @@ -231,6 +248,12 @@ def resolve_any_xref(self, env, fromdocname, builder, target, node, name.replace('$', '_S_'), contnode, name))] def get_objects(self): + # type: () -> Iterator[Tuple[unicode, unicode, unicode, unicode, unicode, int]] for refname, (docname, type) in list(self.data['objects'].items()): yield refname, refname, type, docname, \ refname.replace('$', '_S_'), 1 + + +def setup(app): + # type: (Sphinx) -> None + app.add_domain(JavaScriptDomain) diff --git a/sphinx/domains/python.py b/sphinx/domains/python.py index b64e797b0ad..4f0d0f1aef8 100644 --- a/sphinx/domains/python.py +++ b/sphinx/domains/python.py @@ -5,13 +5,14 @@ The Python domain. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ import re from six import iteritems + from docutils import nodes from docutils.parsers.rst import directives @@ -24,6 +25,13 @@ from sphinx.util.compat import Directive from sphinx.util.docfields import Field, GroupedField, TypedField +if False: + # For type annotation + from typing import Any, Iterator, Tuple, Union # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.builders import Builder # NOQA + from sphinx.environment import BuildEnvironment # NOQA + # REs for Python signatures py_sig_re = re.compile( @@ -36,6 +44,7 @@ def _pseudo_parse_arglist(signode, arglist): + # type: (addnodes.desc_signature, unicode) -> None """"Parse" a list of arguments separated by commas. Arguments can have "optional" annotations given by enclosing them in @@ -87,7 +96,8 @@ def _pseudo_parse_arglist(signode, arglist): class PyXrefMixin(object): def make_xref(self, rolename, domain, target, innernode=nodes.emphasis, contnode=None): - result = super(PyXrefMixin, self).make_xref(rolename, domain, target, + # type: (unicode, unicode, unicode, nodes.Node, nodes.Node) -> nodes.Node + result = super(PyXrefMixin, self).make_xref(rolename, domain, target, # type: ignore innernode, contnode) result['refspecific'] = True if target.startswith(('.', '~')): @@ -101,11 +111,37 @@ def make_xref(self, rolename, domain, target, innernode=nodes.emphasis, break return result + def make_xrefs(self, rolename, domain, target, innernode=nodes.emphasis, + contnode=None): + # type: (unicode, unicode, unicode, nodes.Node, nodes.Node) -> List[nodes.Node] + delims = '(\s*[\[\]\(\),](?:\s*or\s)?\s*|\s+or\s+)' + delims_re = re.compile(delims) + sub_targets = re.split(delims, target) + + split_contnode = bool(contnode and contnode.astext() == target) + + results = [] + for sub_target in sub_targets: + if split_contnode: + contnode = nodes.Text(sub_target) + + if delims_re.match(sub_target): # type: ignore + results.append(contnode or innernode(sub_target, sub_target)) + else: + results.append(self.make_xref(rolename, domain, sub_target, + innernode, contnode)) + + return results + class PyField(PyXrefMixin, Field): pass +class PyGroupedField(PyXrefMixin, GroupedField): + pass + + class PyTypedField(PyXrefMixin, TypedField): pass @@ -130,9 +166,9 @@ class PyObject(ObjectDescription): names=('var', 'ivar', 'cvar'), typerolename='obj', typenames=('vartype',), can_collapse=True), - GroupedField('exceptions', label=l_('Raises'), rolename='exc', - names=('raises', 'raise', 'exception', 'except'), - can_collapse=True), + PyGroupedField('exceptions', label=l_('Raises'), rolename='exc', + names=('raises', 'raise', 'exception', 'except'), + can_collapse=True), Field('returnvalue', label=l_('Returns'), has_arg=False, names=('returns', 'return')), PyField('returntype', label=l_('Return type'), has_arg=False, @@ -140,18 +176,21 @@ class PyObject(ObjectDescription): ] def get_signature_prefix(self, sig): + # type: (unicode) -> unicode """May return a prefix to put before the object name in the signature. """ return '' def needs_arglist(self): + # type: () -> bool """May return true if an empty argument list is to be generated even if the document contains none. """ return False - def handle_signature(self, sig, signode): + def handle_signature(self, sig, signode): # type: ignore + # type: (unicode, addnodes.desc_signature) -> Tuple[unicode, unicode] """Transform a Python signature into RST nodes. Return (fully qualified name of the thing, classname if any). @@ -160,7 +199,7 @@ def handle_signature(self, sig, signode): * it is stripped from the displayed name if present * it is added to the full name (return value) if not present """ - m = py_sig_re.match(sig) + m = py_sig_re.match(sig) # type: ignore if m is None: raise ValueError name_prefix, name, arglist, retann = m.groups() @@ -231,10 +270,12 @@ def handle_signature(self, sig, signode): return fullname, name_prefix def get_index_text(self, modname, name): + # type: (unicode, unicode) -> unicode """Return the text for the index entry of the object.""" raise NotImplementedError('must be implemented in subclasses') def add_target_and_index(self, name_cls, sig, signode): + # type: (unicode, unicode, addnodes.desc_signature) -> None modname = self.options.get( 'module', self.env.ref_context.get('py:module')) fullname = (modname and modname + '.' or '') + name_cls[0] @@ -257,13 +298,15 @@ def add_target_and_index(self, name_cls, sig, signode): indextext = self.get_index_text(modname, name_cls) if indextext: self.indexnode['entries'].append(('single', indextext, - fullname, '')) + fullname, '', None)) def before_content(self): + # type: () -> None # needed for automatic qualification of members (reset in subclasses) self.clsname_set = False def after_content(self): + # type: () -> None if self.clsname_set: self.env.ref_context.pop('py:class', None) @@ -274,9 +317,11 @@ class PyModulelevel(PyObject): """ def needs_arglist(self): + # type: () -> bool return self.objtype == 'function' def get_index_text(self, modname, name_cls): + # type: (unicode, unicode) -> unicode if self.objtype == 'function': if not modname: return _('%s() (built-in function)') % name_cls[0] @@ -295,9 +340,11 @@ class PyClasslike(PyObject): """ def get_signature_prefix(self, sig): + # type: (unicode) -> unicode return self.objtype + ' ' def get_index_text(self, modname, name_cls): + # type: (unicode, unicode) -> unicode if self.objtype == 'class': if not modname: return _('%s (built-in class)') % name_cls[0] @@ -308,6 +355,7 @@ def get_index_text(self, modname, name_cls): return '' def before_content(self): + # type: () -> None PyObject.before_content(self) if self.names: self.env.ref_context['py:class'] = self.names[0][0] @@ -320,9 +368,11 @@ class PyClassmember(PyObject): """ def needs_arglist(self): + # type: () -> bool return self.objtype.endswith('method') def get_signature_prefix(self, sig): + # type: (unicode) -> unicode if self.objtype == 'staticmethod': return 'static ' elif self.objtype == 'classmethod': @@ -330,6 +380,7 @@ def get_signature_prefix(self, sig): return '' def get_index_text(self, modname, name_cls): + # type: (unicode, unicode) -> unicode name, cls = name_cls add_modules = self.env.config.add_module_names if self.objtype == 'method': @@ -386,6 +437,7 @@ def get_index_text(self, modname, name_cls): return '' def before_content(self): + # type: () -> None PyObject.before_content(self) lastname = self.names and self.names[-1][1] if lastname and not self.env.ref_context.get('py:class'): @@ -398,11 +450,13 @@ class PyDecoratorMixin(object): Mixin for decorator directives. """ def handle_signature(self, sig, signode): - ret = super(PyDecoratorMixin, self).handle_signature(sig, signode) + # type: (unicode, addnodes.desc_signature) -> Tuple[unicode, unicode] + ret = super(PyDecoratorMixin, self).handle_signature(sig, signode) # type: ignore signode.insert(0, addnodes.desc_addname('@', '@')) return ret def needs_arglist(self): + # type: () -> bool return False @@ -411,6 +465,7 @@ class PyDecoratorFunction(PyDecoratorMixin, PyModulelevel): Directive to mark functions meant to be used as decorators. """ def run(self): + # type: () -> List[nodes.Node] # a decorator function is a function after all self.name = 'py:function' return PyModulelevel.run(self) @@ -421,6 +476,7 @@ class PyDecoratorMethod(PyDecoratorMixin, PyClassmember): Directive to mark methods meant to be used as decorators. """ def run(self): + # type: () -> List[nodes.Node] self.name = 'py:method' return PyClassmember.run(self) @@ -442,6 +498,7 @@ class PyModule(Directive): } def run(self): + # type: () -> List[nodes.Node] env = self.state.document.settings.env modname = self.arguments[0].strip() noindex = 'noindex' in self.options @@ -462,7 +519,7 @@ def run(self): ret.append(targetnode) indextext = _('%s (module)') % modname inode = addnodes.index(entries=[('single', indextext, - 'module-' + modname, '')]) + 'module-' + modname, '', None)]) ret.append(inode) return ret @@ -477,9 +534,10 @@ class PyCurrentModule(Directive): required_arguments = 1 optional_arguments = 0 final_argument_whitespace = False - option_spec = {} + option_spec = {} # type: Dict def run(self): + # type: () -> List[nodes.Node] env = self.state.document.settings.env modname = self.arguments[0].strip() if modname == 'None': @@ -491,6 +549,7 @@ def run(self): class PyXRefRole(XRefRole): def process_link(self, env, refnode, has_explicit_title, title, target): + # type: (BuildEnvironment, nodes.Node, bool, unicode, unicode) -> Tuple[unicode, unicode] # NOQA refnode['py:module'] = env.ref_context.get('py:module') refnode['py:class'] = env.ref_context.get('py:class') if not has_explicit_title: @@ -521,9 +580,11 @@ class PythonModuleIndex(Index): shortname = l_('modules') def generate(self, docnames=None): - content = {} + # type: (List[unicode]) -> Tuple[List[Tuple[unicode, List[List[Union[unicode, int]]]]], bool] # NOQA + content = {} # type: Dict[unicode, List] # list of prefixes to ignore - ignores = self.domain.env.config['modindex_common_prefix'] + ignores = None # type: List[unicode] + ignores = self.domain.env.config['modindex_common_prefix'] # type: ignore ignores = sorted(ignores, key=len, reverse=True) # list of all modules, sorted by module name modules = sorted(iteritems(self.domain.data['modules']), @@ -576,9 +637,9 @@ def generate(self, docnames=None): collapse = len(modules) - num_toplevels < num_toplevels # sort by first letter - content = sorted(iteritems(content)) + sorted_content = sorted(iteritems(content)) - return content, collapse + return sorted_content, collapse class PythonDomain(Domain): @@ -595,7 +656,7 @@ class PythonDomain(Domain): 'staticmethod': ObjType(l_('static method'), 'meth', 'obj'), 'attribute': ObjType(l_('attribute'), 'attr', 'obj'), 'module': ObjType(l_('module'), 'mod', 'obj'), - } + } # type: Dict[unicode, ObjType] directives = { 'function': PyModulelevel, @@ -625,12 +686,13 @@ class PythonDomain(Domain): initial_data = { 'objects': {}, # fullname -> docname, objtype 'modules': {}, # modname -> docname, synopsis, platform, deprecated - } + } # type: Dict[unicode, Dict[unicode, Tuple[Any]]] indices = [ PythonModuleIndex, ] def clear_doc(self, docname): + # type: (unicode) -> None for fullname, (fn, _l) in list(self.data['objects'].items()): if fn == docname: del self.data['objects'][fullname] @@ -639,6 +701,7 @@ def clear_doc(self, docname): del self.data['modules'][modname] def merge_domaindata(self, docnames, otherdata): + # type: (List[unicode], Dict) -> None # XXX check duplicates? for fullname, (fn, objtype) in otherdata['objects'].items(): if fn in docnames: @@ -648,6 +711,7 @@ def merge_domaindata(self, docnames, otherdata): self.data['modules'][modname] = data def find_obj(self, env, modname, classname, name, type, searchmode=0): + # type: (BuildEnvironment, unicode, unicode, unicode, unicode, int) -> List[Tuple[unicode, Any]] # NOQA """Find a Python object for "name", perhaps using the given module and/or classname. Returns a list of (name, object entry) tuples. """ @@ -659,7 +723,7 @@ def find_obj(self, env, modname, classname, name, type, searchmode=0): return [] objects = self.data['objects'] - matches = [] + matches = [] # type: List[Tuple[unicode, Any]] newname = None if searchmode == 1: @@ -712,6 +776,7 @@ def find_obj(self, env, modname, classname, name, type, searchmode=0): def resolve_xref(self, env, fromdocname, builder, type, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, unicode, nodes.Node, nodes.Node) -> nodes.Node # NOQA modname = node.get('py:module') clsname = node.get('py:class') searchmode = node.hasattr('refspecific') and 1 or 0 @@ -735,9 +800,10 @@ def resolve_xref(self, env, fromdocname, builder, def resolve_any_xref(self, env, fromdocname, builder, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, nodes.Node, nodes.Node) -> List[Tuple[unicode, nodes.Node]] # NOQA modname = node.get('py:module') clsname = node.get('py:class') - results = [] + results = [] # type: List[Tuple[unicode, nodes.Node]] # always search in "refspecific" mode with the :any: role matches = self.find_obj(env, modname, clsname, target, None, 1) @@ -753,6 +819,7 @@ def resolve_any_xref(self, env, fromdocname, builder, target, return results def _make_module_refnode(self, builder, fromdocname, name, contnode): + # type: (Builder, unicode, unicode, nodes.Node) -> nodes.Node # get additional info for modules docname, synopsis, platform, deprecated = self.data['modules'][name] title = name @@ -766,8 +833,14 @@ def _make_module_refnode(self, builder, fromdocname, name, contnode): 'module-' + name, contnode, title) def get_objects(self): + # type: () -> Iterator[Tuple[unicode, unicode, unicode, unicode, unicode, int]] for modname, info in iteritems(self.data['modules']): yield (modname, modname, 'module', info[0], 'module-' + modname, 0) for refname, (docname, type) in iteritems(self.data['objects']): if type != 'module': # modules are already handled yield (refname, refname, type, docname, refname, 1) + + +def setup(app): + # type: (Sphinx) -> None + app.add_domain(PythonDomain) diff --git a/sphinx/domains/rst.py b/sphinx/domains/rst.py index b479614697f..fa3353aa621 100644 --- a/sphinx/domains/rst.py +++ b/sphinx/domains/rst.py @@ -5,7 +5,7 @@ The reStructuredText domain. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -20,6 +20,14 @@ from sphinx.roles import XRefRole from sphinx.util.nodes import make_refnode +if False: + # For type annotation + from typing import Iterator, Tuple # NOQA + from docutils import nodes # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.builders import Builder # NOQA + from sphinx.environment import BuildEnvironment # NOQA + dir_sig_re = re.compile(r'\.\. (.+?)::(.*)$') @@ -30,6 +38,7 @@ class ReSTMarkup(ObjectDescription): """ def add_target_and_index(self, name, sig, signode): + # type: (unicode, unicode, addnodes.desc_signature) -> None targetname = self.objtype + '-' + name if targetname not in self.state.document.ids: signode['names'].append(targetname) @@ -48,9 +57,10 @@ def add_target_and_index(self, name, sig, signode): indextext = self.get_index_text(self.objtype, name) if indextext: self.indexnode['entries'].append(('single', indextext, - targetname, '')) + targetname, '', None)) def get_index_text(self, objectname, name): + # type: (unicode, unicode) -> unicode if self.objtype == 'directive': return _('%s (directive)') % name elif self.objtype == 'role': @@ -59,6 +69,7 @@ def get_index_text(self, objectname, name): def parse_directive(d): + # type: (unicode) -> Tuple[unicode, unicode] """Parse a directive signature. Returns (directive, arguments) string tuple. If no arguments are given, @@ -68,7 +79,7 @@ def parse_directive(d): if not dir.startswith('.'): # Assume it is a directive without syntax return (dir, '') - m = dir_sig_re.match(dir) + m = dir_sig_re.match(dir) # type: ignore if not m: return (dir, '') parsed_dir, parsed_args = m.groups() @@ -80,6 +91,7 @@ class ReSTDirective(ReSTMarkup): Description of a reST directive. """ def handle_signature(self, sig, signode): + # type: (unicode, addnodes.desc_signature) -> unicode name, args = parse_directive(sig) desc_name = '.. %s::' % name signode += addnodes.desc_name(desc_name, desc_name) @@ -93,6 +105,7 @@ class ReSTRole(ReSTMarkup): Description of a reST role. """ def handle_signature(self, sig, signode): + # type: (unicode, addnodes.desc_signature) -> unicode signode += addnodes.desc_name(':%s:' % sig, ':%s:' % sig) return sig @@ -116,14 +129,16 @@ class ReSTDomain(Domain): } initial_data = { 'objects': {}, # fullname -> docname, objtype - } + } # type: Dict[unicode, Dict[unicode, Tuple[unicode, ObjType]]] def clear_doc(self, docname): + # type: (unicode) -> None for (typ, name), doc in list(self.data['objects'].items()): if doc == docname: del self.data['objects'][typ, name] def merge_domaindata(self, docnames, otherdata): + # type: (List[unicode], Dict) -> None # XXX check duplicates for (typ, name), doc in otherdata['objects'].items(): if doc in docnames: @@ -131,6 +146,7 @@ def merge_domaindata(self, docnames, otherdata): def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, unicode, nodes.Node, nodes.Node) -> nodes.Node # NOQA objects = self.data['objects'] objtypes = self.objtypes_for_role(typ) for objtype in objtypes: @@ -142,6 +158,7 @@ def resolve_xref(self, env, fromdocname, builder, typ, target, node, def resolve_any_xref(self, env, fromdocname, builder, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, nodes.Node, nodes.Node) -> List[nodes.Node] # NOQA objects = self.data['objects'] results = [] for objtype in self.object_types: @@ -154,5 +171,11 @@ def resolve_any_xref(self, env, fromdocname, builder, target, return results def get_objects(self): + # type: () -> Iterator[Tuple[unicode, unicode, unicode, unicode, unicode, int]] for (typ, name), docname in iteritems(self.data['objects']): yield name, name, typ, docname, typ + '-' + name, 1 + + +def setup(app): + # type: (Sphinx) -> None + app.add_domain(ReSTDomain) diff --git a/sphinx/domains/std.py b/sphinx/domains/std.py index bcadc3a11f8..6044b5d591e 100644 --- a/sphinx/domains/std.py +++ b/sphinx/domains/std.py @@ -5,16 +5,16 @@ The standard domain. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ import re import unicodedata -from six import iteritems +from six import PY3, iteritems + from docutils import nodes -from docutils.nodes import fully_normalize_name from docutils.parsers.rst import directives from docutils.statemachine import ViewList @@ -23,13 +23,28 @@ from sphinx.locale import l_, _ from sphinx.domains import Domain, ObjType from sphinx.directives import ObjectDescription -from sphinx.util import ws_re, get_figtype +from sphinx.util import ws_re from sphinx.util.nodes import clean_astext, make_refnode from sphinx.util.compat import Directive +if False: + # For type annotation + from typing import Any, Callable, Dict, Iterator, List, Tuple, Type, Union # NOQA + from docutils.parsers.rst.states import Inliner # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.builders import Builder # NOQA + from sphinx.environment import BuildEnvironment # NOQA + from sphinx.util.typing import Role # NOQA + + if PY3: + unicode = str + + RoleFunction = Callable[[unicode, unicode, unicode, int, Inliner, Dict, List[unicode]], + Tuple[List[nodes.Node], List[nodes.Node]]] + # RE for option descriptions -option_desc_re = re.compile(r'((?:/|--|-|\+)?[-?@#_a-zA-Z0-9]+)(=?\s*.*)') +option_desc_re = re.compile(r'((?:/|--|-|\+)?[-\.?@#_a-zA-Z0-9]+)(=?\s*.*)') # RE for grammar tokens token_re = re.compile('`(\w+)`', re.U) @@ -39,9 +54,10 @@ class GenericObject(ObjectDescription): A generic x-ref directive registered with Sphinx.add_object_type(). """ indextemplate = '' - parse_node = None + parse_node = None # type: Callable[[GenericObject, BuildEnvironment, unicode, addnodes.desc_signature], unicode] # NOQA def handle_signature(self, sig, signode): + # type: (unicode, addnodes.desc_signature) -> unicode if self.parse_node: name = self.parse_node(self.env, sig, signode) else: @@ -52,6 +68,7 @@ def handle_signature(self, sig, signode): return name def add_target_and_index(self, name, sig, signode): + # type: (unicode, unicode, addnodes.desc_signature) -> None targetname = '%s-%s' % (self.objtype, name) signode['ids'].append(targetname) self.state.document.note_explicit_target(signode) @@ -64,7 +81,7 @@ def add_target_and_index(self, name, sig, signode): indextype = 'single' indexentry = self.indextemplate % (name,) self.indexnode['entries'].append((indextype, indexentry, - targetname, '')) + targetname, '', None)) self.env.domaindata['std']['objects'][self.objtype, name] = \ self.env.docname, targetname @@ -79,14 +96,15 @@ class EnvVarXRefRole(XRefRole): """ def result_nodes(self, document, env, node, is_ref): + # type: (nodes.Node, BuildEnvironment, nodes.Node, bool) -> Tuple[List[nodes.Node], List[nodes.Node]] # NOQA if not is_ref: return [node], [] varname = node['reftarget'] tgtid = 'index-%s' % env.new_serialno('index') indexnode = addnodes.index() indexnode['entries'] = [ - ('single', varname, tgtid, ''), - ('single', _('environment variable; %s') % varname, tgtid, '') + ('single', varname, tgtid, '', None), + ('single', _('environment variable; %s') % varname, tgtid, '', None) ] targetnode = nodes.target('', '', ids=[tgtid]) document.note_explicit_target(targetnode) @@ -103,9 +121,10 @@ class Target(Directive): required_arguments = 1 optional_arguments = 0 final_argument_whitespace = True - option_spec = {} + option_spec = {} # type: Dict def run(self): + # type: () -> List[nodes.Node] env = self.state.document.settings.env # normalize whitespace in fullname like XRefRole does fullname = ws_re.sub(' ', self.arguments[0].strip()) @@ -121,7 +140,7 @@ def run(self): indextype = indexentry[:colon].strip() indexentry = indexentry[colon+1:].strip() inode = addnodes.index(entries=[(indextype, indexentry, - targetname, '')]) + targetname, '', None)]) ret.insert(0, inode) name = self.name if ':' in self.name: @@ -137,12 +156,13 @@ class Cmdoption(ObjectDescription): """ def handle_signature(self, sig, signode): + # type: (unicode, addnodes.desc_signature) -> unicode """Transform an option description into RST nodes.""" count = 0 firstname = '' for potential_option in sig.split(', '): potential_option = potential_option.strip() - m = option_desc_re.match(potential_option) + m = option_desc_re.match(potential_option) # type: ignore if not m: self.env.warn( self.env.docname, @@ -167,6 +187,7 @@ def handle_signature(self, sig, signode): return firstname def add_target_and_index(self, firstname, sig, signode): + # type: (unicode, unicode, addnodes.desc_signature) -> None currprogram = self.env.ref_context.get('std:program') for optname in signode.get('allnames', []): targetname = optname.replace('/', '-') @@ -175,16 +196,18 @@ def add_target_and_index(self, firstname, sig, signode): if currprogram: targetname = '-' + currprogram + targetname targetname = 'cmdoption' + targetname - signode['ids'].append(targetname) - self.state.document.note_explicit_target(signode) + signode['names'].append(targetname) + + self.state.document.note_explicit_target(signode) + for optname in signode.get('allnames', []): self.env.domaindata['std']['progoptions'][currprogram, optname] = \ - self.env.docname, targetname + self.env.docname, signode['ids'][0] # create only one index entry for the whole option if optname == firstname: self.indexnode['entries'].append( ('pair', _('%scommand line option; %s') % ((currprogram and currprogram + ' ' or ''), sig), - targetname, '')) + signode['ids'][0], '', None)) class Program(Directive): @@ -196,9 +219,10 @@ class Program(Directive): required_arguments = 1 optional_arguments = 0 final_argument_whitespace = True - option_spec = {} + option_spec = {} # type: Dict def run(self): + # type: () -> List[nodes.Node] env = self.state.document.settings.env program = ws_re.sub('-', self.arguments[0].strip()) if program == 'None': @@ -210,19 +234,30 @@ def run(self): class OptionXRefRole(XRefRole): def process_link(self, env, refnode, has_explicit_title, title, target): - # validate content - if not re.match(r'(.+ )?[-/+\w]', target): - env.warn_node('Malformed :option: %r, does not contain option ' - 'marker - or -- or / or +' % target, refnode) + # type: (BuildEnvironment, nodes.Node, bool, unicode, unicode) -> Tuple[unicode, unicode] # NOQA refnode['std:program'] = env.ref_context.get('std:program') return title, target -def make_termnodes_from_paragraph_node(env, node, new_id=None): +def split_term_classifiers(line): + # type: (unicode) -> List[Union[unicode, None]] + # split line into a term and classifiers. if no classifier, None is used.. + parts = re.split(' +: +', line) + [None] + return parts + + +def make_glossary_term(env, textnodes, index_key, source, lineno, new_id=None): + # type: (BuildEnvironment, List[nodes.Node], unicode, unicode, int, unicode) -> nodes.term + # get a text-only representation of the term and register it + # as a cross-reference target + term = nodes.term('', '', *textnodes) + term.source = source + term.line = lineno + gloss_entries = env.temp_data.setdefault('gloss_entries', set()) objects = env.domaindata['std']['objects'] - termtext = node.astext() + termtext = term.astext() if new_id is None: new_id = nodes.make_id('term-' + termtext) if new_id in gloss_entries: @@ -232,25 +267,12 @@ def make_termnodes_from_paragraph_node(env, node, new_id=None): # add an index entry too indexnode = addnodes.index() - indexnode['entries'] = [('single', termtext, new_id, 'main')] - new_termnodes = [] - new_termnodes.append(indexnode) - new_termnodes.extend(node.children) - new_termnodes.append(addnodes.termsep()) - for termnode in new_termnodes: - termnode.source, termnode.line = node.source, node.line - - return new_id, termtext, new_termnodes - - -def make_term_from_paragraph_node(termnodes, ids): - # make a single "term" node with all the terms, separated by termsep - # nodes (remove the dangling trailing separator) - term = nodes.term('', '', *termnodes[:-1]) - term.source, term.line = termnodes[0].source, termnodes[0].line - term.rawsource = term.astext() - term['ids'].extend(ids) - term['names'].extend(ids) + indexnode['entries'] = [('single', termtext, new_id, 'main', index_key)] + indexnode.source, indexnode.line = term.source, term.line + term.append(indexnode) + term['ids'].append(new_id) + term['names'].append(new_id) + return term @@ -269,6 +291,7 @@ class Glossary(Directive): } def run(self): + # type: () -> List[nodes.Node] env = self.state.document.settings.env node = addnodes.glossary() node.document = self.state.document @@ -279,7 +302,7 @@ def run(self): # be* a definition list. # first, collect single entries - entries = [] + entries = [] # type: List[Tuple[List[Tuple[unicode, unicode, int]], ViewList]] in_definition = True was_empty = True messages = [] @@ -333,34 +356,29 @@ def run(self): for terms, definition in entries: termtexts = [] termnodes = [] - system_messages = [] - ids = [] + system_messages = [] # type: List[unicode] for line, source, lineno in terms: + parts = split_term_classifiers(line) # parse the term with inline markup - res = self.state.inline_text(line, lineno) - system_messages.extend(res[1]) - - # get a text-only representation of the term and register it - # as a cross-reference target - tmp = nodes.paragraph('', '', *res[0]) - tmp.source = source - tmp.line = lineno - new_id, termtext, new_termnodes = \ - make_termnodes_from_paragraph_node(env, tmp) - ids.append(new_id) - termtexts.append(termtext) - termnodes.extend(new_termnodes) - - term = make_term_from_paragraph_node(termnodes, ids) - term += system_messages + # classifiers (parts[1:]) will not be shown on doctree + textnodes, sysmsg = self.state.inline_text(parts[0], lineno) + + # use first classifier as a index key + term = make_glossary_term(env, textnodes, parts[1], source, lineno) + term.rawsource = line + system_messages.extend(sysmsg) + termtexts.append(term.astext()) + termnodes.append(term) + + termnodes.extend(system_messages) defnode = nodes.definition() if definition: self.state.nested_parse(definition, definition.items[0][1], defnode) - + termnodes.append(defnode) items.append((termtexts, - nodes.definition_list_item('', term, defnode))) + nodes.definition_list_item('', *termnodes))) if 'sorted' in self.options: items.sort(key=lambda x: @@ -374,9 +392,10 @@ def run(self): def token_xrefs(text): + # type: (unicode) -> List[nodes.Node] retnodes = [] pos = 0 - for m in token_re.finditer(text): + for m in token_re.finditer(text): # type: ignore if m.start() > pos: txt = text[pos:m.start()] retnodes.append(nodes.Text(txt, txt)) @@ -399,13 +418,14 @@ class ProductionList(Directive): required_arguments = 1 optional_arguments = 0 final_argument_whitespace = True - option_spec = {} + option_spec = {} # type: Dict def run(self): + # type: () -> List[nodes.Node] env = self.state.document.settings.env objects = env.domaindata['std']['objects'] node = addnodes.productionlist() - messages = [] + messages = [] # type: List[nodes.Node] i = 0 for rule in self.arguments[0].split('\n'): @@ -446,7 +466,7 @@ class StandardDomain(Domain): searchprio=-1), 'envvar': ObjType(l_('environment variable'), 'envvar'), 'cmdoption': ObjType(l_('program option'), 'option'), - } + } # type: Dict[unicode, ObjType] directives = { 'program': Program, @@ -455,9 +475,9 @@ class StandardDomain(Domain): 'envvar': EnvVar, 'glossary': Glossary, 'productionlist': ProductionList, - } + } # type: Dict[unicode, Type[Directive]] roles = { - 'option': OptionXRefRole(), + 'option': OptionXRefRole(warn_dangling=True), 'envvar': EnvVarXRefRole(), # links to tokens in grammar productions 'token': XRefRole(), @@ -472,11 +492,12 @@ class StandardDomain(Domain): warn_dangling=True), # links to labels, without a different title 'keyword': XRefRole(warn_dangling=True), - } + } # type: Dict[unicode, Union[RoleFunction, XRefRole]] initial_data = { 'progoptions': {}, # (program, name) -> docname, labelid 'objects': {}, # (type, name) -> docname, labelid + 'citations': {}, # name -> docname, labelid 'labels': { # labelname -> docname, labelid, sectionname 'genindex': ('genindex', '', l_('Index')), 'modindex': ('py-modindex', '', l_('Module Index')), @@ -495,15 +516,27 @@ class StandardDomain(Domain): 'the label must precede a section header)', 'numref': 'undefined label: %(target)s', 'keyword': 'unknown keyword: %(target)s', + 'option': 'unknown option: %(target)s', + 'citation': 'citation not found: %(target)s', } + enumerable_nodes = { # node_class -> (figtype, title_getter) + nodes.figure: ('figure', None), + nodes.table: ('table', None), + nodes.container: ('code-block', None), + } # type: Dict[nodes.Node, Tuple[unicode, Callable]] + def clear_doc(self, docname): + # type: (unicode) -> None for key, (fn, _l) in list(self.data['progoptions'].items()): if fn == docname: del self.data['progoptions'][key] for key, (fn, _l) in list(self.data['objects'].items()): if fn == docname: del self.data['objects'][key] + for key, (fn, _l) in list(self.data['citations'].items()): + if fn == docname: + del self.data['citations'][key] for key, (fn, _l, _l) in list(self.data['labels'].items()): if fn == docname: del self.data['labels'][key] @@ -512,6 +545,7 @@ def clear_doc(self, docname): del self.data['anonlabels'][key] def merge_domaindata(self, docnames, otherdata): + # type: (List[unicode], Dict) -> None # XXX duplicates? for key, data in otherdata['progoptions'].items(): if data[0] in docnames: @@ -519,6 +553,9 @@ def merge_domaindata(self, docnames, otherdata): for key, data in otherdata['objects'].items(): if data[0] in docnames: self.data['objects'][key] = data + for key, data in otherdata['citations'].items(): + if data[0] in docnames: + self.data['citations'][key] = data for key, data in otherdata['labels'].items(): if data[0] in docnames: self.data['labels'][key] = data @@ -527,6 +564,22 @@ def merge_domaindata(self, docnames, otherdata): self.data['anonlabels'][key] = data def process_doc(self, env, docname, document): + # type: (BuildEnvironment, unicode, nodes.Node) -> None + self.note_citations(env, docname, document) + self.note_labels(env, docname, document) + + def note_citations(self, env, docname, document): + # type: (BuildEnvironment, unicode, nodes.Node) -> None + for node in document.traverse(nodes.citation): + label = node[0].astext() + if label in self.data['citations']: + path = env.doc2path(self.data['citations'][0]) + env.warn_node('duplicate citation %s, other instance in %s' % + (label, path), node) + self.data['citations'][label] = (docname, node['ids'][0]) + + def note_labels(self, env, docname, document): + # type: (BuildEnvironment, unicode, nodes.Node) -> None labels, anonlabels = self.data['labels'], self.data['anonlabels'] for name, explicit in iteritems(document.nametypes): if not explicit: @@ -535,6 +588,9 @@ def process_doc(self, env, docname, document): if labelid is None: continue node = document.ids[labelid] + if node.tagname == 'target' and 'refid' in node: # indirect hyperlink targets + node = document.ids.get(node['refid']) + labelid = node['names'][0] if name.isdigit() or 'refuri' in node or \ node.tagname.startswith('desc_'): # ignore footnote labels, labels automatically generated from a @@ -546,33 +602,9 @@ def process_doc(self, env, docname, document): anonlabels[name] = docname, labelid if node.tagname == 'section': sectname = clean_astext(node[0]) # node[0] == title node - elif node.tagname == 'figure': - for n in node: - if n.tagname == 'caption': - sectname = clean_astext(n) - break - else: - continue - elif node.tagname == 'image' and node.parent.tagname == 'figure': - for n in node.parent: - if n.tagname == 'caption': - sectname = clean_astext(n) - break - else: - continue - elif node.tagname == 'table': - for n in node: - if n.tagname == 'title': - sectname = clean_astext(n) - break - else: - continue - elif node.tagname == 'container' and node.get('literal_block'): - for n in node: - if n.tagname == 'caption': - sectname = clean_astext(n) - break - else: + elif self.is_enumerable_node(node): + sectname = self.get_numfig_title(node) + if not sectname: continue elif node.traverse(addnodes.toctree): n = node.traverse(addnodes.toctree)[0] @@ -587,6 +619,7 @@ def process_doc(self, env, docname, document): def build_reference_node(self, fromdocname, builder, docname, labelid, sectname, rolename, **options): + # type: (unicode, Builder, unicode, unicode, unicode, unicode, Any) -> nodes.Node nodeclass = options.pop('nodeclass', nodes.reference) newnode = nodeclass('', '', internal=True, **options) innernode = nodes.inline(sectname, sectname) @@ -609,92 +642,172 @@ def build_reference_node(self, fromdocname, builder, docname, labelid, newnode.append(innernode) return newnode - def resolve_xref(self, env, fromdocname, builder, - typ, target, node, contnode): + def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, unicode, nodes.Node, nodes.Node) -> nodes.Node # NOQA if typ == 'ref': - if node['refexplicit']: - # reference to anonymous label; the reference uses - # the supplied link caption - docname, labelid = self.data['anonlabels'].get(target, ('', '')) - sectname = node.astext() - else: - # reference to named label; the final node will - # contain the section name after the label - docname, labelid, sectname = self.data['labels'].get(target, - ('', '', '')) - if not docname: - return None - - return self.build_reference_node(fromdocname, builder, - docname, labelid, sectname, 'ref') + resolver = self._resolve_ref_xref elif typ == 'numref': + resolver = self._resolve_numref_xref + elif typ == 'keyword': + resolver = self._resolve_keyword_xref + elif typ == 'option': + resolver = self._resolve_option_xref + elif typ == 'citation': + resolver = self._resolve_citation_xref + else: + resolver = self._resolve_obj_xref + + return resolver(env, fromdocname, builder, typ, target, node, contnode) + + def _resolve_ref_xref(self, env, fromdocname, builder, typ, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, unicode, nodes.Node, nodes.Node) -> nodes.Node # NOQA + if node['refexplicit']: + # reference to anonymous label; the reference uses + # the supplied link caption docname, labelid = self.data['anonlabels'].get(target, ('', '')) - if not docname: - return None + sectname = node.astext() + else: + # reference to named label; the final node will + # contain the section name after the label + docname, labelid, sectname = self.data['labels'].get(target, + ('', '', '')) + if not docname: + return None + + return self.build_reference_node(fromdocname, builder, + docname, labelid, sectname, 'ref') + + def _resolve_numref_xref(self, env, fromdocname, builder, typ, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, unicode, nodes.Node, nodes.Node) -> nodes.Node # NOQA + if target in self.data['labels']: + docname, labelid, figname = self.data['labels'].get(target, ('', '', '')) + else: + docname, labelid = self.data['anonlabels'].get(target, ('', '')) + figname = None - if env.config.numfig is False: - env.warn(fromdocname, 'numfig is disabled. :numref: is ignored.') - return contnode + if not docname: + return None - try: - target_node = env.get_doctree(docname).ids[labelid] - figtype = get_figtype(target_node) - figure_id = target_node['ids'][0] - fignumber = env.toc_fignumbers[docname][figtype][figure_id] - except (KeyError, IndexError): - return None + if env.config.numfig is False: + env.warn_node('numfig is disabled. :numref: is ignored.', node) + return contnode + + target_node = env.get_doctree(docname).ids.get(labelid) + figtype = self.get_figtype(target_node) + if figtype is None: + return None - title = contnode.astext() - if target == fully_normalize_name(title): + try: + fignumber = self.get_fignumber(env, builder, figtype, docname, target_node) + if fignumber is None: + return contnode + except ValueError: + env.warn_node("no number is assigned for %s: %s" % (figtype, labelid), node) + return contnode + + try: + if node['refexplicit']: + title = contnode.astext() + else: title = env.config.numfig_format.get(figtype, '') - newtitle = title % '.'.join(map(str, fignumber)) - return self.build_reference_node(fromdocname, builder, - docname, labelid, newtitle, 'numref', - nodeclass=addnodes.number_reference, - title=title) - elif typ == 'keyword': - # keywords are oddballs: they are referenced by named labels - docname, labelid, _ = self.data['labels'].get(target, ('', '', '')) - if not docname: - return None - return make_refnode(builder, fromdocname, docname, - labelid, contnode) - elif typ == 'option': - target = target.strip() - # most obvious thing: we are a flag option without program - if target.startswith(('-', '/', '+')): - progname = node.get('std:program') - elif re.search(r'[-/+]', target): - try: - progname, target = re.split(r' (?=-|--|/|\+)', target, 1) - except ValueError: - return None - progname = ws_re.sub('-', progname.strip()) + if figname is None and '%{name}' in title: + env.warn_node('the link has no caption: %s' % title, node) + return contnode else: - progname = None - docname, labelid = self.data['progoptions'].get((progname, target), - ('', '')) - if not docname: - return None - return make_refnode(builder, fromdocname, docname, - labelid, contnode) - else: - objtypes = self.objtypes_for_role(typ) or [] - for objtype in objtypes: - if (objtype, target) in self.data['objects']: - docname, labelid = self.data['objects'][objtype, target] + fignum = '.'.join(map(str, fignumber)) + if '{name}' in title or 'number' in title: + # new style format (cf. "Fig.%{number}") + if figname: + newtitle = title.format(name=figname, number=fignum) + else: + newtitle = title.format(number=fignum) + else: + # old style format (cf. "Fig.%s") + newtitle = title % fignum + except KeyError as exc: + env.warn_node('invalid numfig_format: %s (%r)' % (title, exc), node) + return contnode + except TypeError: + env.warn_node('invalid numfig_format: %s' % title, node) + return contnode + + return self.build_reference_node(fromdocname, builder, + docname, labelid, newtitle, 'numref', + nodeclass=addnodes.number_reference, + title=title) + + def _resolve_keyword_xref(self, env, fromdocname, builder, typ, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, unicode, nodes.Node, nodes.Node) -> nodes.Node # NOQA + # keywords are oddballs: they are referenced by named labels + docname, labelid, _ = self.data['labels'].get(target, ('', '', '')) + if not docname: + return None + return make_refnode(builder, fromdocname, docname, + labelid, contnode) + + def _resolve_option_xref(self, env, fromdocname, builder, typ, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, unicode, nodes.Node, nodes.Node) -> nodes.Node # NOQA + progname = node.get('std:program') + target = target.strip() + docname, labelid = self.data['progoptions'].get((progname, target), ('', '')) + if not docname: + commands = [] + while ws_re.search(target): # type: ignore + subcommand, target = ws_re.split(target, 1) # type: ignore + commands.append(subcommand) + progname = "-".join(commands) + + docname, labelid = self.data['progoptions'].get((progname, target), + ('', '')) + if docname: break else: - docname, labelid = '', '' - if not docname: return None + + return make_refnode(builder, fromdocname, docname, + labelid, contnode) + + def _resolve_citation_xref(self, env, fromdocname, builder, typ, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, unicode, nodes.Node, nodes.Node) -> nodes.Node # NOQA + from sphinx.environment import NoUri + + docname, labelid = self.data['citations'].get(target, ('', '')) + if not docname: + if 'ids' in node: + # remove ids attribute that annotated at + # transforms.CitationReference.apply. + del node['ids'][:] + return None + + try: return make_refnode(builder, fromdocname, docname, labelid, contnode) - - def resolve_any_xref(self, env, fromdocname, builder, target, - node, contnode): - results = [] + except NoUri: + # remove the ids we added in the CitationReferences + # transform since they can't be transfered to + # the contnode (if it's a Text node) + if not isinstance(contnode, nodes.Element): + del node['ids'][:] + raise + + def _resolve_obj_xref(self, env, fromdocname, builder, typ, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, unicode, nodes.Node, nodes.Node) -> nodes.Node # NOQA + objtypes = self.objtypes_for_role(typ) or [] + for objtype in objtypes: + if (objtype, target) in self.data['objects']: + docname, labelid = self.data['objects'][objtype, target] + break + else: + docname, labelid = '', '' + if not docname: + return None + return make_refnode(builder, fromdocname, docname, + labelid, contnode) + + def resolve_any_xref(self, env, fromdocname, builder, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, nodes.Node, nodes.Node) -> List[Tuple[unicode, nodes.Node]] # NOQA + results = [] # type: List[Tuple[unicode, nodes.Node]] ltarget = target.lower() # :ref: lowercases its target automatically for role in ('ref', 'option'): # do not try "keyword" res = self.resolve_xref(env, fromdocname, builder, role, @@ -715,6 +828,7 @@ def resolve_any_xref(self, env, fromdocname, builder, target, return results def get_objects(self): + # type: () -> Iterator[Tuple[unicode, unicode, unicode, unicode, unicode, int]] # handle the special 'doc' reference here for doc in self.env.all_docs: yield (doc, clean_astext(self.env.titles[doc]), 'doc', doc, '', -1) @@ -732,5 +846,69 @@ def get_objects(self): yield (name, name, 'label', info[0], info[1], -1) def get_type_name(self, type, primary=False): + # type: (ObjType, bool) -> unicode # never prepend "Default" return type.lname + + def is_enumerable_node(self, node): + # type: (nodes.Node) -> bool + return node.__class__ in self.enumerable_nodes + + def get_numfig_title(self, node): + # type: (nodes.Node) -> unicode + """Get the title of enumerable nodes to refer them using its title""" + if self.is_enumerable_node(node): + _, title_getter = self.enumerable_nodes.get(node.__class__, (None, None)) + if title_getter: + return title_getter(node) + else: + for subnode in node: + if subnode.tagname in ('caption', 'title'): + return clean_astext(subnode) + + return None + + def get_figtype(self, node): + # type: (nodes.Node) -> unicode + """Get figure type of nodes.""" + def has_child(node, cls): + return any(isinstance(child, cls) for child in node) + + if isinstance(node, nodes.section): + return 'section' + elif isinstance(node, nodes.container): + if node.get('literal_block') and has_child(node, nodes.literal_block): + return 'code-block' + else: + return None + else: + figtype, _ = self.enumerable_nodes.get(node.__class__, (None, None)) + return figtype + + def get_fignumber(self, env, builder, figtype, docname, target_node): + # type: (BuildEnvironment, Builder, unicode, unicode, nodes.Node) -> Tuple[int, ...] + if figtype == 'section': + if builder.name == 'latex': + return tuple() + elif docname not in env.toc_secnumbers: + raise ValueError # no number assigned + else: + anchorname = '#' + target_node['ids'][0] + if anchorname not in env.toc_secnumbers[docname]: + # try first heading which has no anchor + return env.toc_secnumbers[docname].get('') + else: + return env.toc_secnumbers[docname].get(anchorname) + else: + try: + figure_id = target_node['ids'][0] + return env.toc_fignumbers[docname][figtype][figure_id] + except (KeyError, IndexError): + # target_node is found, but fignumber is not assigned. + # Maybe it is defined in orphaned document. + raise ValueError + + +def setup(app): + # type: (Sphinx) -> None + app.add_domain(StandardDomain) diff --git a/sphinx/environment.py b/sphinx/environment.py deleted file mode 100644 index 58463cae82f..00000000000 --- a/sphinx/environment.py +++ /dev/null @@ -1,2013 +0,0 @@ -# -*- coding: utf-8 -*- -""" - sphinx.environment - ~~~~~~~~~~~~~~~~~~ - - Global creation environment. - - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. - :license: BSD, see LICENSE for details. -""" - -import re -import os -import sys -import time -import types -import bisect -import codecs -import imghdr -import string -import unicodedata -from os import path -from glob import glob -from itertools import groupby - -from six import iteritems, itervalues, text_type, class_types, string_types -from six.moves import cPickle as pickle, zip -from docutils import nodes -from docutils.io import FileInput, NullOutput -from docutils.core import Publisher -from docutils.utils import Reporter, relative_path, get_source_line -from docutils.readers import standalone -from docutils.parsers.rst import roles, directives -from docutils.parsers.rst.languages import en as english -from docutils.parsers.rst.directives.html import MetaBody -from docutils.writers import UnfilteredWriter -from docutils.frontend import OptionParser - -from sphinx import addnodes -from sphinx.util import url_re, get_matching_docs, docname_join, split_into, \ - FilenameUniqDict, get_figtype, import_object -from sphinx.util.nodes import clean_astext, make_refnode, WarningStream, is_translatable -from sphinx.util.osutil import SEP, getcwd, fs_encoding -from sphinx.util.i18n import find_catalog_files -from sphinx.util.console import bold, purple -from sphinx.util.matching import compile_matchers -from sphinx.util.parallel import ParallelTasks, parallel_available, make_chunks -from sphinx.util.websupport import is_commentable -from sphinx.errors import SphinxError, ExtensionError -from sphinx.locale import _ -from sphinx.versioning import add_uids, merge_doctrees -from sphinx.transforms import ( - DefaultSubstitutions, MoveModuleTargets, ApplySourceWorkaround, - HandleCodeBlocks, AutoNumbering, SortIds, CitationReferences, Locale, - RemoveTranslatableInline, SphinxContentsFilter, ExtraTranslatableNodes, -) - - -orig_role_function = roles.role -orig_directive_function = directives.directive - - -class ElementLookupError(Exception): - pass - - -default_settings = { - 'embed_stylesheet': False, - 'cloak_email_addresses': True, - 'pep_base_url': 'https://www.python.org/dev/peps/', - 'rfc_base_url': 'https://tools.ietf.org/html/', - 'input_encoding': 'utf-8-sig', - 'doctitle_xform': False, - 'sectsubtitle_xform': False, - 'halt_level': 5, - 'file_insertion_enabled': True, -} - -# This is increased every time an environment attribute is added -# or changed to properly invalidate pickle files. -# -# NOTE: increase base version by 2 to have distinct numbers for Py2 and 3 -ENV_VERSION = 46 + (sys.version_info[0] - 2) - - -dummy_reporter = Reporter('', 4, 4) - -versioning_conditions = { - 'none': False, - 'text': is_translatable, - 'commentable': is_commentable, -} - - -class NoUri(Exception): - """Raised by get_relative_uri if there is no URI available.""" - pass - - -class SphinxStandaloneReader(standalone.Reader): - """ - Add our own transforms. - """ - transforms = [ApplySourceWorkaround, ExtraTranslatableNodes, Locale, CitationReferences, - DefaultSubstitutions, MoveModuleTargets, HandleCodeBlocks, - AutoNumbering, SortIds, RemoveTranslatableInline] - - def __init__(self, parsers={}, *args, **kwargs): - standalone.Reader.__init__(self, *args, **kwargs) - self.parser_map = {} - for suffix, parser_class in parsers.items(): - if isinstance(parser_class, string_types): - parser_class = import_object(parser_class, 'source parser') - self.parser_map[suffix] = parser_class() - - def read(self, source, parser, settings): - self.source = source - - for suffix in self.parser_map: - if source.source_path.endswith(suffix): - self.parser = self.parser_map[suffix] - break - - if not self.parser: - self.parser = parser - self.settings = settings - self.input = self.source.read() - self.parse() - return self.document - - def get_transforms(self): - return standalone.Reader.get_transforms(self) + self.transforms - - -class SphinxDummyWriter(UnfilteredWriter): - supported = ('html',) # needed to keep "meta" nodes - - def translate(self): - pass - - -class SphinxFileInput(FileInput): - def __init__(self, app, env, *args, **kwds): - self.app = app - self.env = env - kwds['error_handler'] = 'sphinx' # py3: handle error on open. - FileInput.__init__(self, *args, **kwds) - - def decode(self, data): - if isinstance(data, text_type): # py3: `data` already decoded. - return data - return data.decode(self.encoding, 'sphinx') # py2: decoding - - def read(self): - data = FileInput.read(self) - if self.app: - arg = [data] - self.app.emit('source-read', self.env.docname, arg) - data = arg[0] - if self.env.config.rst_epilog: - data = data + '\n' + self.env.config.rst_epilog + '\n' - if self.env.config.rst_prolog: - data = self.env.config.rst_prolog + '\n' + data - return data - - -class BuildEnvironment: - """ - The environment in which the ReST files are translated. - Stores an inventory of cross-file targets and provides doctree - transformations to resolve links to them. - """ - - # --------- ENVIRONMENT PERSISTENCE ---------------------------------------- - - @staticmethod - def frompickle(config, filename): - picklefile = open(filename, 'rb') - try: - env = pickle.load(picklefile) - finally: - picklefile.close() - if env.version != ENV_VERSION: - raise IOError('build environment version not current') - env.config.values = config.values - return env - - def topickle(self, filename): - # remove unpicklable attributes - warnfunc = self._warnfunc - self.set_warnfunc(None) - values = self.config.values - del self.config.values - domains = self.domains - del self.domains - picklefile = open(filename, 'wb') - # remove potentially pickling-problematic values from config - for key, val in list(vars(self.config).items()): - if key.startswith('_') or \ - isinstance(val, types.ModuleType) or \ - isinstance(val, types.FunctionType) or \ - isinstance(val, class_types): - del self.config[key] - try: - pickle.dump(self, picklefile, pickle.HIGHEST_PROTOCOL) - finally: - picklefile.close() - # reset attributes - self.domains = domains - self.config.values = values - self.set_warnfunc(warnfunc) - - # --------- ENVIRONMENT INITIALIZATION ------------------------------------- - - def __init__(self, srcdir, doctreedir, config): - self.doctreedir = doctreedir - self.srcdir = srcdir - self.config = config - - # the method of doctree versioning; see set_versioning_method - self.versioning_condition = None - self.versioning_compare = None - - # the application object; only set while update() runs - self.app = None - - # all the registered domains, set by the application - self.domains = {} - - # the docutils settings for building - self.settings = default_settings.copy() - self.settings['env'] = self - - # the function to write warning messages with - self._warnfunc = None - - # this is to invalidate old pickles - self.version = ENV_VERSION - - # All "docnames" here are /-separated and relative and exclude - # the source suffix. - - self.found_docs = set() # contains all existing docnames - self.all_docs = {} # docname -> mtime at the time of reading - # contains all read docnames - self.dependencies = {} # docname -> set of dependent file - # names, relative to documentation root - self.reread_always = set() # docnames to re-read unconditionally on - # next build - - # File metadata - self.metadata = {} # docname -> dict of metadata items - - # TOC inventory - self.titles = {} # docname -> title node - self.longtitles = {} # docname -> title node; only different if - # set differently with title directive - self.tocs = {} # docname -> table of contents nodetree - self.toc_num_entries = {} # docname -> number of real entries - # used to determine when to show the TOC - # in a sidebar (don't show if it's only one item) - self.toc_secnumbers = {} # docname -> dict of sectionid -> number - self.toc_fignumbers = {} # docname -> dict of figtype -> - # dict of figureid -> number - - self.toctree_includes = {} # docname -> list of toctree includefiles - self.files_to_rebuild = {} # docname -> set of files - # (containing its TOCs) to rebuild too - self.glob_toctrees = set() # docnames that have :glob: toctrees - self.numbered_toctrees = set() # docnames that have :numbered: toctrees - - # domain-specific inventories, here to be pickled - self.domaindata = {} # domainname -> domain-specific dict - - # Other inventories - self.citations = {} # citation name -> docname, labelid - self.indexentries = {} # docname -> list of - # (type, string, target, aliasname) - self.versionchanges = {} # version -> list of (type, docname, - # lineno, module, descname, content) - - # these map absolute path -> (docnames, unique filename) - self.images = FilenameUniqDict() - self.dlfiles = FilenameUniqDict() - - # temporary data storage while reading a document - self.temp_data = {} - # context for cross-references (e.g. current module or class) - # this is similar to temp_data, but will for example be copied to - # attributes of "any" cross references - self.ref_context = {} - - def set_warnfunc(self, func): - self._warnfunc = func - self.settings['warning_stream'] = WarningStream(func) - - def set_versioning_method(self, method, compare): - """This sets the doctree versioning method for this environment. - - Versioning methods are a builder property; only builders with the same - versioning method can share the same doctree directory. Therefore, we - raise an exception if the user tries to use an environment with an - incompatible versioning method. - """ - if method not in versioning_conditions: - raise ValueError('invalid versioning method: %r' % method) - condition = versioning_conditions[method] - if self.versioning_condition not in (None, condition): - raise SphinxError('This environment is incompatible with the ' - 'selected builder, please choose another ' - 'doctree directory.') - self.versioning_condition = condition - self.versioning_compare = compare - - def warn(self, docname, msg, lineno=None): - """Emit a warning. - - This differs from using ``app.warn()`` in that the warning may not - be emitted instantly, but collected for emitting all warnings after - the update of the environment. - """ - # strange argument order is due to backwards compatibility - self._warnfunc(msg, (docname, lineno)) - - def warn_node(self, msg, node): - """Like :meth:`warn`, but with source information taken from *node*.""" - self._warnfunc(msg, '%s:%s' % get_source_line(node)) - - def clear_doc(self, docname): - """Remove all traces of a source file in the inventory.""" - if docname in self.all_docs: - self.all_docs.pop(docname, None) - self.reread_always.discard(docname) - self.metadata.pop(docname, None) - self.dependencies.pop(docname, None) - self.titles.pop(docname, None) - self.longtitles.pop(docname, None) - self.tocs.pop(docname, None) - self.toc_secnumbers.pop(docname, None) - self.toc_fignumbers.pop(docname, None) - self.toc_num_entries.pop(docname, None) - self.toctree_includes.pop(docname, None) - self.indexentries.pop(docname, None) - self.glob_toctrees.discard(docname) - self.numbered_toctrees.discard(docname) - self.images.purge_doc(docname) - self.dlfiles.purge_doc(docname) - - for subfn, fnset in list(self.files_to_rebuild.items()): - fnset.discard(docname) - if not fnset: - del self.files_to_rebuild[subfn] - for key, (fn, _ignore) in list(self.citations.items()): - if fn == docname: - del self.citations[key] - for version, changes in self.versionchanges.items(): - new = [change for change in changes if change[1] != docname] - changes[:] = new - - for domain in self.domains.values(): - domain.clear_doc(docname) - - def merge_info_from(self, docnames, other, app): - """Merge global information gathered about *docnames* while reading them - from the *other* environment. - - This possibly comes from a parallel build process. - """ - docnames = set(docnames) - for docname in docnames: - self.all_docs[docname] = other.all_docs[docname] - if docname in other.reread_always: - self.reread_always.add(docname) - self.metadata[docname] = other.metadata[docname] - if docname in other.dependencies: - self.dependencies[docname] = other.dependencies[docname] - self.titles[docname] = other.titles[docname] - self.longtitles[docname] = other.longtitles[docname] - self.tocs[docname] = other.tocs[docname] - self.toc_num_entries[docname] = other.toc_num_entries[docname] - # toc_secnumbers and toc_fignumbers are not assigned during read - if docname in other.toctree_includes: - self.toctree_includes[docname] = other.toctree_includes[docname] - self.indexentries[docname] = other.indexentries[docname] - if docname in other.glob_toctrees: - self.glob_toctrees.add(docname) - if docname in other.numbered_toctrees: - self.numbered_toctrees.add(docname) - - self.images.merge_other(docnames, other.images) - self.dlfiles.merge_other(docnames, other.dlfiles) - - for subfn, fnset in other.files_to_rebuild.items(): - self.files_to_rebuild.setdefault(subfn, set()).update(fnset & docnames) - for key, data in other.citations.items(): - # XXX duplicates? - if data[0] in docnames: - self.citations[key] = data - for version, changes in other.versionchanges.items(): - self.versionchanges.setdefault(version, []).extend( - change for change in changes if change[1] in docnames) - - for domainname, domain in self.domains.items(): - domain.merge_domaindata(docnames, other.domaindata[domainname]) - app.emit('env-merge-info', self, docnames, other) - - def doc2path(self, docname, base=True, suffix=None): - """Return the filename for the document name. - - If *base* is True, return absolute path under self.srcdir. - If *base* is None, return relative path to self.srcdir. - If *base* is a path string, return absolute path under that. - If *suffix* is not None, add it instead of config.source_suffix. - """ - docname = docname.replace(SEP, path.sep) - if suffix is None: - for candidate_suffix in self.config.source_suffix: - if path.isfile(path.join(self.srcdir, docname) + - candidate_suffix): - suffix = candidate_suffix - break - else: - # document does not exist - suffix = self.config.source_suffix[0] - if base is True: - return path.join(self.srcdir, docname) + suffix - elif base is None: - return docname + suffix - else: - return path.join(base, docname) + suffix - - def relfn2path(self, filename, docname=None): - """Return paths to a file referenced from a document, relative to - documentation root and absolute. - - In the input "filename", absolute filenames are taken as relative to the - source dir, while relative filenames are relative to the dir of the - containing document. - """ - if filename.startswith('/') or filename.startswith(os.sep): - rel_fn = filename[1:] - else: - docdir = path.dirname(self.doc2path(docname or self.docname, - base=None)) - rel_fn = path.join(docdir, filename) - try: - # the path.abspath() might seem redundant, but otherwise artifacts - # such as ".." will remain in the path - return rel_fn, path.abspath(path.join(self.srcdir, rel_fn)) - except UnicodeDecodeError: - # the source directory is a bytestring with non-ASCII characters; - # let's try to encode the rel_fn in the file system encoding - enc_rel_fn = rel_fn.encode(sys.getfilesystemencoding()) - return rel_fn, path.abspath(path.join(self.srcdir, enc_rel_fn)) - - def find_files(self, config): - """Find all source files in the source dir and put them in - self.found_docs. - """ - matchers = compile_matchers( - config.exclude_patterns[:] + - config.templates_path + - config.html_extra_path + - ['**/_sources', '.#*', '*.lproj/**'] - ) - self.found_docs = set(get_matching_docs( - self.srcdir, config.source_suffix, exclude_matchers=matchers)) - - # add catalog mo file dependency - for docname in self.found_docs: - catalog_files = find_catalog_files( - docname, - self.srcdir, - self.config.locale_dirs, - self.config.language, - self.config.gettext_compact) - for filename in catalog_files: - self.dependencies.setdefault(docname, set()).add(filename) - - def get_outdated_files(self, config_changed): - """Return (added, changed, removed) sets.""" - # clear all files no longer present - removed = set(self.all_docs) - self.found_docs - - added = set() - changed = set() - - if config_changed: - # config values affect e.g. substitutions - added = self.found_docs - else: - for docname in self.found_docs: - if docname not in self.all_docs: - added.add(docname) - continue - # if the doctree file is not there, rebuild - if not path.isfile(self.doc2path(docname, self.doctreedir, - '.doctree')): - changed.add(docname) - continue - # check the "reread always" list - if docname in self.reread_always: - changed.add(docname) - continue - # check the mtime of the document - mtime = self.all_docs[docname] - newmtime = path.getmtime(self.doc2path(docname)) - if newmtime > mtime: - changed.add(docname) - continue - # finally, check the mtime of dependencies - for dep in self.dependencies.get(docname, ()): - try: - # this will do the right thing when dep is absolute too - deppath = path.join(self.srcdir, dep) - if not path.isfile(deppath): - changed.add(docname) - break - depmtime = path.getmtime(deppath) - if depmtime > mtime: - changed.add(docname) - break - except EnvironmentError: - # give it another chance - changed.add(docname) - break - - return added, changed, removed - - def update(self, config, srcdir, doctreedir, app): - """(Re-)read all files new or changed since last update. - - Store all environment docnames in the canonical format (ie using SEP as - a separator in place of os.path.sep). - """ - config_changed = False - if self.config is None: - msg = '[new config] ' - config_changed = True - else: - # check if a config value was changed that affects how - # doctrees are read - for key, descr in iteritems(config.values): - if descr[1] != 'env': - continue - if self.config[key] != config[key]: - msg = '[config changed] ' - config_changed = True - break - else: - msg = '' - # this value is not covered by the above loop because it is handled - # specially by the config class - if self.config.extensions != config.extensions: - msg = '[extensions changed] ' - config_changed = True - # the source and doctree directories may have been relocated - self.srcdir = srcdir - self.doctreedir = doctreedir - self.find_files(config) - self.config = config - - # this cache also needs to be updated every time - self._nitpick_ignore = set(self.config.nitpick_ignore) - - app.info(bold('updating environment: '), nonl=1) - - added, changed, removed = self.get_outdated_files(config_changed) - - # allow user intervention as well - for docs in app.emit('env-get-outdated', self, added, changed, removed): - changed.update(set(docs) & self.found_docs) - - # if files were added or removed, all documents with globbed toctrees - # must be reread - if added or removed: - # ... but not those that already were removed - changed.update(self.glob_toctrees & self.found_docs) - - msg += '%s added, %s changed, %s removed' % (len(added), len(changed), - len(removed)) - app.info(msg) - - self.app = app - - # clear all files no longer present - for docname in removed: - app.emit('env-purge-doc', self, docname) - self.clear_doc(docname) - - # read all new and changed files - docnames = sorted(added | changed) - # allow changing and reordering the list of docs to read - app.emit('env-before-read-docs', self, docnames) - - # check if we should do parallel or serial read - par_ok = False - if parallel_available and len(docnames) > 5 and app.parallel > 1: - par_ok = True - for extname, md in app._extension_metadata.items(): - ext_ok = md.get('parallel_read_safe') - if ext_ok: - continue - if ext_ok is None: - app.warn('the %s extension does not declare if it ' - 'is safe for parallel reading, assuming it ' - 'isn\'t - please ask the extension author to ' - 'check and make it explicit' % extname) - app.warn('doing serial read') - else: - app.warn('the %s extension is not safe for parallel ' - 'reading, doing serial read' % extname) - par_ok = False - break - if par_ok: - self._read_parallel(docnames, app, nproc=app.parallel) - else: - self._read_serial(docnames, app) - - if config.master_doc not in self.all_docs: - self.warn(None, 'master file %s not found' % - self.doc2path(config.master_doc)) - - self.app = None - - for retval in app.emit('env-updated', self): - if retval is not None: - docnames.extend(retval) - - return sorted(docnames) - - def _read_serial(self, docnames, app): - for docname in app.status_iterator(docnames, 'reading sources... ', - purple, len(docnames)): - # remove all inventory entries for that file - app.emit('env-purge-doc', self, docname) - self.clear_doc(docname) - self.read_doc(docname, app) - - def _read_parallel(self, docnames, app, nproc): - # clear all outdated docs at once - for docname in docnames: - app.emit('env-purge-doc', self, docname) - self.clear_doc(docname) - - def read_process(docs): - self.app = app - self.warnings = [] - self.set_warnfunc(lambda *args: self.warnings.append(args)) - for docname in docs: - self.read_doc(docname, app) - # allow pickling self to send it back - self.set_warnfunc(None) - del self.app - del self.domains - del self.config.values - del self.config - return self - - def merge(docs, otherenv): - warnings.extend(otherenv.warnings) - self.merge_info_from(docs, otherenv, app) - - tasks = ParallelTasks(nproc) - chunks = make_chunks(docnames, nproc) - - warnings = [] - for chunk in app.status_iterator( - chunks, 'reading sources... ', purple, len(chunks)): - tasks.add_task(read_process, chunk, merge) - - # make sure all threads have finished - app.info(bold('waiting for workers...')) - tasks.join() - - for warning in warnings: - self._warnfunc(*warning) - - def check_dependents(self, already): - to_rewrite = self.assign_section_numbers() + self.assign_figure_numbers() - for docname in set(to_rewrite): - if docname not in already: - yield docname - - # --------- SINGLE FILE READING -------------------------------------------- - - def warn_and_replace(self, error): - """Custom decoding error handler that warns and replaces.""" - linestart = error.object.rfind(b'\n', 0, error.start) - lineend = error.object.find(b'\n', error.start) - if lineend == -1: - lineend = len(error.object) - lineno = error.object.count(b'\n', 0, error.start) + 1 - self.warn(self.docname, 'undecodable source characters, ' - 'replacing with "?": %r' % - (error.object[linestart+1:error.start] + b'>>>' + - error.object[error.start:error.end] + b'<<<' + - error.object[error.end:lineend]), lineno) - return (u'?', error.end) - - def lookup_domain_element(self, type, name): - """Lookup a markup element (directive or role), given its name which can - be a full name (with domain). - """ - name = name.lower() - # explicit domain given? - if ':' in name: - domain_name, name = name.split(':', 1) - if domain_name in self.domains: - domain = self.domains[domain_name] - element = getattr(domain, type)(name) - if element is not None: - return element, [] - # else look in the default domain - else: - def_domain = self.temp_data.get('default_domain') - if def_domain is not None: - element = getattr(def_domain, type)(name) - if element is not None: - return element, [] - # always look in the std domain - element = getattr(self.domains['std'], type)(name) - if element is not None: - return element, [] - raise ElementLookupError - - def patch_lookup_functions(self): - """Monkey-patch directive and role dispatch, so that domain-specific - markup takes precedence. - """ - def directive(name, lang_module, document): - try: - return self.lookup_domain_element('directive', name) - except ElementLookupError: - return orig_directive_function(name, lang_module, document) - - def role(name, lang_module, lineno, reporter): - try: - return self.lookup_domain_element('role', name) - except ElementLookupError: - return orig_role_function(name, lang_module, lineno, reporter) - - directives.directive = directive - roles.role = role - - def read_doc(self, docname, app=None): - """Parse a file and add/update inventory entries for the doctree.""" - - self.temp_data['docname'] = docname - # defaults to the global default, but can be re-set in a document - self.temp_data['default_domain'] = \ - self.domains.get(self.config.primary_domain) - - self.settings['input_encoding'] = self.config.source_encoding - self.settings['trim_footnote_reference_space'] = \ - self.config.trim_footnote_reference_space - self.settings['gettext_compact'] = self.config.gettext_compact - - self.patch_lookup_functions() - - docutilsconf = path.join(self.srcdir, 'docutils.conf') - # read docutils.conf from source dir, not from current dir - OptionParser.standard_config_files[1] = docutilsconf - if path.isfile(docutilsconf): - self.note_dependency(docutilsconf) - - if self.config.default_role: - role_fn, messages = roles.role(self.config.default_role, english, - 0, dummy_reporter) - if role_fn: - roles._roles[''] = role_fn - else: - self.warn(docname, 'default role %s not found' % - self.config.default_role) - - codecs.register_error('sphinx', self.warn_and_replace) - - # publish manually - reader = SphinxStandaloneReader(parsers=self.config.source_parsers) - pub = Publisher(reader=reader, - writer=SphinxDummyWriter(), - destination_class=NullOutput) - pub.set_components(None, 'restructuredtext', None) - pub.process_programmatic_settings(None, self.settings, None) - src_path = self.doc2path(docname) - source = SphinxFileInput(app, self, source=None, source_path=src_path, - encoding=self.config.source_encoding) - pub.source = source - pub.settings._source = src_path - pub.set_destination(None, None) - pub.publish() - doctree = pub.document - - # post-processing - self.filter_messages(doctree) - self.process_dependencies(docname, doctree) - self.process_images(docname, doctree) - self.process_downloads(docname, doctree) - self.process_metadata(docname, doctree) - self.process_refonly_bullet_lists(docname, doctree) - self.create_title_from(docname, doctree) - self.note_indexentries_from(docname, doctree) - self.note_citations_from(docname, doctree) - self.build_toc_from(docname, doctree) - for domain in itervalues(self.domains): - domain.process_doc(self, docname, doctree) - - # allow extension-specific post-processing - if app: - app.emit('doctree-read', doctree) - - # store time of reading, for outdated files detection - # (Some filesystems have coarse timestamp resolution; - # therefore time.time() can be older than filesystem's timestamp. - # For example, FAT32 has 2sec timestamp resolution.) - self.all_docs[docname] = max( - time.time(), path.getmtime(self.doc2path(docname))) - - if self.versioning_condition: - old_doctree = None - if self.versioning_compare: - # get old doctree - try: - f = open(self.doc2path(docname, - self.doctreedir, '.doctree'), 'rb') - try: - old_doctree = pickle.load(f) - finally: - f.close() - except EnvironmentError: - pass - - # add uids for versioning - if not self.versioning_compare or old_doctree is None: - list(add_uids(doctree, self.versioning_condition)) - else: - list(merge_doctrees( - old_doctree, doctree, self.versioning_condition)) - - # make it picklable - doctree.reporter = None - doctree.transformer = None - doctree.settings.warning_stream = None - doctree.settings.env = None - doctree.settings.record_dependencies = None - for metanode in doctree.traverse(MetaBody.meta): - # docutils' meta nodes aren't picklable because the class is nested - metanode.__class__ = addnodes.meta - - # cleanup - self.temp_data.clear() - self.ref_context.clear() - roles._roles.pop('', None) # if a document has set a local default role - - # save the parsed doctree - doctree_filename = self.doc2path(docname, self.doctreedir, - '.doctree') - dirname = path.dirname(doctree_filename) - if not path.isdir(dirname): - os.makedirs(dirname) - f = open(doctree_filename, 'wb') - try: - pickle.dump(doctree, f, pickle.HIGHEST_PROTOCOL) - finally: - f.close() - - # utilities to use while reading a document - - @property - def docname(self): - """Returns the docname of the document currently being parsed.""" - return self.temp_data['docname'] - - @property - def currmodule(self): - """Backwards compatible alias. Will be removed.""" - self.warn(self.docname, 'env.currmodule is being referenced by an ' - 'extension; this API will be removed in the future') - return self.ref_context.get('py:module') - - @property - def currclass(self): - """Backwards compatible alias. Will be removed.""" - self.warn(self.docname, 'env.currclass is being referenced by an ' - 'extension; this API will be removed in the future') - return self.ref_context.get('py:class') - - def new_serialno(self, category=''): - """Return a serial number, e.g. for index entry targets. - - The number is guaranteed to be unique in the current document. - """ - key = category + 'serialno' - cur = self.temp_data.get(key, 0) - self.temp_data[key] = cur + 1 - return cur - - def note_dependency(self, filename): - """Add *filename* as a dependency of the current document. - - This means that the document will be rebuilt if this file changes. - - *filename* should be absolute or relative to the source directory. - """ - self.dependencies.setdefault(self.docname, set()).add(filename) - - def note_reread(self): - """Add the current document to the list of documents that will - automatically be re-read at the next build. - """ - self.reread_always.add(self.docname) - - def note_versionchange(self, type, version, node, lineno): - self.versionchanges.setdefault(version, []).append( - (type, self.temp_data['docname'], lineno, - self.ref_context.get('py:module'), - self.temp_data.get('object'), node.astext())) - - # post-processing of read doctrees - - def filter_messages(self, doctree): - """Filter system messages from a doctree.""" - filterlevel = self.config.keep_warnings and 2 or 5 - for node in doctree.traverse(nodes.system_message): - if node['level'] < filterlevel: - self.app.debug('%s [filtered system message]', node.astext()) - node.parent.remove(node) - - def process_dependencies(self, docname, doctree): - """Process docutils-generated dependency info.""" - cwd = getcwd() - frompath = path.join(path.normpath(self.srcdir), 'dummy') - deps = doctree.settings.record_dependencies - if not deps: - return - for dep in deps.list: - # the dependency path is relative to the working dir, so get - # one relative to the srcdir - if isinstance(dep, bytes): - dep = dep.decode(fs_encoding) - relpath = relative_path(frompath, - path.normpath(path.join(cwd, dep))) - self.dependencies.setdefault(docname, set()).add(relpath) - - def process_downloads(self, docname, doctree): - """Process downloadable file paths. """ - for node in doctree.traverse(addnodes.download_reference): - targetname = node['reftarget'] - rel_filename, filename = self.relfn2path(targetname, docname) - self.dependencies.setdefault(docname, set()).add(rel_filename) - if not os.access(filename, os.R_OK): - self.warn_node('download file not readable: %s' % filename, - node) - continue - uniquename = self.dlfiles.add_file(docname, filename) - node['filename'] = uniquename - - def process_images(self, docname, doctree): - """Process and rewrite image URIs.""" - for node in doctree.traverse(nodes.image): - # Map the mimetype to the corresponding image. The writer may - # choose the best image from these candidates. The special key * is - # set if there is only single candidate to be used by a writer. - # The special key ? is set for nonlocal URIs. - node['candidates'] = candidates = {} - imguri = node['uri'] - if imguri.find('://') != -1: - self.warn_node('nonlocal image URI found: %s' % imguri, node) - candidates['?'] = imguri - continue - rel_imgpath, full_imgpath = self.relfn2path(imguri, docname) - # set imgpath as default URI - node['uri'] = rel_imgpath - if rel_imgpath.endswith(os.extsep + '*'): - for filename in glob(full_imgpath): - new_imgpath = relative_path(path.join(self.srcdir, 'dummy'), - filename) - if filename.lower().endswith('.pdf'): - candidates['application/pdf'] = new_imgpath - elif filename.lower().endswith('.svg'): - candidates['image/svg+xml'] = new_imgpath - else: - try: - f = open(filename, 'rb') - try: - imgtype = imghdr.what(f) - finally: - f.close() - except (OSError, IOError) as err: - self.warn_node('image file %s not readable: %s' % - (filename, err), node) - if imgtype: - candidates['image/' + imgtype] = new_imgpath - else: - candidates['*'] = rel_imgpath - # map image paths to unique image names (so that they can be put - # into a single directory) - for imgpath in itervalues(candidates): - self.dependencies.setdefault(docname, set()).add(imgpath) - if not os.access(path.join(self.srcdir, imgpath), os.R_OK): - self.warn_node('image file not readable: %s' % imgpath, - node) - continue - self.images.add_file(docname, imgpath) - - def process_metadata(self, docname, doctree): - """Process the docinfo part of the doctree as metadata. - - Keep processing minimal -- just return what docutils says. - """ - self.metadata[docname] = md = {} - try: - docinfo = doctree[0] - except IndexError: - # probably an empty document - return - if docinfo.__class__ is not nodes.docinfo: - # nothing to see here - return - for node in docinfo: - # nodes are multiply inherited... - if isinstance(node, nodes.authors): - md['authors'] = [author.astext() for author in node] - elif isinstance(node, nodes.TextElement): # e.g. author - md[node.__class__.__name__] = node.astext() - else: - name, body = node - md[name.astext()] = body.astext() - for name, value in md.items(): - if name in ('tocdepth',): - try: - value = int(value) - except ValueError: - value = 0 - md[name] = value - - del doctree[0] - - def process_refonly_bullet_lists(self, docname, doctree): - """Change refonly bullet lists to use compact_paragraphs. - - Specifically implemented for 'Indices and Tables' section, which looks - odd when html_compact_lists is false. - """ - if self.config.html_compact_lists: - return - - class RefOnlyListChecker(nodes.GenericNodeVisitor): - """Raise `nodes.NodeFound` if non-simple list item is encountered. - - Here 'simple' means a list item containing only a paragraph with a - single reference in it. - """ - - def default_visit(self, node): - raise nodes.NodeFound - - def visit_bullet_list(self, node): - pass - - def visit_list_item(self, node): - children = [] - for child in node.children: - if not isinstance(child, nodes.Invisible): - children.append(child) - if len(children) != 1: - raise nodes.NodeFound - if not isinstance(children[0], nodes.paragraph): - raise nodes.NodeFound - para = children[0] - if len(para) != 1: - raise nodes.NodeFound - if not isinstance(para[0], addnodes.pending_xref): - raise nodes.NodeFound - raise nodes.SkipChildren - - def invisible_visit(self, node): - """Invisible nodes should be ignored.""" - pass - - def check_refonly_list(node): - """Check for list with only references in it.""" - visitor = RefOnlyListChecker(doctree) - try: - node.walk(visitor) - except nodes.NodeFound: - return False - else: - return True - - for node in doctree.traverse(nodes.bullet_list): - if check_refonly_list(node): - for item in node.traverse(nodes.list_item): - para = item[0] - ref = para[0] - compact_para = addnodes.compact_paragraph() - compact_para += ref - item.replace(para, compact_para) - - def create_title_from(self, docname, document): - """Add a title node to the document (just copy the first section title), - and store that title in the environment. - """ - titlenode = nodes.title() - longtitlenode = titlenode - # explicit title set with title directive; use this only for - # the <title> tag in HTML output - if 'title' in document: - longtitlenode = nodes.title() - longtitlenode += nodes.Text(document['title']) - # look for first section title and use that as the title - for node in document.traverse(nodes.section): - visitor = SphinxContentsFilter(document) - node[0].walkabout(visitor) - titlenode += visitor.get_entry_text() - break - else: - # document has no title - titlenode += nodes.Text('<no title>') - self.titles[docname] = titlenode - self.longtitles[docname] = longtitlenode - - def note_indexentries_from(self, docname, document): - entries = self.indexentries[docname] = [] - for node in document.traverse(addnodes.index): - entries.extend(node['entries']) - - def note_citations_from(self, docname, document): - for node in document.traverse(nodes.citation): - label = node[0].astext() - if label in self.citations: - self.warn_node('duplicate citation %s, ' % label + - 'other instance in %s' % self.doc2path( - self.citations[label][0]), node) - self.citations[label] = (docname, node['ids'][0]) - - def note_toctree(self, docname, toctreenode): - """Note a TOC tree directive in a document and gather information about - file relations from it. - """ - if toctreenode['glob']: - self.glob_toctrees.add(docname) - if toctreenode.get('numbered'): - self.numbered_toctrees.add(docname) - includefiles = toctreenode['includefiles'] - for includefile in includefiles: - # note that if the included file is rebuilt, this one must be - # too (since the TOC of the included file could have changed) - self.files_to_rebuild.setdefault(includefile, set()).add(docname) - self.toctree_includes.setdefault(docname, []).extend(includefiles) - - def build_toc_from(self, docname, document): - """Build a TOC from the doctree and store it in the inventory.""" - numentries = [0] # nonlocal again... - - def traverse_in_section(node, cls): - """Like traverse(), but stay within the same section.""" - result = [] - if isinstance(node, cls): - result.append(node) - for child in node.children: - if isinstance(child, nodes.section): - continue - result.extend(traverse_in_section(child, cls)) - return result - - def build_toc(node, depth=1): - entries = [] - for sectionnode in node: - # find all toctree nodes in this section and add them - # to the toc (just copying the toctree node which is then - # resolved in self.get_and_resolve_doctree) - if isinstance(sectionnode, addnodes.only): - onlynode = addnodes.only(expr=sectionnode['expr']) - blist = build_toc(sectionnode, depth) - if blist: - onlynode += blist.children - entries.append(onlynode) - continue - if not isinstance(sectionnode, nodes.section): - for toctreenode in traverse_in_section(sectionnode, - addnodes.toctree): - item = toctreenode.copy() - entries.append(item) - # important: do the inventory stuff - self.note_toctree(docname, toctreenode) - continue - title = sectionnode[0] - # copy the contents of the section title, but without references - # and unnecessary stuff - visitor = SphinxContentsFilter(document) - title.walkabout(visitor) - nodetext = visitor.get_entry_text() - if not numentries[0]: - # for the very first toc entry, don't add an anchor - # as it is the file's title anyway - anchorname = '' - else: - anchorname = '#' + sectionnode['ids'][0] - numentries[0] += 1 - # make these nodes: - # list_item -> compact_paragraph -> reference - reference = nodes.reference( - '', '', internal=True, refuri=docname, - anchorname=anchorname, *nodetext) - para = addnodes.compact_paragraph('', '', reference) - item = nodes.list_item('', para) - sub_item = build_toc(sectionnode, depth + 1) - item += sub_item - entries.append(item) - if entries: - return nodes.bullet_list('', *entries) - return [] - toc = build_toc(document) - if toc: - self.tocs[docname] = toc - else: - self.tocs[docname] = nodes.bullet_list('') - self.toc_num_entries[docname] = numentries[0] - - def get_toc_for(self, docname, builder): - """Return a TOC nodetree -- for use on the same page only!""" - tocdepth = self.metadata[docname].get('tocdepth', 0) - try: - toc = self.tocs[docname].deepcopy() - self._toctree_prune(toc, 2, tocdepth) - except KeyError: - # the document does not exist anymore: return a dummy node that - # renders to nothing - return nodes.paragraph() - self.process_only_nodes(toc, builder, docname) - for node in toc.traverse(nodes.reference): - node['refuri'] = node['anchorname'] or '#' - return toc - - def get_toctree_for(self, docname, builder, collapse, **kwds): - """Return the global TOC nodetree.""" - doctree = self.get_doctree(self.config.master_doc) - toctrees = [] - if 'includehidden' not in kwds: - kwds['includehidden'] = True - if 'maxdepth' not in kwds: - kwds['maxdepth'] = 0 - kwds['collapse'] = collapse - for toctreenode in doctree.traverse(addnodes.toctree): - toctree = self.resolve_toctree(docname, builder, toctreenode, - prune=True, **kwds) - if toctree: - toctrees.append(toctree) - if not toctrees: - return None - result = toctrees[0] - for toctree in toctrees[1:]: - result.extend(toctree.children) - return result - - def get_domain(self, domainname): - """Return the domain instance with the specified name. - - Raises an ExtensionError if the domain is not registered. - """ - try: - return self.domains[domainname] - except KeyError: - raise ExtensionError('Domain %r is not registered' % domainname) - - # --------- RESOLVING REFERENCES AND TOCTREES ------------------------------ - - def get_doctree(self, docname): - """Read the doctree for a file from the pickle and return it.""" - doctree_filename = self.doc2path(docname, self.doctreedir, '.doctree') - f = open(doctree_filename, 'rb') - try: - doctree = pickle.load(f) - finally: - f.close() - doctree.settings.env = self - doctree.reporter = Reporter(self.doc2path(docname), 2, 5, - stream=WarningStream(self._warnfunc)) - return doctree - - def get_and_resolve_doctree(self, docname, builder, doctree=None, - prune_toctrees=True, includehidden=False): - """Read the doctree from the pickle, resolve cross-references and - toctrees and return it. - """ - if doctree is None: - doctree = self.get_doctree(docname) - - # resolve all pending cross-references - self.resolve_references(doctree, docname, builder) - - # now, resolve all toctree nodes - for toctreenode in doctree.traverse(addnodes.toctree): - result = self.resolve_toctree(docname, builder, toctreenode, - prune=prune_toctrees, - includehidden=includehidden) - if result is None: - toctreenode.replace_self([]) - else: - toctreenode.replace_self(result) - - return doctree - - def _toctree_prune(self, node, depth, maxdepth, collapse=False): - """Utility: Cut a TOC at a specified depth.""" - for subnode in node.children[:]: - if isinstance(subnode, (addnodes.compact_paragraph, - nodes.list_item)): - # for <p> and <li>, just recurse - self._toctree_prune(subnode, depth, maxdepth, collapse) - elif isinstance(subnode, nodes.bullet_list): - # for <ul>, determine if the depth is too large or if the - # entry is to be collapsed - if maxdepth > 0 and depth > maxdepth: - subnode.parent.replace(subnode, []) - else: - # cull sub-entries whose parents aren't 'current' - if (collapse and depth > 1 and - 'iscurrent' not in subnode.parent): - subnode.parent.remove(subnode) - else: - # recurse on visible children - self._toctree_prune(subnode, depth+1, maxdepth, collapse) - - def get_toctree_ancestors(self, docname): - parent = {} - for p, children in iteritems(self.toctree_includes): - for child in children: - parent[child] = p - ancestors = [] - d = docname - while d in parent and d not in ancestors: - ancestors.append(d) - d = parent[d] - return ancestors - - def resolve_toctree(self, docname, builder, toctree, prune=True, maxdepth=0, - titles_only=False, collapse=False, includehidden=False): - """Resolve a *toctree* node into individual bullet lists with titles - as items, returning None (if no containing titles are found) or - a new node. - - If *prune* is True, the tree is pruned to *maxdepth*, or if that is 0, - to the value of the *maxdepth* option on the *toctree* node. - If *titles_only* is True, only toplevel document titles will be in the - resulting tree. - If *collapse* is True, all branches not containing docname will - be collapsed. - """ - if toctree.get('hidden', False) and not includehidden: - return None - - # For reading the following two helper function, it is useful to keep - # in mind the node structure of a toctree (using HTML-like node names - # for brevity): - # - # <ul> - # <li> - # <p><a></p> - # <p><a></p> - # ... - # <ul> - # ... - # </ul> - # </li> - # </ul> - # - # The transformation is made in two passes in order to avoid - # interactions between marking and pruning the tree (see bug #1046). - - toctree_ancestors = self.get_toctree_ancestors(docname) - - def _toctree_add_classes(node, depth): - """Add 'toctree-l%d' and 'current' classes to the toctree.""" - for subnode in node.children: - if isinstance(subnode, (addnodes.compact_paragraph, - nodes.list_item)): - # for <p> and <li>, indicate the depth level and recurse - subnode['classes'].append('toctree-l%d' % (depth-1)) - _toctree_add_classes(subnode, depth) - elif isinstance(subnode, nodes.bullet_list): - # for <ul>, just recurse - _toctree_add_classes(subnode, depth+1) - elif isinstance(subnode, nodes.reference): - # for <a>, identify which entries point to the current - # document and therefore may not be collapsed - if subnode['refuri'] == docname: - if not subnode['anchorname']: - # give the whole branch a 'current' class - # (useful for styling it differently) - branchnode = subnode - while branchnode: - branchnode['classes'].append('current') - branchnode = branchnode.parent - # mark the list_item as "on current page" - if subnode.parent.parent.get('iscurrent'): - # but only if it's not already done - return - while subnode: - subnode['iscurrent'] = True - subnode = subnode.parent - - def _entries_from_toctree(toctreenode, parents, - separate=False, subtree=False): - """Return TOC entries for a toctree node.""" - refs = [(e[0], e[1]) for e in toctreenode['entries']] - entries = [] - for (title, ref) in refs: - try: - refdoc = None - if url_re.match(ref): - if title is None: - title = ref - reference = nodes.reference('', '', internal=False, - refuri=ref, anchorname='', - *[nodes.Text(title)]) - para = addnodes.compact_paragraph('', '', reference) - item = nodes.list_item('', para) - toc = nodes.bullet_list('', item) - elif ref == 'self': - # 'self' refers to the document from which this - # toctree originates - ref = toctreenode['parent'] - if not title: - title = clean_astext(self.titles[ref]) - reference = nodes.reference('', '', internal=True, - refuri=ref, - anchorname='', - *[nodes.Text(title)]) - para = addnodes.compact_paragraph('', '', reference) - item = nodes.list_item('', para) - # don't show subitems - toc = nodes.bullet_list('', item) - else: - if ref in parents: - self.warn(ref, 'circular toctree references ' - 'detected, ignoring: %s <- %s' % - (ref, ' <- '.join(parents))) - continue - refdoc = ref - toc = self.tocs[ref].deepcopy() - maxdepth = self.metadata[ref].get('tocdepth', 0) - if ref not in toctree_ancestors or (prune and maxdepth > 0): - self._toctree_prune(toc, 2, maxdepth, collapse) - self.process_only_nodes(toc, builder, ref) - if title and toc.children and len(toc.children) == 1: - child = toc.children[0] - for refnode in child.traverse(nodes.reference): - if refnode['refuri'] == ref and \ - not refnode['anchorname']: - refnode.children = [nodes.Text(title)] - if not toc.children: - # empty toc means: no titles will show up in the toctree - self.warn_node( - 'toctree contains reference to document %r that ' - 'doesn\'t have a title: no link will be generated' - % ref, toctreenode) - except KeyError: - # this is raised if the included file does not exist - self.warn_node( - 'toctree contains reference to nonexisting document %r' - % ref, toctreenode) - else: - # if titles_only is given, only keep the main title and - # sub-toctrees - if titles_only: - # delete everything but the toplevel title(s) - # and toctrees - for toplevel in toc: - # nodes with length 1 don't have any children anyway - if len(toplevel) > 1: - subtrees = toplevel.traverse(addnodes.toctree) - toplevel[1][:] = subtrees - # resolve all sub-toctrees - for subtocnode in toc.traverse(addnodes.toctree): - if not (subtocnode.get('hidden', False) and - not includehidden): - i = subtocnode.parent.index(subtocnode) + 1 - for item in _entries_from_toctree( - subtocnode, [refdoc] + parents, - subtree=True): - subtocnode.parent.insert(i, item) - i += 1 - subtocnode.parent.remove(subtocnode) - if separate: - entries.append(toc) - else: - entries.extend(toc.children) - if not subtree and not separate: - ret = nodes.bullet_list() - ret += entries - return [ret] - return entries - - maxdepth = maxdepth or toctree.get('maxdepth', -1) - if not titles_only and toctree.get('titlesonly', False): - titles_only = True - if not includehidden and toctree.get('includehidden', False): - includehidden = True - - # NOTE: previously, this was separate=True, but that leads to artificial - # separation when two or more toctree entries form a logical unit, so - # separating mode is no longer used -- it's kept here for history's sake - tocentries = _entries_from_toctree(toctree, [], separate=False) - if not tocentries: - return None - - newnode = addnodes.compact_paragraph('', '') - caption = toctree.attributes.get('caption') - if caption: - newnode += nodes.caption(caption, '', *[nodes.Text(caption)]) - newnode.extend(tocentries) - newnode['toctree'] = True - - # prune the tree to maxdepth, also set toc depth and current classes - _toctree_add_classes(newnode, 1) - self._toctree_prune(newnode, 1, prune and maxdepth or 0, collapse) - - # set the target paths in the toctrees (they are not known at TOC - # generation time) - for refnode in newnode.traverse(nodes.reference): - if not url_re.match(refnode['refuri']): - refnode['refuri'] = builder.get_relative_uri( - docname, refnode['refuri']) + refnode['anchorname'] - return newnode - - def resolve_references(self, doctree, fromdocname, builder): - for node in doctree.traverse(addnodes.pending_xref): - contnode = node[0].deepcopy() - newnode = None - - typ = node['reftype'] - target = node['reftarget'] - refdoc = node.get('refdoc', fromdocname) - domain = None - - try: - if 'refdomain' in node and node['refdomain']: - # let the domain try to resolve the reference - try: - domain = self.domains[node['refdomain']] - except KeyError: - raise NoUri - newnode = domain.resolve_xref(self, refdoc, builder, - typ, target, node, contnode) - # really hardwired reference types - elif typ == 'any': - newnode = self._resolve_any_reference(builder, node, contnode) - elif typ == 'doc': - newnode = self._resolve_doc_reference(builder, node, contnode) - elif typ == 'citation': - newnode = self._resolve_citation(builder, refdoc, node, contnode) - # no new node found? try the missing-reference event - if newnode is None: - newnode = builder.app.emit_firstresult( - 'missing-reference', self, node, contnode) - # still not found? warn if node wishes to be warned about or - # we are in nit-picky mode - if newnode is None: - self._warn_missing_reference(refdoc, typ, target, node, domain) - except NoUri: - newnode = contnode - node.replace_self(newnode or contnode) - - # remove only-nodes that do not belong to our builder - self.process_only_nodes(doctree, builder, fromdocname) - - # allow custom references to be resolved - builder.app.emit('doctree-resolved', doctree, fromdocname) - - def _warn_missing_reference(self, refdoc, typ, target, node, domain): - warn = node.get('refwarn') - if self.config.nitpicky: - warn = True - if self._nitpick_ignore: - dtype = domain and '%s:%s' % (domain.name, typ) or typ - if (dtype, target) in self._nitpick_ignore: - warn = False - # for "std" types also try without domain name - if (not domain or domain.name == 'std') and \ - (typ, target) in self._nitpick_ignore: - warn = False - if not warn: - return - if domain and typ in domain.dangling_warnings: - msg = domain.dangling_warnings[typ] - elif typ == 'doc': - msg = 'unknown document: %(target)s' - elif typ == 'citation': - msg = 'citation not found: %(target)s' - elif node.get('refdomain', 'std') not in ('', 'std'): - msg = '%s:%s reference target not found: %%(target)s' % \ - (node['refdomain'], typ) - else: - msg = '%r reference target not found: %%(target)s' % typ - self.warn_node(msg % {'target': target}, node) - - def _resolve_doc_reference(self, builder, node, contnode): - # directly reference to document by source name; - # can be absolute or relative - docname = docname_join(node['refdoc'], node['reftarget']) - if docname in self.all_docs: - if node['refexplicit']: - # reference with explicit title - caption = node.astext() - else: - caption = clean_astext(self.titles[docname]) - innernode = nodes.inline(caption, caption) - innernode['classes'].append('doc') - newnode = nodes.reference('', '', internal=True) - newnode['refuri'] = builder.get_relative_uri(node['refdoc'], docname) - newnode.append(innernode) - return newnode - - def _resolve_citation(self, builder, fromdocname, node, contnode): - docname, labelid = self.citations.get(node['reftarget'], ('', '')) - if docname: - try: - newnode = make_refnode(builder, fromdocname, - docname, labelid, contnode) - return newnode - except NoUri: - # remove the ids we added in the CitationReferences - # transform since they can't be transfered to - # the contnode (if it's a Text node) - if not isinstance(contnode, nodes.Element): - del node['ids'][:] - raise - elif 'ids' in node: - # remove ids attribute that annotated at - # transforms.CitationReference.apply. - del node['ids'][:] - - def _resolve_any_reference(self, builder, node, contnode): - """Resolve reference generated by the "any" role.""" - refdoc = node['refdoc'] - target = node['reftarget'] - results = [] - # first, try resolving as :doc: - doc_ref = self._resolve_doc_reference(builder, node, contnode) - if doc_ref: - results.append(('doc', doc_ref)) - # next, do the standard domain (makes this a priority) - results.extend(self.domains['std'].resolve_any_xref( - self, refdoc, builder, target, node, contnode)) - for domain in self.domains.values(): - if domain.name == 'std': - continue # we did this one already - try: - results.extend(domain.resolve_any_xref(self, refdoc, builder, - target, node, contnode)) - except NotImplementedError: - # the domain doesn't yet support the new interface - # we have to manually collect possible references (SLOW) - for role in domain.roles: - res = domain.resolve_xref(self, refdoc, builder, role, target, - node, contnode) - if res: - results.append(('%s:%s' % (domain.name, role), res)) - # now, see how many matches we got... - if not results: - return None - if len(results) > 1: - nice_results = ' or '.join(':%s:' % r[0] for r in results) - self.warn_node('more than one target found for \'any\' cross-' - 'reference %r: could be %s' % (target, nice_results), - node) - res_role, newnode = results[0] - # Override "any" class with the actual role type to get the styling - # approximately correct. - res_domain = res_role.split(':')[0] - if newnode and newnode[0].get('classes'): - newnode[0]['classes'].append(res_domain) - newnode[0]['classes'].append(res_role.replace(':', '-')) - return newnode - - def process_only_nodes(self, doctree, builder, fromdocname=None): - # A comment on the comment() nodes being inserted: replacing by [] would - # result in a "Losing ids" exception if there is a target node before - # the only node, so we make sure docutils can transfer the id to - # something, even if it's just a comment and will lose the id anyway... - for node in doctree.traverse(addnodes.only): - try: - ret = builder.tags.eval_condition(node['expr']) - except Exception as err: - self.warn_node('exception while evaluating only ' - 'directive expression: %s' % err, node) - node.replace_self(node.children or nodes.comment()) - else: - if ret: - node.replace_self(node.children or nodes.comment()) - else: - node.replace_self(nodes.comment()) - - def assign_section_numbers(self): - """Assign a section number to each heading under a numbered toctree.""" - # a list of all docnames whose section numbers changed - rewrite_needed = [] - - assigned = set() - old_secnumbers = self.toc_secnumbers - self.toc_secnumbers = {} - - def _walk_toc(node, secnums, depth, titlenode=None): - # titlenode is the title of the document, it will get assigned a - # secnumber too, so that it shows up in next/prev/parent rellinks - for subnode in node.children: - if isinstance(subnode, nodes.bullet_list): - numstack.append(0) - _walk_toc(subnode, secnums, depth-1, titlenode) - numstack.pop() - titlenode = None - elif isinstance(subnode, nodes.list_item): - _walk_toc(subnode, secnums, depth, titlenode) - titlenode = None - elif isinstance(subnode, addnodes.only): - # at this stage we don't know yet which sections are going - # to be included; just include all of them, even if it leads - # to gaps in the numbering - _walk_toc(subnode, secnums, depth, titlenode) - titlenode = None - elif isinstance(subnode, addnodes.compact_paragraph): - numstack[-1] += 1 - if depth > 0: - number = tuple(numstack) - else: - number = None - secnums[subnode[0]['anchorname']] = \ - subnode[0]['secnumber'] = number - if titlenode: - titlenode['secnumber'] = number - titlenode = None - elif isinstance(subnode, addnodes.toctree): - _walk_toctree(subnode, depth) - - def _walk_toctree(toctreenode, depth): - if depth == 0: - return - for (title, ref) in toctreenode['entries']: - if url_re.match(ref) or ref == 'self' or ref in assigned: - # don't mess with those - continue - if ref in self.tocs: - secnums = self.toc_secnumbers[ref] = {} - assigned.add(ref) - _walk_toc(self.tocs[ref], secnums, depth, - self.titles.get(ref)) - if secnums != old_secnumbers.get(ref): - rewrite_needed.append(ref) - - for docname in self.numbered_toctrees: - assigned.add(docname) - doctree = self.get_doctree(docname) - for toctreenode in doctree.traverse(addnodes.toctree): - depth = toctreenode.get('numbered', 0) - if depth: - # every numbered toctree gets new numbering - numstack = [0] - _walk_toctree(toctreenode, depth) - - return rewrite_needed - - def assign_figure_numbers(self): - """Assign a figure number to each figure under a numbered toctree.""" - - rewrite_needed = [] - - assigned = set() - old_fignumbers = self.toc_fignumbers - self.toc_fignumbers = {} - fignum_counter = {} - - def get_section_number(docname, section): - anchorname = '#' + section['ids'][0] - secnumbers = self.toc_secnumbers.get(docname, {}) - if anchorname in secnumbers: - secnum = secnumbers.get(anchorname) - else: - secnum = secnumbers.get('') - - return secnum or tuple() - - def get_next_fignumber(figtype, secnum): - counter = fignum_counter.setdefault(figtype, {}) - - secnum = secnum[:self.config.numfig_secnum_depth] - counter[secnum] = counter.get(secnum, 0) + 1 - return secnum + (counter[secnum],) - - def register_fignumber(docname, secnum, figtype, fignode): - self.toc_fignumbers.setdefault(docname, {}) - fignumbers = self.toc_fignumbers[docname].setdefault(figtype, {}) - figure_id = fignode['ids'][0] - - if (isinstance(fignode, nodes.image) and - isinstance(fignode.parent, nodes.figure) and - fignode.parent['ids']): - fignumbers[figure_id] = fignumbers[fignode.parent['ids'][0]] - else: - fignumbers[figure_id] = get_next_fignumber(figtype, secnum) - - def _walk_doctree(docname, doctree, secnum): - for subnode in doctree.children: - if isinstance(subnode, nodes.section): - next_secnum = get_section_number(docname, subnode) - if next_secnum: - _walk_doctree(docname, subnode, next_secnum) - else: - _walk_doctree(docname, subnode, secnum) - continue - elif isinstance(subnode, addnodes.toctree): - for title, subdocname in subnode['entries']: - if url_re.match(subdocname) or subdocname == 'self': - # don't mess with those - continue - - _walk_doc(subdocname, secnum) - - continue - - figtype = get_figtype(subnode) - if figtype and subnode['ids']: - register_fignumber(docname, secnum, figtype, subnode) - - _walk_doctree(docname, subnode, secnum) - - def _walk_doc(docname, secnum): - if docname not in assigned: - assigned.add(docname) - doctree = self.get_doctree(docname) - _walk_doctree(docname, doctree, secnum) - - if self.config.numfig: - _walk_doc(self.config.master_doc, tuple()) - for docname, fignums in iteritems(self.toc_fignumbers): - if fignums != old_fignumbers.get(docname): - rewrite_needed.append(docname) - - return rewrite_needed - - def create_index(self, builder, group_entries=True, - _fixre=re.compile(r'(.*) ([(][^()]*[)])')): - """Create the real index from the collected index entries.""" - new = {} - - def add_entry(word, subword, link=True, dic=new): - # Force the word to be unicode if it's a ASCII bytestring. - # This will solve problems with unicode normalization later. - # For instance the RFC role will add bytestrings at the moment - word = text_type(word) - entry = dic.get(word) - if not entry: - dic[word] = entry = [[], {}] - if subword: - add_entry(subword, '', link=link, dic=entry[1]) - elif link: - try: - uri = builder.get_relative_uri('genindex', fn) + '#' + tid - except NoUri: - pass - else: - # maintain links in sorted/deterministic order - bisect.insort(entry[0], (main, uri)) - - for fn, entries in iteritems(self.indexentries): - # new entry types must be listed in directives/other.py! - for type, value, tid, main in entries: - try: - if type == 'single': - try: - entry, subentry = split_into(2, 'single', value) - except ValueError: - entry, = split_into(1, 'single', value) - subentry = '' - add_entry(entry, subentry) - elif type == 'pair': - first, second = split_into(2, 'pair', value) - add_entry(first, second) - add_entry(second, first) - elif type == 'triple': - first, second, third = split_into(3, 'triple', value) - add_entry(first, second+' '+third) - add_entry(second, third+', '+first) - add_entry(third, first+' '+second) - elif type == 'see': - first, second = split_into(2, 'see', value) - add_entry(first, _('see %s') % second, link=False) - elif type == 'seealso': - first, second = split_into(2, 'see', value) - add_entry(first, _('see also %s') % second, link=False) - else: - self.warn(fn, 'unknown index entry type %r' % type) - except ValueError as err: - self.warn(fn, str(err)) - - # sort the index entries; put all symbols at the front, even those - # following the letters in ASCII, this is where the chr(127) comes from - def keyfunc(entry, lcletters=string.ascii_lowercase + '_'): - lckey = unicodedata.normalize('NFD', entry[0].lower()) - if lckey[0:1] in lcletters: - lckey = chr(127) + lckey - # ensure a determinstic order *within* letters by also sorting on - # the entry itself - return (lckey, entry[0]) - newlist = sorted(new.items(), key=keyfunc) - - if group_entries: - # fixup entries: transform - # func() (in module foo) - # func() (in module bar) - # into - # func() - # (in module foo) - # (in module bar) - oldkey = '' - oldsubitems = None - i = 0 - while i < len(newlist): - key, (targets, subitems) = newlist[i] - # cannot move if it has subitems; structure gets too complex - if not subitems: - m = _fixre.match(key) - if m: - if oldkey == m.group(1): - # prefixes match: add entry as subitem of the - # previous entry - oldsubitems.setdefault(m.group(2), [[], {}])[0].\ - extend(targets) - del newlist[i] - continue - oldkey = m.group(1) - else: - oldkey = key - oldsubitems = subitems - i += 1 - - # group the entries by letter - def keyfunc2(item, letters=string.ascii_uppercase + '_'): - # hack: mutating the subitems dicts to a list in the keyfunc - k, v = item - v[1] = sorted((si, se) for (si, (se, void)) in iteritems(v[1])) - # now calculate the key - letter = unicodedata.normalize('NFD', k[0])[0].upper() - if letter in letters: - return letter - else: - # get all other symbols under one heading - return _('Symbols') - return [(key_, list(group)) - for (key_, group) in groupby(newlist, keyfunc2)] - - def collect_relations(self): - relations = {} - getinc = self.toctree_includes.get - - def collect(parents, parents_set, docname, previous, next): - # circular relationship? - if docname in parents_set: - # we will warn about this in resolve_toctree() - return - includes = getinc(docname) - # previous - if not previous: - # if no previous sibling, go to parent - previous = parents[0][0] - else: - # else, go to previous sibling, or if it has children, to - # the last of its children, or if that has children, to the - # last of those, and so forth - while 1: - previncs = getinc(previous) - if previncs: - previous = previncs[-1] - else: - break - # next - if includes: - # if it has children, go to first of them - next = includes[0] - elif next: - # else, if next sibling, go to it - pass - else: - # else, go to the next sibling of the parent, if present, - # else the grandparent's sibling, if present, and so forth - for parname, parindex in parents: - parincs = getinc(parname) - if parincs and parindex + 1 < len(parincs): - next = parincs[parindex+1] - break - # else it will stay None - # same for children - if includes: - for subindex, args in enumerate(zip(includes, - [None] + includes, - includes[1:] + [None])): - collect([(docname, subindex)] + parents, - parents_set.union([docname]), *args) - relations[docname] = [parents[0][0], previous, next] - collect([(None, 0)], set(), self.config.master_doc, None, None) - return relations - - def check_consistency(self): - """Do consistency checks.""" - for docname in sorted(self.all_docs): - if docname not in self.files_to_rebuild: - if docname == self.config.master_doc: - # the master file is not included anywhere ;) - continue - if 'orphan' in self.metadata[docname]: - continue - self.warn(docname, 'document isn\'t included in any toctree') diff --git a/sphinx/environment/__init__.py b/sphinx/environment/__init__.py new file mode 100644 index 00000000000..27939db0da7 --- /dev/null +++ b/sphinx/environment/__init__.py @@ -0,0 +1,1288 @@ +# -*- coding: utf-8 -*- +""" + sphinx.environment + ~~~~~~~~~~~~~~~~~~ + + Global creation environment. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import re +import os +import sys +import time +import types +import codecs +import fnmatch +from os import path +from glob import glob + +from six import iteritems, itervalues, class_types, next +from six.moves import cPickle as pickle + +from docutils import nodes +from docutils.io import NullOutput +from docutils.core import Publisher +from docutils.utils import Reporter, relative_path, get_source_line +from docutils.parsers.rst import roles +from docutils.parsers.rst.languages import en as english +from docutils.frontend import OptionParser + +from sphinx import addnodes +from sphinx.io import SphinxStandaloneReader, SphinxDummyWriter, SphinxFileInput +from sphinx.util import get_matching_docs, docname_join, FilenameUniqDict +from sphinx.util.nodes import clean_astext, WarningStream, is_translatable, \ + process_only_nodes +from sphinx.util.osutil import SEP, getcwd, fs_encoding, ensuredir +from sphinx.util.images import guess_mimetype +from sphinx.util.i18n import find_catalog_files, get_image_filename_for_language, \ + search_image_for_language +from sphinx.util.console import bold, purple # type: ignore +from sphinx.util.docutils import sphinx_domains +from sphinx.util.matching import compile_matchers +from sphinx.util.parallel import ParallelTasks, parallel_available, make_chunks +from sphinx.util.websupport import is_commentable +from sphinx.errors import SphinxError, ExtensionError +from sphinx.versioning import add_uids, merge_doctrees +from sphinx.transforms import SphinxContentsFilter +from sphinx.environment.managers.indexentries import IndexEntries +from sphinx.environment.managers.toctree import Toctree + +if False: + # For type annotation + from typing import Any, Callable, Iterator, Pattern, Tuple, Type, Union # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.builders import Builder # NOQA + from sphinx.config import Config # NOQA + from sphinx.domains import Domain # NOQA + from sphinx.environment.managers import EnvironmentManager # NOQA + +default_settings = { + 'embed_stylesheet': False, + 'cloak_email_addresses': True, + 'pep_base_url': 'https://www.python.org/dev/peps/', + 'rfc_base_url': 'https://tools.ietf.org/html/', + 'input_encoding': 'utf-8-sig', + 'doctitle_xform': False, + 'sectsubtitle_xform': False, + 'halt_level': 5, + 'file_insertion_enabled': True, +} + +# This is increased every time an environment attribute is added +# or changed to properly invalidate pickle files. +# +# NOTE: increase base version by 2 to have distinct numbers for Py2 and 3 +ENV_VERSION = 50 + (sys.version_info[0] - 2) + + +dummy_reporter = Reporter('', 4, 4) + +versioning_conditions = { + 'none': False, + 'text': is_translatable, + 'commentable': is_commentable, +} # type: Dict[unicode, Union[bool, Callable]] + + +class NoUri(Exception): + """Raised by get_relative_uri if there is no URI available.""" + pass + + +class BuildEnvironment(object): + """ + The environment in which the ReST files are translated. + Stores an inventory of cross-file targets and provides doctree + transformations to resolve links to them. + """ + + domains = None # type: Dict[unicode, Domain] + + # --------- ENVIRONMENT PERSISTENCE ---------------------------------------- + + @staticmethod + def frompickle(srcdir, config, filename): + # type: (unicode, Config, unicode) -> BuildEnvironment + with open(filename, 'rb') as picklefile: + env = pickle.load(picklefile) + if env.version != ENV_VERSION: + raise IOError('build environment version not current') + if env.srcdir != srcdir: + raise IOError('source directory has changed') + env.config.values = config.values + return env + + def topickle(self, filename): + # type: (unicode) -> None + # remove unpicklable attributes + warnfunc = self._warnfunc + self.set_warnfunc(None) + values = self.config.values + del self.config.values + domains = self.domains + del self.domains + managers = self.detach_managers() + # remove potentially pickling-problematic values from config + for key, val in list(vars(self.config).items()): + if key.startswith('_') or \ + isinstance(val, types.ModuleType) or \ + isinstance(val, types.FunctionType) or \ + isinstance(val, class_types): + del self.config[key] + with open(filename, 'wb') as picklefile: + pickle.dump(self, picklefile, pickle.HIGHEST_PROTOCOL) + # reset attributes + self.attach_managers(managers) + self.domains = domains + self.config.values = values + self.set_warnfunc(warnfunc) + + # --------- ENVIRONMENT INITIALIZATION ------------------------------------- + + def __init__(self, srcdir, doctreedir, config): + # type: (unicode, unicode, Config) -> None + self.doctreedir = doctreedir + self.srcdir = srcdir # type: unicode + self.config = config # type: Config + + # the method of doctree versioning; see set_versioning_method + self.versioning_condition = None # type: Union[bool, Callable] + self.versioning_compare = None # type: bool + + # the application object; only set while update() runs + self.app = None # type: Sphinx + + # all the registered domains, set by the application + self.domains = {} + + # the docutils settings for building + self.settings = default_settings.copy() + self.settings['env'] = self + + # the function to write warning messages with + self._warnfunc = None # type: Callable + + # this is to invalidate old pickles + self.version = ENV_VERSION + + # All "docnames" here are /-separated and relative and exclude + # the source suffix. + + self.found_docs = set() # type: Set[unicode] + # contains all existing docnames + self.all_docs = {} # type: Dict[unicode, float] + # docname -> mtime at the time of reading + # contains all read docnames + self.dependencies = {} # type: Dict[unicode, Set[unicode]] + # docname -> set of dependent file + # names, relative to documentation root + self.included = set() # type: Set[unicode] + # docnames included from other documents + self.reread_always = set() # type: Set[unicode] + # docnames to re-read unconditionally on + # next build + + # File metadata + self.metadata = {} # type: Dict[unicode, Dict[unicode, Any]] + # docname -> dict of metadata items + + # TOC inventory + self.titles = {} # type: Dict[unicode, nodes.Node] + # docname -> title node + self.longtitles = {} # type: Dict[unicode, nodes.Node] + # docname -> title node; only different if + # set differently with title directive + self.tocs = {} # type: Dict[unicode, nodes.Node] + # docname -> table of contents nodetree + self.toc_num_entries = {} # type: Dict[unicode, int] + # docname -> number of real entries + + # used to determine when to show the TOC + # in a sidebar (don't show if it's only one item) + self.toc_secnumbers = {} # type: Dict[unicode, Dict[unicode, Tuple[int, ...]]] + # docname -> dict of sectionid -> number + self.toc_fignumbers = {} # type: Dict[unicode, Dict[unicode, Dict[unicode, Tuple[int, ...]]]] # NOQA + # docname -> dict of figtype -> + # dict of figureid -> number + + self.toctree_includes = {} # type: Dict[unicode, List[unicode]] + # docname -> list of toctree includefiles + self.files_to_rebuild = {} # type: Dict[unicode, Set[unicode]] + # docname -> set of files + # (containing its TOCs) to rebuild too + self.glob_toctrees = set() # type: Set[unicode] + # docnames that have :glob: toctrees + self.numbered_toctrees = set() # type: Set[unicode] + # docnames that have :numbered: toctrees + + # domain-specific inventories, here to be pickled + self.domaindata = {} # type: Dict[unicode, Dict] + # domainname -> domain-specific dict + + # Other inventories + self.indexentries = {} # type: Dict[unicode, List[Tuple[unicode, unicode, unicode, unicode, unicode]]] # NOQA + # docname -> list of + # (type, unicode, target, aliasname) + self.versionchanges = {} # type: Dict[unicode, List[Tuple[unicode, unicode, int, unicode, unicode, unicode]]] # NOQA + # version -> list of (type, docname, + # lineno, module, descname, content) + + # these map absolute path -> (docnames, unique filename) + self.images = FilenameUniqDict() + self.dlfiles = FilenameUniqDict() + + # temporary data storage while reading a document + self.temp_data = {} # type: Dict[unicode, Any] + # context for cross-references (e.g. current module or class) + # this is similar to temp_data, but will for example be copied to + # attributes of "any" cross references + self.ref_context = {} # type: Dict[unicode, Any] + + self.managers = {} # type: Dict[unicode, EnvironmentManager] + self.init_managers() + + def init_managers(self): + # type: () -> None + managers = {} + manager_class = None # type: Type[EnvironmentManager] + for manager_class in [IndexEntries, Toctree]: # type: ignore + managers[manager_class.name] = manager_class(self) + self.attach_managers(managers) + + def attach_managers(self, managers): + # type: (Dict[unicode, EnvironmentManager]) -> None + for name, manager in iteritems(managers): + self.managers[name] = manager + manager.attach(self) + + def detach_managers(self): + # type: () -> Dict[unicode, EnvironmentManager] + managers = self.managers + self.managers = {} + for _, manager in iteritems(managers): + manager.detach(self) + return managers + + def set_warnfunc(self, func): + # type: (Callable) -> None + self._warnfunc = func + self.settings['warning_stream'] = WarningStream(func) + + def set_versioning_method(self, method, compare): + # type: (unicode, bool) -> None + """This sets the doctree versioning method for this environment. + + Versioning methods are a builder property; only builders with the same + versioning method can share the same doctree directory. Therefore, we + raise an exception if the user tries to use an environment with an + incompatible versioning method. + """ + if method not in versioning_conditions: + raise ValueError('invalid versioning method: %r' % method) + condition = versioning_conditions[method] + if self.versioning_condition not in (None, condition): + raise SphinxError('This environment is incompatible with the ' + 'selected builder, please choose another ' + 'doctree directory.') + self.versioning_condition = condition + self.versioning_compare = compare + + def warn(self, docname, msg, lineno=None, **kwargs): + # type: (unicode, unicode, int, Any) -> None + """Emit a warning. + + This differs from using ``app.warn()`` in that the warning may not + be emitted instantly, but collected for emitting all warnings after + the update of the environment. + """ + # strange argument order is due to backwards compatibility + self._warnfunc(msg, (docname, lineno), **kwargs) + + def warn_node(self, msg, node, **kwargs): + # type: (unicode, nodes.Node, Any) -> None + """Like :meth:`warn`, but with source information taken from *node*.""" + self._warnfunc(msg, '%s:%s' % get_source_line(node), **kwargs) + + def clear_doc(self, docname): + # type: (unicode) -> None + """Remove all traces of a source file in the inventory.""" + if docname in self.all_docs: + self.all_docs.pop(docname, None) + self.reread_always.discard(docname) + self.metadata.pop(docname, None) + self.dependencies.pop(docname, None) + self.titles.pop(docname, None) + self.longtitles.pop(docname, None) + self.images.purge_doc(docname) + self.dlfiles.purge_doc(docname) + + for version, changes in self.versionchanges.items(): + new = [change for change in changes if change[1] != docname] + changes[:] = new + + for manager in itervalues(self.managers): + manager.clear_doc(docname) + + for domain in self.domains.values(): + domain.clear_doc(docname) + + def merge_info_from(self, docnames, other, app): + # type: (List[unicode], BuildEnvironment, Sphinx) -> None + """Merge global information gathered about *docnames* while reading them + from the *other* environment. + + This possibly comes from a parallel build process. + """ + docnames = set(docnames) # type: ignore + for docname in docnames: + self.all_docs[docname] = other.all_docs[docname] + if docname in other.reread_always: + self.reread_always.add(docname) + self.metadata[docname] = other.metadata[docname] + if docname in other.dependencies: + self.dependencies[docname] = other.dependencies[docname] + self.titles[docname] = other.titles[docname] + self.longtitles[docname] = other.longtitles[docname] + + self.images.merge_other(docnames, other.images) + self.dlfiles.merge_other(docnames, other.dlfiles) + + for version, changes in other.versionchanges.items(): + self.versionchanges.setdefault(version, []).extend( + change for change in changes if change[1] in docnames) + + for manager in itervalues(self.managers): + manager.merge_other(docnames, other) + for domainname, domain in self.domains.items(): + domain.merge_domaindata(docnames, other.domaindata[domainname]) + app.emit('env-merge-info', self, docnames, other) + + def path2doc(self, filename): + # type: (unicode) -> unicode + """Return the docname for the filename if the file is document. + + *filename* should be absolute or relative to the source directory. + """ + if filename.startswith(self.srcdir): + filename = filename[len(self.srcdir) + 1:] + for suffix in self.config.source_suffix: + if fnmatch.fnmatch(filename, '*' + suffix): # type: ignore + return filename[:-len(suffix)] # type: ignore + else: + # the file does not have docname + return None + + def doc2path(self, docname, base=True, suffix=None): + # type: (unicode, Union[bool, unicode], unicode) -> unicode + """Return the filename for the document name. + + If *base* is True, return absolute path under self.srcdir. + If *base* is None, return relative path to self.srcdir. + If *base* is a path string, return absolute path under that. + If *suffix* is not None, add it instead of config.source_suffix. + """ + docname = docname.replace(SEP, path.sep) + if suffix is None: + candidate_suffix = None # type: unicode + for candidate_suffix in self.config.source_suffix: # type: ignore + if path.isfile(path.join(self.srcdir, docname) + + candidate_suffix): + suffix = candidate_suffix + break + else: + # document does not exist + suffix = self.config.source_suffix[0] # type: ignore + if base is True: + return path.join(self.srcdir, docname) + suffix + elif base is None: + return docname + suffix + else: + return path.join(base, docname) + suffix # type: ignore + + def relfn2path(self, filename, docname=None): + # type: (unicode, unicode) -> Tuple[unicode, unicode] + """Return paths to a file referenced from a document, relative to + documentation root and absolute. + + In the input "filename", absolute filenames are taken as relative to the + source dir, while relative filenames are relative to the dir of the + containing document. + """ + if filename.startswith('/') or filename.startswith(os.sep): + rel_fn = filename[1:] + else: + docdir = path.dirname(self.doc2path(docname or self.docname, + base=None)) + rel_fn = path.join(docdir, filename) + try: + # the path.abspath() might seem redundant, but otherwise artifacts + # such as ".." will remain in the path + return rel_fn, path.abspath(path.join(self.srcdir, rel_fn)) + except UnicodeDecodeError: + # the source directory is a bytestring with non-ASCII characters; + # let's try to encode the rel_fn in the file system encoding + enc_rel_fn = rel_fn.encode(sys.getfilesystemencoding()) + return rel_fn, path.abspath(path.join(self.srcdir, enc_rel_fn)) + + def find_files(self, config): + # type: (Config) -> None + """Find all source files in the source dir and put them in + self.found_docs. + """ + matchers = compile_matchers( + config.exclude_patterns[:] + + config.templates_path + + config.html_extra_path + + ['**/_sources', '.#*', '**/.#*', '*.lproj/**'] + ) + self.found_docs = set() + for docname in get_matching_docs(self.srcdir, config.source_suffix, # type: ignore + exclude_matchers=matchers): + if os.access(self.doc2path(docname), os.R_OK): + self.found_docs.add(docname) + else: + self.warn(docname, "document not readable. Ignored.") + + # add catalog mo file dependency + for docname in self.found_docs: + catalog_files = find_catalog_files( + docname, + self.srcdir, + self.config.locale_dirs, + self.config.language, + self.config.gettext_compact) + for filename in catalog_files: + self.dependencies.setdefault(docname, set()).add(filename) + + def get_outdated_files(self, config_changed): + # type: (bool) -> Tuple[Set[unicode], Set[unicode], Set[unicode]] + """Return (added, changed, removed) sets.""" + # clear all files no longer present + removed = set(self.all_docs) - self.found_docs + + added = set() # type: Set[unicode] + changed = set() # type: Set[unicode] + + if config_changed: + # config values affect e.g. substitutions + added = self.found_docs + else: + for docname in self.found_docs: + if docname not in self.all_docs: + added.add(docname) + continue + # if the doctree file is not there, rebuild + if not path.isfile(self.doc2path(docname, self.doctreedir, + '.doctree')): + changed.add(docname) + continue + # check the "reread always" list + if docname in self.reread_always: + changed.add(docname) + continue + # check the mtime of the document + mtime = self.all_docs[docname] + newmtime = path.getmtime(self.doc2path(docname)) + if newmtime > mtime: + changed.add(docname) + continue + # finally, check the mtime of dependencies + for dep in self.dependencies.get(docname, ()): + try: + # this will do the right thing when dep is absolute too + deppath = path.join(self.srcdir, dep) + if not path.isfile(deppath): + changed.add(docname) + break + depmtime = path.getmtime(deppath) + if depmtime > mtime: + changed.add(docname) + break + except EnvironmentError: + # give it another chance + changed.add(docname) + break + + return added, changed, removed + + def update(self, config, srcdir, doctreedir, app): + # type: (Config, unicode, unicode, Sphinx) -> List[unicode] + """(Re-)read all files new or changed since last update. + + Store all environment docnames in the canonical format (ie using SEP as + a separator in place of os.path.sep). + """ + config_changed = False + if self.config is None: + msg = '[new config] ' + config_changed = True + else: + # check if a config value was changed that affects how + # doctrees are read + for key, descr in iteritems(config.values): + if descr[1] != 'env': + continue + if self.config[key] != config[key]: + msg = '[config changed] ' + config_changed = True + break + else: + msg = '' + # this value is not covered by the above loop because it is handled + # specially by the config class + if self.config.extensions != config.extensions: + msg = '[extensions changed] ' + config_changed = True + # the source and doctree directories may have been relocated + self.srcdir = srcdir + self.doctreedir = doctreedir + self.find_files(config) + self.config = config + + # this cache also needs to be updated every time + self._nitpick_ignore = set(self.config.nitpick_ignore) + + app.info(bold('updating environment: '), nonl=True) + + added, changed, removed = self.get_outdated_files(config_changed) + + # allow user intervention as well + for docs in app.emit('env-get-outdated', self, added, changed, removed): + changed.update(set(docs) & self.found_docs) + + # if files were added or removed, all documents with globbed toctrees + # must be reread + if added or removed: + # ... but not those that already were removed + changed.update(self.glob_toctrees & self.found_docs) + + msg += '%s added, %s changed, %s removed' % (len(added), len(changed), + len(removed)) + app.info(msg) + + self.app = app + + # clear all files no longer present + for docname in removed: + app.emit('env-purge-doc', self, docname) + self.clear_doc(docname) + + # read all new and changed files + docnames = sorted(added | changed) + # allow changing and reordering the list of docs to read + app.emit('env-before-read-docs', self, docnames) + + # check if we should do parallel or serial read + par_ok = False + if parallel_available and len(docnames) > 5 and app.parallel > 1: + par_ok = True + for extname, md in app._extension_metadata.items(): + ext_ok = md.get('parallel_read_safe') + if ext_ok: + continue + if ext_ok is None: + app.warn('the %s extension does not declare if it ' + 'is safe for parallel reading, assuming it ' + 'isn\'t - please ask the extension author to ' + 'check and make it explicit' % extname) + app.warn('doing serial read') + else: + app.warn('the %s extension is not safe for parallel ' + 'reading, doing serial read' % extname) + par_ok = False + break + if par_ok: + self._read_parallel(docnames, app, nproc=app.parallel) + else: + self._read_serial(docnames, app) + + if config.master_doc not in self.all_docs: + raise SphinxError('master file %s not found' % + self.doc2path(config.master_doc)) + + self.app = None + + for retval in app.emit('env-updated', self): + if retval is not None: + docnames.extend(retval) + + return sorted(docnames) + + def _read_serial(self, docnames, app): + # type: (List[unicode], Sphinx) -> None + for docname in app.status_iterator(docnames, 'reading sources... ', + purple, len(docnames)): + # remove all inventory entries for that file + app.emit('env-purge-doc', self, docname) + self.clear_doc(docname) + self.read_doc(docname, app) + + def _read_parallel(self, docnames, app, nproc): + # type: (List[unicode], Sphinx, int) -> None + # clear all outdated docs at once + for docname in docnames: + app.emit('env-purge-doc', self, docname) + self.clear_doc(docname) + + def read_process(docs): + # type: (List[unicode]) -> BuildEnvironment + self.app = app + self.warnings = [] # type: List[Tuple] + self.set_warnfunc(lambda *args, **kwargs: self.warnings.append((args, kwargs))) + for docname in docs: + self.read_doc(docname, app) + # allow pickling self to send it back + self.set_warnfunc(None) + del self.app + del self.domains + del self.config.values + del self.config + return self + + def merge(docs, otherenv): + # type: (List[unicode], BuildEnvironment) -> None + warnings.extend(otherenv.warnings) + self.merge_info_from(docs, otherenv, app) + + tasks = ParallelTasks(nproc) + chunks = make_chunks(docnames, nproc) + + warnings = [] # type: List[Tuple] + for chunk in app.status_iterator( + chunks, 'reading sources... ', purple, len(chunks)): + tasks.add_task(read_process, chunk, merge) + + # make sure all threads have finished + app.info(bold('waiting for workers...')) + tasks.join() + + for warning, kwargs in warnings: + self._warnfunc(*warning, **kwargs) + + def check_dependents(self, already): + # type: (Set[unicode]) -> Iterator[unicode] + to_rewrite = (self.toctree.assign_section_numbers() + # type: ignore + self.toctree.assign_figure_numbers()) # type: ignore + for docname in set(to_rewrite): + if docname not in already: + yield docname + + # --------- SINGLE FILE READING -------------------------------------------- + + def warn_and_replace(self, error): + # type: (Any) -> Tuple + """Custom decoding error handler that warns and replaces.""" + linestart = error.object.rfind(b'\n', 0, error.start) + lineend = error.object.find(b'\n', error.start) + if lineend == -1: + lineend = len(error.object) + lineno = error.object.count(b'\n', 0, error.start) + 1 + self.warn(self.docname, 'undecodable source characters, ' + 'replacing with "?": %r' % + (error.object[linestart+1:error.start] + b'>>>' + + error.object[error.start:error.end] + b'<<<' + + error.object[error.end:lineend]), lineno) + return (u'?', error.end) + + def read_doc(self, docname, app=None): + # type: (unicode, Sphinx) -> None + """Parse a file and add/update inventory entries for the doctree.""" + + self.temp_data['docname'] = docname + # defaults to the global default, but can be re-set in a document + self.temp_data['default_domain'] = \ + self.domains.get(self.config.primary_domain) + + self.settings['input_encoding'] = self.config.source_encoding + self.settings['trim_footnote_reference_space'] = \ + self.config.trim_footnote_reference_space + self.settings['gettext_compact'] = self.config.gettext_compact + + docutilsconf = path.join(self.srcdir, 'docutils.conf') + # read docutils.conf from source dir, not from current dir + OptionParser.standard_config_files[1] = docutilsconf + if path.isfile(docutilsconf): + self.note_dependency(docutilsconf) + + with sphinx_domains(self): + if self.config.default_role: + role_fn, messages = roles.role(self.config.default_role, english, + 0, dummy_reporter) + if role_fn: + roles._roles[''] = role_fn + else: + self.warn(docname, 'default role %s not found' % + self.config.default_role) + + codecs.register_error('sphinx', self.warn_and_replace) # type: ignore + + # publish manually + reader = SphinxStandaloneReader(self.app, parsers=self.config.source_parsers) + pub = Publisher(reader=reader, + writer=SphinxDummyWriter(), + destination_class=NullOutput) + pub.set_components(None, 'restructuredtext', None) + pub.process_programmatic_settings(None, self.settings, None) + src_path = self.doc2path(docname) + source = SphinxFileInput(app, self, source=None, source_path=src_path, + encoding=self.config.source_encoding) + pub.source = source + pub.settings._source = src_path + pub.set_destination(None, None) + pub.publish() + doctree = pub.document + + # post-processing + self.process_dependencies(docname, doctree) + self.process_images(docname, doctree) + self.process_downloads(docname, doctree) + self.process_metadata(docname, doctree) + self.create_title_from(docname, doctree) + for manager in itervalues(self.managers): + manager.process_doc(docname, doctree) + for domain in itervalues(self.domains): + domain.process_doc(self, docname, doctree) + + # allow extension-specific post-processing + if app: + app.emit('doctree-read', doctree) + + # store time of reading, for outdated files detection + # (Some filesystems have coarse timestamp resolution; + # therefore time.time() can be older than filesystem's timestamp. + # For example, FAT32 has 2sec timestamp resolution.) + self.all_docs[docname] = max( + time.time(), path.getmtime(self.doc2path(docname))) + + if self.versioning_condition: + old_doctree = None + if self.versioning_compare: + # get old doctree + try: + with open(self.doc2path(docname, + self.doctreedir, '.doctree'), 'rb') as f: + old_doctree = pickle.load(f) + except EnvironmentError: + pass + + # add uids for versioning + if not self.versioning_compare or old_doctree is None: + list(add_uids(doctree, self.versioning_condition)) + else: + list(merge_doctrees( + old_doctree, doctree, self.versioning_condition)) + + # make it picklable + doctree.reporter = None + doctree.transformer = None + doctree.settings.warning_stream = None + doctree.settings.env = None + doctree.settings.record_dependencies = None + + # cleanup + self.temp_data.clear() + self.ref_context.clear() + roles._roles.pop('', None) # if a document has set a local default role + + # save the parsed doctree + doctree_filename = self.doc2path(docname, self.doctreedir, + '.doctree') + ensuredir(path.dirname(doctree_filename)) + with open(doctree_filename, 'wb') as f: + pickle.dump(doctree, f, pickle.HIGHEST_PROTOCOL) + + # utilities to use while reading a document + + @property + def docname(self): + # type: () -> unicode + """Returns the docname of the document currently being parsed.""" + return self.temp_data['docname'] + + @property + def currmodule(self): + # type () -> None + """Backwards compatible alias. Will be removed.""" + self.warn(self.docname, 'env.currmodule is being referenced by an ' + 'extension; this API will be removed in the future') + return self.ref_context.get('py:module') + + @property + def currclass(self): + # type: () -> None + """Backwards compatible alias. Will be removed.""" + self.warn(self.docname, 'env.currclass is being referenced by an ' + 'extension; this API will be removed in the future') + return self.ref_context.get('py:class') + + def new_serialno(self, category=''): + # type: (unicode) -> int + """Return a serial number, e.g. for index entry targets. + + The number is guaranteed to be unique in the current document. + """ + key = category + 'serialno' + cur = self.temp_data.get(key, 0) + self.temp_data[key] = cur + 1 + return cur + + def note_dependency(self, filename): + # type: (unicode) -> None + """Add *filename* as a dependency of the current document. + + This means that the document will be rebuilt if this file changes. + + *filename* should be absolute or relative to the source directory. + """ + self.dependencies.setdefault(self.docname, set()).add(filename) + + def note_included(self, filename): + # type: (unicode) -> None + """Add *filename* as a included from other document. + + This means the document is not orphaned. + + *filename* should be absolute or relative to the source directory. + """ + self.included.add(self.path2doc(filename)) + + def note_reread(self): + # type: () -> None + """Add the current document to the list of documents that will + automatically be re-read at the next build. + """ + self.reread_always.add(self.docname) + + def note_versionchange(self, type, version, node, lineno): + # type: (unicode, unicode, nodes.Node, int) -> None + self.versionchanges.setdefault(version, []).append( + (type, self.temp_data['docname'], lineno, + self.ref_context.get('py:module'), + self.temp_data.get('object'), node.astext())) + + # post-processing of read doctrees + + def process_dependencies(self, docname, doctree): + # type: (unicode, nodes.Node) -> None + """Process docutils-generated dependency info.""" + cwd = getcwd() + frompath = path.join(path.normpath(self.srcdir), 'dummy') + deps = doctree.settings.record_dependencies + if not deps: + return + for dep in deps.list: + # the dependency path is relative to the working dir, so get + # one relative to the srcdir + if isinstance(dep, bytes): + dep = dep.decode(fs_encoding) + relpath = relative_path(frompath, + path.normpath(path.join(cwd, dep))) + self.dependencies.setdefault(docname, set()).add(relpath) + + def process_downloads(self, docname, doctree): + # type: (unicode, nodes.Node) -> None + """Process downloadable file paths. """ + for node in doctree.traverse(addnodes.download_reference): + targetname = node['reftarget'] + rel_filename, filename = self.relfn2path(targetname, docname) + self.dependencies.setdefault(docname, set()).add(rel_filename) + if not os.access(filename, os.R_OK): + self.warn_node('download file not readable: %s' % filename, + node) + continue + uniquename = self.dlfiles.add_file(docname, filename) + node['filename'] = uniquename + + def process_images(self, docname, doctree): + # type: (unicode, nodes.Node) -> None + """Process and rewrite image URIs.""" + def collect_candidates(imgpath, candidates): + globbed = {} # type: Dict[unicode, List[unicode]] + for filename in glob(imgpath): + new_imgpath = relative_path(path.join(self.srcdir, 'dummy'), + filename) + try: + mimetype = guess_mimetype(filename) + if mimetype not in candidates: + globbed.setdefault(mimetype, []).append(new_imgpath) + except (OSError, IOError) as err: + self.warn_node('image file %s not readable: %s' % + (filename, err), node) + for key, files in iteritems(globbed): + candidates[key] = sorted(files, key=len)[0] # select by similarity + + for node in doctree.traverse(nodes.image): + # Map the mimetype to the corresponding image. The writer may + # choose the best image from these candidates. The special key * is + # set if there is only single candidate to be used by a writer. + # The special key ? is set for nonlocal URIs. + node['candidates'] = candidates = {} + imguri = node['uri'] + if imguri.startswith('data:'): + self.warn_node('image data URI found. some builders might not support', node, + type='image', subtype='data_uri') + candidates['?'] = imguri + continue + elif imguri.find('://') != -1: + self.warn_node('nonlocal image URI found: %s' % imguri, node, + type='image', subtype='nonlocal_uri') + candidates['?'] = imguri + continue + rel_imgpath, full_imgpath = self.relfn2path(imguri, docname) + if self.config.language: + # substitute figures (ex. foo.png -> foo.en.png) + i18n_full_imgpath = search_image_for_language(full_imgpath, self) + if i18n_full_imgpath != full_imgpath: + full_imgpath = i18n_full_imgpath + rel_imgpath = relative_path(path.join(self.srcdir, 'dummy'), + i18n_full_imgpath) + # set imgpath as default URI + node['uri'] = rel_imgpath + if rel_imgpath.endswith(os.extsep + '*'): + if self.config.language: + # Search language-specific figures at first + i18n_imguri = get_image_filename_for_language(imguri, self) + _, full_i18n_imgpath = self.relfn2path(i18n_imguri, docname) + collect_candidates(full_i18n_imgpath, candidates) + + collect_candidates(full_imgpath, candidates) + else: + candidates['*'] = rel_imgpath + + # map image paths to unique image names (so that they can be put + # into a single directory) + for imgpath in itervalues(candidates): + self.dependencies.setdefault(docname, set()).add(imgpath) + if not os.access(path.join(self.srcdir, imgpath), os.R_OK): + self.warn_node('image file not readable: %s' % imgpath, + node) + continue + self.images.add_file(docname, imgpath) + + def process_metadata(self, docname, doctree): + # type: (unicode, nodes.Node) -> None + """Process the docinfo part of the doctree as metadata. + + Keep processing minimal -- just return what docutils says. + """ + self.metadata[docname] = {} + md = self.metadata[docname] + try: + docinfo = doctree[0] + except IndexError: + # probably an empty document + return + if docinfo.__class__ is not nodes.docinfo: + # nothing to see here + return + for node in docinfo: + # nodes are multiply inherited... + if isinstance(node, nodes.authors): + md['authors'] = [author.astext() for author in node] + elif isinstance(node, nodes.TextElement): # e.g. author + md[node.__class__.__name__] = node.astext() + else: + name, body = node + md[name.astext()] = body.astext() + for name, value in md.items(): + if name in ('tocdepth',): + try: + value = int(value) + except ValueError: + value = 0 + md[name] = value + + del doctree[0] + + def create_title_from(self, docname, document): + # type: (unicode, nodes.Node) -> None + """Add a title node to the document (just copy the first section title), + and store that title in the environment. + """ + titlenode = nodes.title() + longtitlenode = titlenode + # explicit title set with title directive; use this only for + # the <title> tag in HTML output + if 'title' in document: + longtitlenode = nodes.title() + longtitlenode += nodes.Text(document['title']) + # look for first section title and use that as the title + for node in document.traverse(nodes.section): + visitor = SphinxContentsFilter(document) + node[0].walkabout(visitor) + titlenode += visitor.get_entry_text() + break + else: + # document has no title + titlenode += nodes.Text('<no title>') + self.titles[docname] = titlenode + self.longtitles[docname] = longtitlenode + + def note_toctree(self, docname, toctreenode): + # type: (unicode, addnodes.toctree) -> None + """Note a TOC tree directive in a document and gather information about + file relations from it. + """ + self.toctree.note_toctree(docname, toctreenode) # type: ignore + + def get_toc_for(self, docname, builder): + # type: (unicode, Builder) -> addnodes.toctree + """Return a TOC nodetree -- for use on the same page only!""" + return self.toctree.get_toc_for(docname, builder) # type: ignore + + def get_toctree_for(self, docname, builder, collapse, **kwds): + # type: (unicode, Builder, bool, Any) -> addnodes.toctree + """Return the global TOC nodetree.""" + return self.toctree.get_toctree_for(docname, builder, collapse, **kwds) # type: ignore + + def get_domain(self, domainname): + # type: (unicode) -> Domain + """Return the domain instance with the specified name. + + Raises an ExtensionError if the domain is not registered. + """ + try: + return self.domains[domainname] + except KeyError: + raise ExtensionError('Domain %r is not registered' % domainname) + + # --------- RESOLVING REFERENCES AND TOCTREES ------------------------------ + + def get_doctree(self, docname): + # type: (unicode) -> nodes.Node + """Read the doctree for a file from the pickle and return it.""" + doctree_filename = self.doc2path(docname, self.doctreedir, '.doctree') + with open(doctree_filename, 'rb') as f: + doctree = pickle.load(f) + doctree.settings.env = self + doctree.reporter = Reporter(self.doc2path(docname), 2, 5, + stream=WarningStream(self._warnfunc)) + return doctree + + def get_and_resolve_doctree(self, docname, builder, doctree=None, + prune_toctrees=True, includehidden=False): + # type: (unicode, Builder, nodes.Node, bool, bool) -> nodes.Node + """Read the doctree from the pickle, resolve cross-references and + toctrees and return it. + """ + if doctree is None: + doctree = self.get_doctree(docname) + + # resolve all pending cross-references + self.resolve_references(doctree, docname, builder) + + # now, resolve all toctree nodes + for toctreenode in doctree.traverse(addnodes.toctree): + result = self.resolve_toctree(docname, builder, toctreenode, + prune=prune_toctrees, + includehidden=includehidden) + if result is None: + toctreenode.replace_self([]) + else: + toctreenode.replace_self(result) + + return doctree + + def resolve_toctree(self, docname, builder, toctree, prune=True, maxdepth=0, + titles_only=False, collapse=False, includehidden=False): + # type: (unicode, Builder, addnodes.toctree, bool, int, bool, bool, bool) -> nodes.Node + """Resolve a *toctree* node into individual bullet lists with titles + as items, returning None (if no containing titles are found) or + a new node. + + If *prune* is True, the tree is pruned to *maxdepth*, or if that is 0, + to the value of the *maxdepth* option on the *toctree* node. + If *titles_only* is True, only toplevel document titles will be in the + resulting tree. + If *collapse* is True, all branches not containing docname will + be collapsed. + """ + return self.toctree.resolve_toctree(docname, builder, toctree, prune, # type: ignore + maxdepth, titles_only, collapse, + includehidden) + + def resolve_references(self, doctree, fromdocname, builder): + # type: (nodes.Node, unicode, Builder) -> None + for node in doctree.traverse(addnodes.pending_xref): + contnode = node[0].deepcopy() + newnode = None + + typ = node['reftype'] + target = node['reftarget'] + refdoc = node.get('refdoc', fromdocname) + domain = None + + try: + if 'refdomain' in node and node['refdomain']: + # let the domain try to resolve the reference + try: + domain = self.domains[node['refdomain']] + except KeyError: + raise NoUri + newnode = domain.resolve_xref(self, refdoc, builder, + typ, target, node, contnode) + # really hardwired reference types + elif typ == 'any': + newnode = self._resolve_any_reference(builder, refdoc, node, contnode) + elif typ == 'doc': + newnode = self._resolve_doc_reference(builder, refdoc, node, contnode) + # no new node found? try the missing-reference event + if newnode is None: + newnode = builder.app.emit_firstresult( + 'missing-reference', self, node, contnode) + # still not found? warn if node wishes to be warned about or + # we are in nit-picky mode + if newnode is None: + self._warn_missing_reference(refdoc, typ, target, node, domain) + except NoUri: + newnode = contnode + node.replace_self(newnode or contnode) + + # remove only-nodes that do not belong to our builder + process_only_nodes(doctree, builder.tags, warn_node=self.warn_node) + + # allow custom references to be resolved + builder.app.emit('doctree-resolved', doctree, fromdocname) + + def _warn_missing_reference(self, refdoc, typ, target, node, domain): + # type: (unicode, unicode, unicode, nodes.Node, Domain) -> None + warn = node.get('refwarn') + if self.config.nitpicky: + warn = True + if self._nitpick_ignore: + dtype = domain and '%s:%s' % (domain.name, typ) or typ + if (dtype, target) in self._nitpick_ignore: + warn = False + # for "std" types also try without domain name + if (not domain or domain.name == 'std') and \ + (typ, target) in self._nitpick_ignore: + warn = False + if not warn: + return + if domain and typ in domain.dangling_warnings: + msg = domain.dangling_warnings[typ] + elif typ == 'doc': + msg = 'unknown document: %(target)s' + elif node.get('refdomain', 'std') not in ('', 'std'): + msg = '%s:%s reference target not found: %%(target)s' % \ + (node['refdomain'], typ) + else: + msg = '%r reference target not found: %%(target)s' % typ + self.warn_node(msg % {'target': target}, node, type='ref', subtype=typ) + + def _resolve_doc_reference(self, builder, refdoc, node, contnode): + # type: (Builder, unicode, nodes.Node, nodes.Node) -> nodes.Node + # directly reference to document by source name; + # can be absolute or relative + docname = docname_join(refdoc, node['reftarget']) + if docname in self.all_docs: + if node['refexplicit']: + # reference with explicit title + caption = node.astext() + else: + caption = clean_astext(self.titles[docname]) + innernode = nodes.inline(caption, caption) + innernode['classes'].append('doc') + newnode = nodes.reference('', '', internal=True) + newnode['refuri'] = builder.get_relative_uri(refdoc, docname) + newnode.append(innernode) + return newnode + + def _resolve_any_reference(self, builder, refdoc, node, contnode): + # type: (Builder, unicode, nodes.Node, nodes.Node) -> nodes.Node + """Resolve reference generated by the "any" role.""" + target = node['reftarget'] + results = [] # type: List[Tuple[unicode, nodes.Node]] + # first, try resolving as :doc: + doc_ref = self._resolve_doc_reference(builder, refdoc, node, contnode) + if doc_ref: + results.append(('doc', doc_ref)) + # next, do the standard domain (makes this a priority) + results.extend(self.domains['std'].resolve_any_xref( + self, refdoc, builder, target, node, contnode)) + for domain in self.domains.values(): + if domain.name == 'std': + continue # we did this one already + try: + results.extend(domain.resolve_any_xref(self, refdoc, builder, + target, node, contnode)) + except NotImplementedError: + # the domain doesn't yet support the new interface + # we have to manually collect possible references (SLOW) + for role in domain.roles: + res = domain.resolve_xref(self, refdoc, builder, role, target, + node, contnode) + if res and isinstance(res[0], nodes.Element): + results.append(('%s:%s' % (domain.name, role), res)) + # now, see how many matches we got... + if not results: + return None + if len(results) > 1: + nice_results = ' or '.join(':%s:' % r[0] for r in results) + self.warn_node('more than one target found for \'any\' cross-' + 'reference %r: could be %s' % (target, nice_results), + node) + res_role, newnode = results[0] + # Override "any" class with the actual role type to get the styling + # approximately correct. + res_domain = res_role.split(':')[0] + if newnode and newnode[0].get('classes'): + newnode[0]['classes'].append(res_domain) + newnode[0]['classes'].append(res_role.replace(':', '-')) + return newnode + + def create_index(self, builder, group_entries=True, + _fixre=re.compile(r'(.*) ([(][^()]*[)])')): + # type: (Builder, bool, Pattern) -> Any + return self.indices.create_index(builder, group_entries=group_entries, _fixre=_fixre) # type: ignore # NOQA + + def collect_relations(self): + # type: () -> Dict[unicode, List[unicode]] + traversed = set() + + def traverse_toctree(parent, docname): + if parent == docname: + self.warn(docname, 'self referenced toctree found. Ignored.') + return + + # traverse toctree by pre-order + yield parent, docname + traversed.add(docname) + + for child in (self.toctree_includes.get(docname) or []): + for subparent, subdocname in traverse_toctree(docname, child): + if subdocname not in traversed: + yield subparent, subdocname + traversed.add(subdocname) + + relations = {} + docnames = traverse_toctree(None, self.config.master_doc) + prevdoc = None + parent, docname = next(docnames) + for nextparent, nextdoc in docnames: + relations[docname] = [parent, prevdoc, nextdoc] + prevdoc = docname + docname = nextdoc + parent = nextparent + + relations[docname] = [parent, prevdoc, None] + + return relations + + def check_consistency(self): + # type: () -> None + """Do consistency checks.""" + for docname in sorted(self.all_docs): + if docname not in self.files_to_rebuild: + if docname == self.config.master_doc: + # the master file is not included anywhere ;) + continue + if docname in self.included: + # the document is included from other documents + continue + if 'orphan' in self.metadata[docname]: + continue + self.warn(docname, 'document isn\'t included in any toctree') diff --git a/sphinx/environment/managers/__init__.py b/sphinx/environment/managers/__init__.py new file mode 100644 index 00000000000..0822f1091f0 --- /dev/null +++ b/sphinx/environment/managers/__init__.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +""" + sphinx.environment.managers + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Manager components for sphinx.environment. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +if False: + # For type annotation + from typing import Any # NOQA + from docutils import nodes # NOQA + from sphinx.environment import BuildEnvironment # NOQA + + +class EnvironmentManager(object): + """Base class for sphinx.environment managers.""" + name = None # type: unicode + env = None # type: BuildEnvironment + + def __init__(self, env): + # type: (BuildEnvironment) -> None + self.env = env + + def attach(self, env): + # type: (BuildEnvironment) -> None + self.env = env + if self.name: + setattr(env, self.name, self) + + def detach(self, env): + # type: (BuildEnvironment) -> None + self.env = None + if self.name: + delattr(env, self.name) + + def clear_doc(self, docname): + # type: (unicode) -> None + raise NotImplementedError + + def merge_other(self, docnames, other): + # type: (List[unicode], Any) -> None + raise NotImplementedError + + def process_doc(self, docname, doctree): + # type: (unicode, nodes.Node) -> None + raise NotImplementedError diff --git a/sphinx/environment/managers/indexentries.py b/sphinx/environment/managers/indexentries.py new file mode 100644 index 00000000000..8cf20f48042 --- /dev/null +++ b/sphinx/environment/managers/indexentries.py @@ -0,0 +1,183 @@ +# -*- coding: utf-8 -*- +""" + sphinx.environment.managers.indexentries + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Index entries manager for sphinx.environment. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" +import re +import bisect +import unicodedata +import string +from itertools import groupby + +from six import text_type +from sphinx import addnodes +from sphinx.util import iteritems, split_index_msg, split_into +from sphinx.locale import _ +from sphinx.environment.managers import EnvironmentManager + +if False: + # For type annotation + from typing import Pattern, Tuple # NOQA + from docutils import nodes # NOQA + from sphinx.builders import Builder # NOQA + from sphinx.environment import BuildEnvironment # NOQA + + +class IndexEntries(EnvironmentManager): + name = 'indices' + + def __init__(self, env): + # type: (BuildEnvironment) -> None + super(IndexEntries, self).__init__(env) + self.data = env.indexentries + + def clear_doc(self, docname): + # type: (unicode) -> None + self.data.pop(docname, None) + + def merge_other(self, docnames, other): + # type: (List[unicode], BuildEnvironment) -> None + for docname in docnames: + self.data[docname] = other.indexentries[docname] + + def process_doc(self, docname, doctree): + # type: (unicode, nodes.Node) -> None + entries = self.data[docname] = [] + for node in doctree.traverse(addnodes.index): + try: + for entry in node['entries']: + split_index_msg(entry[0], entry[1]) + except ValueError as exc: + self.env.warn_node(exc, node) + node.parent.remove(node) + else: + for entry in node['entries']: + if len(entry) == 5: + # Since 1.4: new index structure including index_key (5th column) + entries.append(entry) + else: + entries.append(entry + (None,)) + + def create_index(self, builder, group_entries=True, + _fixre=re.compile(r'(.*) ([(][^()]*[)])')): + # type: (Builder, bool, Pattern) -> List[Tuple[unicode, List[Tuple[unicode, List[unicode]]]]] # NOQA + """Create the real index from the collected index entries.""" + from sphinx.environment import NoUri + + new = {} # type: Dict[unicode, List] + + def add_entry(word, subword, main, link=True, dic=new, key=None): + # Force the word to be unicode if it's a ASCII bytestring. + # This will solve problems with unicode normalization later. + # For instance the RFC role will add bytestrings at the moment + word = text_type(word) + entry = dic.get(word) + if not entry: + dic[word] = entry = [[], {}, key] + if subword: + add_entry(subword, '', main, link=link, dic=entry[1], key=key) + elif link: + try: + uri = builder.get_relative_uri('genindex', fn) + '#' + tid + except NoUri: + pass + else: + # maintain links in sorted/deterministic order + bisect.insort(entry[0], (main, uri)) + + for fn, entries in iteritems(self.data): + # new entry types must be listed in directives/other.py! + for type, value, tid, main, index_key in entries: + try: + if type == 'single': + try: + entry, subentry = split_into(2, 'single', value) + except ValueError: + entry, = split_into(1, 'single', value) + subentry = '' + add_entry(entry, subentry, main, key=index_key) + elif type == 'pair': + first, second = split_into(2, 'pair', value) + add_entry(first, second, main, key=index_key) + add_entry(second, first, main, key=index_key) + elif type == 'triple': + first, second, third = split_into(3, 'triple', value) + add_entry(first, second + ' ' + third, main, key=index_key) + add_entry(second, third + ', ' + first, main, key=index_key) + add_entry(third, first + ' ' + second, main, key=index_key) + elif type == 'see': + first, second = split_into(2, 'see', value) + add_entry(first, _('see %s') % second, None, + link=False, key=index_key) + elif type == 'seealso': + first, second = split_into(2, 'see', value) + add_entry(first, _('see also %s') % second, None, + link=False, key=index_key) + else: + self.env.warn(fn, 'unknown index entry type %r' % type) + except ValueError as err: + self.env.warn(fn, str(err)) + + # sort the index entries; put all symbols at the front, even those + # following the letters in ASCII, this is where the chr(127) comes from + def keyfunc(entry, lcletters=string.ascii_lowercase + '_'): + lckey = unicodedata.normalize('NFD', entry[0].lower()) + if lckey[0:1] in lcletters: + lckey = chr(127) + lckey + # ensure a determinstic order *within* letters by also sorting on + # the entry itself + return (lckey, entry[0]) + newlist = sorted(new.items(), key=keyfunc) + + if group_entries: + # fixup entries: transform + # func() (in module foo) + # func() (in module bar) + # into + # func() + # (in module foo) + # (in module bar) + oldkey = '' # type: unicode + oldsubitems = None # type: Dict[unicode, List] + i = 0 + while i < len(newlist): + key, (targets, subitems, _key) = newlist[i] + # cannot move if it has subitems; structure gets too complex + if not subitems: + m = _fixre.match(key) + if m: + if oldkey == m.group(1): + # prefixes match: add entry as subitem of the + # previous entry + oldsubitems.setdefault(m.group(2), [[], {}, _key])[0].\ + extend(targets) + del newlist[i] + continue + oldkey = m.group(1) + else: + oldkey = key + oldsubitems = subitems + i += 1 + + # group the entries by letter + def keyfunc2(item, letters=string.ascii_uppercase + '_'): + # hack: mutating the subitems dicts to a list in the keyfunc + k, v = item + v[1] = sorted((si, se) for (si, (se, void, void)) in iteritems(v[1])) + if v[2] is None: + # now calculate the key + letter = unicodedata.normalize('NFD', k[0])[0].upper() + if letter in letters: + return letter + else: + # get all other symbols under one heading + return _('Symbols') + else: + return v[2] + return [(key_, list(group)) + for (key_, group) in groupby(newlist, keyfunc2)] diff --git a/sphinx/environment/managers/toctree.py b/sphinx/environment/managers/toctree.py new file mode 100644 index 00000000000..26c8f385d83 --- /dev/null +++ b/sphinx/environment/managers/toctree.py @@ -0,0 +1,580 @@ +# -*- coding: utf-8 -*- +""" + sphinx.environment.managers.toctree + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Toctree manager for sphinx.environment. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from six import iteritems + +from docutils import nodes + +from sphinx import addnodes +from sphinx.util import url_re +from sphinx.util.nodes import clean_astext, process_only_nodes +from sphinx.transforms import SphinxContentsFilter +from sphinx.environment.managers import EnvironmentManager + +if False: + # For type annotation + from typing import Any, Tuple # NOQA + from sphinx.builders import Builder # NOQA + from sphinx.environment import BuildEnvironment # NOQA + + +class Toctree(EnvironmentManager): + name = 'toctree' + + def __init__(self, env): + # type: (BuildEnvironment) -> None + super(Toctree, self).__init__(env) + + self.tocs = env.tocs + self.toc_num_entries = env.toc_num_entries + self.toc_secnumbers = env.toc_secnumbers + self.toc_fignumbers = env.toc_fignumbers + self.toctree_includes = env.toctree_includes + self.files_to_rebuild = env.files_to_rebuild + self.glob_toctrees = env.glob_toctrees + self.numbered_toctrees = env.numbered_toctrees + + def clear_doc(self, docname): + # type: (unicode) -> None + self.tocs.pop(docname, None) + self.toc_secnumbers.pop(docname, None) + self.toc_fignumbers.pop(docname, None) + self.toc_num_entries.pop(docname, None) + self.toctree_includes.pop(docname, None) + self.glob_toctrees.discard(docname) + self.numbered_toctrees.discard(docname) + + for subfn, fnset in list(self.files_to_rebuild.items()): + fnset.discard(docname) + if not fnset: + del self.files_to_rebuild[subfn] + + def merge_other(self, docnames, other): + # type: (List[unicode], BuildEnvironment) -> None + for docname in docnames: + self.tocs[docname] = other.tocs[docname] + self.toc_num_entries[docname] = other.toc_num_entries[docname] + if docname in other.toctree_includes: + self.toctree_includes[docname] = other.toctree_includes[docname] + if docname in other.glob_toctrees: + self.glob_toctrees.add(docname) + if docname in other.numbered_toctrees: + self.numbered_toctrees.add(docname) + + for subfn, fnset in other.files_to_rebuild.items(): + self.files_to_rebuild.setdefault(subfn, set()).update(fnset & docnames) + + def process_doc(self, docname, doctree): + # type: (unicode, nodes.Node) -> None + """Build a TOC from the doctree and store it in the inventory.""" + numentries = [0] # nonlocal again... + + def traverse_in_section(node, cls): + """Like traverse(), but stay within the same section.""" + result = [] + if isinstance(node, cls): + result.append(node) + for child in node.children: + if isinstance(child, nodes.section): + continue + result.extend(traverse_in_section(child, cls)) + return result + + def build_toc(node, depth=1): + entries = [] + for sectionnode in node: + # find all toctree nodes in this section and add them + # to the toc (just copying the toctree node which is then + # resolved in self.get_and_resolve_doctree) + if isinstance(sectionnode, addnodes.only): + onlynode = addnodes.only(expr=sectionnode['expr']) + blist = build_toc(sectionnode, depth) + if blist: + onlynode += blist.children + entries.append(onlynode) + continue + if not isinstance(sectionnode, nodes.section): + for toctreenode in traverse_in_section(sectionnode, + addnodes.toctree): + item = toctreenode.copy() + entries.append(item) + # important: do the inventory stuff + self.note_toctree(docname, toctreenode) + continue + title = sectionnode[0] + # copy the contents of the section title, but without references + # and unnecessary stuff + visitor = SphinxContentsFilter(doctree) + title.walkabout(visitor) + nodetext = visitor.get_entry_text() + if not numentries[0]: + # for the very first toc entry, don't add an anchor + # as it is the file's title anyway + anchorname = '' + else: + anchorname = '#' + sectionnode['ids'][0] + numentries[0] += 1 + # make these nodes: + # list_item -> compact_paragraph -> reference + reference = nodes.reference( + '', '', internal=True, refuri=docname, + anchorname=anchorname, *nodetext) + para = addnodes.compact_paragraph('', '', reference) + item = nodes.list_item('', para) + sub_item = build_toc(sectionnode, depth + 1) + item += sub_item + entries.append(item) + if entries: + return nodes.bullet_list('', *entries) + return [] + toc = build_toc(doctree) + if toc: + self.tocs[docname] = toc + else: + self.tocs[docname] = nodes.bullet_list('') + self.toc_num_entries[docname] = numentries[0] + + def note_toctree(self, docname, toctreenode): + # type: (unicode, addnodes.toctree) -> None + """Note a TOC tree directive in a document and gather information about + file relations from it. + """ + if toctreenode['glob']: + self.glob_toctrees.add(docname) + if toctreenode.get('numbered'): + self.numbered_toctrees.add(docname) + includefiles = toctreenode['includefiles'] + for includefile in includefiles: + # note that if the included file is rebuilt, this one must be + # too (since the TOC of the included file could have changed) + self.files_to_rebuild.setdefault(includefile, set()).add(docname) + self.toctree_includes.setdefault(docname, []).extend(includefiles) + + def get_toc_for(self, docname, builder): + # type: (unicode, Builder) -> None + """Return a TOC nodetree -- for use on the same page only!""" + tocdepth = self.env.metadata[docname].get('tocdepth', 0) + try: + toc = self.tocs[docname].deepcopy() + self._toctree_prune(toc, 2, tocdepth) + except KeyError: + # the document does not exist anymore: return a dummy node that + # renders to nothing + return nodes.paragraph() + process_only_nodes(toc, builder.tags, warn_node=self.env.warn_node) + for node in toc.traverse(nodes.reference): + node['refuri'] = node['anchorname'] or '#' + return toc + + def get_toctree_for(self, docname, builder, collapse, **kwds): + # type: (unicode, Builder, bool, Any) -> nodes.Node + """Return the global TOC nodetree.""" + doctree = self.env.get_doctree(self.env.config.master_doc) + toctrees = [] + if 'includehidden' not in kwds: + kwds['includehidden'] = True + if 'maxdepth' not in kwds: + kwds['maxdepth'] = 0 + kwds['collapse'] = collapse + for toctreenode in doctree.traverse(addnodes.toctree): + toctree = self.env.resolve_toctree(docname, builder, toctreenode, + prune=True, **kwds) + if toctree: + toctrees.append(toctree) + if not toctrees: + return None + result = toctrees[0] + for toctree in toctrees[1:]: + result.extend(toctree.children) + return result + + def resolve_toctree(self, docname, builder, toctree, prune=True, maxdepth=0, + titles_only=False, collapse=False, includehidden=False): + # type: (unicode, Builder, addnodes.toctree, bool, int, bool, bool, bool) -> nodes.Node + """Resolve a *toctree* node into individual bullet lists with titles + as items, returning None (if no containing titles are found) or + a new node. + + If *prune* is True, the tree is pruned to *maxdepth*, or if that is 0, + to the value of the *maxdepth* option on the *toctree* node. + If *titles_only* is True, only toplevel document titles will be in the + resulting tree. + If *collapse* is True, all branches not containing docname will + be collapsed. + """ + if toctree.get('hidden', False) and not includehidden: + return None + + # For reading the following two helper function, it is useful to keep + # in mind the node structure of a toctree (using HTML-like node names + # for brevity): + # + # <ul> + # <li> + # <p><a></p> + # <p><a></p> + # ... + # <ul> + # ... + # </ul> + # </li> + # </ul> + # + # The transformation is made in two passes in order to avoid + # interactions between marking and pruning the tree (see bug #1046). + + toctree_ancestors = self.get_toctree_ancestors(docname) + + def _toctree_add_classes(node, depth): + """Add 'toctree-l%d' and 'current' classes to the toctree.""" + for subnode in node.children: + if isinstance(subnode, (addnodes.compact_paragraph, + nodes.list_item)): + # for <p> and <li>, indicate the depth level and recurse + subnode['classes'].append('toctree-l%d' % (depth-1)) + _toctree_add_classes(subnode, depth) + elif isinstance(subnode, nodes.bullet_list): + # for <ul>, just recurse + _toctree_add_classes(subnode, depth+1) + elif isinstance(subnode, nodes.reference): + # for <a>, identify which entries point to the current + # document and therefore may not be collapsed + if subnode['refuri'] == docname: + if not subnode['anchorname']: + # give the whole branch a 'current' class + # (useful for styling it differently) + branchnode = subnode + while branchnode: + branchnode['classes'].append('current') + branchnode = branchnode.parent + # mark the list_item as "on current page" + if subnode.parent.parent.get('iscurrent'): + # but only if it's not already done + return + while subnode: + subnode['iscurrent'] = True + subnode = subnode.parent + + def _entries_from_toctree(toctreenode, parents, + separate=False, subtree=False): + """Return TOC entries for a toctree node.""" + refs = [(e[0], e[1]) for e in toctreenode['entries']] + entries = [] + for (title, ref) in refs: + try: + refdoc = None + if url_re.match(ref): + if title is None: + title = ref + reference = nodes.reference('', '', internal=False, + refuri=ref, anchorname='', + *[nodes.Text(title)]) + para = addnodes.compact_paragraph('', '', reference) + item = nodes.list_item('', para) + toc = nodes.bullet_list('', item) + elif ref == 'self': + # 'self' refers to the document from which this + # toctree originates + ref = toctreenode['parent'] + if not title: + title = clean_astext(self.titles[ref]) + reference = nodes.reference('', '', internal=True, + refuri=ref, + anchorname='', + *[nodes.Text(title)]) + para = addnodes.compact_paragraph('', '', reference) + item = nodes.list_item('', para) + # don't show subitems + toc = nodes.bullet_list('', item) + else: + if ref in parents: + self.env.warn(ref, 'circular toctree references ' + 'detected, ignoring: %s <- %s' % + (ref, ' <- '.join(parents))) + continue + refdoc = ref + toc = self.tocs[ref].deepcopy() + maxdepth = self.env.metadata[ref].get('tocdepth', 0) + if ref not in toctree_ancestors or (prune and maxdepth > 0): + self._toctree_prune(toc, 2, maxdepth, collapse) + process_only_nodes(toc, builder.tags, warn_node=self.env.warn_node) + if title and toc.children and len(toc.children) == 1: + child = toc.children[0] + for refnode in child.traverse(nodes.reference): + if refnode['refuri'] == ref and \ + not refnode['anchorname']: + refnode.children = [nodes.Text(title)] + if not toc.children: + # empty toc means: no titles will show up in the toctree + self.env.warn_node( + 'toctree contains reference to document %r that ' + 'doesn\'t have a title: no link will be generated' + % ref, toctreenode) + except KeyError: + # this is raised if the included file does not exist + self.env.warn_node( + 'toctree contains reference to nonexisting document %r' + % ref, toctreenode) + else: + # if titles_only is given, only keep the main title and + # sub-toctrees + if titles_only: + # delete everything but the toplevel title(s) + # and toctrees + for toplevel in toc: + # nodes with length 1 don't have any children anyway + if len(toplevel) > 1: + subtrees = toplevel.traverse(addnodes.toctree) + if subtrees: + toplevel[1][:] = subtrees + else: + toplevel.pop(1) + # resolve all sub-toctrees + for subtocnode in toc.traverse(addnodes.toctree): + if not (subtocnode.get('hidden', False) and + not includehidden): + i = subtocnode.parent.index(subtocnode) + 1 + for item in _entries_from_toctree( + subtocnode, [refdoc] + parents, + subtree=True): + subtocnode.parent.insert(i, item) + i += 1 + subtocnode.parent.remove(subtocnode) + if separate: + entries.append(toc) + else: + entries.extend(toc.children) + if not subtree and not separate: + ret = nodes.bullet_list() + ret += entries + return [ret] + return entries + + maxdepth = maxdepth or toctree.get('maxdepth', -1) + if not titles_only and toctree.get('titlesonly', False): + titles_only = True + if not includehidden and toctree.get('includehidden', False): + includehidden = True + + # NOTE: previously, this was separate=True, but that leads to artificial + # separation when two or more toctree entries form a logical unit, so + # separating mode is no longer used -- it's kept here for history's sake + tocentries = _entries_from_toctree(toctree, [], separate=False) + if not tocentries: + return None + + newnode = addnodes.compact_paragraph('', '') + caption = toctree.attributes.get('caption') + if caption: + caption_node = nodes.caption(caption, '', *[nodes.Text(caption)]) + caption_node.line = toctree.line + caption_node.source = toctree.source + caption_node.rawsource = toctree['rawcaption'] + if hasattr(toctree, 'uid'): + # move uid to caption_node to translate it + caption_node.uid = toctree.uid + del toctree.uid + newnode += caption_node + newnode.extend(tocentries) + newnode['toctree'] = True + + # prune the tree to maxdepth, also set toc depth and current classes + _toctree_add_classes(newnode, 1) + self._toctree_prune(newnode, 1, prune and maxdepth or 0, collapse) + + if len(newnode[-1]) == 0: # No titles found + return None + + # set the target paths in the toctrees (they are not known at TOC + # generation time) + for refnode in newnode.traverse(nodes.reference): + if not url_re.match(refnode['refuri']): + refnode['refuri'] = builder.get_relative_uri( + docname, refnode['refuri']) + refnode['anchorname'] + return newnode + + def get_toctree_ancestors(self, docname): + # type: (unicode) -> List[unicode] + parent = {} + for p, children in iteritems(self.toctree_includes): + for child in children: + parent[child] = p + ancestors = [] # type: List[unicode] + d = docname + while d in parent and d not in ancestors: + ancestors.append(d) + d = parent[d] + return ancestors + + def _toctree_prune(self, node, depth, maxdepth, collapse=False): + # type: (nodes.Node, int, int, bool) -> None + """Utility: Cut a TOC at a specified depth.""" + for subnode in node.children[:]: + if isinstance(subnode, (addnodes.compact_paragraph, + nodes.list_item)): + # for <p> and <li>, just recurse + self._toctree_prune(subnode, depth, maxdepth, collapse) + elif isinstance(subnode, nodes.bullet_list): + # for <ul>, determine if the depth is too large or if the + # entry is to be collapsed + if maxdepth > 0 and depth > maxdepth: + subnode.parent.replace(subnode, []) + else: + # cull sub-entries whose parents aren't 'current' + if (collapse and depth > 1 and + 'iscurrent' not in subnode.parent): + subnode.parent.remove(subnode) + else: + # recurse on visible children + self._toctree_prune(subnode, depth+1, maxdepth, collapse) + + def assign_section_numbers(self): + # type: () -> List[unicode] + """Assign a section number to each heading under a numbered toctree.""" + # a list of all docnames whose section numbers changed + rewrite_needed = [] + + assigned = set() # type: Set[unicode] + old_secnumbers = self.toc_secnumbers + self.toc_secnumbers = self.env.toc_secnumbers = {} + + def _walk_toc(node, secnums, depth, titlenode=None): + # titlenode is the title of the document, it will get assigned a + # secnumber too, so that it shows up in next/prev/parent rellinks + for subnode in node.children: + if isinstance(subnode, nodes.bullet_list): + numstack.append(0) + _walk_toc(subnode, secnums, depth-1, titlenode) + numstack.pop() + titlenode = None + elif isinstance(subnode, nodes.list_item): + _walk_toc(subnode, secnums, depth, titlenode) + titlenode = None + elif isinstance(subnode, addnodes.only): + # at this stage we don't know yet which sections are going + # to be included; just include all of them, even if it leads + # to gaps in the numbering + _walk_toc(subnode, secnums, depth, titlenode) + titlenode = None + elif isinstance(subnode, addnodes.compact_paragraph): + numstack[-1] += 1 + if depth > 0: + number = tuple(numstack) + else: + number = None + secnums[subnode[0]['anchorname']] = \ + subnode[0]['secnumber'] = number + if titlenode: + titlenode['secnumber'] = number + titlenode = None + elif isinstance(subnode, addnodes.toctree): + _walk_toctree(subnode, depth) + + def _walk_toctree(toctreenode, depth): + if depth == 0: + return + for (title, ref) in toctreenode['entries']: + if url_re.match(ref) or ref == 'self' or ref in assigned: + # don't mess with those + continue + if ref in self.tocs: + secnums = self.toc_secnumbers[ref] = {} + assigned.add(ref) + _walk_toc(self.tocs[ref], secnums, depth, + self.env.titles.get(ref)) + if secnums != old_secnumbers.get(ref): + rewrite_needed.append(ref) + + for docname in self.numbered_toctrees: + assigned.add(docname) + doctree = self.env.get_doctree(docname) + for toctreenode in doctree.traverse(addnodes.toctree): + depth = toctreenode.get('numbered', 0) + if depth: + # every numbered toctree gets new numbering + numstack = [0] + _walk_toctree(toctreenode, depth) + + return rewrite_needed + + def assign_figure_numbers(self): + # type: () -> List[unicode] + """Assign a figure number to each figure under a numbered toctree.""" + + rewrite_needed = [] + + assigned = set() # type: Set[unicode] + old_fignumbers = self.toc_fignumbers + self.toc_fignumbers = self.env.toc_fignumbers = {} + fignum_counter = {} # type: Dict[unicode, Dict[Tuple[int], int]] + + def get_section_number(docname, section): + anchorname = '#' + section['ids'][0] + secnumbers = self.toc_secnumbers.get(docname, {}) + if anchorname in secnumbers: + secnum = secnumbers.get(anchorname) + else: + secnum = secnumbers.get('') + + return secnum or tuple() + + def get_next_fignumber(figtype, secnum): + counter = fignum_counter.setdefault(figtype, {}) + + secnum = secnum[:self.env.config.numfig_secnum_depth] + counter[secnum] = counter.get(secnum, 0) + 1 + return secnum + (counter[secnum],) + + def register_fignumber(docname, secnum, figtype, fignode): + self.toc_fignumbers.setdefault(docname, {}) + fignumbers = self.toc_fignumbers[docname].setdefault(figtype, {}) + figure_id = fignode['ids'][0] + + fignumbers[figure_id] = get_next_fignumber(figtype, secnum) + + def _walk_doctree(docname, doctree, secnum): + for subnode in doctree.children: + if isinstance(subnode, nodes.section): + next_secnum = get_section_number(docname, subnode) + if next_secnum: + _walk_doctree(docname, subnode, next_secnum) + else: + _walk_doctree(docname, subnode, secnum) + continue + elif isinstance(subnode, addnodes.toctree): + for title, subdocname in subnode['entries']: + if url_re.match(subdocname) or subdocname == 'self': + # don't mess with those + continue + + _walk_doc(subdocname, secnum) + + continue + + figtype = self.env.get_domain('std').get_figtype(subnode) # type: ignore + if figtype and subnode['ids']: + register_fignumber(docname, secnum, figtype, subnode) + + _walk_doctree(docname, subnode, secnum) + + def _walk_doc(docname, secnum): + if docname not in assigned: + assigned.add(docname) + doctree = self.env.get_doctree(docname) + _walk_doctree(docname, doctree, secnum) + + if self.env.config.numfig: + _walk_doc(self.env.config.master_doc, tuple()) + for docname, fignums in iteritems(self.toc_fignumbers): + if fignums != old_fignumbers.get(docname): + rewrite_needed.append(docname) + + return rewrite_needed diff --git a/sphinx/errors.py b/sphinx/errors.py index 6761e87f634..5fb77a13586 100644 --- a/sphinx/errors.py +++ b/sphinx/errors.py @@ -6,7 +6,7 @@ Contains SphinxError and a few subclasses (in an extra module to avoid circular import problems). - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -67,7 +67,10 @@ def __str__(self): return res -class SphinxParallelError(Exception): +class SphinxParallelError(SphinxError): + + category = 'Sphinx parallel build error' + def __init__(self, orig_exc, traceback): self.orig_exc = orig_exc self.traceback = traceback diff --git a/sphinx/ext/__init__.py b/sphinx/ext/__init__.py index 62c6416c38b..776250c4de4 100644 --- a/sphinx/ext/__init__.py +++ b/sphinx/ext/__init__.py @@ -5,6 +5,6 @@ Contains Sphinx features not activated by default. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py index 99540a838e8..9bd8579ae92 100644 --- a/sphinx/ext/autodoc.py +++ b/sphinx/ext/autodoc.py @@ -7,7 +7,7 @@ the doctree, thus avoiding duplication between docstrings and documentation for those who like elaborate docstrings. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -17,8 +17,9 @@ import traceback from types import FunctionType, BuiltinFunctionType, MethodType -from six import iteritems, itervalues, text_type, class_types, string_types, \ - StringIO +from six import PY2, iterkeys, iteritems, itervalues, text_type, class_types, \ + string_types, StringIO + from docutils import nodes from docutils.utils import assemble_option_dict from docutils.statemachine import ViewList @@ -31,14 +32,29 @@ from sphinx.util.nodes import nested_parse_with_titles from sphinx.util.compat import Directive from sphinx.util.inspect import getargspec, isdescriptor, safe_getmembers, \ - safe_getattr, object_description, is_builtin_class_method + safe_getattr, object_description, is_builtin_class_method, isenumattribute from sphinx.util.docstrings import prepare_docstring +if False: + # For type annotation + from typing import Any, Callable, Iterator, Sequence, Tuple, Type, Union # NOQA + from types import ModuleType # NOQA + from docutils.utils import Reporter # NOQA + from sphinx.application import Sphinx # NOQA + try: - import typing + if sys.version_info >= (3,): + import typing + else: + typing = None # type: ignore except ImportError: typing = None +# This type isn't exposed directly in any modules, but can be found +# here in most Python versions +MethodDescriptorType = type(type.__subclasses__) + + #: extended signature RE: with explicit module name separated by :: py_ext_sig_re = re.compile( r'''^ ([\w.]+::)? # explicit module name @@ -53,28 +69,33 @@ class DefDict(dict): """A dict that returns a default on nonexisting keys.""" def __init__(self, default): + # type: (Any) -> None dict.__init__(self) self.default = default def __getitem__(self, key): + # type: (Any) -> Any try: return dict.__getitem__(self, key) except KeyError: return self.default def __bool__(self): + # type: () -> bool # docutils check "if option_spec" return True __nonzero__ = __bool__ # for python2 compatibility def identity(x): + # type: (Any) -> Any return x class Options(dict): """A dict/attribute hybrid that returns None on nonexisting keys.""" def __getattr__(self, name): + # type: (unicode) -> Any try: return self[name.replace('_', '-')] except KeyError: @@ -83,19 +104,30 @@ def __getattr__(self, name): class _MockModule(object): """Used by autodoc_mock_imports.""" + __file__ = '/dev/null' + __path__ = '/dev/null' + def __init__(self, *args, **kwargs): - pass + # type: (Any, Any) -> None + self.__all__ = [] # type: List[str] def __call__(self, *args, **kwargs): + # type: (Any, Any) -> _MockModule + if args and type(args[0]) in [FunctionType, MethodType]: + # Appears to be a decorator, pass through unchanged + return args[0] return _MockModule() + def _append_submodule(self, submod): + # type: (str) -> None + self.__all__.append(submod) + @classmethod def __getattr__(cls, name): - if name in ('__file__', '__path__'): - return '/dev/null' - elif name[0] == name[0].upper(): + # type: (unicode) -> Any + if name[0] == name[0].upper(): # Not very good, we assume Uppercase names are classes... - mocktype = type(name, (), {}) + mocktype = type(name, (), {}) # type: ignore mocktype.__module__ = __name__ return mocktype else: @@ -103,12 +135,16 @@ def __getattr__(cls, name): def mock_import(modname): + # type: (str) -> None if '.' in modname: pkg, _n, mods = modname.rpartition('.') mock_import(pkg) - mod = _MockModule() - sys.modules[modname] = mod - return mod + if isinstance(sys.modules[pkg], _MockModule): + sys.modules[pkg]._append_submodule(mods) # type: ignore + + if modname not in sys.modules: + mod = _MockModule() + sys.modules[modname] = mod # type: ignore ALL = object() @@ -116,6 +152,7 @@ def mock_import(modname): def members_option(arg): + # type: (Any) -> Union[object, List[unicode]] """Used to convert the :members: option to auto directives.""" if arg is None: return ALL @@ -123,15 +160,18 @@ def members_option(arg): def members_set_option(arg): + # type: (Any) -> Union[object, Set[unicode]] """Used to convert the :members: option to auto directives.""" if arg is None: return ALL return set(x.strip() for x in arg.split(',')) + SUPPRESS = object() def annotation_option(arg): + # type: (Any) -> Any if arg is None: # suppress showing the representation of the object return SUPPRESS @@ -140,6 +180,7 @@ def annotation_option(arg): def bool_option(arg): + # type: (Any) -> bool """Used to convert flag options to auto directives. (Instead of directives.flag(), which returns None). """ @@ -152,13 +193,16 @@ class AutodocReporter(object): and line number to a system message, as recorded in a ViewList. """ def __init__(self, viewlist, reporter): + # type: (ViewList, Reporter) -> None self.viewlist = viewlist self.reporter = reporter def __getattr__(self, name): + # type: (unicode) -> Any return getattr(self.reporter, name) def system_message(self, level, message, *children, **kwargs): + # type: (int, unicode, Any, Any) -> nodes.system_message if 'line' in kwargs and 'source' not in kwargs: try: source, line = self.viewlist.items[kwargs['line']] @@ -171,25 +215,31 @@ def system_message(self, level, message, *children, **kwargs): *children, **kwargs) def debug(self, *args, **kwargs): + # type: (Any, Any) -> nodes.system_message if self.reporter.debug_flag: return self.system_message(0, *args, **kwargs) def info(self, *args, **kwargs): + # type: (Any, Any) -> nodes.system_message return self.system_message(1, *args, **kwargs) def warning(self, *args, **kwargs): + # type: (Any, Any) -> nodes.system_message return self.system_message(2, *args, **kwargs) def error(self, *args, **kwargs): + # type: (Any, Any) -> nodes.system_message return self.system_message(3, *args, **kwargs) def severe(self, *args, **kwargs): + # type: (Any, Any) -> nodes.system_message return self.system_message(4, *args, **kwargs) # Some useful event listener factories for autodoc-process-docstring. def cut_lines(pre, post=0, what=None): + # type: (int, int, unicode) -> Callable """Return a listener that removes the first *pre* and last *post* lines of every docstring. If *what* is a sequence of strings, only docstrings of a type in *what* will be processed. @@ -202,6 +252,7 @@ def cut_lines(pre, post=0, what=None): This can (and should) be used in place of :confval:`automodule_skip_lines`. """ def process(app, what_, name, obj, options, lines): + # type: (Sphinx, unicode, unicode, Any, Any, List[unicode]) -> None if what and what_ not in what: return del lines[:pre] @@ -217,6 +268,7 @@ def process(app, what_, name, obj, options, lines): def between(marker, what=None, keepempty=False, exclude=False): + # type: (unicode, Sequence[unicode], bool, bool) -> Callable """Return a listener that either keeps, or if *exclude* is True excludes, lines between lines that match the *marker* regular expression. If no line matches, the resulting docstring would be empty, so no change will be made @@ -228,6 +280,7 @@ def between(marker, what=None, keepempty=False, exclude=False): marker_re = re.compile(marker) def process(app, what_, name, obj, options, lines): + # type: (Sphinx, unicode, unicode, Any, Any, List[unicode]) -> None if what and what_ not in what: return deleted = 0 @@ -251,6 +304,7 @@ def process(app, what_, name, obj, options, lines): def format_annotation(annotation): + # type: (Any) -> str """Return formatted representation of a type annotation. Show qualified names for types and additional details for types from @@ -258,20 +312,36 @@ def format_annotation(annotation): Displaying complex types from ``typing`` relies on its private API. """ - qualified_name = (annotation.__module__ + '.' + annotation.__qualname__ - if annotation else repr(annotation)) - + if typing and isinstance(annotation, typing.TypeVar): # type: ignore + return annotation.__name__ + if annotation == Ellipsis: + return '...' if not isinstance(annotation, type): return repr(annotation) - elif annotation.__module__ == 'builtins': - return annotation.__qualname__ + + qualified_name = (annotation.__module__ + '.' + annotation.__qualname__ # type: ignore + if annotation else repr(annotation)) + + if annotation.__module__ == 'builtins': + return annotation.__qualname__ # type: ignore elif typing: - if isinstance(annotation, typing.TypeVar): - return annotation.__name__ - elif hasattr(typing, 'GenericMeta') and \ - isinstance(annotation, typing.GenericMeta) and \ - hasattr(annotation, '__parameters__'): - params = annotation.__parameters__ + if hasattr(typing, 'GenericMeta') and \ + isinstance(annotation, typing.GenericMeta): + # In Python 3.5.2+, all arguments are stored in __args__, + # whereas __parameters__ only contains generic parameters. + # + # Prior to Python 3.5.2, __args__ is not available, and all + # arguments are in __parameters__. + params = None + if hasattr(annotation, '__args__'): + if annotation.__args__ is None or len(annotation.__args__) <= 2: + params = annotation.__args__ + else: # typing.Callable + args = ', '.join(format_annotation(a) for a in annotation.__args__[:-1]) + result = format_annotation(annotation.__args__[-1]) + return '%s[[%s], %s]' % (qualified_name, args, result) + elif hasattr(annotation, '__parameters__'): + params = annotation.__parameters__ if params is not None: param_str = ', '.join(format_annotation(p) for p in params) return '%s[%s]' % (qualified_name, param_str) @@ -284,10 +354,13 @@ def format_annotation(annotation): return '%s[%s]' % (qualified_name, param_str) elif hasattr(typing, 'CallableMeta') and \ isinstance(annotation, typing.CallableMeta) and \ - hasattr(annotation, '__args__') and \ + getattr(annotation, '__args__', None) is not None and \ hasattr(annotation, '__result__'): + # Skipped in the case of plain typing.Callable args = annotation.__args__ - if args is Ellipsis: + if args is None: + return qualified_name + elif args is Ellipsis: args_str = '...' else: formatted_args = (format_annotation(a) for a in args) @@ -311,6 +384,7 @@ def format_annotation(annotation): def formatargspec(function, args, varargs=None, varkw=None, defaults=None, kwonlyargs=(), kwonlydefaults={}, annotations={}): + # type: (Callable, Tuple[str, ...], str, str, Any, Tuple, Dict, Dict[str, Any]) -> str """Return a string representation of an ``inspect.FullArgSpec`` tuple. An enhanced version of ``inspect.formatargspec()`` that handles typing @@ -318,18 +392,20 @@ def formatargspec(function, args, varargs=None, varkw=None, defaults=None, """ def format_arg_with_annotation(name): + # type: (str) -> str if name in annotations: return '%s: %s' % (name, format_annotation(get_annotation(name))) return name def get_annotation(name): + # type: (str) -> str value = annotations[name] if isinstance(value, string_types): return introspected_hints.get(name, value) else: return value - introspected_hints = (typing.get_type_hints(function) + introspected_hints = (typing.get_type_hints(function) # type: ignore if typing and hasattr(function, '__code__') else {}) fd = StringIO() @@ -343,20 +419,22 @@ def get_annotation(name): arg_fd.write(format_arg_with_annotation(arg)) if defaults and i >= defaults_start: arg_fd.write(' = ' if arg in annotations else '=') - arg_fd.write(object_description(defaults[i - defaults_start])) + arg_fd.write(object_description(defaults[i - defaults_start])) # type: ignore formatted.append(arg_fd.getvalue()) if varargs: formatted.append('*' + format_arg_with_annotation(varargs)) if kwonlyargs: - formatted.append('*') + if not varargs: + formatted.append('*') + for kwarg in kwonlyargs: arg_fd = StringIO() arg_fd.write(format_arg_with_annotation(kwarg)) if kwonlydefaults and kwarg in kwonlydefaults: arg_fd.write(' = ' if kwarg in annotations else '=') - arg_fd.write(object_description(kwonlydefaults[kwarg])) + arg_fd.write(object_description(kwonlydefaults[kwarg])) # type: ignore formatted.append(arg_fd.getvalue()) if varkw: @@ -403,6 +481,7 @@ class Documenter(object): @staticmethod def get_attr(obj, name, *defargs): + # type: (Any, unicode, Any) -> Any """getattr() override for types such as Zope interfaces.""" for typ, func in iteritems(AutoDirective._special_attrgetters): if isinstance(obj, typ): @@ -411,10 +490,12 @@ def get_attr(obj, name, *defargs): @classmethod def can_document_member(cls, member, membername, isattr, parent): + # type: (Any, unicode, bool, Any) -> bool """Called to see if a member can be documented by this documenter.""" raise NotImplementedError('must be implemented in subclasses') def __init__(self, directive, name, indent=u''): + # type: (Directive, unicode, unicode) -> None self.directive = directive self.env = directive.env self.options = directive.genopt @@ -422,27 +503,29 @@ def __init__(self, directive, name, indent=u''): self.indent = indent # the module and object path within the module, and the fully # qualified name (all set after resolve_name succeeds) - self.modname = None - self.module = None - self.objpath = None - self.fullname = None + self.modname = None # type: str + self.module = None # type: ModuleType + self.objpath = None # type: List[unicode] + self.fullname = None # type: unicode # extra signature items (arguments and return annotation, # also set after resolve_name succeeds) - self.args = None - self.retann = None + self.args = None # type: unicode + self.retann = None # type: unicode # the object to document (set after import_object succeeds) - self.object = None - self.object_name = None + self.object = None # type: Any + self.object_name = None # type: unicode # the parent/owner of the object to document - self.parent = None + self.parent = None # type: Any # the module analyzer to get at attribute docs, or None - self.analyzer = None + self.analyzer = None # type: Any def add_line(self, line, source, *lineno): + # type: (unicode, unicode, int) -> None """Append one line of generated reST to the output.""" self.directive.result.append(self.indent + line, source, *lineno) def resolve_name(self, modname, parents, path, base): + # type: (str, Any, str, Any) -> Tuple[str, List[unicode]] """Resolve the module and name of the object to document given by the arguments and the current module/class. @@ -453,6 +536,7 @@ def resolve_name(self, modname, parents, path, base): raise NotImplementedError('must be implemented in subclasses') def parse_name(self): + # type: () -> bool """Determine what module to import and what attribute to document. Returns True and sets *self.modname*, *self.objpath*, *self.fullname*, @@ -463,7 +547,7 @@ def parse_name(self): # an autogenerated one try: explicit_modname, path, base, args, retann = \ - py_ext_sig_re.match(self.name).groups() + py_ext_sig_re.match(self.name).groups() # type: ignore except AttributeError: self.directive.warn('invalid signature for auto%s (%r)' % (self.objtype, self.name)) @@ -477,8 +561,7 @@ def parse_name(self): modname = None parents = [] - self.modname, self.objpath = \ - self.resolve_name(modname, parents, path, base) + self.modname, self.objpath = self.resolve_name(modname, parents, path, base) if not self.modname: return False @@ -490,6 +573,7 @@ def parse_name(self): return True def import_object(self): + # type: () -> bool """Import the object given by *self.modname* and *self.objpath* and set it as *self.object*. @@ -502,7 +586,7 @@ def import_object(self): try: dbg('[autodoc] import %s', self.modname) for modname in self.env.config.autodoc_mock_imports: - dbg('[autodoc] adding a mock module %s!', self.modname) + dbg('[autodoc] adding a mock module %s!', modname) mock_import(modname) __import__(self.modname) parent = None @@ -532,12 +616,15 @@ def import_object(self): else: errmsg += '; the following exception was raised:\n%s' % \ traceback.format_exc() + if PY2: + errmsg = errmsg.decode('utf-8') # type: ignore dbg(errmsg) self.directive.warn(errmsg) self.env.note_reread() return False def get_real_modname(self): + # type: () -> str """Get the real module name of an object to document. It can differ from the name of the module through which the object was @@ -546,6 +633,7 @@ def get_real_modname(self): return self.get_attr(self.object, '__module__', None) or self.modname def check_module(self): + # type: () -> bool """Check if *self.object* is really defined in the module given by *self.modname*. """ @@ -558,6 +646,7 @@ def check_module(self): return True def format_args(self): + # type: () -> unicode """Format the argument signature of *self.object*. Should return None if the object does not have a signature. @@ -565,6 +654,7 @@ def format_args(self): return None def format_name(self): + # type: () -> unicode """Format the name of *self.object*. This normally should be something that can be parsed by the generated @@ -576,13 +666,14 @@ def format_name(self): return '.'.join(self.objpath) or self.modname def format_signature(self): + # type: () -> unicode """Format the signature (arguments and return annotation) of the object. Let the user process it via the ``autodoc-process-signature`` event. """ if self.args is not None: # signature given explicitly - args = "(%s)" % self.args + args = "(%s)" % self.args # type: unicode else: # try to introspect the signature try: @@ -606,6 +697,7 @@ def format_signature(self): return '' def add_directive_header(self, sig): + # type: (unicode) -> None """Add the directive header and options to the generated content.""" domain = getattr(self, 'domain', 'py') directive = getattr(self, 'directivetype', self.objtype) @@ -621,6 +713,7 @@ def add_directive_header(self, sig): self.add_line(u' :module: %s' % self.modname, sourcename) def get_doc(self, encoding=None, ignore=1): + # type: (unicode, int) -> List[List[unicode]] """Decode and return lines of the docstring(s) for the object.""" docstring = self.get_attr(self.object, '__doc__', None) # make sure we have Unicode docstrings, then sanitize and split @@ -634,6 +727,7 @@ def get_doc(self, encoding=None, ignore=1): return [] def process_doc(self, docstrings): + # type: (List[List[unicode]]) -> Iterator[unicode] """Let the user process the docstrings before adding them.""" for docstringlines in docstrings: if self.env.app: @@ -645,6 +739,7 @@ def process_doc(self, docstrings): yield line def get_sourcename(self): + # type: () -> unicode if self.analyzer: # prevent encoding errors when the file name is non-ASCII if not isinstance(self.analyzer.srcname, text_type): @@ -656,6 +751,7 @@ def get_sourcename(self): return u'docstring of %s' % self.fullname def add_content(self, more_content, no_docstring=False): + # type: (Any, bool) -> None """Add content from docstrings, attribute documentation and user.""" # set sourcename and add content from attribute documentation sourcename = self.get_sourcename() @@ -687,6 +783,7 @@ def add_content(self, more_content, no_docstring=False): self.add_line(line, src[0], src[1]) def get_object_members(self, want_all): + # type: (bool) -> Tuple[bool, List[Tuple[unicode, object]]] """Return `(members_check_module, members)` where `members` is a list of `(membername, member)` pairs of the members of *self.object*. @@ -720,7 +817,7 @@ def get_object_members(self, want_all): # __dict__ contains only the members directly defined in # the class (but get them via getattr anyway, to e.g. get # unbound method objects instead of function objects); - # using keys() because apparently there are objects for which + # using list(iterkeys()) because apparently there are objects for which # __dict__ changes while getting attributes try: obj_dict = self.get_attr(self.object, '__dict__') @@ -728,7 +825,7 @@ def get_object_members(self, want_all): members = [] else: members = [(mname, self.get_attr(self.object, mname, None)) - for mname in obj_dict.keys()] + for mname in list(iterkeys(obj_dict))] membernames = set(m[0] for m in members) # add instance attributes from the analyzer for aname in analyzed_member_names: @@ -738,6 +835,7 @@ def get_object_members(self, want_all): return False, sorted(members) def filter_members(self, members, want_all): + # type: (List[Tuple[unicode, Any]], bool) -> List[Tuple[unicode, Any, bool]] """Filter the given member list. Members are skipped if @@ -820,6 +918,7 @@ def filter_members(self, members, want_all): return ret def document_members(self, all_members=False): + # type: (bool) -> None """Generate reST for member documentation. If *all_members* is True, do all members, else those given by @@ -836,7 +935,7 @@ def document_members(self, all_members=False): members_check_module, members = self.get_object_members(want_all) # document non-skipped members - memberdocumenters = [] + memberdocumenters = [] # type: List[Tuple[Documenter, bool]] for (mname, member, isattr) in self.filter_members(members, want_all): classes = [cls for cls in itervalues(AutoDirective._registry) if cls.can_document_member(member, mname, isattr, self)] @@ -877,6 +976,7 @@ def keyfunc(entry): def generate(self, more_content=None, real_modname=None, check_module=False, all_members=False): + # type: (Any, str, bool, bool) -> None """Generate reST for the object given by *self.name*, and possibly for its members. @@ -970,15 +1070,18 @@ class ModuleDocumenter(Documenter): @classmethod def can_document_member(cls, member, membername, isattr, parent): + # type: (Any, unicode, bool, Any) -> bool # don't document submodules automatically return False def resolve_name(self, modname, parents, path, base): + # type: (str, Any, str, Any) -> Tuple[str, List[unicode]] if modname is not None: self.directive.warn('"::" in automodule name doesn\'t make sense') return (path or '') + base, [] def parse_name(self): + # type: () -> bool ret = Documenter.parse_name(self) if self.args or self.retann: self.directive.warn('signature arguments or return annotation ' @@ -986,6 +1089,7 @@ def parse_name(self): return ret def add_directive_header(self, sig): + # type: (unicode) -> None Documenter.add_directive_header(self, sig) sourcename = self.get_sourcename() @@ -1001,6 +1105,7 @@ def add_directive_header(self, sig): self.add_line(u' :deprecated:', sourcename) def get_object_members(self, want_all): + # type: (bool) -> Tuple[bool, List[Tuple[unicode, object]]] if want_all: if not hasattr(self.object, '__all__'): # for implicit module members, check __module__ to avoid @@ -1037,6 +1142,7 @@ class ModuleLevelDocumenter(Documenter): classes, data/constants). """ def resolve_name(self, modname, parents, path, base): + # type: (str, Any, str, Any) -> Tuple[str, List[unicode]] if modname is None: if path: modname = path.rstrip('.') @@ -1057,6 +1163,7 @@ class ClassLevelDocumenter(Documenter): attributes). """ def resolve_name(self, modname, parents, path, base): + # type: (str, Any, str, Any) -> Tuple[str, List[unicode]] if modname is None: if path: mod_cls = path.rstrip('.') @@ -1090,6 +1197,7 @@ class DocstringSignatureMixin(object): """ def _find_signature(self, encoding=None): + # type: (unicode) -> Tuple[str, str] docstrings = self.get_doc(encoding) self._new_docstrings = docstrings[:] result = None @@ -1098,12 +1206,12 @@ def _find_signature(self, encoding=None): if not doclines: continue # match first line of docstring against signature RE - match = py_ext_sig_re.match(doclines[0]) + match = py_ext_sig_re.match(doclines[0]) # type: ignore if not match: continue exmod, path, base, args, retann = match.groups() # the base name must match ours - valid_names = [self.objpath[-1]] + valid_names = [self.objpath[-1]] # type: ignore if isinstance(self, ClassDocumenter): valid_names.append('__init__') if hasattr(self.object, '__mro__'): @@ -1118,19 +1226,21 @@ def _find_signature(self, encoding=None): return result def get_doc(self, encoding=None, ignore=1): + # type: (unicode, int) -> List[List[unicode]] lines = getattr(self, '_new_docstrings', None) if lines is not None: return lines - return Documenter.get_doc(self, encoding, ignore) + return Documenter.get_doc(self, encoding, ignore) # type: ignore def format_signature(self): - if self.args is None and self.env.config.autodoc_docstring_signature: + # type: () -> unicode + if self.args is None and self.env.config.autodoc_docstring_signature: # type: ignore # only act if a signature is not explicitly given already, and if # the feature is enabled result = self._find_signature() if result is not None: self.args, self.retann = result - return Documenter.format_signature(self) + return Documenter.format_signature(self) # type: ignore class DocstringStripSignatureMixin(DocstringSignatureMixin): @@ -1139,7 +1249,8 @@ class DocstringStripSignatureMixin(DocstringSignatureMixin): feature of stripping any function signature from the docstring. """ def format_signature(self): - if self.args is None and self.env.config.autodoc_docstring_signature: + # type: () -> unicode + if self.args is None and self.env.config.autodoc_docstring_signature: # type: ignore # only act if a signature is not explicitly given already, and if # the feature is enabled result = self._find_signature() @@ -1148,10 +1259,10 @@ def format_signature(self): # DocstringSignatureMixin.format_signature. # Documenter.format_signature use self.args value to format. _args, self.retann = result - return Documenter.format_signature(self) + return Documenter.format_signature(self) # type: ignore -class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): +class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type: ignore """ Specialized Documenter subclass for functions. """ @@ -1160,9 +1271,11 @@ class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): @classmethod def can_document_member(cls, member, membername, isattr, parent): + # type: (Any, unicode, bool, Any) -> bool return isinstance(member, (FunctionType, BuiltinFunctionType)) def format_args(self): + # type: () -> unicode if inspect.isbuiltin(self.object) or \ inspect.ismethoddescriptor(self.object): # cannot introspect arguments of a C function or method @@ -1189,10 +1302,11 @@ def format_args(self): return args def document_members(self, all_members=False): + # type: (bool) -> None pass -class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): +class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): # type: ignore """ Specialized Documenter subclass for classes. """ @@ -1208,9 +1322,11 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): @classmethod def can_document_member(cls, member, membername, isattr, parent): + # type: (Any, unicode, bool, Any) -> bool return isinstance(member, class_types) def import_object(self): + # type: () -> Any ret = ModuleLevelDocumenter.import_object(self) # if the class is documented under another name, document it # as data/attribute @@ -1222,6 +1338,7 @@ def import_object(self): return ret def format_args(self): + # type: () -> unicode # for classes, the relevant signature is the __init__ method's initmeth = self.get_attr(self.object, '__init__', None) # classes without __init__ method, default __init__ or @@ -1241,12 +1358,14 @@ def format_args(self): return formatargspec(initmeth, *argspec) def format_signature(self): + # type: () -> unicode if self.doc_as_attr: return '' return DocstringSignatureMixin.format_signature(self) def add_directive_header(self, sig): + # type: (unicode) -> None if self.doc_as_attr: self.directivetype = 'attribute' Documenter.add_directive_header(self, sig) @@ -1260,10 +1379,11 @@ def add_directive_header(self, sig): u':class:`%s`' % b.__name__ or u':class:`%s.%s`' % (b.__module__, b.__name__) for b in self.object.__bases__] - self.add_line(_(u' Bases: %s') % ', '.join(bases), + self.add_line(u' ' + _(u'Bases: %s') % ', '.join(bases), sourcename) def get_doc(self, encoding=None, ignore=1): + # type: (unicode, int) -> List[List[unicode]] lines = getattr(self, '_new_docstrings', None) if lines is not None: return lines @@ -1285,6 +1405,15 @@ def get_doc(self, encoding=None, ignore=1): (initdocstring == object.__init__.__doc__ or # for pypy initdocstring.strip() == object.__init__.__doc__)): # for !pypy initdocstring = None + if not initdocstring: + # try __new__ + initdocstring = self.get_attr( + self.get_attr(self.object, '__new__', None), '__doc__') + # for new-style classes, no __new__ means default __new__ + if (initdocstring is not None and + (initdocstring == object.__new__.__doc__ or # for pypy + initdocstring.strip() == object.__new__.__doc__)): # for !pypy + initdocstring = None if initdocstring: if content == 'init': docstrings = [initdocstring] @@ -1292,12 +1421,15 @@ def get_doc(self, encoding=None, ignore=1): docstrings.append(initdocstring) doc = [] for docstring in docstrings: - if not isinstance(docstring, text_type): - docstring = force_decode(docstring, encoding) - doc.append(prepare_docstring(docstring)) + if isinstance(docstring, text_type): + doc.append(prepare_docstring(docstring, ignore)) + elif isinstance(docstring, str): # this will not trigger on Py3 + doc.append(prepare_docstring(force_decode(docstring, encoding), + ignore)) return doc def add_content(self, more_content, no_docstring=False): + # type: (Any, bool) -> None if self.doc_as_attr: classname = safe_getattr(self.object, '__name__', None) if classname: @@ -1309,6 +1441,7 @@ def add_content(self, more_content, no_docstring=False): ModuleLevelDocumenter.add_content(self, more_content) def document_members(self, all_members=False): + # type: (bool) -> None if self.doc_as_attr: return ModuleLevelDocumenter.document_members(self, all_members) @@ -1326,8 +1459,9 @@ class ExceptionDocumenter(ClassDocumenter): @classmethod def can_document_member(cls, member, membername, isattr, parent): + # type: (Any, unicode, bool, Any) -> bool return isinstance(member, class_types) and \ - issubclass(member, BaseException) + issubclass(member, BaseException) # type: ignore class DataDocumenter(ModuleLevelDocumenter): @@ -1342,9 +1476,11 @@ class DataDocumenter(ModuleLevelDocumenter): @classmethod def can_document_member(cls, member, membername, isattr, parent): + # type: (Any, unicode, bool, Any) -> bool return isinstance(parent, ModuleDocumenter) and isattr def add_directive_header(self, sig): + # type: (unicode) -> None ModuleLevelDocumenter.add_directive_header(self, sig) sourcename = self.get_sourcename() if not self.options.annotation: @@ -1361,10 +1497,11 @@ def add_directive_header(self, sig): sourcename) def document_members(self, all_members=False): + # type: (bool) -> None pass -class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): +class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): # type: ignore """ Specialized Documenter subclass for methods (normal, static and class). """ @@ -1374,10 +1511,12 @@ class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): @classmethod def can_document_member(cls, member, membername, isattr, parent): + # type: (Any, unicode, bool, Any) -> bool return inspect.isroutine(member) and \ not isinstance(parent, ModuleDocumenter) def import_object(self): + # type: () -> Any ret = ClassLevelDocumenter.import_object(self) if not ret: return ret @@ -1385,11 +1524,11 @@ def import_object(self): # to distinguish classmethod/staticmethod obj = self.parent.__dict__.get(self.object_name) - if isinstance(obj, classmethod): + if isinstance(obj, classmethod): # type: ignore self.directivetype = 'classmethod' # document class and static members before ordinary ones self.member_order = self.member_order - 1 - elif isinstance(obj, staticmethod): + elif isinstance(obj, staticmethod): # type: ignore self.directivetype = 'staticmethod' # document class and static members before ordinary ones self.member_order = self.member_order - 1 @@ -1398,6 +1537,7 @@ def import_object(self): return ret def format_args(self): + # type: () -> unicode if inspect.isbuiltin(self.object) or \ inspect.ismethoddescriptor(self.object): # can never get arguments of a C function or method @@ -1411,10 +1551,11 @@ def format_args(self): return args def document_members(self, all_members=False): + # type: (bool) -> None pass -class AttributeDocumenter(DocstringStripSignatureMixin, ClassLevelDocumenter): +class AttributeDocumenter(DocstringStripSignatureMixin, ClassLevelDocumenter): # type: ignore """ Specialized Documenter subclass for attributes. """ @@ -1431,19 +1572,27 @@ class AttributeDocumenter(DocstringStripSignatureMixin, ClassLevelDocumenter): @classmethod def can_document_member(cls, member, membername, isattr, parent): + # type: (Any, unicode, bool, Any) -> bool + non_attr_types = cls.method_types + (type, MethodDescriptorType) isdatadesc = isdescriptor(member) and not \ - isinstance(member, cls.method_types) and not \ - type(member).__name__ in ("type", "method_descriptor", - "instancemethod") + isinstance(member, non_attr_types) and not \ + type(member).__name__ == "instancemethod" + # That last condition addresses an obscure case of C-defined + # methods using a deprecated type in Python 3, that is not otherwise + # exported anywhere by Python return isdatadesc or (not isinstance(parent, ModuleDocumenter) and not inspect.isroutine(member) and not isinstance(member, class_types)) def document_members(self, all_members=False): + # type: (bool) -> None pass def import_object(self): + # type: () -> Any ret = ClassLevelDocumenter.import_object(self) + if isenumattribute(self.object): + self.object = self.object.value if isdescriptor(self.object) and \ not isinstance(self.object, self.method_types): self._datadescriptor = True @@ -1453,10 +1602,12 @@ def import_object(self): return ret def get_real_modname(self): + # type: () -> str return self.get_attr(self.parent or self.object, '__module__', None) \ or self.modname def add_directive_header(self, sig): + # type: (unicode) -> None ClassLevelDocumenter.add_directive_header(self, sig) sourcename = self.get_sourcename() if not self.options.annotation: @@ -1474,6 +1625,7 @@ def add_directive_header(self, sig): sourcename) def add_content(self, more_content, no_docstring=False): + # type: (Any, bool) -> None if not self._datadescriptor: # if it's not a data descriptor, its docstring is very probably the # wrong thing to display @@ -1495,10 +1647,12 @@ class InstanceAttributeDocumenter(AttributeDocumenter): @classmethod def can_document_member(cls, member, membername, isattr, parent): + # type: (Any, unicode, bool, Any) -> bool """This documents only INSTANCEATTR members.""" return isattr and (member is INSTANCEATTR) def import_object(self): + # type: () -> bool """Never import anything.""" # disguise as an attribute self.objtype = 'attribute' @@ -1506,6 +1660,7 @@ def import_object(self): return True def add_content(self, more_content, no_docstring=False): + # type: (Any, bool) -> None """Never try to get a docstring from the object.""" AttributeDocumenter.add_content(self, more_content, no_docstring=True) @@ -1526,10 +1681,10 @@ class AutoDirective(Directive): attributes of the parents. """ # a registry of objtype -> documenter class - _registry = {} + _registry = {} # type: Dict[unicode, Type[Documenter]] # a registry of type -> getattr function - _special_attrgetters = {} + _special_attrgetters = {} # type: Dict[Type, Callable] # flags that can be given in autodoc_default_flags _default_flags = set([ @@ -1547,13 +1702,16 @@ class AutoDirective(Directive): option_spec = DefDict(identity) def warn(self, msg): + # type: (unicode) -> None self.warnings.append(self.reporter.warning(msg, line=self.lineno)) def run(self): - self.filename_set = set() # a set of dependent filenames + # type: () -> List[nodes.Node] + self.filename_set = set() # type: Set[unicode] + # a set of dependent filenames self.reporter = self.state.document.reporter self.env = self.state.document.settings.env - self.warnings = [] + self.warnings = [] # type: List[unicode] self.result = ViewList() try: @@ -1617,6 +1775,7 @@ def run(self): def add_documenter(cls): + # type: (Type[Documenter]) -> None """Register a new Documenter.""" if not issubclass(cls, Documenter): raise ExtensionError('autodoc documenter %r must be a subclass ' @@ -1629,6 +1788,7 @@ def add_documenter(cls): def setup(app): + # type: (Sphinx) -> Dict[unicode, Any] app.add_autodocumenter(ModuleDocumenter) app.add_autodocumenter(ClassDocumenter) app.add_autodocumenter(ExceptionDocumenter) diff --git a/sphinx/ext/autosectionlabel.py b/sphinx/ext/autosectionlabel.py new file mode 100644 index 00000000000..be769eb85e0 --- /dev/null +++ b/sphinx/ext/autosectionlabel.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +""" + sphinx.ext.autosectionlabel + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Allow reference sections by :ref: role using its title. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from docutils import nodes +from sphinx.util.nodes import clean_astext + + +def register_sections_as_label(app, document): + labels = app.env.domaindata['std']['labels'] + anonlabels = app.env.domaindata['std']['anonlabels'] + for node in document.traverse(nodes.section): + name = nodes.fully_normalize_name(node[0].astext()) + labelid = node['ids'][0] + docname = app.env.docname + sectname = clean_astext(node[0]) + + if name in labels: + app.env.warn_node('duplicate label %s, ' % name + 'other instance ' + 'in ' + app.env.doc2path(labels[name][0]), node) + + anonlabels[name] = docname, labelid + labels[name] = docname, labelid, sectname + + +def setup(app): + app.connect('doctree-read', register_sections_as_label) diff --git a/sphinx/ext/autosummary/__init__.py b/sphinx/ext/autosummary/__init__.py index a53b125d576..88662321779 100644 --- a/sphinx/ext/autosummary/__init__.py +++ b/sphinx/ext/autosummary/__init__.py @@ -49,7 +49,7 @@ resolved to a Python object, and otherwise it becomes simple emphasis. This can be used as the default role to make links 'smart'. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -58,19 +58,30 @@ import sys import inspect import posixpath +from six import string_types from types import ModuleType from six import text_type + from docutils.parsers.rst import directives from docutils.statemachine import ViewList from docutils import nodes import sphinx from sphinx import addnodes +from sphinx.util import import_object, rst from sphinx.util.compat import Directive from sphinx.pycode import ModuleAnalyzer, PycodeError from sphinx.ext.autodoc import Options +if False: + # For type annotation + from typing import Any, Tuple, Type, Union # NOQA + from docutils.utils import Inliner # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.environment import BuildEnvironment # NOQA + from sphinx.ext.autodoc import Documenter # NOQA + # -- autosummary_toc node ------------------------------------------------------ @@ -79,6 +90,7 @@ class autosummary_toc(nodes.comment): def process_autosummary_toc(app, doctree): + # type: (Sphinx, nodes.Node) -> None """Insert items described in autosummary:: to the TOC tree, but do not generate the toctree:: list. """ @@ -103,11 +115,13 @@ def crawl_toc(node, depth=1): def autosummary_toc_visit_html(self, node): + # type: (nodes.NodeVisitor, autosummary_toc) -> None """Hide autosummary toctree list in HTML output.""" raise nodes.SkipNode def autosummary_noop(self, node): + # type: (nodes.NodeVisitor, nodes.Node) -> None pass @@ -118,6 +132,7 @@ class autosummary_table(nodes.comment): def autosummary_table_visit_html(self, node): + # type: (nodes.NodeVisitor, autosummary_table) -> None """Make the first column of the table non-breaking.""" try: tbody = node[0][0][-1] @@ -135,12 +150,13 @@ def autosummary_table_visit_html(self, node): # -- autodoc integration ------------------------------------------------------- -class FakeDirective: - env = {} +class FakeDirective(object): + env = {} # type: Dict genopt = Options() def get_documenter(obj, parent): + # type: (Any, Any) -> Type[Documenter] """Get an autodoc.Documenter class suitable for documenting the given object. @@ -196,13 +212,15 @@ class Autosummary(Directive): } def warn(self, msg): + # type: (unicode) -> None self.warnings.append(self.state.document.reporter.warning( msg, line=self.lineno)) def run(self): + # type: () -> List[nodes.Node] self.env = env = self.state.document.settings.env self.genopt = Options() - self.warnings = [] + self.warnings = [] # type: List[nodes.Node] self.result = ViewList() names = [x.strip().split()[0] for x in self.content @@ -235,6 +253,7 @@ def run(self): return self.warnings + nodes def get_items(self, names): + # type: (List[unicode]) -> List[Tuple[unicode, unicode, unicode, unicode]] """Try to import the given names, and return a list of ``[(name, signature, summary_string, real_name), ...]``. """ @@ -242,7 +261,7 @@ def get_items(self, names): prefixes = get_import_prefixes_from_env(env) - items = [] + items = [] # type: List[Tuple[unicode, unicode, unicode, unicode]] max_item_chars = 50 @@ -332,12 +351,13 @@ def get_items(self, names): return items def get_table(self, items): + # type: (List[Tuple[unicode, unicode, unicode, unicode]]) -> List[Union[addnodes.tabular_col_spec, autosummary_table]] # NOQA """Generate a proper list of table nodes for autosummary:: directive. *items* is a list produced by :meth:`get_items`. """ table_spec = addnodes.tabular_col_spec() - table_spec['spec'] = 'll' + table_spec['spec'] = 'p{0.5\linewidth}p{0.5\linewidth}' table = autosummary_table('') real_table = nodes.table('', classes=['longtable']) @@ -350,6 +370,7 @@ def get_table(self, items): group.append(body) def append_row(*column_texts): + # type: (unicode) -> None row = nodes.row('') for text in column_texts: node = nodes.paragraph('') @@ -367,7 +388,7 @@ def append_row(*column_texts): for name, sig, summary, real_name in items: qualifier = 'obj' if 'nosignatures' not in self.options: - col1 = ':%s:`%s <%s>`\ %s' % (qualifier, name, real_name, sig) + col1 = ':%s:`%s <%s>`\ %s' % (qualifier, name, real_name, rst.escape(sig)) # type: unicode # NOQA else: col1 = ':%s:`%s <%s>`' % (qualifier, name, real_name) col2 = summary @@ -377,6 +398,7 @@ def append_row(*column_texts): def mangle_signature(sig, max_chars=30): + # type: (unicode, int) -> unicode """Reformat a function signature to a more compact form.""" s = re.sub(r"^\((.*)\)$", r"\1", sig).strip() @@ -386,12 +408,12 @@ def mangle_signature(sig, max_chars=30): s = re.sub(r"'[^']*'", "", s) # Parse the signature to arguments + options - args = [] - opts = [] + args = [] # type: List[unicode] + opts = [] # type: List[unicode] opt_re = re.compile(r"^(.*, |)([a-zA-Z0-9_*]+)=") while s: - m = opt_re.search(s) + m = opt_re.search(s) # type: ignore if not m: # The rest are arguments args = s.split(', ') @@ -413,6 +435,7 @@ def mangle_signature(sig, max_chars=30): def limited_join(sep, items, max_chars=30, overflow_marker="..."): + # type: (unicode, List[unicode], int, unicode) -> unicode """Join a number of strings to one, limiting the length to *max_chars*. If the string overflows this limit, replace the last fitting item by @@ -439,11 +462,12 @@ def limited_join(sep, items, max_chars=30, overflow_marker="..."): # -- Importing items ----------------------------------------------------------- def get_import_prefixes_from_env(env): + # type: (BuildEnvironment) -> List """ Obtain current Python import prefixes (for `import_by_name`) from ``document.env`` """ - prefixes = [None] + prefixes = [None] # type: List currmodule = env.ref_context.get('py:module') if currmodule: @@ -460,6 +484,7 @@ def get_import_prefixes_from_env(env): def import_by_name(name, prefixes=[None]): + # type: (unicode, List) -> Tuple[unicode, Any, Any, unicode] """Import a Python object that has the given *name*, under one of the *prefixes*. The first name that succeeds is used. """ @@ -478,6 +503,7 @@ def import_by_name(name, prefixes=[None]): def _import_by_name(name): + # type: (str) -> Tuple[Any, Any, unicode] """Import a Python object given its full name.""" try: name_parts = name.split('.') @@ -522,6 +548,7 @@ def _import_by_name(name): def autolink_role(typ, rawtext, etext, lineno, inliner, options={}, content=[]): + # type: (unicode, unicode, unicode, int, Inliner, Dict, List[unicode]) -> Tuple[List[nodes.Node], List[nodes.Node]] # NOQA """Smart linking role. Expands to ':obj:`text`' if `text` is an object that can be imported; @@ -537,12 +564,32 @@ def autolink_role(typ, rawtext, etext, lineno, inliner, name, obj, parent, modname = import_by_name(pnode['reftarget'], prefixes) except ImportError: content = pnode[0] - r[0][0] = nodes.emphasis(rawtext, content[0].astext(), - classes=content['classes']) + r[0][0] = nodes.emphasis(rawtext, content[0].astext(), # type: ignore + classes=content['classes']) # type: ignore return r +def get_rst_suffix(app): + # type: (Sphinx) -> unicode + def get_supported_format(suffix): + # type: (unicode) -> Tuple[unicode] + parser_class = app.config.source_parsers.get(suffix) + if parser_class is None: + return ('restructuredtext',) + if isinstance(parser_class, string_types): + parser_class = import_object(parser_class, 'source parser') # type: ignore + return parser_class.supported + + suffix = None # type: unicode + for suffix in app.config.source_suffix: # type: ignore + if 'restructuredtext' in get_supported_format(suffix): + return suffix + + return None + + def process_generate_options(app): + # type: (Sphinx) -> None genfiles = app.config.autosummary_generate if genfiles and not hasattr(genfiles, '__len__'): @@ -555,16 +602,23 @@ def process_generate_options(app): from sphinx.ext.autosummary.generate import generate_autosummary_docs - ext = app.config.source_suffix[0] - genfiles = [genfile + (not genfile.endswith(ext) and ext or '') + ext = app.config.source_suffix + genfiles = [genfile + (not genfile.endswith(tuple(ext)) and ext[0] or '') for genfile in genfiles] + suffix = get_rst_suffix(app) + if suffix is None: + app.warn('autosummary generats .rst files internally. ' + 'But your source_suffix does not contain .rst. Skipped.') + return + generate_autosummary_docs(genfiles, builder=app.builder, - warn=app.warn, info=app.info, suffix=ext, + warn=app.warn, info=app.info, suffix=suffix, base_path=app.srcdir) def setup(app): + # type: (Sphinx) -> Dict[unicode, Any] # I need autodoc app.setup_extension('sphinx.ext.autodoc') app.add_node(autosummary_toc, @@ -583,5 +637,5 @@ def setup(app): app.add_role('autolink', autolink_role) app.connect('doctree-read', process_autosummary_toc) app.connect('builder-inited', process_generate_options) - app.add_config_value('autosummary_generate', [], True) + app.add_config_value('autosummary_generate', [], True, [bool]) return {'version': sphinx.__display_version__, 'parallel_read_safe': True} diff --git a/sphinx/ext/autosummary/generate.py b/sphinx/ext/autosummary/generate.py index 2cacadfd776..3e81a14a256 100644 --- a/sphinx/ext/autosummary/generate.py +++ b/sphinx/ext/autosummary/generate.py @@ -14,7 +14,7 @@ generate: sphinx-autogen -o source/generated source/*.rst - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import print_function @@ -49,8 +49,16 @@ add_documenter(AttributeDocumenter) add_documenter(InstanceAttributeDocumenter) +if False: + # For type annotation + from typing import Any, Callable, Tuple # NOQA + from sphinx import addnodes # NOQA + from sphinx.builders import Builder # NOQA + from sphinx.environment import BuildEnvironment # NOQA + def main(argv=sys.argv): + # type: (List[str]) -> None usage = """%prog [OPTIONS] SOURCEFILE ...""" p = optparse.OptionParser(usage.strip()) p.add_option("-o", "--output-dir", action="store", type="string", @@ -73,10 +81,12 @@ def main(argv=sys.argv): def _simple_info(msg): + # type: (unicode) -> None print(msg) def _simple_warn(msg): + # type: (unicode) -> None print('WARNING: ' + msg, file=sys.stderr) @@ -85,6 +95,7 @@ def _simple_warn(msg): def generate_autosummary_docs(sources, output_dir=None, suffix='.rst', warn=_simple_warn, info=_simple_info, base_path=None, builder=None, template_dir=None): + # type: (List[unicode], unicode, unicode, Callable, Callable, unicode, Builder, unicode) -> None # NOQA showed_sources = list(sorted(sources)) if len(showed_sources) > 20: @@ -99,6 +110,7 @@ def generate_autosummary_docs(sources, output_dir=None, suffix='.rst', sources = [os.path.join(base_path, filename) for filename in sources] # create our own templating environment + template_dirs = None # type: List[unicode] template_dirs = [os.path.join(package_dir, 'ext', 'autosummary', 'templates')] if builder is not None: @@ -154,7 +166,8 @@ def generate_autosummary_docs(sources, output_dir=None, suffix='.rst', template = template_env.get_template('autosummary/base.rst') def get_members(obj, typ, include_public=[]): - items = [] + # type: (Any, unicode, List[unicode]) -> Tuple[List[unicode], List[unicode]] + items = [] # type: List[unicode] for name in dir(obj): try: documenter = get_documenter(safe_getattr(obj, name), @@ -167,7 +180,7 @@ def get_members(obj, typ, include_public=[]): if x in include_public or not x.startswith('_')] return public, items - ns = {} + ns = {} # type: Dict[unicode, Any] if doc.objtype == 'module': ns['members'] = dir(obj) @@ -215,21 +228,23 @@ def get_members(obj, typ, include_public=[]): # -- Finding documented entries in files --------------------------------------- def find_autosummary_in_files(filenames): + # type: (List[unicode]) -> List[Tuple[unicode, unicode, unicode]] """Find out what items are documented in source/*.rst. See `find_autosummary_in_lines`. """ - documented = [] + documented = [] # type: List[Tuple[unicode, unicode, unicode]] for filename in filenames: - with codecs.open(filename, 'r', encoding='utf-8', + with codecs.open(filename, 'r', encoding='utf-8', # type: ignore errors='ignore') as f: lines = f.read().splitlines() - documented.extend(find_autosummary_in_lines(lines, + documented.extend(find_autosummary_in_lines(lines, # type: ignore filename=filename)) return documented def find_autosummary_in_docstring(name, module=None, filename=None): + # type: (unicode, Any, unicode) -> List[Tuple[unicode, unicode, unicode]] """Find out what items are documented in the given object's docstring. See `find_autosummary_in_lines`. @@ -249,6 +264,7 @@ def find_autosummary_in_docstring(name, module=None, filename=None): def find_autosummary_in_lines(lines, module=None, filename=None): + # type: (List[unicode], Any, unicode) -> List[Tuple[unicode, unicode, unicode]] """Find out what items appear in autosummary:: directives in the given lines. @@ -268,9 +284,9 @@ def find_autosummary_in_lines(lines, module=None, filename=None): toctree_arg_re = re.compile(r'^\s+:toctree:\s*(.*?)\s*$') template_arg_re = re.compile(r'^\s+:template:\s*(.*?)\s*$') - documented = [] + documented = [] # type: List[Tuple[unicode, unicode, unicode]] - toctree = None + toctree = None # type: unicode template = None current_module = module in_autosummary = False @@ -278,7 +294,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None): for line in lines: if in_autosummary: - m = toctree_arg_re.match(line) + m = toctree_arg_re.match(line) # type: ignore if m: toctree = m.group(1) if filename: @@ -286,7 +302,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None): toctree) continue - m = template_arg_re.match(line) + m = template_arg_re.match(line) # type: ignore if m: template = m.group(1).strip() continue @@ -294,7 +310,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None): if line.strip().startswith(':'): continue # skip options - m = autosummary_item_re.match(line) + m = autosummary_item_re.match(line) # type: ignore if m: name = m.group(1).strip() if name.startswith('~'): @@ -310,7 +326,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None): in_autosummary = False - m = autosummary_re.match(line) + m = autosummary_re.match(line) # type: ignore if m: in_autosummary = True base_indent = m.group(1) @@ -318,7 +334,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None): template = None continue - m = automodule_re.search(line) + m = automodule_re.search(line) # type: ignore if m: current_module = m.group(1).strip() # recurse into the automodule docstring @@ -326,7 +342,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None): current_module, filename=filename)) continue - m = module_re.match(line) + m = module_re.match(line) # type: ignore if m: current_module = m.group(2) continue diff --git a/sphinx/ext/coverage.py b/sphinx/ext/coverage.py index c564aeedd96..11e017f699f 100644 --- a/sphinx/ext/coverage.py +++ b/sphinx/ext/coverage.py @@ -6,7 +6,7 @@ Check Python modules and C API for coverage. Mostly written by Josip Dzolonga for the Google Highly Open Participation contest. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -22,14 +22,21 @@ from sphinx.builders import Builder from sphinx.util.inspect import safe_getattr +if False: + # For type annotation + from typing import Any, Callable, IO, Pattern, Tuple # NOQA + from sphinx.application import Sphinx # NOQA + # utility def write_header(f, text, char='-'): + # type:(IO, unicode, unicode) -> None f.write(text + '\n') f.write(char * len(text) + '\n') def compile_regex_list(name, exps, warnfunc): + # type: (unicode, unicode, Callable) -> List[Pattern] lst = [] for exp in exps: try: @@ -44,19 +51,20 @@ class CoverageBuilder(Builder): name = 'coverage' def init(self): - self.c_sourcefiles = [] + # type: () -> None + self.c_sourcefiles = [] # type: List[unicode] for pattern in self.config.coverage_c_path: pattern = path.join(self.srcdir, pattern) self.c_sourcefiles.extend(glob.glob(pattern)) - self.c_regexes = [] + self.c_regexes = [] # type: List[Tuple[unicode, Pattern]] for (name, exp) in self.config.coverage_c_regexes.items(): try: self.c_regexes.append((name, re.compile(exp))) except Exception: self.warn('invalid regex %r in coverage_c_regexes' % exp) - self.c_ignorexps = {} + self.c_ignorexps = {} # type: Dict[unicode, List[Pattern]] for (name, exps) in iteritems(self.config.coverage_ignore_c_items): self.c_ignorexps[name] = compile_regex_list( 'coverage_ignore_c_items', exps, self.warn) @@ -71,45 +79,45 @@ def init(self): self.warn) def get_outdated_docs(self): + # type: () -> unicode return 'coverage overview' def write(self, *ignored): - self.py_undoc = {} + # type: (Any) -> None + self.py_undoc = {} # type: Dict[unicode, Dict[unicode, Any]] self.build_py_coverage() self.write_py_coverage() - self.c_undoc = {} + self.c_undoc = {} # type: Dict[unicode, Set[Tuple[unicode, unicode]]] self.build_c_coverage() self.write_c_coverage() def build_c_coverage(self): + # type: () -> None # Fetch all the info from the header files c_objects = self.env.domaindata['c']['objects'] for filename in self.c_sourcefiles: undoc = set() - f = open(filename, 'r') - try: + with open(filename, 'r') as f: for line in f: for key, regex in self.c_regexes: match = regex.match(line) if match: name = match.groups()[0] if name not in c_objects: - for exp in self.c_ignorexps.get(key, ()): + for exp in self.c_ignorexps.get(key, []): if exp.match(name): break else: undoc.add((key, name)) continue - finally: - f.close() if undoc: self.c_undoc[filename] = undoc def write_c_coverage(self): + # type: () -> None output_file = path.join(self.outdir, 'c.txt') - op = open(output_file, 'w') - try: + with open(output_file, 'w') as op: if self.config.coverage_write_headline: write_header(op, 'Undocumented C API elements', '=') op.write('\n') @@ -119,10 +127,9 @@ def write_c_coverage(self): for typ, name in sorted(undoc): op.write(' * %-50s [%9s]\n' % (name, typ)) op.write('\n') - finally: - op.close() def build_py_coverage(self): + # type: () -> None objects = self.env.domaindata['py']['objects'] modules = self.env.domaindata['py']['modules'] @@ -146,7 +153,7 @@ def build_py_coverage(self): continue funcs = [] - classes = {} + classes = {} # type: Dict[unicode, List[unicode]] for name, obj in inspect.getmembers(mod): # diverse module attributes are ignored: @@ -183,7 +190,7 @@ def build_py_coverage(self): classes[name] = [] continue - attrs = [] + attrs = [] # type: List[unicode] for attr_name in dir(obj): if attr_name not in obj.__dict__: @@ -213,10 +220,10 @@ def build_py_coverage(self): self.py_undoc[mod_name] = {'funcs': funcs, 'classes': classes} def write_py_coverage(self): + # type: () -> None output_file = path.join(self.outdir, 'python.txt') - op = open(output_file, 'w') failed = [] - try: + with open(output_file, 'w') as op: if self.config.coverage_write_headline: write_header(op, 'Undocumented Python objects', '=') keys = sorted(self.py_undoc.keys()) @@ -247,20 +254,17 @@ def write_py_coverage(self): if failed: write_header(op, 'Modules that failed to import') op.writelines(' * %s -- %s\n' % x for x in failed) - finally: - op.close() def finish(self): + # type: () -> None # dump the coverage data to a pickle file too picklepath = path.join(self.outdir, 'undoc.pickle') - dumpfile = open(picklepath, 'wb') - try: + with open(picklepath, 'wb') as dumpfile: pickle.dump((self.py_undoc, self.c_undoc), dumpfile) - finally: - dumpfile.close() def setup(app): + # type: (Sphinx) -> Dict[unicode, Any] app.add_builder(CoverageBuilder) app.add_config_value('coverage_ignore_modules', [], False) app.add_config_value('coverage_ignore_functions', [], False) diff --git a/sphinx/ext/doctest.py b/sphinx/ext/doctest.py index e22024d426d..31ccb22d976 100644 --- a/sphinx/ext/doctest.py +++ b/sphinx/ext/doctest.py @@ -6,7 +6,7 @@ Mimic doctest by automatically executing code snippets and checking their results. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import absolute_import @@ -19,6 +19,7 @@ import doctest from six import itervalues, StringIO, binary_type, text_type, PY2 + from docutils import nodes from docutils.parsers.rst import directives @@ -27,14 +28,20 @@ from sphinx.util import force_decode from sphinx.util.nodes import set_source_info from sphinx.util.compat import Directive -from sphinx.util.console import bold +from sphinx.util.console import bold # type: ignore from sphinx.util.osutil import fs_encoding +if False: + # For type annotation + from typing import Any, Callable, IO, Iterable, Sequence, Tuple # NOQA + from sphinx.application import Sphinx # NOQA + blankline_re = re.compile(r'^\s*<BLANKLINE>', re.MULTILINE) doctestopt_re = re.compile(r'#\s*doctest:.+$', re.MULTILINE) if PY2: def doctest_encode(text, encoding): + # type: (str, unicode) -> unicode if isinstance(text, text_type): text = text.encode(encoding) if text.startswith(codecs.BOM_UTF8): @@ -42,17 +49,10 @@ def doctest_encode(text, encoding): return text else: def doctest_encode(text, encoding): + # type: (unicode, unicode) -> unicode return text -class _SpoofOutSphinx(doctest._SpoofOut): - # override: convert console encoding to unicode - if PY2: - def getvalue(self): - result = doctest._SpoofOut.getvalue(self) - return result.decode('string_escape') - - # set up the necessary directives class TestDirective(Directive): @@ -66,6 +66,7 @@ class TestDirective(Directive): final_argument_whitespace = True def run(self): + # type: () -> List[nodes.Node] # use ordinary docutils nodes for test code: they get special attributes # so that our builder recognizes them, and the other builders are happy. code = '\n'.join(self.content) @@ -100,20 +101,20 @@ def run(self): option_strings = self.options['options'].replace(',', ' ').split() for option in option_strings: if (option[0] not in '+-' or option[1:] not in - doctest.OPTIONFLAGS_BY_NAME): + doctest.OPTIONFLAGS_BY_NAME): # type: ignore # XXX warn? continue - flag = doctest.OPTIONFLAGS_BY_NAME[option[1:]] + flag = doctest.OPTIONFLAGS_BY_NAME[option[1:]] # type: ignore node['options'][flag] = (option[0] == '+') return [node] class TestsetupDirective(TestDirective): - option_spec = {} + option_spec = {} # type: Dict class TestcleanupDirective(TestDirective): - option_spec = {} + option_spec = {} # type: Dict class DoctestDirective(TestDirective): @@ -136,19 +137,21 @@ class TestoutputDirective(TestDirective): } -parser = doctest.DocTestParser() +parser = doctest.DocTestParser() # type: ignore # helper classes class TestGroup(object): def __init__(self, name): + # type: (unicode) -> None self.name = name - self.setup = [] - self.tests = [] - self.cleanup = [] + self.setup = [] # type: List[TestCode] + self.tests = [] # type: List[List[TestCode]] + self.cleanup = [] # type: List[TestCode] def add_code(self, code, prepend=False): + # type: (TestCode, bool) -> None if code.type == 'testsetup': if prepend: self.setup.insert(0, code) @@ -166,35 +169,34 @@ def add_code(self, code, prepend=False): else: raise RuntimeError('invalid TestCode type') - def __repr__(self): + def __repr__(self): # type: ignore + # type: () -> unicode return 'TestGroup(name=%r, setup=%r, cleanup=%r, tests=%r)' % ( self.name, self.setup, self.cleanup, self.tests) class TestCode(object): def __init__(self, code, type, lineno, options=None): + # type: (unicode, unicode, int, Dict) -> None self.code = code self.type = type self.lineno = lineno self.options = options or {} - def __repr__(self): + def __repr__(self): # type: ignore + # type: () -> unicode return 'TestCode(%r, %r, %r, options=%r)' % ( self.code, self.type, self.lineno, self.options) -class SphinxDocTestRunner(doctest.DocTestRunner): - def __init__(self, *args, **kw): - doctest.DocTestRunner.__init__(self, *args, **kw) - # Override a fake output target for capturing doctest output. - self._fakeout = _SpoofOutSphinx() - +class SphinxDocTestRunner(doctest.DocTestRunner): # type: ignore def summarize(self, out, verbose=None): + # type: (Callable, bool) -> Tuple[int, int] string_io = StringIO() old_stdout = sys.stdout sys.stdout = string_io try: - res = doctest.DocTestRunner.summarize(self, verbose) + res = doctest.DocTestRunner.summarize(self, verbose) # type: ignore finally: sys.stdout = old_stdout out(string_io.getvalue()) @@ -202,6 +204,7 @@ def summarize(self, out, verbose=None): def _DocTestRunner__patched_linecache_getlines(self, filename, module_globals=None): + # type: (unicode, Any) -> Any # this is overridden from DocTestRunner adding the try-except below m = self._DocTestRunner__LINECACHE_FILENAME_RE.match(filename) if m and m.group('name') == self.test.name: @@ -226,16 +229,16 @@ class DocTestBuilder(Builder): name = 'doctest' def init(self): + # type: () -> None # default options - self.opt = doctest.DONT_ACCEPT_TRUE_FOR_1 | doctest.ELLIPSIS | \ - doctest.IGNORE_EXCEPTION_DETAIL + self.opt = self.config.doctest_default_flags # HACK HACK HACK # doctest compiles its snippets with type 'single'. That is nice # for doctest examples but unusable for multi-statement code such # as setup code -- to be able to use doctest error reporting with # that code nevertheless, we monkey-patch the "compile" it uses. - doctest.compile = self.compile + doctest.compile = self.compile # type: ignore sys.path[0:0] = self.config.doctest_path @@ -250,7 +253,8 @@ def init(self): date = time.strftime('%Y-%m-%d %H:%M:%S') - self.outfile = codecs.open(path.join(self.outdir, 'output.txt'), + self.outfile = None # type: IO + self.outfile = codecs.open(path.join(self.outdir, 'output.txt'), # type: ignore 'w', encoding='utf-8') self.outfile.write('''\ Results of doctest builder run on %s @@ -258,26 +262,33 @@ def init(self): ''' % (date, '='*len(date))) def _out(self, text): + # type: (unicode) -> None self.info(text, nonl=True) self.outfile.write(text) def _warn_out(self, text): - self.info(text, nonl=True) - if self.app.quiet: + # type: (unicode) -> None + if self.app.quiet or self.app.warningiserror: self.warn(text) + else: + self.info(text, nonl=True) if isinstance(text, binary_type): text = force_decode(text, None) self.outfile.write(text) def get_target_uri(self, docname, typ=None): + # type: (unicode, unicode) -> unicode return '' def get_outdated_docs(self): + # type: () -> Set[unicode] return self.env.found_docs def finish(self): + # type: () -> None # write executive summary def s(v): + # type: (int) -> unicode return v != 1 and 's' or '' repl = (self.total_tries, s(self.total_tries), self.total_failures, s(self.total_failures), @@ -297,6 +308,7 @@ def s(v): self.app.statuscode = 1 def write(self, build_docnames, updated_docnames, method='update'): + # type: (Iterable[unicode], Sequence[unicode], unicode) -> None if build_docnames is None: build_docnames = sorted(self.env.all_docs) @@ -307,7 +319,8 @@ def write(self, build_docnames, updated_docnames, method='update'): self.test_doc(docname, doctree) def test_doc(self, docname, doctree): - groups = {} + # type: (unicode, nodes.Node) -> None + groups = {} # type: Dict[unicode, TestGroup] add_to_all_groups = [] self.setup_runner = SphinxDocTestRunner(verbose=False, optionflags=self.opt) @@ -321,11 +334,13 @@ def test_doc(self, docname, doctree): if self.config.doctest_test_doctest_blocks: def condition(node): + # type: (nodes.Node) -> bool return (isinstance(node, (nodes.literal_block, nodes.comment)) and 'testnodetype' in node) or \ isinstance(node, nodes.doctest_block) else: def condition(node): + # type: (nodes.Node) -> bool return isinstance(node, (nodes.literal_block, nodes.comment)) \ and 'testnodetype' in node for node in doctree.traverse(condition): @@ -379,26 +394,29 @@ def condition(node): self.cleanup_tries += res_t def compile(self, code, name, type, flags, dont_inherit): + # type: (unicode, unicode, unicode, Any, bool) -> Any return compile(code, name, self.type, flags, dont_inherit) def test_group(self, group, filename): + # type: (TestGroup, unicode) -> None if PY2: filename_str = filename.encode(fs_encoding) else: filename_str = filename - ns = {} + ns = {} # type: Dict def run_setup_cleanup(runner, testcodes, what): + # type: (Any, List[TestCode], Any) -> bool examples = [] for testcode in testcodes: - examples.append(doctest.Example( - doctest_encode(testcode.code, self.env.config.source_encoding), '', + examples.append(doctest.Example( # type: ignore + doctest_encode(testcode.code, self.env.config.source_encoding), '', # type: ignore # NOQA lineno=testcode.lineno)) if not examples: return True # simulate a doctest with the code - sim_doctest = doctest.DocTest(examples, {}, + sim_doctest = doctest.DocTest(examples, {}, # type: ignore '%s (%s code)' % (group.name, what), filename_str, 0, None) sim_doctest.globs = ns @@ -420,7 +438,7 @@ def run_setup_cleanup(runner, testcodes, what): # ordinary doctests (code/output interleaved) try: test = parser.get_doctest( - doctest_encode(code[0].code, self.env.config.source_encoding), {}, + doctest_encode(code[0].code, self.env.config.source_encoding), {}, # type: ignore # NOQA group.name, filename_str, code[0].lineno) except Exception: self.warn('ignoring invalid doctest code: %r' % @@ -440,19 +458,19 @@ def run_setup_cleanup(runner, testcodes, what): output = code[1] and code[1].code or '' options = code[1] and code[1].options or {} # disable <BLANKLINE> processing as it is not needed - options[doctest.DONT_ACCEPT_BLANKLINE] = True + options[doctest.DONT_ACCEPT_BLANKLINE] = True # type: ignore # find out if we're testing an exception m = parser._EXCEPTION_RE.match(output) if m: exc_msg = m.group('msg') else: exc_msg = None - example = doctest.Example( - doctest_encode(code[0].code, self.env.config.source_encoding), output, + example = doctest.Example( # type: ignore + doctest_encode(code[0].code, self.env.config.source_encoding), output, # type: ignore # NOQA exc_msg=exc_msg, lineno=code[0].lineno, options=options) - test = doctest.DocTest([example], {}, group.name, + test = doctest.DocTest([example], {}, group.name, # type: ignore filename_str, code[0].lineno, None) self.type = 'exec' # multiple statements again # DocTest.__init__ copies the globs namespace, which we don't want @@ -465,6 +483,7 @@ def run_setup_cleanup(runner, testcodes, what): def setup(app): + # type: (Sphinx) -> Dict[unicode, Any] app.add_directive('testsetup', TestsetupDirective) app.add_directive('testcleanup', TestcleanupDirective) app.add_directive('doctest', DoctestDirective) @@ -476,4 +495,8 @@ def setup(app): app.add_config_value('doctest_test_doctest_blocks', 'default', False) app.add_config_value('doctest_global_setup', '', False) app.add_config_value('doctest_global_cleanup', '', False) + app.add_config_value( + 'doctest_default_flags', + doctest.DONT_ACCEPT_TRUE_FOR_1 | doctest.ELLIPSIS | doctest.IGNORE_EXCEPTION_DETAIL, # type: ignore # NOQA + False) return {'version': sphinx.__display_version__, 'parallel_read_safe': True} diff --git a/sphinx/ext/extlinks.py b/sphinx/ext/extlinks.py index 1f93fc94416..8bd8017a921 100644 --- a/sphinx/ext/extlinks.py +++ b/sphinx/ext/extlinks.py @@ -20,7 +20,7 @@ You can also give an explicit caption, e.g. :exmpl:`Foo <foo>`. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ diff --git a/sphinx/ext/githubpages.py b/sphinx/ext/githubpages.py new file mode 100644 index 00000000000..1d5c4c55d6d --- /dev/null +++ b/sphinx/ext/githubpages.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +""" + sphinx.ext.githubpages + ~~~~~~~~~~~~~~~~~~~~~~ + + To publish HTML docs at GitHub Pages, create .nojekyll file. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import os +import sphinx + + +def create_nojekyll(app, env): + if app.builder.format == 'html': + path = os.path.join(app.builder.outdir, '.nojekyll') + open(path, 'wt').close() + + +def setup(app): + app.connect('env-updated', create_nojekyll) + return {'version': sphinx.__display_version__, 'parallel_read_safe': True} diff --git a/sphinx/ext/graphviz.py b/sphinx/ext/graphviz.py index 3970edc0776..0c29777dd64 100644 --- a/sphinx/ext/graphviz.py +++ b/sphinx/ext/graphviz.py @@ -6,7 +6,7 @@ Allow graphviz-formatted graphs to be included in Sphinx-generated documents inline. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -18,6 +18,7 @@ from hashlib import sha1 from six import text_type + from docutils import nodes from docutils.parsers.rst import directives from docutils.statemachine import ViewList @@ -25,9 +26,15 @@ import sphinx from sphinx.errors import SphinxError from sphinx.locale import _ +from sphinx.util.i18n import search_image_for_language from sphinx.util.osutil import ensuredir, ENOENT, EPIPE, EINVAL from sphinx.util.compat import Directive +if False: + # For type annotation + from typing import Any, Tuple # NOQA + from sphinx.application import Sphinx # NOQA + mapname_re = re.compile(r'<map id="(.*?)"') @@ -36,12 +43,15 @@ class GraphvizError(SphinxError): category = 'Graphviz error' -class graphviz(nodes.General, nodes.Element): +class graphviz(nodes.General, nodes.Inline, nodes.Element): pass def figure_wrapper(directive, node, caption): + # type: (Directive, nodes.Node, unicode) -> nodes.figure figure_node = nodes.figure('', node) + if 'align' in node: + figure_node['align'] = node.attributes.pop('align') parsed = nodes.Element() directive.state.nested_parse(ViewList([caption], source=''), @@ -54,6 +64,11 @@ def figure_wrapper(directive, node, caption): return figure_node +def align_spec(argument): + # type: (Any) -> bool + return directives.choice(argument, ('left', 'center', 'right')) + + class Graphviz(Directive): """ Directive to insert arbitrary dot markup. @@ -64,11 +79,15 @@ class Graphviz(Directive): final_argument_whitespace = False option_spec = { 'alt': directives.unchanged, + 'align': align_spec, 'inline': directives.flag, 'caption': directives.unchanged, + 'graphviz_dot': directives.unchanged, + 'name': directives.unchanged, } def run(self): + # type: () -> List[nodes.Node] if self.arguments: document = self.state.document if self.content: @@ -76,14 +95,12 @@ def run(self): 'Graphviz directive cannot have both content and ' 'a filename argument', line=self.lineno)] env = self.state.document.settings.env - rel_filename, filename = env.relfn2path(self.arguments[0]) + argument = search_image_for_language(self.arguments[0], env) + rel_filename, filename = env.relfn2path(argument) env.note_dependency(rel_filename) try: - fp = codecs.open(filename, 'r', 'utf-8') - try: + with codecs.open(filename, 'r', 'utf-8') as fp: dotcode = fp.read() - finally: - fp.close() except (IOError, OSError): return [document.reporter.warning( 'External Graphviz file %r not found or reading ' @@ -96,15 +113,21 @@ def run(self): line=self.lineno)] node = graphviz() node['code'] = dotcode - node['options'] = [] + node['options'] = {} + if 'graphviz_dot' in self.options: + node['options']['graphviz_dot'] = self.options['graphviz_dot'] if 'alt' in self.options: node['alt'] = self.options['alt'] - node['inline'] = 'inline' in self.options + if 'align' in self.options: + node['align'] = self.options['align'] + if 'inline' in self.options: + node['inline'] = True caption = self.options.get('caption') - if caption and not node['inline']: + if caption: node = figure_wrapper(self, node, caption) + self.add_name(node) return [node] @@ -118,30 +141,41 @@ class GraphvizSimple(Directive): final_argument_whitespace = False option_spec = { 'alt': directives.unchanged, + 'align': align_spec, 'inline': directives.flag, 'caption': directives.unchanged, + 'graphviz_dot': directives.unchanged, + 'name': directives.unchanged, } def run(self): + # type: () -> List[nodes.Node] node = graphviz() node['code'] = '%s %s {\n%s\n}\n' % \ (self.name, self.arguments[0], '\n'.join(self.content)) - node['options'] = [] + node['options'] = {} + if 'graphviz_dot' in self.options: + node['options']['graphviz_dot'] = self.options['graphviz_dot'] if 'alt' in self.options: node['alt'] = self.options['alt'] - node['inline'] = 'inline' in self.options + if 'align' in self.options: + node['align'] = self.options['align'] + if 'inline' in self.options: + node['inline'] = True caption = self.options.get('caption') - if caption and not node['inline']: + if caption: node = figure_wrapper(self, node, caption) + self.add_name(node) return [node] def render_dot(self, code, options, format, prefix='graphviz'): + # type: (nodes.NodeVisitor, unicode, Dict, unicode, unicode) -> Tuple[unicode, unicode] """Render graphviz code into a PNG or PDF output file.""" - hashkey = (code + str(options) + - str(self.builder.config.graphviz_dot) + + graphviz_dot = options.get('graphviz_dot', self.builder.config.graphviz_dot) + hashkey = (code + str(options) + str(graphviz_dot) + str(self.builder.config.graphviz_dot_args)).encode('utf-8') fname = '%s-%s.%s' % (prefix, sha1(hashkey).hexdigest(), format) @@ -151,8 +185,8 @@ def render_dot(self, code, options, format, prefix='graphviz'): if path.isfile(outfn): return relfn, outfn - if hasattr(self.builder, '_graphviz_warned_dot') or \ - hasattr(self.builder, '_graphviz_warned_ps2pdf'): + if (hasattr(self.builder, '_graphviz_warned_dot') and + self.builder._graphviz_warned_dot.get(graphviz_dot)): return None, None ensuredir(path.dirname(outfn)) @@ -161,9 +195,8 @@ def render_dot(self, code, options, format, prefix='graphviz'): if isinstance(code, text_type): code = code.encode('utf-8') - dot_args = [self.builder.config.graphviz_dot] + dot_args = [graphviz_dot] dot_args.extend(self.builder.config.graphviz_dot_args) - dot_args.extend(options) dot_args.extend(['-T' + format, '-o' + outfn]) if format == 'png': dot_args.extend(['-Tcmapx', '-o%s.map' % outfn]) @@ -173,9 +206,10 @@ def render_dot(self, code, options, format, prefix='graphviz'): if err.errno != ENOENT: # No such file or directory raise self.builder.warn('dot command %r cannot be run (needed for graphviz ' - 'output), check the graphviz_dot setting' % - self.builder.config.graphviz_dot) - self.builder._graphviz_warned_dot = True + 'output), check the graphviz_dot setting' % graphviz_dot) + if not hasattr(self.builder, '_graphviz_warned_dot'): + self.builder._graphviz_warned_dot = {} + self.builder._graphviz_warned_dot[graphviz_dot] = True return None, None try: # Graphviz may close standard input when an error occurs, @@ -197,8 +231,19 @@ def render_dot(self, code, options, format, prefix='graphviz'): return relfn, outfn +def warn_for_deprecated_option(self, node): + # type: (nodes.NodeVisitor, graphviz) -> None + if hasattr(self.builder, '_graphviz_warned_inline'): + return + + if 'inline' in node: + self.builder.warn(':inline: option for graphviz is deprecated since version 1.4.0.') + self.builder._graphviz_warned_inline = True + + def render_dot_html(self, node, code, options, prefix='graphviz', imgcls=None, alt=None): + # type: (nodes.NodeVisitor, graphviz, unicode, Dict, unicode, unicode, unicode) -> Tuple[unicode, unicode] # NOQA format = self.builder.config.graphviz_output_format try: if format not in ('png', 'svg'): @@ -209,13 +254,6 @@ def render_dot_html(self, node, code, options, prefix='graphviz', self.builder.warn('dot code %r: ' % code + str(exc)) raise nodes.SkipNode - inline = node.get('inline', False) - if inline: - wrapper = 'span' - else: - wrapper = 'p' - - self.body.append(self.starttag(node, wrapper, CLASS='graphviz')) if fname is None: self.body.append(self.encode(code)) else: @@ -223,57 +261,76 @@ def render_dot_html(self, node, code, options, prefix='graphviz', alt = node.get('alt', self.encode(code).strip()) imgcss = imgcls and 'class="%s"' % imgcls or '' if format == 'svg': - svgtag = '<img src="%s" alt="%s" %s/>\n' % (fname, alt, imgcss) + svgtag = '''<object data="%s" type="image/svg+xml"> + <p class="warning">%s</p></object>\n''' % (fname, alt) self.body.append(svgtag) else: - mapfile = open(outfn + '.map', 'rb') - try: + if 'align' in node: + self.body.append('<div align="%s" class="align-%s">' % + (node['align'], node['align'])) + with open(outfn + '.map', 'rb') as mapfile: imgmap = mapfile.readlines() - finally: - mapfile.close() if len(imgmap) == 2: # nothing in image map (the lines are <map> and </map>) self.body.append('<img src="%s" alt="%s" %s/>\n' % (fname, alt, imgcss)) else: # has a map: get the name of the map and connect the parts - mapname = mapname_re.match(imgmap[0].decode('utf-8')).group(1) + mapname = mapname_re.match(imgmap[0].decode('utf-8')).group(1) # type: ignore self.body.append('<img src="%s" alt="%s" usemap="#%s" %s/>\n' % (fname, alt, mapname, imgcss)) self.body.extend([item.decode('utf-8') for item in imgmap]) + if 'align' in node: + self.body.append('</div>\n') - self.body.append('</%s>\n' % wrapper) raise nodes.SkipNode def html_visit_graphviz(self, node): + # type: (nodes.NodeVisitor, graphviz) -> None + warn_for_deprecated_option(self, node) render_dot_html(self, node, node['code'], node['options']) def render_dot_latex(self, node, code, options, prefix='graphviz'): + # type: (nodes.NodeVisitor, graphviz, unicode, Dict, unicode) -> None try: fname, outfn = render_dot(self, code, options, 'pdf', prefix) except GraphvizError as exc: self.builder.warn('dot code %r: ' % code + str(exc)) raise nodes.SkipNode - inline = node.get('inline', False) - if inline: + is_inline = self.is_inline(node) + if is_inline: para_separator = '' else: para_separator = '\n' if fname is not None: + post = None # type: unicode + if not is_inline and 'align' in node: + if node['align'] == 'left': + self.body.append('{') + post = '\\hspace*{\\fill}}' + elif node['align'] == 'right': + self.body.append('{\\hspace*{\\fill}') + post = '}' self.body.append('%s\\includegraphics{%s}%s' % (para_separator, fname, para_separator)) + if post: + self.body.append(post) + raise nodes.SkipNode def latex_visit_graphviz(self, node): + # type: (nodes.NodeVisitor, graphviz) -> None + warn_for_deprecated_option(self, node) render_dot_latex(self, node, node['code'], node['options']) def render_dot_texinfo(self, node, code, options, prefix='graphviz'): + # type: (nodes.NodeVisitor, graphviz, unicode, Dict, unicode) -> None try: fname, outfn = render_dot(self, code, options, 'png', prefix) except GraphvizError as exc: @@ -285,10 +342,14 @@ def render_dot_texinfo(self, node, code, options, prefix='graphviz'): def texinfo_visit_graphviz(self, node): + # type: (nodes.NodeVisitor, graphviz) -> None + warn_for_deprecated_option(self, node) render_dot_texinfo(self, node, node['code'], node['options']) def text_visit_graphviz(self, node): + # type: (nodes.NodeVisitor, graphviz) -> None + warn_for_deprecated_option(self, node) if 'alt' in node.attributes: self.add_text(_('[graph: %s]') % node['alt']) else: @@ -297,6 +358,8 @@ def text_visit_graphviz(self, node): def man_visit_graphviz(self, node): + # type: (nodes.NodeVisitor, graphviz) -> None + warn_for_deprecated_option(self, node) if 'alt' in node.attributes: self.body.append(_('[graph: %s]') % node['alt']) else: @@ -305,6 +368,7 @@ def man_visit_graphviz(self, node): def setup(app): + # type: (Sphinx) -> Dict[unicode, Any] app.add_node(graphviz, html=(html_visit_graphviz, None), latex=(latex_visit_graphviz, None), diff --git a/sphinx/ext/ifconfig.py b/sphinx/ext/ifconfig.py index 3c77566efc3..923e2d0806c 100644 --- a/sphinx/ext/ifconfig.py +++ b/sphinx/ext/ifconfig.py @@ -16,7 +16,7 @@ namespace of the project configuration (that is, all variables from ``conf.py`` are available.) - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -26,6 +26,11 @@ from sphinx.util.nodes import set_source_info from sphinx.util.compat import Directive +if False: + # For type annotation + from typing import Any # NOQA + from sphinx.application import Sphinx # NOQA + class ifconfig(nodes.Element): pass @@ -37,9 +42,10 @@ class IfConfig(Directive): required_arguments = 1 optional_arguments = 0 final_argument_whitespace = True - option_spec = {} + option_spec = {} # type: Dict def run(self): + # type: () -> List[nodes.Node] node = ifconfig() node.document = self.state.document set_source_info(self, node) @@ -50,16 +56,17 @@ def run(self): def process_ifconfig_nodes(app, doctree, docname): + # type: (Sphinx, nodes.Node, unicode) -> None ns = dict((k, app.config[k]) for k in app.config.values) ns.update(app.config.__dict__.copy()) ns['builder'] = app.builder.name for node in doctree.traverse(ifconfig): try: - res = eval(node['expr'], ns) + res = eval(node['expr'], ns) # type: ignore except Exception as err: # handle exceptions in a clean fashion from traceback import format_exception_only - msg = ''.join(format_exception_only(err.__class__, err)) + msg = ''.join(format_exception_only(err.__class__, err)) # type: ignore newnode = doctree.reporter.error('Exception occured in ' 'ifconfig expression: \n%s' % msg, base_node=node) @@ -72,6 +79,7 @@ def process_ifconfig_nodes(app, doctree, docname): def setup(app): + # type: (Sphinx) -> Dict[unicode, Any] app.add_node(ifconfig) app.add_directive('ifconfig', IfConfig) app.connect('doctree-resolved', process_ifconfig_nodes) diff --git a/sphinx/ext/imgmath.py b/sphinx/ext/imgmath.py new file mode 100644 index 00000000000..11d41d426f3 --- /dev/null +++ b/sphinx/ext/imgmath.py @@ -0,0 +1,304 @@ +# -*- coding: utf-8 -*- +""" + sphinx.ext.imgmath + ~~~~~~~~~~~~~~~~~~ + + Render math in HTML via dvipng or dvisvgm. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import re +import codecs +import shutil +import tempfile +import posixpath +from os import path +from subprocess import Popen, PIPE +from hashlib import sha1 + +from six import text_type + +from docutils import nodes + +import sphinx +from sphinx.locale import _ +from sphinx.errors import SphinxError, ExtensionError +from sphinx.util.png import read_png_depth, write_png_depth +from sphinx.util.osutil import ensuredir, ENOENT, cd +from sphinx.util.pycompat import sys_encoding +from sphinx.ext.mathbase import setup_math as mathbase_setup, wrap_displaymath + +if False: + # For type annotation + from typing import Any, Tuple # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.ext.mathbase import math as math_node, displaymath # NOQA + + +class MathExtError(SphinxError): + category = 'Math extension error' + + def __init__(self, msg, stderr=None, stdout=None): + # type: (unicode, unicode, unicode) -> None + if stderr: + msg += '\n[stderr]\n' + stderr.decode(sys_encoding, 'replace') + if stdout: + msg += '\n[stdout]\n' + stdout.decode(sys_encoding, 'replace') + SphinxError.__init__(self, msg) + + +DOC_HEAD = r''' +\documentclass[12pt]{article} +\usepackage[utf8x]{inputenc} +\usepackage{amsmath} +\usepackage{amsthm} +\usepackage{amssymb} +\usepackage{amsfonts} +\usepackage{anyfontsize} +\usepackage{bm} +\pagestyle{empty} +''' + +DOC_BODY = r''' +\begin{document} +\fontsize{%d}{%d}\selectfont %s +\end{document} +''' + +DOC_BODY_PREVIEW = r''' +\usepackage[active]{preview} +\begin{document} +\begin{preview} +\fontsize{%s}{%s}\selectfont %s +\end{preview} +\end{document} +''' + +depth_re = re.compile(br'\[\d+ depth=(-?\d+)\]') + + +def render_math(self, math): + # type: (nodes.NodeVisitor, unicode) -> Tuple[unicode, int] + """Render the LaTeX math expression *math* using latex and dvipng or + dvisvgm. + + Return the filename relative to the built document and the "depth", + that is, the distance of image bottom and baseline in pixels, if the + option to use preview_latex is switched on. + + Error handling may seem strange, but follows a pattern: if LaTeX or dvipng + (dvisvgm) aren't available, only a warning is generated (since that enables + people on machines without these programs to at least build the rest of the + docs successfully). If the programs are there, however, they may not fail + since that indicates a problem in the math source. + """ + image_format = self.builder.config.imgmath_image_format + if image_format not in ('png', 'svg'): + raise MathExtError( + 'imgmath_image_format must be either "png" or "svg"') + + font_size = self.builder.config.imgmath_font_size + use_preview = self.builder.config.imgmath_use_preview + latex = DOC_HEAD + self.builder.config.imgmath_latex_preamble + latex += (use_preview and DOC_BODY_PREVIEW or DOC_BODY) % ( + font_size, int(round(font_size * 1.2)), math) + + shasum = "%s.%s" % (sha1(latex.encode('utf-8')).hexdigest(), image_format) + relfn = posixpath.join(self.builder.imgpath, 'math', shasum) + outfn = path.join(self.builder.outdir, self.builder.imagedir, 'math', shasum) + if path.isfile(outfn): + depth = read_png_depth(outfn) + return relfn, depth + + # if latex or dvipng (dvisvgm) has failed once, don't bother to try again + if hasattr(self.builder, '_imgmath_warned_latex') or \ + hasattr(self.builder, '_imgmath_warned_image_translator'): + return None, None + + # use only one tempdir per build -- the use of a directory is cleaner + # than using temporary files, since we can clean up everything at once + # just removing the whole directory (see cleanup_tempdir) + if not hasattr(self.builder, '_imgmath_tempdir'): + tempdir = self.builder._imgmath_tempdir = tempfile.mkdtemp() + else: + tempdir = self.builder._imgmath_tempdir + + with codecs.open(path.join(tempdir, 'math.tex'), 'w', 'utf-8') as tf: # type: ignore + tf.write(latex) + + # build latex command; old versions of latex don't have the + # --output-directory option, so we have to manually chdir to the + # temp dir to run it. + ltx_args = [self.builder.config.imgmath_latex, '--interaction=nonstopmode'] + # add custom args from the config file + ltx_args.extend(self.builder.config.imgmath_latex_args) + ltx_args.append('math.tex') + + with cd(tempdir): + try: + p = Popen(ltx_args, stdout=PIPE, stderr=PIPE) + except OSError as err: + if err.errno != ENOENT: # No such file or directory + raise + self.builder.warn('LaTeX command %r cannot be run (needed for math ' + 'display), check the imgmath_latex setting' % + self.builder.config.imgmath_latex) + self.builder._imgmath_warned_latex = True + return None, None + + stdout, stderr = p.communicate() + if p.returncode != 0: + raise MathExtError('latex exited with error', stderr, stdout) + + ensuredir(path.dirname(outfn)) + if image_format == 'png': + image_translator = 'dvipng' + image_translator_executable = self.builder.config.imgmath_dvipng + # use some standard dvipng arguments + image_translator_args = [self.builder.config.imgmath_dvipng] + image_translator_args += ['-o', outfn, '-T', 'tight', '-z9'] + # add custom ones from config value + image_translator_args.extend(self.builder.config.imgmath_dvipng_args) + if use_preview: + image_translator_args.append('--depth') + elif image_format == 'svg': + image_translator = 'dvisvgm' + image_translator_executable = self.builder.config.imgmath_dvisvgm + # use some standard dvisvgm arguments + image_translator_args = [self.builder.config.imgmath_dvisvgm] + image_translator_args += ['-o', outfn] + # add custom ones from config value + image_translator_args.extend(self.builder.config.imgmath_dvisvgm_args) + else: + raise MathExtError( + 'imgmath_image_format must be either "png" or "svg"') + + # last, the input file name + image_translator_args.append(path.join(tempdir, 'math.dvi')) + + try: + p = Popen(image_translator_args, stdout=PIPE, stderr=PIPE) + except OSError as err: + if err.errno != ENOENT: # No such file or directory + raise + self.builder.warn('%s command %r cannot be run (needed for math ' + 'display), check the imgmath_%s setting' % + (image_translator, image_translator_executable, + image_translator)) + self.builder._imgmath_warned_image_translator = True + return None, None + + stdout, stderr = p.communicate() + if p.returncode != 0: + raise MathExtError('%s exited with error' % + image_translator, stderr, stdout) + depth = None + if use_preview and image_format == 'png': # depth is only useful for png + for line in stdout.splitlines(): + m = depth_re.match(line) + if m: + depth = int(m.group(1)) + write_png_depth(outfn, depth) + break + + return relfn, depth + + +def cleanup_tempdir(app, exc): + # type: (Sphinx, Exception) -> None + if exc: + return + if not hasattr(app.builder, '_imgmath_tempdir'): + return + try: + shutil.rmtree(app.builder._mathpng_tempdir) # type: ignore + except Exception: + pass + + +def get_tooltip(self, node): + # type: (nodes.NodeVisitor, math_node) -> unicode + if self.builder.config.imgmath_add_tooltips: + return ' alt="%s"' % self.encode(node['latex']).strip() + return '' + + +def html_visit_math(self, node): + # type: (nodes.NodeVisitor, math_node) -> None + try: + fname, depth = render_math(self, '$'+node['latex']+'$') + except MathExtError as exc: + msg = text_type(exc) + sm = nodes.system_message(msg, type='WARNING', level=2, + backrefs=[], source=node['latex']) + sm.walkabout(self) + self.builder.warn('display latex %r: ' % node['latex'] + msg) + raise nodes.SkipNode + if fname is None: + # something failed -- use text-only as a bad substitute + self.body.append('<span class="math">%s</span>' % + self.encode(node['latex']).strip()) + else: + c = ('<img class="math" src="%s"' % fname) + get_tooltip(self, node) + if depth is not None: + c += ' style="vertical-align: %dpx"' % (-depth) + self.body.append(c + '/>') + raise nodes.SkipNode + + +def html_visit_displaymath(self, node): + # type: (nodes.NodeVisitor, displaymath) -> None + if node['nowrap']: + latex = node['latex'] + else: + latex = wrap_displaymath(node['latex'], None, + self.builder.config.math_number_all) + try: + fname, depth = render_math(self, latex) + except MathExtError as exc: + msg = text_type(exc) + sm = nodes.system_message(msg, type='WARNING', level=2, + backrefs=[], source=node['latex']) + sm.walkabout(self) + self.builder.warn('inline latex %r: ' % node['latex'] + msg) + raise nodes.SkipNode + self.body.append(self.starttag(node, 'div', CLASS='math')) + self.body.append('<p>') + if node['number']: + self.body.append('<span class="eqno">(%s)' % node['number']) + self.add_permalink_ref(node, _('Permalink to this equation')) + self.body.append('</span>') + if fname is None: + # something failed -- use text-only as a bad substitute + self.body.append('<span class="math">%s</span></p>\n</div>' % + self.encode(node['latex']).strip()) + else: + self.body.append(('<img src="%s"' % fname) + get_tooltip(self, node) + + '/></p>\n</div>') + raise nodes.SkipNode + + +def setup(app): + # type: (Sphinx) -> Dict[unicode, Any] + try: + mathbase_setup(app, (html_visit_math, None), (html_visit_displaymath, None)) + except ExtensionError: + raise ExtensionError('sphinx.ext.imgmath: other math package is already loaded') + + app.add_config_value('imgmath_image_format', 'png', 'html') + app.add_config_value('imgmath_dvipng', 'dvipng', 'html') + app.add_config_value('imgmath_dvisvgm', 'dvisvgm', 'html') + app.add_config_value('imgmath_latex', 'latex', 'html') + app.add_config_value('imgmath_use_preview', False, 'html') + app.add_config_value('imgmath_dvipng_args', + ['-gamma', '1.5', '-D', '110', '-bg', 'Transparent'], + 'html') + app.add_config_value('imgmath_dvisvgm_args', ['--no-fonts'], 'html') + app.add_config_value('imgmath_latex_args', [], 'html') + app.add_config_value('imgmath_latex_preamble', '', 'html') + app.add_config_value('imgmath_add_tooltips', True, 'html') + app.add_config_value('imgmath_font_size', 12, 'html') + app.connect('build-finished', cleanup_tempdir) + return {'version': sphinx.__display_version__, 'parallel_read_safe': True} diff --git a/sphinx/ext/inheritance_diagram.py b/sphinx/ext/inheritance_diagram.py index f618aaf1504..f355aa6c4fb 100644 --- a/sphinx/ext/inheritance_diagram.py +++ b/sphinx/ext/inheritance_diagram.py @@ -32,7 +32,7 @@ class E(B): pass The graph is inserted as a PNG+image map into HTML and a PDF in LaTeX. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -42,25 +42,85 @@ class E(B): pass try: from hashlib import md5 except ImportError: - from md5 import md5 + from md5 import md5 # type: ignore from six import text_type -from six.moves import builtins +from six.moves import builtins # type: ignore from docutils import nodes from docutils.parsers.rst import directives import sphinx from sphinx.ext.graphviz import render_dot_html, render_dot_latex, \ - render_dot_texinfo + render_dot_texinfo, figure_wrapper from sphinx.pycode import ModuleAnalyzer from sphinx.util import force_decode from sphinx.util.compat import Directive +if False: + # For type annotation + from typing import Any, Tuple # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.environment import BuildEnvironment # NOQA -class_sig_re = re.compile(r'''^([\w.]*\.)? # module names - (\w+) \s* $ # class/final module name - ''', re.VERBOSE) + +module_sig_re = re.compile(r'''^(?:([\w.]*)\.)? # module names + (\w+) \s* $ # class/final module name + ''', re.VERBOSE) + + +def try_import(objname): + # type: (unicode) -> Any + """Import a object or module using *name* and *currentmodule*. + *name* should be a relative name from *currentmodule* or + a fully-qualified name. + + Returns imported object or module. If failed, returns None value. + """ + try: + __import__(objname) + return sys.modules.get(objname) # type: ignore + except ImportError: + modname, attrname = module_sig_re.match(objname).groups() # type: ignore + if modname is None: + return None + try: + __import__(modname) + return getattr(sys.modules.get(modname), attrname, None) + except ImportError: + return None + + +def import_classes(name, currmodule): + # type: (unicode, unicode) -> Any + """Import a class using its fully-qualified *name*.""" + target = None + + # import class or module using currmodule + if currmodule: + target = try_import(currmodule + '.' + name) + + # import class or module without currmodule + if target is None: + target = try_import(name) + + if target is None: + raise InheritanceException( + 'Could not import class or module %r specified for ' + 'inheritance diagram' % name) + + if inspect.isclass(target): + # If imported object is a class, just return it + return [target] + elif inspect.ismodule(target): + # If imported object is a module, return classes defined on it + classes = [] + for cls in target.__dict__.values(): + if inspect.isclass(cls) and cls.__module__ == target.__name__: + classes.append(cls) + return classes + raise InheritanceException('%r specified for inheritance diagram is ' + 'not a class or module' % name) class InheritanceException(Exception): @@ -75,6 +135,7 @@ class InheritanceGraph(object): """ def __init__(self, class_names, currmodule, show_builtins=False, private_bases=False, parts=0): + # type: (unicode, str, bool, bool, int) -> None """*class_names* is a list of child classes to show bases from. If *show_builtins* is True, then Python builtins will be shown @@ -88,59 +149,16 @@ def __init__(self, class_names, currmodule, show_builtins=False, raise InheritanceException('No classes found for ' 'inheritance diagram') - def _import_class_or_module(self, name, currmodule): - """Import a class using its fully-qualified *name*.""" - try: - path, base = class_sig_re.match(name).groups() - except (AttributeError, ValueError): - raise InheritanceException('Invalid class or module %r specified ' - 'for inheritance diagram' % name) - - fullname = (path or '') + base - path = (path and path.rstrip('.') or '') - - # two possibilities: either it is a module, then import it - try: - __import__(fullname) - todoc = sys.modules[fullname] - except ImportError: - # else it is a class, then import the module - if not path: - if currmodule: - # try the current module - path = currmodule - else: - raise InheritanceException( - 'Could not import class %r specified for ' - 'inheritance diagram' % base) - try: - __import__(path) - todoc = getattr(sys.modules[path], base) - except (ImportError, AttributeError): - raise InheritanceException( - 'Could not import class or module %r specified for ' - 'inheritance diagram' % (path + '.' + base)) - - # If a class, just return it - if inspect.isclass(todoc): - return [todoc] - elif inspect.ismodule(todoc): - classes = [] - for cls in todoc.__dict__.values(): - if inspect.isclass(cls) and cls.__module__ == todoc.__name__: - classes.append(cls) - return classes - raise InheritanceException('%r specified for inheritance diagram is ' - 'not a class or module' % name) - def _import_classes(self, class_names, currmodule): + # type: (unicode, str) -> List[Any] """Import a list of classes.""" - classes = [] + classes = [] # type: List[Any] for name in class_names: - classes.extend(self._import_class_or_module(name, currmodule)) + classes.extend(import_classes(name, currmodule)) return classes def _class_info(self, classes, show_builtins, private_bases, parts): + # type: (List[Any], bool, bool, int) -> List[Tuple[unicode, unicode, List[unicode], unicode]] # NOQA """Return name and bases for all classes that are ancestors of *classes*. @@ -151,6 +169,7 @@ def _class_info(self, classes, show_builtins, private_bases, parts): py_builtins = vars(builtins).values() def recurse(cls): + # type: (Any) -> None if not show_builtins and cls in py_builtins: return if not private_bases and cls.__name__.startswith('_'): @@ -172,7 +191,7 @@ def recurse(cls): except Exception: # might raise AttributeError for strange classes pass - baselist = [] + baselist = [] # type: List[unicode] all_classes[cls] = (nodename, fullname, baselist, tooltip) for base in cls.__bases__: if not show_builtins and base in py_builtins: @@ -189,6 +208,7 @@ def recurse(cls): return list(all_classes.values()) def class_name(self, cls, parts=0): + # type: (Any, int) -> unicode """Given a class object, return a fully-qualified name. This works for things I've tested in matplotlib so far, but may not be @@ -205,8 +225,9 @@ def class_name(self, cls, parts=0): return '.'.join(name_parts[-parts:]) def get_all_class_names(self): + # type: () -> List[unicode] """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] # type: ignore # These are the default attrs for graphviz default_graph_attrs = { @@ -227,13 +248,16 @@ def get_all_class_names(self): } def _format_node_attrs(self, attrs): - return ','.join(['%s=%s' % x for x in attrs.items()]) + # type: (Dict) -> unicode + return ','.join(['%s=%s' % x for x in sorted(attrs.items())]) def _format_graph_attrs(self, attrs): - return ''.join(['%s=%s;\n' % x for x in attrs.items()]) + # type: (Dict) -> unicode + return ''.join(['%s=%s;\n' % x for x in sorted(attrs.items())]) def generate_dot(self, name, urls={}, env=None, graph_attrs={}, node_attrs={}, edge_attrs={}): + # type: (unicode, Dict, BuildEnvironment, Dict, Dict, Dict) -> unicode """Generate a graphviz dot graph from the classes that were passed in to __init__. @@ -255,7 +279,7 @@ def generate_dot(self, name, urls={}, env=None, n_attrs.update(env.config.inheritance_node_attrs) e_attrs.update(env.config.inheritance_edge_attrs) - res = [] + res = [] # type: List[unicode] res.append('digraph %s {\n' % name) res.append(self._format_graph_attrs(g_attrs)) @@ -264,6 +288,7 @@ def generate_dot(self, name, urls={}, env=None, this_node_attrs = n_attrs.copy() if fullname in urls: this_node_attrs['URL'] = '"%s"' % urls[fullname] + this_node_attrs['target'] = '"_top"' if tooltip: this_node_attrs['tooltip'] = tooltip res.append(' "%s" [%s];\n' % @@ -296,9 +321,11 @@ class InheritanceDiagram(Directive): option_spec = { 'parts': directives.nonnegative_int, 'private-bases': directives.flag, + 'caption': directives.unchanged, } def run(self): + # type: () -> List[nodes.Node] node = inheritance_diagram() node.document = self.state.document env = self.state.document.settings.env @@ -329,15 +356,22 @@ def run(self): # Store the graph object so we can use it to generate the # dot file later node['graph'] = graph + + # wrap the result in figure node + caption = self.options.get('caption') + if caption: + node = figure_wrapper(self, node, caption) return [node] def get_graph_hash(node): + # type: (inheritance_diagram) -> unicode encoded = (node['content'] + str(node['parts'])).encode('utf-8') return md5(encoded).hexdigest()[-10:] def html_visit_inheritance_diagram(self, node): + # type: (nodes.NodeVisitor, inheritance_diagram) -> None """ Output the graph for HTML. This will insert a PNG with clickable image map. @@ -348,20 +382,29 @@ def html_visit_inheritance_diagram(self, node): name = 'inheritance%s' % graph_hash # Create a mapping from fully-qualified class names to URLs. + graphviz_output_format = self.builder.env.config.graphviz_output_format.upper() + current_filename = self.builder.current_docname + self.builder.out_suffix urls = {} for child in node: if child.get('refuri') is not None: - urls[child['reftitle']] = child.get('refuri') + if graphviz_output_format == 'SVG': + urls[child['reftitle']] = "../" + child.get('refuri') + else: + urls[child['reftitle']] = child.get('refuri') elif child.get('refid') is not None: - urls[child['reftitle']] = '#' + child.get('refid') + if graphviz_output_format == 'SVG': + urls[child['reftitle']] = '../' + current_filename + '#' + child.get('refid') + else: + urls[child['reftitle']] = '#' + child.get('refid') dotcode = graph.generate_dot(name, urls, env=self.builder.env) - render_dot_html(self, node, dotcode, [], 'inheritance', 'inheritance', + render_dot_html(self, node, dotcode, {}, 'inheritance', 'inheritance', alt='Inheritance diagram of ' + node['content']) raise nodes.SkipNode def latex_visit_inheritance_diagram(self, node): + # type: (nodes.NodeVisitor, inheritance_diagram) -> None """ Output the graph for LaTeX. This will insert a PDF. """ @@ -372,11 +415,12 @@ def latex_visit_inheritance_diagram(self, node): dotcode = graph.generate_dot(name, env=self.builder.env, graph_attrs={'size': '"6.0,6.0"'}) - render_dot_latex(self, node, dotcode, [], 'inheritance') + render_dot_latex(self, node, dotcode, {}, 'inheritance') raise nodes.SkipNode def texinfo_visit_inheritance_diagram(self, node): + # type: (nodes.NodeVisitor, inheritance_diagram) -> None """ Output the graph for Texinfo. This will insert a PNG. """ @@ -387,15 +431,17 @@ def texinfo_visit_inheritance_diagram(self, node): dotcode = graph.generate_dot(name, env=self.builder.env, graph_attrs={'size': '"6.0,6.0"'}) - render_dot_texinfo(self, node, dotcode, [], 'inheritance') + render_dot_texinfo(self, node, dotcode, {}, 'inheritance') raise nodes.SkipNode def skip(self, node): + # type: (nodes.NodeVisitor, inheritance_diagram) -> None raise nodes.SkipNode def setup(app): + # type: (Sphinx) -> Dict[unicode, Any] app.setup_extension('sphinx.ext.graphviz') app.add_node( inheritance_diagram, @@ -405,7 +451,7 @@ def setup(app): man=(skip, None), texinfo=(texinfo_visit_inheritance_diagram, None)) app.add_directive('inheritance-diagram', InheritanceDiagram) - app.add_config_value('inheritance_graph_attrs', {}, False), - app.add_config_value('inheritance_node_attrs', {}, False), - app.add_config_value('inheritance_edge_attrs', {}, False), + app.add_config_value('inheritance_graph_attrs', {}, False) + app.add_config_value('inheritance_node_attrs', {}, False) + app.add_config_value('inheritance_edge_attrs', {}, False) return {'version': sphinx.__display_version__, 'parallel_read_safe': True} diff --git a/sphinx/ext/intersphinx.py b/sphinx/ext/intersphinx.py index a2bb9401df3..d2429043672 100644 --- a/sphinx/ext/intersphinx.py +++ b/sphinx/ext/intersphinx.py @@ -20,7 +20,7 @@ also be specified individually, e.g. if the docs should be buildable without Internet access. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -33,31 +33,37 @@ from os import path import re -from six import iteritems -from six.moves.urllib import request +from six import PY3, iteritems, string_types +from six.moves.urllib.parse import urlsplit, urlunsplit + from docutils import nodes from docutils.utils import relative_path import sphinx from sphinx.locale import _ from sphinx.builders.html import INVENTORY_FILENAME +from sphinx.util import requests + +if False: + # For type annotation + from typing import Any, Callable, Dict, IO, Iterator, Tuple, Union # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.config import Config # NOQA + from sphinx.environment import BuildEnvironment # NOQA + if PY3: + unicode = str -handlers = [request.ProxyHandler(), request.HTTPRedirectHandler(), - request.HTTPHandler()] -try: - handlers.append(request.HTTPSHandler) -except AttributeError: - pass + Inventory = Dict[unicode, Dict[unicode, Tuple[unicode, unicode, unicode, unicode]]] -request.install_opener(request.build_opener(*handlers)) UTF8StreamReader = codecs.lookup('utf-8')[2] def read_inventory_v1(f, uri, join): + # type: (IO, unicode, Callable) -> Inventory f = UTF8StreamReader(f) - invdata = {} + invdata = {} # type: Inventory line = next(f) projname = line.rstrip()[11:] line = next(f) @@ -77,7 +83,8 @@ def read_inventory_v1(f, uri, join): def read_inventory_v2(f, uri, join, bufsize=16*1024): - invdata = {} + # type: (IO, unicode, Callable, int) -> Inventory + invdata = {} # type: Inventory line = f.readline() projname = line.rstrip()[11:].decode('utf-8') line = f.readline() @@ -87,12 +94,14 @@ def read_inventory_v2(f, uri, join, bufsize=16*1024): raise ValueError def read_chunks(): + # type: () -> Iterator[bytes] decompressor = zlib.decompressobj() for chunk in iter(lambda: f.read(bufsize), b''): yield decompressor.decompress(chunk) yield decompressor.flush() def split_lines(iter): + # type: (Iterator[bytes]) -> Iterator[unicode] buf = b'' for chunk in iter: buf += chunk @@ -105,7 +114,7 @@ def split_lines(iter): for line in split_lines(read_chunks()): # be careful to handle names with embedded spaces correctly - m = re.match(r'(?x)(.+?)\s+(\S*:\S*)\s+(\S+)\s+(\S+)\s+(.*)', + m = re.match(r'(?x)(.+?)\s+(\S*:\S*)\s+(-?\d+)\s+(\S+)\s+(.*)', line.rstrip()) if not m: continue @@ -124,15 +133,98 @@ def split_lines(iter): return invdata +def read_inventory(f, uri, join, bufsize=16*1024): + # type: (IO, unicode, Callable, int) -> Inventory + line = f.readline().rstrip().decode('utf-8') + if line == '# Sphinx inventory version 1': + return read_inventory_v1(f, uri, join) + elif line == '# Sphinx inventory version 2': + return read_inventory_v2(f, uri, join, bufsize=bufsize) + + +def _strip_basic_auth(url): + # type: (unicode) -> unicode + """Returns *url* with basic auth credentials removed. Also returns the + basic auth username and password if they're present in *url*. + + E.g.: https://user:pass@example.com => https://example.com + + *url* need not include basic auth credentials. + + :param url: url which may or may not contain basic auth credentials + :type url: ``str`` + + :return: *url* with any basic auth creds removed + :rtype: ``str`` + """ + frags = list(urlsplit(url)) + # swap out "user[:pass]@hostname" for "hostname" + if '@' in frags[1]: + frags[1] = frags[1].split('@')[1] + return urlunsplit(frags) + + +def _read_from_url(url, config=None): + # type: (unicode, Config) -> IO + """Reads data from *url* with an HTTP *GET*. + + This function supports fetching from resources which use basic HTTP auth as + laid out by RFC1738 § 3.1. See § 5 for grammar definitions for URLs. + + .. seealso: + + https://www.ietf.org/rfc/rfc1738.txt + + :param url: URL of an HTTP resource + :type url: ``str`` + + :return: data read from resource described by *url* + :rtype: ``file``-like object + """ + r = requests.get(url, stream=True, config=config, timeout=config.intersphinx_timeout) + r.raise_for_status() + r.raw.url = r.url + return r.raw + + +def _get_safe_url(url): + # type: (unicode) -> unicode + """Gets version of *url* with basic auth passwords obscured. This function + returns results suitable for printing and logging. + + E.g.: https://user:12345@example.com => https://user@example.com + + :param url: a url + :type url: ``str`` + + :return: *url* with password removed + :rtype: ``str`` + """ + parts = urlsplit(url) + if parts.username is None: + return url + else: + frags = list(parts) + if parts.port: + frags[1] = '{0}@{1}:{2}'.format(parts.username, parts.hostname, parts.port) + else: + frags[1] = '{0}@{1}'.format(parts.username, parts.hostname) + + return urlunsplit(frags) + + def fetch_inventory(app, uri, inv): + # type: (Sphinx, unicode, Any) -> Any """Fetch, parse and return an intersphinx inventory file.""" # both *uri* (base URI of the links to generate) and *inv* (actual # location of the inventory file) can be local or remote URIs - localuri = uri.find('://') == -1 - join = localuri and path.join or posixpath.join + localuri = '://' not in uri + if not localuri: + # case: inv URI points to remote resource; strip any existing auth + uri = _strip_basic_auth(uri) try: - if inv.find('://') != -1: - f = request.urlopen(inv) + if '://' in inv: + f = _read_from_url(inv, config=app.config) else: f = open(path.join(app.srcdir, inv), 'rb') except Exception as err: @@ -140,18 +232,19 @@ def fetch_inventory(app, uri, inv): '%s: %s' % (inv, err.__class__, err)) return try: - line = f.readline().rstrip().decode('utf-8') - try: - if line == '# Sphinx inventory version 1': - invdata = read_inventory_v1(f, uri, join) - elif line == '# Sphinx inventory version 2': - invdata = read_inventory_v2(f, uri, join) - else: - raise ValueError - f.close() - except ValueError: - f.close() - raise ValueError('unknown or unsupported inventory version') + if hasattr(f, 'url'): + newinv = f.url # type: ignore + if inv != newinv: + app.info('intersphinx inventory has moved: %s -> %s' % (inv, newinv)) + + if uri in (inv, path.dirname(inv), path.dirname(inv) + '/'): + uri = path.dirname(newinv) + with f: + try: + join = localuri and path.join or posixpath.join + invdata = read_inventory(f, uri, join) + except ValueError: + raise ValueError('unknown or unsupported inventory version') except Exception as err: app.warn('intersphinx inventory %r not readable due to ' '%s: %s' % (inv, err.__class__.__name__, err)) @@ -160,22 +253,28 @@ def fetch_inventory(app, uri, inv): def load_mappings(app): + # type: (Sphinx) -> None """Load all intersphinx mappings into the environment.""" now = int(time.time()) cache_time = now - app.config.intersphinx_cache_limit * 86400 env = app.builder.env if not hasattr(env, 'intersphinx_cache'): - env.intersphinx_cache = {} - env.intersphinx_inventory = {} - env.intersphinx_named_inventory = {} - cache = env.intersphinx_cache + env.intersphinx_cache = {} # type: ignore + env.intersphinx_inventory = {} # type: ignore + env.intersphinx_named_inventory = {} # type: ignore + cache = env.intersphinx_cache # type: ignore update = False for key, value in iteritems(app.config.intersphinx_mapping): + name = None # type: unicode + uri = None # type: unicode + inv = None # type: Union[unicode, Tuple[unicode, ...]] + if isinstance(value, tuple): # new format name, (uri, inv) = key, value - if not name.isalnum(): - app.warn('intersphinx identifier %r is not alphanumeric' % name) + if not isinstance(name, string_types): + app.warn('intersphinx identifier %r is not string. Ignored' % name) + continue else: # old format, no name name, uri, inv = None, key, value @@ -185,7 +284,7 @@ def load_mappings(app): if not isinstance(inv, tuple): invs = (inv, ) else: - invs = inv + invs = inv # type: ignore for inv in invs: if not inv: @@ -194,7 +293,9 @@ def load_mappings(app): # files; remote ones only if the cache time is expired if '://' not in inv or uri not in cache \ or cache[uri][1] < cache_time: - app.info('loading intersphinx inventory from %s...' % inv) + safe_inv_url = _get_safe_url(inv) # type: ignore + app.info( + 'loading intersphinx inventory from %s...' % safe_inv_url) invdata = fetch_inventory(app, uri, inv) if invdata: cache[uri] = (name, now, invdata) @@ -202,8 +303,8 @@ def load_mappings(app): break if update: - env.intersphinx_inventory = {} - env.intersphinx_named_inventory = {} + env.intersphinx_inventory = {} # type: ignore + env.intersphinx_named_inventory = {} # type: ignore # 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 @@ -216,20 +317,23 @@ def load_mappings(app): unnamed_vals = [v for v in cached_vals if not v[0]] for name, _x, invdata in named_vals + unnamed_vals: if name: - env.intersphinx_named_inventory[name] = invdata + env.intersphinx_named_inventory[name] = invdata # type: ignore for type, objects in iteritems(invdata): - env.intersphinx_inventory.setdefault( + env.intersphinx_inventory.setdefault( # type: ignore type, {}).update(objects) def missing_reference(app, env, node, contnode): + # type: (Sphinx, BuildEnvironment, nodes.Node, nodes.Node) -> None """Attempt to resolve a missing reference via intersphinx references.""" target = node['reftarget'] + objtypes = None # type: List[unicode] if node['reftype'] == 'any': # we search anything! objtypes = ['%s:%s' % (domain.name, objtype) for domain in env.domains.values() for objtype in domain.object_types] + domain = None elif node['reftype'] == 'doc': domain = 'std' # special case objtypes = ['std:doc'] @@ -238,18 +342,18 @@ def missing_reference(app, env, node, contnode): if not domain: # only objects in domains are in the inventory return - objtypes = env.domains[domain].objtypes_for_role(node['reftype']) + objtypes = env.get_domain(domain).objtypes_for_role(node['reftype']) if not objtypes: return objtypes = ['%s:%s' % (domain, objtype) for objtype in objtypes] - to_try = [(env.intersphinx_inventory, target)] + to_try = [(env.intersphinx_inventory, target)] # type: ignore in_set = None if ':' in target: # first part may be the foreign doc set name setname, newtarget = target.split(':', 1) - if setname in env.intersphinx_named_inventory: + if setname in env.intersphinx_named_inventory: # type: ignore in_set = setname - to_try.append((env.intersphinx_named_inventory[setname], newtarget)) + to_try.append((env.intersphinx_named_inventory[setname], newtarget)) # type: ignore # NOQA for inventory, target in to_try: for objtype in objtypes: if objtype not in inventory or target not in inventory[objtype]: @@ -257,7 +361,7 @@ def missing_reference(app, env, node, contnode): proj, version, uri, dispname = inventory[objtype][target] if '://' not in uri and node.get('refdoc'): # get correct path in case of subdirectories - uri = path.join(relative_path(node['refdoc'], env.srcdir), uri) + uri = path.join(relative_path(node['refdoc'], '.'), uri) newnode = nodes.reference('', '', internal=False, refuri=uri, reftitle=_('(in %s v%s)') % (proj, version)) if node.get('refexplicit'): @@ -283,8 +387,10 @@ def missing_reference(app, env, node, contnode): def setup(app): + # type: (Sphinx) -> Dict[unicode, Any] app.add_config_value('intersphinx_mapping', {}, True) app.add_config_value('intersphinx_cache_limit', 5, False) + app.add_config_value('intersphinx_timeout', None, False) app.connect('missing-reference', missing_reference) app.connect('builder-inited', load_mappings) return {'version': sphinx.__display_version__, 'parallel_read_safe': True} @@ -301,7 +407,7 @@ def warn(self, msg): print(msg, file=sys.stderr) filename = sys.argv[1] - invdata = fetch_inventory(MockApp(), '', filename) + invdata = fetch_inventory(MockApp(), '', filename) # type: ignore for key in sorted(invdata or {}): print(key) for entry, einfo in sorted(invdata[key].items()): diff --git a/sphinx/ext/jsmath.py b/sphinx/ext/jsmath.py index 2cc661430aa..9981ffd3a44 100644 --- a/sphinx/ext/jsmath.py +++ b/sphinx/ext/jsmath.py @@ -6,13 +6,14 @@ Set up everything for use of JSMath to display math in HTML via JavaScript. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from docutils import nodes import sphinx +from sphinx.locale import _ from sphinx.application import ExtensionError from sphinx.ext.mathbase import setup_math as mathbase_setup @@ -26,7 +27,7 @@ def html_visit_math(self, node): def html_visit_displaymath(self, node): if node['nowrap']: self.body.append(self.starttag(node, 'div', CLASS='math')) - self.body.append(node['latex']) + self.body.append(self.encode(node['latex'])) self.body.append('</div>') raise nodes.SkipNode for i, part in enumerate(node['latex'].split('\n\n')): @@ -34,8 +35,9 @@ def html_visit_displaymath(self, node): if i == 0: # necessary to e.g. set the id property correctly if node['number']: - self.body.append('<span class="eqno">(%s)</span>' % - node['number']) + self.body.append('<span class="eqno">(%s)' % node['number']) + self.add_permalink_ref(node, _('Permalink to this equation')) + self.body.append('</span>') self.body.append(self.starttag(node, 'div', CLASS='math')) else: # but only once! @@ -56,7 +58,11 @@ def builder_inited(app): def setup(app): - mathbase_setup(app, (html_visit_math, None), (html_visit_displaymath, None)) + try: + mathbase_setup(app, (html_visit_math, None), (html_visit_displaymath, None)) + except ExtensionError: + raise ExtensionError('sphinx.ext.jsmath: other math package is already loaded') + app.add_config_value('jsmath_path', '', False) app.connect('builder-inited', builder_inited) return {'version': sphinx.__display_version__, 'parallel_read_safe': True} diff --git a/sphinx/ext/linkcode.py b/sphinx/ext/linkcode.py index b0ee5e43e78..a9693299e53 100644 --- a/sphinx/ext/linkcode.py +++ b/sphinx/ext/linkcode.py @@ -5,7 +5,7 @@ Add external links to module code in Python object descriptions. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -16,12 +16,18 @@ from sphinx.locale import _ from sphinx.errors import SphinxError +if False: + # For type annotation + from typing import Any # NOQA + from sphinx.application import Sphinx # NOQA + class LinkcodeError(SphinxError): category = "linkcode error" def doctree_read(app, doctree): + # type: (Sphinx, nodes.Node) -> None env = app.builder.env resolve_target = getattr(env.config, 'linkcode_resolve', None) @@ -38,7 +44,7 @@ def doctree_read(app, doctree): for objnode in doctree.traverse(addnodes.desc): domain = objnode.get('domain') - uris = set() + uris = set() # type: Set[unicode] for signode in objnode: if not isinstance(signode, addnodes.desc_signature): continue @@ -72,6 +78,7 @@ def doctree_read(app, doctree): def setup(app): + # type: (Sphinx) -> Dict[unicode, Any] app.connect('doctree-read', doctree_read) app.add_config_value('linkcode_resolve', None, '') return {'version': sphinx.__display_version__, 'parallel_read_safe': True} diff --git a/sphinx/ext/mathbase.py b/sphinx/ext/mathbase.py index 4327fba1cb0..4a5bcfb6ef3 100644 --- a/sphinx/ext/mathbase.py +++ b/sphinx/ext/mathbase.py @@ -5,16 +5,27 @@ Set up math support in source files and LaTeX/text output. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from docutils import nodes, utils from docutils.parsers.rst import directives -from sphinx.util.nodes import set_source_info +from sphinx.roles import XRefRole +from sphinx.locale import _ +from sphinx.domains import Domain +from sphinx.util.nodes import make_refnode, set_source_info from sphinx.util.compat import Directive +if False: + # For type annotation + from typing import Any, Callable, Iterable, Tuple # NOQA + from docutils.parsers.rst.states import Inliner # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.builders import Builder # NOQA + from sphinx.environment import BuildEnvironment # NOQA + class math(nodes.Inline, nodes.TextElement): pass @@ -28,32 +39,137 @@ class eqref(nodes.Inline, nodes.TextElement): pass -def wrap_displaymath(math, label): - parts = math.split('\n\n') - ret = [] - for i, part in enumerate(parts): - if not part.strip(): - continue - if label is not None and i == 0: - ret.append('\\begin{split}%s\\end{split}' % part + - (label and '\\label{'+label+'}' or '')) +class EqXRefRole(XRefRole): + def result_nodes(self, document, env, node, is_ref): + # type: (nodes.Node, BuildEnvironment, nodes.Node, bool) -> Tuple[List[nodes.Node], List[nodes.Node]] # NOQA + node['refdomain'] = 'math' + return [node], [] + + +class MathDomain(Domain): + """Mathematics domain.""" + name = 'math' + label = 'mathematics' + + initial_data = { + 'objects': {}, # labelid -> (docname, eqno) + } # type: Dict[unicode, Dict[unicode, Tuple[unicode, int]]] + dangling_warnings = { + 'eq': 'equation not found: %(target)s', + } + + def clear_doc(self, docname): + # type: (unicode) -> None + for labelid, (doc, eqno) in list(self.data['objects'].items()): + if doc == docname: + del self.data['objects'][labelid] + + def merge_domaindata(self, docnames, otherdata): + # type: (Iterable[unicode], Dict) -> None + for labelid, (doc, eqno) in otherdata['objects'].items(): + if doc in docnames: + self.data['objects'][labelid] = doc + + def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, unicode, nodes.Node, nodes.Node) -> nodes.Node # NOQA + assert typ == 'eq' + docname, number = self.data['objects'].get(target, (None, None)) + if docname: + if builder.name == 'latex': + newnode = eqref('', **node.attributes) + newnode['docname'] = docname + newnode['target'] = target + return newnode + else: + title = nodes.Text("(%d)" % number) + return make_refnode(builder, fromdocname, docname, + "equation-" + target, title) else: - ret.append('\\begin{split}%s\\end{split}\\notag' % part) - if not ret: + return None + + def resolve_any_xref(self, env, fromdocname, builder, target, node, contnode): + # type: (BuildEnvironment, unicode, Builder, unicode, nodes.Node, nodes.Node) -> List[nodes.Node] # NOQA + refnode = self.resolve_xref(env, fromdocname, builder, 'eq', target, node, contnode) + if refnode is None: + return [] + else: + return [refnode] + + def get_objects(self): + # type: () -> List + return [] + + def add_equation(self, env, docname, labelid): + # type: (BuildEnvironment, unicode, unicode) -> int + equations = self.data['objects'] + if labelid in equations: + path = env.doc2path(equations[labelid][0]) + msg = _('duplicate label of equation %s, other instance in %s') % (labelid, path) + raise UserWarning(msg) + else: + eqno = self.get_next_equation_number(docname) + equations[labelid] = (docname, eqno) + return eqno + + def get_next_equation_number(self, docname): + # type: (unicode) -> int + targets = [eq for eq in self.data['objects'].values() if eq[0] == docname] + return len(targets) + 1 + + +def wrap_displaymath(math, label, numbering): + # type: (unicode, unicode, bool) -> unicode + def is_equation(part): + # type: (unicode) -> unicode + return part.strip() + + if label is None: + labeldef = '' + else: + labeldef = r'\label{%s}' % label + numbering = True + + parts = list(filter(is_equation, math.split('\n\n'))) + equations = [] + if len(parts) == 0: return '' - return '\\begin{gather}\n' + '\\\\'.join(ret) + '\n\\end{gather}' + elif len(parts) == 1: + if numbering: + begin = r'\begin{equation}' + labeldef + end = r'\end{equation}' + else: + begin = r'\begin{equation*}' + labeldef + end = r'\end{equation*}' + equations.append('\\begin{split}%s\\end{split}\n' % parts[0]) + else: + if numbering: + begin = r'\begin{align}%s\!\begin{aligned}' % labeldef + end = r'\end{aligned}\end{align}' + else: + begin = r'\begin{align*}%s\!\begin{aligned}' % labeldef + end = r'\end{aligned}\end{align*}' + for part in parts: + equations.append('%s\\\\\n' % part.strip()) + + return '%s\n%s%s' % (begin, ''.join(equations), end) def math_role(role, rawtext, text, lineno, inliner, options={}, content=[]): + # type: (unicode, unicode, unicode, int, Inliner, Dict, List[unicode]) -> Tuple[List[nodes.Node], List[nodes.Node]] # NOQA latex = utils.unescape(text, restore_backslashes=True) return [math(latex=latex)], [] -def eq_role(role, rawtext, text, lineno, inliner, options={}, content=[]): - text = utils.unescape(text) - node = eqref('(?)', '(?)', target=text) - node['docname'] = inliner.document.settings.env.docname - return [node], [] +def is_in_section_title(node): + # type: (nodes.Node) -> bool + """Determine whether the node is in a section title""" + from sphinx.util.nodes import traverse_parent + + for ancestor in traverse_parent(node): + if isinstance(ancestor, nodes.title) and \ + isinstance(ancestor.parent, nodes.section): + return True + return False class MathDirective(Directive): @@ -69,87 +185,128 @@ class MathDirective(Directive): } def run(self): + # type: () -> List[nodes.Node] latex = '\n'.join(self.content) if self.arguments and self.arguments[0]: latex = self.arguments[0] + '\n\n' + latex node = displaymath() node['latex'] = latex - node['label'] = self.options.get('name', None) - if node['label'] is None: - node['label'] = self.options.get('label', None) + node['number'] = None + node['label'] = None + if 'name' in self.options: + node['label'] = self.options['name'] + if 'label' in self.options: + node['label'] = self.options['label'] node['nowrap'] = 'nowrap' in self.options node['docname'] = self.state.document.settings.env.docname ret = [node] set_source_info(self, node) if hasattr(self, 'src'): node.source = self.src - if node['label']: - tnode = nodes.target('', '', ids=['equation-' + node['label']]) - self.state.document.note_explicit_target(tnode) - ret.insert(0, tnode) + self.add_target(ret) return ret + def add_target(self, ret): + # type: (List[nodes.Node]) -> None + node = ret[0] + env = self.state.document.settings.env + + # assign label automatically if math_number_all enabled + if node['label'] == '' or (env.config.math_number_all and not node['label']): + seq = env.new_serialno('sphinx.ext.math#equations') + node['label'] = "%s:%d" % (env.docname, seq) + + # no targets and numbers are needed + if not node['label']: + return + + # register label to domain + domain = env.get_domain('math') + try: + eqno = domain.add_equation(env, env.docname, node['label']) + node['number'] = eqno + + # add target node + target = nodes.target('', '', ids=['equation-' + node['label']]) + self.state.document.note_explicit_target(target) + ret.insert(0, target) + except UserWarning as exc: + self.state_machine.reporter.warning(exc.args[0], line=self.lineno) + def latex_visit_math(self, node): - self.body.append('\\(' + node['latex'] + '\\)') + # type: (nodes.NodeVisitor, math) -> None + if is_in_section_title(node): + protect = r'\protect' + else: + protect = '' + equation = protect + r'\(' + node['latex'] + protect + r'\)' + self.body.append(equation) raise nodes.SkipNode def latex_visit_displaymath(self, node): + # type: (nodes.NodeVisitor, displaymath) -> None + if not node['label']: + label = None + else: + label = "equation:%s:%s" % (node['docname'], node['label']) + if node['nowrap']: + if label: + self.body.append(r'\label{%s}' % label) self.body.append(node['latex']) else: - label = node['label'] and node['docname'] + '-' + node['label'] or None - self.body.append(wrap_displaymath(node['latex'], label)) + self.body.append(wrap_displaymath(node['latex'], label, + self.builder.config.math_number_all)) raise nodes.SkipNode def latex_visit_eqref(self, node): - self.body.append('\\eqref{%s-%s}' % (node['docname'], node['target'])) + # type: (nodes.NodeVisitor, eqref) -> None + label = "equation:%s:%s" % (node['docname'], node['target']) + self.body.append('\\eqref{%s}' % label) raise nodes.SkipNode def text_visit_math(self, node): + # type: (nodes.NodeVisitor, math) -> None self.add_text(node['latex']) raise nodes.SkipNode def text_visit_displaymath(self, node): + # type: (nodes.NodeVisitor, displaymath) -> None self.new_state() self.add_text(node['latex']) self.end_state() raise nodes.SkipNode -def text_visit_eqref(self, node): - self.add_text(node['target']) - raise nodes.SkipNode - - def man_visit_math(self, node): + # type: (nodes.NodeVisitor, math) -> None self.body.append(node['latex']) raise nodes.SkipNode def man_visit_displaymath(self, node): + # type: (nodes.NodeVisitor, displaymath) -> None self.visit_centered(node) def man_depart_displaymath(self, node): + # type: (nodes.NodeVisitor, displaymath) -> None self.depart_centered(node) -def man_visit_eqref(self, node): - self.body.append(node['target']) - raise nodes.SkipNode - - def texinfo_visit_math(self, node): + # type: (nodes.NodeVisitor, math) -> None self.body.append('@math{' + self.escape_arg(node['latex']) + '}') raise nodes.SkipNode def texinfo_visit_displaymath(self, node): + # type: (nodes.NodeVisitor, displaymath) -> None if node.get('label'): self.add_anchor(node['label'], node) self.body.append('\n\n@example\n%s\n@end example\n\n' % @@ -157,41 +314,14 @@ def texinfo_visit_displaymath(self, node): def texinfo_depart_displaymath(self, node): + # type: (nodes.NodeVisitor, displaymath) -> None pass -def texinfo_visit_eqref(self, node): - self.add_xref(node['docname'] + ':' + node['target'], - node['target'], node) - raise nodes.SkipNode - - -def html_visit_eqref(self, node): - self.body.append('<a href="#equation-%s">' % node['target']) - - -def html_depart_eqref(self, node): - self.body.append('</a>') - - -def number_equations(app, doctree, docname): - num = 0 - numbers = {} - for node in doctree.traverse(displaymath): - if node['label'] is not None: - num += 1 - node['number'] = num - numbers[node['label']] = num - else: - node['number'] = None - for node in doctree.traverse(eqref): - if node['target'] not in numbers: - continue - num = '(%d)' % numbers[node['target']] - node[0] = nodes.Text(num, num) - - def setup_math(app, htmlinlinevisitors, htmldisplayvisitors): + # type: (Sphinx, Tuple[Callable, Any], Tuple[Callable, Any]) -> None + app.add_config_value('math_number_all', False, 'env') + app.add_domain(MathDomain) app.add_node(math, override=True, latex=(latex_visit_math, None), text=(text_visit_math, None), @@ -204,13 +334,7 @@ def setup_math(app, htmlinlinevisitors, htmldisplayvisitors): man=(man_visit_displaymath, man_depart_displaymath), texinfo=(texinfo_visit_displaymath, texinfo_depart_displaymath), html=htmldisplayvisitors) - app.add_node(eqref, - latex=(latex_visit_eqref, None), - text=(text_visit_eqref, None), - man=(man_visit_eqref, None), - texinfo=(texinfo_visit_eqref, None), - html=(html_visit_eqref, html_depart_eqref)) + app.add_node(eqref, latex=(latex_visit_eqref, None)) app.add_role('math', math_role) - app.add_role('eq', eq_role) + app.add_role('eq', EqXRefRole(warn_dangling=True)) app.add_directive('math', MathDirective) - app.connect('doctree-resolved', number_equations) diff --git a/sphinx/ext/mathjax.py b/sphinx/ext/mathjax.py index d512db4652d..2f414f4e774 100644 --- a/sphinx/ext/mathjax.py +++ b/sphinx/ext/mathjax.py @@ -7,14 +7,15 @@ Sphinx's HTML writer -- requires the MathJax JavaScript library on your webserver/computer. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from docutils import nodes import sphinx -from sphinx.application import ExtensionError +from sphinx.locale import _ +from sphinx.errors import ExtensionError from sphinx.ext.mathbase import setup_math as mathbase_setup @@ -29,27 +30,30 @@ def html_visit_math(self, node): def html_visit_displaymath(self, node): self.body.append(self.starttag(node, 'div', CLASS='math')) if node['nowrap']: - self.body.append(self.builder.config.mathjax_display[0] + - node['latex'] + - self.builder.config.mathjax_display[1]) + self.body.append(self.encode(node['latex'])) self.body.append('</div>') raise nodes.SkipNode + # necessary to e.g. set the id property correctly + if node['number']: + self.body.append('<span class="eqno">(%s)' % node['number']) + self.add_permalink_ref(node, _('Permalink to this equation')) + self.body.append('</span>') + self.body.append(self.builder.config.mathjax_display[0]) parts = [prt for prt in node['latex'].split('\n\n') if prt.strip()] + if len(parts) > 1: # Add alignment if there are more than 1 equation + self.body.append(r' \begin{align}\begin{aligned}') for i, part in enumerate(parts): part = self.encode(part) - if i == 0: - # necessary to e.g. set the id property correctly - if node['number']: - self.body.append('<span class="eqno">(%s)</span>' % - node['number']) - if '&' in part or '\\\\' in part: - self.body.append(self.builder.config.mathjax_display[0] + - '\\begin{split}' + part + '\\end{split}' + - self.builder.config.mathjax_display[1]) + if r'\\' in part: + self.body.append(r'\begin{split}' + part + r'\end{split}') else: - self.body.append(self.builder.config.mathjax_display[0] + part + - self.builder.config.mathjax_display[1]) + self.body.append(part) + if i < len(parts) - 1: # append new line if not the last equation + self.body.append(r'\\') + if len(parts) > 1: # Add alignment if there are more than 1 equation + self.body.append(r'\end{aligned}\end{align} ') + self.body.append(self.builder.config.mathjax_display[1]) self.body.append('</div>\n') raise nodes.SkipNode @@ -62,7 +66,11 @@ def builder_inited(app): def setup(app): - mathbase_setup(app, (html_visit_math, None), (html_visit_displaymath, None)) + try: + mathbase_setup(app, (html_visit_math, None), (html_visit_displaymath, None)) + except ExtensionError: + raise ExtensionError('sphinx.ext.mathjax: other math package is already loaded') + # more information for mathjax secure url is here: # http://docs.mathjax.org/en/latest/start.html#secure-access-to-the-cdn app.add_config_value('mathjax_path', @@ -71,4 +79,5 @@ def setup(app): app.add_config_value('mathjax_inline', [r'\(', r'\)'], 'html') app.add_config_value('mathjax_display', [r'\[', r'\]'], 'html') app.connect('builder-inited', builder_inited) + return {'version': sphinx.__display_version__, 'parallel_read_safe': True} diff --git a/sphinx/ext/napoleon/__init__.py b/sphinx/ext/napoleon/__init__.py index dd0779a20aa..45cd0694221 100644 --- a/sphinx/ext/napoleon/__init__.py +++ b/sphinx/ext/napoleon/__init__.py @@ -5,7 +5,7 @@ Support for NumPy and Google style docstrings. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -14,8 +14,13 @@ from six import PY2, iteritems import sphinx +from sphinx.application import Sphinx from sphinx.ext.napoleon.docstring import GoogleDocstring, NumpyDocstring +if False: + # For type annotation + from typing import Any # NOQA + class Config(object): """Sphinx napoleon extension settings in `conf.py`. @@ -33,29 +38,47 @@ class Config(object): # Napoleon settings napoleon_google_docstring = True napoleon_numpy_docstring = True + napoleon_include_init_with_doc = False napoleon_include_private_with_doc = False - napoleon_include_special_with_doc = True + napoleon_include_special_with_doc = False napoleon_use_admonition_for_examples = False napoleon_use_admonition_for_notes = False napoleon_use_admonition_for_references = False napoleon_use_ivar = False napoleon_use_param = True napoleon_use_rtype = True + napoleon_use_keyword = True .. _Google style: - http://google-styleguide.googlecode.com/svn/trunk/pyguide.html + http://google.github.io/styleguide/pyguide.html .. _NumPy style: https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt Attributes ---------- - napoleon_google_docstring : bool, defaults to True + napoleon_google_docstring : :obj:`bool` (Defaults to True) True to parse `Google style`_ docstrings. False to disable support for Google style docstrings. - napoleon_numpy_docstring : bool, defaults to True + napoleon_numpy_docstring : :obj:`bool` (Defaults to True) True to parse `NumPy style`_ docstrings. False to disable support for NumPy style docstrings. - napoleon_include_private_with_doc : bool, defaults to False + napoleon_include_init_with_doc : :obj:`bool` (Defaults to False) + True to list ``__init___`` docstrings separately from the class + docstring. False to fall back to Sphinx's default behavior, which + considers the ``__init___`` docstring as part of the class + documentation. + + **If True**:: + + def __init__(self): + \"\"\" + This will be included in the docs because it has a docstring + \"\"\" + + def __init__(self): + # This will NOT be included in the docs + + napoleon_include_private_with_doc : :obj:`bool` (Defaults to False) True to include private members (like ``_membername``) with docstrings in the documentation. False to fall back to Sphinx's default behavior. @@ -71,7 +94,7 @@ def _skipped(self): # This will NOT be included in the docs pass - napoleon_include_special_with_doc : bool, defaults to True + napoleon_include_special_with_doc : :obj:`bool` (Defaults to False) True to include special members (like ``__membername__``) with docstrings in the documentation. False to fall back to Sphinx's default behavior. @@ -88,7 +111,7 @@ def __unicode__(self): # This will NOT be included in the docs return unicode(self.__class__.__name__) - napoleon_use_admonition_for_examples : bool, defaults to False + napoleon_use_admonition_for_examples : :obj:`bool` (Defaults to False) True to use the ``.. admonition::`` directive for the **Example** and **Examples** sections. False to use the ``.. rubric::`` directive instead. One may look better than the other depending on what HTML @@ -112,7 +135,7 @@ def __unicode__(self): This is just a quick example - napoleon_use_admonition_for_notes : bool, defaults to False + napoleon_use_admonition_for_notes : :obj:`bool` (Defaults to False) True to use the ``.. admonition::`` directive for **Notes** sections. False to use the ``.. rubric::`` directive instead. @@ -125,7 +148,7 @@ def __unicode__(self): -------- :attr:`napoleon_use_admonition_for_examples` - napoleon_use_admonition_for_references : bool, defaults to False + napoleon_use_admonition_for_references : :obj:`bool` (Defaults to False) True to use the ``.. admonition::`` directive for **References** sections. False to use the ``.. rubric::`` directive instead. @@ -133,7 +156,7 @@ def __unicode__(self): -------- :attr:`napoleon_use_admonition_for_examples` - napoleon_use_ivar : bool, defaults to False + napoleon_use_ivar : :obj:`bool` (Defaults to False) True to use the ``:ivar:`` role for instance variables. False to use the ``.. attribute::`` directive instead. @@ -157,7 +180,7 @@ def __unicode__(self): Description of `attr1` - napoleon_use_param : bool, defaults to True + napoleon_use_param : :obj:`bool` (Defaults to True) True to use a ``:param:`` role for each function parameter. False to use a single ``:parameters:`` role for all the parameters. @@ -184,7 +207,22 @@ def __unicode__(self): * **arg2** (*int, optional*) -- Description of `arg2`, defaults to 0 - napoleon_use_rtype : bool, defaults to True + napoleon_use_keyword : :obj:`bool` (Defaults to True) + True to use a ``:keyword:`` role for each function keyword argument. + False to use a single ``:keyword arguments:`` role for all the + keywords. + + This behaves similarly to :attr:`napoleon_use_param`. Note unlike + docutils, ``:keyword:`` and ``:param:`` will not be treated the same + way - there will be a separate "Keyword Arguments" section, rendered + in the same fashion as "Parameters" section (type links created if + possible) + + See Also + -------- + :attr:`napoleon_use_param` + + napoleon_use_rtype : :obj:`bool` (Defaults to True) True to use the ``:rtype:`` role for the return type. False to output the return type inline with the description. @@ -208,17 +246,20 @@ def __unicode__(self): _config_values = { 'napoleon_google_docstring': (True, 'env'), 'napoleon_numpy_docstring': (True, 'env'), + 'napoleon_include_init_with_doc': (False, 'env'), 'napoleon_include_private_with_doc': (False, 'env'), - 'napoleon_include_special_with_doc': (True, 'env'), + 'napoleon_include_special_with_doc': (False, 'env'), 'napoleon_use_admonition_for_examples': (False, 'env'), 'napoleon_use_admonition_for_notes': (False, 'env'), 'napoleon_use_admonition_for_references': (False, 'env'), 'napoleon_use_ivar': (False, 'env'), 'napoleon_use_param': (True, 'env'), 'napoleon_use_rtype': (True, 'env'), + 'napoleon_use_keyword': (True, 'env') } def __init__(self, **settings): + # type: (Any) -> None for name, (default, rebuild) in iteritems(self._config_values): setattr(self, name, default) for name, value in iteritems(settings): @@ -226,6 +267,7 @@ def __init__(self, **settings): def setup(app): + # type: (Sphinx) -> Dict[unicode, Any] """Sphinx extension setup function. When the extension is loaded, Sphinx imports this module and executes @@ -239,17 +281,19 @@ def setup(app): See Also -------- - The Sphinx documentation on `Extensions`_, the `Extension Tutorial`_, and - the `Extension API`_. + `The Sphinx documentation on Extensions + <http://sphinx-doc.org/extensions.html>`_ - .. _Extensions: http://sphinx-doc.org/extensions.html - .. _Extension Tutorial: http://sphinx-doc.org/ext/tutorial.html - .. _Extension API: http://sphinx-doc.org/ext/appapi.html + `The Extension Tutorial <http://sphinx-doc.org/extdev/tutorial.html>`_ + + `The Extension API <http://sphinx-doc.org/extdev/appapi.html>`_ """ - from sphinx.application import Sphinx if not isinstance(app, Sphinx): - return # probably called by tests + return # type: ignore + # probably called by tests + + _patch_python_domain() app.connect('autodoc-process-docstring', _process_docstring) app.connect('autodoc-skip-member', _skip_member) @@ -259,7 +303,29 @@ def setup(app): return {'version': sphinx.__display_version__, 'parallel_read_safe': True} +def _patch_python_domain(): + # type: () -> None + try: + from sphinx.domains.python import PyTypedField + except ImportError: + pass + else: + import sphinx.domains.python + import sphinx.locale # type: ignore + l_ = sphinx.locale.lazy_gettext + for doc_field in sphinx.domains.python.PyObject.doc_field_types: + if doc_field.name == 'parameter': + doc_field.names = ('param', 'parameter', 'arg', 'argument') + break + sphinx.domains.python.PyObject.doc_field_types.append( + PyTypedField('keyword', label=l_('Keyword Arguments'), + names=('keyword', 'kwarg', 'kwparam'), + typerolename='obj', typenames=('paramtype', 'kwtype'), + can_collapse=True)) + + def _process_docstring(app, what, name, obj, options, lines): + # type: (Sphinx, unicode, unicode, Any, Any, List[unicode]) -> None """Process the docstring for a given python object. Called when autodoc has read and processed a docstring. `lines` is a list @@ -296,6 +362,7 @@ def _process_docstring(app, what, name, obj, options, lines): """ result_lines = lines + docstring = None # type: GoogleDocstring if app.config.napoleon_numpy_docstring: docstring = NumpyDocstring(result_lines, app.config, app, what, name, obj, options) @@ -307,12 +374,19 @@ def _process_docstring(app, what, name, obj, options, lines): lines[:] = result_lines[:] +<<<<<<< HEAD def _skip_member(app, what, name, obj, namespace, skip, options): +======= +def _skip_member(app, what, name, obj, skip, options): + # type: (Sphinx, unicode, unicode, Any, bool, Any) -> bool +>>>>>>> master """Determine if private and special class members are included in docs. The following settings in conf.py determine if private and special class - members are included in the generated documentation: + members or init methods are included in the generated documentation: + * ``napoleon_include_init_with_doc`` -- + include init methods if they have docstrings * ``napoleon_include_private_with_doc`` -- include private members if they have docstrings * ``napoleon_include_special_with_doc`` -- @@ -349,7 +423,7 @@ def _skip_member(app, what, name, obj, namespace, skip, options): """ has_doc = getattr(obj, '__doc__', False) is_member = (what == 'class' or what == 'exception' or what == 'module') - if name != '__weakref__' and name != '__init__' and has_doc and is_member: + if name != '__weakref__' and has_doc and is_member: cls_is_owner = False if what == 'class' or what == 'exception': if PY2: @@ -382,10 +456,16 @@ def _skip_member(app, what, name, obj, namespace, skip, options): cls_is_owner = True if what == 'module' or cls_is_owner: - is_special = name.startswith('__') and name.endswith('__') - is_private = not is_special and name.startswith('_') + is_init = (name == '__init__') + is_special = (not is_init and name.startswith('__') and + name.endswith('__')) + is_private = (not is_init and not is_special and + name.startswith('_')) + inc_init = app.config.napoleon_include_init_with_doc inc_special = app.config.napoleon_include_special_with_doc inc_private = app.config.napoleon_include_private_with_doc - if (is_special and inc_special) or (is_private and inc_private): + if ((is_special and inc_special) or + (is_private and inc_private) or + (is_init and inc_init)): return False - return skip + return None diff --git a/sphinx/ext/napoleon/docstring.py b/sphinx/ext/napoleon/docstring.py index 4c23485072e..6fee87b3495 100644 --- a/sphinx/ext/napoleon/docstring.py +++ b/sphinx/ext/napoleon/docstring.py @@ -7,7 +7,7 @@ Classes for docstring parsing and formatting. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -15,18 +15,30 @@ import inspect import re -from six import string_types +from six import string_types, u from six.moves import range from sphinx.ext.napoleon.iterators import modify_iter from sphinx.util.pycompat import UnicodeMixin +if False: + # For type annotation + from typing import Any, Callable, Tuple, Union # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.config import Config as SphinxConfig # NOQA + _directive_regex = re.compile(r'\.\. \S+::') _google_section_regex = re.compile(r'^(\s|\w)+:\s*$') -_google_typed_arg_regex = re.compile(r'\s*(.+?)\s*\(\s*(.+?)\s*\)') +_google_typed_arg_regex = re.compile(r'\s*(.+?)\s*\(\s*(.*[^\s]+)\s*\)') _numpy_section_regex = re.compile(r'^[=\-`:\'"~^_*+#<>]{2,}\s*$') -_xref_regex = re.compile(r'(:\w+:\S+:`.+?`|:\S+:`.+?`|`.+?`)') +_single_colon_regex = re.compile(r'(?<!:):(?!:)') +_xref_regex = re.compile(r'(:(?:[a-zA-Z0-9]+[\-_+:.])*[a-zA-Z0-9]+:`.+?`)') +_bullet_list_regex = re.compile(r'^(\*|\+|\-)(\s+\S|\s*$)') +_enumerated_list_regex = re.compile( + r'^(?P<paren>\()?' + r'(\d+|#|[ivxlcdm]+|[IVXLCDM]+|[a-zA-Z])' + r'(?(paren)\)|\.)(\s+\S|\s*$)') class GoogleDocstring(UnicodeMixin): @@ -34,36 +46,34 @@ class GoogleDocstring(UnicodeMixin): Parameters ---------- - docstring : str or List[str] + docstring : :obj:`str` or :obj:`list` of :obj:`str` The docstring to parse, given either as a string or split into individual lines. - config : Optional[sphinx.ext.napoleon.Config or sphinx.config.Config] + config: :obj:`sphinx.ext.napoleon.Config` or :obj:`sphinx.config.Config` The configuration settings to use. If not given, defaults to the config object on `app`; or if `app` is not given defaults to the - a new `sphinx.ext.napoleon.Config` object. + a new :class:`sphinx.ext.napoleon.Config` object. - See Also - -------- - :class:`sphinx.ext.napoleon.Config` Other Parameters ---------------- - app : Optional[sphinx.application.Sphinx] + app : :class:`sphinx.application.Sphinx`, optional Application object representing the Sphinx process. - what : Optional[str] + what : :obj:`str`, optional A string specifying the type of the object to which the docstring belongs. Valid values: "module", "class", "exception", "function", "method", "attribute". - name : Optional[str] + name : :obj:`str`, optional The fully qualified name of the object. obj : module, class, exception, function, method, or attribute The object to which the docstring belongs. - options : Optional[sphinx.ext.autodoc.Options] + options : :class:`sphinx.ext.autodoc.Options`, optional The options given to the directive: an object with attributes inherited_members, undoc_members, show_inheritance and noindex that are True if the flag option of same name was given to the auto directive. + Example ------- >>> from sphinx.ext.napoleon import Config @@ -95,19 +105,20 @@ class GoogleDocstring(UnicodeMixin): """ def __init__(self, docstring, config=None, app=None, what='', name='', obj=None, options=None): + # type: (Union[unicode, List[unicode]], SphinxConfig, Sphinx, unicode, unicode, Any, Any) -> None # NOQA self._config = config self._app = app if not self._config: from sphinx.ext.napoleon import Config - self._config = self._app and self._app.config or Config() + self._config = self._app and self._app.config or Config() # type: ignore if not what: if inspect.isclass(obj): what = 'class' elif inspect.ismodule(obj): what = 'module' - elif isinstance(obj, collections.Callable): + elif isinstance(obj, collections.Callable): # type: ignore what = 'function' else: what = 'object' @@ -117,14 +128,14 @@ def __init__(self, docstring, config=None, app=None, what='', name='', self._obj = obj self._opt = options if isinstance(docstring, string_types): - docstring = docstring.splitlines() + docstring = docstring.splitlines() # type: ignore self._lines = docstring self._line_iter = modify_iter(docstring, modifier=lambda s: s.rstrip()) - self._parsed_lines = [] + self._parsed_lines = [] # type: List[unicode] self._is_in_section = False self._section_indent = 0 if not hasattr(self, '_directive_sections'): - self._directive_sections = [] + self._directive_sections = [] # type: List[unicode] if not hasattr(self, '_sections'): self._sections = { 'args': self._parse_parameters_section, @@ -144,15 +155,17 @@ def __init__(self, docstring, config=None, app=None, what='', name='', 'raises': self._parse_raises_section, 'references': self._parse_references_section, 'see also': self._parse_see_also_section, + 'todo': self._parse_todo_section, 'warning': self._parse_warning_section, 'warnings': self._parse_warning_section, 'warns': self._parse_warns_section, 'yield': self._parse_yields_section, 'yields': self._parse_yields_section, - } + } # type: Dict[unicode, Callable] self._parse() def __unicode__(self): + # type: () -> unicode """Return the parsed docstring in reStructuredText format. Returns @@ -161,69 +174,72 @@ def __unicode__(self): Unicode version of the docstring. """ - return u'\n'.join(self.lines()) + return u('\n').join(self.lines()) def lines(self): + # type: () -> List[unicode] """Return the parsed lines of the docstring in reStructuredText format. Returns ------- - List[str] + list(str) The lines of the docstring in a list. """ return self._parsed_lines def _consume_indented_block(self, indent=1): + # type: (int) -> List[unicode] lines = [] line = self._line_iter.peek() while(not self._is_section_break() and (not line or self._is_indented(line, indent))): - lines.append(next(self._line_iter)) + lines.append(next(self._line_iter)) # type: ignore line = self._line_iter.peek() return lines def _consume_contiguous(self): + # type: () -> List[unicode] lines = [] while (self._line_iter.has_next() and self._line_iter.peek() and not self._is_section_header()): - lines.append(next(self._line_iter)) + lines.append(next(self._line_iter)) # type: ignore return lines def _consume_empty(self): + # type: () -> List[unicode] lines = [] line = self._line_iter.peek() while self._line_iter.has_next() and not line: - lines.append(next(self._line_iter)) + lines.append(next(self._line_iter)) # type: ignore line = self._line_iter.peek() return lines def _consume_field(self, parse_type=True, prefer_type=False): - line = next(self._line_iter) + # type: (bool, bool) -> Tuple[unicode, unicode, List[unicode]] + line = next(self._line_iter) # type: ignore before, colon, after = self._partition_field_on_colon(line) - _name, _type, _desc = before, '', after + _name, _type, _desc = before, '', after # type: unicode, unicode, unicode if parse_type: - match = _google_typed_arg_regex.match(before) + match = _google_typed_arg_regex.match(before) # type: ignore if match: _name = match.group(1) _type = match.group(2) - if _name[:2] == '**': - _name = r'\*\*'+_name[2:] - elif _name[:1] == '*': - _name = r'\*'+_name[1:] + _name = self._escape_args_and_kwargs(_name) if prefer_type and not _type: _type, _name = _name, _type indent = self._get_indent(line) + 1 - _desc = [_desc] + self._dedent(self._consume_indented_block(indent)) + _desc = [_desc] + self._dedent(self._consume_indented_block(indent)) # type: ignore _desc = self.__class__(_desc, self._config).lines() - return _name, _type, _desc + return _name, _type, _desc # type: ignore def _consume_fields(self, parse_type=True, prefer_type=False): + # type: (bool, bool) -> List[Tuple[unicode, unicode, List[unicode]]] self._consume_empty() fields = [] while not self._is_section_break(): @@ -233,19 +249,21 @@ def _consume_fields(self, parse_type=True, prefer_type=False): return fields def _consume_inline_attribute(self): - line = next(self._line_iter) + # type: () -> Tuple[unicode, List[unicode]] + line = next(self._line_iter) # type: ignore _type, colon, _desc = self._partition_field_on_colon(line) if not colon: _type, _desc = _desc, _type - _desc = [_desc] + self._dedent(self._consume_to_end()) + _desc = [_desc] + self._dedent(self._consume_to_end()) # type: ignore _desc = self.__class__(_desc, self._config).lines() - return _type, _desc + return _type, _desc # type: ignore def _consume_returns_section(self): + # type: () -> List[Tuple[unicode, unicode, List[unicode]]] lines = self._dedent(self._consume_to_next_section()) if lines: before, colon, after = self._partition_field_on_colon(lines[0]) - _name, _type, _desc = '', '', lines + _name, _type, _desc = '', '', lines # type: unicode, unicode, List[unicode] if colon: if after: @@ -253,12 +271,7 @@ def _consume_returns_section(self): else: _desc = lines[1:] - match = _google_typed_arg_regex.match(before) - if match: - _name = match.group(1) - _type = match.group(2) - else: - _type = before + _type = before _desc = self.__class__(_desc, self._config).lines() return [(_name, _type, _desc,)] @@ -266,47 +279,77 @@ def _consume_returns_section(self): return [] def _consume_usage_section(self): + # type: () -> List[unicode] lines = self._dedent(self._consume_to_next_section()) return lines def _consume_section_header(self): - section = next(self._line_iter) + # type: () -> unicode + section = next(self._line_iter) # type: ignore stripped_section = section.strip(':') if stripped_section.lower() in self._sections: section = stripped_section return section def _consume_to_end(self): + # type: () -> List[unicode] lines = [] while self._line_iter.has_next(): - lines.append(next(self._line_iter)) + lines.append(next(self._line_iter)) # type: ignore return lines def _consume_to_next_section(self): + # type: () -> List[unicode] self._consume_empty() lines = [] while not self._is_section_break(): - lines.append(next(self._line_iter)) + lines.append(next(self._line_iter)) # type: ignore return lines + self._consume_empty() def _dedent(self, lines, full=False): + # type: (List[unicode], bool) -> List[unicode] if full: return [line.lstrip() for line in lines] else: min_indent = self._get_min_indent(lines) return [line[min_indent:] for line in lines] + def _escape_args_and_kwargs(self, name): + # type: (unicode) -> unicode + if name[:2] == '**': + return r'\*\*' + name[2:] + elif name[:1] == '*': + return r'\*' + name[1:] + else: + return name + + def _fix_field_desc(self, desc): + # type: (List[unicode]) -> List[unicode] + if self._is_list(desc): + desc = [''] + desc # type: ignore + elif desc[0].endswith('::'): + desc_block = desc[1:] + indent = self._get_indent(desc[0]) + block_indent = self._get_initial_indent(desc_block) + if block_indent > indent: + desc = [''] + desc # type: ignore + else: + desc = ['', desc[0]] + self._indent(desc_block, 4) + return desc + def _format_admonition(self, admonition, lines): + # type: (unicode, List[unicode]) -> List[unicode] lines = self._strip_empty(lines) if len(lines) == 1: return ['.. %s:: %s' % (admonition, lines[0].strip()), ''] elif lines: lines = self._indent(self._dedent(lines), 3) - return ['.. %s::' % admonition, ''] + lines + [''] + return ['.. %s::' % admonition, ''] + lines + [''] # type: ignore else: return ['.. %s::' % admonition, ''] def _format_block(self, prefix, lines, padding=None): + # type: (unicode, List[unicode], unicode) -> List[unicode] if lines: if padding is None: padding = ' ' * len(prefix) @@ -322,14 +365,32 @@ def _format_block(self, prefix, lines, padding=None): else: return [prefix] + def _format_docutils_params(self, fields, field_role='param', + type_role='type'): + # type: (List[Tuple[unicode, unicode, List[unicode]]], unicode, unicode) -> List[unicode] # NOQA + lines = [] + for _name, _type, _desc in fields: + _desc = self._strip_empty(_desc) + if any(_desc): + _desc = self._fix_field_desc(_desc) + field = ':%s %s: ' % (field_role, _name) + lines.extend(self._format_block(field, _desc)) + else: + lines.append(':%s %s:' % (field_role, _name)) + + if _type: + lines.append(':%s %s: %s' % (type_role, _name, _type)) + return lines + [''] + def _format_field(self, _name, _type, _desc): + # type: (unicode, unicode, List[unicode]) -> List[unicode] _desc = self._strip_empty(_desc) has_desc = any(_desc) separator = has_desc and ' -- ' or '' if _name: if _type: if '`' in _type: - field = '**%s** (%s)%s' % (_name, _type, separator) + field = '**%s** (%s)%s' % (_name, _type, separator) # type: unicode else: field = '**%s** (*%s*)%s' % (_name, _type, separator) else: @@ -343,15 +404,20 @@ def _format_field(self, _name, _type, _desc): field = '' if has_desc: - return [field + _desc[0]] + _desc[1:] + _desc = self._fix_field_desc(_desc) + if _desc[0]: + return [field + _desc[0]] + _desc[1:] + else: + return [field] + _desc else: return [field] def _format_fields(self, field_type, fields): + # type: (unicode, List[Tuple[unicode, unicode, List[unicode]]]) -> List[unicode] field_type = ':%s:' % field_type.strip() padding = ' ' * len(field_type) multi = len(fields) > 1 - lines = [] + lines = [] # type: List[unicode] for _name, _type, _desc in fields: field = self._format_field(_name, _type, _desc) if multi: @@ -366,6 +432,7 @@ def _format_fields(self, field_type, fields): return lines def _get_current_indent(self, peek_ahead=0): + # type: (int) -> int line = self._line_iter.peek(peek_ahead + 1)[peek_ahead] while line != self._line_iter.sentinel: if line: @@ -375,12 +442,21 @@ def _get_current_indent(self, peek_ahead=0): return 0 def _get_indent(self, line): + # type: (unicode) -> int for i, s in enumerate(line): if not s.isspace(): return i return len(line) + def _get_initial_indent(self, lines): + # type: (List[unicode]) -> int + for line in lines: + if line: + return self._get_indent(line) + return 0 + def _get_min_indent(self, lines): + # type: (List[unicode]) -> int min_indent = None for line in lines: if line: @@ -392,9 +468,11 @@ def _get_min_indent(self, lines): return min_indent or 0 def _indent(self, lines, n=4): + # type: (List[unicode], int) -> List[unicode] return [(' ' * n) + line for line in lines] def _is_indented(self, line, indent=1): + # type: (unicode, int) -> bool for i, s in enumerate(line): if i >= indent: return True @@ -402,7 +480,26 @@ def _is_indented(self, line, indent=1): return False return False + def _is_list(self, lines): + # type: (List[unicode]) -> bool + if not lines: + return False + if _bullet_list_regex.match(lines[0]): # type: ignore + return True + if _enumerated_list_regex.match(lines[0]): # type: ignore + return True + if len(lines) < 2 or lines[0].endswith('::'): + return False + indent = self._get_indent(lines[0]) + next_indent = indent + for line in lines[1:]: + if line: + next_indent = self._get_indent(line) + break + return next_indent > indent + def _is_section_header(self): + # type: () -> bool section = self._line_iter.peek().lower() match = _google_section_regex.match(section) if match and section.strip(':') in self._sections: @@ -417,6 +514,7 @@ def _is_section_header(self): return False def _is_section_break(self): + # type: () -> bool line = self._line_iter.peek() return (not self._line_iter.has_next() or self._is_section_header() or @@ -425,6 +523,7 @@ def _is_section_break(self): not self._is_indented(line, self._section_indent))) def _parse(self): + # type: () -> None self._parsed_lines = self._consume_empty() if self._name and (self._what == 'attribute' or self._what == 'data'): @@ -437,7 +536,7 @@ def _parse(self): section = self._consume_section_header() self._is_in_section = True self._section_indent = self._get_current_indent() - if _directive_regex.match(section): + if _directive_regex.match(section): # type: ignore lines = [section] + self._consume_to_next_section() else: lines = self._sections[section.lower()](section) @@ -452,42 +551,47 @@ def _parse(self): self._parsed_lines.extend(lines) def _parse_attribute_docstring(self): + # type: () -> List[unicode] _type, _desc = self._consume_inline_attribute() return self._format_field('', _type, _desc) def _parse_attributes_section(self, section): + # type: (unicode) -> List[unicode] lines = [] for _name, _type, _desc in self._consume_fields(): if self._config.napoleon_use_ivar: - field = ':ivar %s: ' % _name + field = ':ivar %s: ' % _name # type: unicode lines.extend(self._format_block(field, _desc)) if _type: lines.append(':vartype %s: %s' % (_name, _type)) else: lines.extend(['.. attribute:: ' + _name, '']) - field = self._format_field('', _type, _desc) - lines.extend(self._indent(field, 3)) + field = self._format_field('', _type, _desc) # type: ignore + lines.extend(self._indent(field, 3)) # type: ignore lines.append('') if self._config.napoleon_use_ivar: lines.append('') return lines def _parse_examples_section(self, section): + # type: (unicode) -> List[unicode] use_admonition = self._config.napoleon_use_admonition_for_examples return self._parse_generic_section(section, use_admonition) def _parse_usage_section(self, section): - header = ['.. rubric:: Usage:', ''] - block = ['.. code-block:: python', ''] + # type: (unicode) -> List[unicode] + header = ['.. rubric:: Usage:', ''] # type: List[unicode] + block = ['.. code-block:: python', ''] # type: List[unicode] lines = self._consume_usage_section() lines = self._indent(lines, 3) return header + block + lines + [''] def _parse_generic_section(self, section, use_admonition): + # type: (unicode, bool) -> List[unicode] lines = self._strip_empty(self._consume_to_next_section()) lines = self._dedent(lines) if use_admonition: - header = '.. admonition:: %s' % section + header = '.. admonition:: %s' % section # type: unicode lines = self._indent(lines, 3) else: header = '.. rubric:: %s' % section @@ -497,47 +601,55 @@ def _parse_generic_section(self, section, use_admonition): return [header, ''] def _parse_keyword_arguments_section(self, section): - return self._format_fields('Keyword Arguments', self._consume_fields()) + # type: (unicode) -> List[unicode] + fields = self._consume_fields() + if self._config.napoleon_use_keyword: + return self._format_docutils_params( + fields, + field_role="keyword", + type_role="kwtype") + else: + return self._format_fields('Keyword Arguments', fields) def _parse_methods_section(self, section): - lines = [] + # type: (unicode) -> List[unicode] + lines = [] # type: List[unicode] for _name, _, _desc in self._consume_fields(parse_type=False): lines.append('.. method:: %s' % _name) if _desc: - lines.extend([''] + self._indent(_desc, 3)) + lines.extend([''] + self._indent(_desc, 3)) # type: ignore lines.append('') return lines def _parse_note_section(self, section): + # type: (unicode) -> List[unicode] lines = self._consume_to_next_section() return self._format_admonition('note', lines) def _parse_notes_section(self, section): + # type: (unicode) -> List[unicode] use_admonition = self._config.napoleon_use_admonition_for_notes return self._parse_generic_section('Notes', use_admonition) def _parse_other_parameters_section(self, section): + # type: (unicode) -> List[unicode] return self._format_fields('Other Parameters', self._consume_fields()) def _parse_parameters_section(self, section): + # type: (unicode) -> List[unicode] fields = self._consume_fields() if self._config.napoleon_use_param: - lines = [] - for _name, _type, _desc in fields: - field = ':param %s: ' % _name - lines.extend(self._format_block(field, _desc)) - if _type: - lines.append(':type %s: %s' % (_name, _type)) - return lines + [''] + return self._format_docutils_params(fields) else: return self._format_fields('Parameters', fields) def _parse_raises_section(self, section): + # type: (unicode) -> List[unicode] fields = self._consume_fields(parse_type=False, prefer_type=True) field_type = ':raises:' padding = ' ' * len(field_type) multi = len(fields) > 1 - lines = [] + lines = [] # type: List[unicode] for _, _type, _desc in fields: _desc = self._strip_empty(_desc) has_desc = any(_desc) @@ -571,10 +683,12 @@ def _parse_raises_section(self, section): return lines def _parse_references_section(self, section): + # type: (unicode) -> List[unicode] use_admonition = self._config.napoleon_use_admonition_for_references return self._parse_generic_section('References', use_admonition) def _parse_returns_section(self, section): + # type: (unicode) -> List[unicode] fields = self._consume_returns_section() multi = len(fields) > 1 if multi: @@ -582,7 +696,7 @@ def _parse_returns_section(self, section): else: use_rtype = self._config.napoleon_use_rtype - lines = [] + lines = [] # type: List[unicode] for _name, _type, _desc in fields: if use_rtype: field = self._format_field(_name, '', _desc) @@ -603,34 +717,45 @@ def _parse_returns_section(self, section): return lines def _parse_see_also_section(self, section): + # type: (unicode) -> List[unicode] lines = self._consume_to_next_section() return self._format_admonition('seealso', lines) + def _parse_todo_section(self, section): + # type: (unicode) -> List[unicode] + lines = self._consume_to_next_section() + return self._format_admonition('todo', lines) + def _parse_warning_section(self, section): + # type: (unicode) -> List[unicode] lines = self._consume_to_next_section() return self._format_admonition('warning', lines) def _parse_warns_section(self, section): + # type: (unicode) -> List[unicode] return self._format_fields('Warns', self._consume_fields()) def _parse_yields_section(self, section): + # type: (unicode) -> List[unicode] fields = self._consume_returns_section() return self._format_fields('Yields', fields) def _partition_field_on_colon(self, line): + # type: (unicode) -> Tuple[unicode, unicode, unicode] before_colon = [] after_colon = [] colon = '' found_colon = False - for i, source in enumerate(_xref_regex.split(line)): + for i, source in enumerate(_xref_regex.split(line)): # type: ignore if found_colon: after_colon.append(source) else: - if (i % 2) == 0 and ":" in source: + m = _single_colon_regex.search(source) + if (i % 2) == 0 and m: found_colon = True - before, colon, after = source.partition(":") - before_colon.append(before) - after_colon.append(after) + colon = source[m.start(): m.end()] + before_colon.append(source[:m.start()]) + after_colon.append(source[m.end():]) else: before_colon.append(source) @@ -639,6 +764,7 @@ def _partition_field_on_colon(self, line): "".join(after_colon).strip()) def _strip_empty(self, lines): + # type: (List[unicode]) -> List[unicode] if lines: start = -1 for i, line in enumerate(lines): @@ -663,36 +789,34 @@ class NumpyDocstring(GoogleDocstring): Parameters ---------- - docstring : str or List[str] + docstring : :obj:`str` or :obj:`list` of :obj:`str` The docstring to parse, given either as a string or split into individual lines. - config : Optional[sphinx.ext.napoleon.Config or sphinx.config.Config] + config: :obj:`sphinx.ext.napoleon.Config` or :obj:`sphinx.config.Config` The configuration settings to use. If not given, defaults to the config object on `app`; or if `app` is not given defaults to the - a new `sphinx.ext.napoleon.Config` object. + a new :class:`sphinx.ext.napoleon.Config` object. - See Also - -------- - :class:`sphinx.ext.napoleon.Config` Other Parameters ---------------- - app : Optional[sphinx.application.Sphinx] + app : :class:`sphinx.application.Sphinx`, optional Application object representing the Sphinx process. - what : Optional[str] + what : :obj:`str`, optional A string specifying the type of the object to which the docstring belongs. Valid values: "module", "class", "exception", "function", "method", "attribute". - name : Optional[str] + name : :obj:`str`, optional The fully qualified name of the object. obj : module, class, exception, function, method, or attribute The object to which the docstring belongs. - options : Optional[sphinx.ext.autodoc.Options] + options : :class:`sphinx.ext.autodoc.Options`, optional The options given to the directive: an object with attributes inherited_members, undoc_members, show_inheritance and noindex that are True if the flag option of same name was given to the auto directive. + Example ------- >>> from sphinx.ext.napoleon import Config @@ -749,41 +873,48 @@ class NumpyDocstring(GoogleDocstring): Returns ------- - List[str] + list(str) The lines of the docstring in a list. """ def __init__(self, docstring, config=None, app=None, what='', name='', obj=None, options=None): + # type: (Union[unicode, List[unicode]], SphinxConfig, Sphinx, unicode, unicode, Any, Any) -> None # NOQA self._directive_sections = ['.. index::'] super(NumpyDocstring, self).__init__(docstring, config, app, what, name, obj, options) def _consume_field(self, parse_type=True, prefer_type=False): - line = next(self._line_iter) + # type: (bool, bool) -> Tuple[unicode, unicode, List[unicode]] + line = next(self._line_iter) # type: ignore if parse_type: _name, _, _type = self._partition_field_on_colon(line) else: _name, _type = line, '' _name, _type = _name.strip(), _type.strip() + _name = self._escape_args_and_kwargs(_name) + if prefer_type and not _type: _type, _name = _name, _type - indent = self._get_indent(line) - _desc = self._dedent(self._consume_indented_block(indent + 1)) + indent = self._get_indent(line) + 1 + _desc = self._dedent(self._consume_indented_block(indent)) _desc = self.__class__(_desc, self._config).lines() return _name, _type, _desc def _consume_returns_section(self): + # type: () -> List[Tuple[unicode, unicode, List[unicode]]] return self._consume_fields(prefer_type=True) def _consume_section_header(self): - section = next(self._line_iter) + # type: () -> unicode + section = next(self._line_iter) # type: ignore if not _directive_regex.match(section): # Consume the header underline - next(self._line_iter) + next(self._line_iter) # type: ignore return section def _is_section_break(self): + # type: () -> bool line1, line2 = self._line_iter.peek(2) return (not self._line_iter.has_next() or self._is_section_header() or @@ -793,10 +924,11 @@ def _is_section_break(self): not self._is_indented(line1, self._section_indent))) def _is_section_header(self): + # type: () -> bool section, underline = self._line_iter.peek(2) section = section.lower() if section in self._sections and isinstance(underline, string_types): - return bool(_numpy_section_regex.match(underline)) + return bool(_numpy_section_regex.match(underline)) # type: ignore elif self._directive_sections: if _directive_regex.match(section): for directive_section in self._directive_sections: @@ -808,6 +940,7 @@ def _is_section_header(self): r" (?P<name2>[a-zA-Z0-9_.-]+))\s*", re.X) def _parse_see_also_section(self, section): + # type: (unicode) -> List[unicode] lines = self._consume_to_next_section() try: return self._parse_numpydoc_see_also_section(lines) @@ -815,6 +948,7 @@ def _parse_see_also_section(self, section): return self._format_admonition('seealso', lines) def _parse_numpydoc_see_also_section(self, content): + # type: (List[unicode]) -> List[unicode] """ Derived from the NumpyDoc implementation of _parse_see_also. @@ -847,13 +981,13 @@ def push_item(name, rest): del rest[:] current_func = None - rest = [] + rest = [] # type: List[unicode] for line in content: if not line.strip(): continue - m = self._name_rgx.match(line) + m = self._name_rgx.match(line) # type: ignore if m and line[m.end():].strip().startswith(':'): push_item(current_func, rest) current_func, line = line[:m.end()], line[m.end():] @@ -893,12 +1027,12 @@ def push_item(name, rest): 'const': 'const', 'attribute': 'attr', 'attr': 'attr' - } + } # type: Dict[unicode, unicode] if self._what is None: - func_role = 'obj' + func_role = 'obj' # type: unicode else: func_role = roles.get(self._what, '') - lines = [] + lines = [] # type: List[unicode] last_had_desc = True for func, desc, role in items: if role: diff --git a/sphinx/ext/napoleon/iterators.py b/sphinx/ext/napoleon/iterators.py index f59a3f088af..76544b534f9 100644 --- a/sphinx/ext/napoleon/iterators.py +++ b/sphinx/ext/napoleon/iterators.py @@ -7,12 +7,16 @@ A collection of helpful iterators. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ import collections +if False: + # For type annotation + from typing import Any, Iterable # NOQA + class peek_iter(object): """An iterator object that supports peeking ahead. @@ -48,34 +52,39 @@ class peek_iter(object): """ def __init__(self, *args): + # type: (Any) -> None """__init__(o, sentinel=None)""" - self._iterable = iter(*args) - self._cache = collections.deque() + self._iterable = iter(*args) # type: Iterable + self._cache = collections.deque() # type: collections.deque if len(args) == 2: self.sentinel = args[1] else: self.sentinel = object() def __iter__(self): + # type: () -> peek_iter return self def __next__(self, n=None): + # type: (int) -> Any # note: prevent 2to3 to transform self.next() in next(self) which # causes an infinite loop ! return getattr(self, 'next')(n) def _fillcache(self, n): + # type: (int) -> None """Cache `n` items. If `n` is 0 or None, then 1 item is cached.""" if not n: n = 1 try: while len(self._cache) < n: - self._cache.append(next(self._iterable)) + self._cache.append(next(self._iterable)) # type: ignore except StopIteration: while len(self._cache) < n: self._cache.append(self.sentinel) def has_next(self): + # type: () -> bool """Determine if iterator is exhausted. Returns @@ -91,6 +100,7 @@ def has_next(self): return self.peek() != self.sentinel def next(self, n=None): + # type: (int) -> Any """Get the next item or `n` items of the iterator. Parameters @@ -126,6 +136,7 @@ def next(self, n=None): return result def peek(self, n=None): + # type: (int) -> Any """Preview the next item or `n` items of the iterator. The iterator is not advanced when peek is called. @@ -209,6 +220,7 @@ class modify_iter(peek_iter): """ def __init__(self, *args, **kwargs): + # type: (Any, Any) -> None """__init__(o, sentinel=None, modifier=lambda x: x)""" if 'modifier' in kwargs: self.modifier = kwargs['modifier'] @@ -223,6 +235,7 @@ def __init__(self, *args, **kwargs): super(modify_iter, self).__init__(*args) def _fillcache(self, n): + # type: (int) -> None """Cache `n` modified items. If `n` is 0 or None, 1 item is cached. Each item returned by the iterator is passed through the @@ -233,7 +246,7 @@ def _fillcache(self, n): n = 1 try: while len(self._cache) < n: - self._cache.append(self.modifier(next(self._iterable))) + self._cache.append(self.modifier(next(self._iterable))) # type: ignore except StopIteration: while len(self._cache) < n: self._cache.append(self.sentinel) diff --git a/sphinx/ext/pngmath.py b/sphinx/ext/pngmath.py index 8ef860f802b..49c81b23337 100644 --- a/sphinx/ext/pngmath.py +++ b/sphinx/ext/pngmath.py @@ -3,9 +3,10 @@ sphinx.ext.pngmath ~~~~~~~~~~~~~~~~~~ - Render math in HTML via dvipng. + Render math in HTML via dvipng. This extension has been deprecated; please + use sphinx.ext.imgmath instead. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -19,20 +20,28 @@ from hashlib import sha1 from six import text_type + from docutils import nodes import sphinx -from sphinx.errors import SphinxError +from sphinx.errors import SphinxError, ExtensionError from sphinx.util.png import read_png_depth, write_png_depth from sphinx.util.osutil import ensuredir, ENOENT, cd from sphinx.util.pycompat import sys_encoding from sphinx.ext.mathbase import setup_math as mathbase_setup, wrap_displaymath +if False: + # For type annotation + from typing import Any, Tuple # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.ext.mathbase import math as math_node, displaymath # NOQA + class MathExtError(SphinxError): category = 'Math extension error' def __init__(self, msg, stderr=None, stdout=None): + # type: (unicode, unicode, unicode) -> None if stderr: msg += '\n[stderr]\n' + stderr.decode(sys_encoding, 'replace') if stdout: @@ -70,6 +79,7 @@ def __init__(self, msg, stderr=None, stdout=None): def render_math(self, math): + # type: (nodes.NodeVisitor, unicode) -> Tuple[unicode, int] """Render the LaTeX math expression *math* using latex and dvipng. Return the filename relative to the built document and the "depth", @@ -106,9 +116,8 @@ def render_math(self, math): else: tempdir = self.builder._mathpng_tempdir - tf = codecs.open(path.join(tempdir, 'math.tex'), 'w', 'utf-8') - tf.write(latex) - tf.close() + with codecs.open(path.join(tempdir, 'math.tex'), 'w', 'utf-8') as tf: # type: ignore + tf.write(latex) # build latex command; old versions of latex don't have the # --output-directory option, so we have to manually chdir to the @@ -170,23 +179,26 @@ def render_math(self, math): def cleanup_tempdir(app, exc): + # type: (Sphinx, Exception) -> None if exc: return if not hasattr(app.builder, '_mathpng_tempdir'): return try: - shutil.rmtree(app.builder._mathpng_tempdir) + shutil.rmtree(app.builder._mathpng_tempdir) # type: ignore except Exception: pass def get_tooltip(self, node): + # type: (nodes.NodeVisitor, math_node) -> unicode if self.builder.config.pngmath_add_tooltips: return ' alt="%s"' % self.encode(node['latex']).strip() return '' def html_visit_math(self, node): + # type: (nodes.NodeVisitor, math_node) -> None try: fname, depth = render_math(self, '$'+node['latex']+'$') except MathExtError as exc: @@ -209,17 +221,20 @@ def html_visit_math(self, node): def html_visit_displaymath(self, node): + # type: (nodes.NodeVisitor, displaymath) -> None if node['nowrap']: latex = node['latex'] else: - latex = wrap_displaymath(node['latex'], None) + latex = wrap_displaymath(node['latex'], None, + self.builder.config.math_number_all) try: fname, depth = render_math(self, latex) except MathExtError as exc: - sm = nodes.system_message(str(exc), type='WARNING', level=2, + msg = text_type(exc) + sm = nodes.system_message(msg, type='WARNING', level=2, backrefs=[], source=node['latex']) sm.walkabout(self) - self.builder.warn('inline latex %r: ' % node['latex'] + str(exc)) + self.builder.warn('inline latex %r: ' % node['latex'] + msg) raise nodes.SkipNode self.body.append(self.starttag(node, 'div', CLASS='math')) self.body.append('<p>') @@ -236,7 +251,13 @@ def html_visit_displaymath(self, node): def setup(app): - mathbase_setup(app, (html_visit_math, None), (html_visit_displaymath, None)) + # type: (Sphinx) -> Dict[unicode, Any] + app.warn('sphinx.ext.pngmath has been deprecated. Please use sphinx.ext.imgmath instead.') + try: + mathbase_setup(app, (html_visit_math, None), (html_visit_displaymath, None)) + except ExtensionError: + raise ExtensionError('sphinx.ext.pngmath: other math package is already loaded') + app.add_config_value('pngmath_dvipng', 'dvipng', 'html') app.add_config_value('pngmath_latex', 'latex', 'html') app.add_config_value('pngmath_use_preview', False, 'html') diff --git a/sphinx/ext/todo.py b/sphinx/ext/todo.py index 64359c9b084..5db878ad512 100644 --- a/sphinx/ext/todo.py +++ b/sphinx/ext/todo.py @@ -8,17 +8,25 @@ all todos of your project and lists them along with a backlink to the original location. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from docutils import nodes +from docutils.parsers.rst import directives import sphinx from sphinx.locale import _ from sphinx.environment import NoUri from sphinx.util.nodes import set_source_info -from sphinx.util.compat import Directive, make_admonition +from docutils.parsers.rst import Directive +from docutils.parsers.rst.directives.admonitions import BaseAdmonition + +if False: + # For type annotation + from typing import Any, Iterable # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.environment import BuildEnvironment # NOQA class todo_node(nodes.Admonition, nodes.Element): @@ -29,37 +37,49 @@ class todolist(nodes.General, nodes.Element): pass -class Todo(Directive): +class Todo(BaseAdmonition): """ A todo entry, displayed (if configured) in the form of an admonition. """ + node_class = todo_node has_content = True required_arguments = 0 optional_arguments = 0 final_argument_whitespace = False - option_spec = {} + option_spec = { + 'class': directives.class_option, + } def run(self): + # type: () -> List[nodes.Node] + if not self.options.get('class'): + self.options['class'] = ['admonition-todo'] + + (todo,) = super(Todo, self).run() + if isinstance(todo, nodes.system_message): + return [todo] + + todo.insert(0, nodes.title(text=_('Todo'))) + set_source_info(self, todo) + env = self.state.document.settings.env targetid = 'index-%s' % env.new_serialno('index') targetnode = nodes.target('', '', ids=[targetid]) - - ad = make_admonition(todo_node, self.name, [_('Todo')], self.options, - self.content, self.lineno, self.content_offset, - self.block_text, self.state, self.state_machine) - set_source_info(self, ad[0]) - return [targetnode] + ad + return [targetnode, todo] def process_todos(app, doctree): + # type: (Sphinx, nodes.Node) -> None # collect all todos in the environment # this is not done in the directive itself because it some transformations # must have already been run, e.g. substitutions env = app.builder.env if not hasattr(env, 'todo_all_todos'): - env.todo_all_todos = [] + env.todo_all_todos = [] # type: ignore for node in doctree.traverse(todo_node): + app.emit('todo-defined', node) + try: targetnode = node.parent[node.parent.index(node) - 1] if not isinstance(targetnode, nodes.target): @@ -68,7 +88,7 @@ def process_todos(app, doctree): targetnode = None newnode = node.deepcopy() del newnode['ids'] - env.todo_all_todos.append({ + env.todo_all_todos.append({ # type: ignore 'docname': env.docname, 'source': node.source or env.doc2path(env.docname), 'lineno': node.line, @@ -76,6 +96,9 @@ def process_todos(app, doctree): 'target': targetnode, }) + if env.config.todo_emit_warnings: + env.warn_node("TODO entry found: %s" % node[1].astext(), node) + class TodoList(Directive): """ @@ -86,15 +109,17 @@ class TodoList(Directive): required_arguments = 0 optional_arguments = 0 final_argument_whitespace = False - option_spec = {} + option_spec = {} # type: Dict def run(self): + # type: () -> List[todolist] # Simply insert an empty todolist node which will be replaced later # when process_todo_nodes is called return [todolist('')] def process_todo_nodes(app, doctree, fromdocname): + # type: (Sphinx, nodes.Node, unicode) -> None if not app.config['todo_include_todos']: for node in doctree.traverse(todo_node): node.parent.remove(node) @@ -104,7 +129,7 @@ def process_todo_nodes(app, doctree, fromdocname): env = app.builder.env if not hasattr(env, 'todo_all_todos'): - env.todo_all_todos = [] + env.todo_all_todos = [] # type: ignore for node in doctree.traverse(todolist): if not app.config['todo_include_todos']: @@ -113,11 +138,15 @@ def process_todo_nodes(app, doctree, fromdocname): content = [] - for todo_info in env.todo_all_todos: + for todo_info in env.todo_all_todos: # type: ignore para = nodes.paragraph(classes=['todo-source']) - description = _('(The <<original entry>> is located in ' - ' %s, line %d.)') % \ - (todo_info['source'], todo_info['lineno']) + if app.config['todo_link_only']: + description = _('<<original entry>>') + else: + description = ( + _('(The <<original entry>> is located in %s, line %d.)') % + (todo_info['source'], todo_info['lineno']) + ) desc1 = description[:description.find('<<')] desc2 = description[description.find('>>')+2:] para += nodes.Text(desc1, desc1) @@ -149,30 +178,39 @@ def process_todo_nodes(app, doctree, fromdocname): def purge_todos(app, env, docname): + # type: (Sphinx, BuildEnvironment, unicode) -> None if not hasattr(env, 'todo_all_todos'): return - env.todo_all_todos = [todo for todo in env.todo_all_todos + env.todo_all_todos = [todo for todo in env.todo_all_todos # type: ignore if todo['docname'] != docname] def merge_info(app, env, docnames, other): + # type: (Sphinx, BuildEnvironment, Iterable[unicode], BuildEnvironment) -> None if not hasattr(other, 'todo_all_todos'): return if not hasattr(env, 'todo_all_todos'): - env.todo_all_todos = [] - env.todo_all_todos.extend(other.todo_all_todos) + env.todo_all_todos = [] # type: ignore + env.todo_all_todos.extend(other.todo_all_todos) # type: ignore def visit_todo_node(self, node): + # type: (nodes.NodeVisitor, todo_node) -> None self.visit_admonition(node) + # self.visit_admonition(node, 'todo') def depart_todo_node(self, node): + # type: (nodes.NodeVisitor, todo_node) -> None self.depart_admonition(node) def setup(app): + # type: (Sphinx) -> Dict[unicode, Any] + app.add_event('todo-defined') app.add_config_value('todo_include_todos', False, 'html') + app.add_config_value('todo_link_only', False, 'html') + app.add_config_value('todo_emit_warnings', False, 'html') app.add_node(todolist) app.add_node(todo_node, diff --git a/sphinx/ext/viewcode.py b/sphinx/ext/viewcode.py index e6af4f550db..813a465dbc3 100644 --- a/sphinx/ext/viewcode.py +++ b/sphinx/ext/viewcode.py @@ -5,13 +5,14 @@ Add links to module code in Python object descriptions. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ import traceback from six import iteritems, text_type + from docutils import nodes import sphinx @@ -20,10 +21,17 @@ from sphinx.pycode import ModuleAnalyzer from sphinx.util import get_full_modname from sphinx.util.nodes import make_refnode -from sphinx.util.console import blue +from sphinx.util.console import blue # type: ignore + +if False: + # For type annotation + from typing import Any, Iterable, Iterator, Tuple # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.environment import BuildEnvironment # NOQA def _get_full_modname(app, modname, attribute): + # type: (Sphinx, str, unicode) -> unicode try: return get_full_modname(modname, attribute) except AttributeError: @@ -43,16 +51,21 @@ def _get_full_modname(app, modname, attribute): def doctree_read(app, doctree): + # type: (Sphinx, nodes.Node) -> None env = app.builder.env if not hasattr(env, '_viewcode_modules'): - env._viewcode_modules = {} + env._viewcode_modules = {} # type: ignore + if app.builder.name == "singlehtml": + return + if app.builder.name.startswith("epub") and not env.config.viewcode_enable_epub: + return def has_tag(modname, fullname, docname, refname): - entry = env._viewcode_modules.get(modname, None) + entry = env._viewcode_modules.get(modname, None) # type: ignore try: analyzer = ModuleAnalyzer.for_module(modname) except Exception: - env._viewcode_modules[modname] = False + env._viewcode_modules[modname] = False # type: ignore return if not isinstance(analyzer.code, text_type): code = analyzer.code.decode(analyzer.encoding) @@ -61,7 +74,7 @@ def has_tag(modname, fullname, docname, refname): if entry is None or entry[0] != code: analyzer.find_tags() entry = code, analyzer.tags, {}, refname - env._viewcode_modules[modname] = entry + env._viewcode_modules[modname] = entry # type: ignore elif entry is False: return _, tags, used, _ = entry @@ -72,7 +85,7 @@ def has_tag(modname, fullname, docname, refname): for objnode in doctree.traverse(addnodes.desc): if objnode.get('domain') != 'py': continue - names = set() + names = set() # type: Set[unicode] for signode in objnode: if not isinstance(signode, addnodes.desc_signature): continue @@ -102,16 +115,18 @@ def has_tag(modname, fullname, docname, refname): def env_merge_info(app, env, docnames, other): + # type: (Sphinx, BuildEnvironment, Iterable[unicode], BuildEnvironment) -> None if not hasattr(other, '_viewcode_modules'): return # create a _viewcode_modules dict on the main environment if not hasattr(env, '_viewcode_modules'): - env._viewcode_modules = {} + env._viewcode_modules = {} # type: ignore # now merge in the information from the subprocess - env._viewcode_modules.update(other._viewcode_modules) + env._viewcode_modules.update(other._viewcode_modules) # type: ignore def missing_reference(app, env, node, contnode): + # type: (Sphinx, BuildEnvironment, nodes.Node, nodes.Node) -> nodes.Node # resolve our "viewcode" reference nodes -- they need special treatment if node['reftype'] == 'viewcode': return make_refnode(app.builder, node['refdoc'], node['reftarget'], @@ -119,27 +134,32 @@ def missing_reference(app, env, node, contnode): def collect_pages(app): + # type: (Sphinx) -> Iterator[Tuple[unicode, Dict[unicode, Any], unicode]] env = app.builder.env if not hasattr(env, '_viewcode_modules'): return - highlighter = app.builder.highlighter + highlighter = app.builder.highlighter # type: ignore urito = app.builder.get_relative_uri - modnames = set(env._viewcode_modules) + modnames = set(env._viewcode_modules) # type: ignore # app.builder.info(' (%d module code pages)' % # len(env._viewcode_modules), nonl=1) for modname, entry in app.status_iterator( - iteritems(env._viewcode_modules), 'highlighting module code... ', - blue, len(env._viewcode_modules), lambda x: x[0]): + iteritems(env._viewcode_modules), 'highlighting module code... ', # type:ignore + blue, len(env._viewcode_modules), lambda x: x[0]): # type:ignore if not entry: continue code, tags, used, refname = entry # construct a page name for the highlighted source pagename = '_modules/' + modname.replace('.', '/') # highlight the source using the builder's highlighter - highlighted = highlighter.highlight_block(code, 'python', linenos=False) + if env.config.highlight_language in ('python3', 'default'): + lexer = env.config.highlight_language + else: + lexer = 'python' + highlighted = highlighter.highlight_block(code, lexer, linenos=False) # split the code into lines lines = highlighted.splitlines() # split off wrap markup from the first line of the actual code @@ -177,7 +197,7 @@ def collect_pages(app): 'title': modname, 'body': (_('<h1>Source code for %s</h1>') % modname + '\n'.join(lines)), - } + } # type: Dict[unicode, Any] yield (pagename, context, 'page.html') if not modnames: @@ -210,7 +230,9 @@ def collect_pages(app): def setup(app): + # type: (Sphinx) -> Dict[unicode, Any] app.add_config_value('viewcode_import', True, False) + app.add_config_value('viewcode_enable_epub', False, False) app.connect('doctree-read', doctree_read) app.connect('env-merge-info', env_merge_info) app.connect('html-collect-pages', collect_pages) diff --git a/sphinx/highlighting.py b/sphinx/highlighting.py index 6f22993c216..a3e36486f20 100644 --- a/sphinx/highlighting.py +++ b/sphinx/highlighting.py @@ -5,28 +5,20 @@ Highlight code blocks using Pygments. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ -import re -import textwrap - -try: - import parser -except ImportError: - # parser is not available on Jython - parser = None - -from six import PY2, text_type +from six import text_type from sphinx.util.pycompat import htmlescape from sphinx.util.texescape import tex_hl_escape_map_new from sphinx.ext import doctest from pygments import highlight -from pygments.lexers import PythonLexer, PythonConsoleLexer, CLexer, \ - TextLexer, RstLexer +from pygments.lexer import Lexer # NOQA +from pygments.lexers import PythonLexer, Python3Lexer, PythonConsoleLexer, \ + CLexer, TextLexer, RstLexer from pygments.lexers import get_lexer_by_name, guess_lexer from pygments.formatters import HtmlFormatter, LatexFormatter from pygments.filters import ErrorToken @@ -37,11 +29,12 @@ lexers = dict( none = TextLexer(stripnl=False), python = PythonLexer(stripnl=False), + python3 = Python3Lexer(stripnl=False), pycon = PythonConsoleLexer(stripnl=False), pycon3 = PythonConsoleLexer(python3=True, stripnl=False), rest = RstLexer(stripnl=False), c = CLexer(stripnl=False), -) +) # type: Dict[unicode, Lexer] for _lexer in lexers.values(): _lexer.add_filter('raiseonerror') @@ -99,41 +92,6 @@ def unhighlighted(self, source): return '\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n' + \ source + '\\end{Verbatim}\n' - def try_parse(self, src): - # Make sure it ends in a newline - src += '\n' - - # Ignore consistent indentation. - if src.lstrip('\n').startswith(' '): - src = textwrap.dedent(src) - - # Replace "..." by a mark which is also a valid python expression - # (Note, the highlighter gets the original source, this is only done - # to allow "..." in code and still highlight it as Python code.) - mark = "__highlighting__ellipsis__" - src = src.replace("...", mark) - - # lines beginning with "..." are probably placeholders for suite - src = re.sub(r"(?m)^(\s*)" + mark + "(.)", r"\1" + mark + r"# \2", src) - - if PY2 and isinstance(src, text_type): - # Non-ASCII chars will only occur in string literals - # and comments. If we wanted to give them to the parser - # correctly, we'd have to find out the correct source - # encoding. Since it may not even be given in a snippet, - # just replace all non-ASCII characters. - src = src.encode('ascii', 'replace') - - if parser is None: - return True - - try: - parser.suite(src) - except (SyntaxError, UnicodeEncodeError): - return False - else: - return True - def highlight_block(self, source, lang, opts=None, warn=None, force=False, **kwargs): if not isinstance(source, text_type): source = source.decode() @@ -143,17 +101,13 @@ def highlight_block(self, source, lang, opts=None, warn=None, force=False, **kwa if source.startswith('>>>'): # interactive session lexer = lexers['pycon'] - elif not force: - # maybe Python -- try parsing it - if self.try_parse(source): - lexer = lexers['python'] - else: - lexer = lexers['none'] else: lexer = lexers['python'] - elif lang in ('python3', 'py3') and source.startswith('>>>'): - # for py3, recognize interactive sessions, but do not try parsing... - lexer = lexers['pycon3'] + elif lang in ('py3', 'python3', 'default'): + if source.startswith('>>>'): + lexer = lexers['pycon3'] + else: + lexer = lexers['python3'] elif lang == 'guess': try: lexer = guess_lexer(source) @@ -183,9 +137,17 @@ def highlight_block(self, source, lang, opts=None, warn=None, force=False, **kwa formatter = self.get_formatter(**kwargs) try: hlsource = highlight(source, lexer, formatter) - except ErrorToken: + except ErrorToken as exc: # this is most probably not the selected language, # so let it pass unhighlighted + if lang == 'default': + pass # automatic highlighting failed. + elif warn: + warn('Could not lex literal_block as "%s". ' + 'Highlighting skipped.' % lang, + type='misc', subtype='higlighting_failure') + else: + raise exc hlsource = highlight(source, lexers['none'], formatter) if self.dest == 'html': return hlsource diff --git a/sphinx/io.py b/sphinx/io.py new file mode 100644 index 00000000000..c6fea570e29 --- /dev/null +++ b/sphinx/io.py @@ -0,0 +1,167 @@ +# -*- coding: utf-8 -*- +""" + sphinx.io + ~~~~~~~~~ + + Input/Output files + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" +from docutils.io import FileInput +from docutils.readers import standalone +from docutils.writers import UnfilteredWriter +from six import string_types, text_type +from typing import Any, Union # NOQA + +from sphinx.transforms import ( + ApplySourceWorkaround, ExtraTranslatableNodes, CitationReferences, + DefaultSubstitutions, MoveModuleTargets, HandleCodeBlocks, SortIds, + AutoNumbering, AutoIndexUpgrader, FilterSystemMessages, +) +from sphinx.transforms.compact_bullet_list import RefOnlyBulletListTransform +from sphinx.transforms.i18n import ( + PreserveTranslatableMessages, Locale, RemoveTranslatableInline, +) +from sphinx.util import import_object, split_docinfo + +if False: + # For type annotation + from typing import Any, Union # NOQA + from docutils import nodes # NOQA + from docutils.io import Input # NOQA + from docutils.parsers import Parser # NOQA + from docutils.transforms import Transform # NOQA + from sphinx.application import Sphinx # NOQA + from sphinx.builders import Builder # NOQA + from sphinx.environment import BuildEnvironment # NOQA + + +class SphinxBaseReader(standalone.Reader): + """ + Add our source parsers + """ + def __init__(self, app, parsers={}, *args, **kwargs): + # type: (Sphinx, Dict[unicode, Parser], Any, Any) -> None + standalone.Reader.__init__(self, *args, **kwargs) + self.parser_map = {} # type: Dict[unicode, Parser] + for suffix, parser_class in parsers.items(): + if isinstance(parser_class, string_types): + parser_class = import_object(parser_class, 'source parser') # type: ignore + parser = parser_class() + if hasattr(parser, 'set_application'): + parser.set_application(app) + self.parser_map[suffix] = parser + + def read(self, source, parser, settings): + # type: (Input, Parser, Dict) -> nodes.document + self.source = source + + for suffix in self.parser_map: + if source.source_path.endswith(suffix): + self.parser = self.parser_map[suffix] + break + + if not self.parser: + self.parser = parser + self.settings = settings + self.input = self.source.read() + self.parse() + return self.document + + def get_transforms(self): + # type: () -> List[Transform] + return standalone.Reader.get_transforms(self) + self.transforms + + +class SphinxStandaloneReader(SphinxBaseReader): + """ + Add our own transforms. + """ + transforms = [ApplySourceWorkaround, ExtraTranslatableNodes, PreserveTranslatableMessages, + Locale, CitationReferences, DefaultSubstitutions, MoveModuleTargets, + HandleCodeBlocks, AutoNumbering, AutoIndexUpgrader, SortIds, + RemoveTranslatableInline, PreserveTranslatableMessages, FilterSystemMessages, + RefOnlyBulletListTransform] + + +class SphinxI18nReader(SphinxBaseReader): + """ + Replacer for document.reporter.get_source_and_line method. + + reST text lines for translation do not have the original source line number. + This class provides the correct line numbers when reporting. + """ + + transforms = [ApplySourceWorkaround, ExtraTranslatableNodes, CitationReferences, + DefaultSubstitutions, MoveModuleTargets, HandleCodeBlocks, + AutoNumbering, SortIds, RemoveTranslatableInline, + FilterSystemMessages, RefOnlyBulletListTransform] + + def __init__(self, *args, **kwargs): + # type: (Any, Any) -> None + SphinxBaseReader.__init__(self, *args, **kwargs) + self.lineno = None # type: int + + def set_lineno_for_reporter(self, lineno): + # type: (int) -> None + self.lineno = lineno + + def new_document(self): + # type: () -> nodes.document + document = SphinxBaseReader.new_document(self) + reporter = document.reporter + + def get_source_and_line(lineno=None): + return reporter.source, self.lineno + + reporter.get_source_and_line = get_source_and_line + return document + + +class SphinxDummyWriter(UnfilteredWriter): + supported = ('html',) # needed to keep "meta" nodes + + def translate(self): + # type: () -> None + pass + + +class SphinxFileInput(FileInput): + def __init__(self, app, env, *args, **kwds): + # type: (Sphinx, BuildEnvironment, Any, Any) -> None + self.app = app + self.env = env + kwds['error_handler'] = 'sphinx' # py3: handle error on open. + FileInput.__init__(self, *args, **kwds) + + def decode(self, data): + # type: (Union[unicode, bytes]) -> unicode + if isinstance(data, text_type): # py3: `data` already decoded. + return data + return data.decode(self.encoding, 'sphinx') # py2: decoding + + def read(self): + # type: () -> unicode + def get_parser_type(source_path): + for suffix in self.env.config.source_parsers: + if source_path.endswith(suffix): + parser_class = self.env.config.source_parsers[suffix] + if isinstance(parser_class, string_types): + parser_class = import_object(parser_class, 'source parser') # type: ignore # NOQA + return parser_class.supported + else: + return ('restructuredtext',) + + data = FileInput.read(self) + if self.app: + arg = [data] + self.app.emit('source-read', self.env.docname, arg) + data = arg[0] + docinfo, data = split_docinfo(data) + if 'restructuredtext' in get_parser_type(self.source_path): + if self.env.config.rst_epilog: + data = data + '\n' + self.env.config.rst_epilog + '\n' + if self.env.config.rst_prolog: + data = self.env.config.rst_prolog + '\n' + data + return docinfo + data diff --git a/sphinx/jinja2glue.py b/sphinx/jinja2glue.py index c8a7165fcd0..c1bd04765be 100644 --- a/sphinx/jinja2glue.py +++ b/sphinx/jinja2glue.py @@ -5,7 +5,7 @@ Glue code for the jinja2 templating engine. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -17,25 +17,58 @@ contextfunction from jinja2.utils import open_if_exists from jinja2.sandbox import SandboxedEnvironment +from typing import Any, Callable, Iterator, Tuple # NOQA from sphinx.application import TemplateBridge from sphinx.util.osutil import mtimes_of_files +if False: + # For type annotation + from typing import Any, Callable, Iterator, Tuple # NOQA + from sphinx.builders import Builder # NOQA + from sphinx.environment import BuildEnvironment # NOQA + from sphinx.themes import Theme # NOQA + def _tobool(val): + # type: (unicode) -> bool if isinstance(val, string_types): - return val.lower() in ('true', '1', 'yes', 'on') + return val.lower() in ('true', '1', 'yes', 'on') # type: ignore return bool(val) def _toint(val): + # type: (unicode) -> int try: return int(val) except ValueError: return 0 +def _slice_index(values, slices): + # type: (List, int) -> Iterator[List] + seq = list(values) + length = 0 + for value in values: + length += 1 + len(value[1][1]) # count includes subitems + items_per_slice = length // slices + offset = 0 + for slice_number in range(slices): + count = 0 + start = offset + if slices == slice_number + 1: # last column + offset = len(seq) + else: + for value in values[offset:]: + count += 1 + len(value[1][1]) + offset += 1 + if count >= items_per_slice: + break + yield seq[start:offset] + + def accesskey(context, key): + # type: (Any, unicode) -> unicode """Helper to output each access key only once.""" if '_accesskeys' not in context: context.vars['_accesskeys'] = {} @@ -47,12 +80,15 @@ def accesskey(context, key): class idgen(object): def __init__(self): + # type: () -> None self.id = 0 def current(self): + # type: () -> int return self.id def __next__(self): + # type: () -> int self.id += 1 return self.id next = __next__ # Python 2/Jinja compatibility @@ -65,15 +101,14 @@ class SphinxFileSystemLoader(FileSystemLoader): """ def get_source(self, environment, template): + # type: (BuildEnvironment, unicode) -> Tuple[unicode, unicode, Callable] for searchpath in self.searchpath: filename = path.join(searchpath, template) f = open_if_exists(filename) if f is None: continue - try: + with f: contents = f.read().decode(self.encoding) - finally: - f.close() mtime = path.getmtime(filename) @@ -94,6 +129,7 @@ class BuiltinTemplateLoader(TemplateBridge, BaseLoader): # TemplateBridge interface def init(self, builder, theme=None, dirs=None): + # type: (Builder, Theme, List[unicode]) -> None # create a chain of paths to search if theme: # the theme's own dir and its bases' dirs @@ -127,6 +163,7 @@ def init(self, builder, theme=None, dirs=None): extensions=extensions) self.environment.filters['tobool'] = _tobool self.environment.filters['toint'] = _toint + self.environment.filters['slice_index'] = _slice_index self.environment.globals['debug'] = contextfunction(pformat) self.environment.globals['accesskey'] = contextfunction(accesskey) self.environment.globals['idgen'] = idgen @@ -135,17 +172,21 @@ def init(self, builder, theme=None, dirs=None): builder.app.translator) def render(self, template, context): + # type: (unicode, Dict) -> None return self.environment.get_template(template).render(context) def render_string(self, source, context): + # type: (unicode, Dict) -> unicode return self.environment.from_string(source).render(context) def newest_template_mtime(self): + # type: () -> float return max(mtimes_of_files(self.pathchain, '.html')) # Loader interface def get_source(self, environment, template): + # type: (BuildEnvironment, unicode) -> Tuple[unicode, unicode, Callable] loaders = self.loaders # exclamation mark starts search from theme if template.startswith('!'): diff --git a/sphinx/locale/__init__.py b/sphinx/locale/__init__.py index 444ad5d0cf3..44ad6430439 100644 --- a/sphinx/locale/__init__.py +++ b/sphinx/locale/__init__.py @@ -5,7 +5,7 @@ Locale utilities. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -14,6 +14,10 @@ from six import PY3, text_type from six.moves import UserString +if False: + # For type annotation + from typing import Any, Tuple # NOQA + class _TranslationProxy(UserString, object): """ @@ -140,6 +144,7 @@ def __repr__(self): def mygettext(string): + # type: (unicode) -> unicode """Used instead of _ when creating TranslationProxies, because _ is not bound yet at that time. """ @@ -147,10 +152,12 @@ def mygettext(string): def lazy_gettext(string): + # type: (unicode) -> unicode """A lazy version of `gettext`.""" # if isinstance(string, _TranslationProxy): # return string - return _TranslationProxy(mygettext, string) + return _TranslationProxy(mygettext, string) # type: ignore + l_ = lazy_gettext @@ -183,19 +190,22 @@ def lazy_gettext(string): 'exception': l_('exception'), 'statement': l_('statement'), 'builtin': l_('built-in function'), -} +} # Dict[unicode, _TranslationProxy] -translators = {} +translators = {} # type: Dict[unicode, Any] if PY3: def _(message): + # type: (unicode) -> unicode return translators['sphinx'].gettext(message) else: def _(message): + # type: (unicode) -> unicode return translators['sphinx'].ugettext(message) -def init(locale_dirs, language, catalog='sphinx', charset='utf-8'): +def init(locale_dirs, language, catalog='sphinx'): + # type: (List, unicode, unicode) -> Tuple[Any, bool] """Look for message catalogs in `locale_dirs` and *ensure* that there is at least a NullTranslations catalog set in `translators`. If called multiple times or if several ``.mo`` files are found, their contents are merged @@ -209,22 +219,15 @@ def init(locale_dirs, language, catalog='sphinx', charset='utf-8'): # the None entry is the system's default locale path has_translation = True - # compile mo files if po file is updated - # TODO: remove circular importing - from sphinx.util.i18n import find_catalog_source_files - for catinfo in find_catalog_source_files(locale_dirs, language, domains=[catalog], - charset=charset): - catinfo.write_mo(language) - # loading for dir_ in locale_dirs: try: - trans = gettext.translation(catalog, localedir=dir_, - languages=[language]) + trans = gettext.translation(catalog, localedir=dir_, # type: ignore + languages=[language]) # type: ignore if translator is None: translator = trans else: - translator._catalog.update(trans._catalog) + translator._catalog.update(trans._catalog) # type: ignore except Exception: # Language couldn't be found in the specified path pass diff --git a/sphinx/locale/bn/LC_MESSAGES/sphinx.js b/sphinx/locale/bn/LC_MESSAGES/sphinx.js index e0f7654f2cd..0fffc9ed596 100644 --- a/sphinx/locale/bn/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/bn/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "bn", "plural_expr": "(n != 1)", "messages": {"Next topic": "\u09aa\u09b0\u09ac\u09b0\u09cd\u09a4\u09c0 \u099f\u09aa\u09bf\u0995", "Index": "\u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "", "Copyright": "\u0995\u09aa\u09bf\u09b0\u09be\u0987\u099f", "C API changes": "C API \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8", "quick access to all modules": "\u09b8\u0995\u09b2 \u09ae\u09a1\u09bf\u0989\u09b2\u09c7 \u09a6\u09cd\u09b0\u09c1\u09a4 \u09aa\u09cd\u09b0\u09ac\u09c7\u09b6", "© Copyright %(copyright)s.": "© \u0995\u09aa\u09bf\u09b0\u09be\u0987\u099f %(copyright)s.", "Global Module Index": "\u0997\u09cd\u09b2\u09c7\u09be\u09ac\u09be\u09b2 \u09ae\u09a1\u09bf\u0989\u09b2 \u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "\u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8 – %(key)s", "General Index": "\u09b8\u09be\u09a7\u09be\u09b0\u09a3 \u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8", "next chapter": "\u09aa\u09b0\u09ac\u09b0\u09cd\u09a4\u09c0 \u0985\u09a7\u09cd\u09af\u09be\u09df", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "\u09aa\u09c2\u09b0\u09cd\u09ac\u09ac\u09b0\u09cd\u09a4\u09c0 \u0985\u09a7\u09cd\u09af\u09be\u09df", "Permalink to this headline": "\u098f\u0987 \u09b6\u09bf\u09b0\u09c7\u09be\u09a8\u09be\u09ae\u09c7\u09b0 \u09aa\u09be\u09b0\u09cd\u09ae\u09be\u09b2\u09bf\u0999\u09cd\u0995", "About these documents": "\u098f\u0987 \u09a1\u0995\u09c1\u09ae\u09c7\u09a8\u09cd\u099f \u09b8\u09ae\u09cd\u09aa\u09b0\u09cd\u0995\u09c7", "Preparing search...": "", ", in ": "", "Navigation": "\u09a8\u09c7\u09ad\u09bf\u0997\u09c7\u09b6\u09a8", "Expand sidebar": "", "the documentation for": "", "Complete Table of Contents": "\u09aa\u09c2\u09b0\u09cd\u09a3\u09be\u0999\u09cd\u0997 \u09b8\u09c2\u099a\u09c0\u09aa\u09a4\u09cd\u09b0", "Contents": "", "can be huge": "\u0996\u09c1\u09ac \u09ac\u09dc \u09b9\u09a4\u09c7 \u09aa\u09be\u09b0\u09c7", "Changes in Version %(version)s — %(docstitle)s": "%(version)s — %(docstitle)s-\u098f \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8 \u09b8\u09ae\u09c2\u09b9", "Other changes": "\u0985\u09a8\u09cd\u09af\u09be\u09a8\u09cd\u09af \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8", "Hide Search Matches": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09ae\u09cd\u09af\u09be\u099a\u0997\u09c1\u09b2\u09c7\u09be \u09b2\u09c1\u0995\u09be\u09a8", "Quick search": "\u09a6\u09cd\u09b0\u09c1\u09a4 \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8", "Show Source": "\u09b8\u09c7\u09be\u09b0\u09cd\u09b8 \u09a6\u09c7\u0996\u09c1\u09a8", "Search": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8", "This Page": "\u098f\u0987 \u09aa\u09be\u09a4\u09be", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u098f\u0996\u09be\u09a8 \u09a5\u09c7\u0995\u09c7 \u098f\u0987 \u09a8\u09a5\u09bf\u0997\u09c1\u09b2\u09c7\u09be\u09a4\u09c7 \u0986\u09aa\u09a8\u09bf \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u0995\u09b0\u09a4\u09c7 \u09aa\u09be\u09b0\u09ac\u09c7\u09a8\u0964 \n \u0986\u09aa\u09a8\u09be\u09b0 \u0995\u09be\u0999\u09cd\u0995\u09cd\u09b7\u09bf\u09a4 \u09b6\u09ac\u09cd\u09a6\u09b8\u09ae\u09c2\u09b9 \u09a8\u09bf\u099a\u09c7\u09b0 \u09ac\u09be\u0995\u09cd\u09b8\u09c7 \u09b2\u09bf\u0996\u09c1\u09a8 \u098f\u09ac\u0982 \"\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\" \u09ac\u09be\u099f\u09a8\u09c7 \u0995\u09cd\u09b2\u09bf\u0995 \u0995\u09b0\u09c1\u09a8\u0964\n \u0989\u09b2\u09cd\u09b2\u09c7\u0996\u09cd\u09af, \u09b8\u0995\u09b2 \u09b6\u09ac\u09cd\u09a6\u09b8\u09ae\u09c2\u09b9\u09c7\u09b0 \u0989\u09aa\u09b8\u09cd\u09a5\u09bf\u09a4\u09bf \u09a8\u09bf\u09df\u09c7 \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u0995\u09b0\u09be \u09b9\u09ac\u09c7\u0964 \u09af\u09c7\u09b8\u09ac \u09aa\u09be\u09a4\u09be\u09df \u09b8\u0995\u09b2\n \u09b6\u09ac\u09cd\u09a6 \u09a8\u09c7\u0987 \u09b8\u09c7\u0997\u09c1\u09b2\u09c7\u09be \u09ac\u09be\u09a6 \u09a6\u09c7\u09df\u09be \u09b9\u09ac\u09c7\u0964", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "<a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s \u09a6\u09bf\u09df\u09c7 \u09a4\u09c8\u09b0\u09c0\u0964", "last updated": "", "Collapse sidebar": "", "Go": "\u09af\u09be\u09a8", "Table Of Contents": "\u09b8\u09c2\u099a\u09c0\u09aa\u09a4\u09cd\u09b0", "Search within %(docstitle)s": "%(docstitle)s \u098f\u09b0 \u09ae\u09a7\u09cd\u09af\u09c7 \u0996\u09c1\u0981\u099c\u09c1\u09a8", "all functions, classes, terms": "\u09b8\u0995\u09b2 \u09ab\u09be\u0982\u09b6\u09a8, \u0995\u09cd\u09b2\u09be\u09b8, \u099f\u09be\u09b0\u09cd\u09ae", "Please activate JavaScript to enable the search\n functionality.": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u0995\u09b0\u09be\u09b0 \u099c\u09a8\u09cd\u09af \u0985\u09a8\u09c1\u0997\u09cd\u09b0\u09b9\u09aa\u09c2\u09b0\u09cd\u09ac\u0995 \u099c\u09be\u09ad\u09be\u09b8\u09cd\u0995\u09cd\u09b0\u09bf\u09aa\u09cd\u099f \n \u09b8\u0995\u09cd\u09b0\u09bf\u09df \u0995\u09b0\u09c1\u09a8\u0964", "Indices and tables:": "\u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8 \u0993 \u099f\u09c7\u09ac\u09bf\u09b2 \u09b8\u09ae\u09c2\u09b9:", "lists all sections and subsections": "\u09b8\u0995\u09b2 \u0985\u09a8\u09c1\u099a\u09cd\u099b\u09c7\u09a6 \u09b8\u09ae\u09c2\u09b9\u09c7\u09b0 \u09a4\u09be\u09b2\u09bf\u0995\u09be", "Index pages by letter": "\u09ac\u09b0\u09cd\u09a3\u09be\u09a8\u09c1\u09b8\u09be\u09b0\u09c7 \u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8 \u09aa\u09be\u09a4\u09be", "search": "\u0996\u09c1\u0981\u099c\u09c1\u09a8", "Permalink to this definition": "\u098f\u0987 \u09b8\u0982\u099c\u09cd\u099e\u09be\u09b0 \u09aa\u09be\u09b0\u09cd\u09ae\u09be\u09b2\u09bf\u0999\u09cd\u0995", "Previous topic": "\u09aa\u09c2\u09b0\u09cd\u09ac\u09ac\u09b0\u09cd\u09a4\u09c0 \u099f\u09aa\u09bf\u0995", "Overview": "\u09ad\u09c1\u09ae\u09bf\u0995\u09be", "Last updated on %(last_updated)s.": "%(last_updated)s \u09b8\u09b0\u09cd\u09ac\u09b6\u09c7\u09b7 \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8 \u0995\u09b0\u09be \u09b9\u09df\u09c7\u099b\u09c7\u0964", "Searching": "", "search this documentation": "\u098f\u0987 \u09b8\u09b9\u09be\u09df\u09bf\u0995\u09be\u09a4\u09c7 \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be \u0995\u09b0\u09c1\u09a8", "Automatically generated list of changes in version %(version)s": "\u09b8\u09cd\u09ac\u09df\u0982\u0995\u09cd\u09b0\u09bf\u09df\u09ad\u09be\u09ac\u09c7 \u09a4\u09c8\u09b0\u09c0 %(version)s-\u098f \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8 \u09b8\u09ae\u09c2\u09b9\u09c7\u09b0 \u09a4\u09be\u09b2\u09bf\u0995\u09be\u0964", "Full index on one page": "\u098f\u0995 \u09aa\u09be\u09a4\u09be\u09df \u09b8\u09ae\u09cd\u09aa\u09c2\u09b0\u09cd\u09a3 \u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8", "Enter search terms or a module, class or function name.": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u099f\u09be\u09b0\u09cd\u09ae, \u09ae\u09a1\u09bf\u0989\u09b2, \u0995\u09cd\u09b2\u09be\u09b8 \u0985\u09a5\u09ac\u09be \u09ab\u09be\u0982\u09b6\u09a8\u09c7\u09b0 \u09a8\u09be\u09ae \u09a6\u09bf\u09a8\u0964", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">\u0995\u09aa\u09bf\u09b0\u09be\u0987\u099f</a> %(copyright)s.", "Library changes": "\u09b2\u09be\u0987\u09ac\u09cd\u09b0\u09c7\u09b0\u09bf\u09b0 \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8", "Search Page": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u09aa\u09be\u09a4\u09be", "Search Results": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09ab\u09b2\u09be\u09ab\u09b2"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "bn", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "\u098f\u0987 \u09a1\u0995\u09c1\u09ae\u09c7\u09a8\u09cd\u099f \u09b8\u09ae\u09cd\u09aa\u09b0\u09cd\u0995\u09c7", "Automatically generated list of changes in version %(version)s": "\u09b8\u09cd\u09ac\u09df\u0982\u0995\u09cd\u09b0\u09bf\u09df\u09ad\u09be\u09ac\u09c7 \u09a4\u09c8\u09b0\u09c0 %(version)s-\u098f \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8 \u09b8\u09ae\u09c2\u09b9\u09c7\u09b0 \u09a4\u09be\u09b2\u09bf\u0995\u09be\u0964", "C API changes": "C API \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "\u09aa\u09c2\u09b0\u09cd\u09a3\u09be\u0999\u09cd\u0997 \u09b8\u09c2\u099a\u09c0\u09aa\u09a4\u09cd\u09b0", "Contents": "", "Copyright": "\u0995\u09aa\u09bf\u09b0\u09be\u0987\u099f", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "<a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s \u09a6\u09bf\u09df\u09c7 \u09a4\u09c8\u09b0\u09c0\u0964", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u098f\u0996\u09be\u09a8 \u09a5\u09c7\u0995\u09c7 \u098f\u0987 \u09a8\u09a5\u09bf\u0997\u09c1\u09b2\u09c7\u09be\u09a4\u09c7 \u0986\u09aa\u09a8\u09bf \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u0995\u09b0\u09a4\u09c7 \u09aa\u09be\u09b0\u09ac\u09c7\u09a8\u0964 \n \u0986\u09aa\u09a8\u09be\u09b0 \u0995\u09be\u0999\u09cd\u0995\u09cd\u09b7\u09bf\u09a4 \u09b6\u09ac\u09cd\u09a6\u09b8\u09ae\u09c2\u09b9 \u09a8\u09bf\u099a\u09c7\u09b0 \u09ac\u09be\u0995\u09cd\u09b8\u09c7 \u09b2\u09bf\u0996\u09c1\u09a8 \u098f\u09ac\u0982 \"\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\" \u09ac\u09be\u099f\u09a8\u09c7 \u0995\u09cd\u09b2\u09bf\u0995 \u0995\u09b0\u09c1\u09a8\u0964\n \u0989\u09b2\u09cd\u09b2\u09c7\u0996\u09cd\u09af, \u09b8\u0995\u09b2 \u09b6\u09ac\u09cd\u09a6\u09b8\u09ae\u09c2\u09b9\u09c7\u09b0 \u0989\u09aa\u09b8\u09cd\u09a5\u09bf\u09a4\u09bf \u09a8\u09bf\u09df\u09c7 \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u0995\u09b0\u09be \u09b9\u09ac\u09c7\u0964 \u09af\u09c7\u09b8\u09ac \u09aa\u09be\u09a4\u09be\u09df \u09b8\u0995\u09b2\n \u09b6\u09ac\u09cd\u09a6 \u09a8\u09c7\u0987 \u09b8\u09c7\u0997\u09c1\u09b2\u09c7\u09be \u09ac\u09be\u09a6 \u09a6\u09c7\u09df\u09be \u09b9\u09ac\u09c7\u0964", "Full index on one page": "\u098f\u0995 \u09aa\u09be\u09a4\u09be\u09df \u09b8\u09ae\u09cd\u09aa\u09c2\u09b0\u09cd\u09a3 \u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8", "General Index": "\u09b8\u09be\u09a7\u09be\u09b0\u09a3 \u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8", "Global Module Index": "\u0997\u09cd\u09b2\u09c7\u09be\u09ac\u09be\u09b2 \u09ae\u09a1\u09bf\u0989\u09b2 \u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8", "Go": "\u09af\u09be\u09a8", "Hide Search Matches": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09ae\u09cd\u09af\u09be\u099a\u0997\u09c1\u09b2\u09c7\u09be \u09b2\u09c1\u0995\u09be\u09a8", "Index": "\u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8", "Index – %(key)s": "\u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8 – %(key)s", "Index pages by letter": "\u09ac\u09b0\u09cd\u09a3\u09be\u09a8\u09c1\u09b8\u09be\u09b0\u09c7 \u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8 \u09aa\u09be\u09a4\u09be", "Indices and tables:": "\u0987\u09a8\u09a1\u09c7\u0995\u09cd\u09b8 \u0993 \u099f\u09c7\u09ac\u09bf\u09b2 \u09b8\u09ae\u09c2\u09b9:", "Last updated on %(last_updated)s.": "%(last_updated)s \u09b8\u09b0\u09cd\u09ac\u09b6\u09c7\u09b7 \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8 \u0995\u09b0\u09be \u09b9\u09df\u09c7\u099b\u09c7\u0964", "Library changes": "\u09b2\u09be\u0987\u09ac\u09cd\u09b0\u09c7\u09b0\u09bf\u09b0 \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8", "Navigation": "\u09a8\u09c7\u09ad\u09bf\u0997\u09c7\u09b6\u09a8", "Next topic": "\u09aa\u09b0\u09ac\u09b0\u09cd\u09a4\u09c0 \u099f\u09aa\u09bf\u0995", "Other changes": "\u0985\u09a8\u09cd\u09af\u09be\u09a8\u09cd\u09af \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8", "Overview": "\u09ad\u09c1\u09ae\u09bf\u0995\u09be", "Permalink to this definition": "\u098f\u0987 \u09b8\u0982\u099c\u09cd\u099e\u09be\u09b0 \u09aa\u09be\u09b0\u09cd\u09ae\u09be\u09b2\u09bf\u0999\u09cd\u0995", "Permalink to this headline": "\u098f\u0987 \u09b6\u09bf\u09b0\u09c7\u09be\u09a8\u09be\u09ae\u09c7\u09b0 \u09aa\u09be\u09b0\u09cd\u09ae\u09be\u09b2\u09bf\u0999\u09cd\u0995", "Please activate JavaScript to enable the search\n functionality.": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u0995\u09b0\u09be\u09b0 \u099c\u09a8\u09cd\u09af \u0985\u09a8\u09c1\u0997\u09cd\u09b0\u09b9\u09aa\u09c2\u09b0\u09cd\u09ac\u0995 \u099c\u09be\u09ad\u09be\u09b8\u09cd\u0995\u09cd\u09b0\u09bf\u09aa\u09cd\u099f \n \u09b8\u0995\u09cd\u09b0\u09bf\u09df \u0995\u09b0\u09c1\u09a8\u0964", "Preparing search...": "", "Previous topic": "\u09aa\u09c2\u09b0\u09cd\u09ac\u09ac\u09b0\u09cd\u09a4\u09c0 \u099f\u09aa\u09bf\u0995", "Quick search": "\u09a6\u09cd\u09b0\u09c1\u09a4 \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8", "Search": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8", "Search Page": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u09aa\u09be\u09a4\u09be", "Search Results": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09ab\u09b2\u09be\u09ab\u09b2", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "%(docstitle)s \u098f\u09b0 \u09ae\u09a7\u09cd\u09af\u09c7 \u0996\u09c1\u0981\u099c\u09c1\u09a8", "Searching": "", "Show Source": "\u09b8\u09c7\u09be\u09b0\u09cd\u09b8 \u09a6\u09c7\u0996\u09c1\u09a8", "Table Of Contents": "\u09b8\u09c2\u099a\u09c0\u09aa\u09a4\u09cd\u09b0", "This Page": "\u098f\u0987 \u09aa\u09be\u09a4\u09be", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "\u09b8\u0995\u09b2 \u09ab\u09be\u0982\u09b6\u09a8, \u0995\u09cd\u09b2\u09be\u09b8, \u099f\u09be\u09b0\u09cd\u09ae", "can be huge": "\u0996\u09c1\u09ac \u09ac\u09dc \u09b9\u09a4\u09c7 \u09aa\u09be\u09b0\u09c7", "last updated": "", "lists all sections and subsections": "\u09b8\u0995\u09b2 \u0985\u09a8\u09c1\u099a\u09cd\u099b\u09c7\u09a6 \u09b8\u09ae\u09c2\u09b9\u09c7\u09b0 \u09a4\u09be\u09b2\u09bf\u0995\u09be", "next chapter": "\u09aa\u09b0\u09ac\u09b0\u09cd\u09a4\u09c0 \u0985\u09a7\u09cd\u09af\u09be\u09df", "previous chapter": "\u09aa\u09c2\u09b0\u09cd\u09ac\u09ac\u09b0\u09cd\u09a4\u09c0 \u0985\u09a7\u09cd\u09af\u09be\u09df", "quick access to all modules": "\u09b8\u0995\u09b2 \u09ae\u09a1\u09bf\u0989\u09b2\u09c7 \u09a6\u09cd\u09b0\u09c1\u09a4 \u09aa\u09cd\u09b0\u09ac\u09c7\u09b6", "search": "\u0996\u09c1\u0981\u099c\u09c1\u09a8", "search this documentation": "\u098f\u0987 \u09b8\u09b9\u09be\u09df\u09bf\u0995\u09be\u09a4\u09c7 \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be \u0995\u09b0\u09c1\u09a8", "the documentation for": ""}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/bn/LC_MESSAGES/sphinx.mo b/sphinx/locale/bn/LC_MESSAGES/sphinx.mo index e0c7cc56ad6..5d47dbee1e1 100644 Binary files a/sphinx/locale/bn/LC_MESSAGES/sphinx.mo and b/sphinx/locale/bn/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/bn/LC_MESSAGES/sphinx.po b/sphinx/locale/bn/LC_MESSAGES/sphinx.po index d0a605e51c3..e2cff301938 100644 --- a/sphinx/locale/bn/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/bn/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -8,62 +8,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Bengali (http://www.transifex.com/projects/p/sphinx-1/language/bn/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Bengali (http://www.transifex.com/sphinx-doc/sphinx-1/language/bn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: bn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 #, python-format -msgid "Fig. %s" -msgstr "" - -#: sphinx/config.py:81 -#, python-format -msgid "Table %s" -msgstr "" - -#: sphinx/config.py:82 -#, python-format -msgid "Listing %s" +msgid "Section %s" msgstr "" -#: sphinx/config.py:89 +#: sphinx/config.py:110 #, python-format -msgid "%s %s documentation" +msgid "Fig. %s" msgstr "" -#: sphinx/environment.py:1880 +#: sphinx/config.py:111 #, python-format -msgid "see %s" +msgid "Table %s" msgstr "" -#: sphinx/environment.py:1883 +#: sphinx/config.py:112 #, python-format -msgid "see also %s" -msgstr "" - -#: sphinx/environment.py:1941 -msgid "Symbols" +msgid "Listing %s" msgstr "" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "পাইথন উন্নয়ন পরামর্শ; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%B %d, %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "বিল্টইন সমূহ" @@ -72,64 +52,76 @@ msgstr "বিল্টইন সমূহ" msgid "Module level" msgstr "মডিউল লেভেল" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%b %d, %Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "সাধারণ ইনডেক্স" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "ইনডেক্স" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "পরবর্তী" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "পূর্ববর্তী" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr "(-" -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "অনুচ্ছেদ লেখক:" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "মডিউল লেখক:" -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "লেখক:" -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "প্যারামিটার" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "রিটার্নস" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "রিটার্ন টাইপ" @@ -158,12 +150,12 @@ msgstr "%s (C টাইপ)" msgid "%s (C variable)" msgstr "%s (C ভ্যারিয়েবল)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "ফাংশন" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "" @@ -171,7 +163,7 @@ msgstr "" msgid "macro" msgstr "" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "" @@ -179,59 +171,72 @@ msgstr "" msgid "variable" msgstr "" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ টাইপ)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ মেম্বার)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ ফাংশন)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ ক্লাসে)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "ক্লাস" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (বিল্ট-ইন ফাংশন)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s মেথড)" @@ -246,7 +251,7 @@ msgstr "%s() (ক্লাসে)" msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s এ্যট্রিবিউট)" @@ -255,116 +260,116 @@ msgstr "%s (%s এ্যট্রিবিউট)" msgid "Arguments" msgstr "" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "ডাটা" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "এ্যট্রিবিউট" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "রেইজেস" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (%s মডিউলে)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (বিল্ট-ইন ভ্যারিয়েবল)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (%s মডিউলে)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (বিল্ট-ইন ক্লাস)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (%s ক্লাসে)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s (%s.%s মেথড)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s (%s.%s স্ট্যাটিক মেথড)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s স্ট্যাটিক মেথড)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s ক্লাস মেথড)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s ক্লাস মেথড)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s এ্যট্রিবিউট)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (মডিউল)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "মডিউল সমূহ" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "ডেপ্রিকেটেড" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "এক্সেপশন" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "মেথড" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "ক্লাস মেথড" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "স্ট্যাটিক মেথড" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "মডিউল" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr "" @@ -386,188 +391,219 @@ msgstr "" msgid "role" msgstr "" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "এনভায়রনমেন্ট ভ্যারিয়েবল; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%sকমান্ড লাইন অপশন; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "শব্দকোষ" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "ব্যকরণ টোকেন" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "এনভায়রনমেন্ট ভ্যারিয়েবল" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "প্রোগ্রাম অপশন" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "ইনডেক্স" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "মডিউল ইনডেক্স" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "অনুসন্ধান পাতা" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 #, python-format -msgid " Bases: %s" -msgstr "বেস: %s" +msgid "Bases: %s" +msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr ":class:`%s` এর উপনাম" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "অসমাপ্ত কাজ" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "দৃষ্টি আকর্ষণ" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "সতর্কীকরণ" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "বিপজ্জনক" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "ভুল (এরর)" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "আভাস" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "গুরুত্বপূর্ণ" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "নোট" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "আরও দেখুন" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "পরামর্শ" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "সতর্কতা" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "%s ভার্সনে নতুন" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "%s ভার্সনে পরিবর্তিত" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "%s ভার্সন থেকে ডেপ্রিকেটেড" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "কিওয়ার্ড" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "অপারেটর" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "অবজেক্ট" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "স্ট্যাটমেন্ট" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "বিল্ট-ইন ফাংশন" @@ -576,7 +612,7 @@ msgstr "বিল্ট-ইন ফাংশন" msgid "Table Of Contents" msgstr "সূচীপত্র" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -586,11 +622,7 @@ msgstr "অনুসন্ধান" msgid "Go" msgstr "যান" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "অনুসন্ধানের জন্য টার্ম, মডিউল, ক্লাস অথবা ফাংশনের নাম দিন।" - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "সোর্স দেখুন" @@ -638,15 +670,15 @@ msgstr "সকল মডিউলে দ্রুত প্রবেশ" msgid "all functions, classes, terms" msgstr "সকল ফাংশন, ক্লাস, টার্ম" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "ইনডেক্স – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "এক পাতায় সম্পূর্ণ ইনডেক্স" @@ -662,35 +694,35 @@ msgstr "খুব বড় হতে পারে" msgid "Navigation" msgstr "নেভিগেশন" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "%(docstitle)s এর মধ্যে খুঁজুন" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "এই ডকুমেন্ট সম্পর্কে" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "কপিরাইট" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">কপিরাইট</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© কপিরাইট %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "%(last_updated)s সর্বশেষ পরিবর্তন করা হয়েছে।" -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -739,13 +771,13 @@ msgstr "খুঁজুন" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "অনুসন্ধানের ফলাফল" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -762,13 +794,13 @@ msgstr "এই পাতা" #: 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 "%(version)s — %(docstitle)s-এ পরিবর্তন সমূহ" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -787,33 +819,34 @@ msgstr "C API পরিবর্তন" msgid "Other changes" msgstr "অন্যান্য পরিবর্তন" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "এই শিরোনামের পার্মালিঙ্ক" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "এই সংজ্ঞার পার্মালিঙ্ক" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "অনুসন্ধানের ম্যাচগুলো লুকান" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -830,44 +863,53 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "রিলিজ" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "পাদটীকা" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "পূর্ববর্তী পাতা হতে চলমান" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "পরবর্তী পাতাতে চলমান" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[ছবি]" diff --git a/sphinx/locale/ca/LC_MESSAGES/sphinx.js b/sphinx/locale/ca/LC_MESSAGES/sphinx.js index 8a204db6260..e3cd6b7363a 100644 --- a/sphinx/locale/ca/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/ca/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "ca", "plural_expr": "(n != 1)", "messages": {"Next topic": "Tema seg\u00fcent", "Index": "\u00cdndex", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "", "Copyright": "Copyright", "C API changes": "Canvis a la API de C", "quick access to all modules": "acc\u00e9s r\u00e0pid a tots els m\u00f2duls", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "\u00cdndex Global de M\u00f2duls", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "\u00cdndes – %(key)s", "General Index": "\u00cdndex General", "next chapter": "cap\u00edtol seg\u00fcent", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "cap\u00edtol anterior", "Permalink to this headline": "Link permanent a aquest t\u00edtol", "About these documents": "Quant a aquests documents", "Preparing search...": "", ", in ": "", "Navigation": "Navegaci\u00f3", "Expand sidebar": "", "the documentation for": "", "Complete Table of Contents": "Taula de Contingut Completa", "Contents": "", "can be huge": "pot ser gegant", "Changes in Version %(version)s — %(docstitle)s": "Canvis a la Versi\u00f3 %(version)s — %(docstitle)s", "Other changes": "Altres canvis", "Hide Search Matches": "Oculta Resultats de Cerca", "Quick search": "Cerca r\u00e0pida", "Show Source": "Mostra Codi Font", "Search": "Cerca", "This Page": "Aquesta P\u00e0gina", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Des d'aqu\u00ed pots fer cerques en aquests documents. Entra les \nparaules de la teva cerca i clica el bot\u00f3 \"cerca\". Tingues en compte\nque la cerca inclour\u00e0 totes les paraules que posis. Les p\u00e0gines que no\ntenen totes les paraules no sortir\u00e0n.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Creat amb <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "", "Collapse sidebar": "", "Go": "Ves a", "Table Of Contents": "Taula de Contingut", "Search within %(docstitle)s": "Cerca dins de %(docstitle)s", "all functions, classes, terms": "totes les funcions, classes, termes", "Please activate JavaScript to enable the search\n functionality.": "Activa JavaScript per utilitzar la funcionalitat\nde cerca.", "Indices and tables:": "\u00cdndexs i taules:", "lists all sections and subsections": "llista totes les seccions i subseccions", "Index pages by letter": "P\u00e0gines d'\u00edndex per lletra", "search": "cerca", "Permalink to this definition": "Link permanent a aquesta definici\u00f3", "Previous topic": "Tema anterior", "Overview": "Resum", "Last updated on %(last_updated)s.": "\u00daltima actualitzaci\u00f3 el %(last_updated)s.", "Searching": "", "search this documentation": "cerca aquesta documentaci\u00f3", "Automatically generated list of changes in version %(version)s": "Llista de canvis de la versi\u00f3 %(version)s generada autom\u00e0ticament", "Full index on one page": "\u00cdndex complet en una p\u00e0gina", "Enter search terms or a module, class or function name.": "Entra paraules de cerca o el nom d'un m\u00f2dul, classe o funci\u00f3.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\\\"%(path)s\\\">Copyright</a> %(copyright)s.", "Library changes": "Canvis a la llibreria", "Search Page": "P\u00e0gina de Cerca", "Search Results": "Resultats de la Cerca"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "ca", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "Quant a aquests documents", "Automatically generated list of changes in version %(version)s": "Llista de canvis de la versi\u00f3 %(version)s generada autom\u00e0ticament", "C API changes": "Canvis a la API de C", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "Taula de Contingut Completa", "Contents": "", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Creat amb <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Des d'aqu\u00ed pots fer cerques en aquests documents. Entra les \nparaules de la teva cerca i clica el bot\u00f3 \"cerca\". Tingues en compte\nque la cerca inclour\u00e0 totes les paraules que posis. Les p\u00e0gines que no\ntenen totes les paraules no sortir\u00e0n.", "Full index on one page": "\u00cdndex complet en una p\u00e0gina", "General Index": "\u00cdndex General", "Global Module Index": "\u00cdndex Global de M\u00f2duls", "Go": "Ves a", "Hide Search Matches": "Oculta Resultats de Cerca", "Index": "\u00cdndex", "Index – %(key)s": "\u00cdndes – %(key)s", "Index pages by letter": "P\u00e0gines d'\u00edndex per lletra", "Indices and tables:": "\u00cdndexs i taules:", "Last updated on %(last_updated)s.": "\u00daltima actualitzaci\u00f3 el %(last_updated)s.", "Library changes": "Canvis a la llibreria", "Navigation": "Navegaci\u00f3", "Next topic": "Tema seg\u00fcent", "Other changes": "Altres canvis", "Overview": "Resum", "Permalink to this definition": "Link permanent a aquesta definici\u00f3", "Permalink to this headline": "Link permanent a aquest t\u00edtol", "Please activate JavaScript to enable the search\n functionality.": "Activa JavaScript per utilitzar la funcionalitat\nde cerca.", "Preparing search...": "", "Previous topic": "Tema anterior", "Quick search": "Cerca r\u00e0pida", "Search": "Cerca", "Search Page": "P\u00e0gina de Cerca", "Search Results": "Resultats de la Cerca", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "Cerca dins de %(docstitle)s", "Searching": "", "Show Source": "Mostra Codi Font", "Table Of Contents": "Taula de Contingut", "This Page": "Aquesta P\u00e0gina", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "totes les funcions, classes, termes", "can be huge": "pot ser gegant", "last updated": "", "lists all sections and subsections": "llista totes les seccions i subseccions", "next chapter": "cap\u00edtol seg\u00fcent", "previous chapter": "cap\u00edtol anterior", "quick access to all modules": "acc\u00e9s r\u00e0pid a tots els m\u00f2duls", "search": "cerca", "search this documentation": "cerca aquesta documentaci\u00f3", "the documentation for": ""}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/ca/LC_MESSAGES/sphinx.mo b/sphinx/locale/ca/LC_MESSAGES/sphinx.mo index 5e7e190f184..60c2ad24517 100644 Binary files a/sphinx/locale/ca/LC_MESSAGES/sphinx.mo and b/sphinx/locale/ca/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/ca/LC_MESSAGES/sphinx.po b/sphinx/locale/ca/LC_MESSAGES/sphinx.po index b99a2f3baf7..fc946e9efe7 100644 --- a/sphinx/locale/ca/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ca/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -8,62 +8,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Catalan (http://www.transifex.com/projects/p/sphinx-1/language/ca/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Catalan (http://www.transifex.com/sphinx-doc/sphinx-1/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 #, python-format -msgid "Fig. %s" +msgid "Section %s" msgstr "" -#: sphinx/config.py:81 +#: sphinx/config.py:110 #, python-format -msgid "Table %s" +msgid "Fig. %s" msgstr "" -#: sphinx/config.py:82 +#: sphinx/config.py:111 #, python-format -msgid "Listing %s" +msgid "Table %s" msgstr "" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s documentació" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "vegeu %s" - -#: sphinx/environment.py:1883 +#: sphinx/config.py:112 #, python-format -msgid "see also %s" -msgstr "vegeu també %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" +msgid "Listing %s" msgstr "" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d de %B de %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Mòduls Interns" @@ -72,64 +52,76 @@ msgstr "Mòduls Interns" msgid "Module level" msgstr "Nivell de mòdul" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d %b, %Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Índex General" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "índex" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "següent" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "anterior" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s documentació" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (a " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Autor de la secció:" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Autor del mòdul: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Autor: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Paràmetres" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Retorna" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Tipus de retorn" @@ -158,12 +150,12 @@ msgstr "%s (tipus de C)" msgid "%s (C variable)" msgstr "%s (variable de C)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "funció" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "membre" @@ -171,7 +163,7 @@ msgstr "membre" msgid "macro" msgstr "macro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "tipus" @@ -179,59 +171,72 @@ msgstr "tipus" msgid "variable" msgstr "variable" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (tipus de C++)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (membre de C++)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (funció de C++)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (class de C++)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "class" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (funció interna)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (mètode %s)" @@ -246,7 +251,7 @@ msgstr "%s() (class)" msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (atribut %s)" @@ -255,116 +260,116 @@ msgstr "%s (atribut %s)" msgid "Arguments" msgstr "" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "atribut" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Llença" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (al mòdul %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (variable interna)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (al mòdul %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (classe interna)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (class a %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (mètode %s.%s)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (mètode estàtic %s.%s)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (mètode estàtic %s)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (atribut %s.%s)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (mòdul)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "mòduls" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Obsolet" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "excepció" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "mètode estàtic" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "mòdul" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (obsolet)" @@ -386,188 +391,219 @@ msgstr "" msgid "role" msgstr "" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "variable d'entorn; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "opció de línia de comandes %s; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "variable d'entorn" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Índex" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Índex de Mòduls" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Pàgina de Cerca" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr " Bases: %s" +msgid "see %s" +msgstr "vegeu %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "vegeu també %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "àlies de :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Pendent" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(La <<entrada original>> està a %s, línia %d i.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Atenció" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Compte" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Perill" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Error" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Suggerència" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Important" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Nota" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Vegeu també" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Truc" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Avís" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Novetat de la versió %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Canviat a la versió %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Obsolet desde la versió %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "paraula clau" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operador" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objecte" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "sentència" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "funció interna" @@ -576,7 +612,7 @@ msgstr "funció interna" msgid "Table Of Contents" msgstr "Taula de Contingut" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -586,11 +622,7 @@ msgstr "Cerca" msgid "Go" msgstr "Ves a" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Entra paraules de cerca o el nom d'un mòdul, classe o funció." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Mostra Codi Font" @@ -638,15 +670,15 @@ msgstr "accés ràpid a tots els mòduls" msgid "all functions, classes, terms" msgstr "totes les funcions, classes, termes" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Índes – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Índex complet en una pàgina" @@ -662,35 +694,35 @@ msgstr "pot ser gegant" msgid "Navigation" msgstr "Navegació" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Cerca dins de %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Quant a aquests documents" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\\\"%(path)s\\\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Última actualització el %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -739,13 +771,13 @@ msgstr "cerca" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Resultats de la Cerca" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -762,13 +794,13 @@ msgstr "Aquesta Pàgina" #: 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 "Canvis a la Versió %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -787,33 +819,34 @@ msgstr "Canvis a la API de C" msgid "Other changes" msgstr "Altres canvis" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Link permanent a aquest títol" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Link permanent a aquesta definició" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Oculta Resultats de Cerca" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -830,44 +863,53 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Versió" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "ve de la pàgina anterior" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Continua a la pàgina següent" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[imatge]" diff --git a/sphinx/locale/cmn/LC_MESSAGES/sphinx.js b/sphinx/locale/cmn/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000000..dee432c187d --- /dev/null +++ b/sphinx/locale/cmn/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "zh_Hans_CN", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "", "Automatically generated list of changes in version %(version)s": "", "C API changes": "", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "", "Contents": "", "Copyright": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Full index on one page": "", "General Index": "", "Global Module Index": "", "Go": "", "Hide Search Matches": "", "Index": "", "Index – %(key)s": "", "Index pages by letter": "", "Indices and tables:": "", "Last updated on %(last_updated)s.": "", "Library changes": "", "Navigation": "", "Next topic": "", "Other changes": "", "Overview": "", "Permalink to this definition": "", "Permalink to this headline": "", "Please activate JavaScript to enable the search\n functionality.": "", "Preparing search...": "", "Previous topic": "", "Quick search": "", "Search": "", "Search Page": "", "Search Results": "", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "", "Searching": "", "Show Source": "", "Table Of Contents": "", "This Page": "", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "", "can be huge": "", "last updated": "", "lists all sections and subsections": "", "next chapter": "", "previous chapter": "", "quick access to all modules": "", "search": "", "search this documentation": "", "the documentation for": ""}, "plural_expr": "0"}); \ No newline at end of file diff --git a/sphinx/locale/cmn/LC_MESSAGES/sphinx.mo b/sphinx/locale/cmn/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000000..8986a35c20b Binary files /dev/null and b/sphinx/locale/cmn/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/cmn/LC_MESSAGES/sphinx.po b/sphinx/locale/cmn/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000000..e5a646df1f1 --- /dev/null +++ b/sphinx/locale/cmn/LC_MESSAGES/sphinx.po @@ -0,0 +1,914 @@ +# Translations template for Sphinx. +# Copyright (C) 2016 ORGANIZATION +# This file is distributed under the same license as the Sphinx project. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Sphinx\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Chinese (Mandarin) (http://www.transifex.com/sphinx-doc/sphinx-1/language/cmn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" +"Language: cmn\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 +#, python-format +msgid "Fig. %s" +msgstr "" + +#: sphinx/config.py:111 +#, python-format +msgid "Table %s" +msgstr "" + +#: sphinx/config.py:112 +#, python-format +msgid "Listing %s" +msgstr "" + +#: sphinx/roles.py:187 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "" + +#: sphinx/builders/changes.py:75 +msgid "Builtins" +msgstr "" + +#: sphinx/builders/changes.py:77 +msgid "Module level" +msgstr "" + +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 +#, python-format +msgid "%b %d, %Y" +msgstr "" + +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "" + +#: sphinx/builders/html.py:315 +msgid "index" +msgstr "" + +#: sphinx/builders/html.py:377 +msgid "next" +msgstr "" + +#: sphinx/builders/html.py:386 +msgid "previous" +msgstr "" + +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 +msgid " (in " +msgstr "" + +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 +msgid "Section author: " +msgstr "" + +#: sphinx/directives/other.py:151 +msgid "Module author: " +msgstr "" + +#: sphinx/directives/other.py:153 +msgid "Code author: " +msgstr "" + +#: sphinx/directives/other.py:155 +msgid "Author: " +msgstr "" + +#: sphinx/domains/__init__.py:277 +#, python-format +msgid "%s %s" +msgstr "" + +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 +msgid "Parameters" +msgstr "" + +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 +msgid "Returns" +msgstr "" + +#: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 +#: sphinx/domains/python.py:163 +msgid "Return type" +msgstr "" + +#: sphinx/domains/c.py:177 +#, python-format +msgid "%s (C function)" +msgstr "" + +#: sphinx/domains/c.py:179 +#, python-format +msgid "%s (C member)" +msgstr "" + +#: sphinx/domains/c.py:181 +#, python-format +msgid "%s (C macro)" +msgstr "" + +#: sphinx/domains/c.py:183 +#, python-format +msgid "%s (C type)" +msgstr "" + +#: sphinx/domains/c.py:185 +#, python-format +msgid "%s (C variable)" +msgstr "" + +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 +msgid "function" +msgstr "" + +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 +msgid "member" +msgstr "" + +#: sphinx/domains/c.py:244 +msgid "macro" +msgstr "" + +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 +msgid "type" +msgstr "" + +#: sphinx/domains/c.py:246 +msgid "variable" +msgstr "" + +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "" + +#: sphinx/domains/cpp.py:4205 +#, python-format +msgid "%s (C++ type)" +msgstr "" + +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 +#, python-format +msgid "%s (C++ member)" +msgstr "" + +#: sphinx/domains/cpp.py:4238 +#, python-format +msgid "%s (C++ function)" +msgstr "" + +#: sphinx/domains/cpp.py:4249 +#, python-format +msgid "%s (C++ class)" +msgstr "" + +#: sphinx/domains/cpp.py:4260 +#, python-format +msgid "%s (C++ enum)" +msgstr "" + +#: sphinx/domains/cpp.py:4281 +#, python-format +msgid "%s (C++ enumerator)" +msgstr "" + +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 +msgid "class" +msgstr "" + +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 +msgid "enum" +msgstr "" + +#: sphinx/domains/cpp.py:4423 +msgid "enumerator" +msgstr "" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 +#, python-format +msgid "%s() (built-in function)" +msgstr "" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 +#, python-format +msgid "%s() (%s method)" +msgstr "" + +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 +#, python-format +msgid "%s (%s attribute)" +msgstr "" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "" + +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 +msgid "data" +msgstr "" + +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 +msgid "attribute" +msgstr "" + +#: sphinx/domains/python.py:154 +msgid "Variables" +msgstr "" + +#: sphinx/domains/python.py:158 +msgid "Raises" +msgstr "" + +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 +#, python-format +msgid "%s() (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:311 +#, python-format +msgid "%s (built-in variable)" +msgstr "" + +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 +#, python-format +msgid "%s (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:328 +#, python-format +msgid "%s (built-in class)" +msgstr "" + +#: sphinx/domains/python.py:329 +#, python-format +msgid "%s (class in %s)" +msgstr "" + +#: sphinx/domains/python.py:369 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "" + +#: sphinx/domains/python.py:381 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "" + +#: sphinx/domains/python.py:384 +#, python-format +msgid "%s() (%s static method)" +msgstr "" + +#: sphinx/domains/python.py:394 +#, python-format +msgid "%s() (%s.%s class method)" +msgstr "" + +#: sphinx/domains/python.py:397 +#, python-format +msgid "%s() (%s class method)" +msgstr "" + +#: sphinx/domains/python.py:407 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "" + +#: sphinx/domains/python.py:488 +#, python-format +msgid "%s (module)" +msgstr "" + +#: sphinx/domains/python.py:545 +msgid "Python Module Index" +msgstr "" + +#: sphinx/domains/python.py:546 +msgid "modules" +msgstr "" + +#: sphinx/domains/python.py:592 +msgid "Deprecated" +msgstr "" + +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 +msgid "exception" +msgstr "" + +#: sphinx/domains/python.py:618 +msgid "method" +msgstr "" + +#: sphinx/domains/python.py:619 +msgid "class method" +msgstr "" + +#: sphinx/domains/python.py:620 +msgid "static method" +msgstr "" + +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 +msgid "module" +msgstr "" + +#: sphinx/domains/python.py:787 +msgid " (deprecated)" +msgstr "" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "" + +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 +#, python-format +msgid "environment variable; %s" +msgstr "" + +#: sphinx/domains/std.py:186 +#, python-format +msgid "%scommand line option; %s" +msgstr "" + +#: sphinx/domains/std.py:434 +msgid "glossary term" +msgstr "" + +#: sphinx/domains/std.py:435 +msgid "grammar token" +msgstr "" + +#: sphinx/domains/std.py:436 +msgid "reference label" +msgstr "" + +#: sphinx/domains/std.py:438 +msgid "environment variable" +msgstr "" + +#: sphinx/domains/std.py:439 +msgid "program option" +msgstr "" + +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 +msgid "Index" +msgstr "" + +#: sphinx/domains/std.py:474 +msgid "Module Index" +msgstr "" + +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 +#, python-format +msgid "alias of :class:`%s`" +msgstr "" + +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 +#, python-format +msgid "[graph: %s]" +msgstr "" + +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 +msgid "[graph]" +msgstr "" + +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 +#, python-format +msgid "(in %s v%s)" +msgstr "" + +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 +msgid "[source]" +msgstr "" + +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 +msgid "Todo" +msgstr "" + +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 +#, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" + +#: sphinx/ext/todo.py:146 +msgid "original entry" +msgstr "" + +#: sphinx/ext/viewcode.py:166 +msgid "[docs]" +msgstr "" + +#: sphinx/ext/viewcode.py:180 +msgid "Module code" +msgstr "" + +#: sphinx/ext/viewcode.py:186 +#, python-format +msgid "<h1>Source code for %s</h1>" +msgstr "" + +#: sphinx/ext/viewcode.py:212 +msgid "Overview: module code" +msgstr "" + +#: sphinx/ext/viewcode.py:213 +msgid "<h1>All modules for which code is available</h1>" +msgstr "" + +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 +msgid "Attention" +msgstr "" + +#: sphinx/locale/__init__.py:160 +msgid "Caution" +msgstr "" + +#: sphinx/locale/__init__.py:161 +msgid "Danger" +msgstr "" + +#: sphinx/locale/__init__.py:162 +msgid "Error" +msgstr "" + +#: sphinx/locale/__init__.py:163 +msgid "Hint" +msgstr "" + +#: sphinx/locale/__init__.py:164 +msgid "Important" +msgstr "" + +#: sphinx/locale/__init__.py:165 +msgid "Note" +msgstr "" + +#: sphinx/locale/__init__.py:166 +msgid "See also" +msgstr "" + +#: sphinx/locale/__init__.py:167 +msgid "Tip" +msgstr "" + +#: sphinx/locale/__init__.py:168 +msgid "Warning" +msgstr "" + +#: sphinx/locale/__init__.py:172 +#, python-format +msgid "New in version %s" +msgstr "" + +#: sphinx/locale/__init__.py:173 +#, python-format +msgid "Changed in version %s" +msgstr "" + +#: sphinx/locale/__init__.py:174 +#, python-format +msgid "Deprecated since version %s" +msgstr "" + +#: sphinx/locale/__init__.py:180 +msgid "keyword" +msgstr "" + +#: sphinx/locale/__init__.py:181 +msgid "operator" +msgstr "" + +#: sphinx/locale/__init__.py:182 +msgid "object" +msgstr "" + +#: sphinx/locale/__init__.py:184 +msgid "statement" +msgstr "" + +#: sphinx/locale/__init__.py:185 +msgid "built-in function" +msgstr "" + +#: sphinx/themes/agogo/layout.html:46 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:11 sphinx/themes/scrolls/layout.html:35 +msgid "Table Of Contents" +msgstr "" + +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/searchresults.html:10 +msgid "Search" +msgstr "" + +#: sphinx/themes/agogo/layout.html:54 sphinx/themes/basic/searchbox.html:15 +msgid "Go" +msgstr "" + +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 +msgid "Show Source" +msgstr "" + +#: sphinx/themes/basic/defindex.html:11 +msgid "Overview" +msgstr "" + +#: sphinx/themes/basic/defindex.html:15 +msgid "Welcome! This is" +msgstr "" + +#: sphinx/themes/basic/defindex.html:16 +msgid "the documentation for" +msgstr "" + +#: sphinx/themes/basic/defindex.html:17 +msgid "last updated" +msgstr "" + +#: sphinx/themes/basic/defindex.html:20 +msgid "Indices and tables:" +msgstr "" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "" + +#: sphinx/themes/basic/defindex.html:28 +msgid "Global Module Index" +msgstr "" + +#: sphinx/themes/basic/defindex.html:29 +msgid "quick access to all modules" +msgstr "" + +#: sphinx/themes/basic/defindex.html:31 +msgid "all functions, classes, terms" +msgstr "" + +#: sphinx/themes/basic/genindex-single.html:33 +#, python-format +msgid "Index – %(key)s" +msgstr "" + +#: sphinx/themes/basic/genindex-single.html:61 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:72 +msgid "Full index on one page" +msgstr "" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "" + +#: sphinx/themes/basic/layout.html:29 +msgid "Navigation" +msgstr "" + +#: sphinx/themes/basic/layout.html:123 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/layout.html:132 +msgid "About these documents" +msgstr "" + +#: sphinx/themes/basic/layout.html:141 +msgid "Copyright" +msgstr "" + +#: sphinx/themes/basic/layout.html:186 +#, python-format +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:188 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:192 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "" +"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "" + +#: sphinx/themes/basic/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/relations.html:11 +msgid "Previous topic" +msgstr "" + +#: sphinx/themes/basic/relations.html:13 +msgid "previous chapter" +msgstr "" + +#: sphinx/themes/basic/relations.html:16 +msgid "Next topic" +msgstr "" + +#: sphinx/themes/basic/relations.html:18 +msgid "next chapter" +msgstr "" + +#: sphinx/themes/basic/search.html:27 +msgid "" +"Please activate JavaScript to enable the search\n" +" functionality." +msgstr "" + +#: sphinx/themes/basic/search.html:32 +msgid "" +"From here you can search these documents. Enter your search\n" +" words into the box below and click \"search\". Note that the search\n" +" 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:39 +#: sphinx/themes/basic/searchresults.html:17 +msgid "search" +msgstr "" + +#: sphinx/themes/basic/search.html:43 +#: sphinx/themes/basic/searchresults.html:21 +#: sphinx/themes/basic/static/searchtools.js_t:287 +msgid "Search Results" +msgstr "" + +#: sphinx/themes/basic/search.html:45 +#: sphinx/themes/basic/searchresults.html:23 +#: sphinx/themes/basic/static/searchtools.js_t:289 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" + +#: sphinx/themes/basic/searchbox.html:12 +msgid "Quick search" +msgstr "" + +#: sphinx/themes/basic/sourcelink.html:12 +msgid "This Page" +msgstr "" + +#: 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 "" + +#: sphinx/themes/basic/changes/rstsource.html:5 +#, python-format +msgid "%(filename)s — %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:17 +#, python-format +msgid "Automatically generated list of changes in version %(version)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 +msgid "Permalink to this headline" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 +msgid "Permalink to this definition" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:208 +msgid "Hide Search Matches" +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:121 +msgid "Searching" +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:126 +msgid "Preparing search..." +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:291 +#, python-format +msgid "Search finished, found %s page(s) matching the search query." +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:344 +msgid ", in " +msgstr "" + +#: sphinx/themes/classic/static/sidebar.js_t:83 +msgid "Expand sidebar" +msgstr "" + +#: sphinx/themes/classic/static/sidebar.js_t:96 +#: sphinx/themes/classic/static/sidebar.js_t:124 +msgid "Collapse sidebar" +msgstr "" + +#: sphinx/themes/haiku/layout.html:24 +msgid "Contents" +msgstr "" + +#: sphinx/writers/html.py:389 +msgid "Permalink to this code" +msgstr "" + +#: sphinx/writers/html.py:393 +msgid "Permalink to this image" +msgstr "" + +#: sphinx/writers/html.py:395 +msgid "Permalink to this toctree" +msgstr "" + +#: sphinx/writers/html.py:717 +msgid "Permalink to this table" +msgstr "" + +#: sphinx/writers/latex.py:380 +msgid "Release" +msgstr "" + +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 +msgid "Footnotes" +msgstr "" + +#: sphinx/writers/latex.py:1112 +msgid "continued from previous page" +msgstr "" + +#: sphinx/writers/latex.py:1118 +msgid "Continued on next page" +msgstr "" + +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 +#, python-format +msgid "[image: %s]" +msgstr "" + +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 +msgid "[image]" +msgstr "" diff --git a/sphinx/locale/cs/LC_MESSAGES/sphinx.js b/sphinx/locale/cs/LC_MESSAGES/sphinx.js index 0f069df4905..3689e78dcbd 100644 --- a/sphinx/locale/cs/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/cs/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "cs", "plural_expr": "(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2", "messages": {"Next topic": "Dal\u0161\u00ed t\u00e9ma", "Index": "Rejst\u0159\u00edk", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "V\u00edtejte! Toto je", "Copyright": "Ve\u0161ker\u00e1 pr\u00e1va vyhrazena", "C API changes": "Zm\u011bny API", "quick access to all modules": "rychl\u00fd p\u0159\u00edstup ke v\u0161em modul\u016fm", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "Celkov\u00fd rejst\u0159\u00edk modul\u016f", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Vyhled\u00e1v\u00e1n\u00ed nenalezlo \u017e\u00e1dn\u00fd odpov\u00eddaj\u00edc\u00ed dokument. Ujist\u011bte se, \u017ee jste v\u0161echna slova zapsal/a spr\u00e1vn\u011b a \u017ee jste vybral/a dostatek kategori\u00ed.", "Index – %(key)s": "Rejst\u0159\u00edk – %(key)s", "General Index": "Obecn\u00fd rejst\u0159\u00edk", "next chapter": "dal\u0161\u00ed kapitola", "Search finished, found %s page(s) matching the search query.": "Vyhled\u00e1v\u00e1n\u00ed dokon\u010deno, str\u00e1nky odpov\u00eddaj\u00edc\u00ed hledan\u00e9mu v\u00fdrazu: %s.", "previous chapter": "p\u0159edchoz\u00ed kapitola", "Permalink to this headline": "Trval\u00fd odkaz na tento nadpis", "About these documents": "O t\u011bchto dokumentech", "Preparing search...": "Vyhled\u00e1v\u00e1n\u00ed se p\u0159ipravuje...", ", in ": ", v ", "Navigation": "Navigace", "Expand sidebar": "Rozbalit bo\u010dn\u00ed li\u0161tu", "the documentation for": "dokumentace pro", "Complete Table of Contents": "Celkov\u00fd obsah", "Contents": "Obsah", "can be huge": "m\u016f\u017ee b\u00fdt obrovsk\u00fd", "Changes in Version %(version)s — %(docstitle)s": "Zm\u011bny ve verzi %(version)s — %(docstitle)s", "Other changes": "Ostatn\u00ed zm\u011bny", "Hide Search Matches": "Skr\u00fdt v\u00fdsledky vyhled\u00e1v\u00e1n\u00ed", "Quick search": "Rychl\u00e9 vyhled\u00e1v\u00e1n\u00ed", "Show Source": "Uk\u00e1zat zdroj", "Search": "Vyhled\u00e1v\u00e1n\u00ed", "This Page": "Tato str\u00e1nka", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Toto je vyhled\u00e1vac\u00ed str\u00e1nka. Zadejte kl\u00ed\u010dov\u00e1 slova a klikn\u011bte na \"hledat\". \nVyhled\u00e1v\u00e1n\u00ed automaticky hled\u00e1 v\u0161echna slova, nebudou tedy nalezeny str\u00e1nky obsahuj\u00edc\u00ed jen n\u011bkter\u00e9 z nich.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Vytvo\u0159eno pomoc\u00ed <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "naposledy aktualizov\u00e1no", "Collapse sidebar": "Sbalit bo\u010dn\u00ed li\u0161tu", "Go": "OK", "Table Of Contents": "Obsah", "Search within %(docstitle)s": "Prohledat %(docstitle)s", "all functions, classes, terms": "v\u0161echny funkce, t\u0159\u00eddy, term\u00edny", "Please activate JavaScript to enable the search\n functionality.": "Pro podporu vyhled\u00e1v\u00e1n\u00ed aktivujte JavaScript.", "Indices and tables:": "Rejst\u0159\u00edky a tabulky:", "lists all sections and subsections": "seznam v\u0161ech sekc\u00ed a podsekc\u00ed", "Index pages by letter": "Rejst\u0159\u00edk podle p\u00edsmene", "search": "hledat", "Permalink to this definition": "Trval\u00fd odkaz na tuto definici", "Previous topic": "P\u0159echoz\u00ed t\u00e9ma", "Overview": "P\u0159ehled", "Last updated on %(last_updated)s.": "Aktualizov\u00e1no dne %(last_updated)s.", "Searching": "Prob\u00edh\u00e1 vyhled\u00e1n\u00ed", "search this documentation": "prohledat tuto dokumentaci", "Automatically generated list of changes in version %(version)s": "Automaticky generovan\u00fd seznam zm\u011bn ve verzi %(version)s", "Full index on one page": "Cel\u00fd rejst\u0159\u00edk na jedn\u00e9 str\u00e1nce", "Enter search terms or a module, class or function name.": "Zadejte hledan\u00e9 term\u00edny nebo jm\u00e9no modulu, t\u0159\u00eddy \u010di funkce.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "Zm\u011bny v knihovn\u00e1ch", "Search Page": "Vyhled\u00e1vac\u00ed str\u00e1nka", "Search Results": "V\u00fdsledky vyhled\u00e1v\u00e1n\u00ed"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "cs", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": ", v ", "About these documents": "O t\u011bchto dokumentech", "Automatically generated list of changes in version %(version)s": "Automaticky generovan\u00fd seznam zm\u011bn ve verzi %(version)s", "C API changes": "Zm\u011bny API", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "Sbalit bo\u010dn\u00ed li\u0161tu", "Complete Table of Contents": "Celkov\u00fd obsah", "Contents": "Obsah", "Copyright": "Ve\u0161ker\u00e1 pr\u00e1va vyhrazena", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Vytvo\u0159eno pomoc\u00ed <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "Rozbalit bo\u010dn\u00ed li\u0161tu", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Toto je vyhled\u00e1vac\u00ed str\u00e1nka. Zadejte kl\u00ed\u010dov\u00e1 slova a klikn\u011bte na \"hledat\". \nVyhled\u00e1v\u00e1n\u00ed automaticky hled\u00e1 v\u0161echna slova, nebudou tedy nalezeny str\u00e1nky obsahuj\u00edc\u00ed jen n\u011bkter\u00e9 z nich.", "Full index on one page": "Cel\u00fd rejst\u0159\u00edk na jedn\u00e9 str\u00e1nce", "General Index": "Obecn\u00fd rejst\u0159\u00edk", "Global Module Index": "Celkov\u00fd rejst\u0159\u00edk modul\u016f", "Go": "OK", "Hide Search Matches": "Skr\u00fdt v\u00fdsledky vyhled\u00e1v\u00e1n\u00ed", "Index": "Rejst\u0159\u00edk", "Index – %(key)s": "Rejst\u0159\u00edk – %(key)s", "Index pages by letter": "Rejst\u0159\u00edk podle p\u00edsmene", "Indices and tables:": "Rejst\u0159\u00edky a tabulky:", "Last updated on %(last_updated)s.": "Aktualizov\u00e1no dne %(last_updated)s.", "Library changes": "Zm\u011bny v knihovn\u00e1ch", "Navigation": "Navigace", "Next topic": "Dal\u0161\u00ed t\u00e9ma", "Other changes": "Ostatn\u00ed zm\u011bny", "Overview": "P\u0159ehled", "Permalink to this definition": "Trval\u00fd odkaz na tuto definici", "Permalink to this headline": "Trval\u00fd odkaz na tento nadpis", "Please activate JavaScript to enable the search\n functionality.": "Pro podporu vyhled\u00e1v\u00e1n\u00ed aktivujte JavaScript.", "Preparing search...": "Vyhled\u00e1v\u00e1n\u00ed se p\u0159ipravuje...", "Previous topic": "P\u0159echoz\u00ed t\u00e9ma", "Quick search": "Rychl\u00e9 vyhled\u00e1v\u00e1n\u00ed", "Search": "Vyhled\u00e1v\u00e1n\u00ed", "Search Page": "Vyhled\u00e1vac\u00ed str\u00e1nka", "Search Results": "V\u00fdsledky vyhled\u00e1v\u00e1n\u00ed", "Search finished, found %s page(s) matching the search query.": "Vyhled\u00e1v\u00e1n\u00ed dokon\u010deno, str\u00e1nky odpov\u00eddaj\u00edc\u00ed hledan\u00e9mu v\u00fdrazu: %s.", "Search within %(docstitle)s": "Prohledat %(docstitle)s", "Searching": "Prob\u00edh\u00e1 vyhled\u00e1n\u00ed", "Show Source": "Uk\u00e1zat zdroj", "Table Of Contents": "Obsah", "This Page": "Tato str\u00e1nka", "Welcome! This is": "V\u00edtejte! Toto je", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Vyhled\u00e1v\u00e1n\u00ed nenalezlo \u017e\u00e1dn\u00fd odpov\u00eddaj\u00edc\u00ed dokument. Ujist\u011bte se, \u017ee jste v\u0161echna slova zapsal/a spr\u00e1vn\u011b a \u017ee jste vybral/a dostatek kategori\u00ed.", "all functions, classes, terms": "v\u0161echny funkce, t\u0159\u00eddy, term\u00edny", "can be huge": "m\u016f\u017ee b\u00fdt obrovsk\u00fd", "last updated": "naposledy aktualizov\u00e1no", "lists all sections and subsections": "seznam v\u0161ech sekc\u00ed a podsekc\u00ed", "next chapter": "dal\u0161\u00ed kapitola", "previous chapter": "p\u0159edchoz\u00ed kapitola", "quick access to all modules": "rychl\u00fd p\u0159\u00edstup ke v\u0161em modul\u016fm", "search": "hledat", "search this documentation": "prohledat tuto dokumentaci", "the documentation for": "dokumentace pro"}, "plural_expr": "(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2"}); \ No newline at end of file diff --git a/sphinx/locale/cs/LC_MESSAGES/sphinx.mo b/sphinx/locale/cs/LC_MESSAGES/sphinx.mo index 667218bc536..027e9243a86 100644 Binary files a/sphinx/locale/cs/LC_MESSAGES/sphinx.mo and b/sphinx/locale/cs/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/cs/LC_MESSAGES/sphinx.po b/sphinx/locale/cs/LC_MESSAGES/sphinx.po index 84e3a7d9aac..1efe6f2d832 100644 --- a/sphinx/locale/cs/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/cs/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -9,62 +9,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Czech (http://www.transifex.com/projects/p/sphinx-1/language/cs/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Czech (http://www.transifex.com/sphinx-doc/sphinx-1/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: cs\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "Obr. %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "Tabulka %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "Výpis %s" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "Dokumentace pro %s %s" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "viz %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "viz také %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Symboly" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d.%m.%Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Vestavěné funkce" @@ -73,64 +53,76 @@ msgstr "Vestavěné funkce" msgid "Module level" msgstr "Úroveň modulu" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d.%m.%Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Obecný rejstřík" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "rejstřík" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "další" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "předchozí" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "Dokumentace pro %s %s" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (v " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Autor sekce: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Autor modulu: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Autor kódu:" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Autor: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parametry" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Vrací" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Typ návratové hodnoty" @@ -159,12 +151,12 @@ msgstr "%s (C typ)" msgid "%s (C variable)" msgstr "%s (C proměnná)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "funkce" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "člen" @@ -172,7 +164,7 @@ msgstr "člen" msgid "macro" msgstr "makro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "typ" @@ -180,59 +172,72 @@ msgstr "typ" msgid "variable" msgstr "proměnná" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Vyvolá" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ typ)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ člen)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funkce)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ třída)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "třída" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (vestavěná funkce)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (metoda %s)" @@ -247,7 +252,7 @@ msgstr "%s() (třída)" msgid "%s (global variable or constant)" msgstr "%s (globální proměnná nebo konstanta)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (atribut %s)" @@ -256,116 +261,116 @@ msgstr "%s (atribut %s)" msgid "Arguments" msgstr "Argumenty" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "data" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "atribut" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Proměnné" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Vyvolá" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (v modulu %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (vestavěná proměnná)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (v modulu %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (vestavěná třída)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (třída v %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (metoda %s.%s)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (statická metoda %s.%s)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (statická metoda %s)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (třídní metoda %s.%s)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (třídní metoda %s)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (atribut %s.%s)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (modul)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Rejstřík modulů Pythonu" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "moduly" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Zastaralé" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "výjimka" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "metoda" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "třídní metoda" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "statická metoda" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "modul" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (zastaralé)" @@ -387,188 +392,219 @@ msgstr "direktiva" msgid "role" msgstr "role" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "proměnná prostředí; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%svolba příkazového řádku; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "termín v glosáři" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "token gramatiky" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "referenční návěstí" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "proměnná prostředí" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "volba programu" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Rejstřík" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Rejstřík modulů" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Vyhledávací stránka" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr " Nadtřídy: %s" +msgid "see %s" +msgstr "viz %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "viz také %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Symboly" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "alias třídy :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[graf: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[graf]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(v %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[zdroj]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Todo" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(<<original entry>> se nachází v %s, řádka %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "původní záznam" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[dokumentace]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Kód modulu" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Zdrojový kód pro %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Přehled: kód modulu" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Všechny moduly s dostupným kódem</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Výstraha" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Upozornění" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Nebezpečí" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Chyba" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Rada" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Důležité" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Poznámka" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Viz také" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Tip" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Varování" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Nové ve verzi %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Změněno ve verzi %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Zastaralé od verze %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "klíčové slovo" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operátor" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "příkaz" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "vestavěná funkce" @@ -577,7 +613,7 @@ msgstr "vestavěná funkce" msgid "Table Of Contents" msgstr "Obsah" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -587,11 +623,7 @@ msgstr "Vyhledávání" msgid "Go" msgstr "OK" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Zadejte hledané termíny nebo jméno modulu, třídy či funkce." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Ukázat zdroj" @@ -639,15 +671,15 @@ msgstr "rychlý přístup ke všem modulům" msgid "all functions, classes, terms" msgstr "všechny funkce, třídy, termíny" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Rejstřík – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Celý rejstřík na jedné stránce" @@ -663,35 +695,35 @@ msgstr "může být obrovský" msgid "Navigation" msgstr "Navigace" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Prohledat %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "O těchto dokumentech" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Veškerá práva vyhrazena" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Aktualizováno dne %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -740,13 +772,13 @@ msgstr "hledat" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Výsledky vyhledávání" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -763,13 +795,13 @@ msgstr "Tato stránka" #: 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 "Změny ve verzi %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -788,33 +820,34 @@ msgstr "Změny API" msgid "Other changes" msgstr "Ostatní změny" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Trvalý odkaz na tento nadpis" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Trvalý odkaz na tuto definici" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Skrýt výsledky vyhledávání" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "Probíhá vyhledání" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "Vyhledávání se připravuje..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Vyhledávání dokončeno, stránky odpovídající hledanému výrazu: %s." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr ", v " @@ -831,44 +864,53 @@ msgstr "Sbalit boční lištu" msgid "Contents" msgstr "Obsah" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "Permalink k tomuto kódu" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "Permalink k tomuto obrázku" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "Permalink k této tabulce" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Vydání" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Poznámky pod čarou" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "pokračujte na předchozí stránce" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Pokračujte na další stránce" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[obrázek: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[obrázek]" diff --git a/sphinx/locale/cy/LC_MESSAGES/sphinx.js b/sphinx/locale/cy/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000000..de417a299f9 --- /dev/null +++ b/sphinx/locale/cy/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "cy", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": ", yn ", "About these documents": "Yngl\u0177n \u00e2'r dogfennau hyn", "Automatically generated list of changes in version %(version)s": "Rhestr o newidiadau yn fersiwn %(version)s wedi'i cynhyrchu'n awtomatig", "C API changes": "Newidiadau i'r C-API", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "Cyfangu'r bar ochr", "Complete Table of Contents": "Tabl Cynnwys Llawn", "Contents": "Cynnwys", "Copyright": "Hawlfraint", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Cr\u8c37wyd gan ddefnyddio <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s", "Expand sidebar": "Ehangu'r bar ochr", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "O'r fan hon gallwch chwilio'r dogfennau hyn. Rhowch eich geiriau chwilio yn y blwch isod a chliciwch \"chwilio\". Nodwch fod y ffwythiant chwilio yn chwilio am bob un o'r geiriau yn awtomatig. Ni fydd dudalennau sy'n cynnwys llai o eiriau yn ymddangos yn y rhestr canlyniadau.", "Full index on one page": "Indecs llawn ar un tudalen", "General Index": "Indecs cyffredinol", "Global Module Index": "Indecs Modiwl Byd-Eang", "Go": "Ewch", "Hide Search Matches": "Cuddio Canlyniadau Chwilio", "Index": "Indecs", "Index – %(key)s": "Indecs – %(key)s", "Index pages by letter": "Indecs tudalennau gan lythyren", "Indices and tables:": "Indecsau a tablau:", "Last updated on %(last_updated)s.": "Diweddarwyd yn ddiwethaf ar %(last_updated)s.", "Library changes": "Newidiadau i'r llyfrgell", "Navigation": "Llywio", "Next topic": "Pwnc nesaf", "Other changes": "Newidiadau arall", "Overview": "Trosolwg", "Permalink to this definition": "Permalink i'r diffiniad hwn", "Permalink to this headline": "Permalink i'r pennawd hwn", "Please activate JavaScript to enable the search\n functionality.": "Trwoch JavaScript ymlaen i alluogi'r chwilio.", "Preparing search...": "Paratoi chwilio...", "Previous topic": "Pwnc blaenorol", "Quick search": "Chwilio cyflym", "Search": "Chwilio", "Search Page": "Tudalen Chwilio", "Search Results": "Canlyniadau chwilio", "Search finished, found %s page(s) matching the search query.": "Chwiliad wedi gorffen, wedi ffeindio %s tudalen(nau) yn cyfateb a'r ymholiad chwilio.", "Search within %(docstitle)s": "Chwilio o fewn %(docstitle)s", "Searching": "Yn chwilio", "Show Source": "Dangos Ffynhonell", "Table Of Contents": "Tabl Cynnwys", "This Page": "Y Dudalen Hon", "Welcome! This is": "Croeso! Dyma", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Nid yw eich chwiliad yn cyfateb unrhyw ddogfennau. Gwnewch yn si\u0175r fod pob gair wedi'i sillafu'n gywir, ac eich bod wedi dewis digon o gategor\u00efau.", "all functions, classes, terms": "holl ffwythiannau, dosbarthau a thermau", "can be huge": "gall fod yn enfawr", "last updated": "diweddarwyd yn ddiwethaf", "lists all sections and subsections": "rhestru holl adrannau ac isadrannau", "next chapter": "pennod nesaf", "previous chapter": "pennod blaenorol", "quick access to all modules": "mynediad cloi i bob modiwl", "search": "chwilio", "search this documentation": "chwiliwch y ddogfennaeth", "the documentation for": "y dogfennaeth am"}, "plural_expr": "(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3"}); \ No newline at end of file diff --git a/sphinx/locale/cy/LC_MESSAGES/sphinx.mo b/sphinx/locale/cy/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000000..6fcda61b5c3 Binary files /dev/null and b/sphinx/locale/cy/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/cy/LC_MESSAGES/sphinx.po b/sphinx/locale/cy/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000000..a959f209a6a --- /dev/null +++ b/sphinx/locale/cy/LC_MESSAGES/sphinx.po @@ -0,0 +1,916 @@ +# Translations template for Sphinx. +# Copyright (C) 2016 ORGANIZATION +# This file is distributed under the same license as the Sphinx project. +# +# Translators: +# FIRST AUTHOR <EMAIL@ADDRESS>, 2016 +# Geraint Palmer <palmer.geraint@googlemail.com>, 2016 +msgid "" +msgstr "" +"Project-Id-Version: Sphinx\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Welsh (http://www.transifex.com/sphinx-doc/sphinx-1/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;\n" + +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 +#, python-format +msgid "Fig. %s" +msgstr "Ffig. %s" + +#: sphinx/config.py:111 +#, python-format +msgid "Table %s" +msgstr "Tabl %s" + +#: sphinx/config.py:112 +#, python-format +msgid "Listing %s" +msgstr "Listing %s" + +#: sphinx/roles.py:187 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" + +#: sphinx/builders/changes.py:75 +msgid "Builtins" +msgstr "" + +#: sphinx/builders/changes.py:77 +msgid "Module level" +msgstr "Lefel modiwl" + +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 +#, python-format +msgid "%b %d, %Y" +msgstr "" + +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "Indecs cyffredinol" + +#: sphinx/builders/html.py:315 +msgid "index" +msgstr "indecs" + +#: sphinx/builders/html.py:377 +msgid "next" +msgstr "nesaf" + +#: sphinx/builders/html.py:386 +msgid "previous" +msgstr "blaenorol" + +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "Dogfennaeth %s %s " + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 +msgid " (in " +msgstr " (yn " + +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 +msgid "Section author: " +msgstr "Awdur yr adran:" + +#: sphinx/directives/other.py:151 +msgid "Module author: " +msgstr "Awdur y fodiwl:" + +#: sphinx/directives/other.py:153 +msgid "Code author: " +msgstr "Awdur y cod:" + +#: sphinx/directives/other.py:155 +msgid "Author: " +msgstr "Awdur:" + +#: sphinx/domains/__init__.py:277 +#, python-format +msgid "%s %s" +msgstr "" + +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 +msgid "Parameters" +msgstr "Paramedrau" + +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 +msgid "Returns" +msgstr "" + +#: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 +#: sphinx/domains/python.py:163 +msgid "Return type" +msgstr "" + +#: sphinx/domains/c.py:177 +#, python-format +msgid "%s (C function)" +msgstr "" + +#: sphinx/domains/c.py:179 +#, python-format +msgid "%s (C member)" +msgstr "" + +#: sphinx/domains/c.py:181 +#, python-format +msgid "%s (C macro)" +msgstr "" + +#: sphinx/domains/c.py:183 +#, python-format +msgid "%s (C type)" +msgstr "" + +#: sphinx/domains/c.py:185 +#, python-format +msgid "%s (C variable)" +msgstr "" + +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 +msgid "function" +msgstr "ffwythiant" + +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 +msgid "member" +msgstr "aelod" + +#: sphinx/domains/c.py:244 +msgid "macro" +msgstr "" + +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 +msgid "type" +msgstr "" + +#: sphinx/domains/c.py:246 +msgid "variable" +msgstr "" + +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "" + +#: sphinx/domains/cpp.py:4205 +#, python-format +msgid "%s (C++ type)" +msgstr "" + +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 +#, python-format +msgid "%s (C++ member)" +msgstr "" + +#: sphinx/domains/cpp.py:4238 +#, python-format +msgid "%s (C++ function)" +msgstr "" + +#: sphinx/domains/cpp.py:4249 +#, python-format +msgid "%s (C++ class)" +msgstr "" + +#: sphinx/domains/cpp.py:4260 +#, python-format +msgid "%s (C++ enum)" +msgstr "" + +#: sphinx/domains/cpp.py:4281 +#, python-format +msgid "%s (C++ enumerator)" +msgstr "" + +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 +msgid "class" +msgstr "" + +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 +msgid "enum" +msgstr "" + +#: sphinx/domains/cpp.py:4423 +msgid "enumerator" +msgstr "" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 +#, python-format +msgid "%s() (built-in function)" +msgstr "" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 +#, python-format +msgid "%s() (%s method)" +msgstr "" + +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "%s (newidyn byd-eang neu cysonyn)" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 +#, python-format +msgid "%s (%s attribute)" +msgstr "" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "" + +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 +msgid "data" +msgstr "" + +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 +msgid "attribute" +msgstr "" + +#: sphinx/domains/python.py:154 +msgid "Variables" +msgstr "" + +#: sphinx/domains/python.py:158 +msgid "Raises" +msgstr "" + +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 +#, python-format +msgid "%s() (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:311 +#, python-format +msgid "%s (built-in variable)" +msgstr "" + +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 +#, python-format +msgid "%s (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:328 +#, python-format +msgid "%s (built-in class)" +msgstr "" + +#: sphinx/domains/python.py:329 +#, python-format +msgid "%s (class in %s)" +msgstr "" + +#: sphinx/domains/python.py:369 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "" + +#: sphinx/domains/python.py:381 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "" + +#: sphinx/domains/python.py:384 +#, python-format +msgid "%s() (%s static method)" +msgstr "" + +#: sphinx/domains/python.py:394 +#, python-format +msgid "%s() (%s.%s class method)" +msgstr "" + +#: sphinx/domains/python.py:397 +#, python-format +msgid "%s() (%s class method)" +msgstr "" + +#: sphinx/domains/python.py:407 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "" + +#: sphinx/domains/python.py:488 +#, python-format +msgid "%s (module)" +msgstr "" + +#: sphinx/domains/python.py:545 +msgid "Python Module Index" +msgstr "" + +#: sphinx/domains/python.py:546 +msgid "modules" +msgstr "" + +#: sphinx/domains/python.py:592 +msgid "Deprecated" +msgstr "" + +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 +msgid "exception" +msgstr "" + +#: sphinx/domains/python.py:618 +msgid "method" +msgstr "" + +#: sphinx/domains/python.py:619 +msgid "class method" +msgstr "" + +#: sphinx/domains/python.py:620 +msgid "static method" +msgstr "" + +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 +msgid "module" +msgstr "modiwl" + +#: sphinx/domains/python.py:787 +msgid " (deprecated)" +msgstr "" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "" + +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 +#, python-format +msgid "environment variable; %s" +msgstr "" + +#: sphinx/domains/std.py:186 +#, python-format +msgid "%scommand line option; %s" +msgstr "" + +#: sphinx/domains/std.py:434 +msgid "glossary term" +msgstr "" + +#: sphinx/domains/std.py:435 +msgid "grammar token" +msgstr "" + +#: sphinx/domains/std.py:436 +msgid "reference label" +msgstr "" + +#: sphinx/domains/std.py:438 +msgid "environment variable" +msgstr "" + +#: sphinx/domains/std.py:439 +msgid "program option" +msgstr "" + +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 +msgid "Index" +msgstr "Indecs" + +#: sphinx/domains/std.py:474 +msgid "Module Index" +msgstr "Indecs Modiwlau" + +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "Tudalen Chwilio" + +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "gweler %s" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "gweler hefyd %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Symbolau" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 +#, python-format +msgid "alias of :class:`%s`" +msgstr "" + +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 +#, python-format +msgid "[graph: %s]" +msgstr "[graff: %s]" + +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 +msgid "[graph]" +msgstr "[graff]" + +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 +#, python-format +msgid "(in %s v%s)" +msgstr "(yn %s v%s)" + +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 +msgid "[source]" +msgstr "[ffynhonnell]" + +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 +msgid "Todo" +msgstr "Todo" + +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 +#, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" + +#: sphinx/ext/todo.py:146 +msgid "original entry" +msgstr "eitem wreiddiol" + +#: sphinx/ext/viewcode.py:166 +msgid "[docs]" +msgstr "[docs]" + +#: sphinx/ext/viewcode.py:180 +msgid "Module code" +msgstr "Cod y modiwl" + +#: sphinx/ext/viewcode.py:186 +#, python-format +msgid "<h1>Source code for %s</h1>" +msgstr "<h1>Cod ffynhonnell ar gyfer %s</h1>" + +#: sphinx/ext/viewcode.py:212 +msgid "Overview: module code" +msgstr "Trosolwg: cod y modiwl" + +#: sphinx/ext/viewcode.py:213 +msgid "<h1>All modules for which code is available</h1>" +msgstr "<h1>Holl fodiwlau lle mae'r cod ar gael</h1>" + +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 +msgid "Attention" +msgstr "Sylw" + +#: sphinx/locale/__init__.py:160 +msgid "Caution" +msgstr "Gofal" + +#: sphinx/locale/__init__.py:161 +msgid "Danger" +msgstr "Perygl" + +#: sphinx/locale/__init__.py:162 +msgid "Error" +msgstr "Gwall" + +#: sphinx/locale/__init__.py:163 +msgid "Hint" +msgstr "Awgrym" + +#: sphinx/locale/__init__.py:164 +msgid "Important" +msgstr "Pwysig" + +#: sphinx/locale/__init__.py:165 +msgid "Note" +msgstr "Nodyn" + +#: sphinx/locale/__init__.py:166 +msgid "See also" +msgstr "Gweler hefyd" + +#: sphinx/locale/__init__.py:167 +msgid "Tip" +msgstr "Awgrym" + +#: sphinx/locale/__init__.py:168 +msgid "Warning" +msgstr "Rhybudd" + +#: sphinx/locale/__init__.py:172 +#, python-format +msgid "New in version %s" +msgstr "Newydd yn fersiwn %s" + +#: sphinx/locale/__init__.py:173 +#, python-format +msgid "Changed in version %s" +msgstr "Wedi newid yn fersiwn %s" + +#: sphinx/locale/__init__.py:174 +#, python-format +msgid "Deprecated since version %s" +msgstr "Dibrisiwyd ers fersiwn %s" + +#: sphinx/locale/__init__.py:180 +msgid "keyword" +msgstr "allweddair" + +#: sphinx/locale/__init__.py:181 +msgid "operator" +msgstr "gweithredydd" + +#: sphinx/locale/__init__.py:182 +msgid "object" +msgstr "gwrthrych" + +#: sphinx/locale/__init__.py:184 +msgid "statement" +msgstr "datganiad" + +#: sphinx/locale/__init__.py:185 +msgid "built-in function" +msgstr "ffwythiant built-in" + +#: sphinx/themes/agogo/layout.html:46 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:11 sphinx/themes/scrolls/layout.html:35 +msgid "Table Of Contents" +msgstr "Tabl Cynnwys" + +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/searchresults.html:10 +msgid "Search" +msgstr "Chwilio" + +#: sphinx/themes/agogo/layout.html:54 sphinx/themes/basic/searchbox.html:15 +msgid "Go" +msgstr "Ewch" + +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 +msgid "Show Source" +msgstr "Dangos Ffynhonell" + +#: sphinx/themes/basic/defindex.html:11 +msgid "Overview" +msgstr "Trosolwg" + +#: sphinx/themes/basic/defindex.html:15 +msgid "Welcome! This is" +msgstr "Croeso! Dyma" + +#: sphinx/themes/basic/defindex.html:16 +msgid "the documentation for" +msgstr "y dogfennaeth am" + +#: sphinx/themes/basic/defindex.html:17 +msgid "last updated" +msgstr "diweddarwyd yn ddiwethaf" + +#: sphinx/themes/basic/defindex.html:20 +msgid "Indices and tables:" +msgstr "Indecsau a tablau:" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "Tabl Cynnwys Llawn" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "rhestru holl adrannau ac isadrannau" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "chwiliwch y ddogfennaeth" + +#: sphinx/themes/basic/defindex.html:28 +msgid "Global Module Index" +msgstr "Indecs Modiwl Byd-Eang" + +#: sphinx/themes/basic/defindex.html:29 +msgid "quick access to all modules" +msgstr "mynediad cloi i bob modiwl" + +#: sphinx/themes/basic/defindex.html:31 +msgid "all functions, classes, terms" +msgstr "holl ffwythiannau, dosbarthau a thermau" + +#: sphinx/themes/basic/genindex-single.html:33 +#, python-format +msgid "Index – %(key)s" +msgstr "Indecs – %(key)s" + +#: sphinx/themes/basic/genindex-single.html:61 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:72 +msgid "Full index on one page" +msgstr "Indecs llawn ar un tudalen" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "Indecs tudalennau gan lythyren" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "gall fod yn enfawr" + +#: sphinx/themes/basic/layout.html:29 +msgid "Navigation" +msgstr "Llywio" + +#: sphinx/themes/basic/layout.html:123 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "Chwilio o fewn %(docstitle)s" + +#: sphinx/themes/basic/layout.html:132 +msgid "About these documents" +msgstr "Ynglŷn â'r dogfennau hyn" + +#: sphinx/themes/basic/layout.html:141 +msgid "Copyright" +msgstr "Hawlfraint" + +#: sphinx/themes/basic/layout.html:186 +#, python-format +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:188 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:192 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Diweddarwyd yn ddiwethaf ar %(last_updated)s." + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "" +"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "Cr谷wyd gan ddefnyddio <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s" + +#: sphinx/themes/basic/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr "Chwilio %(docstitle)s" + +#: sphinx/themes/basic/relations.html:11 +msgid "Previous topic" +msgstr "Pwnc blaenorol" + +#: sphinx/themes/basic/relations.html:13 +msgid "previous chapter" +msgstr "pennod blaenorol" + +#: sphinx/themes/basic/relations.html:16 +msgid "Next topic" +msgstr "Pwnc nesaf" + +#: sphinx/themes/basic/relations.html:18 +msgid "next chapter" +msgstr "pennod nesaf" + +#: sphinx/themes/basic/search.html:27 +msgid "" +"Please activate JavaScript to enable the search\n" +" functionality." +msgstr "Trwoch JavaScript ymlaen i alluogi'r chwilio." + +#: sphinx/themes/basic/search.html:32 +msgid "" +"From here you can search these documents. Enter your search\n" +" words into the box below and click \"search\". Note that the search\n" +" function will automatically search for all of the words. Pages\n" +" containing fewer words won't appear in the result list." +msgstr "O'r fan hon gallwch chwilio'r dogfennau hyn. Rhowch eich geiriau chwilio yn y blwch isod a chliciwch \"chwilio\". Nodwch fod y ffwythiant chwilio yn chwilio am bob un o'r geiriau yn awtomatig. Ni fydd dudalennau sy'n cynnwys llai o eiriau yn ymddangos yn y rhestr canlyniadau." + +#: sphinx/themes/basic/search.html:39 +#: sphinx/themes/basic/searchresults.html:17 +msgid "search" +msgstr "chwilio" + +#: sphinx/themes/basic/search.html:43 +#: sphinx/themes/basic/searchresults.html:21 +#: sphinx/themes/basic/static/searchtools.js_t:287 +msgid "Search Results" +msgstr "Canlyniadau chwilio" + +#: sphinx/themes/basic/search.html:45 +#: sphinx/themes/basic/searchresults.html:23 +#: sphinx/themes/basic/static/searchtools.js_t:289 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "Nid yw eich chwiliad yn cyfateb unrhyw ddogfennau. Gwnewch yn siŵr fod pob gair wedi'i sillafu'n gywir, ac eich bod wedi dewis digon o gategorïau." + +#: sphinx/themes/basic/searchbox.html:12 +msgid "Quick search" +msgstr "Chwilio cyflym" + +#: sphinx/themes/basic/sourcelink.html:12 +msgid "This Page" +msgstr "Y Dudalen Hon" + +#: 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 "" + +#: sphinx/themes/basic/changes/rstsource.html:5 +#, python-format +msgid "%(filename)s — %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:17 +#, python-format +msgid "Automatically generated list of changes in version %(version)s" +msgstr "Rhestr o newidiadau yn fersiwn %(version)s wedi'i cynhyrchu'n awtomatig" + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "Newidiadau i'r llyfrgell" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "Newidiadau i'r C-API" + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "Newidiadau arall" + +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 +msgid "Permalink to this headline" +msgstr "Permalink i'r pennawd hwn" + +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 +msgid "Permalink to this definition" +msgstr "Permalink i'r diffiniad hwn" + +#: sphinx/themes/basic/static/doctools.js_t:208 +msgid "Hide Search Matches" +msgstr "Cuddio Canlyniadau Chwilio" + +#: sphinx/themes/basic/static/searchtools.js_t:121 +msgid "Searching" +msgstr "Yn chwilio" + +#: sphinx/themes/basic/static/searchtools.js_t:126 +msgid "Preparing search..." +msgstr "Paratoi chwilio..." + +#: sphinx/themes/basic/static/searchtools.js_t:291 +#, python-format +msgid "Search finished, found %s page(s) matching the search query." +msgstr "Chwiliad wedi gorffen, wedi ffeindio %s tudalen(nau) yn cyfateb a'r ymholiad chwilio." + +#: sphinx/themes/basic/static/searchtools.js_t:344 +msgid ", in " +msgstr ", yn " + +#: sphinx/themes/classic/static/sidebar.js_t:83 +msgid "Expand sidebar" +msgstr "Ehangu'r bar ochr" + +#: sphinx/themes/classic/static/sidebar.js_t:96 +#: sphinx/themes/classic/static/sidebar.js_t:124 +msgid "Collapse sidebar" +msgstr "Cyfangu'r bar ochr" + +#: sphinx/themes/haiku/layout.html:24 +msgid "Contents" +msgstr "Cynnwys" + +#: sphinx/writers/html.py:389 +msgid "Permalink to this code" +msgstr "Permalink i'r cod hwn" + +#: sphinx/writers/html.py:393 +msgid "Permalink to this image" +msgstr "Permalink i'r ddelwedd hon" + +#: sphinx/writers/html.py:395 +msgid "Permalink to this toctree" +msgstr "Permalink i'r toctree hwn" + +#: sphinx/writers/html.py:717 +msgid "Permalink to this table" +msgstr "Permalink i'r tabl hwn" + +#: sphinx/writers/latex.py:380 +msgid "Release" +msgstr "Rhyddhad" + +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 +msgid "Footnotes" +msgstr "Troednodiadau" + +#: sphinx/writers/latex.py:1112 +msgid "continued from previous page" +msgstr "wedi'i barhau o'r tudalen blaenorol" + +#: sphinx/writers/latex.py:1118 +msgid "Continued on next page" +msgstr "Yn parhau ar y tudalen nesaf" + +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 +#, python-format +msgid "[image: %s]" +msgstr "[delwedd: %s]" + +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 +msgid "[image]" +msgstr "[delwedd]" diff --git a/sphinx/locale/da/LC_MESSAGES/sphinx.js b/sphinx/locale/da/LC_MESSAGES/sphinx.js index e8151cfe6f6..5310acaad9a 100644 --- a/sphinx/locale/da/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/da/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "da", "plural_expr": "(n != 1)", "messages": {"Next topic": "N\u00e6ste emne", "Index": "Indeks", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "Velkommen! Dette er", "Copyright": "Ophavsret", "C API changes": "\u00c6ndringer i C-API", "quick access to all modules": "hurtig adgang til alle moduler", "© Copyright %(copyright)s.": "© Ophavsret %(copyright)s.", "Global Module Index": "Globalt modulindeks", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "Indeks – %(key)s", "General Index": "Generelt indeks", "next chapter": "n\u00e6ste kapitel", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "forrige kapitel", "Permalink to this headline": "Permalink til denne overskrift", "About these documents": "Om disse dokumenter", "Preparing search...": "Forbereder s\u00f8gning...", ", in ": "", "Navigation": "Navigation", "Expand sidebar": "Udfold sidebj\u00e6lke", "the documentation for": "dokumentationen for", "Complete Table of Contents": "Fuldst\u00e6ndig indholdsfortegnelse", "Contents": "Indhold", "can be huge": "kan v\u00e6re enormt", "Changes in Version %(version)s — %(docstitle)s": "\u00c6ndringer i version %(version)s — %(docstitle)s", "Other changes": "Andre \u00e6ndringer", "Hide Search Matches": "Skjul s\u00f8geresultater", "Quick search": "Hurtig s\u00f8gning", "Show Source": "Vis kilde", "Search": "S\u00f8g", "This Page": "Denne side", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Her fra kan du s\u00f8ge i disse dokumenter. Indtast dine s\u00f8geord\n i boksen nedenfor og klik p\u00e5 \"s\u00f8g\". Bem\u00e6rk at s\u00f8gefunktionen\n automatisk vil s\u00f8ge p\u00e5 alle ordene. Sider, der indeholder\n f\u00e6rre ord, vil ikke indg\u00e5 i resultaterne.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Bygget med <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "sidst opdateret", "Collapse sidebar": "Sammenfold sidebj\u00e6lke", "Go": "S\u00f8g", "Table Of Contents": "Indholdsfortegnelse", "Search within %(docstitle)s": "S\u00f8g i %(docstitle)s", "all functions, classes, terms": "alle funktioner, klasser, begreber", "Please activate JavaScript to enable the search\n functionality.": "Aktiv\u00e9r venligst JavaScript for at aktivere\n s\u00f8gefunktionalitet.", "Indices and tables:": "Indeks og tabeller:", "lists all sections and subsections": "viser alle afsnit og underafsnit", "Index pages by letter": "Indeks\u00e9r sider efter bogstav", "search": "s\u00f8g", "Permalink to this definition": "Permalink til denne definition", "Previous topic": "Forrige emne", "Overview": "Oversigt", "Last updated on %(last_updated)s.": "Sidst opdateret %(last_updated)s.", "Searching": "S\u00f8ger", "search this documentation": "s\u00f8g i denne dokumentation", "Automatically generated list of changes in version %(version)s": "Automatisk oprettet liste af \u00e6ndringer i version %(version)s", "Full index on one page": "Fuldt indeks p\u00e5 \u00e9n side", "Enter search terms or a module, class or function name.": "Indtast s\u00f8geord eller navnet p\u00e5 et modul, en klasse eller en funktion.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Ophavsret</a> %(copyright)s.", "Library changes": "Biblioteks\u00e6ndringer", "Search Page": "S\u00f8geside", "Search Results": "S\u00f8geresultater"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "da", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": ", i", "About these documents": "Om disse dokumenter", "Automatically generated list of changes in version %(version)s": "Automatisk oprettet liste af \u00e6ndringer i version %(version)s", "C API changes": "\u00c6ndringer i C-API", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "Sammenfold sidebj\u00e6lke", "Complete Table of Contents": "Fuldst\u00e6ndig indholdsfortegnelse", "Contents": "Indhold", "Copyright": "Ophavsret", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Bygget med <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "Udfold sidebj\u00e6lke", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Her fra kan du s\u00f8ge i disse dokumenter. Indtast dine s\u00f8geord\n i boksen nedenfor og klik p\u00e5 \"s\u00f8g\". Bem\u00e6rk at s\u00f8gefunktionen\n automatisk vil s\u00f8ge p\u00e5 alle ordene. Sider, der indeholder\n f\u00e6rre ord, vil ikke indg\u00e5 i resultaterne.", "Full index on one page": "Fuldt indeks p\u00e5 \u00e9n side", "General Index": "Generelt indeks", "Global Module Index": "Globalt modulindeks", "Go": "S\u00f8g", "Hide Search Matches": "Skjul s\u00f8geresultater", "Index": "Indeks", "Index – %(key)s": "Indeks – %(key)s", "Index pages by letter": "Indeks\u00e9r sider efter bogstav", "Indices and tables:": "Indeks og tabeller:", "Last updated on %(last_updated)s.": "Sidst opdateret %(last_updated)s.", "Library changes": "Biblioteks\u00e6ndringer", "Navigation": "Navigation", "Next topic": "N\u00e6ste emne", "Other changes": "Andre \u00e6ndringer", "Overview": "Oversigt", "Permalink to this definition": "Permalink til denne definition", "Permalink to this headline": "Permalink til denne overskrift", "Please activate JavaScript to enable the search\n functionality.": "Aktiv\u00e9r venligst JavaScript for at aktivere\n s\u00f8gefunktionalitet.", "Preparing search...": "Forbereder s\u00f8gning...", "Previous topic": "Forrige emne", "Quick search": "Hurtig s\u00f8gning", "Search": "S\u00f8g", "Search Page": "S\u00f8geside", "Search Results": "S\u00f8geresultater", "Search finished, found %s page(s) matching the search query.": "S\u00f8gning f\u00e6rdig, fandt %s sider der matcher s\u00f8geforesp\u00f8rgslen.", "Search within %(docstitle)s": "S\u00f8g i %(docstitle)s", "Searching": "S\u00f8ger", "Show Source": "Vis kilde", "Table Of Contents": "Indholdsfortegnelse", "This Page": "Denne side", "Welcome! This is": "Velkommen! Dette er", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Din s\u00f8gning matchede ikke nogen dokumenter. Sikr dig at alle ord er stavet korrekt og at du har valgt nok kategorier.", "all functions, classes, terms": "alle funktioner, klasser, begreber", "can be huge": "kan v\u00e6re enormt", "last updated": "sidst opdateret", "lists all sections and subsections": "viser alle afsnit og underafsnit", "next chapter": "n\u00e6ste kapitel", "previous chapter": "forrige kapitel", "quick access to all modules": "hurtig adgang til alle moduler", "search": "s\u00f8g", "search this documentation": "s\u00f8g i denne dokumentation", "the documentation for": "dokumentationen for"}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/da/LC_MESSAGES/sphinx.mo b/sphinx/locale/da/LC_MESSAGES/sphinx.mo index ec2e49789f6..529a18c2f6b 100644 Binary files a/sphinx/locale/da/LC_MESSAGES/sphinx.mo and b/sphinx/locale/da/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/da/LC_MESSAGES/sphinx.po b/sphinx/locale/da/LC_MESSAGES/sphinx.po index 3ec4de4d395..c4c67fec0a2 100644 --- a/sphinx/locale/da/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/da/LC_MESSAGES/sphinx.po @@ -1,70 +1,51 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: # askhl <asklarsen@gmail.com>, 2010-2011 -# Jakob Lykke Andersen <jakob@caput.dk>, 2014 +# Jakob Lykke Andersen <jakob@caput.dk>, 2014,2016 +# Joe Hansen <joedalton2@yahoo.dk>, 2016 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Danish (http://www.transifex.com/projects/p/sphinx-1/language/da/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Danish (http://www.transifex.com/sphinx-doc/sphinx-1/language/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "figur %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "tabel %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" -msgstr "" - -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s dokumentation" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "se %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "se også %s" +msgstr "Viser %s" -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Symboler" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d. %B, %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Indbyggede" @@ -73,64 +54,76 @@ msgstr "Indbyggede" msgid "Module level" msgstr "Modulniveau" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d. %b, %Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Generelt indeks" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "indeks" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "næste" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "forrige" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s dokumentation" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (i " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Afsnitsforfatter: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Modulforfatter: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Kodeforfatter: " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Forfatter: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parametre" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Returnerer" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Returtype" @@ -159,12 +152,12 @@ msgstr "%s (C-type)" msgid "%s (C variable)" msgstr "%s (C-variabel)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "funktion" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "medlem" @@ -172,7 +165,7 @@ msgstr "medlem" msgid "macro" msgstr "makro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "type" @@ -180,59 +173,72 @@ msgstr "type" msgid "variable" msgstr "variabel" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "Template-parametre" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Kaster" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++-type)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++-medlem)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++-funktion)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++-klasse)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" -msgstr "" +msgstr "%s (C++ optæl)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" -msgstr "" +msgstr "%s (C++-optælling)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "klasse" -#: sphinx/domains/cpp.py:2683 -msgid "enum" +#: sphinx/domains/cpp.py:4421 +msgid "concept" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4422 +msgid "enum" +msgstr "optæl" + +#: sphinx/domains/cpp.py:4423 msgid "enumerator" -msgstr "" +msgstr "optælling" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (indbygget funktion)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (metode i %s)" @@ -247,7 +253,7 @@ msgstr "%s() (klasse)" msgid "%s (global variable or constant)" msgstr "%s (global variabel eller konstant)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (attribut i %s)" @@ -256,116 +262,116 @@ msgstr "%s (attribut i %s)" msgid "Arguments" msgstr "Parametre" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "data" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "attribut" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Variable" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Rejser" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (i modulet %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (indbygget variabel)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (i modulet %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (indbygget klasse)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (klasse i %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (metode i %s.%s)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (statisk metode i %s.%s)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (statisk metode i %s)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (klassemetode i %s.%s)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (klassemetode i %s)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (attribut i %s.%s)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (modul)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Python-modulindeks" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "moduler" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Forældet" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "undtagelse" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "metode" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "klassemetode" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "statisk metode" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "modul" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (forældet)" @@ -387,188 +393,219 @@ msgstr "direktiv" msgid "role" msgstr "rolle" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "miljøvariabel; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%skommandolinjetilvalg; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "begreb i ordliste" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "grammatisk element" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "referenceetiket" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "miljøvariabel" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "programtilvalg" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Indeks" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Modulindeks" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Søgeside" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr " Baser: %s" +msgid "see %s" +msgstr "se %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "se også %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Symboler" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "alias for :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" -msgstr "" +msgstr "[graf: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" +msgstr "[graf]" + +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" -msgstr "" +msgstr "(i %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[kilde]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Todo" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<oprindeligt punkt>>" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" msgstr "(Det <<oprindelige punkt>> befinder sig i %s, linje %d.)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "oprindeligt punkt" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[dok]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Modulkode" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Kildekode for %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Oversigt: modulkode" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Alle moduler, der er kode tilgængelig for</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Vær opmærksom" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Forsigtig" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Fare" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Fejl" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Fif" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Vigtigt" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Bemærk" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Se også" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Tip" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Advarsel" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Ny i version %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Ændret i version %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Forældet siden version %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "nøgleord" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "erklæring" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "indbygget funktion" @@ -577,7 +614,7 @@ msgstr "indbygget funktion" msgid "Table Of Contents" msgstr "Indholdsfortegnelse" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -587,11 +624,7 @@ msgstr "Søg" msgid "Go" msgstr "Søg" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Indtast søgeord eller navnet på et modul, en klasse eller en funktion." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Vis kilde" @@ -639,15 +672,15 @@ msgstr "hurtig adgang til alle moduler" msgid "all functions, classes, terms" msgstr "alle funktioner, klasser, begreber" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Indeks – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Fuldt indeks på én side" @@ -663,35 +696,35 @@ msgstr "kan være enormt" msgid "Navigation" msgstr "Navigation" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Søg i %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Om disse dokumenter" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Ophavsret" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Ophavsret</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Ophavsret %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Sidst opdateret %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -740,17 +773,17 @@ msgstr "søg" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Søgeresultater" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." -msgstr "" +msgstr "Din søgning matchede ikke nogen dokumenter. Sikr dig at alle ord er stavet korrekt og at du har valgt nok kategorier." #: sphinx/themes/basic/searchbox.html:12 msgid "Quick search" @@ -763,13 +796,13 @@ msgstr "Denne side" #: 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 "Ændringer i version %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -788,35 +821,36 @@ msgstr "Ændringer i C-API" msgid "Other changes" msgstr "Andre ændringer" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Permalink til denne overskrift" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Permalink til denne definition" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Skjul søgeresultater" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "Søger" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "Forbereder søgning..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." -msgstr "" +msgstr "Søgning færdig, fandt %s sider der matcher søgeforespørgslen." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " -msgstr "" +msgstr ", i" #: sphinx/themes/classic/static/sidebar.js_t:83 msgid "Expand sidebar" @@ -831,44 +865,53 @@ msgstr "Sammenfold sidebjælke" msgid "Contents" msgstr "Indhold" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" -msgstr "" +msgstr "Permahenvisning til denne kode" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" -msgstr "" +msgstr "Permahenvisning til dette billede" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" -msgstr "" +msgstr "Permahenvisning til dette toctree" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" -msgstr "" +msgstr "Permahenvisning til denne tabel" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Udgave" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "side" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Fodnoter" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "fortsat fra forrige side" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Fortsættes på næste side" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" -msgstr "" +msgstr "[billede: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[billede]" diff --git a/sphinx/locale/de/LC_MESSAGES/sphinx.js b/sphinx/locale/de/LC_MESSAGES/sphinx.js index 0fa643257e1..ddbeb95bccc 100644 --- a/sphinx/locale/de/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/de/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "de", "plural_expr": "(n != 1)", "messages": {"Next topic": "N\u00e4chstes Thema", "Index": "Stichwortverzeichnis", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "Willkommen! Dies ist", "Copyright": "Copyright", "C API changes": "C API-\u00c4nderungen", "quick access to all modules": "schneller Zugriff auf alle Module", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "Globaler Modulindex", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Ihre Suche ergab keine Treffer. Bitte stellen Sie sicher, dass alle W\u00f6rter richtig geschrieben sind und gen\u00fcgend Kategorien ausgew\u00e4hlt sind.", "Index – %(key)s": "Stichwortverzeichnis – %(key)s", "General Index": "Stichwortverzeichnis", "next chapter": "n\u00e4chstes Kapitel", "Search finished, found %s page(s) matching the search query.": "Die Suche ist fertig, es wurde(n) %s Seite(n) mit Treffern gefunden.", "previous chapter": "vorheriges Kapitel", "Permalink to this headline": "Link zu dieser \u00dcberschrift", "About these documents": "\u00dcber dieses Dokument", "Preparing search...": "Suche wird vorbereitet...", ", in ": ", in ", "Navigation": "Navigation", "Expand sidebar": "Seitenleiste ausklappen", "the documentation for": "die Dokumentation f\u00fcr", "Complete Table of Contents": "Vollst\u00e4ndiges Inhaltsverzeichnis", "Contents": "Inhalt", "can be huge": "kann gro\u00df sein", "Changes in Version %(version)s — %(docstitle)s": "\u00c4nderungen in Version %(version)s — %(docstitle)s", "Other changes": "Andere \u00c4nderungen", "Hide Search Matches": "Suchergebnisse ausblenden", "Quick search": "Schnellsuche", "Show Source": "Quellcode anzeigen", "Search": "Suche", "This Page": "Diese Seite", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Von hier aus k\u00f6nnen Sie die Dokumentation durchsuchen. Geben Sie Ihre Suchbegriffe in das untenstehende Feld ein und klicken Sie auf \"Suchen\". Bitte beachten Sie, dass die Suchfunktion automatisch nach allen Worten sucht. Seiten, die nicht alle Worte enthalten, erscheinen nicht in der Ergebnisliste.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Mit <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s erstellt.", "last updated": "zuletzt aktualisiert", "Collapse sidebar": "Seitenleiste einklappen", "Go": "Los", "Table Of Contents": "Inhalt", "Search within %(docstitle)s": "Suche in %(docstitle)s", "all functions, classes, terms": "alle Funktionen, Klassen, Begriffe", "Please activate JavaScript to enable the search\n functionality.": "Bitte aktivieren Sie JavaScript, wenn Sie die Suchfunktion nutzen wollen.", "Indices and tables:": "Verzeichnisse und Tabellen:", "lists all sections and subsections": "Liste aller Kapitel und Unterkapitel", "Index pages by letter": "Stichwortverzeichnis nach Anfangsbuchstabe", "search": "suchen", "Permalink to this definition": "Link zu dieser Definition", "Previous topic": "Vorheriges Thema", "Overview": "\u00dcbersicht", "Last updated on %(last_updated)s.": "Zuletzt aktualisiert am %(last_updated)s.", "Searching": "Suchen", "search this documentation": "durchsuche diese Dokumentation", "Automatically generated list of changes in version %(version)s": "Automatisch generierte Liste der \u00c4nderungen in Version %(version)s", "Full index on one page": "Gesamtes Stichwortverzeichnis auf einer Seite", "Enter search terms or a module, class or function name.": "Geben Sie Suchbegriffe oder einen Modul-, Klassen- oder Funktionsnamen ein.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "Bibliotheks-\u00c4nderungen", "Search Page": "Suche", "Search Results": "Suchergebnisse"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "de", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": ", in ", "About these documents": "\u00dcber dieses Dokument", "Automatically generated list of changes in version %(version)s": "Automatisch generierte Liste der \u00c4nderungen in Version %(version)s", "C API changes": "C API-\u00c4nderungen", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "Seitenleiste einklappen", "Complete Table of Contents": "Vollst\u00e4ndiges Inhaltsverzeichnis", "Contents": "Inhalt", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Mit <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s erstellt.", "Expand sidebar": "Seitenleiste ausklappen", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Von hier aus k\u00f6nnen Sie die Dokumentation durchsuchen. Geben Sie Ihre Suchbegriffe in das untenstehende Feld ein und klicken Sie auf \"Suchen\". Bitte beachten Sie, dass die Suchfunktion automatisch nach allen Worten sucht. Seiten, die nicht alle Worte enthalten, erscheinen nicht in der Ergebnisliste.", "Full index on one page": "Gesamtes Stichwortverzeichnis auf einer Seite", "General Index": "Stichwortverzeichnis", "Global Module Index": "Globaler Modulindex", "Go": "Los", "Hide Search Matches": "Suchergebnisse ausblenden", "Index": "Stichwortverzeichnis", "Index – %(key)s": "Stichwortverzeichnis – %(key)s", "Index pages by letter": "Stichwortverzeichnis nach Anfangsbuchstabe", "Indices and tables:": "Verzeichnisse und Tabellen:", "Last updated on %(last_updated)s.": "Zuletzt aktualisiert am %(last_updated)s.", "Library changes": "Bibliotheks-\u00c4nderungen", "Navigation": "Navigation", "Next topic": "N\u00e4chstes Thema", "Other changes": "Andere \u00c4nderungen", "Overview": "\u00dcbersicht", "Permalink to this definition": "Link zu dieser Definition", "Permalink to this headline": "Link zu dieser \u00dcberschrift", "Please activate JavaScript to enable the search\n functionality.": "Bitte aktivieren Sie JavaScript, wenn Sie die Suchfunktion nutzen wollen.", "Preparing search...": "Suche wird vorbereitet...", "Previous topic": "Vorheriges Thema", "Quick search": "Schnellsuche", "Search": "Suche", "Search Page": "Suche", "Search Results": "Suchergebnisse", "Search finished, found %s page(s) matching the search query.": "Die Suche ist fertig, es wurde(n) %s Seite(n) mit Treffern gefunden.", "Search within %(docstitle)s": "Suche in %(docstitle)s", "Searching": "Suchen", "Show Source": "Quellcode anzeigen", "Table Of Contents": "Inhalt", "This Page": "Diese Seite", "Welcome! This is": "Willkommen! Dies ist", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Ihre Suche ergab keine Treffer. Bitte stellen Sie sicher, dass alle W\u00f6rter richtig geschrieben sind und gen\u00fcgend Kategorien ausgew\u00e4hlt sind.", "all functions, classes, terms": "alle Funktionen, Klassen, Begriffe", "can be huge": "kann gro\u00df sein", "last updated": "zuletzt aktualisiert", "lists all sections and subsections": "Liste aller Kapitel und Unterkapitel", "next chapter": "n\u00e4chstes Kapitel", "previous chapter": "vorheriges Kapitel", "quick access to all modules": "schneller Zugriff auf alle Module", "search": "suchen", "search this documentation": "durchsuche diese Dokumentation", "the documentation for": "die Dokumentation f\u00fcr"}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/de/LC_MESSAGES/sphinx.mo b/sphinx/locale/de/LC_MESSAGES/sphinx.mo index 9ea1efe4758..2f1ada75376 100644 Binary files a/sphinx/locale/de/LC_MESSAGES/sphinx.mo and b/sphinx/locale/de/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/de/LC_MESSAGES/sphinx.po b/sphinx/locale/de/LC_MESSAGES/sphinx.po index 282fc82e9cf..d6567fa33e6 100644 --- a/sphinx/locale/de/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/de/LC_MESSAGES/sphinx.po @@ -1,69 +1,50 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: # Georg Brandl <g.brandl@gmx.net>, 2013-2015 +# Lukas Prokop <admin@lukas-prokop.at>, 2016 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: German (http://www.transifex.com/projects/p/sphinx-1/language/de/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: German (http://www.transifex.com/sphinx-doc/sphinx-1/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "Abb. %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "Tab. %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "Quellcode %s" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s Dokumentation" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "siehe %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "siehe auch %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Sonderzeichen" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d.%m.%Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Builtins" @@ -72,64 +53,76 @@ msgstr "Builtins" msgid "Module level" msgstr "Modulebene" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d.%m.%Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Stichwortverzeichnis" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "Index" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "weiter" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "zurück" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s Dokumentation" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (in " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Autor des Abschnitts: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Autor des Moduls: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Autor des Quellcode: " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Autor: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s-%s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parameter" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Rückgabe" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Rückgabetyp" @@ -158,12 +151,12 @@ msgstr "%s (C-Typ)" msgid "%s (C variable)" msgstr "%s (C-Variable)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "Funktion" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "Member" @@ -171,7 +164,7 @@ msgstr "Member" msgid "macro" msgstr "Makro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "Typ" @@ -179,59 +172,72 @@ msgstr "Typ" msgid "variable" msgstr "Variable" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "Template Parameter" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Wirft" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++-Typ)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++-Member)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++-Funktion)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++-Klasse)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "%s (C++-Aufzählung)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "%s (C++-Enumerator)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "Klasse" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "Aufzählung" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "Enumerator" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (Standard-Funktion)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (Methode von %s)" @@ -246,7 +252,7 @@ msgstr "%s() (Klasse)" msgid "%s (global variable or constant)" msgstr "%s (globale Variable oder Konstante)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (Attribut von %s)" @@ -255,116 +261,116 @@ msgstr "%s (Attribut von %s)" msgid "Arguments" msgstr "Parameter" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "Wert" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "Attribut" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Variablen" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Verursacht" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (im Modul %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (Standard-Variable)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (in Modul %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (Builtin-Klasse)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (Klasse in %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (Methode von %s.%s)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (statische Methode von %s.%s)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (statische Methode von %s)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (Klassenmethode von %s.%s)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (Klassenmethode von %s)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (Attribut von %s.%s)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (Modul)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Python-Modulindex" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "Module" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Veraltet" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "Exception" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "Methode" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "Klassenmethode" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "statische Methode" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "Modul" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (veraltet)" @@ -386,188 +392,219 @@ msgstr "Direktive" msgid "role" msgstr "Rolle" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "Umgebungsvariable; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%sKommandozeilenoption; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "Glossareintrag" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "Grammatik-Token" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "Referenz-Label" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "Umgebungsvariable" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "Programmoption" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Stichwortverzeichnis" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Modulindex" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Suche" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "siehe %s" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "siehe auch %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Sonderzeichen" + +#: sphinx/ext/autodoc.py:1297 #, python-format -msgid " Bases: %s" -msgstr " Basisklassen: %s" +msgid "Bases: %s" +msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "Alias von :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[Diagramm: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[Diagramm]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(in %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[Quellcode]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Zu tun" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<ursprüngliche Eintrag>>" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" msgstr "(Der <<ursprüngliche Eintrag>> steht in %s, Zeile %d.)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "ursprüngliche Eintrag" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[Doku]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Modul-Quellcode" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Quellcode für %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Überblick: Modul-Quellcode" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Alle Module, für die Quellcode verfügbar ist</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Achtung" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Vorsicht" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Gefahr" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Fehler" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Hinweis" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Wichtig" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Bemerkung" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Siehe auch" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Tipp" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Warnung" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Neu in Version %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Geändert in Version %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Veraltet ab Version %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "Schlüsselwort" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "Operator" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "Objekt" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "Anweisung" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "Builtin-Funktion" @@ -576,7 +613,7 @@ msgstr "Builtin-Funktion" msgid "Table Of Contents" msgstr "Inhalt" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -586,11 +623,7 @@ msgstr "Suche" msgid "Go" msgstr "Los" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Geben Sie Suchbegriffe oder einen Modul-, Klassen- oder Funktionsnamen ein." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Quellcode anzeigen" @@ -638,15 +671,15 @@ msgstr "schneller Zugriff auf alle Module" msgid "all functions, classes, terms" msgstr "alle Funktionen, Klassen, Begriffe" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Stichwortverzeichnis – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Gesamtes Stichwortverzeichnis auf einer Seite" @@ -662,35 +695,35 @@ msgstr "kann groß sein" msgid "Navigation" msgstr "Navigation" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Suche in %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Über dieses Dokument" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Zuletzt aktualisiert am %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -739,13 +772,13 @@ msgstr "suchen" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Suchergebnisse" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -762,13 +795,13 @@ msgstr "Diese Seite" #: 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 "Änderungen in Version %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -787,33 +820,34 @@ msgstr "C API-Änderungen" msgid "Other changes" msgstr "Andere Änderungen" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Link zu dieser Überschrift" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Link zu dieser Definition" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Suchergebnisse ausblenden" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "Suchen" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "Suche wird vorbereitet..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Die Suche ist fertig, es wurde(n) %s Seite(n) mit Treffern gefunden." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr ", in " @@ -830,44 +864,53 @@ msgstr "Seitenleiste einklappen" msgid "Contents" msgstr "Inhalt" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "Link zu diesem Quellcode" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "Link zu diesem Bild" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" -msgstr "" +msgstr "Permanenter Link zu diesem Inhaltsverzeichnis" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "Link zu dieser Tabelle" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Release" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "Seite" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Fußnoten" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "Fortsetzung der vorherigen Seite" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Fortsetzung auf der nächsten Seite" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[Bild: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[Bild]" diff --git a/sphinx/locale/el/LC_MESSAGES/sphinx.js b/sphinx/locale/el/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000000..4c8ffaa9f0c --- /dev/null +++ b/sphinx/locale/el/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "el", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": ", \u03c3\u03c4\u03bf ", "About these documents": "\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03b1\u03c5\u03c4\u03ac \u03c4\u03b1 \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03b1", "Automatically generated list of changes in version %(version)s": "\u0391\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1 \u03c0\u03b1\u03c1\u03b1\u03b3\u03cc\u03bc\u03b5\u03bd\u03b7 \u03bb\u03af\u03c3\u03c4\u03b1 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ce\u03bd \u03c3\u03c4\u03b7\u03bd \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 %(version)s", "C API changes": "\u0391\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2 \u03c3\u03c4\u03bf API \u03c4\u03b7\u03c2 C", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf \u03c0\u03bb\u03b1\u03ca\u03bd\u03ae\u03c2 \u03bc\u03c0\u03ac\u03c1\u03b1\u03c2", "Complete Table of Contents": "\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd", "Contents": "\u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03b1", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03b8\u03b7\u03ba\u03b5 \u03bc\u03b5 \u03c4\u03bf <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c0\u03bb\u03b1\u03ca\u03bd\u03ae\u03c2 \u03bc\u03c0\u03ac\u03c1\u03b1\u03c2", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u0391\u03c0\u03cc \u03b5\u03b4\u03ce \u03bc\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03b1\u03bd\u03b1\u03b6\u03b7\u03c4\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ac \u03c4\u03b1 \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03b1. \u0395\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03bb\u03ad\u03be\u03b5\u03b9\u03c2\n \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\u03c2 \u03c3\u03c4\u03bf \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03c0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf \u03ba\u03b1\u03b9 \u03c0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 \"\u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\". \u03a3\u03b7\u03bc\u03b5\u03b9\u03ce\u03c3\u03c4\u03b5 \u03cc\u03c4\u03b9 \u03b7 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \n \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\u03c2 \u03b8\u03b1 \u03b1\u03bd\u03b1\u03b6\u03b7\u03c4\u03ae\u03c3\u03b5\u03b9 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1 \u03b3\u03b9\u03b1 \u03cc\u03bb\u03b5\u03c2 \u03c4\u03b9\u03c2 \u03bb\u03ad\u03be\u03b5\u03b9\u03c2. \u03a3\u03b5\u03bb\u03af\u03b4\u03b5\u03c2\n \u03c0\u03bf\u03c5 \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03bf\u03c5\u03bd \u03bb\u03b9\u03b3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03bb\u03ad\u03be\u03b5\u03b9\u03c2 \u03b4\u03b5 \u03b8\u03b1 \u03b5\u03bc\u03c6\u03b1\u03bd\u03b9\u03c3\u03c4\u03bf\u03cd\u03bd \u03c3\u03c4\u03b7 \u03bb\u03af\u03c3\u03c4\u03b1 \u03b1\u03c0\u03bf\u03c4\u03b5\u03bb\u03b5\u03c3\u03bc\u03ac\u03c4\u03c9\u03bd.", "Full index on one page": "\u03a0\u03bb\u03ae\u03c1\u03b5\u03c2 \u03b5\u03c5\u03c1\u03b5\u03c4\u03ae\u03c1\u03b9\u03bf \u03c3\u03b5 \u03bc\u03af\u03b1 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1", "General Index": "\u039a\u03b5\u03bd\u03c4\u03c1\u03b9\u03ba\u03cc \u0395\u03c5\u03c1\u03b5\u03c4\u03ae\u03c1\u03b9\u03bf\u03bf", "Global Module Index": "\u039a\u03b1\u03b8\u03bf\u03bb\u03b9\u03ba\u03cc \u0395\u03c5\u03c1\u03b5\u03c4\u03ae\u03c1\u03b9\u03bf \u039c\u03bf\u03bd\u03ac\u03b4\u03c9\u03bd", "Go": "\u03a0\u03ac\u03bc\u03b5", "Hide Search Matches": "\u0391\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7 \u0395\u03c5\u03c1\u03b5\u03b8\u03ad\u03bd\u03c4\u03c9\u03bd \u0391\u03bd\u03b1\u03b6\u03b7\u03c4\u03ae\u03c3\u03b5\u03c9\u03bd", "Index": "\u0395\u03c5\u03c1\u03b5\u03c4\u03ae\u03c1\u03b9\u03bf", "Index – %(key)s": "\u0395\u03c5\u03c1\u03b5\u03c4\u03ae\u03c1\u03b9\u03bf – %(key)s", "Index pages by letter": "\u03a3\u03b5\u03bb\u03af\u03b4\u03b5\u03c2 \u03b5\u03c5\u03c1\u03b5\u03c4\u03b7\u03c1\u03af\u03bf\u03c5 \u03b1\u03bd\u03ac \u03b3\u03c1\u03ac\u03bc\u03bc\u03b1", "Indices and tables:": "\u0395\u03c5\u03c1\u03b5\u03c4\u03ae\u03c1\u03b9\u03b1 \u03ba\u03b1\u03b9 \u03c0\u03af\u03bd\u03b1\u03ba\u03b5\u03c2:", "Last updated on %(last_updated)s.": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b1 \u03b5\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03c3\u03c4\u03b9\u03c2 %(last_updated)s.", "Library changes": "\u0391\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2 \u03b2\u03b9\u03b2\u03bb\u03b9\u03bf\u03b8\u03ae\u03ba\u03b7\u03c2", "Navigation": "\u03a0\u03bb\u03bf\u03ae\u03b3\u03b7\u03c3\u03b7", "Next topic": "\u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03b8\u03ad\u03bc\u03b1", "Other changes": "\u0386\u03bb\u03bb\u03b5\u03c2 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2", "Overview": "\u0395\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7", "Permalink to this definition": "\u039c\u03cc\u03bd\u03b9\u03bc\u03bf\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc\u03bd \u03c4\u03bf\u03bd \u03bf\u03c1\u03b9\u03c3\u03bc\u03cc", "Permalink to this headline": "\u039c\u03cc\u03bd\u03b9\u03bc\u03bf\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae\u03bd \u03c4\u03b7\u03bd \u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1", "Please activate JavaScript to enable the search\n functionality.": "\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce, \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03b7 JavaScript \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\n \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\u03c2.", "Preparing search...": "\u03a0\u03c1\u03bf\u03b5\u03c4\u03bf\u03b9\u03bc\u03b1\u03c3\u03af\u03b1 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\u03c2...", "Previous topic": "\u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03b8\u03ad\u03bc\u03b1", "Quick search": "\u03a3\u03cd\u03bd\u03c4\u03bf\u03bc\u03b7 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7", "Search": "\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7", "Search Page": "\u03a3\u03b5\u03bb\u03af\u03b4\u03b1 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\u03c2", "Search Results": "\u0391\u03c0\u03bf\u03c4\u03b5\u03bb\u03ad\u03c3\u03bc\u03b1\u03c4\u03b1 \u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\u03c2", "Search finished, found %s page(s) matching the search query.": "\u0397 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03bf\u03bb\u03bf\u03ba\u03bb\u03b7\u03c1\u03ce\u03b8\u03b7\u03ba\u03b5, \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5/\u03b1\u03bd %s \u03c3\u03b5\u03bb\u03af\u03b4\u03b1/\u03b5\u03c2 \u03bc\u03b5 \u03b2\u03ac\u03c3\u03b7 \u03c4\u03bf\u03c5\u03c2 \u03cc\u03c1\u03bf\u03c5\u03c2 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\u03c2.", "Search within %(docstitle)s": "\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03c3\u03c4\u03bf %(docstitle)s", "Searching": "\u0395\u03ba\u03c4\u03b5\u03bb\u03b5\u03af\u03c4\u03b1\u03b9 \u03b7 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7", "Show Source": "\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1", "Table Of Contents": "\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd", "This Page": "\u0391\u03c5\u03c4\u03ae \u03b7 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1", "Welcome! This is": "\u039a\u03b1\u03bb\u03c9\u03c3\u03ae\u03c1\u03b8\u03b1\u03c4\u03b5! \u0391\u03c5\u03c4\u03ae \u03b5\u03af\u03bd\u03b1\u03b9", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u0397 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03ae \u03c3\u03b1\u03c2 \u03b4\u03b5\u03bd \u03c4\u03b1\u03c5\u03c4\u03bf\u03c0\u03bf\u03b9\u03ae\u03b8\u03b7\u03ba\u03b5 \u03bc\u03b5 \u03ba\u03b1\u03bd\u03ad\u03bd\u03b1 \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce, \u03b5\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03b9\u03ce\u03c3\u03c4\u03b5 \u03cc\u03c4\u03b9 \u03cc\u03bb\u03b5\u03c2 \u03bf\u03b9 \u03bb\u03ad\u03be\u03b5\u03b9\u03c2 \u03ad\u03c7\u03bf\u03c5\u03bd \u03c4\u03b7 \u03c3\u03c9\u03c3\u03c4\u03ae \u03bf\u03c1\u03b8\u03bf\u03b3\u03c1\u03b1\u03c6\u03af\u03b1 \u03ba\u03b1\u03b9 \u03cc\u03c4\u03b9 \u03ad\u03c7\u03b5\u03c4\u03b5 \u03b5\u03c0\u03b9\u03bb\u03ad\u03be\u03b5\u03b9\u03c2 \u03b1\u03c1\u03ba\u03b5\u03c4\u03ad\u03c2 \u03ba\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b5\u03c2.", "all functions, classes, terms": "\u03cc\u03bb\u03b5\u03c2 \u03bf\u03b9 \u03c3\u03c5\u03bd\u03b1\u03c1\u03c4\u03ae\u03c3\u03b5\u03b9\u03c2, \u03ba\u03bb\u03ac\u03c3\u03b5\u03b9\u03c2, \u03cc\u03c1\u03bf\u03b9", "can be huge": "\u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03b5\u03c1\u03ac\u03c3\u03c4\u03b9\u03bf", "last updated": "\u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b1 \u03b5\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7", "lists all sections and subsections": "\u03b1\u03c0\u03b1\u03c1\u03b9\u03b8\u03bc\u03b5\u03af \u03cc\u03bb\u03b1 \u03c4\u03b1 \u03ba\u03b5\u03c6\u03ac\u03bb\u03b1\u03b9\u03b1 \u03ba\u03b1\u03b9 \u03c5\u03c0\u03bf\u03ba\u03b5\u03c6\u03ac\u03bb\u03b1\u03b9\u03b1", "next chapter": "\u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03ba\u03b5\u03c6\u03ac\u03bb\u03b1\u03b9\u03bf", "previous chapter": "\u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03ba\u03b5\u03c6\u03ac\u03bb\u03b1\u03b9\u03bf", "quick access to all modules": "\u03b3\u03c1\u03ae\u03b3\u03bf\u03c1\u03b7 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03b5 \u03cc\u03bb\u03b5\u03c2 \u03c4\u03b9\u03c2 \u03bc\u03bf\u03bd\u03ac\u03b4\u03b5\u03c2", "search": "\u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7", "search this documentation": "\u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03b1\u03c5\u03c4\u03ae\u03c2 \u03c4\u03b7\u03c2 \u03c4\u03b5\u03ba\u03bc\u03b7\u03c1\u03af\u03c9\u03c3\u03b7\u03c2", "the documentation for": "\u03b7 \u03c4\u03b5\u03ba\u03bc\u03b7\u03c1\u03af\u03c9\u03c3\u03b7 \u03c4\u03bf\u03c5"}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/el/LC_MESSAGES/sphinx.mo b/sphinx/locale/el/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000000..6045c5145fe Binary files /dev/null and b/sphinx/locale/el/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/el/LC_MESSAGES/sphinx.po b/sphinx/locale/el/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000000..79aef281617 --- /dev/null +++ b/sphinx/locale/el/LC_MESSAGES/sphinx.po @@ -0,0 +1,915 @@ +# Translations template for Sphinx. +# Copyright (C) 2016 ORGANIZATION +# This file is distributed under the same license as the Sphinx project. +# +# Translators: +# Stelios Vitalis <liberostelios@gmail.com>, 2015 +msgid "" +msgstr "" +"Project-Id-Version: Sphinx\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Greek (http://www.transifex.com/sphinx-doc/sphinx-1/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 +#, python-format +msgid "Fig. %s" +msgstr "Σχήμα %s" + +#: sphinx/config.py:111 +#, python-format +msgid "Table %s" +msgstr "Πίνακας %s" + +#: sphinx/config.py:112 +#, python-format +msgid "Listing %s" +msgstr "Λίστα %s" + +#: sphinx/roles.py:187 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" + +#: sphinx/builders/changes.py:75 +msgid "Builtins" +msgstr "Ενσωματωμένες λειτουργίες" + +#: sphinx/builders/changes.py:77 +msgid "Module level" +msgstr "Επίπεδο μονάδας λειτουργίας" + +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 +#, python-format +msgid "%b %d, %Y" +msgstr "" + +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "Κεντρικό Ευρετήριοο" + +#: sphinx/builders/html.py:315 +msgid "index" +msgstr "ευρετήριο" + +#: sphinx/builders/html.py:377 +msgid "next" +msgstr "επόμενο" + +#: sphinx/builders/html.py:386 +msgid "previous" +msgstr "προηγούμενο" + +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "Τεκμηρίωση του %s - %s" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 +msgid " (in " +msgstr " (σε " + +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 +msgid "Section author: " +msgstr "Συντάκτης τμήματος: " + +#: sphinx/directives/other.py:151 +msgid "Module author: " +msgstr "Συντάκτης μονάδας: " + +#: sphinx/directives/other.py:153 +msgid "Code author: " +msgstr "Συντάκτης κώδικα: " + +#: sphinx/directives/other.py:155 +msgid "Author: " +msgstr "Συντάκτης: " + +#: sphinx/domains/__init__.py:277 +#, python-format +msgid "%s %s" +msgstr "%s %s" + +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 +msgid "Parameters" +msgstr "Παράμετροι" + +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 +msgid "Returns" +msgstr "Επιστρέφει" + +#: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 +#: sphinx/domains/python.py:163 +msgid "Return type" +msgstr "Επιστρεφόμενος τύπος" + +#: sphinx/domains/c.py:177 +#, python-format +msgid "%s (C function)" +msgstr "%s (συνάρτηση C)" + +#: sphinx/domains/c.py:179 +#, python-format +msgid "%s (C member)" +msgstr "%s (μέλος C)" + +#: sphinx/domains/c.py:181 +#, python-format +msgid "%s (C macro)" +msgstr "%s (μακροεντολή C)" + +#: sphinx/domains/c.py:183 +#, python-format +msgid "%s (C type)" +msgstr "%s (τύπος C)" + +#: sphinx/domains/c.py:185 +#, python-format +msgid "%s (C variable)" +msgstr "%s (μεταβλητή C)" + +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 +msgid "function" +msgstr "συνάρτηση" + +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 +msgid "member" +msgstr "μέλος" + +#: sphinx/domains/c.py:244 +msgid "macro" +msgstr "μακροεντολή" + +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 +msgid "type" +msgstr "τύπος" + +#: sphinx/domains/c.py:246 +msgid "variable" +msgstr "μεταβλητή" + +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "Προκαλεί" + +#: sphinx/domains/cpp.py:4205 +#, python-format +msgid "%s (C++ type)" +msgstr "%s (τύπος C++)" + +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 +#, python-format +msgid "%s (C++ member)" +msgstr "%s (μέλος C++)" + +#: sphinx/domains/cpp.py:4238 +#, python-format +msgid "%s (C++ function)" +msgstr "%s (συνάρτηση C++)" + +#: sphinx/domains/cpp.py:4249 +#, python-format +msgid "%s (C++ class)" +msgstr "%s (κλάση C++)" + +#: sphinx/domains/cpp.py:4260 +#, python-format +msgid "%s (C++ enum)" +msgstr "%s (enum της C++)" + +#: sphinx/domains/cpp.py:4281 +#, python-format +msgid "%s (C++ enumerator)" +msgstr "%s (enumarator της C++)" + +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 +msgid "class" +msgstr "κλάση" + +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 +msgid "enum" +msgstr "enum" + +#: sphinx/domains/cpp.py:4423 +msgid "enumerator" +msgstr "enumerator" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 +#, python-format +msgid "%s() (built-in function)" +msgstr "%s() (ενσωματωμένη συνάρτηση)" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 +#, python-format +msgid "%s() (%s method)" +msgstr "%s() (μέθοδος της %s)" + +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (κλάση)" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "%s (καθολική μεταβλητή ή σταθερά)" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 +#, python-format +msgid "%s (%s attribute)" +msgstr "%s (ιδιότητα της %s)" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "Παράμετροι" + +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 +msgid "data" +msgstr "δεδομένα" + +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 +msgid "attribute" +msgstr "ιδιότητα" + +#: sphinx/domains/python.py:154 +msgid "Variables" +msgstr "Μεταβλητές" + +#: sphinx/domains/python.py:158 +msgid "Raises" +msgstr "Προκαλεί" + +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 +#, python-format +msgid "%s() (in module %s)" +msgstr "%s() (στη μονάδα %s)" + +#: sphinx/domains/python.py:311 +#, python-format +msgid "%s (built-in variable)" +msgstr "%s (ενσωματωμένη μεταβλητή)" + +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 +#, python-format +msgid "%s (in module %s)" +msgstr "%s (στη μονάδα %s)" + +#: sphinx/domains/python.py:328 +#, python-format +msgid "%s (built-in class)" +msgstr "%s (ενσωματωμένη κλάση)" + +#: sphinx/domains/python.py:329 +#, python-format +msgid "%s (class in %s)" +msgstr "%s (κλάση σε %s)" + +#: sphinx/domains/python.py:369 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "%s() (μέθοδος %s.%s)" + +#: sphinx/domains/python.py:381 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "%s() (στατική μέθοδος %s.%s)" + +#: sphinx/domains/python.py:384 +#, python-format +msgid "%s() (%s static method)" +msgstr "%s() (στατική μέθοδος της %s)" + +#: sphinx/domains/python.py:394 +#, python-format +msgid "%s() (%s.%s class method)" +msgstr "%s() (μέθοδος κλάσης %s.%s)" + +#: sphinx/domains/python.py:397 +#, python-format +msgid "%s() (%s class method)" +msgstr "%s() (μέθοδος κλάσης της %s)" + +#: sphinx/domains/python.py:407 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "%s (ιδιότητα της %s.%s)" + +#: sphinx/domains/python.py:488 +#, python-format +msgid "%s (module)" +msgstr "%s (μονάδα)" + +#: sphinx/domains/python.py:545 +msgid "Python Module Index" +msgstr "Ευρετήριο Μονάδων της Python" + +#: sphinx/domains/python.py:546 +msgid "modules" +msgstr "μονάδες" + +#: sphinx/domains/python.py:592 +msgid "Deprecated" +msgstr "Αποσύρθηκε" + +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 +msgid "exception" +msgstr "εξαίρεση" + +#: sphinx/domains/python.py:618 +msgid "method" +msgstr "μέθοδος" + +#: sphinx/domains/python.py:619 +msgid "class method" +msgstr "μέθοδος της κλάσης" + +#: sphinx/domains/python.py:620 +msgid "static method" +msgstr "στατική μέθοδος" + +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 +msgid "module" +msgstr "μονάδα" + +#: sphinx/domains/python.py:787 +msgid " (deprecated)" +msgstr " (αποσύρθηκε)" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "%s (οδηγία)" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "%s (ρόλος)" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "οδηγία" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "ρόλος" + +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 +#, python-format +msgid "environment variable; %s" +msgstr "μεταβλητή περιβάλλοντος; %s" + +#: sphinx/domains/std.py:186 +#, python-format +msgid "%scommand line option; %s" +msgstr "%sπαράμετρος γραμμής εντολών; %s" + +#: sphinx/domains/std.py:434 +msgid "glossary term" +msgstr "γλωσσάρι" + +#: sphinx/domains/std.py:435 +msgid "grammar token" +msgstr "γραμματική ένδειξη" + +#: sphinx/domains/std.py:436 +msgid "reference label" +msgstr "ετικέτα αναφοράς" + +#: sphinx/domains/std.py:438 +msgid "environment variable" +msgstr "μεταβλητή περιβάλλοντος" + +#: sphinx/domains/std.py:439 +msgid "program option" +msgstr "επιλογή προγράμματος" + +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 +msgid "Index" +msgstr "Ευρετήριο" + +#: sphinx/domains/std.py:474 +msgid "Module Index" +msgstr "Ευρετήριο μονάδων" + +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "Σελίδα αναζήτησης" + +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "δείτε %s" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "δείτε επίσης %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Σύμβολα" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 +#, python-format +msgid "alias of :class:`%s`" +msgstr "ψευδώνυμο της :κλάσης:`%s`" + +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 +#, python-format +msgid "[graph: %s]" +msgstr "[γράφημα: %s]" + +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 +msgid "[graph]" +msgstr "[γράφημα]" + +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 +#, python-format +msgid "(in %s v%s)" +msgstr "(στη %s έκδοση %s)" + +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 +msgid "[source]" +msgstr "[πηγή]" + +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 +msgid "Todo" +msgstr "Εκκρεμότητα" + +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 +#, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" + +#: sphinx/ext/todo.py:146 +msgid "original entry" +msgstr "αρχική εγγραφή" + +#: sphinx/ext/viewcode.py:166 +msgid "[docs]" +msgstr "[τεκμηρίωση]" + +#: sphinx/ext/viewcode.py:180 +msgid "Module code" +msgstr "Κώδικας μονάδας" + +#: sphinx/ext/viewcode.py:186 +#, python-format +msgid "<h1>Source code for %s</h1>" +msgstr "<h1>Πηγαίος κώδικας για το %s</h1>" + +#: sphinx/ext/viewcode.py:212 +msgid "Overview: module code" +msgstr "Επισκόπηση: κώδικας της μονάδας" + +#: sphinx/ext/viewcode.py:213 +msgid "<h1>All modules for which code is available</h1>" +msgstr "<h1>Όλες οι μονάδες για τις οποίες υπάρχει διαθέσιμος κώδικας</h1>" + +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 +msgid "Attention" +msgstr "Προσοχή" + +#: sphinx/locale/__init__.py:160 +msgid "Caution" +msgstr "Προσοχή" + +#: sphinx/locale/__init__.py:161 +msgid "Danger" +msgstr "Κίνδυνος" + +#: sphinx/locale/__init__.py:162 +msgid "Error" +msgstr "Σφάλμα" + +#: sphinx/locale/__init__.py:163 +msgid "Hint" +msgstr "Συμβουλή" + +#: sphinx/locale/__init__.py:164 +msgid "Important" +msgstr "Σημαντικό" + +#: sphinx/locale/__init__.py:165 +msgid "Note" +msgstr "Σημείωση" + +#: sphinx/locale/__init__.py:166 +msgid "See also" +msgstr "Δείτε επίσης" + +#: sphinx/locale/__init__.py:167 +msgid "Tip" +msgstr "Πρακτική συμβουλή" + +#: sphinx/locale/__init__.py:168 +msgid "Warning" +msgstr "Προειδοποίηση" + +#: sphinx/locale/__init__.py:172 +#, python-format +msgid "New in version %s" +msgstr "Νέο στην έκδοση %s" + +#: sphinx/locale/__init__.py:173 +#, python-format +msgid "Changed in version %s" +msgstr "Άλλαξε στην έκδοση %s" + +#: sphinx/locale/__init__.py:174 +#, python-format +msgid "Deprecated since version %s" +msgstr "Αποσύρθηκε στην έκδοση %s" + +#: sphinx/locale/__init__.py:180 +msgid "keyword" +msgstr "λέξη κλειδί" + +#: sphinx/locale/__init__.py:181 +msgid "operator" +msgstr "τελεστής" + +#: sphinx/locale/__init__.py:182 +msgid "object" +msgstr "αντικείμενο" + +#: sphinx/locale/__init__.py:184 +msgid "statement" +msgstr "δήλωση" + +#: sphinx/locale/__init__.py:185 +msgid "built-in function" +msgstr "ενσωματωμένη συνάρτηση" + +#: sphinx/themes/agogo/layout.html:46 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:11 sphinx/themes/scrolls/layout.html:35 +msgid "Table Of Contents" +msgstr "Πίνακας Περιεχομένων" + +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/searchresults.html:10 +msgid "Search" +msgstr "Αναζήτηση" + +#: sphinx/themes/agogo/layout.html:54 sphinx/themes/basic/searchbox.html:15 +msgid "Go" +msgstr "Πάμε" + +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 +msgid "Show Source" +msgstr "Προβολή κώδικα" + +#: sphinx/themes/basic/defindex.html:11 +msgid "Overview" +msgstr "Επισκόπηση" + +#: sphinx/themes/basic/defindex.html:15 +msgid "Welcome! This is" +msgstr "Καλωσήρθατε! Αυτή είναι" + +#: sphinx/themes/basic/defindex.html:16 +msgid "the documentation for" +msgstr "η τεκμηρίωση του" + +#: sphinx/themes/basic/defindex.html:17 +msgid "last updated" +msgstr "τελευταία ενημέρωση" + +#: sphinx/themes/basic/defindex.html:20 +msgid "Indices and tables:" +msgstr "Ευρετήρια και πίνακες:" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "Πλήρης Πίνακας Περιεχομένων" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "απαριθμεί όλα τα κεφάλαια και υποκεφάλαια" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "αναζήτηση αυτής της τεκμηρίωσης" + +#: sphinx/themes/basic/defindex.html:28 +msgid "Global Module Index" +msgstr "Καθολικό Ευρετήριο Μονάδων" + +#: sphinx/themes/basic/defindex.html:29 +msgid "quick access to all modules" +msgstr "γρήγορη πρόσβαση σε όλες τις μονάδες" + +#: sphinx/themes/basic/defindex.html:31 +msgid "all functions, classes, terms" +msgstr "όλες οι συναρτήσεις, κλάσεις, όροι" + +#: sphinx/themes/basic/genindex-single.html:33 +#, python-format +msgid "Index – %(key)s" +msgstr "Ευρετήριο – %(key)s" + +#: sphinx/themes/basic/genindex-single.html:61 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:72 +msgid "Full index on one page" +msgstr "Πλήρες ευρετήριο σε μία σελίδα" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "Σελίδες ευρετηρίου ανά γράμμα" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "μπορεί να είναι τεράστιο" + +#: sphinx/themes/basic/layout.html:29 +msgid "Navigation" +msgstr "Πλοήγηση" + +#: sphinx/themes/basic/layout.html:123 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "Αναζήτηση στο %(docstitle)s" + +#: sphinx/themes/basic/layout.html:132 +msgid "About these documents" +msgstr "Σχετικά με αυτά τα κείμενα" + +#: sphinx/themes/basic/layout.html:141 +msgid "Copyright" +msgstr "Copyright" + +#: sphinx/themes/basic/layout.html:186 +#, python-format +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:188 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:192 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Τελευταία ενημέρωση στις %(last_updated)s." + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "" +"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "Δημιουργήθηκε με το <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s." + +#: sphinx/themes/basic/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr "Αναζήτηση %(docstitle)s" + +#: sphinx/themes/basic/relations.html:11 +msgid "Previous topic" +msgstr "Προηγούμενο θέμα" + +#: sphinx/themes/basic/relations.html:13 +msgid "previous chapter" +msgstr "προηγούμενο κεφάλαιο" + +#: sphinx/themes/basic/relations.html:16 +msgid "Next topic" +msgstr "Επόμενο θέμα" + +#: sphinx/themes/basic/relations.html:18 +msgid "next chapter" +msgstr "επόμενο κεφάλαιο" + +#: sphinx/themes/basic/search.html:27 +msgid "" +"Please activate JavaScript to enable the search\n" +" functionality." +msgstr "Παρακαλώ, ενεργοποιήστε τη JavaScript για να είναι δυνατή η λειτουργία\n αναζήτησης." + +#: sphinx/themes/basic/search.html:32 +msgid "" +"From here you can search these documents. Enter your search\n" +" words into the box below and click \"search\". Note that the search\n" +" function will automatically search for all of the words. Pages\n" +" containing fewer words won't appear in the result list." +msgstr "Από εδώ μπορείτε να αναζητήσετε σε αυτά τα κείμενα. Εισάγετε τις λέξεις\n αναζήτησης στο παρακάτω πλαίσιο και πατήστε \"αναζήτηση\". Σημειώστε ότι η λειτουργία \n αναζήτησης θα αναζητήσει αυτόματα για όλες τις λέξεις. Σελίδες\n που περιέχουν λιγότερες λέξεις δε θα εμφανιστούν στη λίστα αποτελεσμάτων." + +#: sphinx/themes/basic/search.html:39 +#: sphinx/themes/basic/searchresults.html:17 +msgid "search" +msgstr "αναζήτηση" + +#: sphinx/themes/basic/search.html:43 +#: sphinx/themes/basic/searchresults.html:21 +#: sphinx/themes/basic/static/searchtools.js_t:287 +msgid "Search Results" +msgstr "Αποτελέσματα Αναζήτησης" + +#: sphinx/themes/basic/search.html:45 +#: sphinx/themes/basic/searchresults.html:23 +#: sphinx/themes/basic/static/searchtools.js_t:289 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "Η αναζήτησή σας δεν ταυτοποιήθηκε με κανένα κείμενο. Παρακαλώ, επιβεβαιώστε ότι όλες οι λέξεις έχουν τη σωστή ορθογραφία και ότι έχετε επιλέξεις αρκετές κατηγορίες." + +#: sphinx/themes/basic/searchbox.html:12 +msgid "Quick search" +msgstr "Σύντομη αναζήτηση" + +#: sphinx/themes/basic/sourcelink.html:12 +msgid "This Page" +msgstr "Αυτή η σελίδα" + +#: 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 "" + +#: sphinx/themes/basic/changes/rstsource.html:5 +#, python-format +msgid "%(filename)s — %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:17 +#, python-format +msgid "Automatically generated list of changes in version %(version)s" +msgstr "Αυτόματα παραγόμενη λίστα αλλαγών στην έκδοση %(version)s" + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "Αλλαγές βιβλιοθήκης" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "Αλλαγές στο API της C" + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "Άλλες αλλαγές" + +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 +msgid "Permalink to this headline" +msgstr "Μόνιμος σύνδεσμος σε αυτήν την κεφαλίδα" + +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 +msgid "Permalink to this definition" +msgstr "Μόνιμος σύνδεσμος σε αυτόν τον ορισμό" + +#: sphinx/themes/basic/static/doctools.js_t:208 +msgid "Hide Search Matches" +msgstr "Απόκρυψη Ευρεθέντων Αναζητήσεων" + +#: sphinx/themes/basic/static/searchtools.js_t:121 +msgid "Searching" +msgstr "Εκτελείται η αναζήτηση" + +#: sphinx/themes/basic/static/searchtools.js_t:126 +msgid "Preparing search..." +msgstr "Προετοιμασία αναζήτησης..." + +#: sphinx/themes/basic/static/searchtools.js_t:291 +#, python-format +msgid "Search finished, found %s page(s) matching the search query." +msgstr "Η αναζήτηση ολοκληρώθηκε, βρέθηκε/αν %s σελίδα/ες με βάση τους όρους αναζήτησης." + +#: sphinx/themes/basic/static/searchtools.js_t:344 +msgid ", in " +msgstr ", στο " + +#: sphinx/themes/classic/static/sidebar.js_t:83 +msgid "Expand sidebar" +msgstr "Άνοιγμα πλαϊνής μπάρας" + +#: sphinx/themes/classic/static/sidebar.js_t:96 +#: sphinx/themes/classic/static/sidebar.js_t:124 +msgid "Collapse sidebar" +msgstr "Κλείσιμο πλαϊνής μπάρας" + +#: sphinx/themes/haiku/layout.html:24 +msgid "Contents" +msgstr "Περιεχόμενα" + +#: sphinx/writers/html.py:389 +msgid "Permalink to this code" +msgstr "Απευθείας σύνδεσμος σε αυτόν τον κώδικα" + +#: sphinx/writers/html.py:393 +msgid "Permalink to this image" +msgstr "Απευθείας σύνδεσμος σε αυτήν την εικόνα" + +#: sphinx/writers/html.py:395 +msgid "Permalink to this toctree" +msgstr "Απευθείας σύνδεσμος σε αυτόν τον πίνακα περιεχομένων" + +#: sphinx/writers/html.py:717 +msgid "Permalink to this table" +msgstr "Απευθείας σύνδεσμος σε αυτόν τον πίνακα" + +#: sphinx/writers/latex.py:380 +msgid "Release" +msgstr "Δημοσίευση" + +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 +msgid "Footnotes" +msgstr "Σημειώσεις υποσέλιδου" + +#: sphinx/writers/latex.py:1112 +msgid "continued from previous page" +msgstr "συνεχίζεται από την προηγούμενη σελίδα" + +#: sphinx/writers/latex.py:1118 +msgid "Continued on next page" +msgstr "Συνεχίζεται στην επόμενη σελίδα" + +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 +#, python-format +msgid "[image: %s]" +msgstr "[εικόνα: %s]" + +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 +msgid "[image]" +msgstr "[εικόνα]" diff --git a/sphinx/locale/eo/LC_MESSAGES/sphinx.js b/sphinx/locale/eo/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000000..30f857ba00f --- /dev/null +++ b/sphinx/locale/eo/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "eo", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "", "Automatically generated list of changes in version %(version)s": "", "C API changes": "", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "", "Contents": "", "Copyright": "A\u016dtora rajto", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Full index on one page": "", "General Index": "Indico universala", "Global Module Index": "Universala modjulindico", "Go": "", "Hide Search Matches": "", "Index": "", "Index – %(key)s": "Indico – %(key)s", "Index pages by letter": "", "Indices and tables:": "", "Last updated on %(last_updated)s.": "", "Library changes": "", "Navigation": "", "Next topic": "Sekva temo", "Other changes": "", "Overview": "", "Permalink to this definition": "", "Permalink to this headline": "", "Please activate JavaScript to enable the search\n functionality.": "", "Preparing search...": "", "Previous topic": "Anta\u016da temo", "Quick search": "", "Search": "", "Search Page": "", "Search Results": "", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "", "Searching": "", "Show Source": "", "Table Of Contents": "", "This Page": "", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "", "can be huge": "", "last updated": "", "lists all sections and subsections": "", "next chapter": "sekvo \u0109apitro", "previous chapter": "anta\u016da \u0109apitro", "quick access to all modules": "", "search": "ser\u0109u", "search this documentation": "", "the documentation for": ""}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/eo/LC_MESSAGES/sphinx.mo b/sphinx/locale/eo/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000000..580c6289869 Binary files /dev/null and b/sphinx/locale/eo/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/eo/LC_MESSAGES/sphinx.po b/sphinx/locale/eo/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000000..b21efb7adc7 --- /dev/null +++ b/sphinx/locale/eo/LC_MESSAGES/sphinx.po @@ -0,0 +1,915 @@ +# Translations template for Sphinx. +# Copyright (C) 2016 ORGANIZATION +# This file is distributed under the same license as the Sphinx project. +# +# Translators: +# Dinu Gherman <gherman@darwin.in-berlin.de>, 2014 +msgid "" +msgstr "" +"Project-Id-Version: Sphinx\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Esperanto (http://www.transifex.com/sphinx-doc/sphinx-1/language/eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 +#, python-format +msgid "Fig. %s" +msgstr "" + +#: sphinx/config.py:111 +#, python-format +msgid "Table %s" +msgstr "" + +#: sphinx/config.py:112 +#, python-format +msgid "Listing %s" +msgstr "" + +#: sphinx/roles.py:187 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" + +#: sphinx/builders/changes.py:75 +msgid "Builtins" +msgstr "" + +#: sphinx/builders/changes.py:77 +msgid "Module level" +msgstr "" + +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 +#, python-format +msgid "%b %d, %Y" +msgstr "" + +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "Indico universala" + +#: sphinx/builders/html.py:315 +msgid "index" +msgstr "indico" + +#: sphinx/builders/html.py:377 +msgid "next" +msgstr "sekva" + +#: sphinx/builders/html.py:386 +msgid "previous" +msgstr "antaŭa" + +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s dokumentaro" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 +msgid " (in " +msgstr "" + +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 +msgid "Section author: " +msgstr "" + +#: sphinx/directives/other.py:151 +msgid "Module author: " +msgstr "" + +#: sphinx/directives/other.py:153 +msgid "Code author: " +msgstr "" + +#: sphinx/directives/other.py:155 +msgid "Author: " +msgstr "Aŭtoro:" + +#: sphinx/domains/__init__.py:277 +#, python-format +msgid "%s %s" +msgstr "%s %s" + +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 +msgid "Parameters" +msgstr "Parametroj" + +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 +msgid "Returns" +msgstr "" + +#: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 +#: sphinx/domains/python.py:163 +msgid "Return type" +msgstr "" + +#: sphinx/domains/c.py:177 +#, python-format +msgid "%s (C function)" +msgstr "" + +#: sphinx/domains/c.py:179 +#, python-format +msgid "%s (C member)" +msgstr "" + +#: sphinx/domains/c.py:181 +#, python-format +msgid "%s (C macro)" +msgstr "" + +#: sphinx/domains/c.py:183 +#, python-format +msgid "%s (C type)" +msgstr "" + +#: sphinx/domains/c.py:185 +#, python-format +msgid "%s (C variable)" +msgstr "" + +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 +msgid "function" +msgstr "funkcio" + +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 +msgid "member" +msgstr "membro" + +#: sphinx/domains/c.py:244 +msgid "macro" +msgstr "nomaĵo" + +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 +msgid "type" +msgstr "tipo" + +#: sphinx/domains/c.py:246 +msgid "variable" +msgstr "" + +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "" + +#: sphinx/domains/cpp.py:4205 +#, python-format +msgid "%s (C++ type)" +msgstr "" + +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 +#, python-format +msgid "%s (C++ member)" +msgstr "" + +#: sphinx/domains/cpp.py:4238 +#, python-format +msgid "%s (C++ function)" +msgstr "" + +#: sphinx/domains/cpp.py:4249 +#, python-format +msgid "%s (C++ class)" +msgstr "" + +#: sphinx/domains/cpp.py:4260 +#, python-format +msgid "%s (C++ enum)" +msgstr "" + +#: sphinx/domains/cpp.py:4281 +#, python-format +msgid "%s (C++ enumerator)" +msgstr "" + +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 +msgid "class" +msgstr "klaso" + +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 +msgid "enum" +msgstr "" + +#: sphinx/domains/cpp.py:4423 +msgid "enumerator" +msgstr "" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 +#, python-format +msgid "%s() (built-in function)" +msgstr "" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 +#, python-format +msgid "%s() (%s method)" +msgstr "" + +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (klaso)" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 +#, python-format +msgid "%s (%s attribute)" +msgstr "" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "" + +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 +msgid "data" +msgstr "datenoj" + +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 +msgid "attribute" +msgstr "atributo" + +#: sphinx/domains/python.py:154 +msgid "Variables" +msgstr "" + +#: sphinx/domains/python.py:158 +msgid "Raises" +msgstr "" + +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 +#, python-format +msgid "%s() (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:311 +#, python-format +msgid "%s (built-in variable)" +msgstr "" + +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 +#, python-format +msgid "%s (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:328 +#, python-format +msgid "%s (built-in class)" +msgstr "" + +#: sphinx/domains/python.py:329 +#, python-format +msgid "%s (class in %s)" +msgstr "" + +#: sphinx/domains/python.py:369 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "" + +#: sphinx/domains/python.py:381 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "" + +#: sphinx/domains/python.py:384 +#, python-format +msgid "%s() (%s static method)" +msgstr "" + +#: sphinx/domains/python.py:394 +#, python-format +msgid "%s() (%s.%s class method)" +msgstr "" + +#: sphinx/domains/python.py:397 +#, python-format +msgid "%s() (%s class method)" +msgstr "" + +#: sphinx/domains/python.py:407 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "" + +#: sphinx/domains/python.py:488 +#, python-format +msgid "%s (module)" +msgstr "" + +#: sphinx/domains/python.py:545 +msgid "Python Module Index" +msgstr "" + +#: sphinx/domains/python.py:546 +msgid "modules" +msgstr "" + +#: sphinx/domains/python.py:592 +msgid "Deprecated" +msgstr "" + +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 +msgid "exception" +msgstr "escepto" + +#: sphinx/domains/python.py:618 +msgid "method" +msgstr "" + +#: sphinx/domains/python.py:619 +msgid "class method" +msgstr "" + +#: sphinx/domains/python.py:620 +msgid "static method" +msgstr "" + +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 +msgid "module" +msgstr "" + +#: sphinx/domains/python.py:787 +msgid " (deprecated)" +msgstr "" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "" + +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 +#, python-format +msgid "environment variable; %s" +msgstr "" + +#: sphinx/domains/std.py:186 +#, python-format +msgid "%scommand line option; %s" +msgstr "" + +#: sphinx/domains/std.py:434 +msgid "glossary term" +msgstr "" + +#: sphinx/domains/std.py:435 +msgid "grammar token" +msgstr "" + +#: sphinx/domains/std.py:436 +msgid "reference label" +msgstr "" + +#: sphinx/domains/std.py:438 +msgid "environment variable" +msgstr "" + +#: sphinx/domains/std.py:439 +msgid "program option" +msgstr "" + +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 +msgid "Index" +msgstr "" + +#: sphinx/domains/std.py:474 +msgid "Module Index" +msgstr "" + +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "vidu %s" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "vidu ankaŭ %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Simboloj" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 +#, python-format +msgid "alias of :class:`%s`" +msgstr "" + +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 +#, python-format +msgid "[graph: %s]" +msgstr "" + +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 +msgid "[graph]" +msgstr "" + +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 +#, python-format +msgid "(in %s v%s)" +msgstr "" + +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 +msgid "[source]" +msgstr "" + +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 +msgid "Todo" +msgstr "" + +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 +#, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" + +#: sphinx/ext/todo.py:146 +msgid "original entry" +msgstr "" + +#: sphinx/ext/viewcode.py:166 +msgid "[docs]" +msgstr "" + +#: sphinx/ext/viewcode.py:180 +msgid "Module code" +msgstr "" + +#: sphinx/ext/viewcode.py:186 +#, python-format +msgid "<h1>Source code for %s</h1>" +msgstr "" + +#: sphinx/ext/viewcode.py:212 +msgid "Overview: module code" +msgstr "" + +#: sphinx/ext/viewcode.py:213 +msgid "<h1>All modules for which code is available</h1>" +msgstr "" + +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 +msgid "Attention" +msgstr "" + +#: sphinx/locale/__init__.py:160 +msgid "Caution" +msgstr "" + +#: sphinx/locale/__init__.py:161 +msgid "Danger" +msgstr "" + +#: sphinx/locale/__init__.py:162 +msgid "Error" +msgstr "Eraro" + +#: sphinx/locale/__init__.py:163 +msgid "Hint" +msgstr "" + +#: sphinx/locale/__init__.py:164 +msgid "Important" +msgstr "" + +#: sphinx/locale/__init__.py:165 +msgid "Note" +msgstr "" + +#: sphinx/locale/__init__.py:166 +msgid "See also" +msgstr "" + +#: sphinx/locale/__init__.py:167 +msgid "Tip" +msgstr "" + +#: sphinx/locale/__init__.py:168 +msgid "Warning" +msgstr "" + +#: sphinx/locale/__init__.py:172 +#, python-format +msgid "New in version %s" +msgstr "" + +#: sphinx/locale/__init__.py:173 +#, python-format +msgid "Changed in version %s" +msgstr "" + +#: sphinx/locale/__init__.py:174 +#, python-format +msgid "Deprecated since version %s" +msgstr "" + +#: sphinx/locale/__init__.py:180 +msgid "keyword" +msgstr "" + +#: sphinx/locale/__init__.py:181 +msgid "operator" +msgstr "" + +#: sphinx/locale/__init__.py:182 +msgid "object" +msgstr "" + +#: sphinx/locale/__init__.py:184 +msgid "statement" +msgstr "" + +#: sphinx/locale/__init__.py:185 +msgid "built-in function" +msgstr "" + +#: sphinx/themes/agogo/layout.html:46 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:11 sphinx/themes/scrolls/layout.html:35 +msgid "Table Of Contents" +msgstr "" + +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/searchresults.html:10 +msgid "Search" +msgstr "" + +#: sphinx/themes/agogo/layout.html:54 sphinx/themes/basic/searchbox.html:15 +msgid "Go" +msgstr "" + +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 +msgid "Show Source" +msgstr "" + +#: sphinx/themes/basic/defindex.html:11 +msgid "Overview" +msgstr "" + +#: sphinx/themes/basic/defindex.html:15 +msgid "Welcome! This is" +msgstr "" + +#: sphinx/themes/basic/defindex.html:16 +msgid "the documentation for" +msgstr "" + +#: sphinx/themes/basic/defindex.html:17 +msgid "last updated" +msgstr "" + +#: sphinx/themes/basic/defindex.html:20 +msgid "Indices and tables:" +msgstr "" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "" + +#: sphinx/themes/basic/defindex.html:28 +msgid "Global Module Index" +msgstr "Universala modjulindico" + +#: sphinx/themes/basic/defindex.html:29 +msgid "quick access to all modules" +msgstr "" + +#: sphinx/themes/basic/defindex.html:31 +msgid "all functions, classes, terms" +msgstr "" + +#: sphinx/themes/basic/genindex-single.html:33 +#, python-format +msgid "Index – %(key)s" +msgstr "Indico – %(key)s" + +#: sphinx/themes/basic/genindex-single.html:61 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:72 +msgid "Full index on one page" +msgstr "" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "" + +#: sphinx/themes/basic/layout.html:29 +msgid "Navigation" +msgstr "" + +#: sphinx/themes/basic/layout.html:123 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/layout.html:132 +msgid "About these documents" +msgstr "" + +#: sphinx/themes/basic/layout.html:141 +msgid "Copyright" +msgstr "Aŭtora rajto" + +#: sphinx/themes/basic/layout.html:186 +#, python-format +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:188 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:192 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "" +"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "" + +#: sphinx/themes/basic/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/relations.html:11 +msgid "Previous topic" +msgstr "Antaŭa temo" + +#: sphinx/themes/basic/relations.html:13 +msgid "previous chapter" +msgstr "antaŭa ĉapitro" + +#: sphinx/themes/basic/relations.html:16 +msgid "Next topic" +msgstr "Sekva temo" + +#: sphinx/themes/basic/relations.html:18 +msgid "next chapter" +msgstr "sekvo ĉapitro" + +#: sphinx/themes/basic/search.html:27 +msgid "" +"Please activate JavaScript to enable the search\n" +" functionality." +msgstr "" + +#: sphinx/themes/basic/search.html:32 +msgid "" +"From here you can search these documents. Enter your search\n" +" words into the box below and click \"search\". Note that the search\n" +" 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:39 +#: sphinx/themes/basic/searchresults.html:17 +msgid "search" +msgstr "serĉu" + +#: sphinx/themes/basic/search.html:43 +#: sphinx/themes/basic/searchresults.html:21 +#: sphinx/themes/basic/static/searchtools.js_t:287 +msgid "Search Results" +msgstr "" + +#: sphinx/themes/basic/search.html:45 +#: sphinx/themes/basic/searchresults.html:23 +#: sphinx/themes/basic/static/searchtools.js_t:289 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" + +#: sphinx/themes/basic/searchbox.html:12 +msgid "Quick search" +msgstr "" + +#: sphinx/themes/basic/sourcelink.html:12 +msgid "This Page" +msgstr "" + +#: 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 "" + +#: sphinx/themes/basic/changes/rstsource.html:5 +#, python-format +msgid "%(filename)s — %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:17 +#, python-format +msgid "Automatically generated list of changes in version %(version)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 +msgid "Permalink to this headline" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 +msgid "Permalink to this definition" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:208 +msgid "Hide Search Matches" +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:121 +msgid "Searching" +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:126 +msgid "Preparing search..." +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:291 +#, python-format +msgid "Search finished, found %s page(s) matching the search query." +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:344 +msgid ", in " +msgstr "" + +#: sphinx/themes/classic/static/sidebar.js_t:83 +msgid "Expand sidebar" +msgstr "" + +#: sphinx/themes/classic/static/sidebar.js_t:96 +#: sphinx/themes/classic/static/sidebar.js_t:124 +msgid "Collapse sidebar" +msgstr "" + +#: sphinx/themes/haiku/layout.html:24 +msgid "Contents" +msgstr "" + +#: sphinx/writers/html.py:389 +msgid "Permalink to this code" +msgstr "" + +#: sphinx/writers/html.py:393 +msgid "Permalink to this image" +msgstr "" + +#: sphinx/writers/html.py:395 +msgid "Permalink to this toctree" +msgstr "" + +#: sphinx/writers/html.py:717 +msgid "Permalink to this table" +msgstr "" + +#: sphinx/writers/latex.py:380 +msgid "Release" +msgstr "" + +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 +msgid "Footnotes" +msgstr "" + +#: sphinx/writers/latex.py:1112 +msgid "continued from previous page" +msgstr "" + +#: sphinx/writers/latex.py:1118 +msgid "Continued on next page" +msgstr "" + +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 +#, python-format +msgid "[image: %s]" +msgstr "" + +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 +msgid "[image]" +msgstr "" diff --git a/sphinx/locale/es/LC_MESSAGES/sphinx.js b/sphinx/locale/es/LC_MESSAGES/sphinx.js index cd09807c1b3..31f16923ef6 100644 --- a/sphinx/locale/es/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/es/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "es", "plural_expr": "(n != 1)", "messages": {"Next topic": "Pr\u00f3ximo tema", "Index": "\u00cdndice", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "\u00a1Bienvenido! Este es", "Copyright": "Copyright", "C API changes": "Cambios en la API C", "quick access to all modules": "acceso r\u00e1pido a todos los m\u00f3dulos", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "\u00cdndice Global de M\u00f3dulos", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Su b\u00fasqueda no coincide con ning\u00fan documentos. Por favor, aseg\u00farese de que todas las palabras est\u00e9n correctamente escritas y que usted all\u00e1 seleccionado las suficientes categor\u00edas.", "Index – %(key)s": "\u00cdndice – %(key)s", "General Index": "\u00cdndice General", "next chapter": "pr\u00f3ximo cap\u00edtulo", "Search finished, found %s page(s) matching the search query.": "B\u00fasqueda finalizada, encontr\u00f3 %s p\u00e1gina(s) acorde con la consulta de b\u00fasqueda.", "previous chapter": "cap\u00edtulo anterior", "Permalink to this headline": "Enlazar permanentemente con este t\u00edtulo", "About these documents": "Sobre este documento", "Preparing search...": "Preparando b\u00fasqueda...", ", in ": ", en ", "Navigation": "Navegaci\u00f3n", "Expand sidebar": "Expandir barra lateral", "the documentation for": "la documentaci\u00f3n para", "Complete Table of Contents": "\u00cdndice de contenidos completo", "Contents": "Contenidos", "can be huge": "puede ser muy grande", "Changes in Version %(version)s — %(docstitle)s": "Cambios en la versi\u00f3n %(version)s — %(docstitle)s", "Other changes": "Otros cambios", "Hide Search Matches": "Ocultar coincidencias de la b\u00fasqueda", "Quick search": "B\u00fasqueda r\u00e1pida", "Show Source": "Mostrar el c\u00f3digo", "Search": "B\u00fasqueda", "This Page": "Esta p\u00e1gina", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Este es el di\u00e1logo de b\u00fasqueda. Introduce los t\u00e9rminos en el\n di\u00e1logo siguiente y pulsa \"buscar\". Note que el asistente buscar\u00e1 \n autom\u00e1ticamente todas las palabras. Las p\u00e1ginas que contengan \n menos palabras no aparecer\u00e1n en la lista de resultados.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Creado con <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "actualizado por \u00faltima vez el", "Collapse sidebar": "Contraer barra lateral", "Go": "Ir a", "Table Of Contents": "Tabla de Contenidos", "Search within %(docstitle)s": "Buscar en %(docstitle)s", "all functions, classes, terms": "todas las funciones, clases, t\u00e9rminos", "Please activate JavaScript to enable the search\n functionality.": "Por favor, active JavaScript para habilitar la funcionalidad\n de b\u00fasqueda.", "Indices and tables:": "\u00cdndices y tablas:", "lists all sections and subsections": "muestra todas las secciones y subsecciones", "Index pages by letter": "\u00cdndice alfab\u00e9tico de p\u00e1ginas", "search": "buscar", "Permalink to this definition": "Enlazar permanentemente con esta definici\u00f3n", "Previous topic": "Tema anterior", "Overview": "Resumen", "Last updated on %(last_updated)s.": "Actualizado por \u00faltima vez en %(last_updated)s.", "Searching": "Buscando", "search this documentation": "buscar en esta documentaci\u00f3n", "Automatically generated list of changes in version %(version)s": "Lista de cambios generada autom\u00e1ticamente en la versi\u00f3n %(version)s", "Full index on one page": "\u00cdndice completo en una p\u00e1gina", "Enter search terms or a module, class or function name.": "Introduzca los t\u00e9rminos de b\u00fasqueda o un nombre de m\u00f3dulo, clase o funci\u00f3n.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\\\"%(path)s\\\">Copyright</a> %(copyright)s.", "Library changes": "Cambios en la biblioteca", "Search Page": "P\u00e1gina de B\u00fasqueda", "Search Results": "Resultados de la b\u00fasqueda"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "es", "messages": {"%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Derechos de autor</a> %(copyright)s.", "© Copyright %(copyright)s.": "© Derechos de autor %(copyright)s.", ", in ": ", en ", "About these documents": "Sobre este documento", "Automatically generated list of changes in version %(version)s": "Lista de cambios generada autom\u00e1ticamente en la versi\u00f3n %(version)s", "C API changes": "Cambios en la API C", "Changes in Version %(version)s — %(docstitle)s": "Cambios en la versi\u00f3n %(version)s — %(docstitle)s", "Collapse sidebar": "Contraer barra lateral", "Complete Table of Contents": "\u00cdndice de contenidos completo", "Contents": "Contenidos", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Creado con <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "Expandir barra lateral", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Este es el di\u00e1logo de b\u00fasqueda. Introduce los t\u00e9rminos en el\n di\u00e1logo siguiente y pulsa \"buscar\". Note que el asistente buscar\u00e1 \n autom\u00e1ticamente todas las palabras. Las p\u00e1ginas que contengan \n menos palabras no aparecer\u00e1n en la lista de resultados.", "Full index on one page": "\u00cdndice completo en una p\u00e1gina", "General Index": "\u00cdndice General", "Global Module Index": "\u00cdndice Global de M\u00f3dulos", "Go": "Ir a", "Hide Search Matches": "Ocultar coincidencias de la b\u00fasqueda", "Index": "\u00cdndice", "Index – %(key)s": "\u00cdndice – %(key)s", "Index pages by letter": "\u00cdndice alfab\u00e9tico de p\u00e1ginas", "Indices and tables:": "\u00cdndices y tablas:", "Last updated on %(last_updated)s.": "Actualizado por \u00faltima vez en %(last_updated)s.", "Library changes": "Cambios en la biblioteca", "Navigation": "Navegaci\u00f3n", "Next topic": "Pr\u00f3ximo tema", "Other changes": "Otros cambios", "Overview": "Resumen", "Permalink to this definition": "Enlazar permanentemente con esta definici\u00f3n", "Permalink to this headline": "Enlazar permanentemente con este t\u00edtulo", "Please activate JavaScript to enable the search\n functionality.": "Por favor, active JavaScript para habilitar la funcionalidad\n de b\u00fasqueda.", "Preparing search...": "Preparando b\u00fasqueda...", "Previous topic": "Tema anterior", "Quick search": "B\u00fasqueda r\u00e1pida", "Search": "B\u00fasqueda", "Search Page": "P\u00e1gina de B\u00fasqueda", "Search Results": "Resultados de la b\u00fasqueda", "Search finished, found %s page(s) matching the search query.": "B\u00fasqueda finalizada, encontr\u00f3 %s p\u00e1gina(s) acorde con la consulta de b\u00fasqueda.", "Search within %(docstitle)s": "Buscar en %(docstitle)s", "Searching": "Buscando", "Show Source": "Mostrar el c\u00f3digo", "Table Of Contents": "Tabla de Contenidos", "This Page": "Esta p\u00e1gina", "Welcome! This is": "\u00a1Bienvenido! Este es", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Su b\u00fasqueda no coincide con ning\u00fan documentos. Por favor, aseg\u00farese de que todas las palabras est\u00e9n correctamente escritas y que usted all\u00e1 seleccionado las suficientes categor\u00edas.", "all functions, classes, terms": "todas las funciones, clases, t\u00e9rminos", "can be huge": "puede ser muy grande", "last updated": "actualizado por \u00faltima vez el", "lists all sections and subsections": "muestra todas las secciones y subsecciones", "next chapter": "pr\u00f3ximo cap\u00edtulo", "previous chapter": "cap\u00edtulo anterior", "quick access to all modules": "acceso r\u00e1pido a todos los m\u00f3dulos", "search": "buscar", "search this documentation": "buscar en esta documentaci\u00f3n", "the documentation for": "la documentaci\u00f3n para"}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/es/LC_MESSAGES/sphinx.mo b/sphinx/locale/es/LC_MESSAGES/sphinx.mo index 2477569aff2..25695ace2f5 100644 Binary files a/sphinx/locale/es/LC_MESSAGES/sphinx.mo and b/sphinx/locale/es/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/es/LC_MESSAGES/sphinx.po b/sphinx/locale/es/LC_MESSAGES/sphinx.po index d553d5b8d00..5a299a8135e 100644 --- a/sphinx/locale/es/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/es/LC_MESSAGES/sphinx.po @@ -1,70 +1,51 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: # Guillem Borrell <guillem@torroja.dmt.upm.es>, 2011 -# Leonardo J. Caballero G. <leonardocaballero@gmail.com>, 2013-2015 +# Leonardo J. Caballero G. <leonardocaballero@gmail.com>, 2013-2016 +# Takeshi KOMIYA <i.tkomiya@gmail.com>, 2016 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/sphinx-1/language/es/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-12-03 05:17+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Spanish (http://www.transifex.com/sphinx-doc/sphinx-1/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "Sección %s" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "Figura %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "Tabla %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "Lista %s" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "documentación de %s - %s" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "ver %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "ver también %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Símbolos" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d de %B de %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Funciones incorporadas" @@ -73,64 +54,76 @@ msgstr "Funciones incorporadas" msgid "Module level" msgstr "Nivel de módulo" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" msgstr "%d de %B de %Y" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Índice General" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "índice" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "siguiente" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "anterior" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "documentación de %s - %s" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (en " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "Subtítulo inválido: %s" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Autor de la sección: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Autor del módulo: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Código del autor: " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Autor: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parámetros" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Devuelve" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Tipo del valor devuelto" @@ -159,12 +152,12 @@ msgstr "%s (tipo C)" msgid "%s (C variable)" msgstr "%s (variable C)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "función" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "miembro" @@ -172,7 +165,7 @@ msgstr "miembro" msgid "macro" msgstr "macro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "tipo" @@ -180,59 +173,72 @@ msgstr "tipo" msgid "variable" msgstr "variable" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "Parametros de Plantilla" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Lanzamientos" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (tipo C++)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "%s (concepto C++)" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (miembro C++)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (función C++)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (clase C++)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "%s (enum de C++)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "%s (enumeración de C++)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "clase" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "concepto" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "enum" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "enumeración" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (función incorporada)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (método de %s)" @@ -247,7 +253,7 @@ msgstr "%s() (clase)" msgid "%s (global variable or constant)" msgstr "%s (variable global o constante)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (atributo de %s)" @@ -256,116 +262,116 @@ msgstr "%s (atributo de %s)" msgid "Arguments" msgstr "Argumentos" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "dato" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "atributo" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Variables" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Muestra" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (en el módulo %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (variable incorporada)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (en el módulo %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (clase incorporada)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (clase en %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (método de %s.%s)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (método estático de %s.%s)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (método estático de %s)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (método de clase de %s.%s)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (método de clase de %s)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (atributo de %s.%s)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (módulo)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Índice de Módulos Python" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "módulos" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Obsoleto" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "excepción" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "método" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "método de la clase" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "método estático" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "módulo" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (obsoleto)" @@ -387,188 +393,219 @@ msgstr "directiva" msgid "role" msgstr "rol" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "variables de entorno; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%sopción en línea de comandos; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "termino de glosario" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "gramática simbólica" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "etiqueta de referencia" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "variables de entorno" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "opción de programa" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Índice" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Índice de Módulos" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Página de Búsqueda" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr " Clases base: %s" +msgid "see %s" +msgstr "ver %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "ver también %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Símbolos" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "Bases: %s" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "alias de :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[gráfica: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[gráfica]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "Enlace permanente a esta ecuación" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(en %s versión %s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[fuente]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "etiqueta duplicada de la ecuación %s, otra instancia en %s" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Por hacer" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<entrada original>>" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(El <<entrada original>> se encuentra en %s, en la línea %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(La <<entrada original>> se encuentra en %s, línea %d.)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "entrada original" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[documentos]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Código de módulo" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Código fuente para %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Resumen: código de modulo" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Todos los módulos para los cuales disponen código</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "Argumentos de palabras clave" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Atención" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Prudencia" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Peligro" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Error" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Consejo" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Importante" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Nota" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Ver también" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Truco" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Advertencia" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Nuevo en la versión %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Distinto en la versión %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Obsoleto desde la versión %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "palabra clave" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operador" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objeto" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "sentencia" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "función incorporada" @@ -577,7 +614,7 @@ msgstr "función incorporada" msgid "Table Of Contents" msgstr "Tabla de Contenidos" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -587,11 +624,7 @@ msgstr "Búsqueda" msgid "Go" msgstr "Ir a" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Introduzca los términos de búsqueda o un nombre de módulo, clase o función." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Mostrar el código" @@ -639,15 +672,15 @@ msgstr "acceso rápido a todos los módulos" msgid "all functions, classes, terms" msgstr "todas las funciones, clases, términos" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Índice – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Índice completo en una página" @@ -663,35 +696,35 @@ msgstr "puede ser muy grande" msgid "Navigation" msgstr "Navegación" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Buscar en %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Sobre este documento" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\\\"%(path)s\\\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "© <a href=\"%(path)s\">Derechos de autor</a> %(copyright)s." -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "© Derechos de autor %(copyright)s." -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Actualizado por última vez en %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -740,13 +773,13 @@ msgstr "buscar" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Resultados de la búsqueda" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -763,13 +796,13 @@ msgstr "Esta página" #: 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 "Cambios en la versión %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "Cambios en la versión %(version)s — %(docstitle)s" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "%(filename)s — %(docstitle)s" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -788,33 +821,34 @@ msgstr "Cambios en la API C" msgid "Other changes" msgstr "Otros cambios" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Enlazar permanentemente con este título" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Enlazar permanentemente con esta definición" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Ocultar coincidencias de la búsqueda" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "Buscando" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "Preparando búsqueda..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Búsqueda finalizada, encontró %s página(s) acorde con la consulta de búsqueda." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr ", en " @@ -831,44 +865,53 @@ msgstr "Contraer barra lateral" msgid "Contents" msgstr "Contenidos" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "Enlace permanente a este código fuente" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "Enlace permanente a esta imagen" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" -msgstr "" +msgstr "Enlace permanente a la tabla de contenidos" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "Enlace permanente a esta tabla" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" -msgstr "Publicación" +msgstr "Versión" + +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "página" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "Clave de configuración desconocida: latex_elements[%r] se ignoran." -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Notas a pie de página" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "proviene de la página anterior" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Continúa en la página siguiente" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[imagen: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[imagen]" diff --git a/sphinx/locale/et/LC_MESSAGES/sphinx.js b/sphinx/locale/et/LC_MESSAGES/sphinx.js index f179d045a5b..fb677939f65 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": {"Next topic": "J\u00e4rgmine teema", "Index": "Indeks", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "Tervitused! See on", "Copyright": "Autori\u00f5igus", "C API changes": "C API muutused", "quick access to all modules": "kiire ligip\u00e4\u00e4s k\u00f5igile moodulitele", "© Copyright %(copyright)s.": "© Autori\u00f5igused %(copyright)s.", "Global Module Index": "Globaalne moodulite indeks", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Sinu otsingule ei vastanud \u00fckski dokument. Palun veendu, et k\u00f5ik sisestatud s\u00f5nad on \u00f5igesti kirjutatud ja sa oled valikud piisaval hulgal kategooriaid.", "Index – %(key)s": "Indeks – %(key)s", "General Index": "\u00dcldindeks", "next chapter": "j\u00e4rgmine jaotis", "Search finished, found %s page(s) matching the search query.": "Otsingu tulemusena leiti %s leht(e).", "previous chapter": "eelmine jaotis", "Permalink to this headline": "P\u00fcsiviit sellele pealkirjale", "About these documents": "Info selle dokumentatsiooni kohta", "Preparing search...": "Otsingu ettevalmistamine...", ", in ": "", "Navigation": "Navigatsioon", "Expand sidebar": "N\u00e4ita k\u00fclgriba", "the documentation for": "dokumentatsioon projektile", "Complete Table of Contents": "T\u00e4ielik sisukord", "Contents": "Sisukord", "can be huge": "v\u00f5ib olla v\u00e4ga suur", "Changes in Version %(version)s — %(docstitle)s": "Muutused versioonis %(version)s — %(docstitle)s", "Other changes": "\u00dclej\u00e4\u00e4nud muutused", "Hide Search Matches": "Varja otsingu tulemused", "Quick search": "Kiirotsing", "Show Source": "N\u00e4ita l\u00e4htekoodi", "Search": "Otsing", "This Page": "K\u00e4esolev leht", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Selle vormi abil saab otsida k\u00e4esolevast dokumentatsioonist. Sisesta allolevasse lahtrisse otsis\u00f5nad ning kl\u00f5psa \"Otsi\". Tasub t\u00e4hele panna, et otsingu tulemuses kuvatakse k\u00f5iki otsis\u00f5nasid sisaldavaid lehti.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Loodud <a href=\"http://sphinx-doc.org/\">Sphinxiga</a> (versioon: %(sphinx_version)s).", "last updated": "viimati uuendatud", "Collapse sidebar": "Varja k\u00fclgriba", "Go": "Otsi", "Table Of Contents": "Sisukord", "Search within %(docstitle)s": "Otsi %(docstitle)s piires", "all functions, classes, terms": "k\u00f5ik funktsioonid, klassid ja terminid", "Please activate JavaScript to enable the search\n functionality.": "Otsingu v\u00f5imaldamiseks tuleb aktiveerida JavaScript.", "Indices and tables:": "Indeksid ja tabelid", "lists all sections and subsections": "toob v\u00e4lja k\u00f5ik sektsioonid ja alamsektsioonid", "Index pages by letter": "Indeksi lehek\u00fcljed algust\u00e4he kaupa", "search": "otsi", "Permalink to this definition": "P\u00fcsiviit sellele definitsioonile", "Previous topic": "Eelmine teema", "Overview": "\u00dclevaade", "Last updated on %(last_updated)s.": "Viimati uuendatud %(last_updated)s.", "Searching": "Otsimine", "search this documentation": "otsi sellest dokumentatsioonist", "Automatically generated list of changes in version %(version)s": "Automaatselt genereeritud nimekiri versiooni %(version)s muutustest", "Full index on one page": "T\u00e4isindeks \u00fchel lehel", "Enter search terms or a module, class or function name.": "Sisesta otsingus\u00f5na v\u00f5i mooduli/klassi/funktsiooni nimi.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Autori\u00f5igus</a> %(copyright)s.", "Library changes": "Teegi muutused", "Search Page": "Otsinguleht", "Search Results": "Otsingu tulemused"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "et", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "Info selle dokumentatsiooni kohta", "Automatically generated list of changes in version %(version)s": "Automaatselt genereeritud nimekiri versiooni %(version)s muutustest", "C API changes": "C API muutused", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "Varja k\u00fclgriba", "Complete Table of Contents": "T\u00e4ielik sisukord", "Contents": "Sisukord", "Copyright": "Autori\u00f5igus", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Loodud <a href=\"http://sphinx-doc.org/\">Sphinxiga</a> (versioon: %(sphinx_version)s).", "Expand sidebar": "N\u00e4ita k\u00fclgriba", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Selle vormi abil saab otsida k\u00e4esolevast dokumentatsioonist. Sisesta allolevasse lahtrisse otsis\u00f5nad ning kl\u00f5psa \"Otsi\". Tasub t\u00e4hele panna, et otsingu tulemuses kuvatakse k\u00f5iki otsis\u00f5nasid sisaldavaid lehti.", "Full index on one page": "T\u00e4isindeks \u00fchel lehel", "General Index": "\u00dcldindeks", "Global Module Index": "Globaalne moodulite indeks", "Go": "Otsi", "Hide Search Matches": "Varja otsingu tulemused", "Index": "Indeks", "Index – %(key)s": "Indeks – %(key)s", "Index pages by letter": "Indeksi lehek\u00fcljed algust\u00e4he kaupa", "Indices and tables:": "Indeksid ja tabelid", "Last updated on %(last_updated)s.": "Viimati uuendatud %(last_updated)s.", "Library changes": "Teegi muutused", "Navigation": "Navigatsioon", "Next topic": "J\u00e4rgmine teema", "Other changes": "\u00dclej\u00e4\u00e4nud muutused", "Overview": "\u00dclevaade", "Permalink to this definition": "P\u00fcsiviit sellele definitsioonile", "Permalink to this headline": "P\u00fcsiviit sellele pealkirjale", "Please activate JavaScript to enable the search\n functionality.": "Otsingu v\u00f5imaldamiseks tuleb aktiveerida JavaScript.", "Preparing search...": "Otsingu ettevalmistamine...", "Previous topic": "Eelmine teema", "Quick search": "Kiirotsing", "Search": "Otsing", "Search Page": "Otsinguleht", "Search Results": "Otsingu tulemused", "Search finished, found %s page(s) matching the search query.": "Otsingu tulemusena leiti %s leht(e).", "Search within %(docstitle)s": "Otsi %(docstitle)s piires", "Searching": "Otsimine", "Show Source": "N\u00e4ita l\u00e4htekoodi", "Table Of Contents": "Sisukord", "This Page": "K\u00e4esolev leht", "Welcome! This is": "Tervitused! See on", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Sinu otsingule ei vastanud \u00fckski dokument. Palun veendu, et k\u00f5ik sisestatud s\u00f5nad on \u00f5igesti kirjutatud ja sa oled valikud piisaval hulgal kategooriaid.", "all functions, classes, terms": "k\u00f5ik funktsioonid, klassid ja terminid", "can be huge": "v\u00f5ib olla v\u00e4ga suur", "last updated": "viimati uuendatud", "lists all sections and subsections": "toob v\u00e4lja k\u00f5ik sektsioonid ja alamsektsioonid", "next chapter": "j\u00e4rgmine jaotis", "previous chapter": "eelmine jaotis", "quick access to all modules": "kiire ligip\u00e4\u00e4s k\u00f5igile moodulitele", "search": "otsi", "search this documentation": "otsi sellest dokumentatsioonist", "the documentation for": "dokumentatsioon projektile"}, "plural_expr": "(n != 1)"}); \ 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 941e7315dd7..a51fd68728d 100644 Binary files a/sphinx/locale/et/LC_MESSAGES/sphinx.mo and b/sphinx/locale/et/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/et/LC_MESSAGES/sphinx.po b/sphinx/locale/et/LC_MESSAGES/sphinx.po index 1f530be1a2b..80805048631 100644 --- a/sphinx/locale/et/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/et/LC_MESSAGES/sphinx.po @@ -1,72 +1,52 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: # Aivar Annamaa <aivar.annamaa@gmail.com>, 2011 # Ivar Smolin <okul at linux ee>, 2012 -# Ivar Smolin <okul@linux.ee>, 2013-2015 +# Ivar Smolin <okul@linux.ee>, 2013-2016 # Luc Saffre <luc.saffre@gmail.com>, 2015 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Estonian (http://www.transifex.com/projects/p/sphinx-1/language/et/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Estonian (http://www.transifex.com/sphinx-doc/sphinx-1/language/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: et\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "Joonis %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "Tabel %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "Nimekiri %s" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s dokumentatsioon" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "vaata %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "vaata ka %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Sümbolid" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Pythoni täiustusettepanekud; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d. %B %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Sisseehitatud" @@ -75,64 +55,76 @@ msgstr "Sisseehitatud" msgid "Module level" msgstr "Mooduli tase" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d. %b %Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Üldindeks" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "indeks" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "järgmine" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "eelmine" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s dokumentatsioon" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (pealkirjas " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Sektsiooni autor:" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Mooduli autor:" -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Koodi autor:" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Autor: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parameetrid" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Tagastab" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Tagastustüüp" @@ -161,12 +153,12 @@ msgstr "%s (C tüüp)" msgid "%s (C variable)" msgstr "%s (C muutuja)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "funktsioon" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "liige" @@ -174,7 +166,7 @@ msgstr "liige" msgid "macro" msgstr "makro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "tüüp" @@ -182,59 +174,72 @@ msgstr "tüüp" msgid "variable" msgstr "muutuja" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "Malli parameetrid" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ tüüp)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ liige)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funktsioon)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ klass)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "klass" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (sisseehitatud funktsioon)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s meetod)" @@ -249,7 +254,7 @@ msgstr "%s() (klass)" msgid "%s (global variable or constant)" msgstr "%s (globaalmuutuja või konstant)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atribuut)" @@ -258,116 +263,116 @@ msgstr "%s (%s atribuut)" msgid "Arguments" msgstr "Argumendid" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "andmed" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "atribuut" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Muutujad" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (moodulis %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (sisseehitatud muutuja)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (moodulis %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (sisseehitatud klass)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (klass moodulis %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s meetod)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s staatiline meetod)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s staatiline meetod)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (klassi %s.%s meetod)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (klassi %s meetod)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s atribuut)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (moodul)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Pythoni moodulite indeks" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "moodulid" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Iganenud" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "erind" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "meetod" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "klassi meetod" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "staatiline meetod" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "moodul" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (iganenud)" @@ -389,188 +394,219 @@ msgstr "direktiiv" msgid "role" msgstr "roll" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "keskkonnamuutuja; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%s käsurea valik; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "sõnastiku termin" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "grammatika märk" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "viite pealkiri" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "keskkonnamuutuja" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "programmi valik" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Indeks" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Mooduli indeks" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Otsinguleht" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "vaata %s" + +#: sphinx/environment/managers/indexentries.py:108 #, python-format -msgid " Bases: %s" -msgstr " Pärineb: %s" +msgid "see also %s" +msgstr "vaata ka %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Sümbolid" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "klassi :class:`%s` sünonüüm" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[joonis: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[joonis]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[lähtekood]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Teha" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<algne kirje>>" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(<<Algne kirje>> asub failis %s real %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(<<algne kirje>> asub %s, real %d.)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "algne kirje" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[dokumentatsioon]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Mooduli kood" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>%s lähtekood</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Ülevaade: mooduli kood" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Kõik lähtekoodiga moodulid</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Tähelepanu" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Ettevaatust" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Oht" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Viga" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Vihje" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Tähtis" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Märkus" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Vaata ka" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Nõuanne" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Hoiatus" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Uus versioonis %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Muudetud versioonis %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Iganenud alates versioonist %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "võtmesõna" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operaator" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "lause" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "sisseehitatud funktsioon" @@ -579,7 +615,7 @@ msgstr "sisseehitatud funktsioon" msgid "Table Of Contents" msgstr "Sisukord" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -589,11 +625,7 @@ msgstr "Otsing" msgid "Go" msgstr "Otsi" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Sisesta otsingusõna või mooduli/klassi/funktsiooni nimi." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Näita lähtekoodi" @@ -641,15 +673,15 @@ msgstr "kiire ligipääs kõigile moodulitele" msgid "all functions, classes, terms" msgstr "kõik funktsioonid, klassid ja terminid" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Indeks – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Täisindeks ühel lehel" @@ -665,35 +697,35 @@ msgstr "võib olla väga suur" msgid "Navigation" msgstr "Navigatsioon" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Otsi %(docstitle)s piires" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Info selle dokumentatsiooni kohta" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Autoriõigus" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Autoriõigus</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Autoriõigused %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Viimati uuendatud %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -742,13 +774,13 @@ msgstr "otsi" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Otsingu tulemused" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -765,13 +797,13 @@ 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 "Muutused versioonis %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -790,33 +822,34 @@ msgstr "C API muutused" msgid "Other changes" msgstr "Ülejäänud muutused" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Püsiviit sellele pealkirjale" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Püsiviit sellele definitsioonile" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Varja otsingu tulemused" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "Otsimine" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "Otsingu ettevalmistamine..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Otsingu tulemusena leiti %s leht(e)." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -833,44 +866,53 @@ msgstr "Varja külgriba" msgid "Contents" msgstr "Sisukord" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "Püsiviit sellele programmikoodile" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "Püsiviit sellele pildile" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "Püsiviit sellele tabelile" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Redaktsioon" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "lehekülg" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Joonealused märkused" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "jätk eelmisele leheküljele" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Jätkub järgmisel lehel" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[pilt: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[pilt]" diff --git a/sphinx/locale/eu/LC_MESSAGES/sphinx.js b/sphinx/locale/eu/LC_MESSAGES/sphinx.js index e4bfd8bb6f5..1b09f2fc4d3 100644 --- a/sphinx/locale/eu/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/eu/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "eu", "plural_expr": "(n != 1)", "messages": {"Next topic": "Hurrengo gaia", "Index": "Indizea", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "", "Copyright": "Copyright", "C API changes": "C API aldaketak", "quick access to all modules": "modulu guztietara atzipen azkarra", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "Modulu indize globala", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "Indizea – %(key)s", "General Index": "Indize orokorra", "next chapter": "hurrengo kapitulua", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "aurreko kapitulua", "Permalink to this headline": "Goiburu honetarako esteka iraunkorra", "About these documents": "Dokumentu hauen inguruan", "Preparing search...": "", ", in ": "", "Navigation": "Nabigazioa", "Expand sidebar": "Alboko barra luzatu", "the documentation for": "", "Complete Table of Contents": "Eduki taula osoa", "Contents": "Edukiak", "can be huge": "handia izan daiteke", "Changes in Version %(version)s — %(docstitle)s": "%(version)s bertsioko aldaketak — %(docstitle)s", "Other changes": "Beste aldaketak", "Hide Search Matches": "Bilaketa bat-etortzeak ezkutatu", "Quick search": "Bilaketa azkarra", "Show Source": "Iturburua ikusi", "Search": "Bilatu", "This Page": "Orri hau", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Honekin dokumentu hauetan bilatu dezakezu. Sartu zure bilaketa hitzak\nondoko kutxan eta \"bilatu\" sakatu. Kontutan eduki bilaketa funtzioak\nhitz guztiak bilatuko dituela. Hitz gutxiago dituzten orriak ez dira \nemaitzen zerrendan agertuko.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "<a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s erabiliz sortutakoa.", "last updated": "", "Collapse sidebar": "Alboko barra tolestu", "Go": "Joan", "Table Of Contents": "Eduki taula", "Search within %(docstitle)s": "Bilatu %(docstitle)s(e)n", "all functions, classes, terms": "funtzio, klase, termino guztiak", "Please activate JavaScript to enable the search\n functionality.": "Mesedez, gaitu JavaScript-a bilaketa erabili ahal izateko.", "Indices and tables:": "Indizeak eta taulak:", "lists all sections and subsections": "atal eta azpiatal guztiak zerrendatu", "Index pages by letter": "Indize orriak hizkika", "search": "bilatu", "Permalink to this definition": "Definizio honetarako esteka iraunkorra", "Previous topic": "Aurreko gaia", "Overview": "Gainbegirada", "Last updated on %(last_updated)s.": "Azken aldaketa: %(last_updated)s.", "Searching": "", "search this documentation": "dokumentazio honetan bilatu", "Automatically generated list of changes in version %(version)s": "Automatikoki sortutako %(version)s bertsioaren aldaketen zerrenda", "Full index on one page": "Indize guztia orri batean", "Enter search terms or a module, class or function name.": "Sartu bilaketa terminoa edo modulu, klase edo funtzioaren izena.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "Liburutegi aldaketak", "Search Page": "Bilaketa orria", "Search Results": "Bilaketa emaitzak"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "eu", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "Dokumentu hauen inguruan", "Automatically generated list of changes in version %(version)s": "Automatikoki sortutako %(version)s bertsioaren aldaketen zerrenda", "C API changes": "C API aldaketak", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "Alboko barra tolestu", "Complete Table of Contents": "Eduki taula osoa", "Contents": "Edukiak", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "<a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s erabiliz sortutakoa.", "Expand sidebar": "Alboko barra luzatu", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Honekin dokumentu hauetan bilatu dezakezu. Sartu zure bilaketa hitzak\nondoko kutxan eta \"bilatu\" sakatu. Kontutan eduki bilaketa funtzioak\nhitz guztiak bilatuko dituela. Hitz gutxiago dituzten orriak ez dira \nemaitzen zerrendan agertuko.", "Full index on one page": "Indize guztia orri batean", "General Index": "Indize orokorra", "Global Module Index": "Modulu indize globala", "Go": "Joan", "Hide Search Matches": "Bilaketa bat-etortzeak ezkutatu", "Index": "Indizea", "Index – %(key)s": "Indizea – %(key)s", "Index pages by letter": "Indize orriak hizkika", "Indices and tables:": "Indizeak eta taulak:", "Last updated on %(last_updated)s.": "Azken aldaketa: %(last_updated)s.", "Library changes": "Liburutegi aldaketak", "Navigation": "Nabigazioa", "Next topic": "Hurrengo gaia", "Other changes": "Beste aldaketak", "Overview": "Gainbegirada", "Permalink to this definition": "Definizio honetarako esteka iraunkorra", "Permalink to this headline": "Goiburu honetarako esteka iraunkorra", "Please activate JavaScript to enable the search\n functionality.": "Mesedez, gaitu JavaScript-a bilaketa erabili ahal izateko.", "Preparing search...": "", "Previous topic": "Aurreko gaia", "Quick search": "Bilaketa azkarra", "Search": "Bilatu", "Search Page": "Bilaketa orria", "Search Results": "Bilaketa emaitzak", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "Bilatu %(docstitle)s(e)n", "Searching": "", "Show Source": "Iturburua ikusi", "Table Of Contents": "Eduki taula", "This Page": "Orri hau", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "funtzio, klase, termino guztiak", "can be huge": "handia izan daiteke", "last updated": "", "lists all sections and subsections": "atal eta azpiatal guztiak zerrendatu", "next chapter": "hurrengo kapitulua", "previous chapter": "aurreko kapitulua", "quick access to all modules": "modulu guztietara atzipen azkarra", "search": "bilatu", "search this documentation": "dokumentazio honetan bilatu", "the documentation for": ""}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/eu/LC_MESSAGES/sphinx.mo b/sphinx/locale/eu/LC_MESSAGES/sphinx.mo index 67f61f7a761..e9a9602099b 100644 Binary files a/sphinx/locale/eu/LC_MESSAGES/sphinx.mo and b/sphinx/locale/eu/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/eu/LC_MESSAGES/sphinx.po b/sphinx/locale/eu/LC_MESSAGES/sphinx.po index f7b20e83c9d..c7842d17325 100644 --- a/sphinx/locale/eu/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/eu/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -8,62 +8,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Basque (http://www.transifex.com/projects/p/sphinx-1/language/eu/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Basque (http://www.transifex.com/sphinx-doc/sphinx-1/language/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 #, python-format -msgid "Fig. %s" +msgid "Section %s" msgstr "" -#: sphinx/config.py:81 +#: sphinx/config.py:110 #, python-format -msgid "Table %s" +msgid "Fig. %s" msgstr "" -#: sphinx/config.py:82 +#: sphinx/config.py:111 #, python-format -msgid "Listing %s" +msgid "Table %s" msgstr "" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s dokumentazioa" - -#: sphinx/environment.py:1880 +#: sphinx/config.py:112 #, python-format -msgid "see %s" -msgstr "%s ikusi" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "ikusi %s baita ere" - -#: sphinx/environment.py:1941 -msgid "Symbols" +msgid "Listing %s" msgstr "" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Hobekuntza Proposamena; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%Y %B %d" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "" @@ -72,64 +52,76 @@ msgstr "" msgid "Module level" msgstr "Modulu maila" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%Y %b %d" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Indize orokorra" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "indizea" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "hurrengoa" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "aurrekoa" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s dokumentazioa" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (hemen: " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Atalaren egilea: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Moduluaren egilea: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Kodearen egilea: " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Egilea:" -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parametroak" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Itzultzen du" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Itzulketa mota" @@ -158,12 +150,12 @@ msgstr "%s (C mota)" msgid "%s (C variable)" msgstr "%s (C aldagaia)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "funtzioa" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "partaidea" @@ -171,7 +163,7 @@ msgstr "partaidea" msgid "macro" msgstr "makroa" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "mota" @@ -179,59 +171,72 @@ msgstr "mota" msgid "variable" msgstr "aldagaia" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Jaurtitzen du" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ mota)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ partaidea)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funtzioa)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ klasea)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "klasea" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metodoa)" @@ -246,7 +251,7 @@ msgstr "%s() (klasea)" msgid "%s (global variable or constant)" msgstr "%s (aldagai globala edo konstantea)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atributua)" @@ -255,116 +260,116 @@ msgstr "%s (%s atributua)" msgid "Arguments" msgstr "Argumentuak" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "datuak" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "atributua" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Aldagaiak" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Goratzen du" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (%s moduluan)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (%s moduluan)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (klasea %s-(e)n)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metodoa)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s metodo estatikoa)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s metodo estatikoa)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s klaseko metodoa)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s klaseko metodoa)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s atributua)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (modulua)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Python moduluen indizea" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "moduluak" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Zaharkitua" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "salbuespena" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "metodoa" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "klaseko metodoa" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "metodo estatikoa" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "modulua" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (zaharkitua)" @@ -386,188 +391,219 @@ msgstr "" msgid "role" msgstr "rola" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "inguruneko aldagaia; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%skomando lerroko aukera; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "glosarioko terminoa" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "gramatikako token-a" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "erreferentzia etiketa" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "inguruneko aldagaia" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "programako aukera" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Indizea" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Moduluen indizea" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Bilaketa orria" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "%s ikusi" + +#: sphinx/environment/managers/indexentries.py:108 #, python-format -msgid " Bases: %s" +msgid "see also %s" +msgstr "ikusi %s baita ere" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[iturburua]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Egitekoa" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "jatorrizko sarrera" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[dokumentazioa]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Moduluko kodea" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>%s(r)en iturburu kodea</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Gainbegirada: moduluko kodea" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Kodea eskuragarri duten modulu guztiak</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Adi" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Kontuz" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Arriskua" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Errorea" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Argibidea" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Garrantzitsua" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Nota" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Ikusi baita ere" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Iradokizuna" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Kontuz" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Berria %s bertsioan" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "%s bertsioan aldatuta" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "%s bertsiotik aurrera zaharkituta" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "gako-hitza" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "eragiketa" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objetua" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "sententzia" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "" @@ -576,7 +612,7 @@ msgstr "" msgid "Table Of Contents" msgstr "Eduki taula" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -586,11 +622,7 @@ msgstr "Bilatu" msgid "Go" msgstr "Joan" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Sartu bilaketa terminoa edo modulu, klase edo funtzioaren izena." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Iturburua ikusi" @@ -638,15 +670,15 @@ msgstr "modulu guztietara atzipen azkarra" msgid "all functions, classes, terms" msgstr "funtzio, klase, termino guztiak" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Indizea – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Indize guztia orri batean" @@ -662,35 +694,35 @@ msgstr "handia izan daiteke" msgid "Navigation" msgstr "Nabigazioa" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Bilatu %(docstitle)s(e)n" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Dokumentu hauen inguruan" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Azken aldaketa: %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -739,13 +771,13 @@ msgstr "bilatu" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Bilaketa emaitzak" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -762,13 +794,13 @@ msgstr "Orri hau" #: 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 "%(version)s bertsioko aldaketak — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -787,33 +819,34 @@ msgstr "C API aldaketak" msgid "Other changes" msgstr "Beste aldaketak" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Goiburu honetarako esteka iraunkorra" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Definizio honetarako esteka iraunkorra" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Bilaketa bat-etortzeak ezkutatu" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -830,44 +863,53 @@ msgstr "Alboko barra tolestu" msgid "Contents" msgstr "Edukiak" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Argitalpena" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Oin-oharrak" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "aurreko orritik jarraitzen du" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Hurrengo orrian jarraitzen du" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[irudia]" diff --git a/sphinx/locale/fa/LC_MESSAGES/sphinx.js b/sphinx/locale/fa/LC_MESSAGES/sphinx.js index c732a969f1c..e9cc917b813 100644 --- a/sphinx/locale/fa/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/fa/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "fa", "plural_expr": "0", "messages": {"Next topic": "\u0645\u0648\u0636\u0648\u0639 \u0628\u0639\u062f\u06cc", "Index": "\u0641\u0647\u0631\u0633\u062a", "%(filename)s — %(docstitle)s": "", "Welcome! This is": "", "Copyright": "\u06a9\u067e\u06cc \u0631\u0627\u06cc\u062a", "C API changes": "C API \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a", "quick access to all modules": "\u062f\u0633\u062a\u0631\u0633\u06cc \u0633\u0631\u06cc\u0639 \u0628\u0647 \u062a\u0645\u0627\u0645\u06cc \u0645\u062a\u062f\u0647\u0627", "© Copyright %(copyright)s.": "", "Global Module Index": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0644\u06cc \u0645\u0627\u0698\u0648\u0644 \u0647\u0627", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "\u0641\u0647\u0631\u0633\u062a – %(key)s", "General Index": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0644\u06cc", "next chapter": "\u0641\u0635\u0644 \u0628\u0639\u062f\u06cc", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "\u0641\u0635\u0644 \u0642\u0628\u0644\u06cc", "Permalink to this headline": "\u0644\u06cc\u0646\u06a9 \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u0633\u0631 \u0645\u0642\u0627\u0644\u0647", "About these documents": "\u062f\u0631\u0628\u0627\u0631\u0647 \u0627\u06cc\u0646 \u0645\u0633\u062a\u0646\u062f\u0627\u062a", "Preparing search...": "", ", in ": "", "Navigation": "\u0646\u0627\u0648\u0628\u0631\u06cc", "Expand sidebar": "", "the documentation for": "", "Complete Table of Contents": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0627\u0645\u0644 \u0645\u0637\u0627\u0644\u0628", "Contents": "", "can be huge": "", "Changes in Version %(version)s — %(docstitle)s": "\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0631 \u0646\u0633\u062e\u0647 %(version)s — %(docstitle)s", "Other changes": "\u062f\u06af\u0631 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a", "Hide Search Matches": "\u0639\u062f\u0645 \u0646\u0645\u0627\u06cc\u0634 \u0646\u062a\u0627\u06cc\u062c \u06cc\u0627\u0641\u062a \u0634\u062f\u0647", "Quick search": "\u062c\u0633\u062a\u062c\u0648 \u0633\u0631\u06cc\u0639", "Show Source": "\u0646\u0645\u0627\u06cc\u0634 \u0633\u0648\u0631\u0633", "Search": "\u062c\u0633\u062a\u062c\u0648", "This Page": "\u0635\u0641\u062d\u0647 \u0641\u0639\u0644\u06cc", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": ". <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0628\u0627", "last updated": "", "Collapse sidebar": "", "Go": "\u0628\u0631\u0648", "Table Of Contents": "\u0641\u0647\u0631\u0633\u062a \u0639\u0646\u0627\u0648\u06cc\u0646", "Search within %(docstitle)s": "\u062c\u0633\u062a\u062c\u0648 \u062f\u0631 %(docstitle)s", "all functions, classes, terms": "\u062a\u0645\u0627\u0645\u06cc \u062a\u0648\u0627\u0628\u0639 \u060c \u06a9\u0644\u0627\u0633 \u0647\u0627 \u060c \u0627\u0635\u0637\u0644\u0627\u062d\u0627\u062a", "Please activate JavaScript to enable the search\n functionality.": "", "Indices and tables:": "\u0627\u06cc\u0646\u062f\u06a9\u0633 \u0647\u0627 \u0648 \u062c\u062f\u0627\u0648\u0644:", "lists all sections and subsections": "\u0641\u0647\u0631\u0633\u062a \u062a\u0645\u0627\u0645\u06cc \u0628\u062e\u0634 \u0647\u0627 \u0648 \u0632\u06cc\u0631 \u0645\u062c\u0645\u0648\u0639\u0647 \u0647\u0627", "Index pages by letter": "\u0641\u0647\u0631\u0633\u062a \u0635\u0641\u062d\u0627\u062a \u0628\u0631 \u0627\u0633\u0627\u0633 \u062d\u0631\u0648\u0641", "search": "\u062c\u0633\u062a\u062c\u0648", "Permalink to this definition": "\u0644\u06cc\u0646\u06a9 \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0639\u0631\u06cc\u0641", "Previous topic": "\u0645\u0648\u0636\u0648\u0639 \u0642\u0628\u0644\u06cc", "Overview": "\u0628\u0631\u0631\u0633\u06cc \u0627\u062c\u0645\u0627\u0644\u06cc", "Last updated on %(last_updated)s.": ". %(last_updated)s \u0622\u062e\u0631\u06cc\u0646 \u0628\u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u062f\u0631", "Searching": "", "search this documentation": "\u062c\u0633\u062a\u062c\u0648 \u062f\u0631 \u0627\u06cc\u0646 \u0627\u0633\u0646\u0627\u062f", "Automatically generated list of changes in version %(version)s": "\u0644\u06cc\u0633\u062a \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0631 \u0646\u0633\u062e\u0647 %(version)s", "Full index on one page": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0627\u0645\u0644 \u062f\u0631 \u06cc\u06a9 \u0635\u0641\u062d\u0647", "Enter search terms or a module, class or function name.": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "Library changes": "\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0627\u06cc\u06cc", "Search Page": "\u0635\u0641\u062d\u0647 \u062c\u0633\u062a\u062c\u0648", "Search Results": "\u0646\u062a\u0627\u06cc\u062c \u062c\u0633\u062a\u062c\u0648"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "fa", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "\u062f\u0631\u0628\u0627\u0631\u0647 \u0627\u06cc\u0646 \u0645\u0633\u062a\u0646\u062f\u0627\u062a", "Automatically generated list of changes in version %(version)s": "\u0644\u06cc\u0633\u062a \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0632 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0631 \u0646\u0633\u062e\u0647 %(version)s", "C API changes": "C API \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0627\u0645\u0644 \u0645\u0637\u0627\u0644\u0628", "Contents": "", "Copyright": "\u06a9\u067e\u06cc \u0631\u0627\u06cc\u062a", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": ". <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0628\u0627", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Full index on one page": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0627\u0645\u0644 \u062f\u0631 \u06cc\u06a9 \u0635\u0641\u062d\u0647", "General Index": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0644\u06cc", "Global Module Index": "\u0641\u0647\u0631\u0633\u062a \u06a9\u0644\u06cc \u0645\u0627\u0698\u0648\u0644 \u0647\u0627", "Go": "\u0628\u0631\u0648", "Hide Search Matches": "\u0639\u062f\u0645 \u0646\u0645\u0627\u06cc\u0634 \u0646\u062a\u0627\u06cc\u062c \u06cc\u0627\u0641\u062a \u0634\u062f\u0647", "Index": "\u0641\u0647\u0631\u0633\u062a", "Index – %(key)s": "\u0641\u0647\u0631\u0633\u062a – %(key)s", "Index pages by letter": "\u0641\u0647\u0631\u0633\u062a \u0635\u0641\u062d\u0627\u062a \u0628\u0631 \u0627\u0633\u0627\u0633 \u062d\u0631\u0648\u0641", "Indices and tables:": "\u0627\u06cc\u0646\u062f\u06a9\u0633 \u0647\u0627 \u0648 \u062c\u062f\u0627\u0648\u0644:", "Last updated on %(last_updated)s.": ". %(last_updated)s \u0622\u062e\u0631\u06cc\u0646 \u0628\u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u062f\u0631", "Library changes": "\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0627\u06cc\u06cc", "Navigation": "\u0646\u0627\u0648\u0628\u0631\u06cc", "Next topic": "\u0645\u0648\u0636\u0648\u0639 \u0628\u0639\u062f\u06cc", "Other changes": "\u062f\u06af\u0631 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a", "Overview": "\u0628\u0631\u0631\u0633\u06cc \u0627\u062c\u0645\u0627\u0644\u06cc", "Permalink to this definition": "\u0644\u06cc\u0646\u06a9 \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0639\u0631\u06cc\u0641", "Permalink to this headline": "\u0644\u06cc\u0646\u06a9 \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u0633\u0631 \u0645\u0642\u0627\u0644\u0647", "Please activate JavaScript to enable the search\n functionality.": "", "Preparing search...": "", "Previous topic": "\u0645\u0648\u0636\u0648\u0639 \u0642\u0628\u0644\u06cc", "Quick search": "\u062c\u0633\u062a\u062c\u0648 \u0633\u0631\u06cc\u0639", "Search": "\u062c\u0633\u062a\u062c\u0648", "Search Page": "\u0635\u0641\u062d\u0647 \u062c\u0633\u062a\u062c\u0648", "Search Results": "\u0646\u062a\u0627\u06cc\u062c \u062c\u0633\u062a\u062c\u0648", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "\u062c\u0633\u062a\u062c\u0648 \u062f\u0631 %(docstitle)s", "Searching": "", "Show Source": "\u0646\u0645\u0627\u06cc\u0634 \u0633\u0648\u0631\u0633", "Table Of Contents": "\u0641\u0647\u0631\u0633\u062a \u0639\u0646\u0627\u0648\u06cc\u0646", "This Page": "\u0635\u0641\u062d\u0647 \u0641\u0639\u0644\u06cc", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "\u062a\u0645\u0627\u0645\u06cc \u062a\u0648\u0627\u0628\u0639 \u060c \u06a9\u0644\u0627\u0633 \u0647\u0627 \u060c \u0627\u0635\u0637\u0644\u0627\u062d\u0627\u062a", "can be huge": "", "last updated": "", "lists all sections and subsections": "\u0641\u0647\u0631\u0633\u062a \u062a\u0645\u0627\u0645\u06cc \u0628\u062e\u0634 \u0647\u0627 \u0648 \u0632\u06cc\u0631 \u0645\u062c\u0645\u0648\u0639\u0647 \u0647\u0627", "next chapter": "\u0641\u0635\u0644 \u0628\u0639\u062f\u06cc", "previous chapter": "\u0641\u0635\u0644 \u0642\u0628\u0644\u06cc", "quick access to all modules": "\u062f\u0633\u062a\u0631\u0633\u06cc \u0633\u0631\u06cc\u0639 \u0628\u0647 \u062a\u0645\u0627\u0645\u06cc \u0645\u062a\u062f\u0647\u0627", "search": "\u062c\u0633\u062a\u062c\u0648", "search this documentation": "\u062c\u0633\u062a\u062c\u0648 \u062f\u0631 \u0627\u06cc\u0646 \u0627\u0633\u0646\u0627\u062f", "the documentation for": ""}, "plural_expr": "0"}); \ No newline at end of file diff --git a/sphinx/locale/fa/LC_MESSAGES/sphinx.mo b/sphinx/locale/fa/LC_MESSAGES/sphinx.mo index aebceb417f7..04aa8bcb8b1 100644 Binary files a/sphinx/locale/fa/LC_MESSAGES/sphinx.mo and b/sphinx/locale/fa/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/fa/LC_MESSAGES/sphinx.po b/sphinx/locale/fa/LC_MESSAGES/sphinx.po index c167fa8687f..bcecb922ca7 100644 --- a/sphinx/locale/fa/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/fa/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -7,62 +7,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Persian (http://www.transifex.com/projects/p/sphinx-1/language/fa/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Persian (http://www.transifex.com/sphinx-doc/sphinx-1/language/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: fa\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 #, python-format -msgid "Fig. %s" -msgstr "" - -#: sphinx/config.py:81 -#, python-format -msgid "Table %s" -msgstr "" - -#: sphinx/config.py:82 -#, python-format -msgid "Listing %s" +msgid "Section %s" msgstr "" -#: sphinx/config.py:89 +#: sphinx/config.py:110 #, python-format -msgid "%s %s documentation" +msgid "Fig. %s" msgstr "" -#: sphinx/environment.py:1880 +#: sphinx/config.py:111 #, python-format -msgid "see %s" +msgid "Table %s" msgstr "" -#: sphinx/environment.py:1883 +#: sphinx/config.py:112 #, python-format -msgid "see also %s" -msgstr "" - -#: sphinx/environment.py:1941 -msgid "Symbols" +msgid "Listing %s" msgstr "" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "درونی سازی" @@ -71,64 +51,76 @@ msgstr "درونی سازی" msgid "Module level" msgstr "در سطح ماژول" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "فهرست کلی" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "فهرست" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "بعدی" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "قبلی" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr "" -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr ":نویسنده این بخش" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "نویسنده این ماژول:" -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr ":نویسنده" -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "پارامترها" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "نوع برگشتی" @@ -157,12 +149,12 @@ msgstr "%s (C نوع)" msgid "%s (C variable)" msgstr "%s (C متغیر)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "" @@ -170,7 +162,7 @@ msgstr "" msgid "macro" msgstr "" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "" @@ -178,59 +170,72 @@ msgstr "" msgid "variable" msgstr "" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (توابع درونی)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s متد)" @@ -245,7 +250,7 @@ msgstr "" msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s مشخصه)" @@ -254,116 +259,116 @@ msgstr "%s (%s مشخصه)" msgid "Arguments" msgstr "" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "برانگیختن" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (در ماژول %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (متغیر درونی)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (در ماژول %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (کلاس درونی)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (کلاس در %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s متد)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s متد استاتیک)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s متد استاتیک)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s مشخصه)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (ماژول)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "ماژول ها" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "منسوخ شده" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "استثناء" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "ماژول" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr "" @@ -385,188 +390,219 @@ msgstr "" msgid "role" msgstr "" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "%s متغیرهای عمومی؛" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%sگزینه خط فرمان; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "فهرست" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "فهرست ماژول ها" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "صفحه جستجو" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" +msgid "see %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "در دست انجام" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "دقت" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "ملاحظه" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "خطر" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "خطا" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "تذکر" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "مهم" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "توجه" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "همچنین ملاحظه نمائید" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "نکته" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "هشدار" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "جدید در نسخه %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "تغییر داده شده در نسخه %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "منسوخ شده از نسخه %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "کلمه کلیدی" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "عملگر" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "شیء" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "گذاره" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "توابع درونی" @@ -575,7 +611,7 @@ msgstr "توابع درونی" msgid "Table Of Contents" msgstr "فهرست عناوین" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -585,11 +621,7 @@ msgstr "جستجو" msgid "Go" msgstr "برو" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "" - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "نمایش سورس" @@ -637,15 +669,15 @@ msgstr "دسترسی سریع به تمامی متدها" msgid "all functions, classes, terms" msgstr "تمامی توابع ، کلاس ها ، اصطلاحات" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "فهرست – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "فهرست کامل در یک صفحه" @@ -661,35 +693,35 @@ msgstr "" msgid "Navigation" msgstr "ناوبری" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "جستجو در %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "درباره این مستندات" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "کپی رایت" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr ". %(last_updated)s آخرین بروز رسانی در" -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -738,13 +770,13 @@ msgstr "جستجو" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "نتایج جستجو" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -761,12 +793,12 @@ msgstr "صفحه فعلی" #: 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 "تغییرات در نسخه %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 @@ -786,33 +818,34 @@ msgstr "C API تغییرات" msgid "Other changes" msgstr "دگر تغییرات" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "لینک ثابت به این سر مقاله" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "لینک ثابت به این تعریف" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "عدم نمایش نتایج یافت شده" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -829,44 +862,53 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "انتشار" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "" diff --git a/sphinx/locale/fi/LC_MESSAGES/sphinx.js b/sphinx/locale/fi/LC_MESSAGES/sphinx.js index c85994d8400..e065ce05b4d 100644 --- a/sphinx/locale/fi/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/fi/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "fi", "plural_expr": "(n != 1)", "messages": {"Next topic": ">>", "Index": "Sis\u00e4llysluettelo", "%(filename)s — %(docstitle)s": "", "Welcome! This is": "", "Copyright": "", "C API changes": "", "quick access to all modules": "", "© Copyright %(copyright)s.": "", "Global Module Index": "Yleinen moduulien sis\u00e4llysluettelo", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "", "General Index": "Yleinen sis\u00e4llysluettelo", "next chapter": ">>", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "<<", "Permalink to this headline": "", "About these documents": "Tietoja t\u00e4st\u00e4 documentist\u00e4", "Preparing search...": "", ", in ": "", "Navigation": "Navikointi", "Expand sidebar": "", "the documentation for": "", "Complete Table of Contents": "", "Contents": "", "can be huge": "voi olla iso", "Changes in Version %(version)s — %(docstitle)s": "Muutos versiosta %(version)s — %(docstitle)s", "Other changes": "", "Hide Search Matches": "Piilota l\u00f6ydetyt", "Quick search": "Pikahaku", "Show Source": "N\u00e4yt\u00e4 l\u00e4hdekoodina", "Search": "Etsi", "This Page": "T\u00e4m\u00e4 sivu", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Anna hakusanat kokonaan, osasanoilla ei haeta.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "last updated": "", "Collapse sidebar": "", "Go": "Siirry", "Table Of Contents": "Sis\u00e4llysluettelo", "Search within %(docstitle)s": "", "all functions, classes, terms": "", "Please activate JavaScript to enable the search\n functionality.": "Javascript pit\u00e4\u00e4 olla sallittu, jotta etsint\u00e4 toimii.", "Indices and tables:": "", "lists all sections and subsections": "", "Index pages by letter": "Hakemisto aakkostus sivuttain", "search": "etsi", "Permalink to this definition": "", "Previous topic": "<<", "Overview": "Yhteenveto", "Last updated on %(last_updated)s.": "", "Searching": "", "search this documentation": "", "Automatically generated list of changes in version %(version)s": "Automaattisesti luotu muutoshistoria alkaen versiosta %(version)s", "Full index on one page": "Hakemisto yhten\u00e4 luettelona", "Enter search terms or a module, class or function name.": "Anna etsitt\u00e4v\u00e4 termi tai moduuli, luokka tai funktio", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "Library changes": "", "Search Page": "Etsi sivu", "Search Results": "Etsinn\u00e4n tulos"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "fi", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "Tietoja t\u00e4st\u00e4 documentist\u00e4", "Automatically generated list of changes in version %(version)s": "Automaattisesti luotu muutoshistoria alkaen versiosta %(version)s", "C API changes": "", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "", "Contents": "", "Copyright": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Anna hakusanat kokonaan, osasanoilla ei haeta.", "Full index on one page": "Hakemisto yhten\u00e4 luettelona", "General Index": "Yleinen sis\u00e4llysluettelo", "Global Module Index": "Yleinen moduulien sis\u00e4llysluettelo", "Go": "Siirry", "Hide Search Matches": "Piilota l\u00f6ydetyt", "Index": "Sis\u00e4llysluettelo", "Index – %(key)s": "", "Index pages by letter": "Hakemisto aakkostus sivuttain", "Indices and tables:": "", "Last updated on %(last_updated)s.": "", "Library changes": "", "Navigation": "Navikointi", "Next topic": ">>", "Other changes": "", "Overview": "Yhteenveto", "Permalink to this definition": "", "Permalink to this headline": "", "Please activate JavaScript to enable the search\n functionality.": "Javascript pit\u00e4\u00e4 olla sallittu, jotta etsint\u00e4 toimii.", "Preparing search...": "", "Previous topic": "<<", "Quick search": "Pikahaku", "Search": "Etsi", "Search Page": "Etsi sivu", "Search Results": "Etsinn\u00e4n tulos", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "", "Searching": "", "Show Source": "N\u00e4yt\u00e4 l\u00e4hdekoodina", "Table Of Contents": "Sis\u00e4llysluettelo", "This Page": "T\u00e4m\u00e4 sivu", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "", "can be huge": "voi olla iso", "last updated": "", "lists all sections and subsections": "", "next chapter": ">>", "previous chapter": "<<", "quick access to all modules": "", "search": "etsi", "search this documentation": "", "the documentation for": ""}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/fi/LC_MESSAGES/sphinx.mo b/sphinx/locale/fi/LC_MESSAGES/sphinx.mo index a226bc17c35..f1c7a21976c 100644 Binary files a/sphinx/locale/fi/LC_MESSAGES/sphinx.mo and b/sphinx/locale/fi/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/fi/LC_MESSAGES/sphinx.po b/sphinx/locale/fi/LC_MESSAGES/sphinx.po index 9d651231bf7..402bb07cb1b 100644 --- a/sphinx/locale/fi/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/fi/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -8,62 +8,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Finnish (http://www.transifex.com/projects/p/sphinx-1/language/fi/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Finnish (http://www.transifex.com/sphinx-doc/sphinx-1/language/fi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: fi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 #, python-format -msgid "Fig. %s" -msgstr "" - -#: sphinx/config.py:81 -#, python-format -msgid "Table %s" +msgid "Section %s" msgstr "" -#: sphinx/config.py:82 +#: sphinx/config.py:110 #, python-format -msgid "Listing %s" -msgstr "" - -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" +msgid "Fig. %s" msgstr "" -#: sphinx/environment.py:1880 +#: sphinx/config.py:111 #, python-format -msgid "see %s" +msgid "Table %s" msgstr "" -#: sphinx/environment.py:1883 +#: sphinx/config.py:112 #, python-format -msgid "see also %s" -msgstr "" - -#: sphinx/environment.py:1941 -msgid "Symbols" +msgid "Listing %s" msgstr "" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d.%m.%Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "" @@ -72,64 +52,76 @@ msgstr "" msgid "Module level" msgstr "Moduulitaso" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d.%m.%Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Yleinen sisällysluettelo" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "hakemisto" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr ">" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "<" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr "" -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Luvun kirjoittaja: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Moduulin kirjoittaja: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Tekijä: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "" @@ -158,12 +150,12 @@ msgstr "" msgid "%s (C variable)" msgstr "" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "" @@ -171,7 +163,7 @@ msgstr "" msgid "macro" msgstr "" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "" @@ -179,59 +171,72 @@ msgstr "" msgid "variable" msgstr "" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "" @@ -246,7 +251,7 @@ msgstr "" msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "" @@ -255,116 +260,116 @@ msgstr "" msgid "Arguments" msgstr "" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (moduuli)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "moduulit" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Poistettu" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "moduuli" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (poistettu)" @@ -386,188 +391,219 @@ msgstr "" msgid "role" msgstr "" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Sisällysluettelo" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Moduuli sisällysluettelo" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Etsi sivu" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 #, python-format -msgid " Bases: %s" +msgid "Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Tehtävä vielä" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Huom" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Varoitus" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Vaara" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Virhe" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Vihje" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Tärkeä" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Muista" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Katso myös" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Vihje" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Varoitus" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Uusi versiossa %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Muutettu versiossa %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Poistettu versiosta %s alkaen" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "" @@ -576,7 +612,7 @@ msgstr "" msgid "Table Of Contents" msgstr "Sisällysluettelo" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -586,11 +622,7 @@ msgstr "Etsi" msgid "Go" msgstr "Siirry" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Anna etsittävä termi tai moduuli, luokka tai funktio" - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Näytä lähdekoodina" @@ -638,15 +670,15 @@ msgstr "" msgid "all functions, classes, terms" msgstr "" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Hakemisto yhtenä luettelona" @@ -662,35 +694,35 @@ msgstr "voi olla iso" msgid "Navigation" msgstr "Navikointi" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Tietoja tästä documentistä" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "" -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -739,13 +771,13 @@ msgstr "etsi" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Etsinnän tulos" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -762,12 +794,12 @@ msgstr "Tämä sivu" #: 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 "Muutos versiosta %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 @@ -787,33 +819,34 @@ msgstr "" msgid "Other changes" msgstr "" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Piilota löydetyt" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -830,44 +863,53 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "" diff --git a/sphinx/locale/fr/LC_MESSAGES/sphinx.js b/sphinx/locale/fr/LC_MESSAGES/sphinx.js index d311f7b6355..a6a171181f3 100644 --- a/sphinx/locale/fr/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/fr/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "fr", "plural_expr": "(n > 1)", "messages": {"Next topic": "Sujet suivant", "Index": "Index", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "Bienvenue ! Ceci est", "Copyright": "Copyright", "C API changes": "Modifications de l'API C", "quick access to all modules": "acc\u00e8s rapide \u00e0 l'ensemble des modules", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "Index g\u00e9n\u00e9ral des modules", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Votre recherche ne correspond \u00e0 aucun document. Veuillez v\u00e9rifier que les mots sont correctement orthographi\u00e9s et que vous avez s\u00e9lectionn\u00e9 assez de cat\u00e9gories.", "Index – %(key)s": "Index – %(key)s", "General Index": "Index g\u00e9n\u00e9ral", "next chapter": "Chapitre suivant", "Search finished, found %s page(s) matching the search query.": "La recherche est finie, %s page(s) trouv\u00e9e(s) qui corresponde(nt) \u00e0 la recherche.", "previous chapter": "Chapitre pr\u00e9c\u00e9dent", "Permalink to this headline": "Lien permanent vers ce titre", "About these documents": "\u00c0 propos de ces documents", "Preparing search...": "Pr\u00e9paration de la recherche...", ", in ": ", dans", "Navigation": "Navigation", "Expand sidebar": "Agrandir la barre lat\u00e9rale", "the documentation for": "la documentation pour", "Complete Table of Contents": "Table des mati\u00e8res compl\u00e8te", "Contents": "Contenu", "can be huge": "peut \u00eatre \u00e9norme", "Changes in Version %(version)s — %(docstitle)s": "Modifications dans la version %(version)s — %(docstitle)s", "Other changes": "Autres modifications", "Hide Search Matches": "Cacher les r\u00e9sultats de la recherche", "Quick search": "Recherche rapide", "Show Source": "Montrer le code source", "Search": "Recherche", "This Page": "Cette page", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Vous pouvez effectuer une recherche au sein des documents. Saisissez les termes\nde votre recherche dans le champs ci-dessous et cliquez sur \"rechercher\". Notez que la fonctionnalit\u00e9 de recherche\nva automatiquement chercher l'ensemble des mots. Les pages\ncontenant moins de mots n'appara\u00eetront pas dans la liste des r\u00e9sultats.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Cr\u00e9\u00e9 avec <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "derni\u00e8re modification", "Collapse sidebar": "R\u00e9duire la barre lat\u00e9rale", "Go": "Go", "Table Of Contents": "Table des Mati\u00e8res", "Search within %(docstitle)s": "Recherchez dans %(docstitle)s", "all functions, classes, terms": "toutes les fonctions, classes, termes", "Please activate JavaScript to enable the search\n functionality.": "Veuillez activer le JavaScript pour que la recherche fonctionne.", "Indices and tables:": "Indices et Tables :", "lists all sections and subsections": "lister l'ensemble des sections et sous-sections", "Index pages by letter": "Indexer les pages par lettre", "search": "rechercher", "Permalink to this definition": "Lien permanent vers cette d\u00e9finition", "Previous topic": "Sujet pr\u00e9c\u00e9dent", "Overview": "R\u00e9sum\u00e9", "Last updated on %(last_updated)s.": "Mis \u00e0 jour le %(last_updated)s.", "Searching": "Recherche en cours", "search this documentation": "rechercher dans cette documentation", "Automatically generated list of changes in version %(version)s": "Liste auto-g\u00e9n\u00e9r\u00e9e des modifications dans la version %(version)s", "Full index on one page": "Index complet sur une seule page", "Enter search terms or a module, class or function name.": "Saisissez un mot clef ou un nom de module, classe ou fonction.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "Modifications de la biblioth\u00e8que", "Search Page": "Page de recherche", "Search Results": "R\u00e9sultats de la recherche"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "fr", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": ", dans", "About these documents": "\u00c0 propos de ces documents", "Automatically generated list of changes in version %(version)s": "Liste auto-g\u00e9n\u00e9r\u00e9e des modifications dans la version %(version)s", "C API changes": "Modifications de l'API C", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "R\u00e9duire la barre lat\u00e9rale", "Complete Table of Contents": "Table des mati\u00e8res compl\u00e8te", "Contents": "Contenu", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Cr\u00e9\u00e9 avec <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "Agrandir la barre lat\u00e9rale", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Vous pouvez effectuer une recherche au sein des documents. Saisissez les termes\nde votre recherche dans le champs ci-dessous et cliquez sur \"rechercher\". Notez que la fonctionnalit\u00e9 de recherche\nva automatiquement chercher l'ensemble des mots. Les pages\ncontenant moins de mots n'appara\u00eetront pas dans la liste des r\u00e9sultats.", "Full index on one page": "Index complet sur une seule page", "General Index": "Index g\u00e9n\u00e9ral", "Global Module Index": "Index g\u00e9n\u00e9ral des modules", "Go": "Go", "Hide Search Matches": "Cacher les r\u00e9sultats de la recherche", "Index": "Index", "Index – %(key)s": "Index – %(key)s", "Index pages by letter": "Indexer les pages par lettre", "Indices and tables:": "Indices et Tables :", "Last updated on %(last_updated)s.": "Mis \u00e0 jour le %(last_updated)s.", "Library changes": "Modifications de la biblioth\u00e8que", "Navigation": "Navigation", "Next topic": "Sujet suivant", "Other changes": "Autres modifications", "Overview": "R\u00e9sum\u00e9", "Permalink to this definition": "Lien permanent vers cette d\u00e9finition", "Permalink to this headline": "Lien permanent vers ce titre", "Please activate JavaScript to enable the search\n functionality.": "Veuillez activer le JavaScript pour que la recherche fonctionne.", "Preparing search...": "Pr\u00e9paration de la recherche...", "Previous topic": "Sujet pr\u00e9c\u00e9dent", "Quick search": "Recherche rapide", "Search": "Recherche", "Search Page": "Page de recherche", "Search Results": "R\u00e9sultats de la recherche", "Search finished, found %s page(s) matching the search query.": "La recherche est finie, %s page(s) trouv\u00e9e(s) qui corresponde(nt) \u00e0 la recherche.", "Search within %(docstitle)s": "Recherchez dans %(docstitle)s", "Searching": "Recherche en cours", "Show Source": "Montrer le code source", "Table Of Contents": "Table des Mati\u00e8res", "This Page": "Cette page", "Welcome! This is": "Bienvenue ! Ceci est", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Votre recherche ne correspond \u00e0 aucun document. Veuillez v\u00e9rifier que les mots sont correctement orthographi\u00e9s et que vous avez s\u00e9lectionn\u00e9 assez de cat\u00e9gories.", "all functions, classes, terms": "toutes les fonctions, classes, termes", "can be huge": "peut \u00eatre \u00e9norme", "last updated": "derni\u00e8re modification", "lists all sections and subsections": "lister l'ensemble des sections et sous-sections", "next chapter": "Chapitre suivant", "previous chapter": "Chapitre pr\u00e9c\u00e9dent", "quick access to all modules": "acc\u00e8s rapide \u00e0 l'ensemble des modules", "search": "rechercher", "search this documentation": "rechercher dans cette documentation", "the documentation for": "la documentation pour"}, "plural_expr": "(n > 1)"}); \ No newline at end of file diff --git a/sphinx/locale/fr/LC_MESSAGES/sphinx.mo b/sphinx/locale/fr/LC_MESSAGES/sphinx.mo index f4291fbd91d..26baed67427 100644 Binary files a/sphinx/locale/fr/LC_MESSAGES/sphinx.mo and b/sphinx/locale/fr/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/fr/LC_MESSAGES/sphinx.po b/sphinx/locale/fr/LC_MESSAGES/sphinx.po index b7190aa0a8d..a730688978e 100644 --- a/sphinx/locale/fr/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/fr/LC_MESSAGES/sphinx.po @@ -1,76 +1,59 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: -# Christophe kryskool <christophe.chauvet@gmail.com>, 2013 -# Larlet davidbgk <larlet@gmail.com>, 2008 +# Christophe CHAUVET <christophe.chauvet@gmail.com>, 2013,2015 +# Larlet David <david@larlet.fr>, 2008 # fgallaire <fgallaire@gmail.com>, 2010 +# François Poirotte <clicky@erebot.net>, 2016 # Georg Brandl <g.brandl@gmx.net>, 2014 # Jean-Daniel Browne <jeandaniel.browne@gmail.com>, 2010 # Lilian Besson <naereen@crans.org>, 2013-2014 # Nikolaj van Omme <nikolaj.van.omme@gmail.com>, 2014-2015 +# Pierre Grépon <pgrepon@yahoo.fr>, 2016 # Sebastien Douche <sdouche@gmail.com>, 2008 +# Takeshi KOMIYA <i.tkomiya@gmail.com>, 2016 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: French (http://www.transifex.com/projects/p/sphinx-1/language/fr/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-24 12:26+0000\n" +"Last-Translator: Pierre Grépon <pgrepon@yahoo.fr>\n" +"Language-Team: French (http://www.transifex.com/sphinx-doc/sphinx-1/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "Section %s" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "Fig. %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "Tableau %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "Code source %s" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "documentation %s %s" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "voir %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "voir aussi %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Symboles" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d %B %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Fonctions de base" @@ -79,64 +62,76 @@ msgstr "Fonctions de base" msgid "Module level" msgstr "Module" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d %b %Y" +msgstr "%b %d, %Y" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Index général" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "index" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "suivant" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "précédent" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "documentation %s %s" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr "(dans" -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "Légende invalide: %s" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Auteur de la section : " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Auteur du module : " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " -msgstr "Auteur du code :" +msgstr "Auteur du code : " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Auteur : " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Paramètres" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Retourne" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Type retourné" @@ -165,12 +160,12 @@ msgstr "%s (type C)" msgid "%s (C variable)" msgstr "%s (variable C)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "fonction" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "membre" @@ -178,7 +173,7 @@ msgstr "membre" msgid "macro" msgstr "macro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "type" @@ -186,59 +181,72 @@ msgstr "type" msgid "variable" msgstr "variable" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "Paramètres du modèle" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Déclenche" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (type C++)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "%s (concept C++)" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (membre C++)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (fonction C++)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (classe C++)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "%s (énumération C++)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "%s (énumérateur C++)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "classe" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "énumération" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "énumérateur" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (fonction de base)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (méthode %s)" @@ -253,7 +261,7 @@ msgstr "%s() (classe)" msgid "%s (global variable or constant)" msgstr "%s (variable globale ou constante)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (attribut %s)" @@ -262,116 +270,116 @@ msgstr "%s (attribut %s)" msgid "Arguments" msgstr "Arguments" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "données" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "attribut" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Variables" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Lève" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (dans le module %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (variable de base)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (dans le module %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (classe de base)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (classe dans %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (méthode %s.%s)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (méthode statique %s.%s)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (méthode statique %s)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (méthode de la classe %s.%s)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (méthode de la classe %s)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (attribut %s.%s)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (module)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Index des modules Python" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "modules" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Obsolète" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "exception" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "méthode" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "méthode de classe" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "méthode statique" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "module" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (obsolète)" @@ -393,188 +401,219 @@ msgstr "directive" msgid "role" msgstr "role" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "variable d'environnement; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%s option de ligne de commande; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "terme du glossaire" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "élément de grammaire" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "étiquette de référence" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "variable d'environnement" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "option du programme" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Index" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Index du module" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Page de recherche" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "voir %s" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "voir aussi %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Symboles" + +#: sphinx/ext/autodoc.py:1297 #, python-format -msgid " Bases: %s" -msgstr "Bases: %s" +msgid "Bases: %s" +msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "alias de :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[graphe: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[graphe]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(disponible dans %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[source]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "À faire" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<entrée originale>>" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(L'<<entrée orginale>> se trouve dans %s, à la ligne %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(l'<<entrée originale>> se trouve dans %s, à la ligne %d)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "entrée originale" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[docs]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Code du module" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Code source de %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Vue d'ensemble : code du module" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Modules pour lesquels le code est disponible</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Attention" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Prudence" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Danger" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Erreur" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Indice" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Important" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Note" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Voir aussi" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Astuce" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Avertissement" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Nouveau dans la version %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Modifié dans la version %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Obsolète depuis la version %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "mot-clé" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "opérateur" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objet" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "état" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "fonction de base" @@ -583,7 +622,7 @@ msgstr "fonction de base" msgid "Table Of Contents" msgstr "Table des Matières" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -593,11 +632,7 @@ msgstr "Recherche" msgid "Go" msgstr "Go" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Saisissez un mot clef ou un nom de module, classe ou fonction." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Montrer le code source" @@ -645,15 +680,15 @@ msgstr "accès rapide à l'ensemble des modules" msgid "all functions, classes, terms" msgstr "toutes les fonctions, classes, termes" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Index – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Index complet sur une seule page" @@ -669,35 +704,35 @@ msgstr "peut être énorme" msgid "Navigation" msgstr "Navigation" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Recherchez dans %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "À propos de ces documents" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Mis à jour le %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -746,13 +781,13 @@ msgstr "rechercher" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Résultats de la recherche" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -769,13 +804,13 @@ msgstr "Cette page" #: 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 "Modifications dans la version %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -794,33 +829,34 @@ msgstr "Modifications de l'API C" msgid "Other changes" msgstr "Autres modifications" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Lien permanent vers ce titre" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Lien permanent vers cette définition" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Cacher les résultats de la recherche" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "Recherche en cours" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "Préparation de la recherche..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "La recherche est finie, %s page(s) trouvée(s) qui corresponde(nt) à la recherche." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr ", dans" @@ -837,44 +873,53 @@ msgstr "Réduire la barre latérale" msgid "Contents" msgstr "Contenu" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "Lien permanent vers ce code" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "Lien permanent vers cette image" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" -msgstr "" +msgstr "Lien permanent vers cette table des matières" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "Lien permanent vers ce tableau" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Version" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "page" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Notes de bas de page" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "Suite de la page précédente" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Suite sur la page suivante" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[image: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[image]" diff --git a/sphinx/locale/he/LC_MESSAGES/sphinx.js b/sphinx/locale/he/LC_MESSAGES/sphinx.js index 0d47c04266d..71d528e6ab8 100644 --- a/sphinx/locale/he/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/he/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "he", "plural_expr": "(n != 1)", "messages": {"Next topic": "\u05e0\u05d5\u05e9\u05d0 \u05d4\u05d1\u05d0", "Index": "\u05d0\u05d9\u05e0\u05d3\u05e7\u05e1", "%(filename)s — %(docstitle)s": "", "Welcome! This is": "", "Copyright": "\u05d6\u05db\u05d5\u05d9\u05d5\u05ea \u05e9\u05de\u05d5\u05e8\u05d5\u05ea", "C API changes": "", "quick access to all modules": "\u05d2\u05d9\u05e9\u05d4 \u05de\u05d4\u05d9\u05e8\u05d4 \u05dc\u05db\u05dc \u05d4\u05de\u05d5\u05d3\u05d5\u05dc\u05d9\u05dd", "© Copyright %(copyright)s.": "© \u05d6\u05db\u05d5\u05d9\u05d5\u05ea \u05e9\u05de\u05d5\u05e8\u05d5\u05ea %(copyright)s.", "Global Module Index": "\u05d0\u05d9\u05e0\u05d3\u05e7\u05e1 \u05de\u05d5\u05d3\u05d5\u05dc\u05d9\u05dd \u05d2\u05dc\u05d5\u05d1\u05dc\u05d9", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "", "General Index": "", "next chapter": "\u05e4\u05e8\u05e7 \u05d4\u05d1\u05d0", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "\u05e4\u05e8\u05e7 \u05e7\u05d5\u05d3\u05dd", "Permalink to this headline": "\u05e7\u05d9\u05e9\u05d5\u05e8 \u05e7\u05d1\u05d5\u05e2 \u05dc\u05db\u05d5\u05ea\u05e8\u05ea \u05d6\u05d5", "About these documents": "\u05e2\u05dc \u05de\u05e1\u05de\u05db\u05d9\u05dd \u05d0\u05dc\u05d5", "Preparing search...": "", ", in ": "", "Navigation": "\u05e0\u05d9\u05d5\u05d5\u05d8", "Expand sidebar": "\u05d4\u05e8\u05d7\u05d1 \u05e1\u05e8\u05d2\u05dc \u05e6\u05d3", "the documentation for": "", "Complete Table of Contents": "\u05ea\u05d5\u05db\u05df \u05e2\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd \u05de\u05dc\u05d0", "Contents": "\u05ea\u05d5\u05db\u05df", "can be huge": "\u05e2\u05e9\u05d5\u05d9 \u05dc\u05d4\u05d9\u05d5\u05ea \u05e2\u05e6\u05d5\u05dd", "Changes in Version %(version)s — %(docstitle)s": "\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05d1\u05d2\u05e8\u05e1\u05d4 %(version)s — %(docstitle)s", "Other changes": "\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05d0\u05d7\u05e8\u05d9\u05dd", "Hide Search Matches": "\u05d4\u05e1\u05ea\u05e8 \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05d7\u05d9\u05e4\u05d5\u05e9", "Quick search": "\u05d7\u05d9\u05e4\u05d5\u05e9 \u05de\u05d4\u05d9\u05e8", "Show Source": "\u05d4\u05e6\u05d2 \u05de\u05e7\u05d5\u05e8", "Search": "\u05d7\u05d9\u05e4\u05d5\u05e9", "This Page": "\u05e2\u05de\u05d5\u05d3 \u05d6\u05d4", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "last updated": "", "Collapse sidebar": "\u05db\u05d5\u05d5\u05e5 \u05e1\u05e8\u05d2\u05dc \u05e6\u05d3", "Go": "\u05dc\u05da", "Table Of Contents": "\u05ea\u05d5\u05db\u05df \u05e2\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd", "Search within %(docstitle)s": "\u05d7\u05e4\u05e9 \u05d1\u05ea\u05d5\u05da %(docstitle)s", "all functions, classes, terms": "\u05db\u05dc \u05d4\u05e4\u05d5\u05e0\u05e7\u05e6\u05d9\u05d5\u05ea, \u05d4\u05de\u05d7\u05dc\u05e7\u05d5\u05ea, \u05d4\u05de\u05d5\u05e9\u05d2\u05d9\u05dd", "Please activate JavaScript to enable the search\n functionality.": "\u05d0\u05e0\u05d0 \u05d4\u05e4\u05e2\u05dc \u05d2'\u05d0\u05d5\u05d0\u05e1\u05e7\u05e8\u05d9\u05e4\u05d8 \u05e2\"\u05de \u05dc\u05d0\u05e4\u05e9\u05e8 \u05d0\u05ea\n \u05d4\u05d7\u05d9\u05e4\u05d5\u05e9.", "Indices and tables:": "", "lists all sections and subsections": "", "Index pages by letter": "\u05e2\u05de\u05d5\u05d3\u05d9 \u05d0\u05d9\u05e0\u05d3\u05e7\u05e1 \u05dc\u05e4\u05d9 \u05d0\u05d5\u05ea\u05d9\u05d5\u05ea", "search": "\u05d7\u05d9\u05e4\u05d5\u05e9", "Permalink to this definition": "\u05e7\u05d9\u05e9\u05d5\u05e8 \u05e7\u05d1\u05d5\u05e2 \u05dc\u05d4\u05d2\u05d3\u05e8\u05d4 \u05d6\u05d5", "Previous topic": "\u05e0\u05d5\u05e9\u05d0 \u05e7\u05d5\u05d3\u05dd", "Overview": "\u05e1\u05e7\u05d9\u05e8\u05d4 \u05db\u05dc\u05dc\u05d9\u05ea", "Last updated on %(last_updated)s.": "\u05e2\u05d5\u05d3\u05db\u05df \u05dc\u05d0\u05d7\u05e8\u05d5\u05e0\u05d4 \u05d1 %(last_updated)s.", "Searching": "", "search this documentation": "\u05d7\u05e4\u05e9 \u05d1\u05ea\u05d9\u05e2\u05d5\u05d3 \u05d6\u05d4", "Automatically generated list of changes in version %(version)s": "\u05d9\u05e6\u05e8 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05e8\u05e9\u05d9\u05de\u05d4 \u05e9\u05dc \u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05d1\u05d2\u05e8\u05e1\u05d4 %(version)s", "Full index on one page": "\u05d0\u05d9\u05e0\u05d3\u05e7\u05e1 \u05de\u05dc\u05d0 \u05d1\u05e2\u05de\u05d5\u05d3 \u05d0\u05d7\u05d3", "Enter search terms or a module, class or function name.": "\u05d4\u05db\u05e0\u05e1 \u05de\u05d5\u05e9\u05d2\u05d9\u05dd \u05dc\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d0\u05d5 \u05e9\u05dd \u05de\u05d5\u05d3\u05d5\u05dc, \u05de\u05d7\u05dc\u05e7\u05d4 \u05d0\u05d5 \u05e4\u05d5\u05e0\u05e7\u05e6\u05d9\u05d4.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">\u05d6\u05db\u05d5\u05d9\u05d5\u05ea \u05e9\u05de\u05d5\u05e8\u05d5\u05ea</a> %(copyright)s.", "Library changes": "", "Search Page": "\u05d3\u05e3 \u05d7\u05d9\u05e4\u05d5\u05e9", "Search Results": "\u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05d4\u05d7\u05d9\u05e4\u05d5\u05e9"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "he", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "\u05e2\u05dc \u05de\u05e1\u05de\u05db\u05d9\u05dd \u05d0\u05dc\u05d5", "Automatically generated list of changes in version %(version)s": "\u05d9\u05e6\u05e8 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05e8\u05e9\u05d9\u05de\u05d4 \u05e9\u05dc \u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05d1\u05d2\u05e8\u05e1\u05d4 %(version)s", "C API changes": "", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "\u05db\u05d5\u05d5\u05e5 \u05e1\u05e8\u05d2\u05dc \u05e6\u05d3", "Complete Table of Contents": "\u05ea\u05d5\u05db\u05df \u05e2\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd \u05de\u05dc\u05d0", "Contents": "\u05ea\u05d5\u05db\u05df", "Copyright": "\u05d6\u05db\u05d5\u05d9\u05d5\u05ea \u05e9\u05de\u05d5\u05e8\u05d5\u05ea", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Expand sidebar": "\u05d4\u05e8\u05d7\u05d1 \u05e1\u05e8\u05d2\u05dc \u05e6\u05d3", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Full index on one page": "\u05d0\u05d9\u05e0\u05d3\u05e7\u05e1 \u05de\u05dc\u05d0 \u05d1\u05e2\u05de\u05d5\u05d3 \u05d0\u05d7\u05d3", "General Index": "", "Global Module Index": "\u05d0\u05d9\u05e0\u05d3\u05e7\u05e1 \u05de\u05d5\u05d3\u05d5\u05dc\u05d9\u05dd \u05d2\u05dc\u05d5\u05d1\u05dc\u05d9", "Go": "\u05dc\u05da", "Hide Search Matches": "\u05d4\u05e1\u05ea\u05e8 \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05d7\u05d9\u05e4\u05d5\u05e9", "Index": "\u05d0\u05d9\u05e0\u05d3\u05e7\u05e1", "Index – %(key)s": "", "Index pages by letter": "\u05e2\u05de\u05d5\u05d3\u05d9 \u05d0\u05d9\u05e0\u05d3\u05e7\u05e1 \u05dc\u05e4\u05d9 \u05d0\u05d5\u05ea\u05d9\u05d5\u05ea", "Indices and tables:": "", "Last updated on %(last_updated)s.": "\u05e2\u05d5\u05d3\u05db\u05df \u05dc\u05d0\u05d7\u05e8\u05d5\u05e0\u05d4 \u05d1 %(last_updated)s.", "Library changes": "", "Navigation": "\u05e0\u05d9\u05d5\u05d5\u05d8", "Next topic": "\u05e0\u05d5\u05e9\u05d0 \u05d4\u05d1\u05d0", "Other changes": "\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05d0\u05d7\u05e8\u05d9\u05dd", "Overview": "\u05e1\u05e7\u05d9\u05e8\u05d4 \u05db\u05dc\u05dc\u05d9\u05ea", "Permalink to this definition": "\u05e7\u05d9\u05e9\u05d5\u05e8 \u05e7\u05d1\u05d5\u05e2 \u05dc\u05d4\u05d2\u05d3\u05e8\u05d4 \u05d6\u05d5", "Permalink to this headline": "\u05e7\u05d9\u05e9\u05d5\u05e8 \u05e7\u05d1\u05d5\u05e2 \u05dc\u05db\u05d5\u05ea\u05e8\u05ea \u05d6\u05d5", "Please activate JavaScript to enable the search\n functionality.": "\u05d0\u05e0\u05d0 \u05d4\u05e4\u05e2\u05dc \u05d2'\u05d0\u05d5\u05d0\u05e1\u05e7\u05e8\u05d9\u05e4\u05d8 \u05e2\"\u05de \u05dc\u05d0\u05e4\u05e9\u05e8 \u05d0\u05ea\n \u05d4\u05d7\u05d9\u05e4\u05d5\u05e9.", "Preparing search...": "", "Previous topic": "\u05e0\u05d5\u05e9\u05d0 \u05e7\u05d5\u05d3\u05dd", "Quick search": "\u05d7\u05d9\u05e4\u05d5\u05e9 \u05de\u05d4\u05d9\u05e8", "Search": "\u05d7\u05d9\u05e4\u05d5\u05e9", "Search Page": "\u05d3\u05e3 \u05d7\u05d9\u05e4\u05d5\u05e9", "Search Results": "\u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05d4\u05d7\u05d9\u05e4\u05d5\u05e9", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "\u05d7\u05e4\u05e9 \u05d1\u05ea\u05d5\u05da %(docstitle)s", "Searching": "", "Show Source": "\u05d4\u05e6\u05d2 \u05de\u05e7\u05d5\u05e8", "Table Of Contents": "\u05ea\u05d5\u05db\u05df \u05e2\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd", "This Page": "\u05e2\u05de\u05d5\u05d3 \u05d6\u05d4", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "\u05db\u05dc \u05d4\u05e4\u05d5\u05e0\u05e7\u05e6\u05d9\u05d5\u05ea, \u05d4\u05de\u05d7\u05dc\u05e7\u05d5\u05ea, \u05d4\u05de\u05d5\u05e9\u05d2\u05d9\u05dd", "can be huge": "\u05e2\u05e9\u05d5\u05d9 \u05dc\u05d4\u05d9\u05d5\u05ea \u05e2\u05e6\u05d5\u05dd", "last updated": "", "lists all sections and subsections": "", "next chapter": "\u05e4\u05e8\u05e7 \u05d4\u05d1\u05d0", "previous chapter": "\u05e4\u05e8\u05e7 \u05e7\u05d5\u05d3\u05dd", "quick access to all modules": "\u05d2\u05d9\u05e9\u05d4 \u05de\u05d4\u05d9\u05e8\u05d4 \u05dc\u05db\u05dc \u05d4\u05de\u05d5\u05d3\u05d5\u05dc\u05d9\u05dd", "search": "\u05d7\u05d9\u05e4\u05d5\u05e9", "search this documentation": "\u05d7\u05e4\u05e9 \u05d1\u05ea\u05d9\u05e2\u05d5\u05d3 \u05d6\u05d4", "the documentation for": ""}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/he/LC_MESSAGES/sphinx.mo b/sphinx/locale/he/LC_MESSAGES/sphinx.mo index a10ebb62fe8..0a4fab10d1f 100644 Binary files a/sphinx/locale/he/LC_MESSAGES/sphinx.mo and b/sphinx/locale/he/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/he/LC_MESSAGES/sphinx.po b/sphinx/locale/he/LC_MESSAGES/sphinx.po index 1b896fa5154..070a79c6895 100644 --- a/sphinx/locale/he/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/he/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -8,62 +8,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Hebrew (http://www.transifex.com/projects/p/sphinx-1/language/he/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Hebrew (http://www.transifex.com/sphinx-doc/sphinx-1/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: he\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 #, python-format -msgid "Fig. %s" +msgid "Section %s" msgstr "" -#: sphinx/config.py:81 +#: sphinx/config.py:110 #, python-format -msgid "Table %s" +msgid "Fig. %s" msgstr "" -#: sphinx/config.py:82 +#: sphinx/config.py:111 #, python-format -msgid "Listing %s" +msgid "Table %s" msgstr "" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "תיעוד %s %s" - -#: sphinx/environment.py:1880 +#: sphinx/config.py:112 #, python-format -msgid "see %s" -msgstr "ראה %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "ראה גם %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" +msgid "Listing %s" msgstr "" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "" @@ -72,64 +52,76 @@ msgstr "" msgid "Module level" msgstr "רמת המודול" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "אינדקס" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "הבא" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "הקודם" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "תיעוד %s %s" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr "(בתוך" -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "מחבר הקטע:" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "מחבר המודול:" -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "מחבר הקוד:" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "מחבר:" -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "פרמטרים" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "" @@ -158,12 +150,12 @@ msgstr "" msgid "%s (C variable)" msgstr "" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "פונקציה" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "" @@ -171,7 +163,7 @@ msgstr "" msgid "macro" msgstr "מאקרו" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "" @@ -179,59 +171,72 @@ msgstr "" msgid "variable" msgstr "משתנה" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (פונקציית C++)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (מחלקת C++)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "מחלקה" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "" @@ -246,7 +251,7 @@ msgstr "" msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "" @@ -255,116 +260,116 @@ msgstr "" msgid "Arguments" msgstr "" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "משתנים" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "מודול" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr "" @@ -386,188 +391,219 @@ msgstr "" msgid "role" msgstr "" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "משתנה סביבה; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%sאופציית שורת הפקודה ; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "משתנה סביבה" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "אינדקס" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "מודול אינדקס" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "דף חיפוש" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "ראה %s" + +#: sphinx/environment/managers/indexentries.py:108 #, python-format -msgid " Bases: %s" +msgid "see also %s" +msgstr "ראה גם %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[מקור]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "לעשות" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(ה <<הרשומה המקורית>> ממוקמת ב %s, שורה %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "הטקסט המקורי" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[תיעוד]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>הראה קוד מקור ל %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>כל המודולים שיש להם קוד זמין</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "תשומת לב" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "זהירות" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "סכנה" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "שגיאה" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "רמז" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "חשוב" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "הערה" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "ראה גם" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "טיפ" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "אזהרה" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "חדש בגרסה %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "השתנה בגרסה %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr " לא מומלץ לשימוש מגרסה %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "מילת מפתח" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "" @@ -576,7 +612,7 @@ msgstr "" msgid "Table Of Contents" msgstr "תוכן עניינים" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -586,11 +622,7 @@ msgstr "חיפוש" msgid "Go" msgstr "לך" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "הכנס מושגים לחיפוש או שם מודול, מחלקה או פונקציה." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "הצג מקור" @@ -638,15 +670,15 @@ msgstr "גישה מהירה לכל המודולים" msgid "all functions, classes, terms" msgstr "כל הפונקציות, המחלקות, המושגים" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "אינדקס מלא בעמוד אחד" @@ -662,35 +694,35 @@ msgstr "עשוי להיות עצום" msgid "Navigation" msgstr "ניווט" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "חפש בתוך %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "על מסמכים אלו" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "זכויות שמורות" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">זכויות שמורות</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© זכויות שמורות %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "עודכן לאחרונה ב %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -739,13 +771,13 @@ msgstr "חיפוש" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "תוצאות החיפוש" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -762,12 +794,12 @@ msgstr "עמוד זה" #: 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 "שינויים בגרסה %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 @@ -787,33 +819,34 @@ msgstr "" msgid "Other changes" msgstr "שינויים אחרים" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "קישור קבוע לכותרת זו" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "קישור קבוע להגדרה זו" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "הסתר תוצאות חיפוש" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -830,44 +863,53 @@ msgstr "כווץ סרגל צד" msgid "Contents" msgstr "תוכן" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "מהדורה" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "הערות שוליים" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "המשך מעמוד קודם" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "המשך בעמוד הבא" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[תמונה]" diff --git a/sphinx/locale/hi/LC_MESSAGES/sphinx.js b/sphinx/locale/hi/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000000..5d9197c5c64 --- /dev/null +++ b/sphinx/locale/hi/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "hi", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "", "Automatically generated list of changes in version %(version)s": "", "C API changes": "", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "", "Contents": "", "Copyright": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "<a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s \u0938\u0947 \u092c\u0928\u093e\u092f\u093e \u0917\u092f\u093e\u0964 ", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Full index on one page": "", "General Index": "", "Global Module Index": "", "Go": "", "Hide Search Matches": "", "Index": "\u0905\u0928\u0941\u0915\u094d\u0930\u092e\u0923\u093f\u0915\u093e", "Index – %(key)s": "", "Index pages by letter": "", "Indices and tables:": "", "Last updated on %(last_updated)s.": "", "Library changes": "", "Navigation": "", "Next topic": "", "Other changes": "", "Overview": "", "Permalink to this definition": "", "Permalink to this headline": "", "Please activate JavaScript to enable the search\n functionality.": "\u0916\u094b\u091c \u0928\u0947 \u0915\u0947 \u0932\u093f\u090f JavaScript \u0915\u093e \u0939\u094b\u0928\u093e \u0906\u0935\u0936\u094d\u092f\u0915 \u0939\u0948. \u0915\u0943\u092a\u092f\u093e JavaScript \u0915\u094b \u0936\u0936\u0915\u094d\u0924 \u0915\u0940\u091c\u093f\u092f\u0947 ", "Preparing search...": "", "Previous topic": "", "Quick search": "", "Search": "", "Search Page": "\u0916\u094b\u091c \u092a\u0943\u0937\u094d\u0920", "Search Results": "\u0916\u094b\u091c \u092a\u0930\u0940\u0923\u093e\u092e ", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "", "Searching": "", "Show Source": "", "Table Of Contents": "", "This Page": "\u092f\u0939 \u092a\u0943\u0937\u094d\u0920 ", "Welcome! This is": "\u0928\u092e\u0936\u094d\u0915\u093e\u0930\u0964 \u092f\u0939 \u0939\u0948 ", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "", "can be huge": "", "last updated": "", "lists all sections and subsections": "", "next chapter": "", "previous chapter": "", "quick access to all modules": "", "search": "", "search this documentation": "", "the documentation for": ""}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/hi/LC_MESSAGES/sphinx.mo b/sphinx/locale/hi/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000000..ee436826d96 Binary files /dev/null and b/sphinx/locale/hi/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/hi/LC_MESSAGES/sphinx.po b/sphinx/locale/hi/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000000..2e88893acbc --- /dev/null +++ b/sphinx/locale/hi/LC_MESSAGES/sphinx.po @@ -0,0 +1,915 @@ +# Translations template for Sphinx. +# Copyright (C) 2016 ORGANIZATION +# This file is distributed under the same license as the Sphinx project. +# +# Translators: +# Purnank H. Ghumalia <me@purnank.in>, 2015-2016 +msgid "" +msgstr "" +"Project-Id-Version: Sphinx\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Hindi (http://www.transifex.com/sphinx-doc/sphinx-1/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 +#, python-format +msgid "Fig. %s" +msgstr "चित्र %s" + +#: sphinx/config.py:111 +#, python-format +msgid "Table %s" +msgstr "" + +#: sphinx/config.py:112 +#, python-format +msgid "Listing %s" +msgstr "" + +#: sphinx/roles.py:187 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python सुधार का सुझाव; PEP %s" + +#: sphinx/builders/changes.py:75 +msgid "Builtins" +msgstr "" + +#: sphinx/builders/changes.py:77 +msgid "Module level" +msgstr "" + +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 +#, python-format +msgid "%b %d, %Y" +msgstr "" + +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "" + +#: sphinx/builders/html.py:315 +msgid "index" +msgstr "अनुक्रमणिका" + +#: sphinx/builders/html.py:377 +msgid "next" +msgstr "" + +#: sphinx/builders/html.py:386 +msgid "previous" +msgstr "" + +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 +msgid " (in " +msgstr "" + +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 +msgid "Section author: " +msgstr "" + +#: sphinx/directives/other.py:151 +msgid "Module author: " +msgstr "" + +#: sphinx/directives/other.py:153 +msgid "Code author: " +msgstr "" + +#: sphinx/directives/other.py:155 +msgid "Author: " +msgstr "लेखक:" + +#: sphinx/domains/__init__.py:277 +#, python-format +msgid "%s %s" +msgstr "" + +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 +msgid "Parameters" +msgstr "" + +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 +msgid "Returns" +msgstr "" + +#: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 +#: sphinx/domains/python.py:163 +msgid "Return type" +msgstr "" + +#: sphinx/domains/c.py:177 +#, python-format +msgid "%s (C function)" +msgstr "" + +#: sphinx/domains/c.py:179 +#, python-format +msgid "%s (C member)" +msgstr "" + +#: sphinx/domains/c.py:181 +#, python-format +msgid "%s (C macro)" +msgstr "" + +#: sphinx/domains/c.py:183 +#, python-format +msgid "%s (C type)" +msgstr "" + +#: sphinx/domains/c.py:185 +#, python-format +msgid "%s (C variable)" +msgstr "" + +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 +msgid "function" +msgstr "" + +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 +msgid "member" +msgstr "" + +#: sphinx/domains/c.py:244 +msgid "macro" +msgstr "" + +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 +msgid "type" +msgstr "" + +#: sphinx/domains/c.py:246 +msgid "variable" +msgstr "" + +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "" + +#: sphinx/domains/cpp.py:4205 +#, python-format +msgid "%s (C++ type)" +msgstr "" + +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 +#, python-format +msgid "%s (C++ member)" +msgstr "" + +#: sphinx/domains/cpp.py:4238 +#, python-format +msgid "%s (C++ function)" +msgstr "" + +#: sphinx/domains/cpp.py:4249 +#, python-format +msgid "%s (C++ class)" +msgstr "" + +#: sphinx/domains/cpp.py:4260 +#, python-format +msgid "%s (C++ enum)" +msgstr "" + +#: sphinx/domains/cpp.py:4281 +#, python-format +msgid "%s (C++ enumerator)" +msgstr "" + +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 +msgid "class" +msgstr "" + +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 +msgid "enum" +msgstr "" + +#: sphinx/domains/cpp.py:4423 +msgid "enumerator" +msgstr "" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 +#, python-format +msgid "%s() (built-in function)" +msgstr "" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 +#, python-format +msgid "%s() (%s method)" +msgstr "" + +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 +#, python-format +msgid "%s (%s attribute)" +msgstr "" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "" + +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 +msgid "data" +msgstr "" + +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 +msgid "attribute" +msgstr "" + +#: sphinx/domains/python.py:154 +msgid "Variables" +msgstr "" + +#: sphinx/domains/python.py:158 +msgid "Raises" +msgstr "" + +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 +#, python-format +msgid "%s() (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:311 +#, python-format +msgid "%s (built-in variable)" +msgstr "" + +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 +#, python-format +msgid "%s (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:328 +#, python-format +msgid "%s (built-in class)" +msgstr "" + +#: sphinx/domains/python.py:329 +#, python-format +msgid "%s (class in %s)" +msgstr "" + +#: sphinx/domains/python.py:369 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "" + +#: sphinx/domains/python.py:381 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "" + +#: sphinx/domains/python.py:384 +#, python-format +msgid "%s() (%s static method)" +msgstr "" + +#: sphinx/domains/python.py:394 +#, python-format +msgid "%s() (%s.%s class method)" +msgstr "" + +#: sphinx/domains/python.py:397 +#, python-format +msgid "%s() (%s class method)" +msgstr "" + +#: sphinx/domains/python.py:407 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "" + +#: sphinx/domains/python.py:488 +#, python-format +msgid "%s (module)" +msgstr "" + +#: sphinx/domains/python.py:545 +msgid "Python Module Index" +msgstr "" + +#: sphinx/domains/python.py:546 +msgid "modules" +msgstr "" + +#: sphinx/domains/python.py:592 +msgid "Deprecated" +msgstr "" + +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 +msgid "exception" +msgstr "" + +#: sphinx/domains/python.py:618 +msgid "method" +msgstr "" + +#: sphinx/domains/python.py:619 +msgid "class method" +msgstr "" + +#: sphinx/domains/python.py:620 +msgid "static method" +msgstr "" + +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 +msgid "module" +msgstr "" + +#: sphinx/domains/python.py:787 +msgid " (deprecated)" +msgstr "" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "" + +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 +#, python-format +msgid "environment variable; %s" +msgstr "" + +#: sphinx/domains/std.py:186 +#, python-format +msgid "%scommand line option; %s" +msgstr "" + +#: sphinx/domains/std.py:434 +msgid "glossary term" +msgstr "" + +#: sphinx/domains/std.py:435 +msgid "grammar token" +msgstr "" + +#: sphinx/domains/std.py:436 +msgid "reference label" +msgstr "" + +#: sphinx/domains/std.py:438 +msgid "environment variable" +msgstr "" + +#: sphinx/domains/std.py:439 +msgid "program option" +msgstr "" + +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 +msgid "Index" +msgstr "अनुक्रमणिका" + +#: sphinx/domains/std.py:474 +msgid "Module Index" +msgstr "" + +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "खोज पृष्ठ" + +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "%s देखिए" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 +#, python-format +msgid "alias of :class:`%s`" +msgstr "" + +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 +#, python-format +msgid "[graph: %s]" +msgstr "" + +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 +msgid "[graph]" +msgstr "" + +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 +#, python-format +msgid "(in %s v%s)" +msgstr "" + +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 +msgid "[source]" +msgstr "" + +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 +msgid "Todo" +msgstr "" + +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 +#, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" + +#: sphinx/ext/todo.py:146 +msgid "original entry" +msgstr "मूल entry" + +#: sphinx/ext/viewcode.py:166 +msgid "[docs]" +msgstr "" + +#: sphinx/ext/viewcode.py:180 +msgid "Module code" +msgstr "" + +#: sphinx/ext/viewcode.py:186 +#, python-format +msgid "<h1>Source code for %s</h1>" +msgstr "<h1>%s का स्रोत code</h1>" + +#: sphinx/ext/viewcode.py:212 +msgid "Overview: module code" +msgstr "" + +#: sphinx/ext/viewcode.py:213 +msgid "<h1>All modules for which code is available</h1>" +msgstr "" + +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 +msgid "Attention" +msgstr "सावधान" + +#: sphinx/locale/__init__.py:160 +msgid "Caution" +msgstr "चेतावनी" + +#: sphinx/locale/__init__.py:161 +msgid "Danger" +msgstr "खतरा" + +#: sphinx/locale/__init__.py:162 +msgid "Error" +msgstr "गलती" + +#: sphinx/locale/__init__.py:163 +msgid "Hint" +msgstr "" + +#: sphinx/locale/__init__.py:164 +msgid "Important" +msgstr "महत्त्वपूर्ण" + +#: sphinx/locale/__init__.py:165 +msgid "Note" +msgstr "" + +#: sphinx/locale/__init__.py:166 +msgid "See also" +msgstr "" + +#: sphinx/locale/__init__.py:167 +msgid "Tip" +msgstr "" + +#: sphinx/locale/__init__.py:168 +msgid "Warning" +msgstr "" + +#: sphinx/locale/__init__.py:172 +#, python-format +msgid "New in version %s" +msgstr "संस्करण %s से नया " + +#: sphinx/locale/__init__.py:173 +#, python-format +msgid "Changed in version %s" +msgstr "संस्करण %s से अलग " + +#: sphinx/locale/__init__.py:174 +#, python-format +msgid "Deprecated since version %s" +msgstr "संस्करण %s से प्रतिबंधित " + +#: sphinx/locale/__init__.py:180 +msgid "keyword" +msgstr "" + +#: sphinx/locale/__init__.py:181 +msgid "operator" +msgstr "" + +#: sphinx/locale/__init__.py:182 +msgid "object" +msgstr "" + +#: sphinx/locale/__init__.py:184 +msgid "statement" +msgstr "" + +#: sphinx/locale/__init__.py:185 +msgid "built-in function" +msgstr "" + +#: sphinx/themes/agogo/layout.html:46 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:11 sphinx/themes/scrolls/layout.html:35 +msgid "Table Of Contents" +msgstr "" + +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/searchresults.html:10 +msgid "Search" +msgstr "" + +#: sphinx/themes/agogo/layout.html:54 sphinx/themes/basic/searchbox.html:15 +msgid "Go" +msgstr "" + +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 +msgid "Show Source" +msgstr "" + +#: sphinx/themes/basic/defindex.html:11 +msgid "Overview" +msgstr "" + +#: sphinx/themes/basic/defindex.html:15 +msgid "Welcome! This is" +msgstr "नमश्कार। यह है " + +#: sphinx/themes/basic/defindex.html:16 +msgid "the documentation for" +msgstr "" + +#: sphinx/themes/basic/defindex.html:17 +msgid "last updated" +msgstr "" + +#: sphinx/themes/basic/defindex.html:20 +msgid "Indices and tables:" +msgstr "" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "" + +#: sphinx/themes/basic/defindex.html:28 +msgid "Global Module Index" +msgstr "" + +#: sphinx/themes/basic/defindex.html:29 +msgid "quick access to all modules" +msgstr "" + +#: sphinx/themes/basic/defindex.html:31 +msgid "all functions, classes, terms" +msgstr "" + +#: sphinx/themes/basic/genindex-single.html:33 +#, python-format +msgid "Index – %(key)s" +msgstr "" + +#: sphinx/themes/basic/genindex-single.html:61 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:72 +msgid "Full index on one page" +msgstr "" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "" + +#: sphinx/themes/basic/layout.html:29 +msgid "Navigation" +msgstr "" + +#: sphinx/themes/basic/layout.html:123 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/layout.html:132 +msgid "About these documents" +msgstr "" + +#: sphinx/themes/basic/layout.html:141 +msgid "Copyright" +msgstr "" + +#: sphinx/themes/basic/layout.html:186 +#, python-format +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:188 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:192 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "" +"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "<a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s से बनाया गया। " + +#: sphinx/themes/basic/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr " %(docstitle)s में खोजिए " + +#: sphinx/themes/basic/relations.html:11 +msgid "Previous topic" +msgstr "" + +#: sphinx/themes/basic/relations.html:13 +msgid "previous chapter" +msgstr "" + +#: sphinx/themes/basic/relations.html:16 +msgid "Next topic" +msgstr "" + +#: sphinx/themes/basic/relations.html:18 +msgid "next chapter" +msgstr "" + +#: sphinx/themes/basic/search.html:27 +msgid "" +"Please activate JavaScript to enable the search\n" +" functionality." +msgstr "खोज ने के लिए JavaScript का होना आवश्यक है. कृपया JavaScript को शशक्त कीजिये " + +#: sphinx/themes/basic/search.html:32 +msgid "" +"From here you can search these documents. Enter your search\n" +" words into the box below and click \"search\". Note that the search\n" +" 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:39 +#: sphinx/themes/basic/searchresults.html:17 +msgid "search" +msgstr "" + +#: sphinx/themes/basic/search.html:43 +#: sphinx/themes/basic/searchresults.html:21 +#: sphinx/themes/basic/static/searchtools.js_t:287 +msgid "Search Results" +msgstr "खोज परीणाम " + +#: sphinx/themes/basic/search.html:45 +#: sphinx/themes/basic/searchresults.html:23 +#: sphinx/themes/basic/static/searchtools.js_t:289 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" + +#: sphinx/themes/basic/searchbox.html:12 +msgid "Quick search" +msgstr "" + +#: sphinx/themes/basic/sourcelink.html:12 +msgid "This Page" +msgstr "यह पृष्ठ " + +#: 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 "" + +#: sphinx/themes/basic/changes/rstsource.html:5 +#, python-format +msgid "%(filename)s — %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:17 +#, python-format +msgid "Automatically generated list of changes in version %(version)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 +msgid "Permalink to this headline" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 +msgid "Permalink to this definition" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:208 +msgid "Hide Search Matches" +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:121 +msgid "Searching" +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:126 +msgid "Preparing search..." +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:291 +#, python-format +msgid "Search finished, found %s page(s) matching the search query." +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:344 +msgid ", in " +msgstr "" + +#: sphinx/themes/classic/static/sidebar.js_t:83 +msgid "Expand sidebar" +msgstr "" + +#: sphinx/themes/classic/static/sidebar.js_t:96 +#: sphinx/themes/classic/static/sidebar.js_t:124 +msgid "Collapse sidebar" +msgstr "" + +#: sphinx/themes/haiku/layout.html:24 +msgid "Contents" +msgstr "" + +#: sphinx/writers/html.py:389 +msgid "Permalink to this code" +msgstr "" + +#: sphinx/writers/html.py:393 +msgid "Permalink to this image" +msgstr "" + +#: sphinx/writers/html.py:395 +msgid "Permalink to this toctree" +msgstr "" + +#: sphinx/writers/html.py:717 +msgid "Permalink to this table" +msgstr "" + +#: sphinx/writers/latex.py:380 +msgid "Release" +msgstr "" + +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 +msgid "Footnotes" +msgstr "" + +#: sphinx/writers/latex.py:1112 +msgid "continued from previous page" +msgstr "" + +#: sphinx/writers/latex.py:1118 +msgid "Continued on next page" +msgstr "" + +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 +#, python-format +msgid "[image: %s]" +msgstr "" + +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 +msgid "[image]" +msgstr "" diff --git a/sphinx/locale/hr/LC_MESSAGES/sphinx.js b/sphinx/locale/hr/LC_MESSAGES/sphinx.js index 3d3cdd1413b..0be353de156 100644 --- a/sphinx/locale/hr/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/hr/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "hr", "plural_expr": "n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2", "messages": {"Next topic": "Slijede\u0107a tema", "Index": "Abecedni popis", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "", "Copyright": "Sva prava zadr\u017eana", "C API changes": "C API changes", "quick access to all modules": "brz dostup do svih modulov", "© Copyright %(copyright)s.": "© Sva prava zadr\u017eana %(copyright)s.", "Global Module Index": "Op\u0107eniti popis modula", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "Index – %(key)s", "General Index": "Opceniti abecedni indeks", "next chapter": "slijede\u0107e poglavje", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "Prija\u0161nje poglavje", "Permalink to this headline": "Link na taj naslov", "About these documents": "O ovim dokumentima", "Preparing search...": "", ", in ": "", "Navigation": "Navigacija", "Expand sidebar": "", "the documentation for": "", "Complete Table of Contents": "Potpuna tabela sadr\u017eaja", "Contents": "", "can be huge": "mo\u017ee biti veliko", "Changes in Version %(version)s — %(docstitle)s": "Changes in Version %(version)s — %(docstitle)s", "Other changes": "Ostale promjene", "Hide Search Matches": "Sakrij rezultate pretrage", "Quick search": "Brzo pretra\u017eivanje", "Show Source": "Prika\u017ei izvorni kod", "Search": "Tra\u017ei", "This Page": "Trenutna stranica", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Izra\u0111eno sa <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "", "Collapse sidebar": "", "Go": "Naprijed", "Table Of Contents": "Pregled sadr\u017eaja", "Search within %(docstitle)s": "Tra\u017ei izme\u0111u %(docstitle)s", "all functions, classes, terms": "sve funkcije, razredi, izrazi", "Please activate JavaScript to enable the search\n functionality.": "Molimo omogu\u0107ite JavaScript\n za djelovanje tra\u017eilice.", "Indices and tables:": "Kazala i tabele:", "lists all sections and subsections": "prika\u017ei sve sekcije i podsekcije", "Index pages by letter": "Indeksiraj stranice po slovu", "search": "tra\u017ei", "Permalink to this definition": "Link na tu definiciju", "Previous topic": "Prija\u0161nja tema", "Overview": "Pregled", "Last updated on %(last_updated)s.": "Zadnji put a\u017eurirano %(last_updated)s.", "Searching": "", "search this documentation": "tra\u017ei po dokumentaciji", "Automatically generated list of changes in version %(version)s": "Automatically generated list of changes in version %(version)s", "Full index on one page": "Potpun indeks na jednoj strani", "Enter search terms or a module, class or function name.": "Unesi ime modula, razreda ili funkcije.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Sva prava zadr\u017eana</a> %(copyright)s.", "Library changes": "Library changes", "Search Page": "Tra\u017eilica", "Search Results": "Rezultati pretrage"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "hr", "messages": {"%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Sva prava zadr\u017eana</a> %(copyright)s.", "© Copyright %(copyright)s.": "© Sva prava zadr\u017eana %(copyright)s.", ", in ": ", u ", "About these documents": "O ovim dokumentima", "Automatically generated list of changes in version %(version)s": "Automatski generirani popis promjena u verziji %(version)s", "C API changes": "C API promjene", "Changes in Version %(version)s — %(docstitle)s": "Promjene u verziji %(version)s — %(docstitle)s", "Collapse sidebar": "Sakrij pomo\u0107nu traku", "Complete Table of Contents": "Detaljni sadr\u017eaj", "Contents": "Sadr\u017eaj", "Copyright": "Sva prava zadr\u017eana", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Izra\u0111eno sa <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "Poka\u017ei pomo\u0107nu traku", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Ovdje mo\u017eete pretra\u017eivati dokumente. Unesite rije\u010di za pretra\u017eivanje \nu okvir ispod i kliknite \"tra\u017ei\". Znajte da \u0107e pretra\u017eivanje automatski \ntra\u017eiti sve upisane rije\u010di. Stranice koje ne sadr\u017ee sve rije\u010di ne\u0107e se\npojaviti na popisu rezultata.", "Full index on one page": "Potpun indeks na jednoj stranici", "General Index": "Opceniti abecedni indeks", "Global Module Index": "Op\u0107eniti popis modula", "Go": "Naprijed", "Hide Search Matches": "Sakrij rezultate pretrage", "Index": "Abecedni popis", "Index – %(key)s": "Index – %(key)s", "Index pages by letter": "Indeksiraj stranice po slovu", "Indices and tables:": "Kazala i tablice:", "Last updated on %(last_updated)s.": "Zadnji put a\u017eurirano %(last_updated)s.", "Library changes": "Promjene lib-ova", "Navigation": "Navigacija", "Next topic": "Sljede\u0107a tema", "Other changes": "Ostale promjene", "Overview": "Pregled", "Permalink to this definition": "Link na tu definiciju", "Permalink to this headline": "Link na taj naslov", "Please activate JavaScript to enable the search\n functionality.": "Molimo omogu\u0107ite JavaScript\n za djelovanje tra\u017eilice.", "Preparing search...": "Priprema pretrage...", "Previous topic": "Prija\u0161nja tema", "Quick search": "Brzo pretra\u017eivanje", "Search": "Tra\u017ei", "Search Page": "Tra\u017eilica", "Search Results": "Rezultati pretrage", "Search finished, found %s page(s) matching the search query.": "Pretraga zavr\u0161ena, prona\u0111eno %s stranica.", "Search within %(docstitle)s": "Tra\u017ei izme\u0111u %(docstitle)s", "Searching": "Pretra\u017eivanje", "Show Source": "Prika\u017ei izvorni kod", "Table Of Contents": "Pregled sadr\u017eaja", "This Page": "Trenutna stranica", "Welcome! This is": "Dobro do\u0161li! Ovo je", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Zadanim uvjetima nije prona\u0111en dokument. Molim provjerite to\u010dnost upisanih rije\u010di i odabir ozna\u010denih kategija.", "all functions, classes, terms": "sve funkcije, razredi, izrazi", "can be huge": "mo\u017ee biti ogromno", "last updated": "posljednja promjena", "lists all sections and subsections": "prika\u017ei sve sekcije i podsekcije", "next chapter": "sljede\u0107e poglavlje", "previous chapter": "Prija\u0161nje poglavlje", "quick access to all modules": "brz dostup do svih modula", "search": "tra\u017ei", "search this documentation": "tra\u017ei po dokumentaciji", "the documentation for": "dokumentacija za"}, "plural_expr": "n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2"}); \ No newline at end of file diff --git a/sphinx/locale/hr/LC_MESSAGES/sphinx.mo b/sphinx/locale/hr/LC_MESSAGES/sphinx.mo index 5c382100647..59b42ff2bb1 100644 Binary files a/sphinx/locale/hr/LC_MESSAGES/sphinx.mo and b/sphinx/locale/hr/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/hr/LC_MESSAGES/sphinx.po b/sphinx/locale/hr/LC_MESSAGES/sphinx.po index 63af39da933..dbe6bf54e53 100644 --- a/sphinx/locale/hr/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/hr/LC_MESSAGES/sphinx.po @@ -1,69 +1,49 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: -# Mario Šarić, 2015 +# Mario Šarić, 2015-2016 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Croatian (http://www.transifex.com/projects/p/sphinx-1/language/hr/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 15:49+0000\n" +"Last-Translator: Mario Šarić\n" +"Language-Team: Croatian (http://www.transifex.com/sphinx-doc/sphinx-1/language/hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: hr\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" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "Poglavlje %s" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" -msgstr "Sl. %s" +msgstr "Slika %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "Tablica %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "Ispis %s" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s dokumentacija" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "pogledajte %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "također pogledajte %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Simboli" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d %B, %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Ugrađeni dijelovi" @@ -72,64 +52,76 @@ msgstr "Ugrađeni dijelovi" msgid "Module level" msgstr "Nivo modula" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d %b, %Y" +msgstr "%b %d, %Y" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Opceniti abecedni indeks" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "abecedni indeks" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "naprijed" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "nazad" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s dokumentacija" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (u " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "Neispravan navod: %s" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Autor sekcije: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Autor modula: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Autor koda:" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Autor:" -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parametri" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Vraća" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Vraća tip" @@ -158,12 +150,12 @@ msgstr "%s (C tip)" msgid "%s (C variable)" msgstr "%s (C varijabla)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "funkcija" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "član" @@ -171,7 +163,7 @@ msgstr "član" msgid "macro" msgstr "makro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "tip" @@ -179,59 +171,72 @@ msgstr "tip" msgid "variable" msgstr "varijabla" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "Parametri predloška" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Baca (iznimke)" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ tip)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "%s (C++ koncept)" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ član)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funkcija)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ razred)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "%s (C++ enum)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "%s (C++ enumerator)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "razred" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "koncept" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "enum" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "enumerator" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (ugrađene funkcije)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metoda)" @@ -244,330 +249,361 @@ msgstr "%s() (razred)" #: sphinx/domains/javascript.py:111 #, python-format msgid "%s (global variable or constant)" -msgstr "" +msgstr "%s (globalna varijabla ili konstanta)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atribut)" #: sphinx/domains/javascript.py:122 msgid "Arguments" -msgstr "" +msgstr "Argumenti" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" -msgstr "" +msgstr "podaci" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "atribut" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" -msgstr "" +msgstr "Varijable" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Podiže" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (u modulu %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (ugrađene variable)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (u modulu %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (ugrađen razred)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (razred u %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metoda)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statična metoda)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statična metoda)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" -msgstr "" +msgstr "%s() (%s.%s metoda klase)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" -msgstr "" +msgstr "%s() (%s metoda klase)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s atribut)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (modul)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" -msgstr "" +msgstr "Python indeks modula" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "Moduli" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Zastarjelo" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "izuzetak" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" -msgstr "" +msgstr "metoda" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" -msgstr "" +msgstr "metoda klase" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "statična metoda" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "modul" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (zastarjelo)" #: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" -msgstr "" +msgstr "%s (directive)" #: sphinx/domains/rst.py:57 #, python-format msgid "%s (role)" -msgstr "" +msgstr "%s (role)" #: sphinx/domains/rst.py:106 msgid "directive" -msgstr "" +msgstr "Direktive" #: sphinx/domains/rst.py:107 msgid "role" -msgstr "" +msgstr "uloga" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "varijabla okruženja; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%scommand line parameter; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" -msgstr "" +msgstr "termin rječnika" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" -msgstr "" +msgstr "token gramatike" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" -msgstr "" +msgstr "referentna oznaka" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "varijabla okruženja" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" -msgstr "" +msgstr "programske mogućnosti" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Abecedni popis" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Popis modula" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Tražilica" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr " Osnove: %s" +msgid "see %s" +msgstr "pogledajte %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "također pogledajte %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Simboli" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "Osnovice: %s" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "nadimak za :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" -msgstr "" +msgstr "[graph: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" -msgstr "" +msgstr "[graph]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "Link na tu definiciju" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" -msgstr "" +msgstr "(u %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" -msgstr "" +msgstr "[source]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "dvostruka oznaka jednakosti %s, drugo pojavljivanje u %s" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Todo" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<original entry>>" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(<<original entry>> se nalazi u %s, redak %d.)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" -msgstr "" +msgstr "izvorna stavka" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" -msgstr "" +msgstr "[docs]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" -msgstr "" +msgstr "Kod modula" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" -msgstr "" +msgstr "<h1>Izvorni kod za %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" -msgstr "" +msgstr "Pregled: kod modula" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" -msgstr "" +msgstr "<h1>Svi moduli za koje je dostupan kod</h1>" + +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "Argumenti" -#: sphinx/locale/__init__.py:157 +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Pozor" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Pažnja" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Opasnost" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Greška" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Savjet" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Važno" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Napomena" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Pogledaj i" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Savjet" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Upozorenje" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Novo u verziji %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Promijenjeno u verziji %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Zastarijelo od verzije %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "ključna riječ" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "izjava" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "ugrađen funkcije" @@ -576,7 +612,7 @@ msgstr "ugrađen funkcije" msgid "Table Of Contents" msgstr "Pregled sadržaja" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -586,11 +622,7 @@ msgstr "Traži" msgid "Go" msgstr "Naprijed" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Unesi ime modula, razreda ili funkcije." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Prikaži izvorni kod" @@ -600,23 +632,23 @@ msgstr "Pregled" #: sphinx/themes/basic/defindex.html:15 msgid "Welcome! This is" -msgstr "" +msgstr "Dobro došli! Ovo je" #: sphinx/themes/basic/defindex.html:16 msgid "the documentation for" -msgstr "" +msgstr "dokumentacija za" #: sphinx/themes/basic/defindex.html:17 msgid "last updated" -msgstr "" +msgstr "posljednja promjena" #: sphinx/themes/basic/defindex.html:20 msgid "Indices and tables:" -msgstr "Kazala i tabele:" +msgstr "Kazala i tablice:" #: sphinx/themes/basic/defindex.html:23 msgid "Complete Table of Contents" -msgstr "Potpuna tabela sadržaja" +msgstr "Detaljni sadržaj" #: sphinx/themes/basic/defindex.html:24 msgid "lists all sections and subsections" @@ -632,23 +664,23 @@ msgstr "Općeniti popis modula" #: sphinx/themes/basic/defindex.html:29 msgid "quick access to all modules" -msgstr "brz dostup do svih modulov" +msgstr "brz dostup do svih modula" #: sphinx/themes/basic/defindex.html:31 msgid "all functions, classes, terms" msgstr "sve funkcije, razredi, izrazi" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Index – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" -msgstr "Potpun indeks na jednoj strani" +msgstr "Potpun indeks na jednoj stranici" #: sphinx/themes/basic/genindex-split.html:16 msgid "Index pages by letter" @@ -656,41 +688,41 @@ msgstr "Indeksiraj stranice po slovu" #: sphinx/themes/basic/genindex-split.html:25 msgid "can be huge" -msgstr "može biti veliko" +msgstr "može biti ogromno" #: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Navigacija" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Traži između %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "O ovim dokumentima" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Sva prava zadržana" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Sva prava zadržana</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "© <a href=\"%(path)s\">Sva prava zadržana</a> %(copyright)s." -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Sva prava zadržana %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "© Sva prava zadržana %(copyright)s." -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Zadnji put ažurirano %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -708,15 +740,15 @@ msgstr "Prijašnja tema" #: sphinx/themes/basic/relations.html:13 msgid "previous chapter" -msgstr "Prijašnje poglavje" +msgstr "Prijašnje poglavlje" #: sphinx/themes/basic/relations.html:16 msgid "Next topic" -msgstr "Slijedeća tema" +msgstr "Sljedeća tema" #: sphinx/themes/basic/relations.html:18 msgid "next chapter" -msgstr "slijedeće poglavje" +msgstr "sljedeće poglavlje" #: sphinx/themes/basic/search.html:27 msgid "" @@ -730,7 +762,7 @@ msgid "" " words into the box below and click \"search\". Note that the search\n" " function will automatically search for all of the words. Pages\n" " containing fewer words won't appear in the result list." -msgstr "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list." +msgstr "Ovdje možete pretraživati dokumente. Unesite riječi za pretraživanje \nu okvir ispod i kliknite \"traži\". Znajte da će pretraživanje automatski \ntražiti sve upisane riječi. Stranice koje ne sadrže sve riječi neće se\npojaviti na popisu rezultata." #: sphinx/themes/basic/search.html:39 #: sphinx/themes/basic/searchresults.html:17 @@ -739,17 +771,17 @@ msgstr "traži" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Rezultati pretrage" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." -msgstr "" +msgstr "Zadanim uvjetima nije pronađen dokument. Molim provjerite točnost upisanih riječi i odabir označenih kategija." #: sphinx/themes/basic/searchbox.html:12 msgid "Quick search" @@ -762,112 +794,122 @@ msgstr "Trenutna stranica" #: 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 "Changes in Version %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "Promjene u verziji %(version)s — %(docstitle)s" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +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 "Automatically generated list of changes in version %(version)s" +msgstr "Automatski generirani popis promjena u verziji %(version)s" #: sphinx/themes/basic/changes/versionchanges.html:18 msgid "Library changes" -msgstr "Library changes" +msgstr "Promjene lib-ova" #: sphinx/themes/basic/changes/versionchanges.html:23 msgid "C API changes" -msgstr "C API changes" +msgstr "C API promjene" #: sphinx/themes/basic/changes/versionchanges.html:25 msgid "Other changes" msgstr "Ostale promjene" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Link na taj naslov" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Link na tu definiciju" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Sakrij rezultate pretrage" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" -msgstr "" +msgstr "Pretraživanje" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." -msgstr "" +msgstr "Priprema pretrage..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." -msgstr "" +msgstr "Pretraga završena, pronađeno %s stranica." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " -msgstr "" +msgstr ", u " #: sphinx/themes/classic/static/sidebar.js_t:83 msgid "Expand sidebar" -msgstr "" +msgstr "Pokaži pomoćnu traku" #: sphinx/themes/classic/static/sidebar.js_t:96 #: sphinx/themes/classic/static/sidebar.js_t:124 msgid "Collapse sidebar" -msgstr "" +msgstr "Sakrij pomoćnu traku" #: sphinx/themes/haiku/layout.html:24 msgid "Contents" -msgstr "" +msgstr "Sadržaj" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" -msgstr "" +msgstr "Permalink na ovaj kod" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" -msgstr "" +msgstr "Permalink na ovu sliku" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" -msgstr "" +msgstr "Permalink na ovaj sadržaj" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" -msgstr "" +msgstr "Permalink na ovu tablicu" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Distribucija" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "stranica" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "Nepoznata postavka: latex_elements[%r] je zanemarena." + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" -msgstr "" +msgstr "Fusnote" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "nastavak sa prethodne stranice" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" -msgstr "nastavak na slijedećoj stranici" +msgstr "nastavak na sljedećoj stranici" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" -msgstr "" +msgstr "[slika: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[slika]" diff --git a/sphinx/locale/hu/LC_MESSAGES/sphinx.js b/sphinx/locale/hu/LC_MESSAGES/sphinx.js index bbbfbd35188..70c30b1b44b 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": {"Next topic": "K\u00f6vetkez\u0151 t\u00e9mak\u00f6r", "Index": "T\u00e1rgymutat\u00f3", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "\u00dcdv\u00f6z\u00f6lj\u00fck! Ez a", "Copyright": "Minden jog fenntartva", "C API changes": "C API v\u00e1ltoz\u00e1sok", "quick access to all modules": "gyors hozz\u00e1f\u00e9r\u00e9s az \u00f6sszes modulhoz", "© Copyright %(copyright)s.": "© Minden jog fenntartva %(copyright)s.", "Global Module Index": "Teljes modul t\u00e1rgymutat\u00f3", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "A keres\u00e9se nem hozott eredm\u00e9nyt. Ellen\u0151rizze, a megadott kulcsszavakat \u00e9s azt, hogy megfelel\u0151 sz\u00e1m\u00fa kateg\u00f3ria van-e kiv\u00e1lasztva.", "Index – %(key)s": "T\u00e1rgymutat\u00f3 – %(key)s", "General Index": "\u00c1ltal\u00e1nos t\u00e1rgymutat\u00f3", "next chapter": "k\u00f6vetkez\u0151 fejezet", "Search finished, found %s page(s) matching the search query.": "A keres\u00e9s befejez\u0151d\u00f6tt, %s oldal egyezik a keres\u00e9si fel\u00e9teleknek.", "previous chapter": "el\u0151z\u0151 fejezet", "Permalink to this headline": "Hivatkoz\u00e1s erre a fejezetc\u00edmre", "About these documents": "N\u00e9vjegy ezekr\u0151l a dokumentumokr\u00f3l", "Preparing search...": "Felk\u00e9sz\u00fcl\u00e9s a keres\u00e9sre...", ", in ": ", ", "Navigation": "Navig\u00e1ci\u00f3", "Expand sidebar": "Oldals\u00e1v kinyit\u00e1sa", "the documentation for": "dokument\u00e1ci\u00f3", "Complete Table of Contents": "Teljes tartalomjegyz\u00e9k", "Contents": "Tartalom", "can be huge": "nagy lehet", "Changes in Version %(version)s — %(docstitle)s": "V\u00e1ltoz\u00e1sok a(z) %(version)s v\u00e1ltozatban — %(docstitle)s", "Other changes": "Egy\u00e9b v\u00e1ltoz\u00e1sok", "Hide Search Matches": "Keres\u00e9si Tal\u00e1latok Elrejt\u00e9se", "Quick search": "Gyorskeres\u00e9s", "Show Source": "Forr\u00e1s megtekint\u00e9se", "Search": "Keres\u00e9s", "This Page": "Ez az Oldal", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Err\u0151l az oldalr\u00f3l ind\u00edthatja keres\u00e9seit. \u00cdrja be a kulcsszavakat\n az al\u00e1bbi sz\u00f6vegdobozba, majd kattintson a \"keres\u00e9s\" gombra.\n \u00dcgyeljen arra, hogy a keres\u00e9s megadott kulcsszavak mindegyik\u00e9t\n figyelembe veszi, \u00edgy azok az oldalak, melyek nem tartalmazz\u00e1k az\n \u00f6sszes kifejez\u00e9st, nem jelennek meg a tal\u00e1lati list\u00e1ban.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "<a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s haszn\u00e1lat\u00e1val k\u00e9sz\u00fclt.", "last updated": "utolj\u00e1ra friss\u00edtve", "Collapse sidebar": "Oldals\u00e1v \u00f6sszez\u00e1r\u00e1sa", "Go": "Ok", "Table Of Contents": "Tartalomjegyz\u00e9k", "Search within %(docstitle)s": "Keres\u00e9s k\u00f6zt\u00fck: %(docstitle)s", "all functions, classes, terms": "\u00f6sszes funkci\u00f3, oszt\u00e1ly \u00e9s kifejez\u00e9s", "Please activate JavaScript to enable the search\n functionality.": "K\u00e9rem enged\u00e9lyezze a JavaScriptet a keres\u0151 funkci\u00f3\n haszn\u00e1lat\u00e1hoz.", "Indices and tables:": "T\u00e1rgymutat\u00f3 \u00e9s t\u00e1bl\u00e1zatok", "lists all sections and subsections": "kilist\u00e1zza az \u00f6sszes fejezetet \u00e9s alfejezetet", "Index pages by letter": "Oldalak ABC sorrendben", "search": "keres\u00e9s", "Permalink to this definition": "Hivatkoz\u00e1s erre a defin\u00edci\u00f3ra", "Previous topic": "El\u0151z\u0151 t\u00e9mak\u00f6r", "Overview": "\u00c1ttekint\u00e9s", "Last updated on %(last_updated)s.": "Utols\u00f3 friss\u00edt\u00e9s %(last_updated)s.", "Searching": "Keres\u00e9s folyamatban", "search this documentation": "keres\u00e9s ebben a dokument\u00e1ci\u00f3ban", "Automatically generated list of changes in version %(version)s": "Automatikusan gener\u00e1lt v\u00e1ltoz\u00e1slista a(z) %(version)s v\u00e1ltozathoz", "Full index on one page": "Teljes t\u00e1rgymutat\u00f3 egy oldalon", "Enter search terms or a module, class or function name.": "Adjon meg egy keresend\u0151 kifejez\u00e9st, modul, oszt\u00e1ly vagy funkci\u00f3 nevet.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Minden jog fenntartva</a> %(copyright)s.", "Library changes": "K\u00f6nyvt\u00e1r v\u00e1ltoz\u00e1sok", "Search Page": "Keres\u00e9s", "Search Results": "Keres\u00e9si Eredm\u00e9nyek"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "hu", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": ", ", "About these documents": "N\u00e9vjegy ezekr\u0151l a dokumentumokr\u00f3l", "Automatically generated list of changes in version %(version)s": "Automatikusan gener\u00e1lt v\u00e1ltoz\u00e1slista a(z) %(version)s v\u00e1ltozathoz", "C API changes": "C API v\u00e1ltoz\u00e1sok", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "Oldals\u00e1v \u00f6sszez\u00e1r\u00e1sa", "Complete Table of Contents": "Teljes tartalomjegyz\u00e9k", "Contents": "Tartalom", "Copyright": "Minden jog fenntartva", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "<a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s haszn\u00e1lat\u00e1val k\u00e9sz\u00fclt.", "Expand sidebar": "Oldals\u00e1v kinyit\u00e1sa", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Err\u0151l az oldalr\u00f3l ind\u00edthatja keres\u00e9seit. \u00cdrja be a kulcsszavakat\n az al\u00e1bbi sz\u00f6vegdobozba, majd kattintson a \"keres\u00e9s\" gombra.\n \u00dcgyeljen arra, hogy a keres\u00e9s megadott kulcsszavak mindegyik\u00e9t\n figyelembe veszi, \u00edgy azok az oldalak, melyek nem tartalmazz\u00e1k az\n \u00f6sszes kifejez\u00e9st, nem jelennek meg a tal\u00e1lati list\u00e1ban.", "Full index on one page": "Teljes t\u00e1rgymutat\u00f3 egy oldalon", "General Index": "\u00c1ltal\u00e1nos t\u00e1rgymutat\u00f3", "Global Module Index": "Teljes modul t\u00e1rgymutat\u00f3", "Go": "Ok", "Hide Search Matches": "Keres\u00e9si Tal\u00e1latok Elrejt\u00e9se", "Index": "T\u00e1rgymutat\u00f3", "Index – %(key)s": "T\u00e1rgymutat\u00f3 – %(key)s", "Index pages by letter": "Oldalak ABC sorrendben", "Indices and tables:": "T\u00e1rgymutat\u00f3 \u00e9s t\u00e1bl\u00e1zatok", "Last updated on %(last_updated)s.": "Utols\u00f3 friss\u00edt\u00e9s %(last_updated)s.", "Library changes": "K\u00f6nyvt\u00e1r v\u00e1ltoz\u00e1sok", "Navigation": "Navig\u00e1ci\u00f3", "Next topic": "K\u00f6vetkez\u0151 t\u00e9mak\u00f6r", "Other changes": "Egy\u00e9b v\u00e1ltoz\u00e1sok", "Overview": "\u00c1ttekint\u00e9s", "Permalink to this definition": "Hivatkoz\u00e1s erre a defin\u00edci\u00f3ra", "Permalink to this headline": "Hivatkoz\u00e1s erre a fejezetc\u00edmre", "Please activate JavaScript to enable the search\n functionality.": "K\u00e9rem enged\u00e9lyezze a JavaScriptet a keres\u0151 funkci\u00f3\n haszn\u00e1lat\u00e1hoz.", "Preparing search...": "Felk\u00e9sz\u00fcl\u00e9s a keres\u00e9sre...", "Previous topic": "El\u0151z\u0151 t\u00e9mak\u00f6r", "Quick search": "Gyorskeres\u00e9s", "Search": "Keres\u00e9s", "Search Page": "Keres\u00e9s", "Search Results": "Keres\u00e9si Eredm\u00e9nyek", "Search finished, found %s page(s) matching the search query.": "A keres\u00e9s befejez\u0151d\u00f6tt, %s oldal egyezik a keres\u00e9si fel\u00e9teleknek.", "Search within %(docstitle)s": "Keres\u00e9s k\u00f6zt\u00fck: %(docstitle)s", "Searching": "Keres\u00e9s folyamatban", "Show Source": "Forr\u00e1s megtekint\u00e9se", "Table Of Contents": "Tartalomjegyz\u00e9k", "This Page": "Ez az Oldal", "Welcome! This is": "\u00dcdv\u00f6z\u00f6lj\u00fck! Ez a", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "A keres\u00e9se nem hozott eredm\u00e9nyt. Ellen\u0151rizze, a megadott kulcsszavakat \u00e9s azt, hogy megfelel\u0151 sz\u00e1m\u00fa kateg\u00f3ria van-e kiv\u00e1lasztva.", "all functions, classes, terms": "\u00f6sszes funkci\u00f3, oszt\u00e1ly \u00e9s kifejez\u00e9s", "can be huge": "nagy lehet", "last updated": "utolj\u00e1ra friss\u00edtve", "lists all sections and subsections": "kilist\u00e1zza az \u00f6sszes fejezetet \u00e9s alfejezetet", "next chapter": "k\u00f6vetkez\u0151 fejezet", "previous chapter": "el\u0151z\u0151 fejezet", "quick access to all modules": "gyors hozz\u00e1f\u00e9r\u00e9s az \u00f6sszes modulhoz", "search": "keres\u00e9s", "search this documentation": "keres\u00e9s ebben a dokument\u00e1ci\u00f3ban", "the documentation for": "dokument\u00e1ci\u00f3"}, "plural_expr": "(n != 1)"}); \ 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 da42b5e10d4..4f960d56f6d 100644 Binary files a/sphinx/locale/hu/LC_MESSAGES/sphinx.mo and b/sphinx/locale/hu/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/hu/LC_MESSAGES/sphinx.po b/sphinx/locale/hu/LC_MESSAGES/sphinx.po index 2ed59645ba6..a7a86a09fcb 100644 --- a/sphinx/locale/hu/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/hu/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -9,62 +9,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Hungarian (http://www.transifex.com/projects/p/sphinx-1/language/hu/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Hungarian (http://www.transifex.com/sphinx-doc/sphinx-1/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "%s. ábra" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "%s. táblázat" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "%s. felsorlás" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s dokumentáció" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "lásd %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "lásd még %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Szimbólumok" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Fejlesztési Javaslatok; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%Y. %m. %d." - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Beépített" @@ -73,64 +53,76 @@ msgstr "Beépített" msgid "Module level" msgstr "Modul szint" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%b %d, %Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Általános tárgymutató" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "nyitóoldal" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "következő" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "előző" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s dokumentáció" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (" -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Fejezet szerző: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Modul szerző: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Kód szerző: " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Szerző: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Paraméterek" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Visszatérési érték" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Visszatérés típusa" @@ -159,12 +151,12 @@ msgstr "%s (C típus)" msgid "%s (C variable)" msgstr "%s (C változó)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "függvény" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "tag" @@ -172,7 +164,7 @@ msgstr "tag" msgid "macro" msgstr "makró" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "típus" @@ -180,59 +172,72 @@ msgstr "típus" msgid "variable" msgstr "változó" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Dob" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ típus)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ tagváltozó)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ függvény)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ osztály)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "%s (C++ enumeráció)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "%s (C++ enumerátor)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "osztály" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "enumeráció" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "enumerátor" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (beépített függvény)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metódus)" @@ -247,7 +252,7 @@ msgstr "%s() (osztály)" msgid "%s (global variable or constant)" msgstr "%s (globális változó vagy konstans)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s attribútum)" @@ -256,116 +261,116 @@ msgstr "%s (%s attribútum)" msgid "Arguments" msgstr "Argumentum" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "adat" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "attribútum" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Változók" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Elmel" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (%s modulban)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (beépített változó)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (%s modulban)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (beépített osztály)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (osztály %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metódus)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statikus metódus)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statikus metódus)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s osztály metódus)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s osztály metódus)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s attribútum)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (modul)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Python Modul Mutató" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "modulok" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Elavult" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "kivétel" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "metódus" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "osztály szintű metódus" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "statikus metódus" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "modul" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (elavult)" @@ -387,188 +392,219 @@ msgstr "direktíva" msgid "role" msgstr "szerepkör" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "környezeti változó; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%sparancssor opció; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "szójegyzék" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "nyelvtani jel" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "referencia cimke" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "környezeti változó" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "program opció" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Tárgymutató" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Modulok" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Keresés" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr " Alapul: %s" +msgid "see %s" +msgstr "lásd %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "lásd még %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Szimbólumok" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "álneve :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[graph: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[graph]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(%s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[source]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Tennivaló" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(Az <<eredeti bejegyzés>> megtalálható a(z) %s, %d sor.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "eredeti bejegyzés" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[docs]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Modul forráskód" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>%s forráskódja</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Áttekintés: modul forráskód" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Az összes modul, melynek forrása elérhető</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Figyelem" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Figyelem" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Veszély" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Hiba" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Tipp" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Fontos" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Megjegyzés" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Lásd még" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Javaslat" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Figyelem" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Új a(z) %s verzióban" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "A %s verzióban változott" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Elavult a(z) %s verzió óta" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "kulcsszó" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operátor" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objektum" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "utasítás" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "beépített függvény" @@ -577,7 +613,7 @@ msgstr "beépített függvény" msgid "Table Of Contents" msgstr "Tartalomjegyzék" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -587,11 +623,7 @@ msgstr "Keresés" msgid "Go" msgstr "Ok" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Adjon meg egy keresendő kifejezést, modul, osztály vagy funkció nevet." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Forrás megtekintése" @@ -639,15 +671,15 @@ msgstr "gyors hozzáférés az összes modulhoz" msgid "all functions, classes, terms" msgstr "összes funkció, osztály és kifejezés" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Tárgymutató – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Teljes tárgymutató egy oldalon" @@ -663,35 +695,35 @@ msgstr "nagy lehet" msgid "Navigation" msgstr "Navigáció" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Keresés köztük: %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Névjegy ezekről a dokumentumokról" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Minden jog fenntartva" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Minden jog fenntartva</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Minden jog fenntartva %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Utolsó frissítés %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -740,13 +772,13 @@ msgstr "keresés" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Keresési Eredmények" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -763,13 +795,13 @@ msgstr "Ez az Oldal" #: 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 "Változások a(z) %(version)s változatban — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -788,33 +820,34 @@ msgstr "C API változások" msgid "Other changes" msgstr "Egyéb változások" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Hivatkozás erre a fejezetcímre" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Hivatkozás erre a definícióra" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Keresési Találatok Elrejtése" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "Keresés folyamatban" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "Felkészülés a keresésre..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "A keresés befejeződött, %s oldal egyezik a keresési felételeknek." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr ", " @@ -831,44 +864,53 @@ msgstr "Oldalsáv összezárása" msgid "Contents" msgstr "Tartalom" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "Permalink erre a kódrészletre" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "Permalink erre a képre" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "Permalink erre a táblázatra" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Kiadás" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Lábjegyzetek" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "folytatás az előző oldalról" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "A következő oldalon folytatódik" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[image: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[image]" diff --git a/sphinx/locale/id/LC_MESSAGES/sphinx.js b/sphinx/locale/id/LC_MESSAGES/sphinx.js index 604d562e867..198e548ceaa 100644 --- a/sphinx/locale/id/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/id/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "id", "plural_expr": "0", "messages": {"Next topic": "Topik berikutnya", "Index": "Indeks", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "Selamat Datang! Ini adalah", "Copyright": "Copyright", "C API changes": "Perubahan API C", "quick access to all modules": "akses cepat semua modul", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "Index Modul Global", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Tidak ada dokumen yang cocok dengan pencarian anda. Pastikan semua kata ditulis dengan benar dan sudah memilih cukup kategori.", "Index – %(key)s": "Index – %(key)s", "General Index": "Indeks Umum", "next chapter": "bab berikutnya", "Search finished, found %s page(s) matching the search query.": "Pencarian selesai, menemukan %s halaman yang cocok dengan kueri pencarian.", "previous chapter": "bab sebelum", "Permalink to this headline": "Link permanen untuk headline ini", "About these documents": "Tentang dokumen ini", "Preparing search...": "Penyiapkan pencarian...", ", in ": ", di", "Navigation": "Navigasi", "Expand sidebar": "Buka sidebar", "the documentation for": "dokumentasi untuk", "Complete Table of Contents": "Daftar Isi Lengkap", "Contents": "Konten", "can be huge": "dapat menjadi besar", "Changes in Version %(version)s — %(docstitle)s": "Perubahan pada Versi %(version)s — %(docstitle)s", "Other changes": "Perubahan lain", "Hide Search Matches": "Sembunyikan Hasil Pencarian", "Quick search": "Pencarian cepat", "Show Source": "Lihat Sumber", "Search": "Pencarian", "This Page": "Halaman Ini", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Dari sini dapat dilakukan pencarian pada dokumentasi. Masukkan\n kata yang dicari pada kotak dibawah dan klik \"search\". Catatan untuk fungsi pencarian\n akan secara otomatis mencari semua kata. Halaman\n yang berisi kata yang sedikat tidak dimunculkan pada daftar hasil.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Dibuat menggunakan <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "terakhir diperbarui", "Collapse sidebar": "Tutup sidebar", "Go": "Go", "Table Of Contents": "Daftar Isi", "Search within %(docstitle)s": "Pencarian dalam %(docstitle)s", "all functions, classes, terms": "semua fungsi, class, term", "Please activate JavaScript to enable the search\n functionality.": "Tolong aktifkan JavaScript untuk melakukan pencarian.\n ", "Indices and tables:": "Index dan tabel:", "lists all sections and subsections": "daftar semua seksi dan subseksi", "Index pages by letter": "Index halaman berdasarkan huruf", "search": "pencarian", "Permalink to this definition": "Link permanen untuk definisi ini", "Previous topic": "Topik sebelum", "Overview": "Tinjauan", "Last updated on %(last_updated)s.": "Terakhir diperbarui pada %(last_updated)s.", "Searching": "Pencarian", "search this documentation": "pencarian pada dokumentasi ini", "Automatically generated list of changes in version %(version)s": "Daftar perubahan dibuat otomatis untuk versi %(version)s", "Full index on one page": "Index penuh dalam satu halaman", "Enter search terms or a module, class or function name.": "Masukkan term pencarian atau nama modul, class atau fungsi.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "Perubahan library", "Search Page": "Pencarian Halaman", "Search Results": "Hasil Pencarian"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "id", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": ", di", "About these documents": "Tentang dokumen ini", "Automatically generated list of changes in version %(version)s": "Daftar perubahan dibuat otomatis untuk versi %(version)s", "C API changes": "Perubahan API C", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "Tutup sidebar", "Complete Table of Contents": "Daftar Isi Lengkap", "Contents": "Konten", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Dibuat menggunakan <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "Buka sidebar", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Dari sini dapat dilakukan pencarian pada dokumentasi. Masukkan\n kata yang dicari pada kotak dibawah dan klik \"search\". Catatan untuk fungsi pencarian\n akan secara otomatis mencari semua kata. Halaman\n yang berisi kata yang sedikat tidak dimunculkan pada daftar hasil.", "Full index on one page": "Index penuh dalam satu halaman", "General Index": "Indeks Umum", "Global Module Index": "Index Modul Global", "Go": "Go", "Hide Search Matches": "Sembunyikan Hasil Pencarian", "Index": "Indeks", "Index – %(key)s": "Index – %(key)s", "Index pages by letter": "Index halaman berdasarkan huruf", "Indices and tables:": "Index dan tabel:", "Last updated on %(last_updated)s.": "Terakhir diperbarui pada %(last_updated)s.", "Library changes": "Perubahan library", "Navigation": "Navigasi", "Next topic": "Topik berikutnya", "Other changes": "Perubahan lain", "Overview": "Tinjauan", "Permalink to this definition": "Link permanen untuk definisi ini", "Permalink to this headline": "Link permanen untuk headline ini", "Please activate JavaScript to enable the search\n functionality.": "Tolong aktifkan JavaScript untuk melakukan pencarian.\n ", "Preparing search...": "Penyiapkan pencarian...", "Previous topic": "Topik sebelum", "Quick search": "Pencarian cepat", "Search": "Pencarian", "Search Page": "Pencarian Halaman", "Search Results": "Hasil Pencarian", "Search finished, found %s page(s) matching the search query.": "Pencarian selesai, menemukan %s halaman yang cocok dengan kueri pencarian.", "Search within %(docstitle)s": "Pencarian dalam %(docstitle)s", "Searching": "Pencarian", "Show Source": "Lihat Sumber", "Table Of Contents": "Daftar Isi", "This Page": "Halaman Ini", "Welcome! This is": "Selamat Datang! Ini adalah", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Tidak ada dokumen yang cocok dengan pencarian anda. Pastikan semua kata ditulis dengan benar dan sudah memilih cukup kategori.", "all functions, classes, terms": "semua fungsi, class, term", "can be huge": "dapat menjadi besar", "last updated": "terakhir diperbarui", "lists all sections and subsections": "daftar semua seksi dan subseksi", "next chapter": "bab berikutnya", "previous chapter": "bab sebelum", "quick access to all modules": "akses cepat semua modul", "search": "pencarian", "search this documentation": "pencarian pada dokumentasi ini", "the documentation for": "dokumentasi untuk"}, "plural_expr": "0"}); \ No newline at end of file diff --git a/sphinx/locale/id/LC_MESSAGES/sphinx.mo b/sphinx/locale/id/LC_MESSAGES/sphinx.mo index c03ae443fea..58b34183b7d 100644 Binary files a/sphinx/locale/id/LC_MESSAGES/sphinx.mo and b/sphinx/locale/id/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/id/LC_MESSAGES/sphinx.po b/sphinx/locale/id/LC_MESSAGES/sphinx.po index eec000f19af..2035f2ca5b1 100644 --- a/sphinx/locale/id/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/id/LC_MESSAGES/sphinx.po @@ -1,70 +1,51 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: +# Arif Budiman <arifpedia@gmail.com>, 2016 # FIRST AUTHOR <EMAIL@ADDRESS>, 2009 # Sakti Dwi Cahyono <54krpl@gmail.com>, 2013,2015 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Indonesian (http://www.transifex.com/projects/p/sphinx-1/language/id/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Indonesian (http://www.transifex.com/sphinx-doc/sphinx-1/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "Gambar. %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "Tabel %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "Daftar %s" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "dokumentasi %s %s" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "lihat %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "lihat juga %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Simbol" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d %B %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Modul Internal" @@ -73,64 +54,76 @@ msgstr "Modul Internal" msgid "Module level" msgstr "Level Modul" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d %b, %Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Indeks Umum" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "index" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "berikut" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "sebelum" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "dokumentasi %s %s" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (dalam " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Penyusun bagian:" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Penyusun modul: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Penulis kode:" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Penyusun: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parameter" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Kembali" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Return type" @@ -159,12 +152,12 @@ msgstr "%s (tipe C)" msgid "%s (C variable)" msgstr "%s (variabel C)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "fungsi" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "anggota" @@ -172,7 +165,7 @@ msgstr "anggota" msgid "macro" msgstr "macro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "tipe" @@ -180,59 +173,72 @@ msgstr "tipe" msgid "variable" msgstr "variabel" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "Parameter Templat" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Throws" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (tipe C++)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (anggota C++)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (fungsi C++)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (class C++)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "%s (C++ enum)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "%s (C++ enumerator)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "class" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "enum" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "enumerator" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (fungsi built-in)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (method %s)" @@ -247,7 +253,7 @@ msgstr "%s() (class)" msgid "%s (global variable or constant)" msgstr "%s (variabel global atau konstan)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (atribut %s)" @@ -256,116 +262,116 @@ msgstr "%s (atribut %s)" msgid "Arguments" msgstr "Argumen" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "data" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "atribut" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Variabel" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Raises" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (di modul %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (variabel built-in)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (di modul %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (class built-in)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (class di %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (method %s.%s)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (method static %s.%s)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (method static %s)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (method class %s.%s)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (method class %s)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (atribut %s.%s)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (module)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Indeks Modul Python" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "modul" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Akan ditinggalkan" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "eksepsi" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "method" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "method class" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "method static" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "modul" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (obsolet)" @@ -387,188 +393,219 @@ msgstr "direktif" msgid "role" msgstr "role" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "variabel environment; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%sopsi command line; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "daftar istilah" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "token grammar" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "label referensi" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "variabel environment" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "opsi program" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Indeks" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Indeks Modul" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Pencarian Halaman" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "lihat %s" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "lihat juga %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Simbol" + +#: sphinx/ext/autodoc.py:1297 #, python-format -msgid " Bases: %s" -msgstr " Bases: %s" +msgid "Bases: %s" +msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "alias dari :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[graph: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[graph]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(di %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[sumber]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Todo" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<original entry>>" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(<<original entry>> terletak pada %s, baris ke %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(<<original entry>> terletak di %s, baris %d.)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "entri asli" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[docs]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Kode modul" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Kode sumber untuk %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Tinjauan: kode modul" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Semua modul dimana kode tersedia</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Pehatian" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Hati-hati" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Bahaya" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Kesalahan" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Hint" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Penting" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Catatan" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "lihat juga" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Tip" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Peringatan" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Baru pada versi %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Berubah pada versi %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Ditinggalkan sejak versi %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "keyword" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "object" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "statement" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "fungsi built-in" @@ -577,7 +614,7 @@ msgstr "fungsi built-in" msgid "Table Of Contents" msgstr "Daftar Isi" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -587,11 +624,7 @@ msgstr "Pencarian" msgid "Go" msgstr "Go" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Masukkan term pencarian atau nama modul, class atau fungsi." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Lihat Sumber" @@ -639,15 +672,15 @@ msgstr "akses cepat semua modul" msgid "all functions, classes, terms" msgstr "semua fungsi, class, term" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Index – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Index penuh dalam satu halaman" @@ -663,35 +696,35 @@ msgstr "dapat menjadi besar" msgid "Navigation" msgstr "Navigasi" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Pencarian dalam %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Tentang dokumen ini" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Terakhir diperbarui pada %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -740,13 +773,13 @@ msgstr "pencarian" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Hasil Pencarian" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -763,13 +796,13 @@ msgstr "Halaman Ini" #: 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 "Perubahan pada Versi %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -788,33 +821,34 @@ msgstr "Perubahan API C" msgid "Other changes" msgstr "Perubahan lain" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Link permanen untuk headline ini" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Link permanen untuk definisi ini" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Sembunyikan Hasil Pencarian" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "Pencarian" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "Penyiapkan pencarian..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Pencarian selesai, menemukan %s halaman yang cocok dengan kueri pencarian." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr ", di" @@ -831,44 +865,53 @@ msgstr "Tutup sidebar" msgid "Contents" msgstr "Konten" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "Link permanen untuk kode ini" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "Link permanen untuk gambar ini" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" -msgstr "" +msgstr "Tautan ke daftar isi ini" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "Link permanen untuk table ini" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Rilis" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "laman" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Catatan kaki" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "lanjutan dari halaman sebelumnya" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Lanjut ke halaman berikutnya" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[gambar: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[gambar]" diff --git a/sphinx/locale/is/LC_MESSAGES/sphinx.js b/sphinx/locale/is/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000000..a3fdfe10b67 --- /dev/null +++ b/sphinx/locale/is/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "is", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "", "Automatically generated list of changes in version %(version)s": "", "C API changes": "", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "", "Contents": "", "Copyright": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Full index on one page": "", "General Index": "", "Global Module Index": "", "Go": "", "Hide Search Matches": "", "Index": "", "Index – %(key)s": "", "Index pages by letter": "", "Indices and tables:": "", "Last updated on %(last_updated)s.": "", "Library changes": "", "Navigation": "", "Next topic": "", "Other changes": "", "Overview": "", "Permalink to this definition": "", "Permalink to this headline": "", "Please activate JavaScript to enable the search\n functionality.": "", "Preparing search...": "", "Previous topic": "", "Quick search": "", "Search": "", "Search Page": "", "Search Results": "", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "", "Searching": "", "Show Source": "", "Table Of Contents": "", "This Page": "", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "", "can be huge": "", "last updated": "", "lists all sections and subsections": "", "next chapter": "", "previous chapter": "", "quick access to all modules": "", "search": "", "search this documentation": "", "the documentation for": ""}, "plural_expr": "(n % 10 != 1 || n % 100 == 11)"}); \ No newline at end of file diff --git a/sphinx/locale/is/LC_MESSAGES/sphinx.mo b/sphinx/locale/is/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000000..20e92b47e65 Binary files /dev/null and b/sphinx/locale/is/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/is/LC_MESSAGES/sphinx.po b/sphinx/locale/is/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000000..09f99f4aa9b --- /dev/null +++ b/sphinx/locale/is/LC_MESSAGES/sphinx.po @@ -0,0 +1,914 @@ +# Translations template for Sphinx. +# Copyright (C) 2016 ORGANIZATION +# This file is distributed under the same license as the Sphinx project. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Sphinx\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Icelandic (http://www.transifex.com/sphinx-doc/sphinx-1/language/is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 +#, python-format +msgid "Fig. %s" +msgstr "" + +#: sphinx/config.py:111 +#, python-format +msgid "Table %s" +msgstr "" + +#: sphinx/config.py:112 +#, python-format +msgid "Listing %s" +msgstr "" + +#: sphinx/roles.py:187 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "" + +#: sphinx/builders/changes.py:75 +msgid "Builtins" +msgstr "" + +#: sphinx/builders/changes.py:77 +msgid "Module level" +msgstr "" + +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 +#, python-format +msgid "%b %d, %Y" +msgstr "" + +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "" + +#: sphinx/builders/html.py:315 +msgid "index" +msgstr "" + +#: sphinx/builders/html.py:377 +msgid "next" +msgstr "" + +#: sphinx/builders/html.py:386 +msgid "previous" +msgstr "" + +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 +msgid " (in " +msgstr "" + +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 +msgid "Section author: " +msgstr "" + +#: sphinx/directives/other.py:151 +msgid "Module author: " +msgstr "" + +#: sphinx/directives/other.py:153 +msgid "Code author: " +msgstr "" + +#: sphinx/directives/other.py:155 +msgid "Author: " +msgstr "" + +#: sphinx/domains/__init__.py:277 +#, python-format +msgid "%s %s" +msgstr "" + +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 +msgid "Parameters" +msgstr "" + +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 +msgid "Returns" +msgstr "" + +#: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 +#: sphinx/domains/python.py:163 +msgid "Return type" +msgstr "" + +#: sphinx/domains/c.py:177 +#, python-format +msgid "%s (C function)" +msgstr "" + +#: sphinx/domains/c.py:179 +#, python-format +msgid "%s (C member)" +msgstr "" + +#: sphinx/domains/c.py:181 +#, python-format +msgid "%s (C macro)" +msgstr "" + +#: sphinx/domains/c.py:183 +#, python-format +msgid "%s (C type)" +msgstr "" + +#: sphinx/domains/c.py:185 +#, python-format +msgid "%s (C variable)" +msgstr "" + +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 +msgid "function" +msgstr "" + +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 +msgid "member" +msgstr "" + +#: sphinx/domains/c.py:244 +msgid "macro" +msgstr "" + +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 +msgid "type" +msgstr "" + +#: sphinx/domains/c.py:246 +msgid "variable" +msgstr "" + +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "" + +#: sphinx/domains/cpp.py:4205 +#, python-format +msgid "%s (C++ type)" +msgstr "" + +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 +#, python-format +msgid "%s (C++ member)" +msgstr "" + +#: sphinx/domains/cpp.py:4238 +#, python-format +msgid "%s (C++ function)" +msgstr "" + +#: sphinx/domains/cpp.py:4249 +#, python-format +msgid "%s (C++ class)" +msgstr "" + +#: sphinx/domains/cpp.py:4260 +#, python-format +msgid "%s (C++ enum)" +msgstr "" + +#: sphinx/domains/cpp.py:4281 +#, python-format +msgid "%s (C++ enumerator)" +msgstr "" + +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 +msgid "class" +msgstr "" + +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 +msgid "enum" +msgstr "" + +#: sphinx/domains/cpp.py:4423 +msgid "enumerator" +msgstr "" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 +#, python-format +msgid "%s() (built-in function)" +msgstr "" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 +#, python-format +msgid "%s() (%s method)" +msgstr "" + +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 +#, python-format +msgid "%s (%s attribute)" +msgstr "" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "" + +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 +msgid "data" +msgstr "" + +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 +msgid "attribute" +msgstr "" + +#: sphinx/domains/python.py:154 +msgid "Variables" +msgstr "" + +#: sphinx/domains/python.py:158 +msgid "Raises" +msgstr "" + +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 +#, python-format +msgid "%s() (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:311 +#, python-format +msgid "%s (built-in variable)" +msgstr "" + +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 +#, python-format +msgid "%s (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:328 +#, python-format +msgid "%s (built-in class)" +msgstr "" + +#: sphinx/domains/python.py:329 +#, python-format +msgid "%s (class in %s)" +msgstr "" + +#: sphinx/domains/python.py:369 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "" + +#: sphinx/domains/python.py:381 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "" + +#: sphinx/domains/python.py:384 +#, python-format +msgid "%s() (%s static method)" +msgstr "" + +#: sphinx/domains/python.py:394 +#, python-format +msgid "%s() (%s.%s class method)" +msgstr "" + +#: sphinx/domains/python.py:397 +#, python-format +msgid "%s() (%s class method)" +msgstr "" + +#: sphinx/domains/python.py:407 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "" + +#: sphinx/domains/python.py:488 +#, python-format +msgid "%s (module)" +msgstr "" + +#: sphinx/domains/python.py:545 +msgid "Python Module Index" +msgstr "" + +#: sphinx/domains/python.py:546 +msgid "modules" +msgstr "" + +#: sphinx/domains/python.py:592 +msgid "Deprecated" +msgstr "" + +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 +msgid "exception" +msgstr "" + +#: sphinx/domains/python.py:618 +msgid "method" +msgstr "" + +#: sphinx/domains/python.py:619 +msgid "class method" +msgstr "" + +#: sphinx/domains/python.py:620 +msgid "static method" +msgstr "" + +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 +msgid "module" +msgstr "" + +#: sphinx/domains/python.py:787 +msgid " (deprecated)" +msgstr "" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "" + +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 +#, python-format +msgid "environment variable; %s" +msgstr "" + +#: sphinx/domains/std.py:186 +#, python-format +msgid "%scommand line option; %s" +msgstr "" + +#: sphinx/domains/std.py:434 +msgid "glossary term" +msgstr "" + +#: sphinx/domains/std.py:435 +msgid "grammar token" +msgstr "" + +#: sphinx/domains/std.py:436 +msgid "reference label" +msgstr "" + +#: sphinx/domains/std.py:438 +msgid "environment variable" +msgstr "" + +#: sphinx/domains/std.py:439 +msgid "program option" +msgstr "" + +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 +msgid "Index" +msgstr "" + +#: sphinx/domains/std.py:474 +msgid "Module Index" +msgstr "" + +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 +#, python-format +msgid "alias of :class:`%s`" +msgstr "" + +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 +#, python-format +msgid "[graph: %s]" +msgstr "" + +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 +msgid "[graph]" +msgstr "" + +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 +#, python-format +msgid "(in %s v%s)" +msgstr "" + +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 +msgid "[source]" +msgstr "" + +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 +msgid "Todo" +msgstr "" + +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 +#, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" + +#: sphinx/ext/todo.py:146 +msgid "original entry" +msgstr "" + +#: sphinx/ext/viewcode.py:166 +msgid "[docs]" +msgstr "" + +#: sphinx/ext/viewcode.py:180 +msgid "Module code" +msgstr "" + +#: sphinx/ext/viewcode.py:186 +#, python-format +msgid "<h1>Source code for %s</h1>" +msgstr "" + +#: sphinx/ext/viewcode.py:212 +msgid "Overview: module code" +msgstr "" + +#: sphinx/ext/viewcode.py:213 +msgid "<h1>All modules for which code is available</h1>" +msgstr "" + +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 +msgid "Attention" +msgstr "" + +#: sphinx/locale/__init__.py:160 +msgid "Caution" +msgstr "" + +#: sphinx/locale/__init__.py:161 +msgid "Danger" +msgstr "" + +#: sphinx/locale/__init__.py:162 +msgid "Error" +msgstr "" + +#: sphinx/locale/__init__.py:163 +msgid "Hint" +msgstr "" + +#: sphinx/locale/__init__.py:164 +msgid "Important" +msgstr "" + +#: sphinx/locale/__init__.py:165 +msgid "Note" +msgstr "" + +#: sphinx/locale/__init__.py:166 +msgid "See also" +msgstr "" + +#: sphinx/locale/__init__.py:167 +msgid "Tip" +msgstr "" + +#: sphinx/locale/__init__.py:168 +msgid "Warning" +msgstr "" + +#: sphinx/locale/__init__.py:172 +#, python-format +msgid "New in version %s" +msgstr "" + +#: sphinx/locale/__init__.py:173 +#, python-format +msgid "Changed in version %s" +msgstr "" + +#: sphinx/locale/__init__.py:174 +#, python-format +msgid "Deprecated since version %s" +msgstr "" + +#: sphinx/locale/__init__.py:180 +msgid "keyword" +msgstr "" + +#: sphinx/locale/__init__.py:181 +msgid "operator" +msgstr "" + +#: sphinx/locale/__init__.py:182 +msgid "object" +msgstr "" + +#: sphinx/locale/__init__.py:184 +msgid "statement" +msgstr "" + +#: sphinx/locale/__init__.py:185 +msgid "built-in function" +msgstr "" + +#: sphinx/themes/agogo/layout.html:46 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:11 sphinx/themes/scrolls/layout.html:35 +msgid "Table Of Contents" +msgstr "" + +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/searchresults.html:10 +msgid "Search" +msgstr "" + +#: sphinx/themes/agogo/layout.html:54 sphinx/themes/basic/searchbox.html:15 +msgid "Go" +msgstr "" + +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 +msgid "Show Source" +msgstr "" + +#: sphinx/themes/basic/defindex.html:11 +msgid "Overview" +msgstr "" + +#: sphinx/themes/basic/defindex.html:15 +msgid "Welcome! This is" +msgstr "" + +#: sphinx/themes/basic/defindex.html:16 +msgid "the documentation for" +msgstr "" + +#: sphinx/themes/basic/defindex.html:17 +msgid "last updated" +msgstr "" + +#: sphinx/themes/basic/defindex.html:20 +msgid "Indices and tables:" +msgstr "" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "" + +#: sphinx/themes/basic/defindex.html:28 +msgid "Global Module Index" +msgstr "" + +#: sphinx/themes/basic/defindex.html:29 +msgid "quick access to all modules" +msgstr "" + +#: sphinx/themes/basic/defindex.html:31 +msgid "all functions, classes, terms" +msgstr "" + +#: sphinx/themes/basic/genindex-single.html:33 +#, python-format +msgid "Index – %(key)s" +msgstr "" + +#: sphinx/themes/basic/genindex-single.html:61 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:72 +msgid "Full index on one page" +msgstr "" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "" + +#: sphinx/themes/basic/layout.html:29 +msgid "Navigation" +msgstr "" + +#: sphinx/themes/basic/layout.html:123 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/layout.html:132 +msgid "About these documents" +msgstr "" + +#: sphinx/themes/basic/layout.html:141 +msgid "Copyright" +msgstr "" + +#: sphinx/themes/basic/layout.html:186 +#, python-format +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:188 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:192 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "" +"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "" + +#: sphinx/themes/basic/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/relations.html:11 +msgid "Previous topic" +msgstr "" + +#: sphinx/themes/basic/relations.html:13 +msgid "previous chapter" +msgstr "" + +#: sphinx/themes/basic/relations.html:16 +msgid "Next topic" +msgstr "" + +#: sphinx/themes/basic/relations.html:18 +msgid "next chapter" +msgstr "" + +#: sphinx/themes/basic/search.html:27 +msgid "" +"Please activate JavaScript to enable the search\n" +" functionality." +msgstr "" + +#: sphinx/themes/basic/search.html:32 +msgid "" +"From here you can search these documents. Enter your search\n" +" words into the box below and click \"search\". Note that the search\n" +" 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:39 +#: sphinx/themes/basic/searchresults.html:17 +msgid "search" +msgstr "" + +#: sphinx/themes/basic/search.html:43 +#: sphinx/themes/basic/searchresults.html:21 +#: sphinx/themes/basic/static/searchtools.js_t:287 +msgid "Search Results" +msgstr "" + +#: sphinx/themes/basic/search.html:45 +#: sphinx/themes/basic/searchresults.html:23 +#: sphinx/themes/basic/static/searchtools.js_t:289 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" + +#: sphinx/themes/basic/searchbox.html:12 +msgid "Quick search" +msgstr "" + +#: sphinx/themes/basic/sourcelink.html:12 +msgid "This Page" +msgstr "" + +#: 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 "" + +#: sphinx/themes/basic/changes/rstsource.html:5 +#, python-format +msgid "%(filename)s — %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:17 +#, python-format +msgid "Automatically generated list of changes in version %(version)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 +msgid "Permalink to this headline" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 +msgid "Permalink to this definition" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:208 +msgid "Hide Search Matches" +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:121 +msgid "Searching" +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:126 +msgid "Preparing search..." +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:291 +#, python-format +msgid "Search finished, found %s page(s) matching the search query." +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:344 +msgid ", in " +msgstr "" + +#: sphinx/themes/classic/static/sidebar.js_t:83 +msgid "Expand sidebar" +msgstr "" + +#: sphinx/themes/classic/static/sidebar.js_t:96 +#: sphinx/themes/classic/static/sidebar.js_t:124 +msgid "Collapse sidebar" +msgstr "" + +#: sphinx/themes/haiku/layout.html:24 +msgid "Contents" +msgstr "" + +#: sphinx/writers/html.py:389 +msgid "Permalink to this code" +msgstr "" + +#: sphinx/writers/html.py:393 +msgid "Permalink to this image" +msgstr "" + +#: sphinx/writers/html.py:395 +msgid "Permalink to this toctree" +msgstr "" + +#: sphinx/writers/html.py:717 +msgid "Permalink to this table" +msgstr "" + +#: sphinx/writers/latex.py:380 +msgid "Release" +msgstr "" + +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 +msgid "Footnotes" +msgstr "" + +#: sphinx/writers/latex.py:1112 +msgid "continued from previous page" +msgstr "" + +#: sphinx/writers/latex.py:1118 +msgid "Continued on next page" +msgstr "" + +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 +#, python-format +msgid "[image: %s]" +msgstr "" + +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 +msgid "[image]" +msgstr "" diff --git a/sphinx/locale/it/LC_MESSAGES/sphinx.js b/sphinx/locale/it/LC_MESSAGES/sphinx.js index 7d158cd620d..0afca4dc788 100644 --- a/sphinx/locale/it/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/it/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "it", "plural_expr": "(n != 1)", "messages": {"Next topic": "Argomento successivo", "Index": "Indice", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "Benvenuto! Questa \u00e8", "Copyright": "Copyright", "C API changes": "Modifiche nelle API C", "quick access to all modules": "accesso veloce ai moduli", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "Indice dei moduli", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "La tua ricerca non corrisponde a nessun documento. Verifica che tutte le parole siano scritte correttamente e di aver scelto un numero sufficiente di categorie.", "Index – %(key)s": "Indice – %(key)s", "General Index": "Indice generale", "next chapter": "capitolo successivo", "Search finished, found %s page(s) matching the search query.": "Ricerca completata, trovata/e %s pagina/e corrispondenti.", "previous chapter": "capitolo precedente", "Permalink to this headline": "Link a questa intestazione", "About these documents": "A proposito di questi documenti", "Preparing search...": "Preparo la ricerca...", ", in ": ", in", "Navigation": "Navigazione", "Expand sidebar": "Espandi la barra laterale", "the documentation for": "la documentazione per", "Complete Table of Contents": "Tabella dei contenuti completa", "Contents": "Contenuti", "can be huge": "pu\u00f2 essere enorme", "Changes in Version %(version)s — %(docstitle)s": "Modifiche nella Versione %(version)s — %(docstitle)s", "Other changes": "Altre modifiche", "Hide Search Matches": "Nascondi i risultati della ricerca", "Quick search": "Ricerca veloce", "Show Source": "Mostra sorgente", "Search": "Cerca", "This Page": "Questa pagina", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Puoi effettuare una ricerca in questi documenti. Immetti le parole chiave \n della tua ricerca nel riquadro sottostante \"cerca\". Nota che la funzione\n di ricerca cerca automaticamente per tutte le parole. Le pagine\n che contendono meno parole non compariranno nei risultati di ricerca.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Creato con <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "ultimo aggiornamento", "Collapse sidebar": "Comprimi la barra laterale", "Go": "Vai", "Table Of Contents": "Tabella dei contenuti", "Search within %(docstitle)s": "Cerca in %(docstitle)s", "all functions, classes, terms": "tutte le funzioni, classi e moduli", "Please activate JavaScript to enable the search\n functionality.": "Attiva JavaScript per abilitare la funzione\u23ce\ndi ricerca.", "Indices and tables:": "Indici e tabelle:", "lists all sections and subsections": "elenca l'insieme delle sezioni e sottosezioni", "Index pages by letter": "Indice delle pagine per lettera", "search": "cerca", "Permalink to this definition": "Link a questa definizione", "Previous topic": "Argomento precedente", "Overview": "Sintesi", "Last updated on %(last_updated)s.": "Ultimo aggiornamento %(last_updated)s.", "Searching": "Cerca", "search this documentation": "cerca in questa documentazione", "Automatically generated list of changes in version %(version)s": "Lista delle modifiche generata automaticamente nella versione %(version)s", "Full index on one page": "Indice completo in una pagina", "Enter search terms or a module, class or function name.": "Inserisci un termine di ricerca un modulo, classe o nome di funzione", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "Modifiche nella libreria", "Search Page": "Cerca", "Search Results": "Risultati della ricerca"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "it", "messages": {"%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", ", in ": ", in ", "About these documents": "A proposito di questi documenti", "Automatically generated list of changes in version %(version)s": "Lista delle modifiche generata automaticamente nella versione %(version)s", "C API changes": "Modifiche nelle API C", "Changes in Version %(version)s — %(docstitle)s": "Cambiamenti nella Versione %(version)s — %(docstitle)s", "Collapse sidebar": "Comprimi la barra laterale", "Complete Table of Contents": "Tabella dei contenuti completa", "Contents": "Contenuti", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Creato con <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "Espandi la barra laterale", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Puoi effettuare una ricerca in questi documenti. Immetti le parole chiave \n della tua ricerca nel riquadro sottostante \"cerca\". Nota che la funzione\n di ricerca cerca automaticamente per tutte le parole. Le pagine\n che contendono meno parole non compariranno nei risultati di ricerca.", "Full index on one page": "Indice completo in una pagina", "General Index": "Indice generale", "Global Module Index": "Indice dei moduli", "Go": "Vai", "Hide Search Matches": "Nascondi i risultati della ricerca", "Index": "Indice", "Index – %(key)s": "Indice – %(key)s", "Index pages by letter": "Indice delle pagine per lettera", "Indices and tables:": "Indici e tabelle:", "Last updated on %(last_updated)s.": "Ultimo aggiornamento %(last_updated)s.", "Library changes": "Modifiche nella libreria", "Navigation": "Navigazione", "Next topic": "Argomento successivo", "Other changes": "Altre modifiche", "Overview": "Sintesi", "Permalink to this definition": "Link a questa definizione", "Permalink to this headline": "Link a questa intestazione", "Please activate JavaScript to enable the search\n functionality.": "Attiva JavaScript per abilitare la funzione\u23ce\ndi ricerca.", "Preparing search...": "Preparo la ricerca...", "Previous topic": "Argomento precedente", "Quick search": "Ricerca veloce", "Search": "Cerca", "Search Page": "Cerca", "Search Results": "Risultati della ricerca", "Search finished, found %s page(s) matching the search query.": "Ricerca completata, trovata/e %s pagina/e corrispondenti.", "Search within %(docstitle)s": "Cerca in %(docstitle)s", "Searching": "Cerca", "Show Source": "Mostra sorgente", "Table Of Contents": "Tabella dei contenuti", "This Page": "Questa pagina", "Welcome! This is": "Benvenuto! Questa \u00e8", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "La tua ricerca non corrisponde a nessun documento. Verifica che tutte le parole siano scritte correttamente e di aver scelto un numero sufficiente di categorie.", "all functions, classes, terms": "tutte le funzioni, classi e moduli", "can be huge": "pu\u00f2 essere enorme", "last updated": "ultimo aggiornamento", "lists all sections and subsections": "elenca l'insieme delle sezioni e sottosezioni", "next chapter": "capitolo successivo", "previous chapter": "capitolo precedente", "quick access to all modules": "accesso veloce ai moduli", "search": "cerca", "search this documentation": "cerca in questa documentazione", "the documentation for": "la documentazione per"}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/it/LC_MESSAGES/sphinx.mo b/sphinx/locale/it/LC_MESSAGES/sphinx.mo index f8f35e3cf43..083be7f4735 100644 Binary files a/sphinx/locale/it/LC_MESSAGES/sphinx.mo and b/sphinx/locale/it/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/it/LC_MESSAGES/sphinx.po b/sphinx/locale/it/LC_MESSAGES/sphinx.po index 8577e08dfc4..7ed76b9208e 100644 --- a/sphinx/locale/it/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/it/LC_MESSAGES/sphinx.po @@ -1,71 +1,52 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: -# Paolo Cavallini <cavallini@faunalia.it>, 2013-2015 +# Paolo Cavallini <cavallini@faunalia.it>, 2013-2016 # Roland Puntaier <roland.puntaier@chello.at>, 2013 # Sandro Dentella <sandro@e-den.it>, 2008 +# Takeshi KOMIYA <i.tkomiya@gmail.com>, 2016 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Italian (http://www.transifex.com/projects/p/sphinx-1/language/it/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-11 15:49+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Italian (http://www.transifex.com/sphinx-doc/sphinx-1/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "Sezione %s" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "Fig. %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "Tabella %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "Listato %s" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s documentazione" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "vedi %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "vedi anche %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Simboli" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d %B %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Builtins" @@ -74,64 +55,76 @@ msgstr "Builtins" msgid "Module level" msgstr "Al livello del modulo" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d/%b/%Y" +msgstr "%d %b %Y" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Indice generale" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "indice" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "successivo" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "precedente" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s documentazione" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (in " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "Didascalia non valida: %s" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Autore della sezione: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Autore del modulo: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Autore del codice: " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Autore: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parametri" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Ritorna" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Tipo di ritorno" @@ -160,12 +153,12 @@ msgstr "%s (tipo C)" msgid "%s (C variable)" msgstr "%s (variabile C)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "funzione" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "membro" @@ -173,7 +166,7 @@ msgstr "membro" msgid "macro" msgstr "macro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "tipo" @@ -181,59 +174,72 @@ msgstr "tipo" msgid "variable" msgstr "variabile" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "Parametri del modello" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Solleva" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (tipo C++)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "%s (concetto C++)" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (membro C++)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (funzione C++)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (classe C++)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "%s (enum C++)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "%s (enumeratore C++)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "classe" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "concetto" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "enum" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "enumeratore" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (funzione built-in)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metodo)" @@ -248,7 +254,7 @@ msgstr "%s() (classe)" msgid "%s (global variable or constant)" msgstr "%s (variabile globale o costante)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s attributo)" @@ -257,116 +263,116 @@ msgstr "%s (%s attributo)" msgid "Arguments" msgstr "Parametri" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "dati" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "attributo" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Variabili" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Solleva" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (nel modulo %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (variabile built-in)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (nel modulo %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (classe built-in)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (classe in %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metodo)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s metodo statico)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s metodo statico)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s metodo della classe)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s metodo della classe)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s attributo)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (modulo)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Indice del modulo Python" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "moduli" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Deprecato" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "eccezione" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "metodo" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "metodo della classe" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "metodo statico" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "modulo" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (deprecato)" @@ -388,188 +394,219 @@ msgstr "direttiva" msgid "role" msgstr "ruolo" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "variabile d'ambiente, %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%sopzione di linea di comando; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "voce del glossario" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "elemento grammaticale" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "etichetta di riferimento" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "variabile d'ambiente" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "opzione del programma" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Indice" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Indice dei Moduli" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Cerca" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "vedi %s" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "vedi anche %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Simboli" + +#: sphinx/ext/autodoc.py:1297 #, python-format -msgid " Bases: %s" -msgstr "Basi: %s" +msgid "Bases: %s" +msgstr " Basi: %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "alias per :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[grafico: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[grafico]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "Permalink a questa equazione" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(in %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[sorgente]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "etichetta dell'equazione %s duplicata, altra istanza in %s" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Da fare" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<elemento originale>>" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(La <<riga originale>> si trova in %s, linea %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(L'<<elemento originale>> si trova in %s, linea %d.)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "riga originale" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[documenti]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Codice del modulo" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Codice sorgente per %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Vista generale: codice del modulo" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Tutti i moduli di cui è disponibile il codice</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "Argomenti parole chiave" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Attenzione" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Attenzione" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Pericolo" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Errore" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Consiglio" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Importante" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Nota" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Vedi anche" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Suggerimento" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Avvertimento" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Nuovo nella versione %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Cambiato nella versione %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Deprecato dalla versione %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "keyword" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operatore" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "oggetto" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "statement" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "funzione built-in" @@ -578,7 +615,7 @@ msgstr "funzione built-in" msgid "Table Of Contents" msgstr "Tabella dei contenuti" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -588,11 +625,7 @@ msgstr "Cerca" msgid "Go" msgstr "Vai" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Inserisci un termine di ricerca un modulo, classe o nome di funzione" - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Mostra sorgente" @@ -640,15 +673,15 @@ msgstr "accesso veloce ai moduli" msgid "all functions, classes, terms" msgstr "tutte le funzioni, classi e moduli" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Indice – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Indice completo in una pagina" @@ -664,35 +697,35 @@ msgstr "può essere enorme" msgid "Navigation" msgstr "Navigazione" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Cerca in %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "A proposito di questi documenti" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Ultimo aggiornamento %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -741,13 +774,13 @@ msgstr "cerca" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Risultati della ricerca" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -764,13 +797,13 @@ msgstr "Questa pagina" #: 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 "Modifiche nella Versione %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "Cambiamenti nella Versione %(version)s — %(docstitle)s" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "%(filename)s — %(docstitle)s" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -789,35 +822,36 @@ msgstr "Modifiche nelle API C" msgid "Other changes" msgstr "Altre modifiche" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Link a questa intestazione" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Link a questa definizione" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Nascondi i risultati della ricerca" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "Cerca" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "Preparo la ricerca..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Ricerca completata, trovata/e %s pagina/e corrispondenti." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " -msgstr ", in" +msgstr ", in " #: sphinx/themes/classic/static/sidebar.js_t:83 msgid "Expand sidebar" @@ -832,44 +866,53 @@ msgstr "Comprimi la barra laterale" msgid "Contents" msgstr "Contenuti" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "Link a questo codice" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "Link a questa immagine" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" -msgstr "" +msgstr "Link a questo indice" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "Link a questa tabella" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Release" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "pagina" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "Chiave di configurazione sconosciuta: latex_elements[%r] è ignorata." + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Note a piè di pagina" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "continua dalla pagina precedente" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Continua alla pagina successiva" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[immagine: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[immagine]" diff --git a/sphinx/locale/it_IT/LC_MESSAGES/sphinx.js b/sphinx/locale/it_IT/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000000..8c89bc811d4 --- /dev/null +++ b/sphinx/locale/it_IT/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "it_IT", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "", "Automatically generated list of changes in version %(version)s": "", "C API changes": "", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "", "Contents": "", "Copyright": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Full index on one page": "", "General Index": "", "Global Module Index": "", "Go": "", "Hide Search Matches": "", "Index": "", "Index – %(key)s": "", "Index pages by letter": "", "Indices and tables:": "", "Last updated on %(last_updated)s.": "", "Library changes": "", "Navigation": "", "Next topic": "", "Other changes": "", "Overview": "", "Permalink to this definition": "", "Permalink to this headline": "", "Please activate JavaScript to enable the search\n functionality.": "", "Preparing search...": "", "Previous topic": "", "Quick search": "", "Search": "", "Search Page": "", "Search Results": "", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "", "Searching": "", "Show Source": "", "Table Of Contents": "", "This Page": "", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "", "can be huge": "", "last updated": "", "lists all sections and subsections": "", "next chapter": "", "previous chapter": "", "quick access to all modules": "", "search": "", "search this documentation": "", "the documentation for": ""}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/it_IT/LC_MESSAGES/sphinx.mo b/sphinx/locale/it_IT/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000000..0e90f737598 Binary files /dev/null and b/sphinx/locale/it_IT/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/it_IT/LC_MESSAGES/sphinx.po b/sphinx/locale/it_IT/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000000..7e2891b7d10 --- /dev/null +++ b/sphinx/locale/it_IT/LC_MESSAGES/sphinx.po @@ -0,0 +1,914 @@ +# Translations template for Sphinx. +# Copyright (C) 2016 ORGANIZATION +# This file is distributed under the same license as the Sphinx project. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Sphinx\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2013-04-02 08:44+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Italian (Italy) (http://www.transifex.com/sphinx-doc/sphinx-1/language/it_IT/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" +"Language: it_IT\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 +#, python-format +msgid "Fig. %s" +msgstr "" + +#: sphinx/config.py:111 +#, python-format +msgid "Table %s" +msgstr "" + +#: sphinx/config.py:112 +#, python-format +msgid "Listing %s" +msgstr "" + +#: sphinx/roles.py:187 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "" + +#: sphinx/builders/changes.py:75 +msgid "Builtins" +msgstr "" + +#: sphinx/builders/changes.py:77 +msgid "Module level" +msgstr "" + +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 +#, python-format +msgid "%b %d, %Y" +msgstr "" + +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "" + +#: sphinx/builders/html.py:315 +msgid "index" +msgstr "" + +#: sphinx/builders/html.py:377 +msgid "next" +msgstr "" + +#: sphinx/builders/html.py:386 +msgid "previous" +msgstr "" + +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 +msgid " (in " +msgstr "" + +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 +msgid "Section author: " +msgstr "" + +#: sphinx/directives/other.py:151 +msgid "Module author: " +msgstr "" + +#: sphinx/directives/other.py:153 +msgid "Code author: " +msgstr "" + +#: sphinx/directives/other.py:155 +msgid "Author: " +msgstr "" + +#: sphinx/domains/__init__.py:277 +#, python-format +msgid "%s %s" +msgstr "" + +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 +msgid "Parameters" +msgstr "" + +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 +msgid "Returns" +msgstr "" + +#: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 +#: sphinx/domains/python.py:163 +msgid "Return type" +msgstr "" + +#: sphinx/domains/c.py:177 +#, python-format +msgid "%s (C function)" +msgstr "" + +#: sphinx/domains/c.py:179 +#, python-format +msgid "%s (C member)" +msgstr "" + +#: sphinx/domains/c.py:181 +#, python-format +msgid "%s (C macro)" +msgstr "" + +#: sphinx/domains/c.py:183 +#, python-format +msgid "%s (C type)" +msgstr "" + +#: sphinx/domains/c.py:185 +#, python-format +msgid "%s (C variable)" +msgstr "" + +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 +msgid "function" +msgstr "" + +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 +msgid "member" +msgstr "" + +#: sphinx/domains/c.py:244 +msgid "macro" +msgstr "" + +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 +msgid "type" +msgstr "" + +#: sphinx/domains/c.py:246 +msgid "variable" +msgstr "" + +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "" + +#: sphinx/domains/cpp.py:4205 +#, python-format +msgid "%s (C++ type)" +msgstr "" + +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 +#, python-format +msgid "%s (C++ member)" +msgstr "" + +#: sphinx/domains/cpp.py:4238 +#, python-format +msgid "%s (C++ function)" +msgstr "" + +#: sphinx/domains/cpp.py:4249 +#, python-format +msgid "%s (C++ class)" +msgstr "" + +#: sphinx/domains/cpp.py:4260 +#, python-format +msgid "%s (C++ enum)" +msgstr "" + +#: sphinx/domains/cpp.py:4281 +#, python-format +msgid "%s (C++ enumerator)" +msgstr "" + +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 +msgid "class" +msgstr "" + +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 +msgid "enum" +msgstr "" + +#: sphinx/domains/cpp.py:4423 +msgid "enumerator" +msgstr "" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 +#, python-format +msgid "%s() (built-in function)" +msgstr "" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 +#, python-format +msgid "%s() (%s method)" +msgstr "" + +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 +#, python-format +msgid "%s (%s attribute)" +msgstr "" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "" + +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 +msgid "data" +msgstr "" + +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 +msgid "attribute" +msgstr "" + +#: sphinx/domains/python.py:154 +msgid "Variables" +msgstr "" + +#: sphinx/domains/python.py:158 +msgid "Raises" +msgstr "" + +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 +#, python-format +msgid "%s() (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:311 +#, python-format +msgid "%s (built-in variable)" +msgstr "" + +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 +#, python-format +msgid "%s (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:328 +#, python-format +msgid "%s (built-in class)" +msgstr "" + +#: sphinx/domains/python.py:329 +#, python-format +msgid "%s (class in %s)" +msgstr "" + +#: sphinx/domains/python.py:369 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "" + +#: sphinx/domains/python.py:381 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "" + +#: sphinx/domains/python.py:384 +#, python-format +msgid "%s() (%s static method)" +msgstr "" + +#: sphinx/domains/python.py:394 +#, python-format +msgid "%s() (%s.%s class method)" +msgstr "" + +#: sphinx/domains/python.py:397 +#, python-format +msgid "%s() (%s class method)" +msgstr "" + +#: sphinx/domains/python.py:407 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "" + +#: sphinx/domains/python.py:488 +#, python-format +msgid "%s (module)" +msgstr "" + +#: sphinx/domains/python.py:545 +msgid "Python Module Index" +msgstr "" + +#: sphinx/domains/python.py:546 +msgid "modules" +msgstr "" + +#: sphinx/domains/python.py:592 +msgid "Deprecated" +msgstr "" + +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 +msgid "exception" +msgstr "" + +#: sphinx/domains/python.py:618 +msgid "method" +msgstr "" + +#: sphinx/domains/python.py:619 +msgid "class method" +msgstr "" + +#: sphinx/domains/python.py:620 +msgid "static method" +msgstr "" + +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 +msgid "module" +msgstr "" + +#: sphinx/domains/python.py:787 +msgid " (deprecated)" +msgstr "" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "" + +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 +#, python-format +msgid "environment variable; %s" +msgstr "" + +#: sphinx/domains/std.py:186 +#, python-format +msgid "%scommand line option; %s" +msgstr "" + +#: sphinx/domains/std.py:434 +msgid "glossary term" +msgstr "" + +#: sphinx/domains/std.py:435 +msgid "grammar token" +msgstr "" + +#: sphinx/domains/std.py:436 +msgid "reference label" +msgstr "" + +#: sphinx/domains/std.py:438 +msgid "environment variable" +msgstr "" + +#: sphinx/domains/std.py:439 +msgid "program option" +msgstr "" + +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 +msgid "Index" +msgstr "" + +#: sphinx/domains/std.py:474 +msgid "Module Index" +msgstr "" + +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 +#, python-format +msgid "alias of :class:`%s`" +msgstr "" + +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 +#, python-format +msgid "[graph: %s]" +msgstr "" + +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 +msgid "[graph]" +msgstr "" + +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 +#, python-format +msgid "(in %s v%s)" +msgstr "" + +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 +msgid "[source]" +msgstr "" + +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 +msgid "Todo" +msgstr "" + +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 +#, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" + +#: sphinx/ext/todo.py:146 +msgid "original entry" +msgstr "" + +#: sphinx/ext/viewcode.py:166 +msgid "[docs]" +msgstr "" + +#: sphinx/ext/viewcode.py:180 +msgid "Module code" +msgstr "" + +#: sphinx/ext/viewcode.py:186 +#, python-format +msgid "<h1>Source code for %s</h1>" +msgstr "" + +#: sphinx/ext/viewcode.py:212 +msgid "Overview: module code" +msgstr "" + +#: sphinx/ext/viewcode.py:213 +msgid "<h1>All modules for which code is available</h1>" +msgstr "" + +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 +msgid "Attention" +msgstr "" + +#: sphinx/locale/__init__.py:160 +msgid "Caution" +msgstr "" + +#: sphinx/locale/__init__.py:161 +msgid "Danger" +msgstr "" + +#: sphinx/locale/__init__.py:162 +msgid "Error" +msgstr "" + +#: sphinx/locale/__init__.py:163 +msgid "Hint" +msgstr "" + +#: sphinx/locale/__init__.py:164 +msgid "Important" +msgstr "" + +#: sphinx/locale/__init__.py:165 +msgid "Note" +msgstr "" + +#: sphinx/locale/__init__.py:166 +msgid "See also" +msgstr "" + +#: sphinx/locale/__init__.py:167 +msgid "Tip" +msgstr "" + +#: sphinx/locale/__init__.py:168 +msgid "Warning" +msgstr "" + +#: sphinx/locale/__init__.py:172 +#, python-format +msgid "New in version %s" +msgstr "" + +#: sphinx/locale/__init__.py:173 +#, python-format +msgid "Changed in version %s" +msgstr "" + +#: sphinx/locale/__init__.py:174 +#, python-format +msgid "Deprecated since version %s" +msgstr "" + +#: sphinx/locale/__init__.py:180 +msgid "keyword" +msgstr "" + +#: sphinx/locale/__init__.py:181 +msgid "operator" +msgstr "" + +#: sphinx/locale/__init__.py:182 +msgid "object" +msgstr "" + +#: sphinx/locale/__init__.py:184 +msgid "statement" +msgstr "" + +#: sphinx/locale/__init__.py:185 +msgid "built-in function" +msgstr "" + +#: sphinx/themes/agogo/layout.html:46 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:11 sphinx/themes/scrolls/layout.html:35 +msgid "Table Of Contents" +msgstr "" + +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/searchresults.html:10 +msgid "Search" +msgstr "" + +#: sphinx/themes/agogo/layout.html:54 sphinx/themes/basic/searchbox.html:15 +msgid "Go" +msgstr "" + +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 +msgid "Show Source" +msgstr "" + +#: sphinx/themes/basic/defindex.html:11 +msgid "Overview" +msgstr "" + +#: sphinx/themes/basic/defindex.html:15 +msgid "Welcome! This is" +msgstr "" + +#: sphinx/themes/basic/defindex.html:16 +msgid "the documentation for" +msgstr "" + +#: sphinx/themes/basic/defindex.html:17 +msgid "last updated" +msgstr "" + +#: sphinx/themes/basic/defindex.html:20 +msgid "Indices and tables:" +msgstr "" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "" + +#: sphinx/themes/basic/defindex.html:28 +msgid "Global Module Index" +msgstr "" + +#: sphinx/themes/basic/defindex.html:29 +msgid "quick access to all modules" +msgstr "" + +#: sphinx/themes/basic/defindex.html:31 +msgid "all functions, classes, terms" +msgstr "" + +#: sphinx/themes/basic/genindex-single.html:33 +#, python-format +msgid "Index – %(key)s" +msgstr "" + +#: sphinx/themes/basic/genindex-single.html:61 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:72 +msgid "Full index on one page" +msgstr "" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "" + +#: sphinx/themes/basic/layout.html:29 +msgid "Navigation" +msgstr "" + +#: sphinx/themes/basic/layout.html:123 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/layout.html:132 +msgid "About these documents" +msgstr "" + +#: sphinx/themes/basic/layout.html:141 +msgid "Copyright" +msgstr "" + +#: sphinx/themes/basic/layout.html:186 +#, python-format +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:188 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:192 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "" +"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "" + +#: sphinx/themes/basic/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/relations.html:11 +msgid "Previous topic" +msgstr "" + +#: sphinx/themes/basic/relations.html:13 +msgid "previous chapter" +msgstr "" + +#: sphinx/themes/basic/relations.html:16 +msgid "Next topic" +msgstr "" + +#: sphinx/themes/basic/relations.html:18 +msgid "next chapter" +msgstr "" + +#: sphinx/themes/basic/search.html:27 +msgid "" +"Please activate JavaScript to enable the search\n" +" functionality." +msgstr "" + +#: sphinx/themes/basic/search.html:32 +msgid "" +"From here you can search these documents. Enter your search\n" +" words into the box below and click \"search\". Note that the search\n" +" 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:39 +#: sphinx/themes/basic/searchresults.html:17 +msgid "search" +msgstr "" + +#: sphinx/themes/basic/search.html:43 +#: sphinx/themes/basic/searchresults.html:21 +#: sphinx/themes/basic/static/searchtools.js_t:287 +msgid "Search Results" +msgstr "" + +#: sphinx/themes/basic/search.html:45 +#: sphinx/themes/basic/searchresults.html:23 +#: sphinx/themes/basic/static/searchtools.js_t:289 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" + +#: sphinx/themes/basic/searchbox.html:12 +msgid "Quick search" +msgstr "" + +#: sphinx/themes/basic/sourcelink.html:12 +msgid "This Page" +msgstr "" + +#: 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 "" + +#: sphinx/themes/basic/changes/rstsource.html:5 +#, python-format +msgid "%(filename)s — %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:17 +#, python-format +msgid "Automatically generated list of changes in version %(version)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 +msgid "Permalink to this headline" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 +msgid "Permalink to this definition" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:208 +msgid "Hide Search Matches" +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:121 +msgid "Searching" +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:126 +msgid "Preparing search..." +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:291 +#, python-format +msgid "Search finished, found %s page(s) matching the search query." +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:344 +msgid ", in " +msgstr "" + +#: sphinx/themes/classic/static/sidebar.js_t:83 +msgid "Expand sidebar" +msgstr "" + +#: sphinx/themes/classic/static/sidebar.js_t:96 +#: sphinx/themes/classic/static/sidebar.js_t:124 +msgid "Collapse sidebar" +msgstr "" + +#: sphinx/themes/haiku/layout.html:24 +msgid "Contents" +msgstr "" + +#: sphinx/writers/html.py:389 +msgid "Permalink to this code" +msgstr "" + +#: sphinx/writers/html.py:393 +msgid "Permalink to this image" +msgstr "" + +#: sphinx/writers/html.py:395 +msgid "Permalink to this toctree" +msgstr "" + +#: sphinx/writers/html.py:717 +msgid "Permalink to this table" +msgstr "" + +#: sphinx/writers/latex.py:380 +msgid "Release" +msgstr "" + +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 +msgid "Footnotes" +msgstr "" + +#: sphinx/writers/latex.py:1112 +msgid "continued from previous page" +msgstr "" + +#: sphinx/writers/latex.py:1118 +msgid "Continued on next page" +msgstr "" + +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 +#, python-format +msgid "[image: %s]" +msgstr "" + +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 +msgid "[image]" +msgstr "" diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.js b/sphinx/locale/ja/LC_MESSAGES/sphinx.js index d8a3e6d9f4a..d155ce24921 100644 --- a/sphinx/locale/ja/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/ja/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "ja", "plural_expr": "0", "messages": {"Next topic": "\u6b21\u306e\u30c8\u30d4\u30c3\u30af\u3078", "Index": "\u7d22\u5f15", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "Welcome! This is", "Copyright": "\u8457\u4f5c\u6a29", "C API changes": "C API \u306b\u95a2\u3059\u308b\u5909\u66f4", "quick access to all modules": "\u5168\u30e2\u30b8\u30e5\u30fc\u30eb\u65e9\u898b\u8868", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "\u30e2\u30b8\u30e5\u30fc\u30eb\u7dcf\u7d22\u5f15", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u691c\u7d22\u3057\u305f\u6587\u5b57\u5217\u306f\u3069\u306e\u6587\u66f8\u306b\u3082\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3059\u3079\u3066\u306e\u5358\u8a9e\u304c\u6b63\u78ba\u306b\u8a18\u8ff0\u3055\u308c\u3066\u3044\u308b\u304b\u3001\u3042\u308b\u3044\u306f\u3001\u5341\u5206\u306a\u30ab\u30c6\u30b4\u30ea\u30fc\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002", "Index – %(key)s": "\u7d22\u5f15 – %(key)s", "General Index": "\u7dcf\u5408\u7d22\u5f15", "next chapter": "\u6b21\u306e\u7ae0\u3078", "Search finished, found %s page(s) matching the search query.": "\u691c\u7d22\u304c\u5b8c\u4e86\u3057\u3001 %s \u30da\u30fc\u30b8\u898b\u3064\u3051\u307e\u3057\u305f\u3002", "previous chapter": "\u524d\u306e\u7ae0\u3078", "Permalink to this headline": "\u3053\u306e\u30d8\u30c3\u30c9\u30e9\u30a4\u30f3\u3078\u306e\u30d1\u30fc\u30de\u30ea\u30f3\u30af", "About these documents": "\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u3064\u3044\u3066", "Preparing search...": "\u691c\u7d22\u3092\u6e96\u5099\u3057\u3066\u3044\u307e\u3059...", ", in ": ", in ", "Navigation": "\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3", "Expand sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u5c55\u958b", "the documentation for": "the documentation for", "Complete Table of Contents": "\u7dcf\u5408\u76ee\u6b21", "Contents": "\u30b3\u30f3\u30c6\u30f3\u30c4", "can be huge": "\u5927\u304d\u3044\u5834\u5408\u304c\u3042\u308b\u306e\u3067\u6ce8\u610f", "Changes in Version %(version)s — %(docstitle)s": "\u30d0\u30fc\u30b8\u30e7\u30f3 %(version)s \u306e\u5909\u66f4\u70b9 — %(docstitle)s", "Other changes": "\u305d\u306e\u4ed6\u306e\u5909\u66f4", "Hide Search Matches": "\u691c\u7d22\u7d50\u679c\u3092\u96a0\u3059", "Quick search": "\u30af\u30a4\u30c3\u30af\u691c\u7d22", "Show Source": "\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u8868\u793a", "Search": "\u691c\u7d22", "This Page": "\u3053\u306e\u30da\u30fc\u30b8", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u3053\u306e\u30da\u30fc\u30b8\u304b\u3089\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u691c\u7d22\u3067\u304d\u307e\u3059\u3002\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u4e0b\u306e\u30dc\u30c3\u30af\u30b9\u306b\u5165\u529b\u3057\u3066\u3001\u300c\u691c\u7d22\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5165\u529b\u3055\u308c\u305f\u5168\u3066\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u542b\u3080\u30da\u30fc\u30b8\u304c\u691c\u7d22\u3055\u308c\u307e\u3059\u3002\u4e00\u90e8\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u3057\u304b\u542b\u307e\u306a\u3044\u30da\u30fc\u30b8\u306f\u691c\u7d22\u7d50\u679c\u306b\u8868\u793a\u3055\u308c\u306a\u3044\u306e\u3067\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s \u3067\u751f\u6210\u3057\u307e\u3057\u305f\u3002", "last updated": "\u6700\u7d42\u66f4\u65b0", "Collapse sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u305f\u305f\u3080", "Go": "\u691c\u7d22", "Table Of Contents": "\u76ee\u6b21", "Search within %(docstitle)s": "%(docstitle)s \u5185\u3092\u691c\u7d22", "all functions, classes, terms": "\u95a2\u6570\u3001\u30af\u30e9\u30b9\u304a\u3088\u3073\u7528\u8a9e\u7dcf\u89a7", "Please activate JavaScript to enable the search\n functionality.": "\u691c\u7d22\u6a5f\u80fd\u3092\u4f7f\u3046\u306b\u306f JavaScript \u3092\u6709\u52b9\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002", "Indices and tables:": "\u7d22\u5f15\u3068\u8868\u4e00\u89a7:", "lists all sections and subsections": "\u7ae0\uff0f\u7bc0\u4e00\u89a7", "Index pages by letter": "\u982d\u6587\u5b57\u5225\u7d22\u5f15", "search": "\u691c\u7d22", "Permalink to this definition": "\u3053\u306e\u5b9a\u7fa9\u3078\u306e\u30d1\u30fc\u30de\u30ea\u30f3\u30af", "Previous topic": "\u524d\u306e\u30c8\u30d4\u30c3\u30af\u3078", "Overview": "\u6982\u8981", "Last updated on %(last_updated)s.": "\u6700\u7d42\u66f4\u65b0: %(last_updated)s", "Searching": "\u691c\u7d22\u4e2d", "search this documentation": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u691c\u7d22", "Automatically generated list of changes in version %(version)s": "\u30d0\u30fc\u30b8\u30e7\u30f3 %(version)s \u306e\u5909\u66f4\u70b9\uff08\u3053\u306e\u30ea\u30b9\u30c8\u306f\u81ea\u52d5\u751f\u6210\u3055\u308c\u3066\u3044\u307e\u3059\uff09", "Full index on one page": "\u7dcf\u7d22\u5f15", "Enter search terms or a module, class or function name.": "\u30e2\u30b8\u30e5\u30fc\u30eb\u3001\u30af\u30e9\u30b9\u3001\u307e\u305f\u306f\u95a2\u6570\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u95a2\u3059\u308b\u5909\u66f4", "Search Page": "\u691c\u7d22\u30da\u30fc\u30b8", "Search Results": "\u691c\u7d22\u7d50\u679c"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "ja", "messages": {"%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", ", in ": ", in ", "About these documents": "\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u3064\u3044\u3066", "Automatically generated list of changes in version %(version)s": "\u30d0\u30fc\u30b8\u30e7\u30f3 %(version)s \u306e\u5909\u66f4\u70b9\uff08\u3053\u306e\u30ea\u30b9\u30c8\u306f\u81ea\u52d5\u751f\u6210\u3055\u308c\u3066\u3044\u307e\u3059\uff09", "C API changes": "C API \u306b\u95a2\u3059\u308b\u5909\u66f4", "Changes in Version %(version)s — %(docstitle)s": "\u30d0\u30fc\u30b8\u30e7\u30f3 %(version)s \u306e\u5909\u66f4\u70b9 — %(docstitle)s", "Collapse sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u305f\u305f\u3080", "Complete Table of Contents": "\u7dcf\u5408\u76ee\u6b21", "Contents": "\u30b3\u30f3\u30c6\u30f3\u30c4", "Copyright": "\u8457\u4f5c\u6a29", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s \u3067\u751f\u6210\u3057\u307e\u3057\u305f\u3002", "Expand sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u5c55\u958b", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u3053\u306e\u30da\u30fc\u30b8\u304b\u3089\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u691c\u7d22\u3067\u304d\u307e\u3059\u3002\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u4e0b\u306e\u30dc\u30c3\u30af\u30b9\u306b\u5165\u529b\u3057\u3066\u3001\u300c\u691c\u7d22\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5165\u529b\u3055\u308c\u305f\u5168\u3066\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u3092\u542b\u3080\u30da\u30fc\u30b8\u304c\u691c\u7d22\u3055\u308c\u307e\u3059\u3002\u4e00\u90e8\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u3057\u304b\u542b\u307e\u306a\u3044\u30da\u30fc\u30b8\u306f\u691c\u7d22\u7d50\u679c\u306b\u8868\u793a\u3055\u308c\u306a\u3044\u306e\u3067\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002", "Full index on one page": "\u7dcf\u7d22\u5f15", "General Index": "\u7dcf\u5408\u7d22\u5f15", "Global Module Index": "\u30e2\u30b8\u30e5\u30fc\u30eb\u7dcf\u7d22\u5f15", "Go": "\u691c\u7d22", "Hide Search Matches": "\u691c\u7d22\u7d50\u679c\u3092\u96a0\u3059", "Index": "\u7d22\u5f15", "Index – %(key)s": "\u7d22\u5f15 – %(key)s", "Index pages by letter": "\u982d\u6587\u5b57\u5225\u7d22\u5f15", "Indices and tables:": "\u7d22\u5f15\u3068\u8868\u4e00\u89a7:", "Last updated on %(last_updated)s.": "\u6700\u7d42\u66f4\u65b0: %(last_updated)s", "Library changes": "\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u95a2\u3059\u308b\u5909\u66f4", "Navigation": "\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3", "Next topic": "\u6b21\u306e\u30c8\u30d4\u30c3\u30af\u3078", "Other changes": "\u305d\u306e\u4ed6\u306e\u5909\u66f4", "Overview": "\u6982\u8981", "Permalink to this definition": "\u3053\u306e\u5b9a\u7fa9\u3078\u306e\u30d1\u30fc\u30de\u30ea\u30f3\u30af", "Permalink to this headline": "\u3053\u306e\u30d8\u30c3\u30c9\u30e9\u30a4\u30f3\u3078\u306e\u30d1\u30fc\u30de\u30ea\u30f3\u30af", "Please activate JavaScript to enable the search\n functionality.": "\u691c\u7d22\u6a5f\u80fd\u3092\u4f7f\u3046\u306b\u306f JavaScript \u3092\u6709\u52b9\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002", "Preparing search...": "\u691c\u7d22\u3092\u6e96\u5099\u3057\u3066\u3044\u307e\u3059...", "Previous topic": "\u524d\u306e\u30c8\u30d4\u30c3\u30af\u3078", "Quick search": "\u30af\u30a4\u30c3\u30af\u691c\u7d22", "Search": "\u691c\u7d22", "Search Page": "\u691c\u7d22\u30da\u30fc\u30b8", "Search Results": "\u691c\u7d22\u7d50\u679c", "Search finished, found %s page(s) matching the search query.": "\u691c\u7d22\u304c\u5b8c\u4e86\u3057\u3001 %s \u30da\u30fc\u30b8\u898b\u3064\u3051\u307e\u3057\u305f\u3002", "Search within %(docstitle)s": "%(docstitle)s \u5185\u3092\u691c\u7d22", "Searching": "\u691c\u7d22\u4e2d", "Show Source": "\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u8868\u793a", "Table Of Contents": "\u76ee\u6b21", "This Page": "\u3053\u306e\u30da\u30fc\u30b8", "Welcome! This is": "Welcome! This is", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u691c\u7d22\u3057\u305f\u6587\u5b57\u5217\u306f\u3069\u306e\u6587\u66f8\u306b\u3082\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3059\u3079\u3066\u306e\u5358\u8a9e\u304c\u6b63\u78ba\u306b\u8a18\u8ff0\u3055\u308c\u3066\u3044\u308b\u304b\u3001\u3042\u308b\u3044\u306f\u3001\u5341\u5206\u306a\u30ab\u30c6\u30b4\u30ea\u30fc\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002", "all functions, classes, terms": "\u95a2\u6570\u3001\u30af\u30e9\u30b9\u304a\u3088\u3073\u7528\u8a9e\u7dcf\u89a7", "can be huge": "\u5927\u304d\u3044\u5834\u5408\u304c\u3042\u308b\u306e\u3067\u6ce8\u610f", "last updated": "\u6700\u7d42\u66f4\u65b0", "lists all sections and subsections": "\u7ae0\uff0f\u7bc0\u4e00\u89a7", "next chapter": "\u6b21\u306e\u7ae0\u3078", "previous chapter": "\u524d\u306e\u7ae0\u3078", "quick access to all modules": "\u5168\u30e2\u30b8\u30e5\u30fc\u30eb\u65e9\u898b\u8868", "search": "\u691c\u7d22", "search this documentation": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u691c\u7d22", "the documentation for": "the documentation for"}, "plural_expr": "0"}); \ No newline at end of file diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.mo b/sphinx/locale/ja/LC_MESSAGES/sphinx.mo index efc50ba34fc..6c11e00034c 100644 Binary files a/sphinx/locale/ja/LC_MESSAGES/sphinx.mo and b/sphinx/locale/ja/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.po b/sphinx/locale/ja/LC_MESSAGES/sphinx.po index 21aa7202f4a..57cc2a449a3 100644 --- a/sphinx/locale/ja/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ja/LC_MESSAGES/sphinx.po @@ -1,74 +1,56 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: -# WAKAYAMA Shirou <shirou.faw@gmail.com>, 2013 +# shirou - しろう <shirou.faw@gmail.com>, 2013 # Akitoshi Ohta <fire.kuma8@gmail.com>, 2011 # Kouhei Sutou <kou@clear-code.com>, 2011 -# Takayuki Shimizukawa <shimizukawa@gmail.com>, 2013-2015 -# WAKAYAMA Shirou <shirou.faw@gmail.com>, 2014 +# Takayuki SHIMIZUKAWA <shimizukawa@gmail.com>, 2013-2016 +# Takayuki SHIMIZUKAWA <shimizukawa@gmail.com>, 2016 +# Takeshi KOMIYA <i.tkomiya@gmail.com>, 2016 +# shirou - しろう <shirou.faw@gmail.com>, 2014 # Yasushi Masuda <whosaysni@gmail.com>, 2008 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:36+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/sphinx-1/language/ja/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-12-04 11:59+0000\n" +"Last-Translator: Takayuki SHIMIZUKAWA <shimizukawa@gmail.com>\n" +"Language-Team: Japanese (http://www.transifex.com/sphinx-doc/sphinx-1/language/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "%s 章" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "図 %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "TABLE %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "LIST %s" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s ドキュメント" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "%sを参照" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "%sも参照" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "記号" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%Y 年 %m 月 %d 日" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "組み込み" @@ -77,64 +59,76 @@ msgstr "組み込み" msgid "Module level" msgstr "モジュールレベル" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%Y 年 %m 月 %d 日" +msgstr "%b %d, %Y" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "総合索引" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "索引" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "次へ" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "前へ" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s ドキュメント" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (in " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "不正な caption です: %s" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "この節の作者: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "モジュールの作者: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "コードの作者: " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "作者: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" -msgstr "パラメタ" +msgstr "パラメータ" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "戻り値" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "戻り値の型" @@ -163,12 +157,12 @@ msgstr "%s (C のデータ型)" msgid "%s (C variable)" msgstr "%s (C の変数)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "の関数" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "のメンバ変数" @@ -176,7 +170,7 @@ msgstr "のメンバ変数" msgid "macro" msgstr "のマクロ" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "のデータ型" @@ -184,59 +178,72 @@ msgstr "のデータ型" msgid "variable" msgstr "変数" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "テンプレートパラメータ" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "例外" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ のデータ型)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "%s (C++ concept)" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ のメンバ変数)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ の関数)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ のクラス)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "%s (C++ の列挙型)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "%s (C++の enumerator)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "クラス" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "concept" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "列挙型" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "enumerator" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (組み込み関数)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s のメソッド)" @@ -251,7 +258,7 @@ msgstr "%s() (クラス)" msgid "%s (global variable or constant)" msgstr "%s (グローバル変数または定数)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s の属性)" @@ -260,116 +267,116 @@ msgstr "%s (%s の属性)" msgid "Arguments" msgstr "引数" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "データ" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "の属性" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "変数" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "例外" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (%s モジュール)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (組み込み変数)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (%s モジュール)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (組み込みクラス)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (%s のクラス)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s のメソッド)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s の静的メソッド)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s の静的メソッド)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s のクラスメソッド)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s のクラスメソッド)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s の属性)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (モジュール)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Pythonモジュール索引" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "モジュール" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "撤廃" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "例外" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "メソッド" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "クラスメソッド" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "の静的メソッド" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "モジュール" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (撤廃)" @@ -391,188 +398,219 @@ msgstr "ディレクティブ" msgid "role" msgstr "ロール" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "環境変数; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%sコマンドラインオプション; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "用語集の項目" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "文法トークン" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "参照ラベル" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "環境変数" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "プログラムオプション" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "索引" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "モジュール索引" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "検索ページ" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr " ベースクラス: %s" +msgid "see %s" +msgstr "%sを参照" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "%sも参照" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "記号" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "ベースクラス: %s" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr ":class:`%s` のエイリアス" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[グラフ: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[グラフ]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "この数式へのパーマリンク" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(in %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[ソース]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "数式 %s のラベルはすでに %s で使われています" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "課題" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<original entry>>" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" msgstr "(<<元のエントリ>> は、 %s の %d 行目です)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "元のエントリ" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[ドキュメント]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "モジュールコード" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>%s のソースコード</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "概要: モジュールコード" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>全モジュールのうち、コードを読めるもの</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "キーワード引数" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "注意" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "ご用心" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "危険" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "エラー" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "ヒント" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "重要" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "注釈" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "参考" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "ちなみに" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "警告" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "バージョン %s で追加" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "バージョン %s で変更" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "バージョン %s で撤廃" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "キーワード" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "演算子" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "オブジェクト" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "文" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "組み込み関数" @@ -581,7 +619,7 @@ msgstr "組み込み関数" msgid "Table Of Contents" msgstr "目次" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -591,11 +629,7 @@ msgstr "検索" msgid "Go" msgstr "検索" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "モジュール、クラス、または関数名を入力してください" - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "ソースコードを表示" @@ -643,15 +677,15 @@ msgstr "全モジュール早見表" msgid "all functions, classes, terms" msgstr "関数、クラスおよび用語総覧" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "索引 – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "総索引" @@ -667,35 +701,35 @@ msgstr "大きい場合があるので注意" msgid "Navigation" msgstr "ナビゲーション" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "%(docstitle)s 内を検索" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "このドキュメントについて" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "著作権" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "最終更新: %(last_updated)s" -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -744,13 +778,13 @@ msgstr "検索" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "検索結果" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -767,13 +801,13 @@ msgstr "このページ" #: 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 "バージョン %(version)s の変更点 — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "バージョン %(version)s の変更点 — %(docstitle)s" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "%(filename)s — %(docstitle)s" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -792,33 +826,34 @@ msgstr "C API に関する変更" msgid "Other changes" msgstr "その他の変更" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "このヘッドラインへのパーマリンク" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "この定義へのパーマリンク" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "検索結果を隠す" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "検索中" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "検索を準備しています..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "検索が完了し、 %s ページ見つけました。" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr ", in " @@ -835,44 +870,53 @@ msgstr "サイドバーをたたむ" msgid "Contents" msgstr "コンテンツ" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "このコードへのパーマリンク" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "この画像へのパーマリンク" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "この目次へのパーマリンク" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "このテーブルへのパーマリンク" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "リリース" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "ページ" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "不明な設定値 latex_elements[%r] はスキップされました。" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "注記" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "前のページからの続き" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "次のページに続く" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[画像: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[画像]" diff --git a/sphinx/locale/ko/LC_MESSAGES/sphinx.js b/sphinx/locale/ko/LC_MESSAGES/sphinx.js index a4339d8c5f8..93152480871 100644 --- a/sphinx/locale/ko/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/ko/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "ko", "plural_expr": "0", "messages": {"Next topic": "\ub2e4\uc74c \ud56d\ubaa9", "Index": "\uc0c9\uc778", "%(filename)s — %(docstitle)s": "", "Welcome! This is": "", "Copyright": "\uc800\uc791\uad8c", "C API changes": "C API\uc5d0 \ub300\ud55c \ubcc0\uacbd", "quick access to all modules": "\ubaa8\ub4e0 \ubaa8\ub4c8 \uc870\uacac\ud45c", "© Copyright %(copyright)s.": "", "Global Module Index": "\ubaa8\ub4c8 \ucd1d \uc0c9\uc778", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "", "General Index": "\uc804\uccb4 \uc0c9\uc778", "next chapter": "\ub2e4\uc74c \uc7a5", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "\uc774\uc804 \uc7a5", "Permalink to this headline": "\uc81c\ubaa9 \uc8fc\uc18c", "About these documents": "\uc774 \ubb38\uc11c \uc815\ubcf4", "Preparing search...": "", ", in ": "", "Navigation": "\ud0d0\uc0c9", "Expand sidebar": "\uc0ac\uc774\ub4dc\ubc14 \uc5f4\uae30", "the documentation for": "", "Complete Table of Contents": "\uc885\ud569 \ubaa9\ucc28", "Contents": "\ub0b4\uc6a9", "can be huge": "\ud070 \uacbd\uc6b0\uac00 \uc788\uc73c\ubbc0\ub85c \uc8fc\uc758", "Changes in Version %(version)s — %(docstitle)s": "", "Other changes": "\ub2e4\ub978 \ubcc0\uacbd \uc0ac\ud56d", "Hide Search Matches": "\uac80\uc0c9 \uacb0\uacfc \uc228\uae30\uae30", "Quick search": "\ube60\ub978 \uac80\uc0c9", "Show Source": "\uc18c\uc2a4 \ucf54\ub4dc\ub97c \ubcf4\ub824\uba74", "Search": "\uac80\uc0c9", "This Page": "\ud604\uc7ac \ubb38\uc11c", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "last updated": "", "Collapse sidebar": "\uc0ac\uc774\ub4dc\ubc14 \ub2eb\uae30", "Go": "\ubc14\ub85c \uac00\uae30", "Table Of Contents": "\ubaa9\ucc28", "Search within %(docstitle)s": "%(docstitle)s\uc5d0\uc11c \ucc3e\uae30", "all functions, classes, terms": "\ud568\uc218, \ud074\ub798\uc2a4 \ubc0f \uc6a9\uc5b4 \uac1c\uad00", "Please activate JavaScript to enable the search\n functionality.": "", "Indices and tables:": "\uc0c9\uc778 \ubc0f \ud45c \ubaa9\ub85d:", "lists all sections and subsections": "\uc601\uc5ed\ubcc4 \ubaa9\ucc28", "Index pages by letter": "\uc54c\ud30c\ubcb3\ubcc4 \uc0c9\uc778", "search": "\uac80\uc0c9", "Permalink to this definition": "\uc815\uc758 \uc8fc\uc18c", "Previous topic": "\uc774\uc804 \ud56d\ubaa9", "Overview": "\uac1c\uc694", "Last updated on %(last_updated)s.": "\ucd5c\uc885 \uc5c5\ub370\uc774\ud2b8: %(last_updated)s", "Searching": "", "search this documentation": "\ubb38\uc11c \uac80\uc0c9", "Automatically generated list of changes in version %(version)s": "\ubc84\uc804 %(version)s\uc758 \ubcc0\uacbd \uc0ac\ud56d (\uc774 \ubaa9\ub85d\uc740 \uc790\ub3d9\uc73c\ub85c \uc0dd\uc131\ud569\ub2c8\ub2e4)", "Full index on one page": "\uc77c\ubc18 \uc0c9\uc778", "Enter search terms or a module, class or function name.": "\ubaa8\ub4c8, \ud074\ub798\uc2a4 \ub610\ub294 \ud568\uc218 \uc774\ub984\uc744 \uc785\ub825\ud558\uc2ed\uc2dc\uc624.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "Library changes": "\ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \ub300\ud55c \ubcc0\uacbd", "Search Page": "\uac80\uc0c9 \ud398\uc774\uc9c0", "Search Results": "\uac80\uc0c9 \uacb0\uacfc"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "ko", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "\uc774 \ubb38\uc11c \uc815\ubcf4", "Automatically generated list of changes in version %(version)s": "\ubc84\uc804 %(version)s\uc758 \ubcc0\uacbd \uc0ac\ud56d (\uc774 \ubaa9\ub85d\uc740 \uc790\ub3d9\uc73c\ub85c \uc0dd\uc131\ud569\ub2c8\ub2e4)", "C API changes": "C API\uc5d0 \ub300\ud55c \ubcc0\uacbd", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "\uc0ac\uc774\ub4dc\ubc14 \ub2eb\uae30", "Complete Table of Contents": "\uc885\ud569 \ubaa9\ucc28", "Contents": "\ub0b4\uc6a9", "Copyright": "\uc800\uc791\uad8c", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Expand sidebar": "\uc0ac\uc774\ub4dc\ubc14 \uc5f4\uae30", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Full index on one page": "\uc77c\ubc18 \uc0c9\uc778", "General Index": "\uc804\uccb4 \uc0c9\uc778", "Global Module Index": "\ubaa8\ub4c8 \ucd1d \uc0c9\uc778", "Go": "\ubc14\ub85c \uac00\uae30", "Hide Search Matches": "\uac80\uc0c9 \uacb0\uacfc \uc228\uae30\uae30", "Index": "\uc0c9\uc778", "Index – %(key)s": "", "Index pages by letter": "\uc54c\ud30c\ubcb3\ubcc4 \uc0c9\uc778", "Indices and tables:": "\uc0c9\uc778 \ubc0f \ud45c \ubaa9\ub85d:", "Last updated on %(last_updated)s.": "\ucd5c\uc885 \uc5c5\ub370\uc774\ud2b8: %(last_updated)s", "Library changes": "\ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \ub300\ud55c \ubcc0\uacbd", "Navigation": "\ud0d0\uc0c9", "Next topic": "\ub2e4\uc74c \ud56d\ubaa9", "Other changes": "\ub2e4\ub978 \ubcc0\uacbd \uc0ac\ud56d", "Overview": "\uac1c\uc694", "Permalink to this definition": "\uc815\uc758 \uc8fc\uc18c", "Permalink to this headline": "\uc81c\ubaa9 \uc8fc\uc18c", "Please activate JavaScript to enable the search\n functionality.": "", "Preparing search...": "", "Previous topic": "\uc774\uc804 \ud56d\ubaa9", "Quick search": "\ube60\ub978 \uac80\uc0c9", "Search": "\uac80\uc0c9", "Search Page": "\uac80\uc0c9 \ud398\uc774\uc9c0", "Search Results": "\uac80\uc0c9 \uacb0\uacfc", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "%(docstitle)s\uc5d0\uc11c \ucc3e\uae30", "Searching": "", "Show Source": "\uc18c\uc2a4 \ucf54\ub4dc\ub97c \ubcf4\ub824\uba74", "Table Of Contents": "\ubaa9\ucc28", "This Page": "\ud604\uc7ac \ubb38\uc11c", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "\ud568\uc218, \ud074\ub798\uc2a4 \ubc0f \uc6a9\uc5b4 \uac1c\uad00", "can be huge": "\ud070 \uacbd\uc6b0\uac00 \uc788\uc73c\ubbc0\ub85c \uc8fc\uc758", "last updated": "", "lists all sections and subsections": "\uc601\uc5ed\ubcc4 \ubaa9\ucc28", "next chapter": "\ub2e4\uc74c \uc7a5", "previous chapter": "\uc774\uc804 \uc7a5", "quick access to all modules": "\ubaa8\ub4e0 \ubaa8\ub4c8 \uc870\uacac\ud45c", "search": "\uac80\uc0c9", "search this documentation": "\ubb38\uc11c \uac80\uc0c9", "the documentation for": ""}, "plural_expr": "0"}); \ No newline at end of file diff --git a/sphinx/locale/ko/LC_MESSAGES/sphinx.mo b/sphinx/locale/ko/LC_MESSAGES/sphinx.mo index 5c2d12e6ed0..53b373b4f26 100644 Binary files a/sphinx/locale/ko/LC_MESSAGES/sphinx.mo and b/sphinx/locale/ko/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/ko/LC_MESSAGES/sphinx.po b/sphinx/locale/ko/LC_MESSAGES/sphinx.po index 2ee7084635a..e5e4edd9879 100644 --- a/sphinx/locale/ko/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ko/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -7,62 +7,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Korean (http://www.transifex.com/projects/p/sphinx-1/language/ko/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Korean (http://www.transifex.com/sphinx-doc/sphinx-1/language/ko/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 #, python-format -msgid "Fig. %s" -msgstr "" - -#: sphinx/config.py:81 -#, python-format -msgid "Table %s" +msgid "Section %s" msgstr "" -#: sphinx/config.py:82 +#: sphinx/config.py:110 #, python-format -msgid "Listing %s" +msgid "Fig. %s" msgstr "" -#: sphinx/config.py:89 +#: sphinx/config.py:111 #, python-format -msgid "%s %s documentation" +msgid "Table %s" msgstr "" -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "%s 문서" - -#: sphinx/environment.py:1883 +#: sphinx/config.py:112 #, python-format -msgid "see also %s" -msgstr "%s 참조" - -#: sphinx/environment.py:1941 -msgid "Symbols" +msgid "Listing %s" msgstr "" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%Y년 %m월 %d일" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "기본" @@ -71,64 +51,76 @@ msgstr "기본" msgid "Module level" msgstr "모듈 수준" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%Y년 %m월 %d일" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "전체 색인" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "색인" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "다음" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "이전" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr "" -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "" -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "" -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "매개 변수" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "반환" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "반환 형식" @@ -157,12 +149,12 @@ msgstr "%s (C 데이터 형식)" msgid "%s (C variable)" msgstr "%s (C 변수)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "함수" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "멤버 변수" @@ -170,7 +162,7 @@ msgstr "멤버 변수" msgid "macro" msgstr "매크로" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "데이터 형식" @@ -178,59 +170,72 @@ msgstr "데이터 형식" msgid "variable" msgstr "변수" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "예외" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ 데이터 형식)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++의 멤버 변수)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ 함수)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ 클래스)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "클래스" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() 내장 함수)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s 메서드)" @@ -245,7 +250,7 @@ msgstr "%s() (클래스)" msgid "%s (global variable or constant)" msgstr "%s (전역 변수 또는 상수)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s의 속성)" @@ -254,116 +259,116 @@ msgstr "%s (%s의 속성)" msgid "Arguments" msgstr "인수" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "데이터" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "속성" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "변수" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "예외" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (%s 모듈)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (내장 변수)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (%s 모듈)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (내장 변수)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (%s 종류)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s의 정적 메서드)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s 클래스 메서드)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (모듈)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Python 모듈 목록" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "모듈" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "폐지" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "예외" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "메소드" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "클래스 메소드" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "정적 메서드" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "모듈" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr "" @@ -385,188 +390,219 @@ msgstr "지시자" msgid "role" msgstr "역할" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "환경 변수; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%s 명령; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "용어의 항목" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "문법 토큰" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "참조 레이블" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "환경 변수" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "프로그램 옵션" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "색인" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "모듈 목록" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "검색 페이지" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" +msgid "see %s" +msgstr "%s 문서" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "%s 참조" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[소스]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "과제" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "원래 항목" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[문서]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "모듈 코드" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "설명: 모듈 코드" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "주의" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "조심" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "위험" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "오류" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "힌트" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "중요" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "주석" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "더 보기" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "참고" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "경고" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "버전 %s에 추가" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "버전 %s으로 변경" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "버전 %s 폐지" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "키워드" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "연산자" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "객체" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "글" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "내장 함수" @@ -575,7 +611,7 @@ msgstr "내장 함수" msgid "Table Of Contents" msgstr "목차" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -585,11 +621,7 @@ msgstr "검색" msgid "Go" msgstr "바로 가기" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "모듈, 클래스 또는 함수 이름을 입력하십시오." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "소스 코드를 보려면" @@ -637,15 +669,15 @@ msgstr "모든 모듈 조견표" msgid "all functions, classes, terms" msgstr "함수, 클래스 및 용어 개관" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "일반 색인" @@ -661,35 +693,35 @@ msgstr "큰 경우가 있으므로 주의" msgid "Navigation" msgstr "탐색" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "%(docstitle)s에서 찾기" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "이 문서 정보" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "저작권" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "최종 업데이트: %(last_updated)s" -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -738,13 +770,13 @@ msgstr "검색" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "검색 결과" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -761,12 +793,12 @@ msgstr "현재 문서" #: sphinx/themes/basic/changes/frameset.html:5 #: sphinx/themes/basic/changes/versionchanges.html:12 #, python-format -msgid "Changes in Version %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 @@ -786,33 +818,34 @@ msgstr "C API에 대한 변경" msgid "Other changes" msgstr "다른 변경 사항" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "제목 주소" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "정의 주소" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "검색 결과 숨기기" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -829,44 +862,53 @@ msgstr "사이드바 닫기" msgid "Contents" msgstr "내용" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "출시" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "참고" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "이전 페이지에서 계속" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "일반 색인" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[그림]" diff --git a/sphinx/locale/lt/LC_MESSAGES/sphinx.js b/sphinx/locale/lt/LC_MESSAGES/sphinx.js index bae97ae7ab7..8a141074b73 100644 --- a/sphinx/locale/lt/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/lt/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "lt", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Next topic": "Kita tema", "Index": "Indeksas", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "", "Copyright": "Autoriaus teis\u0117s", "C API changes": "C API pakeitimai", "quick access to all modules": "greitas vis\u0173 moduli\u0173 pasiekimas", "© Copyright %(copyright)s.": "© Autoriaus teis\u0117s %(copyright)s.", "Global Module Index": "Globalus Modulio Indeksas", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "Indeksas – %(key)s", "General Index": "Bendras indeksas", "next chapter": "kita dalis", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "praeita dalis", "Permalink to this headline": "Nuoroda \u012f \u0161i\u0105 antra\u0161t\u0119", "About these documents": "Apie \u0161iuos dokumentus", "Preparing search...": "", ", in ": "", "Navigation": "Navigacija", "Expand sidebar": "I\u0161pl\u0117sti \u0161onin\u0119 juost\u0105", "the documentation for": "", "Complete Table of Contents": "Pilnas Turinys", "Contents": "Turinys", "can be huge": "gali b\u016bti didelis", "Changes in Version %(version)s — %(docstitle)s": "Pasikeitimai versijoje %(version)s — %(docstitle)s", "Other changes": "Kiti pakeitimai", "Hide Search Matches": "Pasl\u0117pti paie\u0161kos rezultatus", "Quick search": "Greitoji paie\u0161ka", "Show Source": "Rodyti pirmin\u012f kod\u0105", "Search": "Paie\u0161ka", "This Page": "\u0160is puslapis", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u010cia j\u016bs galite ie\u0161koti \u0161iuose dokumentuose. \u012eveskite savo paie\u0161kos\n \u017eod\u017eius \u012f lauk\u0105 apa\u010dioje ir paspauskite \"ie\u0161koti\". Pasteb\u0117sime, kad paie\u0161kos\n funkcija automati\u0161kai ie\u0161kos vis\u0173 \u017eod\u017ei\u0173. Puslapiai,\n kuriuose yra ma\u017eiau \u017eod\u017ei\u0173 nepasirodys tarp paie\u0161kos rezultat\u0173.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Sukurta naudojant <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "", "Collapse sidebar": "Pasl\u0117pti \u0161onin\u0119 juost\u0105", "Go": "Pirmyn", "Table Of Contents": "Turinys", "Search within %(docstitle)s": "Ie\u0161koti tarp %(docstitle)s", "all functions, classes, terms": "visos funkcijos, klas\u0117s ir terminai", "Please activate JavaScript to enable the search\n functionality.": "Pra\u0161ome aktyvuoti JavaScript, kad veikt\u0173 paie\u0161kos\n funkcionalumas.", "Indices and tables:": "Indeksai ir lentel\u0117s:", "lists all sections and subsections": "sura\u0161yti visus skyrius ir poskyrius", "Index pages by letter": "Indekso puslapiai pagal raid\u0119", "search": "ie\u0161koti", "Permalink to this definition": "Nuoroda \u012f \u0161\u012f apibr\u0117\u017eim\u0105", "Previous topic": "Praeita tema", "Overview": "Ap\u017evalga", "Last updated on %(last_updated)s.": "Paskutinis atnaujinimas %(last_updated)s.", "Searching": "", "search this documentation": "ie\u0161koti \u0161iame dokumente", "Automatically generated list of changes in version %(version)s": "Automati\u0161kai sugeneruotas pakeitim\u0173 %(version)s versijoje s\u0105ra\u0161as", "Full index on one page": "Pilnas indeksas viename puslapyje", "Enter search terms or a module, class or function name.": "\u012eveskite paie\u0161kos termin\u0105 arba modulio, klas\u0117s ar funkcijos vard\u0105.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Autoriaus teis\u0117s</a> %(copyright)s.", "Library changes": "Bibliotekos pakeitimai", "Search Page": "Paie\u0161kos puslapis", "Search Results": "Paie\u0161kos rezultatai"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "lt", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "Apie \u0161iuos dokumentus", "Automatically generated list of changes in version %(version)s": "Automati\u0161kai sugeneruotas pakeitim\u0173 %(version)s versijoje s\u0105ra\u0161as", "C API changes": "C API pakeitimai", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "Pasl\u0117pti \u0161onin\u0119 juost\u0105", "Complete Table of Contents": "Pilnas Turinys", "Contents": "Turinys", "Copyright": "Autoriaus teis\u0117s", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Sukurta naudojant <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "I\u0161pl\u0117sti \u0161onin\u0119 juost\u0105", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u010cia j\u016bs galite ie\u0161koti \u0161iuose dokumentuose. \u012eveskite savo paie\u0161kos\n \u017eod\u017eius \u012f lauk\u0105 apa\u010dioje ir paspauskite \"ie\u0161koti\". Pasteb\u0117sime, kad paie\u0161kos\n funkcija automati\u0161kai ie\u0161kos vis\u0173 \u017eod\u017ei\u0173. Puslapiai,\n kuriuose yra ma\u017eiau \u017eod\u017ei\u0173 nepasirodys tarp paie\u0161kos rezultat\u0173.", "Full index on one page": "Pilnas indeksas viename puslapyje", "General Index": "Bendras indeksas", "Global Module Index": "Globalus Modulio Indeksas", "Go": "Pirmyn", "Hide Search Matches": "Pasl\u0117pti paie\u0161kos rezultatus", "Index": "Indeksas", "Index – %(key)s": "Indeksas – %(key)s", "Index pages by letter": "Indekso puslapiai pagal raid\u0119", "Indices and tables:": "Indeksai ir lentel\u0117s:", "Last updated on %(last_updated)s.": "Paskutinis atnaujinimas %(last_updated)s.", "Library changes": "Bibliotekos pakeitimai", "Navigation": "Navigacija", "Next topic": "Kita tema", "Other changes": "Kiti pakeitimai", "Overview": "Ap\u017evalga", "Permalink to this definition": "Nuoroda \u012f \u0161\u012f apibr\u0117\u017eim\u0105", "Permalink to this headline": "Nuoroda \u012f \u0161i\u0105 antra\u0161t\u0119", "Please activate JavaScript to enable the search\n functionality.": "Pra\u0161ome aktyvuoti JavaScript, kad veikt\u0173 paie\u0161kos\n funkcionalumas.", "Preparing search...": "", "Previous topic": "Praeita tema", "Quick search": "Greitoji paie\u0161ka", "Search": "Paie\u0161ka", "Search Page": "Paie\u0161kos puslapis", "Search Results": "Paie\u0161kos rezultatai", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "Ie\u0161koti tarp %(docstitle)s", "Searching": "", "Show Source": "Rodyti pirmin\u012f kod\u0105", "Table Of Contents": "Turinys", "This Page": "\u0160is puslapis", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "visos funkcijos, klas\u0117s ir terminai", "can be huge": "gali b\u016bti didelis", "last updated": "", "lists all sections and subsections": "sura\u0161yti visus skyrius ir poskyrius", "next chapter": "kita dalis", "previous chapter": "praeita dalis", "quick access to all modules": "greitas vis\u0173 moduli\u0173 pasiekimas", "search": "ie\u0161koti", "search this documentation": "ie\u0161koti \u0161iame dokumente", "the documentation for": ""}, "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)"}); \ No newline at end of file diff --git a/sphinx/locale/lt/LC_MESSAGES/sphinx.mo b/sphinx/locale/lt/LC_MESSAGES/sphinx.mo index daa8c7fc2f1..3ae8b02a2d4 100644 Binary files a/sphinx/locale/lt/LC_MESSAGES/sphinx.mo and b/sphinx/locale/lt/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/lt/LC_MESSAGES/sphinx.po b/sphinx/locale/lt/LC_MESSAGES/sphinx.po index 1f03dc9e8cd..1073ffee5ba 100644 --- a/sphinx/locale/lt/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/lt/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -8,62 +8,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Lithuanian (http://www.transifex.com/projects/p/sphinx-1/language/lt/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Lithuanian (http://www.transifex.com/sphinx-doc/sphinx-1/language/lt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: lt\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 #, python-format -msgid "Fig. %s" -msgstr "" - -#: sphinx/config.py:81 -#, python-format -msgid "Table %s" -msgstr "" - -#: sphinx/config.py:82 -#, python-format -msgid "Listing %s" +msgid "Section %s" msgstr "" -#: sphinx/config.py:89 +#: sphinx/config.py:110 #, python-format -msgid "%s %s documentation" +msgid "Fig. %s" msgstr "" -#: sphinx/environment.py:1880 +#: sphinx/config.py:111 #, python-format -msgid "see %s" +msgid "Table %s" msgstr "" -#: sphinx/environment.py:1883 +#: sphinx/config.py:112 #, python-format -msgid "see also %s" -msgstr "" - -#: sphinx/environment.py:1941 -msgid "Symbols" +msgid "Listing %s" msgstr "" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%Y-%m-%d" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Įtaisytieji" @@ -72,64 +52,76 @@ msgstr "Įtaisytieji" msgid "Module level" msgstr "Modulio lygis" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%Y-%m-%d" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Bendras indeksas" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "indeksas" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "kitas" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "praeitas" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (kuris yra " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Skyriaus autorius: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Modulio autorius: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Kodo autorius: " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Autorius: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parametrai" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Grąžinamos reikšmės" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Grąžinamos reikšmės tipas" @@ -158,12 +150,12 @@ msgstr "%s (C tipas)" msgid "%s (C variable)" msgstr "%s (C kintamasis)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "funkcija" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "narys" @@ -171,7 +163,7 @@ msgstr "narys" msgid "macro" msgstr "makrokomanda" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "tipas" @@ -179,59 +171,72 @@ msgstr "tipas" msgid "variable" msgstr "kintamasis" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Išmeta" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ tipas)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ narys)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funkcija)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "klasė" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (itaisytoji funkcija)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metodas)" @@ -246,7 +251,7 @@ msgstr "%s() (klasė)" msgid "%s (global variable or constant)" msgstr "%s (globalus kintamasis arba konstanta)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atributas)" @@ -255,116 +260,116 @@ msgstr "%s (%s atributas)" msgid "Arguments" msgstr "Argumentais" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "duomenys" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "atribudas" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Kintamieji" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Sukelia" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (modulyje %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (įtaisytasis kintamasis)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (modulje %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (įtaisytoji klasė)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (klasė iš %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metodas)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statinis metodas)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statinis metodas)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s klasės metodas)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s klasės metodas)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s atributas)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (modulis)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "moduliai" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Atmestas" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "išimtis" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "metodas" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "klasės metodas" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "statinis metodas" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "modulis" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (atmestas)" @@ -386,188 +391,219 @@ msgstr "direktyva" msgid "role" msgstr "rolė" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "aplinkos kintamasis; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%skomandinės eilutės parinktis; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "aiškinamasis terminas" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "gramatinė leksema" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "nuorodos požymis" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "aplinkos kintamasis" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "programos parinktis" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Indeksas" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Modulio indeksas" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Paieškos puslapis" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr " Bazės: %s" +msgid "see %s" +msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr ":class:`%s` alternatyvus vardas" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[šaltinis]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Padaryti" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(<<original entry>> galima rasti %s, eilutėje %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "originalus įrašas" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[dokumentai]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Modulio kodas" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Kodas %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Apžvalga: modulio kodas" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Visi moduliai turintys kodą</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Dėmesio" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Atsargiai" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Pavojinga" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Klaida" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Patarimas" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Svarbu" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Pastaba" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Taip pat žiūrėkite" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Patarimas" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Įspėjimas" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Nauja %s versijoje" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Pakeista %s versijoje" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Nebepalaikoma nuo %s versijos" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "bazinis žodis" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operatorius" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objektas" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "sakinis" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "įtaisytoji funkcija" @@ -576,7 +612,7 @@ msgstr "įtaisytoji funkcija" msgid "Table Of Contents" msgstr "Turinys" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -586,11 +622,7 @@ msgstr "Paieška" msgid "Go" msgstr "Pirmyn" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Įveskite paieškos terminą arba modulio, klasės ar funkcijos vardą." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Rodyti pirminį kodą" @@ -638,15 +670,15 @@ msgstr "greitas visų modulių pasiekimas" msgid "all functions, classes, terms" msgstr "visos funkcijos, klasės ir terminai" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Indeksas – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Pilnas indeksas viename puslapyje" @@ -662,35 +694,35 @@ msgstr "gali būti didelis" msgid "Navigation" msgstr "Navigacija" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Ieškoti tarp %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Apie šiuos dokumentus" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Autoriaus teisės" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Autoriaus teisės</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Autoriaus teisės %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Paskutinis atnaujinimas %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -739,13 +771,13 @@ msgstr "ieškoti" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Paieškos rezultatai" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -762,13 +794,13 @@ msgstr "Šis puslapis" #: 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 "Pasikeitimai versijoje %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -787,33 +819,34 @@ msgstr "C API pakeitimai" msgid "Other changes" msgstr "Kiti pakeitimai" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Nuoroda į šią antraštę" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Nuoroda į šį apibrėžimą" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Paslėpti paieškos rezultatus" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -830,44 +863,53 @@ msgstr "Paslėpti šoninę juostą" msgid "Contents" msgstr "Turinys" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Leidimas" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Išnašos" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "tęsinys iš praeito puslapio" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Tęsinys kitame puslapyje" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[paveiksliukas]" diff --git a/sphinx/locale/lv/LC_MESSAGES/sphinx.js b/sphinx/locale/lv/LC_MESSAGES/sphinx.js index 669d6f03cc2..20aa16ed5ae 100644 --- a/sphinx/locale/lv/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/lv/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "lv", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2)", "messages": {"Next topic": "n\u0101ko\u0161a t\u0113ma", "Index": "Indekss", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "", "Copyright": "Copyright", "C API changes": "Izmai\u0146as iek\u0161 C API", "quick access to all modules": "\u0101tra piek\u013cuve visiem moduliem", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "Visp\u0101r\u0113js modu\u013cu indekss", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "Indekss – %(key)s", "General Index": "Visp\u0101r\u0113js indekss", "next chapter": "n\u0101ko\u0161a sada\u013ca", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "iepriek\u0161\u0113ja sada\u013ca", "Permalink to this headline": "Past\u0101v\u012bga nor\u0101de \u0161o virsrakstu", "About these documents": "Par \u0161iem dokumentiem", "Preparing search...": "", ", in ": "", "Navigation": "Navig\u0101cija", "Expand sidebar": "Izplest s\u0101njoslu", "the documentation for": "", "Complete Table of Contents": "Pilns saturs", "Contents": "Saturs", "can be huge": "var b\u016bt milz\u012bgs", "Changes in Version %(version)s — %(docstitle)s": "Izmai\u0146as versij\u0101 %(version)s — %(docstitle)s", "Other changes": "Citas izmai\u0146as", "Hide Search Matches": "Pasl\u0113pt atlases v\u0101rdus", "Quick search": "\u0100tra mekl\u0113\u0161ana", "Show Source": "R\u0101d\u012bt izejas tekstu", "Search": "Mekl\u0113t", "This Page": "\u0160\u012b lappuse", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u0160eit J\u016bs varat mekl\u0113t \u0161ajos dokumentos. Nor\u0101diet mekl\u0113jamus v\u0101rdus\n ievada lauka un uzklik\u0161\u0137iniet pogu \"mekl\u0113t\". L\u016bdzu iev\u0113rojiet,\n ka mekl\u0113\u0161anas programma atrad\u012bs tikai tos dokumentus, kuros ir\n visi ievad\u012btie v\u0101rdi. Dokumenti, kuros ir tikai da\u013ca no ievad\u012btiem\n v\u0101rdiem, netiks atlas\u012bti.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Sagatavots izmantojot <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "", "Collapse sidebar": "Sav\u0113rst s\u0101njoslu", "Go": "Izpild\u012bt", "Table Of Contents": "Saturs", "Search within %(docstitle)s": "Mekl\u0113t iek\u0161 %(docstitle)s", "all functions, classes, terms": "visas funkcijas, klases un termini", "Please activate JavaScript to enable the search\n functionality.": "Lai iesp\u0113jotu mekl\u0113\u0161anu, l\u016bdzu aktiviz\u0113t JavaScript.", "Indices and tables:": "Indeksi un tabulas:", "lists all sections and subsections": "r\u0101da visas sekcijas un apak\u0161sekcijas", "Index pages by letter": "Lappu\u0161u indekss p\u0113c burtiem", "search": "mekl\u0113t", "Permalink to this definition": "Past\u0101v\u012bga nor\u0101de uz \u0161o defin\u012bciju", "Previous topic": "iepriek\u0161\u0113ja t\u0113ma", "Overview": "Apskats", "Last updated on %(last_updated)s.": "P\u0113d\u0113jas izmai\u0146as %(last_updated)s.", "Searching": "", "search this documentation": "mekl\u0113t \u0161aj\u0101 dokument\u0101cij\u0101", "Automatically generated list of changes in version %(version)s": "Autom\u0101tiski sagatavots izmai\u0146u saraksts versijai %(version)s", "Full index on one page": "Pilns indekss vien\u0101 lappus\u0113", "Enter search terms or a module, class or function name.": "Ievadiet mekl\u0113jamus terminus vai modu\u013ca, klases vai funkcijas v\u0101rdu.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "Bibliot\u0113kas izmai\u0146as", "Search Page": "Atlases lapa", "Search Results": "Atlases rezult\u0101ti"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "lv", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "Par \u0161iem dokumentiem", "Automatically generated list of changes in version %(version)s": "Autom\u0101tiski sagatavots izmai\u0146u saraksts versijai %(version)s", "C API changes": "Izmai\u0146as iek\u0161 C API", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "Sav\u0113rst s\u0101njoslu", "Complete Table of Contents": "Pilns saturs", "Contents": "Saturs", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Sagatavots izmantojot <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "Izplest s\u0101njoslu", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u0160eit J\u016bs varat mekl\u0113t \u0161ajos dokumentos. Nor\u0101diet mekl\u0113jamus v\u0101rdus\n ievada lauka un uzklik\u0161\u0137iniet pogu \"mekl\u0113t\". L\u016bdzu iev\u0113rojiet,\n ka mekl\u0113\u0161anas programma atrad\u012bs tikai tos dokumentus, kuros ir\n visi ievad\u012btie v\u0101rdi. Dokumenti, kuros ir tikai da\u013ca no ievad\u012btiem\n v\u0101rdiem, netiks atlas\u012bti.", "Full index on one page": "Pilns indekss vien\u0101 lappus\u0113", "General Index": "Visp\u0101r\u0113js indekss", "Global Module Index": "Visp\u0101r\u0113js modu\u013cu indekss", "Go": "Izpild\u012bt", "Hide Search Matches": "Pasl\u0113pt atlases v\u0101rdus", "Index": "Indekss", "Index – %(key)s": "Indekss – %(key)s", "Index pages by letter": "Lappu\u0161u indekss p\u0113c burtiem", "Indices and tables:": "Indeksi un tabulas:", "Last updated on %(last_updated)s.": "P\u0113d\u0113jas izmai\u0146as %(last_updated)s.", "Library changes": "Bibliot\u0113kas izmai\u0146as", "Navigation": "Navig\u0101cija", "Next topic": "n\u0101ko\u0161a t\u0113ma", "Other changes": "Citas izmai\u0146as", "Overview": "Apskats", "Permalink to this definition": "Past\u0101v\u012bga nor\u0101de uz \u0161o defin\u012bciju", "Permalink to this headline": "Past\u0101v\u012bga nor\u0101de \u0161o virsrakstu", "Please activate JavaScript to enable the search\n functionality.": "Lai iesp\u0113jotu mekl\u0113\u0161anu, l\u016bdzu aktiviz\u0113t JavaScript.", "Preparing search...": "", "Previous topic": "iepriek\u0161\u0113ja t\u0113ma", "Quick search": "\u0100tra mekl\u0113\u0161ana", "Search": "Mekl\u0113t", "Search Page": "Atlases lapa", "Search Results": "Atlases rezult\u0101ti", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "Mekl\u0113t iek\u0161 %(docstitle)s", "Searching": "", "Show Source": "R\u0101d\u012bt izejas tekstu", "Table Of Contents": "Saturs", "This Page": "\u0160\u012b lappuse", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "visas funkcijas, klases un termini", "can be huge": "var b\u016bt milz\u012bgs", "last updated": "", "lists all sections and subsections": "r\u0101da visas sekcijas un apak\u0161sekcijas", "next chapter": "n\u0101ko\u0161a sada\u013ca", "previous chapter": "iepriek\u0161\u0113ja sada\u013ca", "quick access to all modules": "\u0101tra piek\u013cuve visiem moduliem", "search": "mekl\u0113t", "search this documentation": "mekl\u0113t \u0161aj\u0101 dokument\u0101cij\u0101", "the documentation for": ""}, "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2)"}); \ No newline at end of file diff --git a/sphinx/locale/lv/LC_MESSAGES/sphinx.mo b/sphinx/locale/lv/LC_MESSAGES/sphinx.mo index 80a89e32163..09f1b162b07 100644 Binary files a/sphinx/locale/lv/LC_MESSAGES/sphinx.mo and b/sphinx/locale/lv/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/lv/LC_MESSAGES/sphinx.po b/sphinx/locale/lv/LC_MESSAGES/sphinx.po index dd1773e3c35..14d5dd33866 100644 --- a/sphinx/locale/lv/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/lv/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -7,62 +7,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Latvian (http://www.transifex.com/projects/p/sphinx-1/language/lv/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Latvian (http://www.transifex.com/sphinx-doc/sphinx-1/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 #, python-format -msgid "Fig. %s" -msgstr "" - -#: sphinx/config.py:81 -#, python-format -msgid "Table %s" -msgstr "" - -#: sphinx/config.py:82 -#, python-format -msgid "Listing %s" +msgid "Section %s" msgstr "" -#: sphinx/config.py:89 +#: sphinx/config.py:110 #, python-format -msgid "%s %s documentation" +msgid "Fig. %s" msgstr "" -#: sphinx/environment.py:1880 +#: sphinx/config.py:111 #, python-format -msgid "see %s" +msgid "Table %s" msgstr "" -#: sphinx/environment.py:1883 +#: sphinx/config.py:112 #, python-format -msgid "see also %s" -msgstr "" - -#: sphinx/environment.py:1941 -msgid "Symbols" +msgid "Listing %s" msgstr "" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d.%m.%Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Iebūvētie" @@ -71,64 +51,76 @@ msgstr "Iebūvētie" msgid "Module level" msgstr "Moduļu līmenis" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d.%m.%Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Vispārējs indekss" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "indekss" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "nākošais" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "iepriekšējs" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (iekš " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Sekcijas autors: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Moduļa autors: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Koda autors: " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Autors: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parametri" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Atgriež" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Atgriežamais tips" @@ -157,12 +149,12 @@ msgstr "%s (C tips)" msgid "%s (C variable)" msgstr "%s (C mainīgais)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "funkcija" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "loceklis" @@ -170,7 +162,7 @@ msgstr "loceklis" msgid "macro" msgstr "makross" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "tips" @@ -178,59 +170,72 @@ msgstr "tips" msgid "variable" msgstr "mainīgais" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Izmet" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ tips)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ loceklis)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funkcija)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ klase)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "klase" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (iebūvēta funkcija)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metods)" @@ -245,7 +250,7 @@ msgstr "" msgid "%s (global variable or constant)" msgstr "%s (globālais mainīgais vai konstanta)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atributs)" @@ -254,116 +259,116 @@ msgstr "%s (%s atributs)" msgid "Arguments" msgstr "Argumenti" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "dati" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "atributs" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Mainīgie" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Ceļ" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (moduļī %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (iebūvētais mainīgais)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (moduļī %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (iebūvēta klase)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (klase iekš %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metods)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statiskais metods)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statiskais metods)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s klases metods)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s klases metods)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s atributs)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (modulis)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "moduļi" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Nav ieteicams" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "izņēmums" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "metods" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "klases metods" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "statiskais metods" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "modulis" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr "" @@ -385,188 +390,219 @@ msgstr "direktīva" msgid "role" msgstr "role" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "apkārtnes mainīgais; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%skomandrindas opcija; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "glosārija termins" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "gramatiskais marķieris" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "atsauces virsraksts" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "apkārtnes mainīgais" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "programmas opcija" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Indekss" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Moduļu indekss" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Atlases lapa" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr " Bāzes: %s" +msgid "see %s" +msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "aizstājvārds klasei :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[kods]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Jāizdara" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(<<original entry>> atrodas iekš %s, rinda %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "sākotnējs ieraksts" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[dokumenti]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Moduļa teksts" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>%s izejas teksts</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Apskats: moduļa teksts" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Visi moduļi, kuriem ir izejas teksti</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Uzmanību" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Uzmanies" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Bīstami" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Kļūda" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Mājiens" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Svarīgi" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Piezīme" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Skat.arī" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Padoms" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Brīdinājums" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Jauns versijā %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Mainīts versijā %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Neieteicams no versijas %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "atslēgas vārds" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operators" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objekts" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "priekšraksts" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "iebūvēta funkcija" @@ -575,7 +611,7 @@ msgstr "iebūvēta funkcija" msgid "Table Of Contents" msgstr "Saturs" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -585,11 +621,7 @@ msgstr "Meklēt" msgid "Go" msgstr "Izpildīt" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Ievadiet meklējamus terminus vai moduļa, klases vai funkcijas vārdu." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Rādīt izejas tekstu" @@ -637,15 +669,15 @@ msgstr "ātra piekļuve visiem moduliem" msgid "all functions, classes, terms" msgstr "visas funkcijas, klases un termini" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Indekss – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Pilns indekss vienā lappusē" @@ -661,35 +693,35 @@ msgstr "var būt milzīgs" msgid "Navigation" msgstr "Navigācija" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Meklēt iekš %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Par šiem dokumentiem" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Pēdējas izmaiņas %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -738,13 +770,13 @@ msgstr "meklēt" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Atlases rezultāti" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -761,13 +793,13 @@ msgstr "Šī lappuse" #: 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 "Izmaiņas versijā %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -786,33 +818,34 @@ msgstr "Izmaiņas iekš C API" msgid "Other changes" msgstr "Citas izmaiņas" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Pastāvīga norāde šo virsrakstu" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Pastāvīga norāde uz šo definīciju" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Paslēpt atlases vārdus" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -829,44 +862,53 @@ msgstr "Savērst sānjoslu" msgid "Contents" msgstr "Saturs" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Izlaidums" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Vēres" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "turpinājums no iepriekšējās lappuses" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Turpnājums nākošā lappusē" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[attēls: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[attēls]" diff --git a/sphinx/locale/mk/LC_MESSAGES/sphinx.js b/sphinx/locale/mk/LC_MESSAGES/sphinx.js index 8328cb61391..542936e208f 100644 --- a/sphinx/locale/mk/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/mk/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "mk", "plural_expr": "(n % 10 == 1 && n % 100 != 11) ? 0 : 1", "messages": {"Next topic": "", "Index": "", "%(filename)s — %(docstitle)s": "", "Welcome! This is": "", "Copyright": "", "C API changes": "", "quick access to all modules": "", "© Copyright %(copyright)s.": "", "Global Module Index": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "", "General Index": "\u0413\u043b\u0430\u0432\u043d\u0430 \u0441\u043e\u0434\u0440\u0436\u0438\u043d\u0430", "next chapter": "", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "", "Permalink to this headline": "", "About these documents": "", "Preparing search...": "", ", in ": "", "Navigation": "", "Expand sidebar": "", "the documentation for": "", "Complete Table of Contents": "", "Contents": "", "can be huge": "", "Changes in Version %(version)s — %(docstitle)s": "", "Other changes": "", "Hide Search Matches": "", "Quick search": "", "Show Source": "", "Search": "", "This Page": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "last updated": "", "Collapse sidebar": "", "Go": "", "Table Of Contents": "", "Search within %(docstitle)s": "", "all functions, classes, terms": "", "Please activate JavaScript to enable the search\n functionality.": "", "Indices and tables:": "", "lists all sections and subsections": "", "Index pages by letter": "", "search": "", "Permalink to this definition": "", "Previous topic": "", "Overview": "", "Last updated on %(last_updated)s.": "", "Searching": "", "search this documentation": "", "Automatically generated list of changes in version %(version)s": "", "Full index on one page": "", "Enter search terms or a module, class or function name.": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "Library changes": "", "Search Page": "", "Search Results": ""}}); \ No newline at end of file +Documentation.addTranslations({"locale": "mk", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "", "Automatically generated list of changes in version %(version)s": "", "C API changes": "", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "", "Contents": "", "Copyright": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Full index on one page": "", "General Index": "\u0413\u043b\u0430\u0432\u043d\u0430 \u0441\u043e\u0434\u0440\u0436\u0438\u043d\u0430", "Global Module Index": "", "Go": "", "Hide Search Matches": "", "Index": "", "Index – %(key)s": "", "Index pages by letter": "", "Indices and tables:": "", "Last updated on %(last_updated)s.": "", "Library changes": "", "Navigation": "", "Next topic": "", "Other changes": "", "Overview": "", "Permalink to this definition": "", "Permalink to this headline": "", "Please activate JavaScript to enable the search\n functionality.": "", "Preparing search...": "", "Previous topic": "", "Quick search": "", "Search": "", "Search Page": "", "Search Results": "", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "", "Searching": "", "Show Source": "", "Table Of Contents": "", "This Page": "", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "", "can be huge": "", "last updated": "", "lists all sections and subsections": "", "next chapter": "", "previous chapter": "", "quick access to all modules": "", "search": "", "search this documentation": "", "the documentation for": ""}, "plural_expr": "(n % 10 == 1 && n % 100 != 11) ? 0 : 1"}); \ No newline at end of file diff --git a/sphinx/locale/mk/LC_MESSAGES/sphinx.mo b/sphinx/locale/mk/LC_MESSAGES/sphinx.mo index bed0f705594..f89ee9f4952 100644 Binary files a/sphinx/locale/mk/LC_MESSAGES/sphinx.mo and b/sphinx/locale/mk/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/mk/LC_MESSAGES/sphinx.po b/sphinx/locale/mk/LC_MESSAGES/sphinx.po index 59635b14272..c0d75eb9cc1 100644 --- a/sphinx/locale/mk/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/mk/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -8,62 +8,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Macedonian (http://www.transifex.com/projects/p/sphinx-1/language/mk/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Macedonian (http://www.transifex.com/sphinx-doc/sphinx-1/language/mk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: mk\n" "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s документација" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "погледни %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "погледни %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Симболи" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Предлог за подобрување на Python; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d %B, %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Вградени" @@ -72,64 +52,76 @@ msgstr "Вградени" msgid "Module level" msgstr "Ниво на модул" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d %b, %Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Главна содржина" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "содржина" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "следна" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "претходна" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s документација" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (во " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Автор на секцијата:" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Автор на модул:" -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Автор на код:" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Автор: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Параметри" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Враќа" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Повратен тип" @@ -158,12 +150,12 @@ msgstr "%s (C тип)" msgid "%s (C variable)" msgstr "%s (C променлива)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "функција" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "член" @@ -171,7 +163,7 @@ msgstr "член" msgid "macro" msgstr "макро" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "тип" @@ -179,59 +171,72 @@ msgstr "тип" msgid "variable" msgstr "променлива" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Фрла" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ тип)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ член)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ функција)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ класа)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "класа" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (вградена функција)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s метод)" @@ -246,7 +251,7 @@ msgstr "%s() (класа)" msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "" @@ -255,116 +260,116 @@ msgstr "" msgid "Arguments" msgstr "" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr "" @@ -386,188 +391,219 @@ msgstr "" msgid "role" msgstr "" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "погледни %s" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "погледни %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Симболи" + +#: sphinx/ext/autodoc.py:1297 #, python-format -msgid " Bases: %s" +msgid "Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "" @@ -576,7 +612,7 @@ msgstr "" msgid "Table Of Contents" msgstr "" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -586,11 +622,7 @@ msgstr "" msgid "Go" msgstr "" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "" - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "" @@ -638,15 +670,15 @@ msgstr "" msgid "all functions, classes, terms" msgstr "" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "" @@ -662,35 +694,35 @@ msgstr "" msgid "Navigation" msgstr "" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "" -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -739,13 +771,13 @@ msgstr "" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -762,12 +794,12 @@ msgstr "" #: sphinx/themes/basic/changes/frameset.html:5 #: sphinx/themes/basic/changes/versionchanges.html:12 #, python-format -msgid "Changes in Version %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 @@ -787,33 +819,34 @@ msgstr "" msgid "Other changes" msgstr "" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -830,44 +863,53 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "" diff --git a/sphinx/locale/nb/LC_MESSAGES/sphinx.js b/sphinx/locale/nb/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000000..89472ee6091 --- /dev/null +++ b/sphinx/locale/nb/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "nb", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "", "Automatically generated list of changes in version %(version)s": "", "C API changes": "", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "", "Contents": "", "Copyright": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Full index on one page": "", "General Index": "", "Global Module Index": "", "Go": "", "Hide Search Matches": "", "Index": "", "Index – %(key)s": "", "Index pages by letter": "", "Indices and tables:": "", "Last updated on %(last_updated)s.": "", "Library changes": "", "Navigation": "", "Next topic": "", "Other changes": "", "Overview": "", "Permalink to this definition": "", "Permalink to this headline": "", "Please activate JavaScript to enable the search\n functionality.": "", "Preparing search...": "", "Previous topic": "", "Quick search": "", "Search": "", "Search Page": "", "Search Results": "", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "", "Searching": "", "Show Source": "", "Table Of Contents": "", "This Page": "", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "", "can be huge": "", "last updated": "", "lists all sections and subsections": "", "next chapter": "", "previous chapter": "", "quick access to all modules": "", "search": "", "search this documentation": "", "the documentation for": ""}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/nb/LC_MESSAGES/sphinx.mo b/sphinx/locale/nb/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000000..178d1785aeb Binary files /dev/null and b/sphinx/locale/nb/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/nb/LC_MESSAGES/sphinx.po b/sphinx/locale/nb/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000000..cdd31369ea6 --- /dev/null +++ b/sphinx/locale/nb/LC_MESSAGES/sphinx.po @@ -0,0 +1,914 @@ +# Translations template for Sphinx. +# Copyright (C) 2016 ORGANIZATION +# This file is distributed under the same license as the Sphinx project. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Sphinx\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/sphinx-doc/sphinx-1/language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 +#, python-format +msgid "Fig. %s" +msgstr "" + +#: sphinx/config.py:111 +#, python-format +msgid "Table %s" +msgstr "" + +#: sphinx/config.py:112 +#, python-format +msgid "Listing %s" +msgstr "" + +#: sphinx/roles.py:187 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "" + +#: sphinx/builders/changes.py:75 +msgid "Builtins" +msgstr "" + +#: sphinx/builders/changes.py:77 +msgid "Module level" +msgstr "" + +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 +#, python-format +msgid "%b %d, %Y" +msgstr "" + +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "" + +#: sphinx/builders/html.py:315 +msgid "index" +msgstr "" + +#: sphinx/builders/html.py:377 +msgid "next" +msgstr "" + +#: sphinx/builders/html.py:386 +msgid "previous" +msgstr "" + +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 +msgid " (in " +msgstr "" + +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 +msgid "Section author: " +msgstr "" + +#: sphinx/directives/other.py:151 +msgid "Module author: " +msgstr "" + +#: sphinx/directives/other.py:153 +msgid "Code author: " +msgstr "" + +#: sphinx/directives/other.py:155 +msgid "Author: " +msgstr "" + +#: sphinx/domains/__init__.py:277 +#, python-format +msgid "%s %s" +msgstr "" + +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 +msgid "Parameters" +msgstr "" + +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 +msgid "Returns" +msgstr "" + +#: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 +#: sphinx/domains/python.py:163 +msgid "Return type" +msgstr "" + +#: sphinx/domains/c.py:177 +#, python-format +msgid "%s (C function)" +msgstr "" + +#: sphinx/domains/c.py:179 +#, python-format +msgid "%s (C member)" +msgstr "" + +#: sphinx/domains/c.py:181 +#, python-format +msgid "%s (C macro)" +msgstr "" + +#: sphinx/domains/c.py:183 +#, python-format +msgid "%s (C type)" +msgstr "" + +#: sphinx/domains/c.py:185 +#, python-format +msgid "%s (C variable)" +msgstr "" + +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 +msgid "function" +msgstr "" + +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 +msgid "member" +msgstr "" + +#: sphinx/domains/c.py:244 +msgid "macro" +msgstr "" + +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 +msgid "type" +msgstr "" + +#: sphinx/domains/c.py:246 +msgid "variable" +msgstr "" + +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "" + +#: sphinx/domains/cpp.py:4205 +#, python-format +msgid "%s (C++ type)" +msgstr "" + +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 +#, python-format +msgid "%s (C++ member)" +msgstr "" + +#: sphinx/domains/cpp.py:4238 +#, python-format +msgid "%s (C++ function)" +msgstr "" + +#: sphinx/domains/cpp.py:4249 +#, python-format +msgid "%s (C++ class)" +msgstr "" + +#: sphinx/domains/cpp.py:4260 +#, python-format +msgid "%s (C++ enum)" +msgstr "" + +#: sphinx/domains/cpp.py:4281 +#, python-format +msgid "%s (C++ enumerator)" +msgstr "" + +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 +msgid "class" +msgstr "" + +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 +msgid "enum" +msgstr "" + +#: sphinx/domains/cpp.py:4423 +msgid "enumerator" +msgstr "" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 +#, python-format +msgid "%s() (built-in function)" +msgstr "" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 +#, python-format +msgid "%s() (%s method)" +msgstr "" + +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 +#, python-format +msgid "%s (%s attribute)" +msgstr "" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "" + +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 +msgid "data" +msgstr "" + +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 +msgid "attribute" +msgstr "" + +#: sphinx/domains/python.py:154 +msgid "Variables" +msgstr "" + +#: sphinx/domains/python.py:158 +msgid "Raises" +msgstr "" + +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 +#, python-format +msgid "%s() (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:311 +#, python-format +msgid "%s (built-in variable)" +msgstr "" + +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 +#, python-format +msgid "%s (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:328 +#, python-format +msgid "%s (built-in class)" +msgstr "" + +#: sphinx/domains/python.py:329 +#, python-format +msgid "%s (class in %s)" +msgstr "" + +#: sphinx/domains/python.py:369 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "" + +#: sphinx/domains/python.py:381 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "" + +#: sphinx/domains/python.py:384 +#, python-format +msgid "%s() (%s static method)" +msgstr "" + +#: sphinx/domains/python.py:394 +#, python-format +msgid "%s() (%s.%s class method)" +msgstr "" + +#: sphinx/domains/python.py:397 +#, python-format +msgid "%s() (%s class method)" +msgstr "" + +#: sphinx/domains/python.py:407 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "" + +#: sphinx/domains/python.py:488 +#, python-format +msgid "%s (module)" +msgstr "" + +#: sphinx/domains/python.py:545 +msgid "Python Module Index" +msgstr "" + +#: sphinx/domains/python.py:546 +msgid "modules" +msgstr "" + +#: sphinx/domains/python.py:592 +msgid "Deprecated" +msgstr "" + +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 +msgid "exception" +msgstr "" + +#: sphinx/domains/python.py:618 +msgid "method" +msgstr "" + +#: sphinx/domains/python.py:619 +msgid "class method" +msgstr "" + +#: sphinx/domains/python.py:620 +msgid "static method" +msgstr "" + +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 +msgid "module" +msgstr "" + +#: sphinx/domains/python.py:787 +msgid " (deprecated)" +msgstr "" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "" + +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 +#, python-format +msgid "environment variable; %s" +msgstr "" + +#: sphinx/domains/std.py:186 +#, python-format +msgid "%scommand line option; %s" +msgstr "" + +#: sphinx/domains/std.py:434 +msgid "glossary term" +msgstr "" + +#: sphinx/domains/std.py:435 +msgid "grammar token" +msgstr "" + +#: sphinx/domains/std.py:436 +msgid "reference label" +msgstr "" + +#: sphinx/domains/std.py:438 +msgid "environment variable" +msgstr "" + +#: sphinx/domains/std.py:439 +msgid "program option" +msgstr "" + +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 +msgid "Index" +msgstr "" + +#: sphinx/domains/std.py:474 +msgid "Module Index" +msgstr "" + +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 +#, python-format +msgid "alias of :class:`%s`" +msgstr "" + +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 +#, python-format +msgid "[graph: %s]" +msgstr "" + +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 +msgid "[graph]" +msgstr "" + +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 +#, python-format +msgid "(in %s v%s)" +msgstr "" + +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 +msgid "[source]" +msgstr "" + +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 +msgid "Todo" +msgstr "" + +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 +#, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" + +#: sphinx/ext/todo.py:146 +msgid "original entry" +msgstr "" + +#: sphinx/ext/viewcode.py:166 +msgid "[docs]" +msgstr "" + +#: sphinx/ext/viewcode.py:180 +msgid "Module code" +msgstr "" + +#: sphinx/ext/viewcode.py:186 +#, python-format +msgid "<h1>Source code for %s</h1>" +msgstr "" + +#: sphinx/ext/viewcode.py:212 +msgid "Overview: module code" +msgstr "" + +#: sphinx/ext/viewcode.py:213 +msgid "<h1>All modules for which code is available</h1>" +msgstr "" + +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 +msgid "Attention" +msgstr "" + +#: sphinx/locale/__init__.py:160 +msgid "Caution" +msgstr "" + +#: sphinx/locale/__init__.py:161 +msgid "Danger" +msgstr "" + +#: sphinx/locale/__init__.py:162 +msgid "Error" +msgstr "" + +#: sphinx/locale/__init__.py:163 +msgid "Hint" +msgstr "" + +#: sphinx/locale/__init__.py:164 +msgid "Important" +msgstr "" + +#: sphinx/locale/__init__.py:165 +msgid "Note" +msgstr "" + +#: sphinx/locale/__init__.py:166 +msgid "See also" +msgstr "" + +#: sphinx/locale/__init__.py:167 +msgid "Tip" +msgstr "" + +#: sphinx/locale/__init__.py:168 +msgid "Warning" +msgstr "" + +#: sphinx/locale/__init__.py:172 +#, python-format +msgid "New in version %s" +msgstr "" + +#: sphinx/locale/__init__.py:173 +#, python-format +msgid "Changed in version %s" +msgstr "" + +#: sphinx/locale/__init__.py:174 +#, python-format +msgid "Deprecated since version %s" +msgstr "" + +#: sphinx/locale/__init__.py:180 +msgid "keyword" +msgstr "" + +#: sphinx/locale/__init__.py:181 +msgid "operator" +msgstr "" + +#: sphinx/locale/__init__.py:182 +msgid "object" +msgstr "" + +#: sphinx/locale/__init__.py:184 +msgid "statement" +msgstr "" + +#: sphinx/locale/__init__.py:185 +msgid "built-in function" +msgstr "" + +#: sphinx/themes/agogo/layout.html:46 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:11 sphinx/themes/scrolls/layout.html:35 +msgid "Table Of Contents" +msgstr "" + +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/searchresults.html:10 +msgid "Search" +msgstr "" + +#: sphinx/themes/agogo/layout.html:54 sphinx/themes/basic/searchbox.html:15 +msgid "Go" +msgstr "" + +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 +msgid "Show Source" +msgstr "" + +#: sphinx/themes/basic/defindex.html:11 +msgid "Overview" +msgstr "" + +#: sphinx/themes/basic/defindex.html:15 +msgid "Welcome! This is" +msgstr "" + +#: sphinx/themes/basic/defindex.html:16 +msgid "the documentation for" +msgstr "" + +#: sphinx/themes/basic/defindex.html:17 +msgid "last updated" +msgstr "" + +#: sphinx/themes/basic/defindex.html:20 +msgid "Indices and tables:" +msgstr "" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "" + +#: sphinx/themes/basic/defindex.html:28 +msgid "Global Module Index" +msgstr "" + +#: sphinx/themes/basic/defindex.html:29 +msgid "quick access to all modules" +msgstr "" + +#: sphinx/themes/basic/defindex.html:31 +msgid "all functions, classes, terms" +msgstr "" + +#: sphinx/themes/basic/genindex-single.html:33 +#, python-format +msgid "Index – %(key)s" +msgstr "" + +#: sphinx/themes/basic/genindex-single.html:61 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:72 +msgid "Full index on one page" +msgstr "" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "" + +#: sphinx/themes/basic/layout.html:29 +msgid "Navigation" +msgstr "" + +#: sphinx/themes/basic/layout.html:123 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/layout.html:132 +msgid "About these documents" +msgstr "" + +#: sphinx/themes/basic/layout.html:141 +msgid "Copyright" +msgstr "" + +#: sphinx/themes/basic/layout.html:186 +#, python-format +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:188 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:192 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "" +"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "" + +#: sphinx/themes/basic/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/relations.html:11 +msgid "Previous topic" +msgstr "" + +#: sphinx/themes/basic/relations.html:13 +msgid "previous chapter" +msgstr "" + +#: sphinx/themes/basic/relations.html:16 +msgid "Next topic" +msgstr "" + +#: sphinx/themes/basic/relations.html:18 +msgid "next chapter" +msgstr "" + +#: sphinx/themes/basic/search.html:27 +msgid "" +"Please activate JavaScript to enable the search\n" +" functionality." +msgstr "" + +#: sphinx/themes/basic/search.html:32 +msgid "" +"From here you can search these documents. Enter your search\n" +" words into the box below and click \"search\". Note that the search\n" +" 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:39 +#: sphinx/themes/basic/searchresults.html:17 +msgid "search" +msgstr "" + +#: sphinx/themes/basic/search.html:43 +#: sphinx/themes/basic/searchresults.html:21 +#: sphinx/themes/basic/static/searchtools.js_t:287 +msgid "Search Results" +msgstr "" + +#: sphinx/themes/basic/search.html:45 +#: sphinx/themes/basic/searchresults.html:23 +#: sphinx/themes/basic/static/searchtools.js_t:289 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" + +#: sphinx/themes/basic/searchbox.html:12 +msgid "Quick search" +msgstr "" + +#: sphinx/themes/basic/sourcelink.html:12 +msgid "This Page" +msgstr "" + +#: 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 "" + +#: sphinx/themes/basic/changes/rstsource.html:5 +#, python-format +msgid "%(filename)s — %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:17 +#, python-format +msgid "Automatically generated list of changes in version %(version)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 +msgid "Permalink to this headline" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 +msgid "Permalink to this definition" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:208 +msgid "Hide Search Matches" +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:121 +msgid "Searching" +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:126 +msgid "Preparing search..." +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:291 +#, python-format +msgid "Search finished, found %s page(s) matching the search query." +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:344 +msgid ", in " +msgstr "" + +#: sphinx/themes/classic/static/sidebar.js_t:83 +msgid "Expand sidebar" +msgstr "" + +#: sphinx/themes/classic/static/sidebar.js_t:96 +#: sphinx/themes/classic/static/sidebar.js_t:124 +msgid "Collapse sidebar" +msgstr "" + +#: sphinx/themes/haiku/layout.html:24 +msgid "Contents" +msgstr "" + +#: sphinx/writers/html.py:389 +msgid "Permalink to this code" +msgstr "" + +#: sphinx/writers/html.py:393 +msgid "Permalink to this image" +msgstr "" + +#: sphinx/writers/html.py:395 +msgid "Permalink to this toctree" +msgstr "" + +#: sphinx/writers/html.py:717 +msgid "Permalink to this table" +msgstr "" + +#: sphinx/writers/latex.py:380 +msgid "Release" +msgstr "" + +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 +msgid "Footnotes" +msgstr "" + +#: sphinx/writers/latex.py:1112 +msgid "continued from previous page" +msgstr "" + +#: sphinx/writers/latex.py:1118 +msgid "Continued on next page" +msgstr "" + +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 +#, python-format +msgid "[image: %s]" +msgstr "" + +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 +msgid "[image]" +msgstr "" diff --git a/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js b/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js index ae01bb815bb..aa6e6944cfc 100644 --- a/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "nb_NO", "plural_expr": "(n != 1)", "messages": {"Next topic": "Neste emne", "Index": "Index", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "", "Copyright": "Copyright", "C API changes": "Endringer i C API", "quick access to all modules": "snarvei til alle moduler", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "Global Modulindex", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "Index – %(key)s", "General Index": "Hovedindex", "next chapter": "neste kapittel", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "Forrige kapittel", "Permalink to this headline": "Permalink til denne oversikten", "About these documents": "Om disse dokumenter", "Preparing search...": "", ", in ": "", "Navigation": "Navigering", "Expand sidebar": "Utvid sidepanelet", "the documentation for": "", "Complete Table of Contents": "Komplett Innholdsfortegnelse", "Contents": "Innhold", "can be huge": "kan bli stor", "Changes in Version %(version)s — %(docstitle)s": "Endringer i version %(version)s — %(docstitle)s", "Other changes": "Andre endringer", "Hide Search Matches": "Skjul s\u00f8keresultat", "Quick search": "Hurtigs\u00f8k", "Show Source": "Vis kildekode", "Search": "S\u00f8k", "This Page": "Denne siden", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "her kan du s\u00f8ke blant disse dokumentene. Angi s\u00f8keord nedfor og klikk \"s\u00f8k\".\n S\u00f8ket m\u00e5 treffe p\u00e5 samtlige s\u00f8keord.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Lagd med <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "", "Collapse sidebar": "Skjul sidepanelet", "Go": "G\u00e5", "Table Of Contents": "Innholdsfortegnelse", "Search within %(docstitle)s": "S\u00f8k blant %(docstitle)s", "all functions, classes, terms": "alla funksjoner, klasser, vilk\u00e5r", "Please activate JavaScript to enable the search\n functionality.": "Vennligst aktiver JavaScript for \u00e5 aktivere s\u00f8k.", "Indices and tables:": "Index og tabeller", "lists all sections and subsections": "liste over alle paragrafer og underparagrafer", "Index pages by letter": "Innholdsfortegnelse per bokstav", "search": "s\u00f8k", "Permalink to this definition": "Permalink til denne definisjonen", "Previous topic": "Forrige tittel", "Overview": "Oversikt", "Last updated on %(last_updated)s.": "Sist oppdatert %(last_updated)s.", "Searching": "", "search this documentation": "s\u00f8k i dette dokumentet", "Automatically generated list of changes in version %(version)s": "Automatisk generert liste over endringer i versjon %(version)s", "Full index on one page": "Hele innholdsfortegnelsen p\u00e5 en side", "Enter search terms or a module, class or function name.": "Angi s\u00f8keord eller modul-, klasse- eller funksjonsnavn.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "Endringer i biblioteket", "Search Page": "S\u00f8keside", "Search Results": "S\u00f8keresultat"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "nb_NO", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "Om disse dokumenter", "Automatically generated list of changes in version %(version)s": "Automatisk generert liste over endringer i versjon %(version)s", "C API changes": "Endringer i C API", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "Skjul sidepanelet", "Complete Table of Contents": "Komplett Innholdsfortegnelse", "Contents": "Innhold", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Lagd med <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "Utvid sidepanelet", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "her kan du s\u00f8ke blant disse dokumentene. Angi s\u00f8keord nedfor og klikk \"s\u00f8k\".\n S\u00f8ket m\u00e5 treffe p\u00e5 samtlige s\u00f8keord.", "Full index on one page": "Hele innholdsfortegnelsen p\u00e5 en side", "General Index": "Hovedindex", "Global Module Index": "Global Modulindex", "Go": "G\u00e5", "Hide Search Matches": "Skjul s\u00f8keresultat", "Index": "Index", "Index – %(key)s": "Index – %(key)s", "Index pages by letter": "Innholdsfortegnelse per bokstav", "Indices and tables:": "Index og tabeller", "Last updated on %(last_updated)s.": "Sist oppdatert %(last_updated)s.", "Library changes": "Endringer i biblioteket", "Navigation": "Navigering", "Next topic": "Neste emne", "Other changes": "Andre endringer", "Overview": "Oversikt", "Permalink to this definition": "Permalink til denne definisjonen", "Permalink to this headline": "Permalink til denne oversikten", "Please activate JavaScript to enable the search\n functionality.": "Vennligst aktiver JavaScript for \u00e5 aktivere s\u00f8k.", "Preparing search...": "", "Previous topic": "Forrige tittel", "Quick search": "Hurtigs\u00f8k", "Search": "S\u00f8k", "Search Page": "S\u00f8keside", "Search Results": "S\u00f8keresultat", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "S\u00f8k blant %(docstitle)s", "Searching": "", "Show Source": "Vis kildekode", "Table Of Contents": "Innholdsfortegnelse", "This Page": "Denne siden", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "alla funksjoner, klasser, vilk\u00e5r", "can be huge": "kan bli stor", "last updated": "", "lists all sections and subsections": "liste over alle paragrafer og underparagrafer", "next chapter": "neste kapittel", "previous chapter": "Forrige kapittel", "quick access to all modules": "snarvei til alle moduler", "search": "s\u00f8k", "search this documentation": "s\u00f8k i dette dokumentet", "the documentation for": ""}, "plural_expr": "(n != 1)"}); \ 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 index dcc00ede69d..116610d9436 100644 Binary files a/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo and b/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po b/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po index afe5691627e..a1790e43a14 100644 --- a/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -7,62 +7,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/sphinx-1/language/nb_NO/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/sphinx-doc/sphinx-1/language/nb_NO/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: nb_NO\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 #, python-format -msgid "Fig. %s" -msgstr "" - -#: sphinx/config.py:81 -#, python-format -msgid "Table %s" +msgid "Section %s" msgstr "" -#: sphinx/config.py:82 +#: sphinx/config.py:110 #, python-format -msgid "Listing %s" +msgid "Fig. %s" msgstr "" -#: sphinx/config.py:89 +#: sphinx/config.py:111 #, python-format -msgid "%s %s documentation" +msgid "Table %s" msgstr "" -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "se %s" - -#: sphinx/environment.py:1883 +#: sphinx/config.py:112 #, python-format -msgid "see also %s" -msgstr "se også %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" +msgid "Listing %s" msgstr "" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%B %d, %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Innebygde" @@ -71,64 +51,76 @@ msgstr "Innebygde" msgid "Module level" msgstr "Modulnivå" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%b %d, %Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Hovedindex" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "index" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "neste" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "forrige" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr "(i " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Seksjon forfatter: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Modul forfattar: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Kildekode forfatter: " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Forfatter: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parametere" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Returnere" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Retur type" @@ -157,12 +149,12 @@ msgstr "%s (C-type)" msgid "%s (C variable)" msgstr "%s (C-variabel)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "funksjon" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "medlem" @@ -170,7 +162,7 @@ msgstr "medlem" msgid "macro" msgstr "makro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "type" @@ -178,59 +170,72 @@ msgstr "type" msgid "variable" msgstr "variabel" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Kaster" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ type)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ medlem)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funksjon)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ klasse)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "klasse" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (innebygd funksjon)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metode)" @@ -245,7 +250,7 @@ msgstr "%s() (klasse)" msgid "%s (global variable or constant)" msgstr "%s (global variabel eller konstant)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s attribut)" @@ -254,116 +259,116 @@ msgstr "%s (%s attribut)" msgid "Arguments" msgstr "Argument" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "data" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "attributt" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Variabler" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Hever" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (i modul %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (innebygd variabel)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (i modul %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (innebygd klasse)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (klasse i %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metode)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statisk metode)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statisk metode)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s klassemetode)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s klassemetode)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s attributt)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (modul)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Python Modulindex" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "moduler" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Foreldet" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "untak" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "metode" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "klassemetode" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "statisk metode" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "modul" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (foreldet)" @@ -385,188 +390,219 @@ msgstr "direktiv" msgid "role" msgstr "rolle" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "miljøvariabel; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%skommandolinje valg; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "ordliste" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "grammatikk token" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "referanse-etikett" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "miljøvariabel" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "programvalg" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Index" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Modulindex" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Søkeside" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr " Baser: %s" +msgid "see %s" +msgstr "se %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "se også %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "alias for :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[kilde]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Todo" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(Den <<opprinnelige oppføringen>> finnes i %s, på linje %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "opprinnelig oppføring" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[dokumentasjon]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Modul kildekode" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Kildekode for %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Oversikt: modulkildekode" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Alla moduler hvor kildekode finnes</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Obs" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Advarsel" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Fare" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Feil" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Hint" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Viktig" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Obs" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Se også" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Tips" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Advarsel" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Nytt i version %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Endret i version %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Foreldet siden version %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "nøkkelord" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "uttrykk" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "innebygde funksjoner" @@ -575,7 +611,7 @@ msgstr "innebygde funksjoner" msgid "Table Of Contents" msgstr "Innholdsfortegnelse" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -585,11 +621,7 @@ msgstr "Søk" msgid "Go" msgstr "Gå" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Angi søkeord eller modul-, klasse- eller funksjonsnavn." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Vis kildekode" @@ -637,15 +669,15 @@ msgstr "snarvei til alle moduler" msgid "all functions, classes, terms" msgstr "alla funksjoner, klasser, vilkår" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Index – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Hele innholdsfortegnelsen på en side" @@ -661,35 +693,35 @@ msgstr "kan bli stor" msgid "Navigation" msgstr "Navigering" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Søk blant %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Om disse dokumenter" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Sist oppdatert %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -738,13 +770,13 @@ msgstr "søk" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Søkeresultat" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -761,13 +793,13 @@ msgstr "Denne siden" #: 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 "Endringer i version %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -786,33 +818,34 @@ msgstr "Endringer i C API" msgid "Other changes" msgstr "Andre endringer" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Permalink til denne oversikten" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Permalink til denne definisjonen" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Skjul søkeresultat" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -829,44 +862,53 @@ msgstr "Skjul sidepanelet" msgid "Contents" msgstr "Innhold" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Utgivelse" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Fotnoter" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "fortsettelse fra forrige side" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Fortsetter på neste side" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[bilde]" diff --git a/sphinx/locale/ne/LC_MESSAGES/sphinx.js b/sphinx/locale/ne/LC_MESSAGES/sphinx.js index 00df298617f..a92aafcb90f 100644 --- a/sphinx/locale/ne/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/ne/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "ne", "plural_expr": "(n != 1)", "messages": {"Next topic": "\u092a\u091b\u093f\u0932\u094d\u0932\u094b \u0935\u093f\u0937\u092f", "Index": "\u0905\u0928\u0941\u0938\u0941\u091a\u0940", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "", "Copyright": "\u0915\u092a\u093f\u0930\u093e\u0907\u091f ", "C API changes": "C API \u0915\u093e \u092a\u0930\u093f\u0935\u0930\u094d\u0924\u0928\u0939\u0930\u0941 ", "quick access to all modules": "\u0938\u092c\u0948 \u092e\u094b\u0926\u0941\u0932\u0947\u0938\u092e\u093e \u091b\u093f\u091f\u0948 \u091c\u093e\u0928\u0941\u0939\u094b\u0938\u094d", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "\u0917\u094d\u0932\u094b\u092c\u0932 \u092e\u0921\u0941\u0932 \u0905\u0928\u0941\u0938\u0941\u091a\u0940", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "Index – %(key)s", "General Index": "\u0938\u093e\u092e\u093e\u0928\u094d\u092f \u0905\u0928\u0941\u0938\u0941\u091a\u0940", "next chapter": "\u092a\u091b\u093f\u0932\u094d\u0932\u094b \u0916\u0928\u094d\u0921", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "\u0905\u0918\u093f\u0932\u094d\u0932\u094b \u0916\u0928\u094d\u0921", "Permalink to this headline": "\u092f\u094b \u0936\u093f\u0930\u094d\u0937\u0915\u0915\u094b \u0932\u093e\u0917\u093f \u092a\u0930\u094d\u092e\u093e\u0932\u093f\u0928\u094d\u0915 \u0964 ", "About these documents": "\u092f\u0940 \u0921\u0915\u0941\u092e\u0947\u0928\u094d\u091f\u0939\u0930\u0941\u0915\u094b \u092c\u093e\u0930\u0947\u092e\u093e", "Preparing search...": "", ", in ": "", "Navigation": "\u0928\u0947\u092d\u093f\u0917\u0947\u0938\u0928 ", "Expand sidebar": "\u0938\u093e\u0907\u0921\u092c\u0930 \u0920\u0941\u0932\u094b \u092c\u0928\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d", "the documentation for": "", "Complete Table of Contents": "\u092a\u0941\u0930\u093e \u0935\u093f\u0937\u092f\u0938\u0942\u091a\u0940", "Contents": "\u0935\u093f\u0937\u092f\u0938\u0942\u091a\u0940", "can be huge": "\u0927\u0947\u0930\u0948 \u0920\u0941\u0932\u094b \u0939\u0941\u0928 \u0938\u0915\u094d\u091b", "Changes in Version %(version)s — %(docstitle)s": "%(version)s — %(docstitle)s \u092e\u093e \u092d\u090f\u0915\u093e \u092b\u0930\u0915\u0939\u0930\u0941 ", "Other changes": "\u0905\u0930\u0941 \u092a\u0930\u093f\u0935\u0930\u094d\u0924\u0928\u0939\u0930\u0941 ", "Hide Search Matches": "\u0916\u094b\u091c\u0947\u0915\u094b \u0928\u0924\u093f\u091c\u093e\u0939\u0930\u0941 \u0932\u0941\u0915\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d", "Quick search": "\u091b\u093f\u091f\u094d\u091f\u094b \u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d", "Show Source": "\u0938\u094d\u0930\u094b\u0924 \u0926\u0947\u0916\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d ", "Search": "\u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d ", "This Page": "\u092f\u094b \u092a\u093e\u0928\u093e", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u092f\u0939\u093e\u0901\u092c\u093e\u091f \u0924\u092a\u093e\u0908\u0902\u0932\u0947 \u092f\u0940 \u0921\u094d\u0915\u0941\u092e\u0947\u0928\u094d\u091f\u0939\u0930\u0941 \u0916\u094b\u091c\u094d\u0928\u0938\u0915\u094d\u0928\u0941 \u0939\u0941\u0928\u094d\u091b \u0964 \u0916\u094b\u091c\u094d\u0928 \u0936\u092c\u094d\u0926\u0939\u0930\u0941\n\u0924\u0932\u0915\u094b \u092c\u0915\u094d\u0938\u092e\u093e \u0932\u0947\u0916\u094d\u200d\u0928\u0941\u0939\u094b\u0938 \u0930 \"\u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d\"\u0925\u093f\u091a\u094d\u0928\u0941\u0939\u094b\u0938 \u0964 \u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d\n\u092b\u0928\u094d\u0915\u094d\u0938\u0928\u0932\u0947 \u0906\u092b\u0948 \u0938\u092c\u0948 \u0936\u092c\u094d\u0926\u0939\u0930\u0941 \u0916\u094b\u091c\u094d\u091b \u0964 \n\u0925\u094b\u0930\u0948 \u0936\u092c\u094d\u0926\u0939\u0930\u0941 \u092d\u090f\u0915\u094b \u092a\u093e\u0928\u093e\u0939\u0930\u0941 \u0928\u0924\u093f\u091c\u093e\u092e\u093e \u0926\u0947\u0916\u093f\u0928\u094d\u0928 \u0964 ", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "last updated": "", "Collapse sidebar": "\u0938\u093e\u0907\u0921\u092c\u0930 \u0938\u093e\u0928\u094b \u092c\u0928\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d", "Go": "\u091c\u093e\u0928\u0941\u0939\u094b\u0938\u094d", "Table Of Contents": "\u0935\u093f\u0937\u092f\u0938\u0942\u091a\u0940", "Search within %(docstitle)s": "", "all functions, classes, terms": "\u0938\u092c\u0948 \u092b\u0928\u094d\u0915\u094d\u0938\u0928\u0938\u094d, \u0915\u0915\u094d\u0937\u093e\u0939\u0930\u0942 \u0930 \u091f\u0930\u094d\u092e\u0938\u094d", "Please activate JavaScript to enable the search\n functionality.": "\u0916\u094b\u091c\u094d\u0928\u0947 \u0915\u093e\u0930\u094d\u092f \u0906\u0917\u093e\u0921\u0940 \u092c\u0922\u093e\u0909\u0928\u0915\u094b \u0932\u093e\u0917\u093f \u091c\u093e\u092d\u093e\u0938\u094d\u0915\u0943\u092a\u094d\u091f \u091a\u0932\u093e\u0908\u0926\u093f\u0928\u0941\u0939\u094b\u0938 ", "Indices and tables:": "\u0907\u0928\u094d\u0921\u0940\u0938\u0940\u0938\u094d\u0938 \u0930 \u0924\u0932\u093f\u0915\u093e", "lists all sections and subsections": "\u0938\u092c\u0948 \u0938\u0947\u0915\u094d\u0938\u0928 \u0930 \u0938\u0935\u0938\u0947\u0915\u094d\u0938\u0928 \u0926\u0947\u0916\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d", "Index pages by letter": "\u0905\u0915\u094d\u0937\u0930 \u0905\u0928\u0941\u0938\u093e\u0930 \u0905\u0928\u0941\u0938\u0941\u091a\u0940\u0915\u093e \u092a\u093e\u0928\u093e", "search": "\u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d", "Permalink to this definition": "\u092f\u094b \u0905\u0930\u094d\u0925\u0915\u094b \u0932\u093e\u0917\u093f \u092a\u0930\u094d\u092e\u093e\u0932\u093f\u0928\u094d\u0915", "Previous topic": "\u0905\u0918\u093f\u0932\u094d\u0932\u094b \u0935\u093f\u0937\u092f ", "Overview": "\u092a\u0941\u0928\u0930\u093e\u0935\u0932\u094b\u0915\u0928 ", "Last updated on %(last_updated)s.": "\u092f\u094b \u092d\u0928\u094d\u0926\u093e \u0905\u0917\u093e\u0921\u0940 %(last_updated)s \u092e\u093e \u0905\u092a\u0921\u0947\u091f \u092d\u090f\u0915\u094b", "Searching": "", "search this documentation": "\u092f\u094b \u0921\u0915\u0941\u092e\u0947\u0928\u094d\u091f \u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d", "Automatically generated list of changes in version %(version)s": "\u092d\u0930\u094d\u0938\u0928 %(version)s \u092e\u093e \u092d\u090f\u0915\u093e \u092b\u0930\u0915 \u0939\u0930\u0941 \u0906\u092b\u0948 \u091c\u0947\u0928\u0947\u0930\u0947\u091f \u092d\u090f ", "Full index on one page": "\u092a\u0941\u0930\u093e \u0905\u0928\u0941\u0938\u0941\u091a\u0940 \u090f\u0915\u0948 \u092a\u093e\u0928\u093e\u092e\u093e", "Enter search terms or a module, class or function name.": "\u0916\u094b\u091c\u094d\u0928\u0947 \u091f\u0930\u094d\u092e\u0938\u094d \u0905\u0925\u0935\u093e \u090f\u0915 \u092e\u0921\u0941\u0932\u094d, \u0915\u0915\u094d\u0937\u093e \u0905\u0925\u0935\u093e \u092b\u0928\u094d\u0915\u094d\u0938\u0928\u0915\u094b \u0928\u093e\u092e \u0932\u0947\u0916\u094d\u0928\u0941\u0939\u094b\u0938 ", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "\u0932\u093e\u0908\u092c\u094d\u0930\u0947\u0930\u0940\u0915\u093e \u092a\u0930\u093f\u0935\u0930\u094d\u0924\u0928\u0939\u0930\u0941", "Search Page": "\u092a\u093e\u0928\u093e\u092e\u093e \u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d", "Search Results": "\u0916\u094b\u091c\u0947\u0915\u094b \u0928\u0924\u093f\u091c\u093e"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "ne", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "\u092f\u0940 \u0921\u0915\u0941\u092e\u0947\u0928\u094d\u091f\u0939\u0930\u0941\u0915\u094b \u092c\u093e\u0930\u0947\u092e\u093e", "Automatically generated list of changes in version %(version)s": "\u092d\u0930\u094d\u0938\u0928 %(version)s \u092e\u093e \u092d\u090f\u0915\u093e \u092b\u0930\u0915 \u0939\u0930\u0941 \u0906\u092b\u0948 \u091c\u0947\u0928\u0947\u0930\u0947\u091f \u092d\u090f ", "C API changes": "C API \u0915\u093e \u092a\u0930\u093f\u0935\u0930\u094d\u0924\u0928\u0939\u0930\u0941 ", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "\u0938\u093e\u0907\u0921\u092c\u0930 \u0938\u093e\u0928\u094b \u092c\u0928\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d", "Complete Table of Contents": "\u092a\u0941\u0930\u093e \u0935\u093f\u0937\u092f\u0938\u0942\u091a\u0940", "Contents": "\u0935\u093f\u0937\u092f\u0938\u0942\u091a\u0940", "Copyright": "\u0915\u092a\u093f\u0930\u093e\u0907\u091f ", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Expand sidebar": "\u0938\u093e\u0907\u0921\u092c\u0930 \u0920\u0941\u0932\u094b \u092c\u0928\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u092f\u0939\u093e\u0901\u092c\u093e\u091f \u0924\u092a\u093e\u0908\u0902\u0932\u0947 \u092f\u0940 \u0921\u094d\u0915\u0941\u092e\u0947\u0928\u094d\u091f\u0939\u0930\u0941 \u0916\u094b\u091c\u094d\u0928\u0938\u0915\u094d\u0928\u0941 \u0939\u0941\u0928\u094d\u091b \u0964 \u0916\u094b\u091c\u094d\u0928 \u0936\u092c\u094d\u0926\u0939\u0930\u0941\n\u0924\u0932\u0915\u094b \u092c\u0915\u094d\u0938\u092e\u093e \u0932\u0947\u0916\u094d\u200d\u0928\u0941\u0939\u094b\u0938 \u0930 \"\u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d\"\u0925\u093f\u091a\u094d\u0928\u0941\u0939\u094b\u0938 \u0964 \u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d\n\u092b\u0928\u094d\u0915\u094d\u0938\u0928\u0932\u0947 \u0906\u092b\u0948 \u0938\u092c\u0948 \u0936\u092c\u094d\u0926\u0939\u0930\u0941 \u0916\u094b\u091c\u094d\u091b \u0964 \n\u0925\u094b\u0930\u0948 \u0936\u092c\u094d\u0926\u0939\u0930\u0941 \u092d\u090f\u0915\u094b \u092a\u093e\u0928\u093e\u0939\u0930\u0941 \u0928\u0924\u093f\u091c\u093e\u092e\u093e \u0926\u0947\u0916\u093f\u0928\u094d\u0928 \u0964 ", "Full index on one page": "\u092a\u0941\u0930\u093e \u0905\u0928\u0941\u0938\u0941\u091a\u0940 \u090f\u0915\u0948 \u092a\u093e\u0928\u093e\u092e\u093e", "General Index": "\u0938\u093e\u092e\u093e\u0928\u094d\u092f \u0905\u0928\u0941\u0938\u0941\u091a\u0940", "Global Module Index": "\u0917\u094d\u0932\u094b\u092c\u0932 \u092e\u0921\u0941\u0932 \u0905\u0928\u0941\u0938\u0941\u091a\u0940", "Go": "\u091c\u093e\u0928\u0941\u0939\u094b\u0938\u094d", "Hide Search Matches": "\u0916\u094b\u091c\u0947\u0915\u094b \u0928\u0924\u093f\u091c\u093e\u0939\u0930\u0941 \u0932\u0941\u0915\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d", "Index": "\u0905\u0928\u0941\u0938\u0941\u091a\u0940", "Index – %(key)s": "Index – %(key)s", "Index pages by letter": "\u0905\u0915\u094d\u0937\u0930 \u0905\u0928\u0941\u0938\u093e\u0930 \u0905\u0928\u0941\u0938\u0941\u091a\u0940\u0915\u093e \u092a\u093e\u0928\u093e", "Indices and tables:": "\u0907\u0928\u094d\u0921\u0940\u0938\u0940\u0938\u094d\u0938 \u0930 \u0924\u0932\u093f\u0915\u093e", "Last updated on %(last_updated)s.": "\u092f\u094b \u092d\u0928\u094d\u0926\u093e \u0905\u0917\u093e\u0921\u0940 %(last_updated)s \u092e\u093e \u0905\u092a\u0921\u0947\u091f \u092d\u090f\u0915\u094b", "Library changes": "\u0932\u093e\u0908\u092c\u094d\u0930\u0947\u0930\u0940\u0915\u093e \u092a\u0930\u093f\u0935\u0930\u094d\u0924\u0928\u0939\u0930\u0941", "Navigation": "\u0928\u0947\u092d\u093f\u0917\u0947\u0938\u0928 ", "Next topic": "\u092a\u091b\u093f\u0932\u094d\u0932\u094b \u0935\u093f\u0937\u092f", "Other changes": "\u0905\u0930\u0941 \u092a\u0930\u093f\u0935\u0930\u094d\u0924\u0928\u0939\u0930\u0941 ", "Overview": "\u092a\u0941\u0928\u0930\u093e\u0935\u0932\u094b\u0915\u0928 ", "Permalink to this definition": "\u092f\u094b \u0905\u0930\u094d\u0925\u0915\u094b \u0932\u093e\u0917\u093f \u092a\u0930\u094d\u092e\u093e\u0932\u093f\u0928\u094d\u0915", "Permalink to this headline": "\u092f\u094b \u0936\u093f\u0930\u094d\u0937\u0915\u0915\u094b \u0932\u093e\u0917\u093f \u092a\u0930\u094d\u092e\u093e\u0932\u093f\u0928\u094d\u0915 \u0964 ", "Please activate JavaScript to enable the search\n functionality.": "\u0916\u094b\u091c\u094d\u0928\u0947 \u0915\u093e\u0930\u094d\u092f \u0906\u0917\u093e\u0921\u0940 \u092c\u0922\u093e\u0909\u0928\u0915\u094b \u0932\u093e\u0917\u093f \u091c\u093e\u092d\u093e\u0938\u094d\u0915\u0943\u092a\u094d\u091f \u091a\u0932\u093e\u0908\u0926\u093f\u0928\u0941\u0939\u094b\u0938 ", "Preparing search...": "", "Previous topic": "\u0905\u0918\u093f\u0932\u094d\u0932\u094b \u0935\u093f\u0937\u092f ", "Quick search": "\u091b\u093f\u091f\u094d\u091f\u094b \u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d", "Search": "\u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d ", "Search Page": "\u092a\u093e\u0928\u093e\u092e\u093e \u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d", "Search Results": "\u0916\u094b\u091c\u0947\u0915\u094b \u0928\u0924\u093f\u091c\u093e", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "", "Searching": "", "Show Source": "\u0938\u094d\u0930\u094b\u0924 \u0926\u0947\u0916\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d ", "Table Of Contents": "\u0935\u093f\u0937\u092f\u0938\u0942\u091a\u0940", "This Page": "\u092f\u094b \u092a\u093e\u0928\u093e", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "\u0938\u092c\u0948 \u092b\u0928\u094d\u0915\u094d\u0938\u0928\u0938\u094d, \u0915\u0915\u094d\u0937\u093e\u0939\u0930\u0942 \u0930 \u091f\u0930\u094d\u092e\u0938\u094d", "can be huge": "\u0927\u0947\u0930\u0948 \u0920\u0941\u0932\u094b \u0939\u0941\u0928 \u0938\u0915\u094d\u091b", "last updated": "", "lists all sections and subsections": "\u0938\u092c\u0948 \u0938\u0947\u0915\u094d\u0938\u0928 \u0930 \u0938\u0935\u0938\u0947\u0915\u094d\u0938\u0928 \u0926\u0947\u0916\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d", "next chapter": "\u092a\u091b\u093f\u0932\u094d\u0932\u094b \u0916\u0928\u094d\u0921", "previous chapter": "\u0905\u0918\u093f\u0932\u094d\u0932\u094b \u0916\u0928\u094d\u0921", "quick access to all modules": "\u0938\u092c\u0948 \u092e\u094b\u0926\u0941\u0932\u0947\u0938\u092e\u093e \u091b\u093f\u091f\u0948 \u091c\u093e\u0928\u0941\u0939\u094b\u0938\u094d", "search": "\u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d", "search this documentation": "\u092f\u094b \u0921\u0915\u0941\u092e\u0947\u0928\u094d\u091f \u0916\u094b\u091c\u094d\u0928\u0941\u0939\u094b\u0938\u094d", "the documentation for": ""}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/ne/LC_MESSAGES/sphinx.mo b/sphinx/locale/ne/LC_MESSAGES/sphinx.mo index bc0a81d1d72..787ed75553e 100644 Binary files a/sphinx/locale/ne/LC_MESSAGES/sphinx.mo and b/sphinx/locale/ne/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/ne/LC_MESSAGES/sphinx.po b/sphinx/locale/ne/LC_MESSAGES/sphinx.po index 0fb01ee78eb..ccf9684fc4c 100644 --- a/sphinx/locale/ne/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ne/LC_MESSAGES/sphinx.po @@ -1,69 +1,50 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: # FIRST AUTHOR <EMAIL@ADDRESS>, 2011 +# Takeshi KOMIYA <i.tkomiya@gmail.com>, 2016 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Nepali (http://www.transifex.com/projects/p/sphinx-1/language/ne/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Nepali (http://www.transifex.com/sphinx-doc/sphinx-1/language/ne/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: ne\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 #, python-format -msgid "Fig. %s" -msgstr "" - -#: sphinx/config.py:81 -#, python-format -msgid "Table %s" +msgid "Section %s" msgstr "" -#: sphinx/config.py:82 +#: sphinx/config.py:110 #, python-format -msgid "Listing %s" +msgid "Fig. %s" msgstr "" -#: sphinx/config.py:89 +#: sphinx/config.py:111 #, python-format -msgid "%s %s documentation" +msgid "Table %s" msgstr "" -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "%s हेर्नुहोस्" - -#: sphinx/environment.py:1883 +#: sphinx/config.py:112 #, python-format -msgid "see also %s" -msgstr "%s पनि हेर्नुहोस् " - -#: sphinx/environment.py:1941 -msgid "Symbols" +msgid "Listing %s" msgstr "" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%B %d, %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "बिइल्टिन्स" @@ -72,64 +53,76 @@ msgstr "बिइल्टिन्स" msgid "Module level" msgstr "मडुलको तह" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%b %d, %Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "सामान्य अनुसुची" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "अनुसुची" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "पछिल्लो" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "अघिल्लो" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr "(in" -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "सेक्सनको लेखक" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "मडुलको लेखक" -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Codeको लेखक " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "लेखक" -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parameters" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Returns" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Return type" @@ -158,12 +151,12 @@ msgstr "%s (C किसिम)" msgid "%s (C variable)" msgstr "%s (C चल)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "फन्क्सन" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "सदस्य" @@ -171,7 +164,7 @@ msgstr "सदस्य" msgid "macro" msgstr "बृहत" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "किसिम" @@ -179,59 +172,72 @@ msgstr "किसिम" msgid "variable" msgstr "चल" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Throws" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ किसिम)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ सदस्य)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++कार्य)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ कक्षा)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "कक्षा" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (built-in function)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s विधी)" @@ -246,7 +252,7 @@ msgstr "%s() (कक्षा)" msgid "%s (global variable or constant)" msgstr "%s (global variable or constant)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s attribute)" @@ -255,116 +261,116 @@ msgstr "%s (%s attribute)" msgid "Arguments" msgstr "Arguments" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "data" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "attribute" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "चलहरू" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Raises" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (in मडुल %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (built-in चल)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (in मडुल %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (built-in कक्षा)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (कक्षा in %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s विधी)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s static विधी)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s static विधी)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s कक्षा विधी)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s कक्षा विधी)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s attribute)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (मडुल)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Python Module Index" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "modules" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Deprecated" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "अपबाद" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "विधी" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "कक्षा विधी" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "static विधी" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "मडुल" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr "(deprecated)" @@ -386,188 +392,219 @@ msgstr "निर्देशिक" msgid "role" msgstr "भूमिका" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "environment variable; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%scommand line option; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "शब्द-अर्थमा भएको" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "grammar token" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "सन्दर्व सामग्री" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "environment variable" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "कार्यक्रमका बिकल्प" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "अनुसुची" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "मडुल अनुसुची" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "पानामा खोज्नुहोस्" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr "Bases: %s" +msgid "see %s" +msgstr "%s हेर्नुहोस्" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "%s पनि हेर्नुहोस् " + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "alias of :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[स्रोत]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Todo" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(<<original entry>> यहाँ %s, line %d रहेको छ । " +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "मौलिक इन्ट्री" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[docs]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Module code" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Source code for %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "पुनरावलोकन: module code" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>All modules for which code is available</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "ध्यानाकर्षण" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "होसियार " -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "खतरा" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "गलत" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "सङ्केत" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "जरुरी" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "टिप्पणी" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "पनि हेर्नुहोस" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Tip" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "साबधान" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "भर्सन %s मा नयाँ" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "भर्सन %s मा बदलिएको" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Deprecated since version %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "मुख्य शब्द" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "सन्चालक" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "object" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "भनाई" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "built-in फन्क्सन" @@ -576,7 +613,7 @@ msgstr "built-in फन्क्सन" msgid "Table Of Contents" msgstr "विषयसूची" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -586,11 +623,7 @@ msgstr "खोज्नुहोस् " msgid "Go" msgstr "जानुहोस्" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "खोज्ने टर्मस् अथवा एक मडुल्, कक्षा अथवा फन्क्सनको नाम लेख्नुहोस " - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "स्रोत देखाउनुहोस् " @@ -638,15 +671,15 @@ msgstr "सबै मोदुलेसमा छिटै जानुहोस msgid "all functions, classes, terms" msgstr "सबै फन्क्सनस्, कक्षाहरू र टर्मस्" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Index – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "पुरा अनुसुची एकै पानामा" @@ -662,35 +695,35 @@ msgstr "धेरै ठुलो हुन सक्छ" msgid "Navigation" msgstr "नेभिगेसन " -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "यी डकुमेन्टहरुको बारेमा" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "कपिराइट " -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "यो भन्दा अगाडी %(last_updated)s मा अपडेट भएको" -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -739,13 +772,13 @@ msgstr "खोज्नुहोस्" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "खोजेको नतिजा" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -762,13 +795,13 @@ msgstr "यो पाना" #: 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 "%(version)s — %(docstitle)s मा भएका फरकहरु " +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -787,33 +820,34 @@ msgstr "C API का परिवर्तनहरु " msgid "Other changes" msgstr "अरु परिवर्तनहरु " -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "यो शिर्षकको लागि पर्मालिन्क । " -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "यो अर्थको लागि पर्मालिन्क" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "खोजेको नतिजाहरु लुकाउनुहोस्" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -830,44 +864,53 @@ msgstr "साइडबर सानो बनाउनुहोस्" msgid "Contents" msgstr "विषयसूची" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "रीलीज" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "फूट्नोट्स" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "अघिल्लो पानासँग जोडीएको" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "अर्को पानासँग जोडीएको" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[चित्र]" diff --git a/sphinx/locale/nl/LC_MESSAGES/sphinx.js b/sphinx/locale/nl/LC_MESSAGES/sphinx.js index fcd84b5b5c2..e8bddca5a27 100644 --- a/sphinx/locale/nl/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/nl/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "nl", "plural_expr": "(n != 1)", "messages": {"Next topic": "Volgend onderwerp", "Index": "Index", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "", "Copyright": "Copyright", "C API changes": "Veranderingen in de C-API", "quick access to all modules": "sneltoegang naar alle modules", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "Globale Module-index", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "Index – %(key)s", "General Index": "Algemene index", "next chapter": "volgend hoofdstuk", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "Vorig hoofdstuk", "Permalink to this headline": "Permalink naar deze titel", "About these documents": "Over deze documenten", "Preparing search...": "", ", in ": "", "Navigation": "Navigatie", "Expand sidebar": "", "the documentation for": "", "Complete Table of Contents": "Volledige inhoudsopgave", "Contents": "Inhoud", "can be huge": "kan heel groot zijn", "Changes in Version %(version)s — %(docstitle)s": "Veranderingen in versie %(version)s — %(docstitle)s", "Other changes": "Andere veranderingen", "Hide Search Matches": "Zoekresultaten verbergen", "Quick search": "Snel zoeken", "Show Source": "Broncode weergeven", "Search": "Zoeken", "This Page": "Deze pagina", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Hier kan u de documenten doorzoeken. Geef enkele trefwoorden\n in het veld hieronder en klik \"zoeken\". Merk op dat de zoekfunctie\n steeds naar alle woorden zoekt. Pagina's die minder woorden bevatten\n zullen niet tussen de resultaten verschijnen.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Aangemaakt met <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "", "Collapse sidebar": "", "Go": "Ga", "Table Of Contents": "Inhoudsopgave", "Search within %(docstitle)s": "Zoeken in %(docstitle)s", "all functions, classes, terms": "alle functies, klasses en begrippen", "Please activate JavaScript to enable the search\n functionality.": "Activeer JavaSscript om de zoekfunctionaliteit in te schakelen.", "Indices and tables:": "Indices en tabellen:", "lists all sections and subsections": "geeft alle secties en subsecties weer", "Index pages by letter": "Index pagineerd per letter", "search": "zoeken", "Permalink to this definition": "Permalink naar deze definitie", "Previous topic": "Vorig onderwerp", "Overview": "Overzicht", "Last updated on %(last_updated)s.": "Laatste aanpassing op %(last_updated)s.", "Searching": "", "search this documentation": "zoeken in deze documentatie", "Automatically generated list of changes in version %(version)s": "Automatisch gegenereerde lijst van veranderingen in versie %(version)s", "Full index on one page": "Volledige index op een pagina", "Enter search terms or a module, class or function name.": "Geef zoekterm of de naam van een module, klasse of functie.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "Veranderingen in de bibliotheek", "Search Page": "Zoekpagina", "Search Results": "Zoekresultaten"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "nl", "messages": {"%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", ", in ": ", in", "About these documents": "Over deze documenten", "Automatically generated list of changes in version %(version)s": "Automatisch gegenereerde lijst van veranderingen in versie %(version)s", "C API changes": "Veranderingen in de C-API", "Changes in Version %(version)s — %(docstitle)s": "Wijzigingen in Versie %(version)s — %(docstitle)s", "Collapse sidebar": "Zijpaneel inklappen", "Complete Table of Contents": "Volledige inhoudsopgave", "Contents": "Inhoud", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Aangemaakt met <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "Zijpaneel uitklappen", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Hier kan u de documenten doorzoeken. Geef enkele trefwoorden\n in het veld hieronder en klik \"zoeken\". Merk op dat de zoekfunctie\n steeds naar alle woorden zoekt. Pagina's die minder woorden bevatten\n zullen niet tussen de resultaten verschijnen.", "Full index on one page": "Volledige index op een pagina", "General Index": "Algemene index", "Global Module Index": "Globale Module-index", "Go": "Ga", "Hide Search Matches": "Zoekresultaten verbergen", "Index": "Index", "Index – %(key)s": "Index – %(key)s", "Index pages by letter": "Index pagineerd per letter", "Indices and tables:": "Indices en tabellen:", "Last updated on %(last_updated)s.": "Laatste aanpassing op %(last_updated)s.", "Library changes": "Veranderingen in de bibliotheek", "Navigation": "Navigatie", "Next topic": "Volgend onderwerp", "Other changes": "Andere veranderingen", "Overview": "Overzicht", "Permalink to this definition": "Permalink naar deze definitie", "Permalink to this headline": "Permalink naar deze titel", "Please activate JavaScript to enable the search\n functionality.": "Activeer JavaSscript om de zoekfunctionaliteit in te schakelen.", "Preparing search...": "Zoeken aan het voorbereiden...", "Previous topic": "Vorig onderwerp", "Quick search": "Snel zoeken", "Search": "Zoeken", "Search Page": "Zoekpagina", "Search Results": "Zoekresultaten", "Search finished, found %s page(s) matching the search query.": "Zoekopdracht voltooid, %s pagaina(s) gevonden die overeenkomen met de zoekterm.", "Search within %(docstitle)s": "Zoeken in %(docstitle)s", "Searching": "Bezig met zoeken", "Show Source": "Broncode weergeven", "Table Of Contents": "Inhoudsopgave", "This Page": "Deze pagina", "Welcome! This is": "Welkom! Dit is", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Uw zoekopdracht leverde geen resultaten op. Zorg ervoor dat alle woorden juist zijn gespeld en dat u voldoende categorie\u00ebn hebt geselecteerd.", "all functions, classes, terms": "alle functies, klasses en begrippen", "can be huge": "kan heel groot zijn", "last updated": "laatst bijgewerkt", "lists all sections and subsections": "geeft alle secties en subsecties weer", "next chapter": "volgend hoofdstuk", "previous chapter": "Vorig hoofdstuk", "quick access to all modules": "sneltoegang naar alle modules", "search": "zoeken", "search this documentation": "zoeken in deze documentatie", "the documentation for": "de documentatie voor"}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/nl/LC_MESSAGES/sphinx.mo b/sphinx/locale/nl/LC_MESSAGES/sphinx.mo index 187be095c90..fba0bd49145 100644 Binary files a/sphinx/locale/nl/LC_MESSAGES/sphinx.mo and b/sphinx/locale/nl/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/nl/LC_MESSAGES/sphinx.po b/sphinx/locale/nl/LC_MESSAGES/sphinx.po index f4f42c30870..29b92ef54d7 100644 --- a/sphinx/locale/nl/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/nl/LC_MESSAGES/sphinx.po @@ -1,69 +1,50 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: +# Brecht Machiels <brecht@mos6581.org>, 2016 # FIRST AUTHOR <EMAIL@ADDRESS>, 2008 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Dutch (http://www.transifex.com/projects/p/sphinx-1/language/nl/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-25 10:46+0000\n" +"Last-Translator: Brecht Machiels <brecht@mos6581.org>\n" +"Language-Team: Dutch (http://www.transifex.com/sphinx-doc/sphinx-1/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "Sectie %s" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" -msgstr "" +msgstr "Fig. %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" -msgstr "" +msgstr "Tabel %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" -msgstr "" - -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s documentatie" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "zie %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "zie %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "" +msgstr "Codefragment %s" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d. %B %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Builtins" @@ -72,64 +53,76 @@ msgstr "Builtins" msgid "Module level" msgstr "Moduleniveau" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d.%b.%Y" +msgstr "%b %d, %Y" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Algemene index" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "Index" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "volgende" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "vorige" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s documentatie" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " -msgstr "" +msgstr " (in " + +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "Ongeldig onderschrift: %s" -#: sphinx/directives/other.py:150 +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Auteur van deze sectie: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Auteur van deze module: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " -msgstr "" +msgstr "Auteur van deze broncode:" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Auteur: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" -msgstr "" +msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parameters" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Returns" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Return type" @@ -158,12 +151,12 @@ msgstr "%s (C type)" msgid "%s (C variable)" msgstr "%s (C-variabele)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "functie" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "member" @@ -171,7 +164,7 @@ msgstr "member" msgid "macro" msgstr "macro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "type" @@ -179,59 +172,72 @@ msgstr "type" msgid "variable" msgstr "variabele" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "Sjabloonparameters" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" -msgstr "" +msgstr "Werpt" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ type)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "%s (C++ concept)" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ member)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ functie)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ klasse)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" -msgstr "" +msgstr "%s (C++ enum)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" -msgstr "" +msgstr "%s (C++ enumerator)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "klasse" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "concept" + +#: sphinx/domains/cpp.py:4422 msgid "enum" -msgstr "" +msgstr "enum" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" -msgstr "" +msgstr "enumerator" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (geïntegreerde functie)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s methode)" @@ -246,328 +252,359 @@ msgstr "%s() (klasse)" msgid "%s (global variable or constant)" msgstr "%s (globale variabele of constante)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s attribuut)" #: sphinx/domains/javascript.py:122 msgid "Arguments" -msgstr "" +msgstr "Argumenten" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" -msgstr "" +msgstr "data" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "attribuut" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" -msgstr "" +msgstr "Variabelen" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Veroorzaakt" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (in module %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (geïntegreerde variabele)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (in module %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (geïntegreerde klasse)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (klasse in %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s methode)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statische methode)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statische methode)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" -msgstr "" +msgstr "%s() (%s.%s klassemethode)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" -msgstr "" +msgstr "%s() (%s klassemethode)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s attribuut)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (module)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" -msgstr "" +msgstr "Python-moduleïndex" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "modules" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Verouderd" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "exceptie" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" -msgstr "" +msgstr "methode" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" -msgstr "" +msgstr "klassemethode" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "statische methode" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "module" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (verouderd)" #: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" -msgstr "" +msgstr "%s (richtlijn)" #: sphinx/domains/rst.py:57 #, python-format msgid "%s (role)" -msgstr "" +msgstr "%s (rol)" #: sphinx/domains/rst.py:106 msgid "directive" -msgstr "" +msgstr "richtlijn" #: sphinx/domains/rst.py:107 msgid "role" -msgstr "" +msgstr "rol" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "omgevingsvariabele; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%sopdrachtregel optie; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" -msgstr "" +msgstr "woordenlijstterm" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" -msgstr "" +msgstr "grammaticatoken" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" -msgstr "" +msgstr "verwijzingslabel" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "omgevingsvariabele" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" -msgstr "" +msgstr "programmaoptie" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Index" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Module-index" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Zoekpagina" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr "" +msgid "see %s" +msgstr "zie %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "zie %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Symbolen" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "Basisklassen: %s" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" -msgstr "" +msgstr "alias voor :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" -msgstr "" +msgstr "[grafiek: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" -msgstr "" +msgstr "[grafiek]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "Permalink naar deze formule" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" -msgstr "" +msgstr "(in %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" -msgstr "" +msgstr "[broncode]" + +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "duplikaatlabel van formule %s, andere in %s" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Te doen" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<origineel item>>" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(Het <<originele item>> is te vinden in %s, regel %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(Het <<origineel item>> bevindt zich in %s, lijn %d.)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "originele item" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" -msgstr "" +msgstr "[documentatie]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" -msgstr "" +msgstr "Modulebroncode" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" -msgstr "" +msgstr "<h1>Broncode voor %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" -msgstr "" +msgstr "Overzicht: module broncode" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" -msgstr "" +msgstr "<h1>Alle modules waarvoor de broncode beschikbaar is</h1>" + +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "Sleutelwoordargumenten" -#: sphinx/locale/__init__.py:157 +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Let op" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Pas op" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Gevaar" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Fout" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Hint" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Belangrijk" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Notitie" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Zie ook" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Tip" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Waarschuwing" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Nieuw in versie %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Veranderd in versie %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Verouderd sinds versie %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "trefwoord" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "object" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "statement" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "ingebouwde functie" @@ -576,7 +613,7 @@ msgstr "ingebouwde functie" msgid "Table Of Contents" msgstr "Inhoudsopgave" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -586,11 +623,7 @@ msgstr "Zoeken" msgid "Go" msgstr "Ga" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Geef zoekterm of de naam van een module, klasse of functie." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Broncode weergeven" @@ -600,15 +633,15 @@ msgstr "Overzicht" #: sphinx/themes/basic/defindex.html:15 msgid "Welcome! This is" -msgstr "" +msgstr "Welkom! Dit is" #: sphinx/themes/basic/defindex.html:16 msgid "the documentation for" -msgstr "" +msgstr "de documentatie voor" #: sphinx/themes/basic/defindex.html:17 msgid "last updated" -msgstr "" +msgstr "laatst bijgewerkt" #: sphinx/themes/basic/defindex.html:20 msgid "Indices and tables:" @@ -638,15 +671,15 @@ msgstr "sneltoegang naar alle modules" msgid "all functions, classes, terms" msgstr "alle functies, klasses en begrippen" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Index – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Volledige index op een pagina" @@ -662,35 +695,35 @@ msgstr "kan heel groot zijn" msgid "Navigation" msgstr "Navigatie" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Zoeken in %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Over deze documenten" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Laatste aanpassing op %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -739,17 +772,17 @@ msgstr "zoeken" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Zoekresultaten" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." -msgstr "" +msgstr "Uw zoekopdracht leverde geen resultaten op. Zorg ervoor dat alle woorden juist zijn gespeld en dat u voldoende categorieën hebt geselecteerd." #: sphinx/themes/basic/searchbox.html:12 msgid "Quick search" @@ -762,13 +795,13 @@ msgstr "Deze pagina" #: 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 "Veranderingen in versie %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "Wijzigingen in Versie %(version)s — %(docstitle)s" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "%(filename)s — %(docstitle)s" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -787,87 +820,97 @@ msgstr "Veranderingen in de C-API" msgid "Other changes" msgstr "Andere veranderingen" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Permalink naar deze titel" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Permalink naar deze definitie" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Zoekresultaten verbergen" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" -msgstr "" +msgstr "Bezig met zoeken" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." -msgstr "" +msgstr "Zoeken aan het voorbereiden..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." -msgstr "" +msgstr "Zoekopdracht voltooid, %s pagaina(s) gevonden die overeenkomen met de zoekterm." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " -msgstr "" +msgstr ", in" #: sphinx/themes/classic/static/sidebar.js_t:83 msgid "Expand sidebar" -msgstr "" +msgstr "Zijpaneel uitklappen" #: sphinx/themes/classic/static/sidebar.js_t:96 #: sphinx/themes/classic/static/sidebar.js_t:124 msgid "Collapse sidebar" -msgstr "" +msgstr "Zijpaneel inklappen" #: sphinx/themes/haiku/layout.html:24 msgid "Contents" msgstr "Inhoud" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" -msgstr "" +msgstr "Permalink naar deze broncode" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" -msgstr "" +msgstr "Permallink naar deze afbeelding" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" -msgstr "" +msgstr "Permalink naar deze toctree" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" -msgstr "" +msgstr "Permalink naar deze tabel" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Release" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "pagina" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "Onbekende configuratiesleutel: latex_elements[%r] wordt genegeerd" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Voetnoten" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "Vervolgd van vorige pagina" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Vervolgd op volgende pagina" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" -msgstr "" +msgstr "[afbeelding: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[afbeelding]" diff --git a/sphinx/locale/no/LC_MESSAGES/sphinx.js b/sphinx/locale/no/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000000..bfabd34cea0 --- /dev/null +++ b/sphinx/locale/no/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "nb_NO", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "", "Automatically generated list of changes in version %(version)s": "", "C API changes": "", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "", "Contents": "", "Copyright": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Full index on one page": "", "General Index": "", "Global Module Index": "", "Go": "", "Hide Search Matches": "", "Index": "", "Index – %(key)s": "", "Index pages by letter": "", "Indices and tables:": "", "Last updated on %(last_updated)s.": "", "Library changes": "", "Navigation": "", "Next topic": "", "Other changes": "", "Overview": "", "Permalink to this definition": "", "Permalink to this headline": "", "Please activate JavaScript to enable the search\n functionality.": "", "Preparing search...": "", "Previous topic": "", "Quick search": "", "Search": "", "Search Page": "", "Search Results": "", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "", "Searching": "", "Show Source": "", "Table Of Contents": "", "This Page": "", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "", "can be huge": "", "last updated": "", "lists all sections and subsections": "", "next chapter": "", "previous chapter": "", "quick access to all modules": "", "search": "", "search this documentation": "", "the documentation for": ""}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/no/LC_MESSAGES/sphinx.mo b/sphinx/locale/no/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000000..6fb75463865 Binary files /dev/null and b/sphinx/locale/no/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/no/LC_MESSAGES/sphinx.po b/sphinx/locale/no/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000000..a9cc10ed400 --- /dev/null +++ b/sphinx/locale/no/LC_MESSAGES/sphinx.po @@ -0,0 +1,914 @@ +# Translations template for Sphinx. +# Copyright (C) 2016 ORGANIZATION +# This file is distributed under the same license as the Sphinx project. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Sphinx\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Norwegian (http://www.transifex.com/sphinx-doc/sphinx-1/language/no/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" +"Language: no\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 +#, python-format +msgid "Fig. %s" +msgstr "" + +#: sphinx/config.py:111 +#, python-format +msgid "Table %s" +msgstr "" + +#: sphinx/config.py:112 +#, python-format +msgid "Listing %s" +msgstr "" + +#: sphinx/roles.py:187 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "" + +#: sphinx/builders/changes.py:75 +msgid "Builtins" +msgstr "" + +#: sphinx/builders/changes.py:77 +msgid "Module level" +msgstr "" + +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 +#, python-format +msgid "%b %d, %Y" +msgstr "" + +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "" + +#: sphinx/builders/html.py:315 +msgid "index" +msgstr "" + +#: sphinx/builders/html.py:377 +msgid "next" +msgstr "" + +#: sphinx/builders/html.py:386 +msgid "previous" +msgstr "" + +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 +msgid " (in " +msgstr "" + +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 +msgid "Section author: " +msgstr "" + +#: sphinx/directives/other.py:151 +msgid "Module author: " +msgstr "" + +#: sphinx/directives/other.py:153 +msgid "Code author: " +msgstr "" + +#: sphinx/directives/other.py:155 +msgid "Author: " +msgstr "" + +#: sphinx/domains/__init__.py:277 +#, python-format +msgid "%s %s" +msgstr "" + +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 +msgid "Parameters" +msgstr "" + +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 +msgid "Returns" +msgstr "" + +#: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 +#: sphinx/domains/python.py:163 +msgid "Return type" +msgstr "" + +#: sphinx/domains/c.py:177 +#, python-format +msgid "%s (C function)" +msgstr "" + +#: sphinx/domains/c.py:179 +#, python-format +msgid "%s (C member)" +msgstr "" + +#: sphinx/domains/c.py:181 +#, python-format +msgid "%s (C macro)" +msgstr "" + +#: sphinx/domains/c.py:183 +#, python-format +msgid "%s (C type)" +msgstr "" + +#: sphinx/domains/c.py:185 +#, python-format +msgid "%s (C variable)" +msgstr "" + +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 +msgid "function" +msgstr "" + +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 +msgid "member" +msgstr "" + +#: sphinx/domains/c.py:244 +msgid "macro" +msgstr "" + +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 +msgid "type" +msgstr "" + +#: sphinx/domains/c.py:246 +msgid "variable" +msgstr "" + +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "" + +#: sphinx/domains/cpp.py:4205 +#, python-format +msgid "%s (C++ type)" +msgstr "" + +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 +#, python-format +msgid "%s (C++ member)" +msgstr "" + +#: sphinx/domains/cpp.py:4238 +#, python-format +msgid "%s (C++ function)" +msgstr "" + +#: sphinx/domains/cpp.py:4249 +#, python-format +msgid "%s (C++ class)" +msgstr "" + +#: sphinx/domains/cpp.py:4260 +#, python-format +msgid "%s (C++ enum)" +msgstr "" + +#: sphinx/domains/cpp.py:4281 +#, python-format +msgid "%s (C++ enumerator)" +msgstr "" + +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 +msgid "class" +msgstr "" + +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 +msgid "enum" +msgstr "" + +#: sphinx/domains/cpp.py:4423 +msgid "enumerator" +msgstr "" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 +#, python-format +msgid "%s() (built-in function)" +msgstr "" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 +#, python-format +msgid "%s() (%s method)" +msgstr "" + +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 +#, python-format +msgid "%s (%s attribute)" +msgstr "" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "" + +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 +msgid "data" +msgstr "" + +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 +msgid "attribute" +msgstr "" + +#: sphinx/domains/python.py:154 +msgid "Variables" +msgstr "" + +#: sphinx/domains/python.py:158 +msgid "Raises" +msgstr "" + +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 +#, python-format +msgid "%s() (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:311 +#, python-format +msgid "%s (built-in variable)" +msgstr "" + +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 +#, python-format +msgid "%s (in module %s)" +msgstr "" + +#: sphinx/domains/python.py:328 +#, python-format +msgid "%s (built-in class)" +msgstr "" + +#: sphinx/domains/python.py:329 +#, python-format +msgid "%s (class in %s)" +msgstr "" + +#: sphinx/domains/python.py:369 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "" + +#: sphinx/domains/python.py:381 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "" + +#: sphinx/domains/python.py:384 +#, python-format +msgid "%s() (%s static method)" +msgstr "" + +#: sphinx/domains/python.py:394 +#, python-format +msgid "%s() (%s.%s class method)" +msgstr "" + +#: sphinx/domains/python.py:397 +#, python-format +msgid "%s() (%s class method)" +msgstr "" + +#: sphinx/domains/python.py:407 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "" + +#: sphinx/domains/python.py:488 +#, python-format +msgid "%s (module)" +msgstr "" + +#: sphinx/domains/python.py:545 +msgid "Python Module Index" +msgstr "" + +#: sphinx/domains/python.py:546 +msgid "modules" +msgstr "" + +#: sphinx/domains/python.py:592 +msgid "Deprecated" +msgstr "" + +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 +msgid "exception" +msgstr "" + +#: sphinx/domains/python.py:618 +msgid "method" +msgstr "" + +#: sphinx/domains/python.py:619 +msgid "class method" +msgstr "" + +#: sphinx/domains/python.py:620 +msgid "static method" +msgstr "" + +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 +msgid "module" +msgstr "" + +#: sphinx/domains/python.py:787 +msgid " (deprecated)" +msgstr "" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "" + +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 +#, python-format +msgid "environment variable; %s" +msgstr "" + +#: sphinx/domains/std.py:186 +#, python-format +msgid "%scommand line option; %s" +msgstr "" + +#: sphinx/domains/std.py:434 +msgid "glossary term" +msgstr "" + +#: sphinx/domains/std.py:435 +msgid "grammar token" +msgstr "" + +#: sphinx/domains/std.py:436 +msgid "reference label" +msgstr "" + +#: sphinx/domains/std.py:438 +msgid "environment variable" +msgstr "" + +#: sphinx/domains/std.py:439 +msgid "program option" +msgstr "" + +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 +msgid "Index" +msgstr "" + +#: sphinx/domains/std.py:474 +msgid "Module Index" +msgstr "" + +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 +#, python-format +msgid "alias of :class:`%s`" +msgstr "" + +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 +#, python-format +msgid "[graph: %s]" +msgstr "" + +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 +msgid "[graph]" +msgstr "" + +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 +#, python-format +msgid "(in %s v%s)" +msgstr "" + +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 +msgid "[source]" +msgstr "" + +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 +msgid "Todo" +msgstr "" + +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 +#, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" + +#: sphinx/ext/todo.py:146 +msgid "original entry" +msgstr "" + +#: sphinx/ext/viewcode.py:166 +msgid "[docs]" +msgstr "" + +#: sphinx/ext/viewcode.py:180 +msgid "Module code" +msgstr "" + +#: sphinx/ext/viewcode.py:186 +#, python-format +msgid "<h1>Source code for %s</h1>" +msgstr "" + +#: sphinx/ext/viewcode.py:212 +msgid "Overview: module code" +msgstr "" + +#: sphinx/ext/viewcode.py:213 +msgid "<h1>All modules for which code is available</h1>" +msgstr "" + +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 +msgid "Attention" +msgstr "" + +#: sphinx/locale/__init__.py:160 +msgid "Caution" +msgstr "" + +#: sphinx/locale/__init__.py:161 +msgid "Danger" +msgstr "" + +#: sphinx/locale/__init__.py:162 +msgid "Error" +msgstr "" + +#: sphinx/locale/__init__.py:163 +msgid "Hint" +msgstr "" + +#: sphinx/locale/__init__.py:164 +msgid "Important" +msgstr "" + +#: sphinx/locale/__init__.py:165 +msgid "Note" +msgstr "" + +#: sphinx/locale/__init__.py:166 +msgid "See also" +msgstr "" + +#: sphinx/locale/__init__.py:167 +msgid "Tip" +msgstr "" + +#: sphinx/locale/__init__.py:168 +msgid "Warning" +msgstr "" + +#: sphinx/locale/__init__.py:172 +#, python-format +msgid "New in version %s" +msgstr "" + +#: sphinx/locale/__init__.py:173 +#, python-format +msgid "Changed in version %s" +msgstr "" + +#: sphinx/locale/__init__.py:174 +#, python-format +msgid "Deprecated since version %s" +msgstr "" + +#: sphinx/locale/__init__.py:180 +msgid "keyword" +msgstr "" + +#: sphinx/locale/__init__.py:181 +msgid "operator" +msgstr "" + +#: sphinx/locale/__init__.py:182 +msgid "object" +msgstr "" + +#: sphinx/locale/__init__.py:184 +msgid "statement" +msgstr "" + +#: sphinx/locale/__init__.py:185 +msgid "built-in function" +msgstr "" + +#: sphinx/themes/agogo/layout.html:46 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:11 sphinx/themes/scrolls/layout.html:35 +msgid "Table Of Contents" +msgstr "" + +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/searchresults.html:10 +msgid "Search" +msgstr "" + +#: sphinx/themes/agogo/layout.html:54 sphinx/themes/basic/searchbox.html:15 +msgid "Go" +msgstr "" + +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 +msgid "Show Source" +msgstr "" + +#: sphinx/themes/basic/defindex.html:11 +msgid "Overview" +msgstr "" + +#: sphinx/themes/basic/defindex.html:15 +msgid "Welcome! This is" +msgstr "" + +#: sphinx/themes/basic/defindex.html:16 +msgid "the documentation for" +msgstr "" + +#: sphinx/themes/basic/defindex.html:17 +msgid "last updated" +msgstr "" + +#: sphinx/themes/basic/defindex.html:20 +msgid "Indices and tables:" +msgstr "" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "" + +#: sphinx/themes/basic/defindex.html:28 +msgid "Global Module Index" +msgstr "" + +#: sphinx/themes/basic/defindex.html:29 +msgid "quick access to all modules" +msgstr "" + +#: sphinx/themes/basic/defindex.html:31 +msgid "all functions, classes, terms" +msgstr "" + +#: sphinx/themes/basic/genindex-single.html:33 +#, python-format +msgid "Index – %(key)s" +msgstr "" + +#: sphinx/themes/basic/genindex-single.html:61 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:72 +msgid "Full index on one page" +msgstr "" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "" + +#: sphinx/themes/basic/layout.html:29 +msgid "Navigation" +msgstr "" + +#: sphinx/themes/basic/layout.html:123 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/layout.html:132 +msgid "About these documents" +msgstr "" + +#: sphinx/themes/basic/layout.html:141 +msgid "Copyright" +msgstr "" + +#: sphinx/themes/basic/layout.html:186 +#, python-format +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:188 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:192 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "" +"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "" + +#: sphinx/themes/basic/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/relations.html:11 +msgid "Previous topic" +msgstr "" + +#: sphinx/themes/basic/relations.html:13 +msgid "previous chapter" +msgstr "" + +#: sphinx/themes/basic/relations.html:16 +msgid "Next topic" +msgstr "" + +#: sphinx/themes/basic/relations.html:18 +msgid "next chapter" +msgstr "" + +#: sphinx/themes/basic/search.html:27 +msgid "" +"Please activate JavaScript to enable the search\n" +" functionality." +msgstr "" + +#: sphinx/themes/basic/search.html:32 +msgid "" +"From here you can search these documents. Enter your search\n" +" words into the box below and click \"search\". Note that the search\n" +" 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:39 +#: sphinx/themes/basic/searchresults.html:17 +msgid "search" +msgstr "" + +#: sphinx/themes/basic/search.html:43 +#: sphinx/themes/basic/searchresults.html:21 +#: sphinx/themes/basic/static/searchtools.js_t:287 +msgid "Search Results" +msgstr "" + +#: sphinx/themes/basic/search.html:45 +#: sphinx/themes/basic/searchresults.html:23 +#: sphinx/themes/basic/static/searchtools.js_t:289 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "" + +#: sphinx/themes/basic/searchbox.html:12 +msgid "Quick search" +msgstr "" + +#: sphinx/themes/basic/sourcelink.html:12 +msgid "This Page" +msgstr "" + +#: 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 "" + +#: sphinx/themes/basic/changes/rstsource.html:5 +#, python-format +msgid "%(filename)s — %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:17 +#, python-format +msgid "Automatically generated list of changes in version %(version)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 +msgid "Permalink to this headline" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 +msgid "Permalink to this definition" +msgstr "" + +#: sphinx/themes/basic/static/doctools.js_t:208 +msgid "Hide Search Matches" +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:121 +msgid "Searching" +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:126 +msgid "Preparing search..." +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:291 +#, python-format +msgid "Search finished, found %s page(s) matching the search query." +msgstr "" + +#: sphinx/themes/basic/static/searchtools.js_t:344 +msgid ", in " +msgstr "" + +#: sphinx/themes/classic/static/sidebar.js_t:83 +msgid "Expand sidebar" +msgstr "" + +#: sphinx/themes/classic/static/sidebar.js_t:96 +#: sphinx/themes/classic/static/sidebar.js_t:124 +msgid "Collapse sidebar" +msgstr "" + +#: sphinx/themes/haiku/layout.html:24 +msgid "Contents" +msgstr "" + +#: sphinx/writers/html.py:389 +msgid "Permalink to this code" +msgstr "" + +#: sphinx/writers/html.py:393 +msgid "Permalink to this image" +msgstr "" + +#: sphinx/writers/html.py:395 +msgid "Permalink to this toctree" +msgstr "" + +#: sphinx/writers/html.py:717 +msgid "Permalink to this table" +msgstr "" + +#: sphinx/writers/latex.py:380 +msgid "Release" +msgstr "" + +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 +msgid "Footnotes" +msgstr "" + +#: sphinx/writers/latex.py:1112 +msgid "continued from previous page" +msgstr "" + +#: sphinx/writers/latex.py:1118 +msgid "Continued on next page" +msgstr "" + +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 +#, python-format +msgid "[image: %s]" +msgstr "" + +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 +msgid "[image]" +msgstr "" diff --git a/sphinx/locale/pl/LC_MESSAGES/sphinx.js b/sphinx/locale/pl/LC_MESSAGES/sphinx.js index 447b72d18b2..7454c06060f 100644 --- a/sphinx/locale/pl/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/pl/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "pl", "plural_expr": "(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Next topic": "Nast\u0119pny temat", "Index": "Indeks", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "Witaj! To jest", "Copyright": "Copyright", "C API changes": "Zmiany w C API", "quick access to all modules": "szybki dost\u0119p do wszystkich modu\u0142\u00f3w", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "Globalny indeks modu\u0142\u00f3w", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Twoje wyszukiwanie nie da\u0142o \u017cadnych wynik\u00f3w. Upewnij si\u0119, \u017ce wszystkie s\u0142owa s\u0105 wpisane prawid\u0142owo i \u017ce wybra\u0142e\u015b dostateczn\u0105 ilo\u015b\u0107 kategorii.", "Index – %(key)s": "Indeks – %(key)s", "General Index": "Indeks og\u00f3lny", "next chapter": "nast\u0119pny rozdzia\u0142", "Search finished, found %s page(s) matching the search query.": "Wyszukiwanie zako\u0144czone. Liczba znalezionych stron pasuj\u0105cych do zapytania: %s.", "previous chapter": "poprzedni rozdzia\u0142", "Permalink to this headline": "Sta\u0142y odno\u015bnik do tego nag\u0142\u00f3wka", "About these documents": "O tych dokumentach", "Preparing search...": "Inicjalizacja wyszukiwania...", ", in ": ", w ", "Navigation": "Nawigacja", "Expand sidebar": "Rozwi\u0144 pasek boczny", "the documentation for": "dokumentacja do", "Complete Table of Contents": "Kompletny spis tre\u015bci", "Contents": "Tre\u015b\u0107", "can be huge": "mo\u017ce by\u0107 ogromny", "Changes in Version %(version)s — %(docstitle)s": "Zmiany w wersji %(version)s — %(docstitle)s", "Other changes": "Inne zmiany", "Hide Search Matches": "Ukryj wyniki wyszukiwania", "Quick search": "Szybkie wyszukiwanie", "Show Source": "Poka\u017c \u017ar\u00f3d\u0142o", "Search": "Szukaj", "This Page": "Ta strona", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "St\u0105d mo\u017cesz przeszuka\u0107 dokumentacj\u0119. Wprowad\u017a szukane\n s\u0142owa w poni\u017cszym okienku i kliknij \"Szukaj\". Zwr\u00f3\u0107 uwag\u0119, \u017ce\n funkcja szukaj\u0105ca b\u0119dzie automatycznie szuka\u0142a wszystkich s\u0142\u00f3w. Strony\n nie zawieraj\u0105ce wszystkich wpisanych s\u0142\u00f3w nie znajd\u0105 si\u0119 na wynikowej li\u015bcie.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Utworzone przy pomocy <a href=\"http://sphinx-doc.org/\">Sphinx</a>'a %(sphinx_version)s.", "last updated": "ostatnio aktualizowana", "Collapse sidebar": "Zwi\u0144 pasek boczny", "Go": "Szukaj", "Table Of Contents": "Spis tre\u015bci", "Search within %(docstitle)s": "Szukaj po\u015br\u00f3d %(docstitle)s", "all functions, classes, terms": "wszystkie funkcje, klasy, terminy", "Please activate JavaScript to enable the search\n functionality.": "Aby umo\u017cliwi\u0107 wyszukiwanie, prosz\u0119 w\u0142\u0105czy\u0107 JavaScript.", "Indices and tables:": "Indeksy i tablice:", "lists all sections and subsections": "wszystkie rozdzia\u0142y i podrozdzia\u0142y", "Index pages by letter": "Strony indeksu alfabetycznie", "search": "szukaj", "Permalink to this definition": "Sta\u0142y odno\u015bnik do tej definicji", "Previous topic": "Poprzedni temat", "Overview": "Przegl\u0105d", "Last updated on %(last_updated)s.": "Ostatnia modyfikacja %(last_updated)s.", "Searching": "Wyszukiwanie", "search this documentation": "przeszukaj t\u0119 dokumentacj\u0119", "Automatically generated list of changes in version %(version)s": "Automatycznie wygenerowana lista zmian w wersji %(version)s", "Full index on one page": "Ca\u0142y indeks na jednej stronie", "Enter search terms or a module, class or function name.": "Wprowad\u017a szukany termin lub nazw\u0119 modu\u0142u, klasy lub funkcji.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "Zmiany w bibliotekach", "Search Page": "Wyszukiwanie", "Search Results": "Wyniki wyszukiwania"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "pl", "messages": {"%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", ", in ": ", w ", "About these documents": "O tych dokumentach", "Automatically generated list of changes in version %(version)s": "Automatycznie wygenerowana lista zmian w wersji %(version)s", "C API changes": "Zmiany w C API", "Changes in Version %(version)s — %(docstitle)s": "Zmiany w wersji %(version)s — %(docstitle)s", "Collapse sidebar": "Zwi\u0144 pasek boczny", "Complete Table of Contents": "Kompletny spis tre\u015bci", "Contents": "Tre\u015b\u0107", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Utworzone przy pomocy <a href=\"http://sphinx-doc.org/\">Sphinx</a>'a %(sphinx_version)s.", "Expand sidebar": "Rozwi\u0144 pasek boczny", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "St\u0105d mo\u017cesz przeszuka\u0107 dokumentacj\u0119. Wprowad\u017a szukane\n s\u0142owa w poni\u017cszym okienku i kliknij \"Szukaj\". Zwr\u00f3\u0107 uwag\u0119, \u017ce\n funkcja szukaj\u0105ca b\u0119dzie automatycznie szuka\u0142a wszystkich s\u0142\u00f3w. Strony\n nie zawieraj\u0105ce wszystkich wpisanych s\u0142\u00f3w nie znajd\u0105 si\u0119 na wynikowej li\u015bcie.", "Full index on one page": "Ca\u0142y indeks na jednej stronie", "General Index": "Indeks og\u00f3lny", "Global Module Index": "Globalny indeks modu\u0142\u00f3w", "Go": "Szukaj", "Hide Search Matches": "Ukryj wyniki wyszukiwania", "Index": "Indeks", "Index – %(key)s": "Indeks – %(key)s", "Index pages by letter": "Strony indeksu alfabetycznie", "Indices and tables:": "Indeksy i tablice:", "Last updated on %(last_updated)s.": "Ostatnia modyfikacja %(last_updated)s.", "Library changes": "Zmiany w bibliotekach", "Navigation": "Nawigacja", "Next topic": "Nast\u0119pny temat", "Other changes": "Inne zmiany", "Overview": "Przegl\u0105d", "Permalink to this definition": "Sta\u0142y odno\u015bnik do tej definicji", "Permalink to this headline": "Sta\u0142y odno\u015bnik do tego nag\u0142\u00f3wka", "Please activate JavaScript to enable the search\n functionality.": "Aby umo\u017cliwi\u0107 wyszukiwanie, prosz\u0119 w\u0142\u0105czy\u0107 JavaScript.", "Preparing search...": "Inicjalizacja wyszukiwania...", "Previous topic": "Poprzedni temat", "Quick search": "Szybkie wyszukiwanie", "Search": "Szukaj", "Search Page": "Wyszukiwanie", "Search Results": "Wyniki wyszukiwania", "Search finished, found %s page(s) matching the search query.": "Wyszukiwanie zako\u0144czone. Liczba znalezionych stron pasuj\u0105cych do zapytania: %s.", "Search within %(docstitle)s": "Szukaj po\u015br\u00f3d %(docstitle)s", "Searching": "Wyszukiwanie", "Show Source": "Poka\u017c \u017ar\u00f3d\u0142o", "Table Of Contents": "Spis tre\u015bci", "This Page": "Ta strona", "Welcome! This is": "Witaj! To jest", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Twoje wyszukiwanie nie da\u0142o \u017cadnych wynik\u00f3w. Upewnij si\u0119, \u017ce wszystkie s\u0142owa s\u0105 wpisane prawid\u0142owo i \u017ce wybra\u0142e\u015b dostateczn\u0105 ilo\u015b\u0107 kategorii.", "all functions, classes, terms": "wszystkie funkcje, klasy, terminy", "can be huge": "mo\u017ce by\u0107 ogromny", "last updated": "ostatnio aktualizowana", "lists all sections and subsections": "wszystkie rozdzia\u0142y i podrozdzia\u0142y", "next chapter": "nast\u0119pny rozdzia\u0142", "previous chapter": "poprzedni rozdzia\u0142", "quick access to all modules": "szybki dost\u0119p do wszystkich modu\u0142\u00f3w", "search": "szukaj", "search this documentation": "przeszukaj t\u0119 dokumentacj\u0119", "the documentation for": "dokumentacja do"}, "plural_expr": "(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)"}); \ No newline at end of file diff --git a/sphinx/locale/pl/LC_MESSAGES/sphinx.mo b/sphinx/locale/pl/LC_MESSAGES/sphinx.mo index 6bf478c40b4..59a21c78ac7 100644 Binary files a/sphinx/locale/pl/LC_MESSAGES/sphinx.mo and b/sphinx/locale/pl/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/pl/LC_MESSAGES/sphinx.po b/sphinx/locale/pl/LC_MESSAGES/sphinx.po index 6a75afa519f..72191217600 100644 --- a/sphinx/locale/pl/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/pl/LC_MESSAGES/sphinx.po @@ -1,70 +1,50 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: # Michael Gielda <michal.gielda@gmail.com>, 2014 -# Tawez, 2013-2015 +# Tawez, 2013-2016 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Polish (http://www.transifex.com/projects/p/sphinx-1/language/pl/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-24 21:36+0000\n" +"Last-Translator: Tawez\n" +"Language-Team: Polish (http://www.transifex.com/sphinx-doc/sphinx-1/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: pl\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "Rozdział %s" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "Rys. %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "Tabela %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "Listing %s" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s - dokumentacja" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "zobacz %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "zobacz także %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Symbole" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%B %d %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Wbudowane" @@ -73,64 +53,76 @@ msgstr "Wbudowane" msgid "Module level" msgstr "Poziom modułu" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%b %d %Y" +msgstr "%d %b %Y" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Indeks ogólny" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "indeks" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "dalej" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "wstecz" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s - dokumentacja" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (w " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "Nieprawidłowy podpis: %s" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Autor rozdziału: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Autor modułu: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Autor kodu: " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Autor: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parametry" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Zwraca" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Typ zwracany" @@ -159,12 +151,12 @@ msgstr "%s (typ C)" msgid "%s (C variable)" msgstr "%s (zmienna C)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "funkcja" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "pole" @@ -172,7 +164,7 @@ msgstr "pole" msgid "macro" msgstr "makro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "typ" @@ -180,59 +172,72 @@ msgstr "typ" msgid "variable" msgstr "zmienna" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "Parametry szablonu" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Wyrzuca" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (typ C++)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "%s (koncepcja C++)" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (pole C++)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (funkcja C++)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (klasa C++)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" -msgstr "%s (C++ enum)" +msgstr "%s (enum C++)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" -msgstr "%s (C++ enumerator)" +msgstr "%s (enumerator C++)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "klasa" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "koncepcja" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "enum" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "enumerator" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (funkcja wbudowana)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metoda)" @@ -245,9 +250,9 @@ msgstr "%s() (klasa)" #: sphinx/domains/javascript.py:111 #, python-format msgid "%s (global variable or constant)" -msgstr "%s (zmienna lub stała globalna)" +msgstr "%s (zmienna globalna lub stała)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atrybut)" @@ -256,116 +261,116 @@ msgstr "%s (%s atrybut)" msgid "Arguments" msgstr "Argumenty" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "dane" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "atrybut" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Zmienne" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Wyrzuca" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (w module %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (zmienna wbudowana)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (w module %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (klasa wbudowana)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (klasa w module %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metoda)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s metoda statyczna)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s metoda statyczna)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s metoda klasy)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s metoda klasy)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (atrybut %s.%s)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (moduł)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Indeks modułów pythona" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "moduły" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Niezalecane" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "wyjątek" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "metoda" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "metoda klasy" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "statyczna metoda" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "moduł" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (niezalecane)" @@ -387,188 +392,219 @@ msgstr "dyrektywa" msgid "role" msgstr "rola" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "zmienna środowiskowa; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%sopcja linii komend; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "termin glosariusza" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "symbol gramatyki" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "etykieta odsyłacza" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "zmienna środowiskowa" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "opcja programu" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Indeks" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Indeks modułów" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Wyszukiwanie" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "zobacz %s" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "zobacz także %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Symbole" + +#: sphinx/ext/autodoc.py:1297 #, python-format -msgid " Bases: %s" -msgstr " Klasy bazowe: %s" +msgid "Bases: %s" +msgstr "Klasy bazowe: %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "alias klasy :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[wykres: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[wykres]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "Stały odnośnik do tego równania" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(w %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[źródło]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "zduplikowana etykieta równania %s, inne wystąpienie w %s" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Todo" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<oryginalny wpis>>" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" msgstr "(<<Oryginalny wpis>> znajduje się w pliku %s, w linii %d.)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "oryginalny wpis" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[dokumenty]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Kod modułu" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Kod źródłowy modułu %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Przeglądanie: kod modułu" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Wszystkie moduły, dla których jest dostępny kod</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "Argumenty Nazwane" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Uwaga" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Ostrzeżenie" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Niebezpieczeństwo" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Błąd" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Podpowiedź" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Ważne" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Informacja" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Zobacz także" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Wskazówka" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Ostrzeżenie" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Nowe w wersji %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Zmienione w wersji %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Niezalecane od wersji %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "słowo kluczowe" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "obiekt" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "instrukcja" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "funkcja wbudowana" @@ -577,7 +613,7 @@ msgstr "funkcja wbudowana" msgid "Table Of Contents" msgstr "Spis treści" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -587,11 +623,7 @@ msgstr "Szukaj" msgid "Go" msgstr "Szukaj" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Wprowadź szukany termin lub nazwę modułu, klasy lub funkcji." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Pokaż źródło" @@ -639,15 +671,15 @@ msgstr "szybki dostęp do wszystkich modułów" msgid "all functions, classes, terms" msgstr "wszystkie funkcje, klasy, terminy" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Indeks – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Cały indeks na jednej stronie" @@ -663,35 +695,35 @@ msgstr "może być ogromny" msgid "Navigation" msgstr "Nawigacja" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Szukaj pośród %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "O tych dokumentach" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Ostatnia modyfikacja %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -740,13 +772,13 @@ msgstr "szukaj" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Wyniki wyszukiwania" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -763,13 +795,13 @@ msgstr "Ta strona" #: 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 "Zmiany w wersji %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "Zmiany w wersji %(version)s — %(docstitle)s" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "%(filename)s — %(docstitle)s" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -788,33 +820,34 @@ msgstr "Zmiany w C API" msgid "Other changes" msgstr "Inne zmiany" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Stały odnośnik do tego nagłówka" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Stały odnośnik do tej definicji" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Ukryj wyniki wyszukiwania" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "Wyszukiwanie" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "Inicjalizacja wyszukiwania..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Wyszukiwanie zakończone. Liczba znalezionych stron pasujących do zapytania: %s." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr ", w " @@ -831,44 +864,53 @@ msgstr "Zwiń pasek boczny" msgid "Contents" msgstr "Treść" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "Stały odnośnik do tego bloku kodu" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "Stały odnośnik do tego obrazu" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" -msgstr "" +msgstr "Stały odnośnik do tego toctree" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "Stały odnośnik do tej tabeli" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Wydanie" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "strona" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "Nieznany klucz konfiguracyjny: latex_elements[%r] jest ignorowany." + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Przypisy" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "kontynuacja poprzedniej strony" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Kontynuacja na następnej stronie" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[obraz: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[obraz]" diff --git a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js index 12cb0237408..98843fbf840 100644 --- a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "pt_BR", "plural_expr": "(n > 1)", "messages": {"Next topic": "Pr\u00f3ximo t\u00f3pico", "Index": "\u00cdndice", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "Bem Vindo(a)! \u00c9 isso a\u00ed", "Copyright": "Copyright", "C API changes": "Altera\u00e7\u00f5es na API C", "quick access to all modules": "acesso r\u00e1pido para todos os m\u00f3dulos", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "\u00cdndice Global de M\u00f3dulos", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Sua pesquisa n\u00e3o encontrou nenhum documento. Por favor, confirme que todas as palavras est\u00e3o grafadas corretamente e que voc\u00ea selecionou categorias suficientes.", "Index – %(key)s": "\u00cdndice – %(key)s", "General Index": "\u00cdndice Geral", "next chapter": "pr\u00f3ximo cap\u00edtulo", "Search finished, found %s page(s) matching the search query.": "Pesquisa conclu\u00edda, foram encontrada(s) %s p\u00e1gina(s) que \"\n\"combinam com a consulta feita.", "previous chapter": "cap\u00edtulo anterior", "Permalink to this headline": "Link permanente para este t\u00edtulo", "About these documents": "Sobre estes documentos", "Preparing search...": "Preparando a pesquisa...", ", in ": ", em ", "Navigation": "Navega\u00e7\u00e3o", "Expand sidebar": "Expandir painel lateral", "the documentation for": "documenta\u00e7\u00e3o para", "Complete Table of Contents": "Tabela de Conte\u00fado Completa", "Contents": "Conte\u00fado", "can be huge": "pode ser enorme", "Changes in Version %(version)s — %(docstitle)s": "Altera\u00e7\u00f5es na Vers\u00e3o%(version)s — %(docstitle)s", "Other changes": "Outras altera\u00e7\u00f5es", "Hide Search Matches": "Esconder Resultados da Pesquisa", "Quick search": "Pesquisa r\u00e1pida", "Show Source": "Exibir Fonte", "Search": "Pesquisar", "This Page": "Esta P\u00e1gina", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "A partir daqui voc\u00ea pode pesquisar estes documentos. Preencha suas \n palavras de pesquisa na caixa abaixo e clique em \"pesquisar\".\n Observe que a fun\u00e7\u00e3o de pesquisa\n ir\u00e1 procurar automaticamente por todas as palavras.\n P\u00e1ginas contendo menos palavras n\u00e3o ir\u00e3o aparecer na lista de\n resultado.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Criado usando <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "\u00faltima atualiza\u00e7\u00e3o", "Collapse sidebar": "Recolher painel lateral", "Go": "Ir", "Table Of Contents": "Tabela de Conte\u00fado", "Search within %(docstitle)s": "Pesquisar dentro de %(docstitle)s", "all functions, classes, terms": "todas fun\u00e7\u00f5es, classes, termos", "Please activate JavaScript to enable the search\n functionality.": "Por favor ative o JavaScript para habilitar a\n\"\n\" funcionalidade de pesquisa.", "Indices and tables:": "\u00cdndices e tabelas:", "lists all sections and subsections": "Lista todas se\u00e7\u00f5es e subse\u00e7\u00f5es", "Index pages by letter": "Paginas de \u00edndice por letra", "search": "pesquisar", "Permalink to this definition": "Link permanente para esta defini\u00e7\u00e3o", "Previous topic": "T\u00f3pico anterior", "Overview": "Vis\u00e3o geral", "Last updated on %(last_updated)s.": "\u00daltima atualiza\u00e7\u00e3o em %(last_updated)s.", "Searching": "Pesquisando", "search this documentation": "Pesquisar esta documenta\u00e7\u00e3o", "Automatically generated list of changes in version %(version)s": "Lista de altera\u00e7\u00f5es na vers\u00e3o %(version)s gerada automaticamente", "Full index on one page": "\u00cdndice completo em uma p\u00e1gina", "Enter search terms or a module, class or function name.": "Digite os termos da busca ou o nome de um m\u00f3dulo, classe ou fun\u00e7\u00e3o.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "Altera\u00e7\u00f5es na biblioteca", "Search Page": "P\u00e1gina de Pesquisa", "Search Results": "Resultados da Pesquisa"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "pt_BR", "messages": {"%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", ", in ": ", em ", "About these documents": "Sobre esses documentos", "Automatically generated list of changes in version %(version)s": "Lista de altera\u00e7\u00f5es na vers\u00e3o %(version)s, gerada automaticamente", "C API changes": "Altera\u00e7\u00f5es na API C", "Changes in Version %(version)s — %(docstitle)s": "Modifica\u00e7\u00f5es na vers\u00e3o %(version)s — %(docstitle)s", "Collapse sidebar": "Recolher painel lateral", "Complete Table of Contents": "Tabela Completa dos Conte\u00fados", "Contents": "Conte\u00fados", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Criado usando <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "Expandir painel lateral", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Aqui pode-se fazer buscas nesses documentos. Preencha sua \npalavras de busca na caixa abaixo e clicar em \"Buscar\". Notar que a busca\nir\u00e1 procurar automaticamente por todas as palavras. P\u00e1ginas \ncontendo menos palavras n\u00e3o ir\u00e3o aparecer na lista de resultados.", "Full index on one page": "\u00cdndice completo em p\u00e1gina \u00fanica", "General Index": "\u00cdndice Geral", "Global Module Index": "\u00cdndice Global de M\u00f3dulos", "Go": "Ir", "Hide Search Matches": "Esconder Resultados da Busca", "Index": "\u00cdndice", "Index – %(key)s": "\u00cdndice – %(key)s", "Index pages by letter": "P\u00e1ginas de \u00edndice por letra", "Indices and tables:": "\u00cdndices e Tabelas:", "Last updated on %(last_updated)s.": "\u00daltima atualiza\u00e7\u00e3o em %(last_updated)s.", "Library changes": "Altera\u00e7\u00f5es na biblioteca", "Navigation": "Navega\u00e7\u00e3o", "Next topic": "Pr\u00f3ximo t\u00f3pico", "Other changes": "Outras altera\u00e7\u00f5es", "Overview": "Vis\u00e3o geral", "Permalink to this definition": "Link permanente para esta defini\u00e7\u00e3o", "Permalink to this headline": "Link permanente para este t\u00edtulo", "Please activate JavaScript to enable the search\n functionality.": "Por favor, ativar JavaScript para habilitar a\nfuncionalidade de busca.", "Preparing search...": "Preparando a busca...", "Previous topic": "T\u00f3pico anterior", "Quick search": "Busca r\u00e1pida", "Search": "Buscar", "Search Page": "P\u00e1gina de Busca", "Search Results": "Resultados da Busca", "Search finished, found %s page(s) matching the search query.": "Busca conclu\u00edda. %s p\u00e1gina(s) que atendem a consulta.", "Search within %(docstitle)s": "Pesquisar dentro de %(docstitle)s", "Searching": "Buscando", "Show Source": "Exibir Fonte", "Table Of Contents": "Tabela de Conte\u00fado", "This Page": "Essa P\u00e1gina", "Welcome! This is": "Bem Vindo! \u00c9 isso a\u00ed.", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Sua busca n\u00e3o encontrou nenhum documento. Por favor, confirme se todas as palavras est\u00e3o grafadas corretamente e se voc\u00ea selecionou categorias suficientes.", "all functions, classes, terms": "todas fun\u00e7\u00f5es, classes, termos", "can be huge": "pode ser enorme", "last updated": "\u00faltima atualiza\u00e7\u00e3o", "lists all sections and subsections": "Listar todas se\u00e7\u00f5es e subse\u00e7\u00f5es", "next chapter": "pr\u00f3ximo cap\u00edtulo", "previous chapter": "cap\u00edtulo anterior", "quick access to all modules": "acesso r\u00e1pido para todos os m\u00f3dulos", "search": "buscar", "search this documentation": "Buscar nessa documenta\u00e7\u00e3o", "the documentation for": "documenta\u00e7\u00e3o para"}, "plural_expr": "(n > 1)"}); \ No newline at end of file diff --git a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo index 7fdc231b780..ee74d81e31f 100644 Binary files a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo and b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po index 4254701403c..e42ebaa1704 100644 --- a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po @@ -1,136 +1,130 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: +# Claudio Rogerio Carvalho Filho <excriptbrasil@gmail.com>, 2016 # FIRST AUTHOR <roger.demetrescu@gmail.com>, 2008 -# gilberto dos santos alves <gsavix@gmail.com>, 2015 +# gilberto dos santos alves <gsavix@gmail.com>, 2015-2016 +# Takeshi KOMIYA <i.tkomiya@gmail.com>, 2016 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/sphinx-1/language/pt_BR/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-26 18:05+0000\n" +"Last-Translator: gilberto dos santos alves <gsavix@gmail.com>\n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/sphinx-doc/sphinx-1/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "Seção %s" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "Fig. %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "Tabela %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "Listagem %s" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s documentação" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "veja %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "veja também %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Símbolos" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Propostas Estendidas Python; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d/%m/%Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Internos" #: sphinx/builders/changes.py:77 msgid "Module level" -msgstr "Módulo" +msgstr "Nível do Módulo" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d/%m/%Y" +msgstr "%b %d, %Y" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Índice Geral" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "índice" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "próximo" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "anterior" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "documentação %s %s" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (em " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "Legenda inválida: %s" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Autor da seção: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Autor do módulo: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Autor do código: " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Autor: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parâmetros" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Retorna" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Tipo de retorno" @@ -159,12 +153,12 @@ msgstr "%s (tipo C)" msgid "%s (C variable)" msgstr "%s (variável C)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "função" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "membro" @@ -172,7 +166,7 @@ msgstr "membro" msgid "macro" msgstr "macro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "tipo" @@ -180,59 +174,72 @@ msgstr "tipo" msgid "variable" msgstr "variável" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "Parâmetros do Modelo" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" -msgstr "Gera" +msgstr "Lança" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (tipo C++)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "%s (conceito C++)" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (membro C++)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (função C++)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (classe C++)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" -msgstr "%s (C++enum)" +msgstr "%s (C++ enum)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "%s (C++ enumerador)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "classe" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "conceito" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "enum" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "enumerador" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (função interna)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (método %s)" @@ -247,125 +254,125 @@ msgstr "%s() (classe)" msgid "%s (global variable or constant)" msgstr "%s (variável global ou constante)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (atributo %s)" #: sphinx/domains/javascript.py:122 msgid "Arguments" -msgstr "Parâmetros" +msgstr "Argumentos" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "dado" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "atributo" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Variáveis" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Levanta" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (no módulo %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (variável interna)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (no módulo %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (classe interna)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (classe em %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (método %s.%s)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (método estático %s.%s)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (método estático %s)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (método de classe %s.%s)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (método de classe %s)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (atributo %s.%s)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (módulo)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" -msgstr "Índice de Módulos do Python" +msgstr "Índice de Módulos Python" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "módulos" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Obsoleto" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "exceção" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "método" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "método de classe" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "método estático" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "módulo" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (obsoleto)" @@ -387,188 +394,219 @@ msgstr "diretiva" msgid "role" msgstr "papel" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "váriavel de ambiente; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" -msgstr "%sopção de linha de comando; %s" +msgstr "%s opção de linha de comando; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" -msgstr "Termo de glossário" +msgstr "Glossário de Termos" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" -msgstr "token de gramática" +msgstr "termo gramatical" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" -msgstr "rótulo de referência" +msgstr "marca referencial" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "váriavel de ambiente" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" -msgstr "opção de programa" +msgstr "opção do programa" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Índice" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Índice do Módulo" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" -msgstr "Página de Pesquisa" +msgstr "Página de Busca" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr " Bases: %s" +msgid "see %s" +msgstr "veja %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "veja também %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Símbolos" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "Base: %s" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "apelido de :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[gráfico: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[gráfico]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "Permalink para essa equação" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(em %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[código fonte]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "Rótulo de equação %s, duplicado outra instância em %s" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Por fazer" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<original entry>>" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(A <<entrada original>> está localizada em %s, linha %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(A <<original entry>> está localizada na %s, linha %d.)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "entrada original" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[documentos]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Código do módulo" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" -msgstr "<h1>Código fonte de %s</h1>" +msgstr "<h1>Código fonte para %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Visão geral: código do módulo" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Todos os módulos onde este código está disponível</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "Chaves e Argumentos " + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Atenção" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Cuidado" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Perigo" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Erro" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Dica" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Importante" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Nota" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" -msgstr "Veja também" +msgstr "Ver também" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Dica" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Aviso" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Novo na versão %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Alterado na versão %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Obsoleto desde a versão %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "palavra-chave" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operador" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objeto" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "comando" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "função interna" @@ -577,21 +615,17 @@ msgstr "função interna" msgid "Table Of Contents" msgstr "Tabela de Conteúdo" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" -msgstr "Pesquisar" +msgstr "Buscar" #: sphinx/themes/agogo/layout.html:54 sphinx/themes/basic/searchbox.html:15 msgid "Go" msgstr "Ir" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Digite os termos da busca ou o nome de um módulo, classe ou função." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Exibir Fonte" @@ -601,7 +635,7 @@ msgstr "Visão geral" #: sphinx/themes/basic/defindex.html:15 msgid "Welcome! This is" -msgstr "Bem Vindo(a)! É isso aí" +msgstr "Bem Vindo! É isso aí." #: sphinx/themes/basic/defindex.html:16 msgid "the documentation for" @@ -613,19 +647,19 @@ msgstr "última atualização" #: sphinx/themes/basic/defindex.html:20 msgid "Indices and tables:" -msgstr "Índices e tabelas:" +msgstr "Índices e Tabelas:" #: sphinx/themes/basic/defindex.html:23 msgid "Complete Table of Contents" -msgstr "Tabela de Conteúdo Completa" +msgstr "Tabela Completa dos Conteúdos" #: sphinx/themes/basic/defindex.html:24 msgid "lists all sections and subsections" -msgstr "Lista todas seções e subseções" +msgstr "Listar todas seções e subseções" #: sphinx/themes/basic/defindex.html:26 msgid "search this documentation" -msgstr "Pesquisar esta documentação" +msgstr "Buscar nessa documentação" #: sphinx/themes/basic/defindex.html:28 msgid "Global Module Index" @@ -639,21 +673,21 @@ msgstr "acesso rápido para todos os módulos" msgid "all functions, classes, terms" msgstr "todas funções, classes, termos" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Índice – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" -msgstr "Índice completo em uma página" +msgstr "Índice completo em página única" #: sphinx/themes/basic/genindex-split.html:16 msgid "Index pages by letter" -msgstr "Paginas de índice por letra" +msgstr "Páginas de índice por letra" #: sphinx/themes/basic/genindex-split.html:25 msgid "can be huge" @@ -663,35 +697,35 @@ msgstr "pode ser enorme" msgid "Navigation" msgstr "Navegação" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Pesquisar dentro de %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" -msgstr "Sobre estes documentos" +msgstr "Sobre esses documentos" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Última atualização em %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -701,7 +735,7 @@ msgstr "Criado usando <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_ver #: sphinx/themes/basic/opensearch.xml:4 #, python-format msgid "Search %(docstitle)s" -msgstr "Pesquisar em %(docstitle)s" +msgstr "Buscar em %(docstitle)s" #: sphinx/themes/basic/relations.html:11 msgid "Previous topic" @@ -723,7 +757,7 @@ msgstr "próximo capítulo" msgid "" "Please activate JavaScript to enable the search\n" " functionality." -msgstr "Por favor ative o JavaScript para habilitar a\n\"\n\" funcionalidade de pesquisa." +msgstr "Por favor, ativar JavaScript para habilitar a\nfuncionalidade de busca." #: sphinx/themes/basic/search.html:32 msgid "" @@ -731,50 +765,50 @@ msgid "" " words into the box below and click \"search\". Note that the search\n" " function will automatically search for all of the words. Pages\n" " containing fewer words won't appear in the result list." -msgstr "A partir daqui você pode pesquisar estes documentos. Preencha suas \n palavras de pesquisa na caixa abaixo e clique em \"pesquisar\".\n Observe que a função de pesquisa\n irá procurar automaticamente por todas as palavras.\n Páginas contendo menos palavras não irão aparecer na lista de\n resultado." +msgstr "Aqui pode-se fazer buscas nesses documentos. Preencha sua \npalavras de busca na caixa abaixo e clicar em \"Buscar\". Notar que a busca\nirá procurar automaticamente por todas as palavras. Páginas \ncontendo menos palavras não irão aparecer na lista de resultados." #: sphinx/themes/basic/search.html:39 #: sphinx/themes/basic/searchresults.html:17 msgid "search" -msgstr "pesquisar" +msgstr "buscar" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" -msgstr "Resultados da Pesquisa" +msgstr "Resultados da Busca" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." -msgstr "Sua pesquisa não encontrou nenhum documento. Por favor, confirme que todas as palavras estão grafadas corretamente e que você selecionou categorias suficientes." +msgstr "Sua busca não encontrou nenhum documento. Por favor, confirme se todas as palavras estão grafadas corretamente e se você selecionou categorias suficientes." #: sphinx/themes/basic/searchbox.html:12 msgid "Quick search" -msgstr "Pesquisa rápida" +msgstr "Busca rápida" #: sphinx/themes/basic/sourcelink.html:12 msgid "This Page" -msgstr "Esta Página" +msgstr "Essa Página" #: 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 "Alterações na Versão%(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "Modificações na versão %(version)s — %(docstitle)s" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +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 "Lista de alterações na versão %(version)s gerada automaticamente" +msgstr "Lista de alterações na versão %(version)s, gerada automaticamente" #: sphinx/themes/basic/changes/versionchanges.html:18 msgid "Library changes" @@ -788,33 +822,34 @@ msgstr "Alterações na API C" msgid "Other changes" msgstr "Outras alterações" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Link permanente para este título" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Link permanente para esta definição" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" -msgstr "Esconder Resultados da Pesquisa" +msgstr "Esconder Resultados da Busca" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" -msgstr "Pesquisando" +msgstr "Buscando" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." -msgstr "Preparando a pesquisa..." +msgstr "Preparando a busca..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." -msgstr "Pesquisa concluída, foram encontrada(s) %s página(s) que \"\n\"combinam com a consulta feita." +msgstr "Busca concluída. %s página(s) que atendem a consulta." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr ", em " @@ -829,46 +864,55 @@ msgstr "Recolher painel lateral" #: sphinx/themes/haiku/layout.html:24 msgid "Contents" -msgstr "Conteúdo" +msgstr "Conteúdos" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "Link Permanente para esse código" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "Link Permanente para essa imagem" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" -msgstr "" +msgstr "Link permanente para esse \"toctree\"" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "Link Permanente para essa tabela" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" -msgstr "Versão" +msgstr "Release" + +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "página" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "Chave configuração desconhecida: latex_elements[%r] será ignorado." -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Notas de rodapé" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "continuação da página anterior" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Continuação na próxima página" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[imagem: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[imagem]" diff --git a/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.js b/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.js index e1fcc9ac8ad..5b8458604ba 100644 --- a/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "pt_PT", "plural_expr": "(n != 1)", "messages": {"Next topic": "Pr\u00f3ximo t\u00f3pico", "Index": "\u00cdndice", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "Bem Vindo(a)! Esta \u00e9", "Copyright": "Copyright", "C API changes": "Altera\u00e7\u00f5es na API C", "quick access to all modules": "acesso r\u00e1pido a todos os m\u00f3dulos", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "\u00cdndice Global de M\u00f3dulos", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "A sua pesquisa n\u00e3o encontrou nenhum documento. Por favor, confirme que todas as palavras est\u00e3o escritas corretamente e que selecionou categorias suficientes.", "Index – %(key)s": "\u00cdndice – %(key)s", "General Index": "\u00cdndice Geral", "next chapter": "pr\u00f3ximo cap\u00edtulo", "Search finished, found %s page(s) matching the search query.": "Pesquisa conclu\u00edda, foram encontrada(s) %s p\u00e1gina(s) que combinam com a consulta feita.", "previous chapter": "cap\u00edtulo anterior", "Permalink to this headline": "Link permanente para este t\u00edtulo", "About these documents": "Sobre estes documentos", "Preparing search...": "A preparar a pesquisa...", ", in ": ", em", "Navigation": "Navega\u00e7\u00e3o", "Expand sidebar": "Expandir painel lateral", "the documentation for": "a documenta\u00e7\u00e3o de", "Complete Table of Contents": "Tabela de Conte\u00fados Completa", "Contents": "Conte\u00fado", "can be huge": "pode ser enorme", "Changes in Version %(version)s — %(docstitle)s": "Altera\u00e7\u00f5es na Vers\u00e3o%(version)s — %(docstitle)s", "Other changes": "Outras altera\u00e7\u00f5es", "Hide Search Matches": "Esconder Resultados da Pesquisa", "Quick search": "Pesquisa r\u00e1pida", "Show Source": "Exibir Fonte", "Search": "Pesquisar", "This Page": "Esta P\u00e1gina", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "A partir daqui pode pesquisar estes documentos. Preencha as\npalavras de pesquisa na caixa abaixo e clique em \"pesquisar\".\nNote que a fun\u00e7\u00e3o de pesquisa ir\u00e1 procurar automaticamente\npor todas as palavras. P\u00e1ginas que contenham menos palavras\nn\u00e3o ir\u00e3o aparecer na lista de resultados.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Criado utilizando <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "\u00faltima actualiza\u00e7\u00e3o", "Collapse sidebar": "Recolher painel lateral", "Go": "Ir", "Table Of Contents": "Tabela de Conte\u00fados", "Search within %(docstitle)s": "Pesquisar dentro de %(docstitle)s", "all functions, classes, terms": "todas as fun\u00e7\u00f5es, classes, termos", "Please activate JavaScript to enable the search\n functionality.": "Por favor ligue o JavaScript para habilitar a\nfuncionalidade de pesquisa.", "Indices and tables:": "\u00cdndices e tabelas:", "lists all sections and subsections": "Listar todas as sec\u00e7\u00f5es e subsec\u00e7\u00f5es", "Index pages by letter": "Paginas de \u00edndice por letra", "search": "pesquisar", "Permalink to this definition": "Link permanente para esta defini\u00e7\u00e3o", "Previous topic": "T\u00f3pico anterior", "Overview": "Vis\u00e3o geral", "Last updated on %(last_updated)s.": "\u00daltima actualiza\u00e7\u00e3o em %(last_updated)s.", "Searching": "A Pesquisar", "search this documentation": "Pesquisar esta documenta\u00e7\u00e3o", "Automatically generated list of changes in version %(version)s": "Lista de altera\u00e7\u00f5es gerada automaticamente na vers\u00e3o %(version)s", "Full index on one page": "\u00cdndice completo numa p\u00e1gina", "Enter search terms or a module, class or function name.": "Digite os termos da busca ou o nome de um m\u00f3dulo, classe ou fun\u00e7\u00e3o.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "Altera\u00e7\u00f5es na biblioteca", "Search Page": "P\u00e1gina de Pesquisa", "Search Results": "Resultados da Pesquisa"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "pt_PT", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": ", em", "About these documents": "Sobre estes documentos", "Automatically generated list of changes in version %(version)s": "Lista de altera\u00e7\u00f5es gerada automaticamente na vers\u00e3o %(version)s", "C API changes": "Altera\u00e7\u00f5es na API C", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "Recolher painel lateral", "Complete Table of Contents": "Tabela de Conte\u00fados Completa", "Contents": "Conte\u00fado", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Criado utilizando <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "Expandir painel lateral", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "A partir daqui pode pesquisar estes documentos. Preencha as\npalavras de pesquisa na caixa abaixo e clique em \"pesquisar\".\nNote que a fun\u00e7\u00e3o de pesquisa ir\u00e1 procurar automaticamente\npor todas as palavras. P\u00e1ginas que contenham menos palavras\nn\u00e3o ir\u00e3o aparecer na lista de resultados.", "Full index on one page": "\u00cdndice completo numa p\u00e1gina", "General Index": "\u00cdndice Geral", "Global Module Index": "\u00cdndice Global de M\u00f3dulos", "Go": "Ir", "Hide Search Matches": "Esconder Resultados da Pesquisa", "Index": "\u00cdndice", "Index – %(key)s": "\u00cdndice – %(key)s", "Index pages by letter": "Paginas de \u00edndice por letra", "Indices and tables:": "\u00cdndices e tabelas:", "Last updated on %(last_updated)s.": "\u00daltima actualiza\u00e7\u00e3o em %(last_updated)s.", "Library changes": "Altera\u00e7\u00f5es na biblioteca", "Navigation": "Navega\u00e7\u00e3o", "Next topic": "Pr\u00f3ximo t\u00f3pico", "Other changes": "Outras altera\u00e7\u00f5es", "Overview": "Vis\u00e3o geral", "Permalink to this definition": "Link permanente para esta defini\u00e7\u00e3o", "Permalink to this headline": "Link permanente para este t\u00edtulo", "Please activate JavaScript to enable the search\n functionality.": "Por favor ligue o JavaScript para habilitar a\nfuncionalidade de pesquisa.", "Preparing search...": "A preparar a pesquisa...", "Previous topic": "T\u00f3pico anterior", "Quick search": "Pesquisa r\u00e1pida", "Search": "Pesquisar", "Search Page": "P\u00e1gina de Pesquisa", "Search Results": "Resultados da Pesquisa", "Search finished, found %s page(s) matching the search query.": "Pesquisa conclu\u00edda, foram encontrada(s) %s p\u00e1gina(s) que combinam com a consulta feita.", "Search within %(docstitle)s": "Pesquisar dentro de %(docstitle)s", "Searching": "A Pesquisar", "Show Source": "Exibir Fonte", "Table Of Contents": "Tabela de Conte\u00fados", "This Page": "Esta P\u00e1gina", "Welcome! This is": "Bem Vindo(a)! Esta \u00e9", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "A sua pesquisa n\u00e3o encontrou nenhum documento. Por favor, confirme que todas as palavras est\u00e3o escritas corretamente e que selecionou categorias suficientes.", "all functions, classes, terms": "todas as fun\u00e7\u00f5es, classes, termos", "can be huge": "pode ser enorme", "last updated": "\u00faltima actualiza\u00e7\u00e3o", "lists all sections and subsections": "Listar todas as sec\u00e7\u00f5es e subsec\u00e7\u00f5es", "next chapter": "pr\u00f3ximo cap\u00edtulo", "previous chapter": "cap\u00edtulo anterior", "quick access to all modules": "acesso r\u00e1pido a todos os m\u00f3dulos", "search": "pesquisar", "search this documentation": "Pesquisar esta documenta\u00e7\u00e3o", "the documentation for": "a documenta\u00e7\u00e3o de"}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.mo b/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.mo index 155a9b0d981..8f5bb99584c 100644 Binary files a/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.mo and b/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po b/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po index ad9824bb74f..74be2b0fb04 100644 --- a/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/pt_PT/LC_MESSAGES/sphinx.po @@ -1,69 +1,50 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: # Pedro Algarvio <pedro@algarvio.me>, 2013 +# Takeshi KOMIYA <i.tkomiya@gmail.com>, 2016 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/sphinx-1/language/pt_PT/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Portuguese (Portugal) (http://www.transifex.com/sphinx-doc/sphinx-1/language/pt_PT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: pt_PT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "Documentação %s %s" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "ver %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "ver também %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Símbolos" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d %B, %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Internos" @@ -72,64 +53,76 @@ msgstr "Internos" msgid "Module level" msgstr "Módulos" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d %b, %Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Índice Geral" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "índice" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "próximo" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "anterior" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "Documentação %s %s" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (em " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Autor da secção: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Autor do módulo: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Autor do código: " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Autor: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parâmetros" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Retorno" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Tipo de retorno" @@ -158,12 +151,12 @@ msgstr "%s (tipo C)" msgid "%s (C variable)" msgstr "%s (variável C)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "função" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "membro" @@ -171,7 +164,7 @@ msgstr "membro" msgid "macro" msgstr "macro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "tipo" @@ -179,59 +172,72 @@ msgstr "tipo" msgid "variable" msgstr "variável" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Gera" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (tipo C++)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (membro C++)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (função C++)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (classe C++)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "classe" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (função interna)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (método %s)" @@ -246,7 +252,7 @@ msgstr "%s() (classe)" msgid "%s (global variable or constant)" msgstr "%s (variável global ou constante)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (atributo %s)" @@ -255,116 +261,116 @@ msgstr "%s (atributo %s)" msgid "Arguments" msgstr "Parâmetros" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "dados" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "atributo" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Variáveis" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Levanta" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (no módulo %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (variável interna)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (no módulo %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (classe interna)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (classe em %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (método %s.%s)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (método estático %s.%s)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (método estático %s)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (método de classe %s.%s)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (método de classe %s)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (atributo %s.%s)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (módulo)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Índice de Módulos do Python" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "módulos" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Obsoleto" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "excepção" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "método" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "método de classe" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "método estático" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "módulo" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (obsoleto)" @@ -386,188 +392,219 @@ msgstr "directiva" msgid "role" msgstr "papel" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "variável de ambiente; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%sopção de linha de comando; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "Termo de glossário" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "token de gramática" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "rótulo de referência" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "variável de ambiente" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "opção de programa" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Índice" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Índice de Módulos" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Página de Pesquisa" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr "Bases: %s" +msgid "see %s" +msgstr "ver %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "ver também %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Símbolos" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "pseudónimo de :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[gráfico: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[gráfico]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(em %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[código fonte]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Por fazer" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(A <<entrada original>> está localizada em %s, linha %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "entrada original" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[documentos]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Código do módulo" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Código fonte de %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Visão geral: código do módulo" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Todos os módulos onde este código está disponível</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Atenção" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Cuidado" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Perigo" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Erro" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Dica" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Importante" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Nota" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Veja também" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Dica" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Aviso" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Novo na versão %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Alterado na versão %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Obsoleto desde a versão %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "palavra-chave" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operador" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objecto" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "comando" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "função interna" @@ -576,7 +613,7 @@ msgstr "função interna" msgid "Table Of Contents" msgstr "Tabela de Conteúdos" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -586,11 +623,7 @@ msgstr "Pesquisar" msgid "Go" msgstr "Ir" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Digite os termos da busca ou o nome de um módulo, classe ou função." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Exibir Fonte" @@ -638,15 +671,15 @@ msgstr "acesso rápido a todos os módulos" msgid "all functions, classes, terms" msgstr "todas as funções, classes, termos" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Índice – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Índice completo numa página" @@ -662,35 +695,35 @@ msgstr "pode ser enorme" msgid "Navigation" msgstr "Navegação" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Pesquisar dentro de %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Sobre estes documentos" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Última actualização em %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -739,13 +772,13 @@ msgstr "pesquisar" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Resultados da Pesquisa" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -762,13 +795,13 @@ msgstr "Esta Página" #: 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 "Alterações na Versão%(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -787,33 +820,34 @@ msgstr "Alterações na API C" msgid "Other changes" msgstr "Outras alterações" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Link permanente para este título" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Link permanente para esta definição" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Esconder Resultados da Pesquisa" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "A Pesquisar" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "A preparar a pesquisa..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Pesquisa concluída, foram encontrada(s) %s página(s) que combinam com a consulta feita." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr ", em" @@ -830,44 +864,53 @@ msgstr "Recolher painel lateral" msgid "Contents" msgstr "Conteúdo" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Versão" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Notas de rodapé" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "continuação da página anterior" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Continuação na próxima página" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[imagem: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[imagem]" diff --git a/sphinx/locale/ro/LC_MESSAGES/sphinx.js b/sphinx/locale/ro/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000000..5a5571f7e3a --- /dev/null +++ b/sphinx/locale/ro/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "ro", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": ", \u00een", "About these documents": "Despre aceste documente", "Automatically generated list of changes in version %(version)s": "Lista de schimb\u0103ri generat\u0103 automat pentru versiunea %(version)s", "C API changes": "Schimb\u0103ri \u00een API C", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "Ascundere bar\u0103 lateral\u0103", "Complete Table of Contents": "Cuprinsul Complet", "Contents": "Cuprins", "Copyright": "Drepturi de autor", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Generat cu <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "Expandare bar\u0103 lateral\u0103", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Aici po\u021bi c\u0103uta aceste documente. Completeaz\u0103 cuvintele\n\u00een c\u0103su\u021ba de mai jos \u0219i apas\u0103 \"caut\u0103\". Func\u021bia de c\u0103utare\nva c\u0103uta automat dup\u0103 toate cuvintele. Paginile\ncare con\u021bin mai pu\u021bine cuvinte nu vor ap\u0103rea \u00een lista de rezultate.", "Full index on one page": "Index complet", "General Index": "Index General", "Global Module Index": "Index Module Globale", "Go": "Caut\u0103", "Hide Search Matches": "Ascunde Rezultatele C\u0103ut\u0103rii", "Index": "Index", "Index – %(key)s": "Index – %(key)s", "Index pages by letter": "Indexeaz\u0103 paginile dupa liter\u0103", "Indices and tables:": "Indici \u0219i tabele:", "Last updated on %(last_updated)s.": "Ultima actualizare la %(last_updated)s.", "Library changes": "Schimb\u0103ri \u00een bibliotec\u0103", "Navigation": "Navigare", "Next topic": "Subiectul urm\u0103tor", "Other changes": "Alte schimb\u0103ri", "Overview": "Prezentare general\u0103", "Permalink to this definition": "Link permanent la aceast\u0103 defini\u021bie", "Permalink to this headline": "Link permanent la acest titlu", "Please activate JavaScript to enable the search\n functionality.": "Activeaz\u0103 JavaScript pentru a permite\nfunc\u021bia de c\u0103utare.", "Preparing search...": "Se preg\u0103te\u0219te c\u0103utarea...", "Previous topic": "Subiectul precedent", "Quick search": "C\u0103utare rapid\u0103", "Search": "C\u0103utare", "Search Page": "Pagin\u0103 de C\u0103utare", "Search Results": "Rezultatele C\u0103ut\u0103rii", "Search finished, found %s page(s) matching the search query.": "C\u0103utare finalizat\u0103, au fost g\u0103site %s pagini care au corespuns c\u0103ut\u0103rii.", "Search within %(docstitle)s": "Caut\u0103 \u00een %(docstitle)s", "Searching": "C\u0103utare", "Show Source": "Vezi Sursa", "Table Of Contents": "Cuprins", "This Page": "Aceast\u0103 Pagin\u0103", "Welcome! This is": "Bine ai venit! Acesta este", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "C\u0103utarea nu a identificat nici un document. Te rog s\u0103 te asiguri c\u0103 toate cuvintele sunt scrise corect \u0219i c\u0103 ai selectat suficiente categorii.", "all functions, classes, terms": "toate func\u021biile, clasele, termenii", "can be huge": "poate fi extrem de mare", "last updated": "ultima actualizare", "lists all sections and subsections": "lista tuturor sec\u021biunilor si a subsec\u021biunilor", "next chapter": "capitolul urm\u0103tor", "previous chapter": "capitolul precedent", "quick access to all modules": "acces rapid la toate modulele", "search": "c\u0103utare", "search this documentation": "caut\u0103 \u00een aceast\u0103 documenta\u021bie", "the documentation for": "documenta\u021bia pentru"}, "plural_expr": "(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))"}); \ No newline at end of file diff --git a/sphinx/locale/ro/LC_MESSAGES/sphinx.mo b/sphinx/locale/ro/LC_MESSAGES/sphinx.mo new file mode 100644 index 00000000000..388d7ac4525 Binary files /dev/null and b/sphinx/locale/ro/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/ro/LC_MESSAGES/sphinx.po b/sphinx/locale/ro/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000000..d872130a39d --- /dev/null +++ b/sphinx/locale/ro/LC_MESSAGES/sphinx.po @@ -0,0 +1,916 @@ +# Translations template for Sphinx. +# Copyright (C) 2016 ORGANIZATION +# This file is distributed under the same license as the Sphinx project. +# +# Translators: +# Razvan Stefanescu <razvan.stefanescu@gmail.com>, 2015-2016 +# Takeshi KOMIYA <i.tkomiya@gmail.com>, 2016 +msgid "" +msgstr "" +"Project-Id-Version: Sphinx\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Romanian (http://www.transifex.com/sphinx-doc/sphinx-1/language/ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.3.4\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 +#, python-format +msgid "Fig. %s" +msgstr "Fig. %s" + +#: sphinx/config.py:111 +#, python-format +msgid "Table %s" +msgstr "Tabelul %s" + +#: sphinx/config.py:112 +#, python-format +msgid "Listing %s" +msgstr "Cod %s" + +#: sphinx/roles.py:187 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Propuneri de Îmbunătățire Python; PEP %s" + +#: sphinx/builders/changes.py:75 +msgid "Builtins" +msgstr "Integrate" + +#: sphinx/builders/changes.py:77 +msgid "Module level" +msgstr "Nivelul modul" + +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 +#, python-format +msgid "%b %d, %Y" +msgstr "" + +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "Index General" + +#: sphinx/builders/html.py:315 +msgid "index" +msgstr "index" + +#: sphinx/builders/html.py:377 +msgid "next" +msgstr "următor" + +#: sphinx/builders/html.py:386 +msgid "previous" +msgstr "precedent" + +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s documentație" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 +msgid " (in " +msgstr "(în" + +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 +msgid "Section author: " +msgstr "Autorul secțiunii:" + +#: sphinx/directives/other.py:151 +msgid "Module author: " +msgstr "Autorul modulului:" + +#: sphinx/directives/other.py:153 +msgid "Code author: " +msgstr "Autorul codului:" + +#: sphinx/directives/other.py:155 +msgid "Author: " +msgstr "Autor:" + +#: sphinx/domains/__init__.py:277 +#, python-format +msgid "%s %s" +msgstr "%s %s" + +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 +msgid "Parameters" +msgstr "Parametrii" + +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 +msgid "Returns" +msgstr "Întoarce" + +#: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 +#: sphinx/domains/python.py:163 +msgid "Return type" +msgstr "Tipul întors" + +#: sphinx/domains/c.py:177 +#, python-format +msgid "%s (C function)" +msgstr "%s (funcție C)" + +#: sphinx/domains/c.py:179 +#, python-format +msgid "%s (C member)" +msgstr "%s (membru C)" + +#: sphinx/domains/c.py:181 +#, python-format +msgid "%s (C macro)" +msgstr "%s (macro C)" + +#: sphinx/domains/c.py:183 +#, python-format +msgid "%s (C type)" +msgstr "%s (tip C)" + +#: sphinx/domains/c.py:185 +#, python-format +msgid "%s (C variable)" +msgstr "%s (variabilă C)" + +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 +msgid "function" +msgstr "funcție" + +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 +msgid "member" +msgstr "membru" + +#: sphinx/domains/c.py:244 +msgid "macro" +msgstr "macro" + +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 +msgid "type" +msgstr "tip" + +#: sphinx/domains/c.py:246 +msgid "variable" +msgstr "variabilă" + +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "Generează" + +#: sphinx/domains/cpp.py:4205 +#, python-format +msgid "%s (C++ type)" +msgstr "%s (tip C++)" + +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 +#, python-format +msgid "%s (C++ member)" +msgstr "%s (membru C++)" + +#: sphinx/domains/cpp.py:4238 +#, python-format +msgid "%s (C++ function)" +msgstr "%s (funcție C++)" + +#: sphinx/domains/cpp.py:4249 +#, python-format +msgid "%s (C++ class)" +msgstr "%s (clasă C++)" + +#: sphinx/domains/cpp.py:4260 +#, python-format +msgid "%s (C++ enum)" +msgstr "%s (enumerator C++)" + +#: sphinx/domains/cpp.py:4281 +#, python-format +msgid "%s (C++ enumerator)" +msgstr "%s (enumerator C++)" + +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 +msgid "class" +msgstr "clasă" + +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 +msgid "enum" +msgstr "enumerator" + +#: sphinx/domains/cpp.py:4423 +msgid "enumerator" +msgstr "enumerator" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 +#, python-format +msgid "%s() (built-in function)" +msgstr "%s() (funcție integrată)" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 +#, python-format +msgid "%s() (%s method)" +msgstr "%s() (metoda %s)" + +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (clasă)" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "%s (variabilă globală sau constantă)" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 +#, python-format +msgid "%s (%s attribute)" +msgstr "%s (atribut %s)" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "Argumente" + +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 +msgid "data" +msgstr "data" + +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 +msgid "attribute" +msgstr "atribut" + +#: sphinx/domains/python.py:154 +msgid "Variables" +msgstr "Variabile" + +#: sphinx/domains/python.py:158 +msgid "Raises" +msgstr "Generează" + +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 +#, python-format +msgid "%s() (in module %s)" +msgstr "%s() (în modulul %s)" + +#: sphinx/domains/python.py:311 +#, python-format +msgid "%s (built-in variable)" +msgstr "%s (variabilă integrată)" + +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 +#, python-format +msgid "%s (in module %s)" +msgstr "%s (în modulul %s)" + +#: sphinx/domains/python.py:328 +#, python-format +msgid "%s (built-in class)" +msgstr "%s (clasă integrată)" + +#: sphinx/domains/python.py:329 +#, python-format +msgid "%s (class in %s)" +msgstr "%s (clasa în %s)" + +#: sphinx/domains/python.py:369 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "%s() (metoda %s.%s)" + +#: sphinx/domains/python.py:381 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "%s() (metoda statică %s.%s)" + +#: sphinx/domains/python.py:384 +#, python-format +msgid "%s() (%s static method)" +msgstr "%s() (metoda statică %s)" + +#: sphinx/domains/python.py:394 +#, python-format +msgid "%s() (%s.%s class method)" +msgstr "%s() (metoda clasei %s.%s)" + +#: sphinx/domains/python.py:397 +#, python-format +msgid "%s() (%s class method)" +msgstr "%s() (metoda clasei %s)" + +#: sphinx/domains/python.py:407 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "%s (atributul %s.%s)" + +#: sphinx/domains/python.py:488 +#, python-format +msgid "%s (module)" +msgstr "%s (modul)" + +#: sphinx/domains/python.py:545 +msgid "Python Module Index" +msgstr "Indexul de Module Python" + +#: sphinx/domains/python.py:546 +msgid "modules" +msgstr "module" + +#: sphinx/domains/python.py:592 +msgid "Deprecated" +msgstr "Învechit" + +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 +msgid "exception" +msgstr "excepție" + +#: sphinx/domains/python.py:618 +msgid "method" +msgstr "metodă" + +#: sphinx/domains/python.py:619 +msgid "class method" +msgstr "metoda clasei" + +#: sphinx/domains/python.py:620 +msgid "static method" +msgstr "metodă statică" + +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 +msgid "module" +msgstr "modul" + +#: sphinx/domains/python.py:787 +msgid " (deprecated)" +msgstr "(învechit)" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "%s (directivă)" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "%s (rol)" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "directivă" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "rol" + +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 +#, python-format +msgid "environment variable; %s" +msgstr "variabilă de mediu; %s" + +#: sphinx/domains/std.py:186 +#, python-format +msgid "%scommand line option; %s" +msgstr "%sopțiune în linia de comandă; %s" + +#: sphinx/domains/std.py:434 +msgid "glossary term" +msgstr "termen de glosar" + +#: sphinx/domains/std.py:435 +msgid "grammar token" +msgstr "element de gramatică" + +#: sphinx/domains/std.py:436 +msgid "reference label" +msgstr "etichetă de referință" + +#: sphinx/domains/std.py:438 +msgid "environment variable" +msgstr "variabilă de mediu" + +#: sphinx/domains/std.py:439 +msgid "program option" +msgstr "opțiune a programului" + +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 +msgid "Index" +msgstr "Index" + +#: sphinx/domains/std.py:474 +msgid "Module Index" +msgstr "Index al modulelor" + +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "Pagină de Căutare" + +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "vezi %s" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "vezi și %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Simboluri" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 +#, python-format +msgid "alias of :class:`%s`" +msgstr "alias pentru :class:`%s`" + +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 +#, python-format +msgid "[graph: %s]" +msgstr "[grafic: %s]" + +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 +msgid "[graph]" +msgstr "[grafic]" + +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 +#, python-format +msgid "(in %s v%s)" +msgstr "(în %s v%s)" + +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 +msgid "[source]" +msgstr "[sursă]" + +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 +msgid "Todo" +msgstr "De făcut" + +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 +#, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" + +#: sphinx/ext/todo.py:146 +msgid "original entry" +msgstr "înregistrarea inițială" + +#: sphinx/ext/viewcode.py:166 +msgid "[docs]" +msgstr "[documentație]" + +#: sphinx/ext/viewcode.py:180 +msgid "Module code" +msgstr "Codul modulului" + +#: sphinx/ext/viewcode.py:186 +#, python-format +msgid "<h1>Source code for %s</h1>" +msgstr "<h1>Codul sursă pentru %s</h1>" + +#: sphinx/ext/viewcode.py:212 +msgid "Overview: module code" +msgstr "Prezentare generală: codul modulului" + +#: sphinx/ext/viewcode.py:213 +msgid "<h1>All modules for which code is available</h1>" +msgstr "<h1>Toate modulele pentru care este disponibil codul sursă</h1>" + +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 +msgid "Attention" +msgstr "Atenție" + +#: sphinx/locale/__init__.py:160 +msgid "Caution" +msgstr "Avertisment" + +#: sphinx/locale/__init__.py:161 +msgid "Danger" +msgstr "Pericol" + +#: sphinx/locale/__init__.py:162 +msgid "Error" +msgstr "Eroare" + +#: sphinx/locale/__init__.py:163 +msgid "Hint" +msgstr "Sugestie" + +#: sphinx/locale/__init__.py:164 +msgid "Important" +msgstr "Important" + +#: sphinx/locale/__init__.py:165 +msgid "Note" +msgstr "Notă" + +#: sphinx/locale/__init__.py:166 +msgid "See also" +msgstr "Vezi și" + +#: sphinx/locale/__init__.py:167 +msgid "Tip" +msgstr "Sfat" + +#: sphinx/locale/__init__.py:168 +msgid "Warning" +msgstr "Atenționare" + +#: sphinx/locale/__init__.py:172 +#, python-format +msgid "New in version %s" +msgstr "Nou în versiunea %s" + +#: sphinx/locale/__init__.py:173 +#, python-format +msgid "Changed in version %s" +msgstr "Schimbat în versiunea %s" + +#: sphinx/locale/__init__.py:174 +#, python-format +msgid "Deprecated since version %s" +msgstr "Învechit începând cu versiunea %s" + +#: sphinx/locale/__init__.py:180 +msgid "keyword" +msgstr "cuvânt cheie" + +#: sphinx/locale/__init__.py:181 +msgid "operator" +msgstr "operator" + +#: sphinx/locale/__init__.py:182 +msgid "object" +msgstr "obiect" + +#: sphinx/locale/__init__.py:184 +msgid "statement" +msgstr "declarație" + +#: sphinx/locale/__init__.py:185 +msgid "built-in function" +msgstr "funcție integrată" + +#: sphinx/themes/agogo/layout.html:46 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:11 sphinx/themes/scrolls/layout.html:35 +msgid "Table Of Contents" +msgstr "Cuprins" + +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/searchresults.html:10 +msgid "Search" +msgstr "Căutare" + +#: sphinx/themes/agogo/layout.html:54 sphinx/themes/basic/searchbox.html:15 +msgid "Go" +msgstr "Caută" + +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 +msgid "Show Source" +msgstr "Vezi Sursa" + +#: sphinx/themes/basic/defindex.html:11 +msgid "Overview" +msgstr "Prezentare generală" + +#: sphinx/themes/basic/defindex.html:15 +msgid "Welcome! This is" +msgstr "Bine ai venit! Acesta este" + +#: sphinx/themes/basic/defindex.html:16 +msgid "the documentation for" +msgstr "documentația pentru" + +#: sphinx/themes/basic/defindex.html:17 +msgid "last updated" +msgstr "ultima actualizare" + +#: sphinx/themes/basic/defindex.html:20 +msgid "Indices and tables:" +msgstr "Indici și tabele:" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "Cuprinsul Complet" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "lista tuturor secțiunilor si a subsecțiunilor" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "caută în această documentație" + +#: sphinx/themes/basic/defindex.html:28 +msgid "Global Module Index" +msgstr "Index Module Globale" + +#: sphinx/themes/basic/defindex.html:29 +msgid "quick access to all modules" +msgstr "acces rapid la toate modulele" + +#: sphinx/themes/basic/defindex.html:31 +msgid "all functions, classes, terms" +msgstr "toate funcțiile, clasele, termenii" + +#: sphinx/themes/basic/genindex-single.html:33 +#, python-format +msgid "Index – %(key)s" +msgstr "Index – %(key)s" + +#: sphinx/themes/basic/genindex-single.html:61 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:72 +msgid "Full index on one page" +msgstr "Index complet" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "Indexează paginile dupa literă" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "poate fi extrem de mare" + +#: sphinx/themes/basic/layout.html:29 +msgid "Navigation" +msgstr "Navigare" + +#: sphinx/themes/basic/layout.html:123 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "Caută în %(docstitle)s" + +#: sphinx/themes/basic/layout.html:132 +msgid "About these documents" +msgstr "Despre aceste documente" + +#: sphinx/themes/basic/layout.html:141 +msgid "Copyright" +msgstr "Drepturi de autor" + +#: sphinx/themes/basic/layout.html:186 +#, python-format +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:188 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:192 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Ultima actualizare la %(last_updated)s." + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "" +"Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "Generat cu <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s." + +#: sphinx/themes/basic/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr "Caută %(docstitle)s" + +#: sphinx/themes/basic/relations.html:11 +msgid "Previous topic" +msgstr "Subiectul precedent" + +#: sphinx/themes/basic/relations.html:13 +msgid "previous chapter" +msgstr "capitolul precedent" + +#: sphinx/themes/basic/relations.html:16 +msgid "Next topic" +msgstr "Subiectul următor" + +#: sphinx/themes/basic/relations.html:18 +msgid "next chapter" +msgstr "capitolul următor" + +#: sphinx/themes/basic/search.html:27 +msgid "" +"Please activate JavaScript to enable the search\n" +" functionality." +msgstr "Activează JavaScript pentru a permite\nfuncția de căutare." + +#: sphinx/themes/basic/search.html:32 +msgid "" +"From here you can search these documents. Enter your search\n" +" words into the box below and click \"search\". Note that the search\n" +" function will automatically search for all of the words. Pages\n" +" containing fewer words won't appear in the result list." +msgstr "Aici poți căuta aceste documente. Completează cuvintele\nîn căsuța de mai jos și apasă \"caută\". Funcția de căutare\nva căuta automat după toate cuvintele. Paginile\ncare conțin mai puține cuvinte nu vor apărea în lista de rezultate." + +#: sphinx/themes/basic/search.html:39 +#: sphinx/themes/basic/searchresults.html:17 +msgid "search" +msgstr "căutare" + +#: sphinx/themes/basic/search.html:43 +#: sphinx/themes/basic/searchresults.html:21 +#: sphinx/themes/basic/static/searchtools.js_t:287 +msgid "Search Results" +msgstr "Rezultatele Căutării" + +#: sphinx/themes/basic/search.html:45 +#: sphinx/themes/basic/searchresults.html:23 +#: sphinx/themes/basic/static/searchtools.js_t:289 +msgid "" +"Your search did not match any documents. Please make sure that all words are" +" spelled correctly and that you've selected enough categories." +msgstr "Căutarea nu a identificat nici un document. Te rog să te asiguri că toate cuvintele sunt scrise corect și că ai selectat suficiente categorii." + +#: sphinx/themes/basic/searchbox.html:12 +msgid "Quick search" +msgstr "Căutare rapidă" + +#: sphinx/themes/basic/sourcelink.html:12 +msgid "This Page" +msgstr "Această Pagină" + +#: 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 "" + +#: sphinx/themes/basic/changes/rstsource.html:5 +#, python-format +msgid "%(filename)s — %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:17 +#, python-format +msgid "Automatically generated list of changes in version %(version)s" +msgstr "Lista de schimbări generată automat pentru versiunea %(version)s" + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "Schimbări în bibliotecă" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "Schimbări în API C" + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "Alte schimbări" + +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 +msgid "Permalink to this headline" +msgstr "Link permanent la acest titlu" + +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 +msgid "Permalink to this definition" +msgstr "Link permanent la această definiție" + +#: sphinx/themes/basic/static/doctools.js_t:208 +msgid "Hide Search Matches" +msgstr "Ascunde Rezultatele Căutării" + +#: sphinx/themes/basic/static/searchtools.js_t:121 +msgid "Searching" +msgstr "Căutare" + +#: sphinx/themes/basic/static/searchtools.js_t:126 +msgid "Preparing search..." +msgstr "Se pregătește căutarea..." + +#: sphinx/themes/basic/static/searchtools.js_t:291 +#, python-format +msgid "Search finished, found %s page(s) matching the search query." +msgstr "Căutare finalizată, au fost găsite %s pagini care au corespuns căutării." + +#: sphinx/themes/basic/static/searchtools.js_t:344 +msgid ", in " +msgstr ", în" + +#: sphinx/themes/classic/static/sidebar.js_t:83 +msgid "Expand sidebar" +msgstr "Expandare bară laterală" + +#: sphinx/themes/classic/static/sidebar.js_t:96 +#: sphinx/themes/classic/static/sidebar.js_t:124 +msgid "Collapse sidebar" +msgstr "Ascundere bară laterală" + +#: sphinx/themes/haiku/layout.html:24 +msgid "Contents" +msgstr "Cuprins" + +#: sphinx/writers/html.py:389 +msgid "Permalink to this code" +msgstr "Link permanent la acest cod" + +#: sphinx/writers/html.py:393 +msgid "Permalink to this image" +msgstr "Link permanent la această imagine" + +#: sphinx/writers/html.py:395 +msgid "Permalink to this toctree" +msgstr "Link permanent la acest cuprins" + +#: sphinx/writers/html.py:717 +msgid "Permalink to this table" +msgstr "Link permanent la acest tabel" + +#: sphinx/writers/latex.py:380 +msgid "Release" +msgstr "Versiune" + +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 +msgid "Footnotes" +msgstr "Note de subsol" + +#: sphinx/writers/latex.py:1112 +msgid "continued from previous page" +msgstr "continuare din pagina precedentă" + +#: sphinx/writers/latex.py:1118 +msgid "Continued on next page" +msgstr "Se continuă pe pagina următoare" + +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 +#, python-format +msgid "[image: %s]" +msgstr "[figura: %s]" + +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 +msgid "[image]" +msgstr "[figură]" diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.js b/sphinx/locale/ru/LC_MESSAGES/sphinx.js index ad6c48e2748..41853c8057d 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": {"Next topic": "\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b", "Index": "\u0410\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c! \u042d\u0442\u043e", "Copyright": "\u0410\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0430", "C API changes": "\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 API C", "quick access to all modules": "\u0441\u0432\u043e\u0434\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "\u0410\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0434\u0443\u043b\u0435\u0439", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u043f\u043e\u0438\u0441\u043a\u0443 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u0441\u043b\u043e\u0432\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a, \u0438 \u0447\u0442\u043e \u0432\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439.", "Index – %(key)s": "\u0410\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c – %(key)s", "General Index": "\u0410\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c", "next chapter": "\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0433\u043b\u0430\u0432\u0430", "Search finished, found %s page(s) matching the search query.": "\u041f\u043e\u0438\u0441\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d, \u043d\u0430\u0439\u0434\u0435\u043d\u043e %s \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0443.", "previous chapter": "\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0433\u043b\u0430\u0432\u0430", "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", "About these documents": "\u041e\u0431 \u044d\u0442\u0438\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0445", "Preparing search...": "\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043f\u043e\u0438\u0441\u043a\u0430\u2026", ", in ": ", \u0432", "Navigation": "\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f", "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", "the documentation for": "\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f", "Complete Table of Contents": "\u041f\u043e\u043b\u043d\u043e\u0435 \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435", "Contents": "\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435", "can be huge": "\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043c", "Changes in Version %(version)s — %(docstitle)s": "\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 %(version)s — %(docstitle)s", "Other changes": "\u0414\u0440\u0443\u0433\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f", "Hide Search Matches": "\u0421\u043d\u044f\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435", "Quick search": "\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u043e\u0438\u0441\u043a", "Show Source": "\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442", "Search": "\u041f\u043e\u0438\u0441\u043a", "This Page": "\u042d\u0442\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0432\u0441\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u043c \u044d\u0442\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u0438\u0441\u043a\u0430\u0442\u044c\u00bb. \u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430. \u0421\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u0438\u0445 \u0441\u043b\u043e\u0432, \u043e\u0442\u043e\u0431\u0440\u0430\u043d\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "\u0421\u043e\u0437\u0434\u0430\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435", "Collapse sidebar": "\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u043e\u043a\u043e\u0432\u0443\u044e \u043f\u0430\u043d\u0435\u043b\u044c", "Go": "\u0418\u0441\u043a\u0430\u0442\u044c", "Table Of Contents": "\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435", "Search within %(docstitle)s": "\u041f\u043e\u0438\u0441\u043a \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435 \u00ab%(docstitle)s\u00bb", "all functions, classes, terms": "\u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043b\u0430\u0441\u0441\u044b, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b", "Please activate JavaScript to enable the search\n functionality.": "\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 JavaScript \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.", "Indices and tables:": "\u0422\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438:", "lists all sections and subsections": "\u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u0438 \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432", "Index pages by letter": "\u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043f\u043e \u0431\u0443\u043a\u0432\u0430\u043c \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430", "search": "\u0438\u0441\u043a\u0430\u0442\u044c", "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", "Previous topic": "\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b", "Overview": "\u041e\u0431\u0437\u043e\u0440", "Last updated on %(last_updated)s.": "\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043e: %(last_updated)s.", "Searching": "\u0418\u0434\u0451\u0442 \u043f\u043e\u0438\u0441\u043a", "search this documentation": "\u043f\u043e\u0438\u0441\u043a \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438", "Automatically generated list of changes in version %(version)s": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 %(version)s", "Full index on one page": "\u041f\u043e\u043b\u043d\u044b\u0439 \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435", "Enter search terms or a module, class or function name.": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u043b\u043e\u0432\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u043b\u0438 \u0438\u043c\u044f \u043c\u043e\u0434\u0443\u043b\u044f, \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">\u0410\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0430</a> %(copyright)s.", "Library changes": "\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435", "Search Page": "\u041f\u043e\u0438\u0441\u043a", "Search Results": "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "ru", "messages": {"%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", ", in ": ", \u0432", "About these documents": "\u041e\u0431 \u044d\u0442\u0438\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0445", "Automatically generated list of changes in version %(version)s": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 %(version)s", "C API changes": "\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 API C", "Changes in Version %(version)s — %(docstitle)s": "\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 %(version)s — %(docstitle)s", "Collapse sidebar": "\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u043e\u043a\u043e\u0432\u0443\u044e \u043f\u0430\u043d\u0435\u043b\u044c", "Complete Table of Contents": "\u041f\u043e\u043b\u043d\u043e\u0435 \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435", "Contents": "\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435", "Copyright": "\u0410\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0430", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "\u0421\u043e\u0437\u0434\u0430\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "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", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0432\u0441\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u043c \u044d\u0442\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u0438\u0441\u043a\u0430\u0442\u044c\u00bb. \u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430. \u0421\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u0438\u0445 \u0441\u043b\u043e\u0432, \u043e\u0442\u043e\u0431\u0440\u0430\u043d\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442.", "Full index on one page": "\u041f\u043e\u043b\u043d\u044b\u0439 \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435", "General Index": "\u0410\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c", "Global Module Index": "\u0410\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0434\u0443\u043b\u0435\u0439", "Go": "\u0418\u0441\u043a\u0430\u0442\u044c", "Hide Search Matches": "\u0421\u043d\u044f\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435", "Index": "\u0410\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c", "Index – %(key)s": "\u0410\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c – %(key)s", "Index pages by letter": "\u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043f\u043e \u0431\u0443\u043a\u0432\u0430\u043c \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430", "Indices and tables:": "\u0422\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438:", "Last updated on %(last_updated)s.": "\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043e: %(last_updated)s.", "Library changes": "\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435", "Navigation": "\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f", "Next topic": "\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b", "Other changes": "\u0414\u0440\u0443\u0433\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f", "Overview": "\u041e\u0431\u0437\u043e\u0440", "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", "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", "Please activate JavaScript to enable the search\n functionality.": "\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 JavaScript \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.", "Preparing search...": "\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043f\u043e\u0438\u0441\u043a\u0430\u2026", "Previous topic": "\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b", "Quick search": "\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u043e\u0438\u0441\u043a", "Search": "\u041f\u043e\u0438\u0441\u043a", "Search Page": "\u041f\u043e\u0438\u0441\u043a", "Search Results": "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430", "Search finished, found %s page(s) matching the search query.": "\u041f\u043e\u0438\u0441\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d, \u043d\u0430\u0439\u0434\u0435\u043d\u043e %s \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0443.", "Search within %(docstitle)s": "\u041f\u043e\u0438\u0441\u043a \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435 \u00ab%(docstitle)s\u00bb", "Searching": "\u0418\u0434\u0451\u0442 \u043f\u043e\u0438\u0441\u043a", "Show Source": "\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442", "Table Of Contents": "\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435", "This Page": "\u042d\u0442\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430", "Welcome! This is": "\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c! \u042d\u0442\u043e", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u041f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u043f\u043e\u0438\u0441\u043a\u0443 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u0441\u043b\u043e\u0432\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a, \u0438 \u0447\u0442\u043e \u0432\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439.", "all functions, classes, terms": "\u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043b\u0430\u0441\u0441\u044b, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b", "can be huge": "\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043c", "last updated": "\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435", "lists all sections and subsections": "\u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u0438 \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432", "next chapter": "\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0433\u043b\u0430\u0432\u0430", "previous chapter": "\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0433\u043b\u0430\u0432\u0430", "quick access to all modules": "\u0441\u0432\u043e\u0434\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439", "search": "\u0438\u0441\u043a\u0430\u0442\u044c", "search this documentation": "\u043f\u043e\u0438\u0441\u043a \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438", "the documentation for": "\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f"}, "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3)"}); \ 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 a21befe8809..97a4c2f186a 100644 Binary files a/sphinx/locale/ru/LC_MESSAGES/sphinx.mo and b/sphinx/locale/ru/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.po b/sphinx/locale/ru/LC_MESSAGES/sphinx.po index 687e2ceed71..eee2e4b020b 100644 --- a/sphinx/locale/ru/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ru/LC_MESSAGES/sphinx.po @@ -1,71 +1,53 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: # Dmitry Shachnev <mitya57@gmail.com>, 2013 -# ferm32 <ferm32@gmail.com>, 2014 +# ferm32 <ferm32@gmail.com>, 2014,2016 # FIRST AUTHOR <EMAIL@ADDRESS>, 2013 +# Konstantin Molchanov <moigagoo@live.com>, 2016 +# PyHedgehog <pywebmail@list.ru>, 2015 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Russian (http://www.transifex.com/projects/p/sphinx-1/language/ru/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-15 11:26+0000\n" +"Last-Translator: Konstantin Molchanov <moigagoo@live.com>\n" +"Language-Team: Russian (http://www.transifex.com/sphinx-doc/sphinx-1/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: 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" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "Раздел %s" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" -msgstr "" +msgstr "Рис. %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" -msgstr "" +msgstr "Таблица %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" -msgstr "" - -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "Документация %s %s" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "см. %s" +msgstr "Список %s" -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "также см. %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Символы" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Предложения об улучшениях Python; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d %B %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Встроенные функции" @@ -74,64 +56,76 @@ msgstr "Встроенные функции" msgid "Module level" msgstr "Модуль" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d %b %Y" +msgstr "%b %d, %Y" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Алфавитный указатель" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "указатель" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "вперёд" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "назад" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "Документация %s %s" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (в " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "Некорректная подпись: %s" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Автор раздела: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Автор модуля: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Автор кода:" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Автор: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Параметры" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Результат" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Тип результата" @@ -160,12 +154,12 @@ msgstr "%s (тип C)" msgid "%s (C variable)" msgstr "%s (переменная C)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "функция" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "поле" @@ -173,7 +167,7 @@ msgstr "поле" msgid "macro" msgstr "макрос" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "тип" @@ -181,59 +175,72 @@ msgstr "тип" msgid "variable" msgstr "переменная" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "Параметры шаблона" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Бросает исключение" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (тип C++)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "%s (концепт C++)" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (поле C++)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (функция C++)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (класс C++)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" -msgstr "" +msgstr "%s (перечисляемый тип C++)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" -msgstr "" +msgstr "%s (функция-перечислитель C++)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "класс" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "концепт" + +#: sphinx/domains/cpp.py:4422 msgid "enum" -msgstr "" +msgstr "перечисляемый тип" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" -msgstr "" +msgstr "перечислитель" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (встроенная функция)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (метод %s)" @@ -248,7 +255,7 @@ msgstr "%s() (класс)" msgid "%s (global variable or constant)" msgstr "%s (глобальная переменная или константа)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (атрибут %s)" @@ -257,116 +264,116 @@ msgstr "%s (атрибут %s)" msgid "Arguments" msgstr "Аргументы" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "данные" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "атрибут" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Переменные" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Исключение" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (в модуле %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (встроенная переменная)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (в модуле %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (встроенный класс)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (класс в %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (метод %s.%s)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (статический метод %s.%s)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (статический метод %s)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (метод класса %s.%s)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (метод класса %s)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (атрибут %s.%s)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (модуль)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Содержание модулей Python" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "модули" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Не рекомендуется" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "исключение" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "метод" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "метод класса" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "статический метод" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "модуль" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr "(использование не рекомендуется)" @@ -388,188 +395,219 @@ msgstr "директива" msgid "role" msgstr "роль" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "переменная окружения; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "Опция командной строки %s; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "элемент словаря" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "токен грамматики" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "текст ссылки" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "переменная окружения" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "опция программы" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Алфавитный указатель" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Состав модуля" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Поиск" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "см. %s" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "также см. %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Символы" + +#: sphinx/ext/autodoc.py:1297 #, python-format -msgid " Bases: %s" +msgid "Bases: %s" msgstr " Базовые классы: %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "псевдоним класса :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[иллюстрация: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[иллюстрация]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "Ссылка на это уравнение" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(в %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[исходный код]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "повторяющаяся метка уравнения %s, также используется в %s" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "План" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<исходная запись>>" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(<<Исходный элемент>> находится в %s, в строке %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(<<Исходная запись>> находится в %s, строка %d.)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "исходный элемент" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[документация]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Код модуля" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Исходный код %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Обзор: исходный код модуля" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Все модули, в которых есть код</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "Именованные аргументы" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Внимание" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Осторожно" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Опасно" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Ошибка" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Подсказка" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Важно" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Примечание" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "См.также" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Совет" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Предупреждение" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Добавлено в версии %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Изменено в версии %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Не рекомендуется, начиная с версии %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "ключевое слово" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "оператор" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "объект" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "команда" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "базовая функция" @@ -578,7 +616,7 @@ msgstr "базовая функция" msgid "Table Of Contents" msgstr "Оглавление" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -588,11 +626,7 @@ msgstr "Поиск" msgid "Go" msgstr "Искать" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Введите слова для поиска или имя модуля, класса или функции." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Исходный текст" @@ -640,15 +674,15 @@ msgstr "сводный список всех модулей" msgid "all functions, classes, terms" msgstr "все функции, классы, переменные и константы" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Алфавитный указатель – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Полный алфавитный указатель на одной странице" @@ -664,35 +698,35 @@ msgstr "может быть очень большим" msgid "Navigation" msgstr "Навигация" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Поиск в документе «%(docstitle)s»" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Об этих документах" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Авторские права" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Авторские права</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Обновлено: %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -741,13 +775,13 @@ msgstr "искать" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Результаты поиска" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -764,13 +798,13 @@ msgstr "Эта страница" #: 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 "Изменения в версии %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "Изменения в версии %(version)s — %(docstitle)s" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "%(filename)s — %(docstitle)s" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -789,33 +823,34 @@ msgstr "Изменения в API C" msgid "Other changes" msgstr "Другие изменения" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Ссылка на этот заголовок" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Ссылка на это определение" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Снять выделение" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "Идёт поиск" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "Подготовка поиска…" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Поиск завершён, найдено %s страниц, удовлетворяющих запросу." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr ", в" @@ -832,44 +867,53 @@ msgstr "Свернуть боковую панель" msgid "Contents" msgstr "Содержание" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" -msgstr "" +msgstr "Постоянная ссылка на код" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" -msgstr "" +msgstr "Постоянная ссылка на рисунок" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" -msgstr "" +msgstr "Постоянная ссылка на оглавление" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" -msgstr "" +msgstr "Постоянная ссылка на таблицу" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Выпуск" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "страница" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "Неизвестный ключ конфигурации: latex_elements[%r] игнорируется." + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Сноски" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "продолжение с предыдущей страницы" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Продолжается на следующей странице" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[рисунок: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[рисунок]" diff --git a/sphinx/locale/si/LC_MESSAGES/sphinx.js b/sphinx/locale/si/LC_MESSAGES/sphinx.js index 71c4d098d36..c754a1180dd 100644 --- a/sphinx/locale/si/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/si/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "si", "plural_expr": "(n != 1)", "messages": {"Next topic": "\u0d8a\u0dc5\u0d9f \u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0", "Index": "", "%(filename)s — %(docstitle)s": "", "Welcome! This is": "", "Copyright": "", "C API changes": "C API \u0dc0\u0dd9\u0db1\u0dc3\u0dca\u0d9a\u0db8\u0dca", "quick access to all modules": "", "© Copyright %(copyright)s.": "", "Global Module Index": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "", "General Index": "", "next chapter": "\u0d8a\u0dc5\u0d9f \u0db4\u0dbb\u0dd2\u0da0\u0dca\u0da1\u0dda\u0daf\u0dba", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "\u0db4\u0dd9\u0dbb \u0db4\u0dbb\u0dd2\u0da0\u0dca\u0da1\u0dda\u0daf\u0dba", "Permalink to this headline": "", "About these documents": "\u0db8\u0dd9\u0db8 \u0dbd\u0dda\u0d9b\u0dab \u0d9c\u0dd0\u0db1", "Preparing search...": "\u0dc3\u0dd9\u0dc0\u0dd4\u0db8 \u0dc3\u0dd6\u0daf\u0dcf\u0db1\u0db8\u0dca \u0d9a\u0dbb\u0db8\u0dd2\u0db1\u0dca....", ", in ": "", "Navigation": "\u0d9c\u0db8\u0db1\u0dca \u0d9a\u0dd2\u0dbb\u0dd3\u0db8", "Expand sidebar": "", "the documentation for": "", "Complete Table of Contents": "\u0dc3\u0db8\u0dca\u0db4\u0dd6\u0dbb\u0dca\u0dab \u0db4\u0da7\u0dd4\u0db1", "Contents": "\u0d85\u0db1\u0dca\u0dad\u0dbb\u0dca\u0d9c\u0dad\u0dba", "can be huge": "\u0dc0\u0dd2\u0dc1\u0dcf\u0dbd \u0dc0\u0dd2\u0dba \u0dc4\u0dd0\u0d9a", "Changes in Version %(version)s — %(docstitle)s": "", "Other changes": "\u0dc0\u0dd9\u0db1\u0dad\u0dca \u0dc0\u0dd9\u0db1\u0dc3\u0dca\u0d9a\u0db8\u0dca", "Hide Search Matches": "", "Quick search": "\u0d89\u0d9a\u0dca\u0db8\u0db1\u0dca \u0dc3\u0dd9\u0dc0\u0dd4\u0db8", "Show Source": "\u0db8\u0dd6\u0dbd\u0dba \u0db4\u0dd9\u0db1\u0dca\u0dc0\u0db1\u0dca\u0db1", "Search": "\u0dc3\u0ddc\u0dba\u0db1\u0dca\u0db1", "This Page": "\u0db8\u0dd9\u0db8 \u0db4\u0dd2\u0da7\u0dd4\u0dc0", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "last updated": "\u0d85\u0dc0\u0dc3\u0db1\u0dca\u0dc0\u0dbb\u0da7 \u0dba\u0dcf\u0dc0\u0dad\u0dca\u0d9a\u0dcf\u0dbd \u0d9a\u0dbd", "Collapse sidebar": "", "Go": "\u0dba\u0db1\u0dca\u0db1", "Table Of Contents": "\u0db4\u0da7\u0dd4\u0db1", "Search within %(docstitle)s": "", "all functions, classes, terms": "", "Please activate JavaScript to enable the search\n functionality.": "", "Indices and tables:": "", "lists all sections and subsections": "", "Index pages by letter": "", "search": "\u0dc3\u0ddc\u0dba\u0db1\u0dca\u0db1", "Permalink to this definition": "", "Previous topic": "\u0db4\u0dd9\u0dbb \u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0", "Overview": "", "Last updated on %(last_updated)s.": "", "Searching": "\u0dc3\u0ddc\u0dba\u0db8\u0dd2\u0db1\u0dca...", "search this documentation": "", "Automatically generated list of changes in version %(version)s": "", "Full index on one page": "", "Enter search terms or a module, class or function name.": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "Library changes": "\u0db4\u0dd4\u0dc3\u0dca\u0dad\u0d9a\u0dcf\u0dbd \u0dc0\u0dd9\u0db1\u0dc3\u0dca\u0d9a\u0db8\u0dca", "Search Page": "\u0dc3\u0dd9\u0dc0\u0dd4\u0db8\u0dca \u0db4\u0dd2\u0da7\u0dd4\u0dc0", "Search Results": "\u0dc3\u0dd9\u0dc0\u0dd4\u0db8\u0dca \u0db4\u0dca\u200d\u0dbb\u0dad\u0dd2\u0db5\u0dbd"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "si", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "\u0db8\u0dd9\u0db8 \u0dbd\u0dda\u0d9b\u0dab \u0d9c\u0dd0\u0db1", "Automatically generated list of changes in version %(version)s": "", "C API changes": "C API \u0dc0\u0dd9\u0db1\u0dc3\u0dca\u0d9a\u0db8\u0dca", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "\u0dc3\u0db8\u0dca\u0db4\u0dd6\u0dbb\u0dca\u0dab \u0db4\u0da7\u0dd4\u0db1", "Contents": "\u0d85\u0db1\u0dca\u0dad\u0dbb\u0dca\u0d9c\u0dad\u0dba", "Copyright": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Full index on one page": "", "General Index": "", "Global Module Index": "", "Go": "\u0dba\u0db1\u0dca\u0db1", "Hide Search Matches": "", "Index": "", "Index – %(key)s": "", "Index pages by letter": "", "Indices and tables:": "", "Last updated on %(last_updated)s.": "", "Library changes": "\u0db4\u0dd4\u0dc3\u0dca\u0dad\u0d9a\u0dcf\u0dbd \u0dc0\u0dd9\u0db1\u0dc3\u0dca\u0d9a\u0db8\u0dca", "Navigation": "\u0d9c\u0db8\u0db1\u0dca \u0d9a\u0dd2\u0dbb\u0dd3\u0db8", "Next topic": "\u0d8a\u0dc5\u0d9f \u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0", "Other changes": "\u0dc0\u0dd9\u0db1\u0dad\u0dca \u0dc0\u0dd9\u0db1\u0dc3\u0dca\u0d9a\u0db8\u0dca", "Overview": "", "Permalink to this definition": "", "Permalink to this headline": "", "Please activate JavaScript to enable the search\n functionality.": "", "Preparing search...": "\u0dc3\u0dd9\u0dc0\u0dd4\u0db8 \u0dc3\u0dd6\u0daf\u0dcf\u0db1\u0db8\u0dca \u0d9a\u0dbb\u0db8\u0dd2\u0db1\u0dca....", "Previous topic": "\u0db4\u0dd9\u0dbb \u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0", "Quick search": "\u0d89\u0d9a\u0dca\u0db8\u0db1\u0dca \u0dc3\u0dd9\u0dc0\u0dd4\u0db8", "Search": "\u0dc3\u0ddc\u0dba\u0db1\u0dca\u0db1", "Search Page": "\u0dc3\u0dd9\u0dc0\u0dd4\u0db8\u0dca \u0db4\u0dd2\u0da7\u0dd4\u0dc0", "Search Results": "\u0dc3\u0dd9\u0dc0\u0dd4\u0db8\u0dca \u0db4\u0dca\u200d\u0dbb\u0dad\u0dd2\u0db5\u0dbd", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "", "Searching": "\u0dc3\u0ddc\u0dba\u0db8\u0dd2\u0db1\u0dca...", "Show Source": "\u0db8\u0dd6\u0dbd\u0dba \u0db4\u0dd9\u0db1\u0dca\u0dc0\u0db1\u0dca\u0db1", "Table Of Contents": "\u0db4\u0da7\u0dd4\u0db1", "This Page": "\u0db8\u0dd9\u0db8 \u0db4\u0dd2\u0da7\u0dd4\u0dc0", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "", "can be huge": "\u0dc0\u0dd2\u0dc1\u0dcf\u0dbd \u0dc0\u0dd2\u0dba \u0dc4\u0dd0\u0d9a", "last updated": "\u0d85\u0dc0\u0dc3\u0db1\u0dca\u0dc0\u0dbb\u0da7 \u0dba\u0dcf\u0dc0\u0dad\u0dca\u0d9a\u0dcf\u0dbd \u0d9a\u0dbd", "lists all sections and subsections": "", "next chapter": "\u0d8a\u0dc5\u0d9f \u0db4\u0dbb\u0dd2\u0da0\u0dca\u0da1\u0dda\u0daf\u0dba", "previous chapter": "\u0db4\u0dd9\u0dbb \u0db4\u0dbb\u0dd2\u0da0\u0dca\u0da1\u0dda\u0daf\u0dba", "quick access to all modules": "", "search": "\u0dc3\u0ddc\u0dba\u0db1\u0dca\u0db1", "search this documentation": "", "the documentation for": ""}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/si/LC_MESSAGES/sphinx.mo b/sphinx/locale/si/LC_MESSAGES/sphinx.mo index d96a3c43cd3..04e88115628 100644 Binary files a/sphinx/locale/si/LC_MESSAGES/sphinx.mo and b/sphinx/locale/si/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/si/LC_MESSAGES/sphinx.po b/sphinx/locale/si/LC_MESSAGES/sphinx.po index 4bf1c35873f..e68069e08c9 100644 --- a/sphinx/locale/si/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/si/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -8,62 +8,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Sinhala (http://www.transifex.com/projects/p/sphinx-1/language/si/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Sinhala (http://www.transifex.com/sphinx-doc/sphinx-1/language/si/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: si\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s ලේඛණය" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "%s බලන්න" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "%s ද බලන්න" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "සංකේත" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%B %d, %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "" @@ -72,64 +52,76 @@ msgstr "" msgid "Module level" msgstr "" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%b %d, %Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "ඊළඟ" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "පෙර" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s ලේඛණය" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr "" -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "" -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "කේත ලේඛක:" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "ලේඛක:" -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "පරාමිතීන්" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "" @@ -158,12 +150,12 @@ msgstr "" msgid "%s (C variable)" msgstr "" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "ක්‍රියාව" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "සාමාජික" @@ -171,7 +163,7 @@ msgstr "සාමාජික" msgid "macro" msgstr "මැක්‍රෝ" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "වර්ගය" @@ -179,59 +171,72 @@ msgstr "වර්ගය" msgid "variable" msgstr "විචල්‍යය" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "" @@ -246,7 +251,7 @@ msgstr "" msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "" @@ -255,116 +260,116 @@ msgstr "" msgid "Arguments" msgstr "" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "දත්ත" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "විචල්‍ය" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr "" @@ -386,188 +391,219 @@ msgstr "" msgid "role" msgstr "" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "සෙවුම් පිටුව" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "%s බලන්න" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "%s ද බලන්න" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "සංකේත" + +#: sphinx/ext/autodoc.py:1297 #, python-format -msgid " Bases: %s" +msgid "Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[graph: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[graph]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(%s හි%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[source]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "කිරීමට තිබෙන" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[docs]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "දෝෂය" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "හැඟවීම" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "සටහන" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "මෙයද බලන්න" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "අනතුරු ඇඟවීම" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "%s වෙළුමේ අලුත්" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "%s වෙළුමේ වෙනස් කල" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "වස්තුව" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "" @@ -576,7 +612,7 @@ msgstr "" msgid "Table Of Contents" msgstr "පටුන" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -586,11 +622,7 @@ msgstr "සොයන්න" msgid "Go" msgstr "යන්න" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "" - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "මූලය පෙන්වන්න" @@ -638,15 +670,15 @@ msgstr "" msgid "all functions, classes, terms" msgstr "" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "" @@ -662,35 +694,35 @@ msgstr "විශාල විය හැක" msgid "Navigation" msgstr "ගමන් කිරීම" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "මෙම ලේඛණ ගැන" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "" -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -739,13 +771,13 @@ msgstr "සොයන්න" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "සෙවුම් ප්‍රතිඵල" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -762,12 +794,12 @@ msgstr "මෙම පිටුව" #: sphinx/themes/basic/changes/frameset.html:5 #: sphinx/themes/basic/changes/versionchanges.html:12 #, python-format -msgid "Changes in Version %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 @@ -787,33 +819,34 @@ msgstr "C API වෙනස්කම්" msgid "Other changes" msgstr "වෙනත් වෙනස්කම්" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "සොයමින්..." -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "සෙවුම සූදානම් කරමින්...." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -830,44 +863,53 @@ msgstr "" msgid "Contents" msgstr "අන්තර්ගතය" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "නිකුත් කිරීම" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[image: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[image]" diff --git a/sphinx/locale/sk/LC_MESSAGES/sphinx.js b/sphinx/locale/sk/LC_MESSAGES/sphinx.js index b85b55b67c5..0ca4ad44cf1 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==1) ? 0 : (n>=2 && n<=4) ? 1 : 2", "messages": {"Next topic": "\u010eal\u0161ia t\u00e9ma", "Index": "Index", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "Vitajte! Toto je", "Copyright": "Autorsk\u00e9 pr\u00e1vo", "C API changes": "Zmeny API C", "quick access to all modules": "r\u00fdchly pr\u00edstup ku v\u0161etk\u00fdm modulom", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "Celkov\u00fd index modulov", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "V\u00e1\u0161mu h\u013eadaniu nezodpoved\u00e1 \u017eiadny dokument. Pros\u00edm, skontrolujte, \u017ee v\u0161etky zadan\u00e9 slov\u00e1 s\u00fa spr\u00e1vne nap\u00edsan\u00e9 a \u017ee ste zvolili vhodn\u00e9 kateg\u00f3rie.", "Index – %(key)s": "Index – %(key)s", "General Index": "V\u0161eobecn\u00fd index", "next chapter": "\u010fal\u0161ia kapitola", "Search finished, found %s page(s) matching the search query.": "H\u013eadanie dokon\u010den\u00e9, n\u00e1jden\u00e9 %s strana(y), ktor\u00e9 vyhovuj\u00fa h\u013eadan\u00e9mu v\u00fdrazu.", "previous chapter": "predo\u0161l\u00e1 kapitola", "Permalink to this headline": "Trval\u00fd odkaz na tento nadpis", "About these documents": "O t\u00fdchto dokumentoch", "Preparing search...": "Pr\u00edprava h\u013eadania...", ", in ": ", v ", "Navigation": "Navig\u00e1cia", "Expand sidebar": "Rozbali\u0165 bo\u010dn\u00fd panel", "the documentation for": "dokument\u00e1cia", "Complete Table of Contents": "Celkov\u00fd obsah", "Contents": "Obsah", "can be huge": "m\u00f4\u017ee by\u0165 rozsiahle", "Changes in Version %(version)s — %(docstitle)s": "Zmeny vo verzii %(version)s — %(docstitle)s", "Other changes": "Ostatn\u00e9 zmeny", "Hide Search Matches": "Skry\u0165 v\u00fdsledky h\u013eadania", "Quick search": "R\u00fdchle h\u013eadanie", "Show Source": "Zobrazi\u0165 zdroj", "Search": "H\u013eada\u0165", "This Page": "T\u00e1to str\u00e1nka", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Tu m\u00f4\u017eete h\u013eada\u0165 v tejto dokument\u00e1cii. Zadajte h\u013eadan\u00e9 slov\u00e1\ndo pol\u00ed\u010dka ni\u017e\u0161ie a kliknite na \"h\u013eada\u0165\". Pam\u00e4tajte, \u017ee funkcia\nh\u013eadania bude automaticky h\u013eada\u0165 v\u0161etky slov\u00e1. Strany, ktor\u00e9\nobsahuj\u00fa len niektor\u00e9 zo slov, nebud\u00fa v zozname v\u00fdsledkov.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Vytvoren\u00e9 pomocou <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "posledn\u00e1 aktualiz\u00e1cia", "Collapse sidebar": "Zbali\u0165 bo\u010dn\u00fd panel", "Go": "OK", "Table Of Contents": "Obsah", "Search within %(docstitle)s": "H\u013eada\u0165 v %(docstitle)s", "all functions, classes, terms": "v\u0161etky funkcie, triedy, term\u00edny", "Please activate JavaScript to enable the search\n functionality.": "Pros\u00edm, na zapnutie funkcie h\u013eadania,aktivujte\nJavaScript .", "Indices and tables:": "Indexy a tabu\u013eky", "lists all sections and subsections": "zoznam sekci\u00ed a podsekci\u00ed", "Index pages by letter": "Indexov\u00e9 str\u00e1nky po p\u00edsmen\u00e1ch", "search": "h\u013eada\u0165", "Permalink to this definition": "Trval\u00fd odkaz na t\u00fato defin\u00edciu", "Previous topic": "Predo\u0161l\u00e1 t\u00e9ma", "Overview": "Preh\u013ead", "Last updated on %(last_updated)s.": "Naposledy aktualizovan\u00e9 %(last_updated)s.", "Searching": "H\u013eadanie", "search this documentation": "h\u013eada\u0165 v tejto dokument\u00e1cii", "Automatically generated list of changes in version %(version)s": "Automaticky generovan\u00fd zoznam zmien vo verzii %(version)s", "Full index on one page": "Cel\u00fd index na jednej strane", "Enter search terms or a module, class or function name.": "Zadajte h\u013eadan\u00e9 v\u00fdrazy alebo modul, triedu, \u010di meno funkcie.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "Zmeny kni\u017enice", "Search Page": "Str\u00e1nka h\u013eadania", "Search Results": "V\u00fdsledky h\u013eadania"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "sk", "messages": {"%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", ", in ": ", v ", "About these documents": "O dokument\u00e1cii", "Automatically generated list of changes in version %(version)s": "Automaticky generovan\u00fd zoznam zmien vo verzii %(version)s", "C API changes": "Zmeny API C", "Changes in Version %(version)s — %(docstitle)s": "Zmeny vo verzii %(version)s — %(docstitle)s", "Collapse sidebar": "Zbali\u0165 bo\u010dn\u00fd panel", "Complete Table of Contents": "Celkov\u00fd obsah", "Contents": "Obsah", "Copyright": "Autorsk\u00e9 pr\u00e1vo", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Vytvoren\u00e9 pomocou <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "Rozbali\u0165 bo\u010dn\u00fd panel", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Tu m\u00f4\u017eete h\u013eada\u0165 v tejto dokument\u00e1cii. Zadajte h\u013eadan\u00e9 slov\u00e1\ndo pol\u00ed\u010dka ni\u017e\u0161ie a kliknite na \"h\u013eada\u0165\". Pam\u00e4tajte, \u017ee funkcia\nh\u013eadania bude automaticky h\u013eada\u0165 v\u0161etky slov\u00e1. Strany, ktor\u00e9\nobsahuj\u00fa len niektor\u00e9 zo slov, nebud\u00fa v zozname v\u00fdsledkov.", "Full index on one page": "Cel\u00fd index na jednej strane", "General Index": "V\u0161eobecn\u00fd index", "Global Module Index": "Celkov\u00fd index modulov", "Go": "OK", "Hide Search Matches": "Skry\u0165 v\u00fdsledky h\u013eadania", "Index": "Index", "Index – %(key)s": "Index – %(key)s", "Index pages by letter": "Indexov\u00e9 str\u00e1nky po p\u00edsmen\u00e1ch", "Indices and tables:": "Indexy a tabu\u013eky", "Last updated on %(last_updated)s.": "Naposledy aktualizovan\u00e9 %(last_updated)s.", "Library changes": "Zmeny kni\u017enice", "Navigation": "Navig\u00e1cia", "Next topic": "\u010eal\u0161ia t\u00e9ma", "Other changes": "Ostatn\u00e9 zmeny", "Overview": "Preh\u013ead", "Permalink to this definition": "Trval\u00fd odkaz na t\u00fato defin\u00edciu", "Permalink to this headline": "Trval\u00fd odkaz na tento nadpis", "Please activate JavaScript to enable the search\n functionality.": "Pros\u00edm, na zapnutie funkcie h\u013eadania,aktivujte\nJavaScript .", "Preparing search...": "Pr\u00edprava h\u013eadania...", "Previous topic": "Predo\u0161l\u00e1 t\u00e9ma", "Quick search": "R\u00fdchle h\u013eadanie", "Search": "H\u013eada\u0165", "Search Page": "Str\u00e1nka h\u013eadania", "Search Results": "V\u00fdsledky h\u013eadania", "Search finished, found %s page(s) matching the search query.": "H\u013eadanie dokon\u010den\u00e9, n\u00e1jden\u00e9 %s strana(y), ktor\u00e9 vyhovuj\u00fa h\u013eadan\u00e9mu v\u00fdrazu.", "Search within %(docstitle)s": "H\u013eada\u0165 v %(docstitle)s", "Searching": "H\u013eadanie", "Show Source": "Zobrazi\u0165 zdroj", "Table Of Contents": "Obsah", "This Page": "T\u00e1to str\u00e1nka", "Welcome! This is": "Vitajte! Toto je", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "V\u00e1\u0161mu h\u013eadaniu nezodpoved\u00e1 \u017eiadny dokument. Pros\u00edm, skontrolujte, \u017ee v\u0161etky zadan\u00e9 slov\u00e1 s\u00fa spr\u00e1vne nap\u00edsan\u00e9 a \u017ee ste zvolili vhodn\u00e9 kateg\u00f3rie.", "all functions, classes, terms": "v\u0161etky funkcie, triedy, term\u00edny", "can be huge": "m\u00f4\u017ee by\u0165 rozsiahle", "last updated": "posledn\u00e1 aktualiz\u00e1cia", "lists all sections and subsections": "zoznam v\u0161etk\u00fdch sekci\u00ed a podsekci\u00ed", "next chapter": "\u010fal\u0161ia kapitola", "previous chapter": "predo\u0161l\u00e1 kapitola", "quick access to all modules": "r\u00fdchly pr\u00edstup ku v\u0161etk\u00fdm modulom", "search": "h\u013eada\u0165", "search this documentation": "h\u013eada\u0165 v tejto dokument\u00e1cii", "the documentation for": "dokument\u00e1cia"}, "plural_expr": "(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2"}); \ 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 f4c9835cbae..fb04101f335 100644 Binary files a/sphinx/locale/sk/LC_MESSAGES/sphinx.mo and b/sphinx/locale/sk/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/sk/LC_MESSAGES/sphinx.po b/sphinx/locale/sk/LC_MESSAGES/sphinx.po index bdbf8af30c0..9b30874390a 100644 --- a/sphinx/locale/sk/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/sk/LC_MESSAGES/sphinx.po @@ -1,70 +1,51 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: # FIRST AUTHOR <EMAIL@ADDRESS>, 2008 -# Slavko <linux@slavino.sk>, 2013-2015 +# Slavko <linux@slavino.sk>, 2013-2016 +# Takeshi KOMIYA <i.tkomiya@gmail.com>, 2016 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Slovak (http://www.transifex.com/projects/p/sphinx-1/language/sk/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 15:22+0000\n" +"Last-Translator: Slavko <linux@slavino.sk>\n" +"Language-Team: Slovak (http://www.transifex.com/sphinx-doc/sphinx-1/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: sk\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "Sekcia %s" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "Obr. %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "Tabuľka %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "Výpis %s" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s dokumentácia" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "viď %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "viď aj %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Symboly" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d. %B %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Zabudované funkcie" @@ -73,64 +54,76 @@ msgstr "Zabudované funkcie" msgid "Module level" msgstr "Úroveň modulu" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d. %b %Y" +msgstr "%d. %b %Y" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Všeobecný index" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "index" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "ďalší" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "predošlý" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "Dokumentácia %s %s" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr "(v" -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "Neplatný popis: %s" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Autor sekcie:" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Autor modulu:" -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Autor kódu:" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Autor:" -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parametre" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Vracia" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Návratový typ" @@ -159,12 +152,12 @@ msgstr "%s (typ C)" msgid "%s (C variable)" msgstr "%s (premenná C)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "funkcia" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "člen" @@ -172,7 +165,7 @@ msgstr "člen" msgid "macro" msgstr "makro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "typ" @@ -180,59 +173,72 @@ msgstr "typ" msgid "variable" msgstr "premenná" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "Parametre šablóny" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Vyvoláva" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (typ C++)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "%s (koncept C++)" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (člen C++)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (funkcia C++)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (trieda C++)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "%s (enum C++)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "%s (enumerátor C++)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "trieda" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "koncept" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "enum" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "enumerátor" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (zabudovaná funkcia)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (metóda %s)" @@ -247,7 +253,7 @@ msgstr "%s() (trieda)" msgid "%s (global variable or constant)" msgstr "%s (globálna premenná alebo konštanta)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (atribút %s)" @@ -256,116 +262,116 @@ msgstr "%s (atribút %s)" msgid "Arguments" msgstr "Argumenty" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "dáta" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "atribút" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Premenné" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Vyzdvihuje" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (v module %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (zabudovaná premenná)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (v module %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (zabudovaná trieda)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (trieda v %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (metóda %s.%s)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (statická metóda %s.%s)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (statická metóda %s)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (metóda triedy %s.%s)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (metóda triedy %s)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (atribút %s.%s)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (modul)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Index modulov Python" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "moduly" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Zastarané" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "výnimka" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "metóda" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "metóda triedy" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "statická metóda" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "modul" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (zastarané)" @@ -387,188 +393,219 @@ msgstr "direktíva" msgid "role" msgstr "rola" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "premenná prostredia; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%s voľba príkazového riadka; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "termín glosára" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "jazykový token" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "menovka odkazu" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "premenná prostredia" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "voľba programu" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Index" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Index modulov" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Stránka hľadania" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "viď %s" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "viď aj %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Symboly" + +#: sphinx/ext/autodoc.py:1297 #, python-format -msgid " Bases: %s" -msgstr "Základné: %s" +msgid "Bases: %s" +msgstr "Základ: %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "alias pre :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[graf: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[graf]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "Trvalý odkaz na tento vzorec" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(v %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[zdroj]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "duplicitná menovka vzorca %s, ďalší výskyt v %s" + +#: sphinx/ext/todo.py:56 msgid "Todo" -msgstr "Todo" +msgstr "ToDo" + +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<pôvodná položka>>" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(<<pôvodná položka>> je umiestnená v %s, riadok %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(<<original entry>> je umiestnená v %s, riadok %d.)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "pôvodná položka" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[dokumenty]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Kód modulu" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Zdrojový kód %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Prehľad: kód modulu" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Všetky moduly, pre ktoré je dostupný kód</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "Argumenty kľúčových slov" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Výstraha" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Upozornenie" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Nebezpečné" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Chyba" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Rada" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Dôležité" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Poznámka" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Viď aj" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Tip" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Varovanie" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Nové vo verzii %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Zmenené vo verzii %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Zastarané od verzie %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "kľúč. slovo" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operátor" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "príkaz" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "zabudovaná funkcia" @@ -577,7 +614,7 @@ msgstr "zabudovaná funkcia" msgid "Table Of Contents" msgstr "Obsah" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -587,11 +624,7 @@ msgstr "Hľadať" msgid "Go" msgstr "OK" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Zadajte hľadané výrazy alebo modul, triedu, či meno funkcie." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Zobraziť zdroj" @@ -621,7 +654,7 @@ msgstr "Celkový obsah" #: sphinx/themes/basic/defindex.html:24 msgid "lists all sections and subsections" -msgstr "zoznam sekcií a podsekcií" +msgstr "zoznam všetkých sekcií a podsekcií" #: sphinx/themes/basic/defindex.html:26 msgid "search this documentation" @@ -639,15 +672,15 @@ msgstr "rýchly prístup ku všetkým modulom" msgid "all functions, classes, terms" msgstr "všetky funkcie, triedy, termíny" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Index – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Celý index na jednej strane" @@ -663,35 +696,35 @@ msgstr "môže byť rozsiahle" msgid "Navigation" msgstr "Navigácia" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Hľadať v %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" -msgstr "O týchto dokumentoch" +msgstr "O dokumentácii" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Autorské právo" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Naposledy aktualizované %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -740,13 +773,13 @@ msgstr "hľadať" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Výsledky hľadania" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -763,13 +796,13 @@ msgstr "Táto stránka" #: 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 "Zmeny vo verzii %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "Zmeny vo verzii %(version)s — %(docstitle)s" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "%(filename)s — %(docstitle)s" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -788,33 +821,34 @@ msgstr "Zmeny API C" msgid "Other changes" msgstr "Ostatné zmeny" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Trvalý odkaz na tento nadpis" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Trvalý odkaz na túto definíciu" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Skryť výsledky hľadania" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "Hľadanie" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "Príprava hľadania..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Hľadanie dokončené, nájdené %s strana(y), ktoré vyhovujú hľadanému výrazu." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr ", v " @@ -831,44 +865,53 @@ msgstr "Zbaliť bočný panel" msgid "Contents" msgstr "Obsah" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "Trvalý odkaz na tento kód" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "Trvalý odkaz na tento obrázok" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" -msgstr "" +msgstr "Trvalý odkaz na tento obsah" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "Trvalý odkaz na túto tabuľku" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Vydanie" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "strana" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "Neznámy konfiguračný kľúč: latex_elements[%r] je ignorovaný." + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Poznámky pod čiarou" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "pokračovanie z predošlej strany" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Pokračovanie na ďalšej strane" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[obrázok: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[obrázok]" diff --git a/sphinx/locale/sl/LC_MESSAGES/sphinx.js b/sphinx/locale/sl/LC_MESSAGES/sphinx.js index 3ec35d54a7e..38f89c3323e 100644 --- a/sphinx/locale/sl/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/sl/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "sl", "plural_expr": "(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)", "messages": {"Next topic": "Naslednja tema", "Index": "Abecedni seznam", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "", "Copyright": "Vse pravice pridr\u017eane", "C API changes": "C API spremembe", "quick access to all modules": "hiter dostop do vseh modulov", "© Copyright %(copyright)s.": "© Vse pravice pridr\u017eane %(copyright)s.", "Global Module Index": "Splo\u0161en seznam modulov", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "Seznam – %(key)s", "General Index": "Splo\u0161ni abecedni seznam", "next chapter": "naslednje poglavje", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "prej\u0161nje poglavje", "Permalink to this headline": "Povezava na naslov", "About these documents": "O dokumentih", "Preparing search...": "", ", in ": "", "Navigation": "Navigacija", "Expand sidebar": "", "the documentation for": "", "Complete Table of Contents": "Popoln Seznam Vsebine", "Contents": "", "can be huge": "lahko je veliko", "Changes in Version %(version)s — %(docstitle)s": "Spremembe v Verziji %(version)s — %(docstitle)s", "Other changes": "Ostale spremembe", "Hide Search Matches": "Skrij resultate iskanja", "Quick search": "Hitro iskanje", "Show Source": "Prika\u017ei izvorno kodo", "Search": "I\u0161\u010di", "This Page": "Trenutna stran", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Tukaj lahko i\u0161\u010dete dokumente. Vnesite iskalni\n niz v polje spodaj in pritisnite \"i\u0161\u010di\". Spro\u017eeno iskanje\n bo iskalo po vseh besedah v iskalnem nizu. Strani, ki ne\n vsebujejo vseh besed ne bodo prikazane na seznamu rezultatov.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Narejeno s <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "", "Collapse sidebar": "", "Go": "Potrdi", "Table Of Contents": "Seznam Vsebine", "Search within %(docstitle)s": "I\u0161\u010di med %(docstitle)s", "all functions, classes, terms": "vse funkcije, razredi, izrazi", "Please activate JavaScript to enable the search\n functionality.": "Za pravilno delovanje Iskanja morete vklopiti\n JavaScript.", "Indices and tables:": "Kazalo in seznami:", "lists all sections and subsections": "prikazi vse sekcije in podsekcije", "Index pages by letter": "Indeksiraj strani po \u010drki", "search": "i\u0161\u010di", "Permalink to this definition": "Povezava na to definicijo", "Previous topic": "Prej\u0161nja tema", "Overview": "Pregled", "Last updated on %(last_updated)s.": "Zadnji\u010d posodobljeno %(last_updated)s.", "Searching": "", "search this documentation": "i\u0161\u010di po dokumentaciji", "Automatically generated list of changes in version %(version)s": "Avtomatsko generiran seznam sprememb v verziji %(version)s", "Full index on one page": "Poln indeks na eni strani", "Enter search terms or a module, class or function name.": "Vnesi ime modula, razreda ali funkcije.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Vse pravice pridr\u017eane</a> %(copyright)s.", "Library changes": "Spremembe knji\u017enice", "Search Page": "Iskalnik", "Search Results": "Rezultati Iskanja"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "sl", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "O dokumentih", "Automatically generated list of changes in version %(version)s": "Avtomatsko generiran seznam sprememb v verziji %(version)s", "C API changes": "C API spremembe", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "Popoln Seznam Vsebine", "Contents": "", "Copyright": "Vse pravice pridr\u017eane", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Narejeno s <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Tukaj lahko i\u0161\u010dete dokumente. Vnesite iskalni\n niz v polje spodaj in pritisnite \"i\u0161\u010di\". Spro\u017eeno iskanje\n bo iskalo po vseh besedah v iskalnem nizu. Strani, ki ne\n vsebujejo vseh besed ne bodo prikazane na seznamu rezultatov.", "Full index on one page": "Poln indeks na eni strani", "General Index": "Splo\u0161ni abecedni seznam", "Global Module Index": "Splo\u0161en seznam modulov", "Go": "Potrdi", "Hide Search Matches": "Skrij resultate iskanja", "Index": "Abecedni seznam", "Index – %(key)s": "Seznam – %(key)s", "Index pages by letter": "Indeksiraj strani po \u010drki", "Indices and tables:": "Kazalo in seznami:", "Last updated on %(last_updated)s.": "Zadnji\u010d posodobljeno %(last_updated)s.", "Library changes": "Spremembe knji\u017enice", "Navigation": "Navigacija", "Next topic": "Naslednja tema", "Other changes": "Ostale spremembe", "Overview": "Pregled", "Permalink to this definition": "Povezava na to definicijo", "Permalink to this headline": "Povezava na naslov", "Please activate JavaScript to enable the search\n functionality.": "Za pravilno delovanje Iskanja morete vklopiti\n JavaScript.", "Preparing search...": "", "Previous topic": "Prej\u0161nja tema", "Quick search": "Hitro iskanje", "Search": "I\u0161\u010di", "Search Page": "Iskalnik", "Search Results": "Rezultati Iskanja", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "I\u0161\u010di med %(docstitle)s", "Searching": "", "Show Source": "Prika\u017ei izvorno kodo", "Table Of Contents": "Seznam Vsebine", "This Page": "Trenutna stran", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "vse funkcije, razredi, izrazi", "can be huge": "lahko je veliko", "last updated": "", "lists all sections and subsections": "prikazi vse sekcije in podsekcije", "next chapter": "naslednje poglavje", "previous chapter": "prej\u0161nje poglavje", "quick access to all modules": "hiter dostop do vseh modulov", "search": "i\u0161\u010di", "search this documentation": "i\u0161\u010di po dokumentaciji", "the documentation for": ""}, "plural_expr": "(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)"}); \ No newline at end of file diff --git a/sphinx/locale/sl/LC_MESSAGES/sphinx.mo b/sphinx/locale/sl/LC_MESSAGES/sphinx.mo index ccbf2ebf6de..601a2b3e964 100644 Binary files a/sphinx/locale/sl/LC_MESSAGES/sphinx.mo and b/sphinx/locale/sl/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/sl/LC_MESSAGES/sphinx.po b/sphinx/locale/sl/LC_MESSAGES/sphinx.po index 5a177936604..e1cee602e02 100644 --- a/sphinx/locale/sl/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/sl/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -7,62 +7,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Slovenian (http://www.transifex.com/projects/p/sphinx-1/language/sl/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Slovenian (http://www.transifex.com/sphinx-doc/sphinx-1/language/sl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: sl\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 #, python-format -msgid "Fig. %s" -msgstr "" - -#: sphinx/config.py:81 -#, python-format -msgid "Table %s" -msgstr "" - -#: sphinx/config.py:82 -#, python-format -msgid "Listing %s" +msgid "Section %s" msgstr "" -#: sphinx/config.py:89 +#: sphinx/config.py:110 #, python-format -msgid "%s %s documentation" +msgid "Fig. %s" msgstr "" -#: sphinx/environment.py:1880 +#: sphinx/config.py:111 #, python-format -msgid "see %s" +msgid "Table %s" msgstr "" -#: sphinx/environment.py:1883 +#: sphinx/config.py:112 #, python-format -msgid "see also %s" -msgstr "" - -#: sphinx/environment.py:1941 -msgid "Symbols" +msgid "Listing %s" msgstr "" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d %B, %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Vgrajeni deli" @@ -71,64 +51,76 @@ msgstr "Vgrajeni deli" msgid "Module level" msgstr "Nivo modula" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d %b, %Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Splošni abecedni seznam" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "abecedni seznam" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "naprej" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "nazaj" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (v " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Avtor sekcije: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Avtor modula: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Avtor: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parametri" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Vrne" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Vrne tip" @@ -157,12 +149,12 @@ msgstr "%s (C tip)" msgid "%s (C variable)" msgstr "%s (C spremenljivka)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "funkcija" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "član" @@ -170,7 +162,7 @@ msgstr "član" msgid "macro" msgstr "" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "tip" @@ -178,59 +170,72 @@ msgstr "tip" msgid "variable" msgstr "" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ tip)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ član)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funkcija)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ razred)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "razred" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (vgrajene funkcije)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metoda)" @@ -245,7 +250,7 @@ msgstr "%s() (razred)" msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atribut)" @@ -254,116 +259,116 @@ msgstr "%s (%s atribut)" msgid "Arguments" msgstr "" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "atribut" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Sproži izjemo" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (v modulu %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (vgrajene spremenljivke)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (v modulu %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (vgrajen razred)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (razred v %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metoda)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statična metoda)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statična metoda)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s atribut)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (modul)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "Moduli" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Zastarelo" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "izjema" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "statična metoda" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "modul" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (zastarelo)" @@ -385,188 +390,219 @@ msgstr "" msgid "role" msgstr "" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "okoljska spremenljivka; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%scommand line parameter; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "okoljska spremenljivka" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Abecedni seznam" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Seznam modulov" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Iskalnik" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 #, python-format -msgid " Bases: %s" -msgstr " Baza: %s" +msgid "Bases: %s" +msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "vzdevek za :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Todo" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Pozor" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Previdno" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Nevarno" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Napaka" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Nasvet" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Pomembno" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Opomba" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Poglej Tudi" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Nasvet" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Opozorilo" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Novo v verziji %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Spremenjeno v verziji %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Zastarelo od verzije %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "ključna beseda" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "izjava" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "vgrajene funkcije" @@ -575,7 +611,7 @@ msgstr "vgrajene funkcije" msgid "Table Of Contents" msgstr "Seznam Vsebine" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -585,11 +621,7 @@ msgstr "Išči" msgid "Go" msgstr "Potrdi" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Vnesi ime modula, razreda ali funkcije." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Prikaži izvorno kodo" @@ -637,15 +669,15 @@ msgstr "hiter dostop do vseh modulov" msgid "all functions, classes, terms" msgstr "vse funkcije, razredi, izrazi" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Seznam – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Poln indeks na eni strani" @@ -661,35 +693,35 @@ msgstr "lahko je veliko" msgid "Navigation" msgstr "Navigacija" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Išči med %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "O dokumentih" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Vse pravice pridržane" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Vse pravice pridržane</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Vse pravice pridržane %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Zadnjič posodobljeno %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -738,13 +770,13 @@ msgstr "išči" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Rezultati Iskanja" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -761,13 +793,13 @@ msgstr "Trenutna stran" #: 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 "Spremembe v Verziji %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -786,33 +818,34 @@ msgstr "C API spremembe" msgid "Other changes" msgstr "Ostale spremembe" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Povezava na naslov" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Povezava na to definicijo" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Skrij resultate iskanja" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -829,44 +862,53 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Izdaja" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Opombe" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "nadaljevanje iz prejšnje strani" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Nadaljevanje na naslednji strani" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[slika]" diff --git a/sphinx/locale/sphinx.pot b/sphinx/locale/sphinx.pot index e8197237257..f63434cc202 100644 --- a/sphinx/locale/sphinx.pot +++ b/sphinx/locale/sphinx.pot @@ -1,67 +1,47 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2015. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2016. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Sphinx 1.3\n" +"Project-Id-Version: Sphinx 1.5b1\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 #, python-format -msgid "Fig. %s" -msgstr "" - -#: sphinx/config.py:81 -#, python-format -msgid "Table %s" +msgid "Section %s" msgstr "" -#: sphinx/config.py:82 +#: sphinx/config.py:110 #, python-format -msgid "Listing %s" -msgstr "" - -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" +msgid "Fig. %s" msgstr "" -#: sphinx/environment.py:1880 +#: sphinx/config.py:111 #, python-format -msgid "see %s" +msgid "Table %s" msgstr "" -#: sphinx/environment.py:1883 +#: sphinx/config.py:112 #, python-format -msgid "see also %s" -msgstr "" - -#: sphinx/environment.py:1941 -msgid "Symbols" +msgid "Listing %s" msgstr "" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "" @@ -70,64 +50,76 @@ msgstr "" msgid "Module level" msgstr "" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr "" -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "" -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "" -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "" @@ -156,12 +148,12 @@ msgstr "" msgid "%s (C variable)" msgstr "" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "" @@ -169,7 +161,7 @@ msgstr "" msgid "macro" msgstr "" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "" @@ -177,59 +169,72 @@ msgstr "" msgid "variable" msgstr "" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "" @@ -244,7 +249,7 @@ msgstr "" msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "" @@ -253,116 +258,116 @@ msgstr "" msgid "Arguments" msgstr "" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr "" @@ -384,188 +389,219 @@ msgstr "" msgid "role" msgstr "" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 #, python-format -msgid " Bases: %s" +msgid "Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "" @@ -574,7 +610,7 @@ msgstr "" msgid "Table Of Contents" msgstr "" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -584,11 +620,7 @@ msgstr "" msgid "Go" msgstr "" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "" - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "" @@ -636,15 +668,15 @@ msgstr "" msgid "all functions, classes, terms" msgstr "" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "" @@ -660,35 +692,35 @@ msgstr "" msgid "Navigation" msgstr "" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "" -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -735,12 +767,12 @@ msgid "search" msgstr "" #: sphinx/themes/basic/search.html:43 sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "" #: sphinx/themes/basic/search.html:45 sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." @@ -757,12 +789,12 @@ msgstr "" #: sphinx/themes/basic/changes/frameset.html:5 #: sphinx/themes/basic/changes/versionchanges.html:12 #, python-format -msgid "Changes in Version %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 @@ -782,33 +814,34 @@ msgstr "" msgid "Other changes" msgstr "" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -825,45 +858,54 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "" diff --git a/sphinx/locale/sv/LC_MESSAGES/sphinx.js b/sphinx/locale/sv/LC_MESSAGES/sphinx.js index 460f08062da..597c6869f71 100644 --- a/sphinx/locale/sv/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/sv/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "sv", "plural_expr": "(n != 1)", "messages": {"Next topic": "N\u00e4sta titel", "Index": "Index", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "", "Copyright": "Copyright", "C API changes": "F\u00f6r\u00e4ndringar i C-API", "quick access to all modules": "genv\u00e4g till alla moduler", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "Global Modulindex", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "Index – %(key)s", "General Index": "Huvudindex", "next chapter": "N\u00e4sta kapitel", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "F\u00f6reg\u00e5ende kapitel", "Permalink to this headline": "Permalink till denna rubrik", "About these documents": "Om dessa dokument", "Preparing search...": "", ", in ": "", "Navigation": "Navigation", "Expand sidebar": "Expandera sidolist", "the documentation for": "", "Complete Table of Contents": "Komplett Inneh\u00e5llsf\u00f6rteckning", "Contents": "Inneh\u00e5ll", "can be huge": "kan bli stort", "Changes in Version %(version)s — %(docstitle)s": "F\u00f6r\u00e4ndringar i Version %(version)s — %(docstitle)s", "Other changes": "\u00d6vriga f\u00f6r\u00e4ndringar", "Hide Search Matches": "D\u00f6lj S\u00f6kresultat", "Quick search": "Snabbs\u00f6k", "Show Source": "Visa k\u00e4llfil", "Search": "S\u00f6k", "This Page": "Denna Sida", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "H\u00e4r kan du s\u00f6ka bland dessa dokument. Ange s\u00f6kord nedan och klicka \"s\u00f6k\".\n S\u00f6kningen m\u00e5ste tr\u00e4ffa p\u00e5 samtliga angivna s\u00f6kord.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Skapad med <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "", "Collapse sidebar": "D\u00f6lj sidolist", "Go": "G\u00e5", "Table Of Contents": "Inneh\u00e5llsf\u00f6rteckning", "Search within %(docstitle)s": "S\u00f6k bland %(docstitle)s", "all functions, classes, terms": "alla funktioner, klasser, villkor", "Please activate JavaScript to enable the search\n functionality.": "Var god aktivera JavaScript f\u00f6r s\u00f6kfunktionalitet.", "Indices and tables:": "Index och tabeller", "lists all sections and subsections": "lista \u00f6ver alla paragrafer och underparagrafer", "Index pages by letter": "Inneh\u00e5llsf\u00f6rteckning per inledande bokstav", "search": "s\u00f6k", "Permalink to this definition": "Permalink till denna definition", "Previous topic": "F\u00f6reg\u00e5ende titel", "Overview": "\u00d6versikt", "Last updated on %(last_updated)s.": "Senast uppdaterad %(last_updated)s.", "Searching": "", "search this documentation": "s\u00f6k i det h\u00e4r dokumentet", "Automatically generated list of changes in version %(version)s": "Automatiskt genererad lista \u00f6ver f\u00f6r\u00e4ndringar i version %(version)s", "Full index on one page": "Hela inneh\u00e5llsf\u00f6rteckningen p\u00e5 en sida", "Enter search terms or a module, class or function name.": "Ange s\u00f6kord eller modul-, klass- eller funktionsnamn.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "F\u00f6r\u00e4ndringar i bibliotek", "Search Page": "S\u00f6ksida", "Search Results": "S\u00f6kresultat"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "sv", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "Om dessa dokument", "Automatically generated list of changes in version %(version)s": "Automatiskt genererad lista \u00f6ver f\u00f6r\u00e4ndringar i version %(version)s", "C API changes": "F\u00f6r\u00e4ndringar i C-API", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "D\u00f6lj sidolist", "Complete Table of Contents": "Komplett Inneh\u00e5llsf\u00f6rteckning", "Contents": "Inneh\u00e5ll", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "Skapad med <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "Expandera sidolist", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "H\u00e4r kan du s\u00f6ka bland dessa dokument. Ange s\u00f6kord nedan och klicka \"s\u00f6k\".\n S\u00f6kningen m\u00e5ste tr\u00e4ffa p\u00e5 samtliga angivna s\u00f6kord.", "Full index on one page": "Hela inneh\u00e5llsf\u00f6rteckningen p\u00e5 en sida", "General Index": "Huvudindex", "Global Module Index": "Global Modulindex", "Go": "G\u00e5", "Hide Search Matches": "D\u00f6lj S\u00f6kresultat", "Index": "Index", "Index – %(key)s": "Index – %(key)s", "Index pages by letter": "Inneh\u00e5llsf\u00f6rteckning per inledande bokstav", "Indices and tables:": "Index och tabeller", "Last updated on %(last_updated)s.": "Senast uppdaterad %(last_updated)s.", "Library changes": "F\u00f6r\u00e4ndringar i bibliotek", "Navigation": "Navigation", "Next topic": "N\u00e4sta titel", "Other changes": "\u00d6vriga f\u00f6r\u00e4ndringar", "Overview": "\u00d6versikt", "Permalink to this definition": "Permalink till denna definition", "Permalink to this headline": "Permalink till denna rubrik", "Please activate JavaScript to enable the search\n functionality.": "Var god aktivera JavaScript f\u00f6r s\u00f6kfunktionalitet.", "Preparing search...": "", "Previous topic": "F\u00f6reg\u00e5ende titel", "Quick search": "Snabbs\u00f6k", "Search": "S\u00f6k", "Search Page": "S\u00f6ksida", "Search Results": "S\u00f6kresultat", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "S\u00f6k bland %(docstitle)s", "Searching": "", "Show Source": "Visa k\u00e4llfil", "Table Of Contents": "Inneh\u00e5llsf\u00f6rteckning", "This Page": "Denna Sida", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "alla funktioner, klasser, villkor", "can be huge": "kan bli stort", "last updated": "", "lists all sections and subsections": "lista \u00f6ver alla paragrafer och underparagrafer", "next chapter": "N\u00e4sta kapitel", "previous chapter": "F\u00f6reg\u00e5ende kapitel", "quick access to all modules": "genv\u00e4g till alla moduler", "search": "s\u00f6k", "search this documentation": "s\u00f6k i det h\u00e4r dokumentet", "the documentation for": ""}, "plural_expr": "(n != 1)"}); \ No newline at end of file diff --git a/sphinx/locale/sv/LC_MESSAGES/sphinx.mo b/sphinx/locale/sv/LC_MESSAGES/sphinx.mo index 0089de08d20..ab02247f7a2 100644 Binary files a/sphinx/locale/sv/LC_MESSAGES/sphinx.mo and b/sphinx/locale/sv/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/sv/LC_MESSAGES/sphinx.po b/sphinx/locale/sv/LC_MESSAGES/sphinx.po index 46ffe51d510..7be638ca4ff 100644 --- a/sphinx/locale/sv/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/sv/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -7,62 +7,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Swedish (http://www.transifex.com/projects/p/sphinx-1/language/sv/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Swedish (http://www.transifex.com/sphinx-doc/sphinx-1/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 #, python-format -msgid "Fig. %s" -msgstr "" - -#: sphinx/config.py:81 -#, python-format -msgid "Table %s" +msgid "Section %s" msgstr "" -#: sphinx/config.py:82 +#: sphinx/config.py:110 #, python-format -msgid "Listing %s" +msgid "Fig. %s" msgstr "" -#: sphinx/config.py:89 +#: sphinx/config.py:111 #, python-format -msgid "%s %s documentation" +msgid "Table %s" msgstr "" -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "se %s" - -#: sphinx/environment.py:1883 +#: sphinx/config.py:112 #, python-format -msgid "see also %s" -msgstr "se även %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" +msgid "Listing %s" msgstr "" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%B %d, %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Inbyggda" @@ -71,64 +51,76 @@ msgstr "Inbyggda" msgid "Module level" msgstr "Modulnivå" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%b %d, %Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Huvudindex" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "index" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "nästa" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "föregående" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr "(i " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Sektionsförfattare" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Modulförfattare" -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Källkodsförfattare" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Upphovsman:" -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parametrar" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Returnerar" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Returtyp" @@ -157,12 +149,12 @@ msgstr "%s (C-typ)" msgid "%s (C variable)" msgstr "%s (C-variabel)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "funktion" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "medlem" @@ -170,7 +162,7 @@ msgstr "medlem" msgid "macro" msgstr "makro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "typ" @@ -178,59 +170,72 @@ msgstr "typ" msgid "variable" msgstr "variabel" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Kastar" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++-typ)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++-medlem)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++-funktion)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++-klass)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "klass" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (inbyggd funktion)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metod)" @@ -245,7 +250,7 @@ msgstr "%s() (klass)" msgid "%s (global variable or constant)" msgstr "%s (global variabel eller konstant)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s attribut)" @@ -254,116 +259,116 @@ msgstr "%s (%s attribut)" msgid "Arguments" msgstr "Argument" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "data" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "attribut" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Variabler" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Väcker" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (i modul %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (inbyggd variabel)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (i modul %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (inbyggd klass)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (klass i %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metod)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statisk metod)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statisk metod)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s klassmetod)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s klassmetod)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s attribut)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (modul)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Python Modulindex" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "moduler" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Ersatt" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "undantag" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "metod" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "klassmetod" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "statisk metod" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "modul" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr "" @@ -385,188 +390,219 @@ msgstr "direktiv" msgid "role" msgstr "roll" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "miljövariabel; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%skommandorad växel; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "ordlista" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "grammatisk token" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "referensetikett" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "miljövariabel" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "programväxel" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Index" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Modulindex" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Söksida" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr " Baserad: %s" +msgid "see %s" +msgstr "se %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "se även %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "alias för :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[source]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Att göra" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(<<Ursprunget>> finns i %s, på rad %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "ursprungsvärde" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[docs]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Modulkällkod" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Källkod för %s</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Översikt: modulkällkod" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Alla moduler där källkod finns</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Uppmärksamma" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Varning" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Risk" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Fel" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Råd" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Viktigt" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Observera" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Se även" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Tips" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Varning" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Nyheter i version %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Förändrat i version %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Ersatt sedan version %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "nyckelord" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "uttryck" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "inbyggda funktioner" @@ -575,7 +611,7 @@ msgstr "inbyggda funktioner" msgid "Table Of Contents" msgstr "Innehållsförteckning" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -585,11 +621,7 @@ msgstr "Sök" msgid "Go" msgstr "Gå" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Ange sökord eller modul-, klass- eller funktionsnamn." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Visa källfil" @@ -637,15 +669,15 @@ msgstr "genväg till alla moduler" msgid "all functions, classes, terms" msgstr "alla funktioner, klasser, villkor" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Index – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Hela innehållsförteckningen på en sida" @@ -661,35 +693,35 @@ msgstr "kan bli stort" msgid "Navigation" msgstr "Navigation" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Sök bland %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Om dessa dokument" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Senast uppdaterad %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -738,13 +770,13 @@ msgstr "sök" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Sökresultat" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -761,13 +793,13 @@ msgstr "Denna Sida" #: 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 "Förändringar i Version %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -786,33 +818,34 @@ msgstr "Förändringar i C-API" msgid "Other changes" msgstr "Övriga förändringar" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Permalink till denna rubrik" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Permalink till denna definition" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Dölj Sökresultat" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -829,44 +862,53 @@ msgstr "Dölj sidolist" msgid "Contents" msgstr "Innehåll" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Utgåva" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Fotnoter" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "fortsättning från föregående sida" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Fortsätter på nästa sida" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[image]" diff --git a/sphinx/locale/tr/LC_MESSAGES/sphinx.js b/sphinx/locale/tr/LC_MESSAGES/sphinx.js index e421a77c602..9859b204658 100644 --- a/sphinx/locale/tr/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/tr/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "tr", "plural_expr": "(n > 1)", "messages": {"Next topic": "Sonraki konu", "Index": "Dizin", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "Ho\u015fgeldiniz! Kar\u015f\u0131n\u0131zda", "Copyright": "Copyright", "C API changes": "C API'sindeki de\u011fi\u015fiklikler", "quick access to all modules": "b\u00fct\u00fcn mod\u00fcllere h\u0131zl\u0131 eri\u015fim", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "Global Mod\u00fcl Dizini", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Arama sonucunda herhangi bir belge bulunamad\u0131. B\u00fct\u00fcn kelimeleri do\u011fru yazd\u0131\u011f\u0131n\u0131zdan ve gerekli b\u00fct\u00fcn kategorileri se\u00e7ti\u011finizden emin olun.", "Index – %(key)s": "Dizin – %(key)s", "General Index": "Genel Dizin", "next chapter": "sonraki b\u00f6l\u00fcm", "Search finished, found %s page(s) matching the search query.": "Arama tamamland\u0131. Sorguyu i\u00e7eren %s sayfa bulundu.", "previous chapter": "\u00f6nceki b\u00f6l\u00fcm", "Permalink to this headline": "Bu ba\u015fl\u0131\u011f\u0131n kal\u0131c\u0131 ba\u011flant\u0131s\u0131", "About these documents": "Bu belgeler hakk\u0131nda", "Preparing search...": "Aramaya haz\u0131rlan\u0131yor...", ", in ": ", \u015funun i\u00e7inde:", "Navigation": "Gezinti", "Expand sidebar": "Yan \u00e7ubu\u011fu geni\u015flet", "the documentation for": "belgelendirme konusu: ", "Complete Table of Contents": "Ayr\u0131nt\u0131l\u0131 \u0130\u00e7indekiler Tablosu", "Contents": "\u0130\u00e7indekiler", "can be huge": "\u00e7ok b\u00fcy\u00fck olabilir", "Changes in Version %(version)s — %(docstitle)s": "S\u00fcr\u00fcm %(version)s — %(docstitle)s i\u00e7indeki De\u011fi\u015fiklikler", "Other changes": "Di\u011fer de\u011fi\u015fiklikler", "Hide Search Matches": "Arama Sonu\u00e7lar\u0131n\u0131 Gizle", "Quick search": "H\u0131zl\u0131 Arama", "Show Source": "Kayna\u011f\u0131 G\u00f6ster", "Search": "Ara", "This Page": "Bu Sayfa", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Burada belgeler i\u00e7inde arama yapabilirsiniz. Arad\u0131\u011f\u0131n\u0131z kelimeyi \na\u015fa\u011f\u0131daki kutuya yaz\u0131p \"ara\" d\u00fc\u011fmesine bas\u0131n\u0131z. Arama i\u015flevi \notomatik olarak b\u00fct\u00fcn kelimeleri arayacakt\u0131r. Eksik kelime i\u00e7eren \nsayfalar sonu\u00e7 listesinde g\u00f6r\u00fcnmez.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "<a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s ile olu\u015fturulmu\u015ftur.", "last updated": "son g\u00fcncelleme", "Collapse sidebar": "Yan \u00e7ubu\u011fu daralt", "Go": "Git", "Table Of Contents": "\u0130\u00e7indekiler Tablosu", "Search within %(docstitle)s": "%(docstitle)s i\u00e7inde ara", "all functions, classes, terms": "b\u00fct\u00fcn fonksiyonlar, s\u0131n\u0131flar, terimler", "Please activate JavaScript to enable the search\n functionality.": "Arama i\u015flevini kullanabilmek i\u00e7in l\u00fctfen JavaScript'i\n etkinle\u015ftirin.", "Indices and tables:": "Dizinler ve tablolar", "lists all sections and subsections": "b\u00fct\u00fcn b\u00f6l\u00fcmler ve alt b\u00f6l\u00fcmler listelenir", "Index pages by letter": "Harfe g\u00f6re dizin sayfalar\u0131", "search": "ara", "Permalink to this definition": "Bu tan\u0131m\u0131n kal\u0131c\u0131 ba\u011flant\u0131s\u0131", "Previous topic": "\u00d6nceki konu", "Overview": "Genel Bak\u0131\u015f", "Last updated on %(last_updated)s.": "Son g\u00fcncelleme: %(last_updated)s.", "Searching": "Aran\u0131yor", "search this documentation": "Bu belgelerde ara", "Automatically generated list of changes in version %(version)s": "%(version)s s\u00fcr\u00fcm\u00fcndeki de\u011fi\u015fikliklerin otomatik olarak \u00fcretilmi\u015f listesi", "Full index on one page": "B\u00fct\u00fcn dizin tek sayfada", "Enter search terms or a module, class or function name.": "Aranacak terimleri veya mod\u00fcl, s\u0131n\u0131f ya da fonksiyon ad\u0131n\u0131 yaz\u0131n\u0131z", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "K\u00fct\u00fcphane de\u011fi\u015fiklikleri", "Search Page": "Arama Sayfas\u0131", "Search Results": "Arama Sonu\u00e7lar\u0131"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "tr", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": ", \u015funun i\u00e7inde:", "About these documents": "Bu belgeler hakk\u0131nda", "Automatically generated list of changes in version %(version)s": "%(version)s s\u00fcr\u00fcm\u00fcndeki de\u011fi\u015fikliklerin otomatik olarak \u00fcretilmi\u015f listesi", "C API changes": "C API'sindeki de\u011fi\u015fiklikler", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "Yan \u00e7ubu\u011fu daralt", "Complete Table of Contents": "Ayr\u0131nt\u0131l\u0131 \u0130\u00e7indekiler Tablosu", "Contents": "\u0130\u00e7indekiler", "Copyright": "Copyright", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "<a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s ile olu\u015fturulmu\u015ftur.", "Expand sidebar": "Yan \u00e7ubu\u011fu geni\u015flet", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "Burada belgeler i\u00e7inde arama yapabilirsiniz. Arad\u0131\u011f\u0131n\u0131z kelimeyi \na\u015fa\u011f\u0131daki kutuya yaz\u0131p \"ara\" d\u00fc\u011fmesine bas\u0131n\u0131z. Arama i\u015flevi \notomatik olarak b\u00fct\u00fcn kelimeleri arayacakt\u0131r. Eksik kelime i\u00e7eren \nsayfalar sonu\u00e7 listesinde g\u00f6r\u00fcnmez.", "Full index on one page": "B\u00fct\u00fcn dizin tek sayfada", "General Index": "Genel Dizin", "Global Module Index": "Global Mod\u00fcl Dizini", "Go": "Git", "Hide Search Matches": "Arama Sonu\u00e7lar\u0131n\u0131 Gizle", "Index": "Dizin", "Index – %(key)s": "Dizin – %(key)s", "Index pages by letter": "Harfe g\u00f6re dizin sayfalar\u0131", "Indices and tables:": "Dizinler ve tablolar", "Last updated on %(last_updated)s.": "Son g\u00fcncelleme: %(last_updated)s.", "Library changes": "K\u00fct\u00fcphane de\u011fi\u015fiklikleri", "Navigation": "Gezinti", "Next topic": "Sonraki konu", "Other changes": "Di\u011fer de\u011fi\u015fiklikler", "Overview": "Genel Bak\u0131\u015f", "Permalink to this definition": "Bu tan\u0131m\u0131n kal\u0131c\u0131 ba\u011flant\u0131s\u0131", "Permalink to this headline": "Bu ba\u015fl\u0131\u011f\u0131n kal\u0131c\u0131 ba\u011flant\u0131s\u0131", "Please activate JavaScript to enable the search\n functionality.": "Arama i\u015flevini kullanabilmek i\u00e7in l\u00fctfen JavaScript'i\n etkinle\u015ftirin.", "Preparing search...": "Aramaya haz\u0131rlan\u0131yor...", "Previous topic": "\u00d6nceki konu", "Quick search": "H\u0131zl\u0131 Arama", "Search": "Ara", "Search Page": "Arama Sayfas\u0131", "Search Results": "Arama Sonu\u00e7lar\u0131", "Search finished, found %s page(s) matching the search query.": "Arama tamamland\u0131. Sorguyu i\u00e7eren %s sayfa bulundu.", "Search within %(docstitle)s": "%(docstitle)s i\u00e7inde ara", "Searching": "Aran\u0131yor", "Show Source": "Kayna\u011f\u0131 G\u00f6ster", "Table Of Contents": "\u0130\u00e7indekiler Tablosu", "This Page": "Bu Sayfa", "Welcome! This is": "Ho\u015fgeldiniz! Kar\u015f\u0131n\u0131zda", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Arama sonucunda herhangi bir belge bulunamad\u0131. B\u00fct\u00fcn kelimeleri do\u011fru yazd\u0131\u011f\u0131n\u0131zdan ve gerekli b\u00fct\u00fcn kategorileri se\u00e7ti\u011finizden emin olun.", "all functions, classes, terms": "b\u00fct\u00fcn fonksiyonlar, s\u0131n\u0131flar, terimler", "can be huge": "\u00e7ok b\u00fcy\u00fck olabilir", "last updated": "son g\u00fcncelleme", "lists all sections and subsections": "b\u00fct\u00fcn b\u00f6l\u00fcmler ve alt b\u00f6l\u00fcmler listelenir", "next chapter": "sonraki b\u00f6l\u00fcm", "previous chapter": "\u00f6nceki b\u00f6l\u00fcm", "quick access to all modules": "b\u00fct\u00fcn mod\u00fcllere h\u0131zl\u0131 eri\u015fim", "search": "ara", "search this documentation": "Bu belgelerde ara", "the documentation for": "belgelendirme konusu: "}, "plural_expr": "(n > 1)"}); \ No newline at end of file diff --git a/sphinx/locale/tr/LC_MESSAGES/sphinx.mo b/sphinx/locale/tr/LC_MESSAGES/sphinx.mo index 9c965b61235..ef819fb7a14 100644 Binary files a/sphinx/locale/tr/LC_MESSAGES/sphinx.mo and b/sphinx/locale/tr/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/tr/LC_MESSAGES/sphinx.po b/sphinx/locale/tr/LC_MESSAGES/sphinx.po index 5d1fceb9ea4..4141eb7de9f 100644 --- a/sphinx/locale/tr/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/tr/LC_MESSAGES/sphinx.po @@ -1,70 +1,50 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: -# Fırat Özgül <ozgulfirat@gmail.com>, 2013-2015 +# Fırat Özgül <ozgulfirat@gmail.com>, 2013-2016 # FIRST AUTHOR <EMAIL@ADDRESS>, 2011 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Turkish (http://www.transifex.com/projects/p/sphinx-1/language/tr/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Turkish (http://www.transifex.com/sphinx-doc/sphinx-1/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "Şekil %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "Tablo %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "Liste %s" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s belgelendirme çalışması" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "bkz. %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "ayrıca bkz. %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Simgeler" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python'ı İyileştirme Önerileri; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d %B %Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Gömülü Öğeler" @@ -73,64 +53,76 @@ msgstr "Gömülü Öğeler" msgid "Module level" msgstr "Modül düzeyi" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d %b %Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Genel Dizin" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "dizin" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "sonraki" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "önceki" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s belgelendirme çalışması" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (şurada: " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Bölümün yazarı: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Modülün yazarı: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Kodun yazarı: " -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Yazarı: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Parametreler" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Dönüş değeri:" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Dönüş tipi" @@ -159,12 +151,12 @@ msgstr "%s (C tipi)" msgid "%s (C variable)" msgstr "%s (C değişkeni)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "fonksiyonu" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "öğesi" @@ -172,7 +164,7 @@ msgstr "öğesi" msgid "macro" msgstr "makrosu" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "tipi" @@ -180,59 +172,72 @@ msgstr "tipi" msgid "variable" msgstr "değişkeni" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "Şablon Parametreleri" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Şunu verir: " -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ tipi)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ öğesi)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ fonksiyonu)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ sınıfı)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "%s (C++ enum sabiti)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "%s (C++ numaralandırıcısı)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "sınıfı" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "enum" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "numaralandırıcı" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (gömülü fonksiyon)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metodu)" @@ -247,7 +252,7 @@ msgstr "%s() (sınıfı)" msgid "%s (global variable or constant)" msgstr "%s (global değişken veya sabit)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s niteliği)" @@ -256,116 +261,116 @@ msgstr "%s (%s niteliği)" msgid "Arguments" msgstr "Argümanlar" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "verisi" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "niteliği" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Değişkenler" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Şunu tetikler:" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (%s modülü içinde)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (gömülü değişken)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (%s modülü içinde)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (gömülü sınıf)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (%s içinde bir sınıf)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metodu)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statik metodu)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statik metodu)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s sınıf metodu)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s sınıf metodu)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s niteliği)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (modül)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Python Modül Dizini" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "modüller" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Önerilmiyor" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "istisnası" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "metodu" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "sınıf metodu" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "statik metodu" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "modülü" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (önerilmiyor)" @@ -387,188 +392,219 @@ msgstr "yönergesi" msgid "role" msgstr "rolü" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "çevre değişkeni; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%skomut satırı seçeneği; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "sözlük terimi" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "dilbilgisi girdisi" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "referans etiketi" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "çevre değişkeni" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "program seçeneği" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Dizin" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Modül Dizini" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Arama Sayfası" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "bkz. %s" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "ayrıca bkz. %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Simgeler" + +#: sphinx/ext/autodoc.py:1297 #, python-format -msgid " Bases: %s" -msgstr " Taban: %s" +msgid "Bases: %s" +msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "şunun takma adı: :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[çizim: %s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[çizim]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(%s v%s içinde)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[kaynak]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Yapılacaklar" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<özgün girdi>>" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(<<özgün girdi>> %s içinde ve %d satırında bulunuyor.)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(<<özgün girdi>> %s içinde, %d. satırda.)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "özgün girdi" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[belgeler]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "Modül kodu" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>%s öğesinin kaynak kodu</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "Genel bakış: modül kodu" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Kodları mevcut bütün modüller</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Dikkat" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Uyarı" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Tehlike" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Hata" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "İpucu" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Önemli" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Not" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Ayrıca bkz." -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Tüyo" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Uyarı" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "%s sürümüyle geldi" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "%s sürümünde değişti" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "%s sürümünden beri önerilmiyor" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "anahtar sözcük" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "işleç" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "nesne" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "deyim" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "gömülü fonksiyon" @@ -577,7 +613,7 @@ msgstr "gömülü fonksiyon" msgid "Table Of Contents" msgstr "İçindekiler Tablosu" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -587,11 +623,7 @@ msgstr "Ara" msgid "Go" msgstr "Git" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Aranacak terimleri veya modül, sınıf ya da fonksiyon adını yazınız" - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Kaynağı Göster" @@ -639,15 +671,15 @@ msgstr "bütün modüllere hızlı erişim" msgid "all functions, classes, terms" msgstr "bütün fonksiyonlar, sınıflar, terimler" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Dizin – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Bütün dizin tek sayfada" @@ -663,35 +695,35 @@ msgstr "çok büyük olabilir" msgid "Navigation" msgstr "Gezinti" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "%(docstitle)s içinde ara" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Bu belgeler hakkında" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Son güncelleme: %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -740,13 +772,13 @@ msgstr "ara" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Arama Sonuçları" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -763,13 +795,13 @@ msgstr "Bu Sayfa" #: 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 "Sürüm %(version)s — %(docstitle)s içindeki Değişiklikler" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -788,33 +820,34 @@ msgstr "C API'sindeki değişiklikler" msgid "Other changes" msgstr "Diğer değişiklikler" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Bu başlığın kalıcı bağlantısı" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Bu tanımın kalıcı bağlantısı" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Arama Sonuçlarını Gizle" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "Aranıyor" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "Aramaya hazırlanıyor..." -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Arama tamamlandı. Sorguyu içeren %s sayfa bulundu." -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr ", şunun içinde:" @@ -831,44 +864,53 @@ msgstr "Yan çubuğu daralt" msgid "Contents" msgstr "İçindekiler" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "Bu kodun kalıcı bağlantısı" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "Bu resmin kalıcı bağlantısı" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" -msgstr "" +msgstr "Bu içindekiler tablosunun kalıcı bağlantısı" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "Bu tablonun kalıcı bağlantısı" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Sürüm" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "sayfa" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "Dipnotları" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "önceki sayfadan devam" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "Devamı sonraki sayfada" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[resim: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[resim]" diff --git a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js index 7800cab4a1f..7c56882a941 100644 --- a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "uk_UA", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Next topic": "\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0430 \u0442\u0435\u043c\u0430", "Index": "\u0406\u043d\u0434\u0435\u043a\u0441", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "", "Copyright": "\u0410\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0456 \u043f\u0440\u0430\u0432\u0430", "C API changes": "\u0437\u043c\u0456\u043d\u0438 C API", "quick access to all modules": "\u0448\u0432\u0438\u0434\u043a\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0432\u0441\u0456\u0445 \u043c\u043e\u0434\u0443\u043b\u0456\u0432", "© Copyright %(copyright)s.": "© Copyright %(copyright)s.", "Global Module Index": "\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0438\u0439 \u0456\u043d\u0434\u0435\u043a\u0441 \u043c\u043e\u0434\u0443\u043b\u0456\u0432", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "\u0406\u043d\u0434\u0435\u043a\u0441 – %(key)s", "General Index": "\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0438\u0439 \u0456\u043d\u0434\u0435\u043a\u0441", "next chapter": "\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u0440\u043e\u0437\u0434\u0456\u043b", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u0440\u043e\u0437\u0434\u0456\u043b", "Permalink to this headline": "\u041f\u043e\u0441\u0442\u0456\u0439\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0446\u0435\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "About these documents": "\u041f\u0440\u043e \u0446\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438", "Preparing search...": "", ", in ": "", "Navigation": "\u041d\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u044f", "Expand sidebar": "", "the documentation for": "", "Complete Table of Contents": "\u041f\u043e\u0432\u043d\u0438\u0439 \u0417\u043c\u0456\u0441\u0442", "Contents": "", "can be huge": "\u043c\u043e\u0436\u0435 \u0431\u0443\u0442\u0438 \u0432\u0435\u043b\u0438\u0447\u0435\u0437\u043d\u0438\u043c", "Changes in Version %(version)s — %(docstitle)s": "\u0417\u043c\u0456\u043d\u0438 \u0432 \u0412\u0435\u0440\u0441\u0456\u0457 %(version)s — %(docstitle)s", "Other changes": "\u0406\u043d\u0448\u0456 \u0437\u043c\u0456\u043d\u0438", "Hide Search Matches": "\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u0442\u0438 \u0441\u043f\u0456\u0432\u043f\u0430\u0434\u0456\u043d\u043d\u044f \u043f\u043e\u0448\u0443\u043a\u0443", "Quick search": "\u0428\u0432\u0438\u0434\u043a\u0438\u0439 \u043f\u043e\u0448\u0443\u043a", "Show Source": "\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u0432\u0438\u0445\u0456\u0434\u043d\u0438\u0439 \u0442\u0435\u043a\u0441\u0442", "Search": "\u041f\u043e\u0448\u0443\u043a", "This Page": "\u0426\u044f \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0430", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u0417\u0432\u0456\u0434\u0441\u0438 \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0448\u0443\u043a\u0430\u0442\u0438 \u0446\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438. \u0412\u0432\u0435\u0434\u0456\u0442\u044c \u0432\u0430\u0448\u0456 \u043f\u043e\u0448\u0443\u043a\u043e\u0432\u0456\n \u0441\u043b\u043e\u0432\u0430 \u0432 \u043f\u043e\u043b\u0435 \u043d\u0438\u0436\u0447\u0435 \u0442\u0430 \u043d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c \"\u043f\u043e\u0448\u0443\u043a\". \u0417\u0430\u0443\u0432\u0430\u0436\u0442\u0435 \u0449\u043e \u0444\u0443\u043d\u043a\u0446\u0456\u044f\n \u043f\u043e\u0448\u0443\u043a\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0448\u0443\u043a\u0430\u0442\u0438\u043c\u0435 \u0437\u0430 \u0432\u0441\u0456\u043c\u0430 \u0441\u043b\u043e\u0432\u0430\u043c\u0438. \u0421\u0442\u043e\u0440\u0456\u043d\u043a\u0438\n \u0449\u043e \u043c\u0456\u0441\u0442\u044f\u0442\u044c \u043c\u0435\u043d\u0448\u0435 \u0441\u043b\u0456\u0432 \u043d\u0435 \u0437'\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0443\u044e\u0447\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "\u0421\u0442\u0432\u043e\u0440\u0435\u043d\u043e \u0437 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f\u043c <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "", "Collapse sidebar": "", "Go": "\u0412\u043f\u0435\u0440\u0435\u0434", "Table Of Contents": "\u0417\u043c\u0456\u0441\u0442", "Search within %(docstitle)s": "\u0428\u0443\u043a\u0430\u0442\u0438 \u0432 %(docstitle)s", "all functions, classes, terms": "\u0432\u0441\u0456 \u0444\u0443\u043d\u043a\u0446\u0456\u0457, \u043a\u043b\u0430\u0441\u0438, \u0442\u0435\u0440\u043c\u0456\u043d\u0438", "Please activate JavaScript to enable the search\n functionality.": "\u0411\u0443\u0434\u044c-\u043b\u0430\u0441\u043a\u0430 \u0432\u0456\u043c\u043a\u043d\u0456\u0442\u044c \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0443 JavaScript, \u0449\u043e\u0431 \u0432\u0432\u0456\u043a\u043d\u0443\u0442\u0438\n\"\n\" \u043f\u043e\u0448\u0443\u043a.", "Indices and tables:": "\u0406\u043d\u0434\u0435\u043a\u0441\u0438 \u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0456:", "lists all sections and subsections": "\u043f\u0435\u0440\u0435\u043b\u0456\u0447\u0438\u0442\u0438 \u0432\u0441\u0456 \u0441\u0435\u043a\u0446\u0456\u0457 \u0442\u0430 \u043f\u0456\u0434\u0441\u0435\u043a\u0446\u0456\u0457", "Index pages by letter": "\u0406\u043d\u0434\u0435\u043a\u0441\u043d\u0456 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u043f\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c", "search": "\u043f\u043e\u0448\u0443\u043a", "Permalink to this definition": "\u041f\u043e\u0441\u0442\u0456\u0439\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0446\u0435 \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f", "Previous topic": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u0440\u043e\u0437\u0434\u0456\u043b", "Overview": "\u041e\u0433\u043b\u044f\u0434", "Last updated on %(last_updated)s.": "\u0412\u043e\u0441\u0442\u0430\u043d\u043d\u0454 \u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043e %(last_updated)s.", "Searching": "", "search this documentation": "\u0448\u0443\u043a\u0430\u0442\u0438 \u0446\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0456\u044e", "Automatically generated list of changes in version %(version)s": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0437\u0433\u0435\u043d\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u043c\u0456\u043d \u0432 \u0432\u0435\u0440\u0441\u0456\u0457 %(version)s", "Full index on one page": "\u041f\u043e\u0432\u043d\u0438\u0439 \u0456\u043d\u0434\u0435\u043a\u0441 \u043d\u0430 \u043e\u0434\u043d\u0456\u0439 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456", "Enter search terms or a module, class or function name.": "\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u043f\u043e\u0448\u0443\u043a\u043e\u0432\u0438\u0439 \u0442\u0435\u0440\u043c\u0456\u043d, \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043b\u0430\u0441 \u0447\u0438 \u043d\u0430\u0437\u0432\u0443 \u0444\u0443\u043d\u043a\u0446\u0456\u0457.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.", "Library changes": "\u0417\u043c\u0456\u043d\u0438 \u0432 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456", "Search Page": "\u0421\u0442\u043e\u0440\u0456\u043d\u043a\u0430 \u043f\u043e\u0448\u0443\u043a\u0443", "Search Results": "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0438 \u043f\u043e\u0448\u0443\u043a\u0443"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "uk_UA", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "\u041f\u0440\u043e \u0446\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438", "Automatically generated list of changes in version %(version)s": "\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0437\u0433\u0435\u043d\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u043c\u0456\u043d \u0432 \u0432\u0435\u0440\u0441\u0456\u0457 %(version)s", "C API changes": "\u0437\u043c\u0456\u043d\u0438 C API", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "\u041f\u043e\u0432\u043d\u0438\u0439 \u0417\u043c\u0456\u0441\u0442", "Contents": "", "Copyright": "\u0410\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0456 \u043f\u0440\u0430\u0432\u0430", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "\u0421\u0442\u0432\u043e\u0440\u0435\u043d\u043e \u0437 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f\u043c <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u0417\u0432\u0456\u0434\u0441\u0438 \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0448\u0443\u043a\u0430\u0442\u0438 \u0446\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438. \u0412\u0432\u0435\u0434\u0456\u0442\u044c \u0432\u0430\u0448\u0456 \u043f\u043e\u0448\u0443\u043a\u043e\u0432\u0456\n \u0441\u043b\u043e\u0432\u0430 \u0432 \u043f\u043e\u043b\u0435 \u043d\u0438\u0436\u0447\u0435 \u0442\u0430 \u043d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c \"\u043f\u043e\u0448\u0443\u043a\". \u0417\u0430\u0443\u0432\u0430\u0436\u0442\u0435 \u0449\u043e \u0444\u0443\u043d\u043a\u0446\u0456\u044f\n \u043f\u043e\u0448\u0443\u043a\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0448\u0443\u043a\u0430\u0442\u0438\u043c\u0435 \u0437\u0430 \u0432\u0441\u0456\u043c\u0430 \u0441\u043b\u043e\u0432\u0430\u043c\u0438. \u0421\u0442\u043e\u0440\u0456\u043d\u043a\u0438\n \u0449\u043e \u043c\u0456\u0441\u0442\u044f\u0442\u044c \u043c\u0435\u043d\u0448\u0435 \u0441\u043b\u0456\u0432 \u043d\u0435 \u0437'\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0443\u044e\u0447\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443.", "Full index on one page": "\u041f\u043e\u0432\u043d\u0438\u0439 \u0456\u043d\u0434\u0435\u043a\u0441 \u043d\u0430 \u043e\u0434\u043d\u0456\u0439 \u0441\u0442\u043e\u0440\u0456\u043d\u0446\u0456", "General Index": "\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0438\u0439 \u0456\u043d\u0434\u0435\u043a\u0441", "Global Module Index": "\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0438\u0439 \u0456\u043d\u0434\u0435\u043a\u0441 \u043c\u043e\u0434\u0443\u043b\u0456\u0432", "Go": "\u0412\u043f\u0435\u0440\u0435\u0434", "Hide Search Matches": "\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u0442\u0438 \u0441\u043f\u0456\u0432\u043f\u0430\u0434\u0456\u043d\u043d\u044f \u043f\u043e\u0448\u0443\u043a\u0443", "Index": "\u0406\u043d\u0434\u0435\u043a\u0441", "Index – %(key)s": "\u0406\u043d\u0434\u0435\u043a\u0441 – %(key)s", "Index pages by letter": "\u0406\u043d\u0434\u0435\u043a\u0441\u043d\u0456 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u043f\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c", "Indices and tables:": "\u0406\u043d\u0434\u0435\u043a\u0441\u0438 \u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0456:", "Last updated on %(last_updated)s.": "\u0412\u043e\u0441\u0442\u0430\u043d\u043d\u0454 \u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043e %(last_updated)s.", "Library changes": "\u0417\u043c\u0456\u043d\u0438 \u0432 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456", "Navigation": "\u041d\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u044f", "Next topic": "\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0430 \u0442\u0435\u043c\u0430", "Other changes": "\u0406\u043d\u0448\u0456 \u0437\u043c\u0456\u043d\u0438", "Overview": "\u041e\u0433\u043b\u044f\u0434", "Permalink to this definition": "\u041f\u043e\u0441\u0442\u0456\u0439\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0446\u0435 \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f", "Permalink to this headline": "\u041f\u043e\u0441\u0442\u0456\u0439\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0446\u0435\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Please activate JavaScript to enable the search\n functionality.": "\u0411\u0443\u0434\u044c-\u043b\u0430\u0441\u043a\u0430 \u0432\u0456\u043c\u043a\u043d\u0456\u0442\u044c \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0443 JavaScript, \u0449\u043e\u0431 \u0432\u0432\u0456\u043a\u043d\u0443\u0442\u0438\n\"\n\" \u043f\u043e\u0448\u0443\u043a.", "Preparing search...": "", "Previous topic": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u0440\u043e\u0437\u0434\u0456\u043b", "Quick search": "\u0428\u0432\u0438\u0434\u043a\u0438\u0439 \u043f\u043e\u0448\u0443\u043a", "Search": "\u041f\u043e\u0448\u0443\u043a", "Search Page": "\u0421\u0442\u043e\u0440\u0456\u043d\u043a\u0430 \u043f\u043e\u0448\u0443\u043a\u0443", "Search Results": "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0438 \u043f\u043e\u0448\u0443\u043a\u0443", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "\u0428\u0443\u043a\u0430\u0442\u0438 \u0432 %(docstitle)s", "Searching": "", "Show Source": "\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u0432\u0438\u0445\u0456\u0434\u043d\u0438\u0439 \u0442\u0435\u043a\u0441\u0442", "Table Of Contents": "\u0417\u043c\u0456\u0441\u0442", "This Page": "\u0426\u044f \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0430", "Welcome! This is": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "\u0432\u0441\u0456 \u0444\u0443\u043d\u043a\u0446\u0456\u0457, \u043a\u043b\u0430\u0441\u0438, \u0442\u0435\u0440\u043c\u0456\u043d\u0438", "can be huge": "\u043c\u043e\u0436\u0435 \u0431\u0443\u0442\u0438 \u0432\u0435\u043b\u0438\u0447\u0435\u0437\u043d\u0438\u043c", "last updated": "", "lists all sections and subsections": "\u043f\u0435\u0440\u0435\u043b\u0456\u0447\u0438\u0442\u0438 \u0432\u0441\u0456 \u0441\u0435\u043a\u0446\u0456\u0457 \u0442\u0430 \u043f\u0456\u0434\u0441\u0435\u043a\u0446\u0456\u0457", "next chapter": "\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u0440\u043e\u0437\u0434\u0456\u043b", "previous chapter": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u0440\u043e\u0437\u0434\u0456\u043b", "quick access to all modules": "\u0448\u0432\u0438\u0434\u043a\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0432\u0441\u0456\u0445 \u043c\u043e\u0434\u0443\u043b\u0456\u0432", "search": "\u043f\u043e\u0448\u0443\u043a", "search this documentation": "\u0448\u0443\u043a\u0430\u0442\u0438 \u0446\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0456\u044e", "the documentation for": ""}, "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)"}); \ No newline at end of file diff --git a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo index fbbdb85c7f0..f9c615950d8 100644 Binary files a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo and b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po index bed71b7291e..31435807276 100644 --- a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -8,62 +8,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Ukrainian (Ukraine) (http://www.transifex.com/projects/p/sphinx-1/language/uk_UA/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Ukrainian (Ukraine) (http://www.transifex.com/sphinx-doc/sphinx-1/language/uk_UA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: uk_UA\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" -#: sphinx/config.py:80 +#: sphinx/config.py:109 #, python-format -msgid "Fig. %s" -msgstr "" - -#: sphinx/config.py:81 -#, python-format -msgid "Table %s" -msgstr "" - -#: sphinx/config.py:82 -#, python-format -msgid "Listing %s" +msgid "Section %s" msgstr "" -#: sphinx/config.py:89 +#: sphinx/config.py:110 #, python-format -msgid "%s %s documentation" +msgid "Fig. %s" msgstr "" -#: sphinx/environment.py:1880 +#: sphinx/config.py:111 #, python-format -msgid "see %s" +msgid "Table %s" msgstr "" -#: sphinx/environment.py:1883 +#: sphinx/config.py:112 #, python-format -msgid "see also %s" -msgstr "" - -#: sphinx/environment.py:1941 -msgid "Symbols" +msgid "Listing %s" msgstr "" -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Вбудовані елементи" @@ -72,64 +52,76 @@ msgstr "Вбудовані елементи" msgid "Module level" msgstr "Рівень модуля" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%b %d, %Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Загальний індекс" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "індекс" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "наступний" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "попередній" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr " (в " -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Автор секції: " -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Автор модуля: " -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Автор: " -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Параметри" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Повертає" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Тип повернення" @@ -158,12 +150,12 @@ msgstr "%s (C тип)" msgid "%s (C variable)" msgstr "%s (C змінна)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "функція" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "член" @@ -171,7 +163,7 @@ msgstr "член" msgid "macro" msgstr "макрос" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "тип" @@ -179,59 +171,72 @@ msgstr "тип" msgid "variable" msgstr "" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ тип)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ член)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ функція)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ клас)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "клас" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (вбудована функція)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s метод)" @@ -246,7 +251,7 @@ msgstr "%s() (клас)" msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s атрибут)" @@ -255,116 +260,116 @@ msgstr "%s (%s атрибут)" msgid "Arguments" msgstr "" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "атрибут" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Викликає" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (в модулі %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (вбудована змінна)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (в модулі %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (вбудований клас)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (клас в %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s метод)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s статичний метод)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s статичний метод)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s атрибут)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (модуль)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "модулі" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Застарілий" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "виняткова ситуація" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "статичний метод" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "модуль" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (застарілий)" @@ -386,188 +391,219 @@ msgstr "" msgid "role" msgstr "" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "змінна оточення; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%sопція командного рядка; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "змінна оточення" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "Індекс" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "Індекс модулів" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Сторінка пошуку" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:108 #, python-format -msgid " Bases: %s" -msgstr " Базовий: %s" +msgid "see also %s" +msgstr "" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "синонім :class:`%s`" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "Доробити" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Увага" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Застереження" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Небезпека" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Помилка" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Підказка" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Важливо" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Примітка" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Дивись також" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Порада" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Попередження" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Нове в версії %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Змінено в версії %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Застаріло починаючи з версії %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "ключове слово" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "оператор" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "об'єкт" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "вираз" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "вбудована функція" @@ -576,7 +612,7 @@ msgstr "вбудована функція" msgid "Table Of Contents" msgstr "Зміст" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -586,11 +622,7 @@ msgstr "Пошук" msgid "Go" msgstr "Вперед" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Введіть пошуковий термін, модуль, клас чи назву функції." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Відобразити вихідний текст" @@ -638,15 +670,15 @@ msgstr "швидкий доступ до всіх модулів" msgid "all functions, classes, terms" msgstr "всі функції, класи, терміни" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Індекс – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Повний індекс на одній сторінці" @@ -662,35 +694,35 @@ msgstr "може бути величезним" msgid "Navigation" msgstr "Навігація" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Шукати в %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Про ці документи" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Авторські права" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Востаннє оновлено %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -739,13 +771,13 @@ msgstr "пошук" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "Результати пошуку" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -762,13 +794,13 @@ msgstr "Ця сторінка" #: 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 "Зміни в Версії %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -787,33 +819,34 @@ msgstr "зміни C API" msgid "Other changes" msgstr "Інші зміни" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "Постійне посилання на цей заголовок" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "Постійне посилання на це визначення" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "Приховати співпадіння пошуку" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -830,44 +863,53 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "Реліз" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "" diff --git a/sphinx/locale/vi/LC_MESSAGES/sphinx.js b/sphinx/locale/vi/LC_MESSAGES/sphinx.js index 588d99ede0e..be49f2dc317 100644 --- a/sphinx/locale/vi/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/vi/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "vi", "plural_expr": "0", "messages": {"Next topic": "Ch\u1ee7 \u0111\u1ec1 ti\u1ebfp", "Index": "", "%(filename)s — %(docstitle)s": "", "Welcome! This is": "Ch\u00e0o m\u1eebng! \u0110\u00e2y l\u00e0", "Copyright": "B\u1ea3n quy\u1ec1n", "C API changes": "", "quick access to all modules": "truy c\u1eadp nhanh t\u1ea5t c\u1ea3 c\u00e1c m\u00f4-\u0111un", "© Copyright %(copyright)s.": "© B\u1ea3n quy\u1ec1n thu\u1ed9c %(copyright)s.", "Global Module Index": "Ch\u1ec9 M\u1ee5c M\u00f4-\u0111un To\u00e0n C\u1ee5c", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "Ch\u1ec9 m\u1ee5c – %(key)s", "General Index": "Ch\u1ec9 m\u1ee5c chung", "next chapter": "ch\u01b0\u01a1ng ti\u1ebfp", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "ch\u01b0\u01a1ng tr\u01b0\u1edbc ", "Permalink to this headline": "", "About these documents": "V\u1ec1 c\u00e1c t\u00e0i li\u1ec7u n\u00e0y", "Preparing search...": "", ", in ": "", "Navigation": "\u0110i\u1ec1u h\u01b0\u1edbng", "Expand sidebar": "", "the documentation for": "t\u00e0i li\u1ec7u cho", "Complete Table of Contents": "M\u1ee5c L\u1ee5c \u0110\u1ea7y \u0110\u1ee7", "Contents": "", "can be huge": "c\u00f3 th\u1ec3 r\u1ea5t nhi\u1ec1u", "Changes in Version %(version)s — %(docstitle)s": "", "Other changes": "", "Hide Search Matches": "", "Quick search": "", "Show Source": "Hi\u1ec3n th\u1ecb m\u00e3 ngu\u1ed3n", "Search": "T\u00ecm Ki\u1ebfm", "This Page": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "\u0110\u01b0\u1ee3c t\u1ea1o nh\u1edd <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "last updated": "c\u1eadp nh\u1eadt m\u1edbi nh\u1ea5t", "Collapse sidebar": "", "Go": "Th\u1ef1c hi\u1ec7n", "Table Of Contents": "M\u1ee5c L\u1ee5c", "Search within %(docstitle)s": "T\u00ecm ki\u1ebfm trong %(docstitle)s", "all functions, classes, terms": "t\u1ea5t c\u1ea3 c\u00e1c h\u00e0m, l\u1edbp, thu\u1eadt ng\u1eef", "Please activate JavaScript to enable the search\n functionality.": "H\u00e3y b\u1eadt JavaScript \u0111\u1ec3 d\u00f9ng t\u00ednh n\u0103ng\nt\u00ecm ki\u1ebfm.", "Indices and tables:": "C\u00e1c ch\u1ec9 m\u1ee5c v\u00e0 b\u1ea3ng bi\u1ec3u:", "lists all sections and subsections": "li\u1ec7t k\u00ea t\u1ea5t c\u1ea3 c\u00e1c m\u1ee5c v\u00e0 m\u1ee5c con", "Index pages by letter": "C\u00e1c trang ch\u1ec9 m\u1ee5c theo ch\u1eef c\u00e1i", "search": "", "Permalink to this definition": "", "Previous topic": "Ch\u1ee7 \u0111\u1ec1 tr\u01b0\u1edbc", "Overview": "T\u1ed5ng quan", "Last updated on %(last_updated)s.": "C\u1eadp nh\u1eadt m\u1edbi nh\u1ea5t v\u00e0o %(last_updated)s.", "Searching": "", "search this documentation": "t\u00ecm ki\u1ebfm trong t\u00e0i li\u1ec7u n\u00e0y", "Automatically generated list of changes in version %(version)s": "", "Full index on one page": "To\u00e0n b\u1ed9 ch\u1ec9 m\u1ee5c tr\u00ean m\u1ed9t trang", "Enter search terms or a module, class or function name.": "Nh\u1eadp thu\u1eadt ng\u1eef, t\u00ean m\u1ed9t m\u00f4-\u0111un, l\u1edbp hay h\u00e0m c\u1ea7n t\u00ecm.", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">B\u1ea3n quy\u1ec1n thu\u1ed9c</a> %(copyright)s.", "Library changes": "", "Search Page": "", "Search Results": ""}}); \ No newline at end of file +Documentation.addTranslations({"locale": "vi", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "", "About these documents": "V\u1ec1 c\u00e1c t\u00e0i li\u1ec7u n\u00e0y", "Automatically generated list of changes in version %(version)s": "", "C API changes": "", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "", "Complete Table of Contents": "M\u1ee5c L\u1ee5c \u0110\u1ea7y \u0110\u1ee7", "Contents": "", "Copyright": "B\u1ea3n quy\u1ec1n", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "\u0110\u01b0\u1ee3c t\u1ea1o nh\u1edd <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.", "Expand sidebar": "", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Full index on one page": "To\u00e0n b\u1ed9 ch\u1ec9 m\u1ee5c tr\u00ean m\u1ed9t trang", "General Index": "Ch\u1ec9 m\u1ee5c chung", "Global Module Index": "Ch\u1ec9 M\u1ee5c M\u00f4-\u0111un To\u00e0n C\u1ee5c", "Go": "Th\u1ef1c hi\u1ec7n", "Hide Search Matches": "", "Index": "", "Index – %(key)s": "Ch\u1ec9 m\u1ee5c – %(key)s", "Index pages by letter": "C\u00e1c trang ch\u1ec9 m\u1ee5c theo ch\u1eef c\u00e1i", "Indices and tables:": "C\u00e1c ch\u1ec9 m\u1ee5c v\u00e0 b\u1ea3ng bi\u1ec3u:", "Last updated on %(last_updated)s.": "C\u1eadp nh\u1eadt m\u1edbi nh\u1ea5t v\u00e0o %(last_updated)s.", "Library changes": "", "Navigation": "\u0110i\u1ec1u h\u01b0\u1edbng", "Next topic": "Ch\u1ee7 \u0111\u1ec1 ti\u1ebfp", "Other changes": "", "Overview": "T\u1ed5ng quan", "Permalink to this definition": "", "Permalink to this headline": "", "Please activate JavaScript to enable the search\n functionality.": "H\u00e3y b\u1eadt JavaScript \u0111\u1ec3 d\u00f9ng t\u00ednh n\u0103ng\nt\u00ecm ki\u1ebfm.", "Preparing search...": "", "Previous topic": "Ch\u1ee7 \u0111\u1ec1 tr\u01b0\u1edbc", "Quick search": "", "Search": "T\u00ecm Ki\u1ebfm", "Search Page": "", "Search Results": "", "Search finished, found %s page(s) matching the search query.": "", "Search within %(docstitle)s": "T\u00ecm ki\u1ebfm trong %(docstitle)s", "Searching": "", "Show Source": "Hi\u1ec3n th\u1ecb m\u00e3 ngu\u1ed3n", "Table Of Contents": "M\u1ee5c L\u1ee5c", "This Page": "", "Welcome! This is": "Ch\u00e0o m\u1eebng! \u0110\u00e2y l\u00e0", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "all functions, classes, terms": "t\u1ea5t c\u1ea3 c\u00e1c h\u00e0m, l\u1edbp, thu\u1eadt ng\u1eef", "can be huge": "c\u00f3 th\u1ec3 r\u1ea5t nhi\u1ec1u", "last updated": "c\u1eadp nh\u1eadt m\u1edbi nh\u1ea5t", "lists all sections and subsections": "li\u1ec7t k\u00ea t\u1ea5t c\u1ea3 c\u00e1c m\u1ee5c v\u00e0 m\u1ee5c con", "next chapter": "ch\u01b0\u01a1ng ti\u1ebfp", "previous chapter": "ch\u01b0\u01a1ng tr\u01b0\u1edbc ", "quick access to all modules": "truy c\u1eadp nhanh t\u1ea5t c\u1ea3 c\u00e1c m\u00f4-\u0111un", "search": "", "search this documentation": "t\u00ecm ki\u1ebfm trong t\u00e0i li\u1ec7u n\u00e0y", "the documentation for": "t\u00e0i li\u1ec7u cho"}, "plural_expr": "0"}); \ No newline at end of file diff --git a/sphinx/locale/vi/LC_MESSAGES/sphinx.mo b/sphinx/locale/vi/LC_MESSAGES/sphinx.mo index a57787ea23d..7bf9a9ef00e 100644 Binary files a/sphinx/locale/vi/LC_MESSAGES/sphinx.mo and b/sphinx/locale/vi/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/vi/LC_MESSAGES/sphinx.po b/sphinx/locale/vi/LC_MESSAGES/sphinx.po index e29bb40da93..47bc5bb716f 100644 --- a/sphinx/locale/vi/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/vi/LC_MESSAGES/sphinx.po @@ -1,5 +1,5 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: @@ -8,62 +8,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Vietnamese (http://www.transifex.com/projects/p/sphinx-1/language/vi/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Vietnamese (http://www.transifex.com/sphinx-doc/sphinx-1/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: vi\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "Tài liệu %s %s" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "xem %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "nên xem %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "Biểu tượng" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Các đề nghị nâng cao Python; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%d/%m/%Y" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "Dựng sẵn" @@ -72,64 +52,76 @@ msgstr "Dựng sẵn" msgid "Module level" msgstr "Mức mô-đun" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%d/%m/%Y" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Chỉ mục chung" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "chỉ mục" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "xem tiếp" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "xem lại" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "Tài liệu %s %s" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr "(trong" -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "Tác giả mục:" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "Tác giả mô-đun:" -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "Tác giả mã lệnh:" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "Tác giả:" -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "Tham số" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "Trả về" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "Kiểu trả về" @@ -158,12 +150,12 @@ msgstr "%s (kiểu C)" msgid "%s (C variable)" msgstr "%s (biến C)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "hàm" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "thuộc tính" @@ -171,7 +163,7 @@ msgstr "thuộc tính" msgid "macro" msgstr "macro" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "kiểu" @@ -179,59 +171,72 @@ msgstr "kiểu" msgid "variable" msgstr "biến" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Ném" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (kiểu C++)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (thuộc tính C++)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (hàm C++)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (lớp C++)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" msgstr "" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" msgstr "" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "lớp" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "" + +#: sphinx/domains/cpp.py:4422 msgid "enum" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" msgstr "" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (hàm dựng sẵn)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (phương thức %s)" @@ -246,7 +251,7 @@ msgstr "%s() (lớp)" msgid "%s (global variable or constant)" msgstr "%s (biến toàn cục hoặc hằng số)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (thuộc tính %s)" @@ -255,116 +260,116 @@ msgstr "%s (thuộc tính %s)" msgid "Arguments" msgstr "Đối số" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "dữ liệu" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "thuộc tính" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "Các biến" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "Đưa ra" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (trong mô-đun %s)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (biến dựng sẵn)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s (trong mô-đun %s)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (lớp dựng sẵn)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (lớp trong %s)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (phương thức %s.%s) " -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (phương thức tĩnh %s.%s)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (phương thức tĩnh %s)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (phương thức lớp %s.%s)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (phương thức lớp %s)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (thuộc tính %s.%s)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (mô-đun)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Chỉ Mục Mô-đun Python" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "các mô-đun" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "Sắp loại bỏ" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "ngoại lệ" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "phương thức" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "phương thức lớp" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "phương thức tĩnh" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "mô-đun" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr "(sắp loại bỏ)" @@ -386,188 +391,219 @@ msgstr "chỉ thị" msgid "role" msgstr "vai trò" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "các biến môi trường; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "tuỳ chọn dòng lệnh%s; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "chú giải thuật ngữ" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" +msgid "see %s" +msgstr "xem %s" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "nên xem %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "Biểu tượng" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr "" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" +msgid "(The <<original entry>> is located in %s, line %d.)" msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "Chú ý" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "Cảnh báo" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "Nguy hiểm" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "Lỗi" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "Gợi ý" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "Quan trọng" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "Ghi chú" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "Xem thêm" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "Mẹo" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "Cảnh báo" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "Mới từ phiên bản %s" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "Thay đổi trong phiên bản %s" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "Sắp loại bỏ từ phiên bản %s" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "từ khoá" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "toán tử" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "đối tượng" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "câu lệnh" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "hàm dựng sẵn" @@ -576,7 +612,7 @@ msgstr "hàm dựng sẵn" msgid "Table Of Contents" msgstr "Mục Lục" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -586,11 +622,7 @@ msgstr "Tìm Kiếm" msgid "Go" msgstr "Thực hiện" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "Nhập thuật ngữ, tên một mô-đun, lớp hay hàm cần tìm." - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "Hiển thị mã nguồn" @@ -638,15 +670,15 @@ msgstr "truy cập nhanh tất cả các mô-đun" msgid "all functions, classes, terms" msgstr "tất cả các hàm, lớp, thuật ngữ" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "Chỉ mục – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "Toàn bộ chỉ mục trên một trang" @@ -662,35 +694,35 @@ msgstr "có thể rất nhiều" msgid "Navigation" msgstr "Điều hướng" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "Tìm kiếm trong %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "Về các tài liệu này" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "Bản quyền" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">Bản quyền thuộc</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© Bản quyền thuộc %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Cập nhật mới nhất vào %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -739,13 +771,13 @@ msgstr "" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -762,12 +794,12 @@ msgstr "" #: sphinx/themes/basic/changes/frameset.html:5 #: sphinx/themes/basic/changes/versionchanges.html:12 #, python-format -msgid "Changes in Version %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 @@ -787,33 +819,34 @@ msgstr "" msgid "Other changes" msgstr "" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr "" @@ -830,44 +863,53 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" msgstr "" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "" diff --git a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.js b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.js index d68c834c058..f5f915f0397 100644 --- a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "zh_Hans_CN", "plural_expr": "0", "messages": {"Next topic": "\u4e0b\u4e00\u4e2a\u4e3b\u9898", "Index": "\u7d22\u5f15", "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "Welcome! This is": "\u6b22\u8fce\uff01\u8fd9\u662f", "Copyright": "\u7248\u6743\u6240\u6709", "C API changes": "C API \u66f4\u6539", "quick access to all modules": "\u5feb\u901f\u67e5\u770b\u6240\u6709\u7684\u6a21\u5757", "© Copyright %(copyright)s.": "© \u7248\u6743\u6240\u6709 %(copyright)s.", "Global Module Index": "\u5168\u5c40\u6a21\u5757\u7d22\u5f15", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u6ca1\u6709\u4efb\u4f55\u6587\u6863\u5339\u914d\u60a8\u7684\u641c\u7d22\u3002\u8bf7\u786e\u4fdd\u4f60\u8f93\u5165\u7684\u8bcd\u62fc\u5199\u6b63\u786e\u5e76\u9009\u62e9\u4e86\u5408\u9002\u7684\u5206\u7c7b\u3002", "Index – %(key)s": "\u7d22\u5f15 – %(key)s", "General Index": "\u603b\u76ee\u5f55", "next chapter": "\u4e0b\u4e00\u7ae0", "Search finished, found %s page(s) matching the search query.": "\u641c\u7d22\u5b8c\u6210\uff0c\u6709 %s \u4e2a\u9875\u9762\u5339\u914d\u3002", "previous chapter": "\u4e0a\u4e00\u7ae0", "Permalink to this headline": "\u6c38\u4e45\u94fe\u63a5\u81f3\u6807\u9898", "About these documents": "\u5173\u4e8e\u8fd9\u4e9b\u6587\u6863", "Preparing search...": "\u51c6\u5907\u641c\u7d22\u2026\u2026", ", in ": "\uff0c\u5728", "Navigation": "\u5bfc\u822a", "Expand sidebar": "\u5c55\u5f00\u8fb9\u680f", "the documentation for": "\u8fd9\u4efd\u6587\u6863\u662f", "Complete Table of Contents": "\u5b8c\u6574\u7684\u5185\u5bb9\u8868", "Contents": "\u76ee\u5f55", "can be huge": "\u53ef\u80fd\u4f1a\u5f88\u591a", "Changes in Version %(version)s — %(docstitle)s": "\u66f4\u6539\u53d1\u751f\u5728\u7248\u672c %(version)s — %(docstitle)s", "Other changes": "\u5176\u4ed6\u66f4\u6539", "Hide Search Matches": "\u9690\u85cf\u641c\u7d22\u7ed3\u679c", "Quick search": "\u5feb\u901f\u641c\u7d22", "Show Source": "\u663e\u793a\u6e90\u4ee3\u7801", "Search": "\u641c\u7d22", "This Page": "\u672c\u9875", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u5728\u8fd9\u513f\uff0c\u4f60\u53ef\u4ee5\u5bf9\u8fd9\u4e9b\u6587\u6863\u8fdb\u884c\u641c\u7d22\u3002\u5411\u641c\u7d22\u6846\u4e2d\u8f93\u5165\u4f60\u6240\u8981\u641c\u7d22\u7684\u5173\u952e\u5b57\u5e76\u70b9\u51fb\u201c\u641c\u7d22\u201d\u3002\u6ce8\u610f\uff1a\u641c\u7d22\u5f15\u64ce\u4f1a\u81ea\u52a8\u641c\u7d22\u6240\u6709\u7684\u5173\u952e\u5b57\u3002\u5c06\u4e0d\u4f1a\u641c\u7d22\u5230\u90e8\u5206\u5173\u952e\u5b57\u7684\u9875\u9762.", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "\u7531 <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s \u521b\u5efa\u3002", "last updated": "\u6700\u540e\u66f4\u65b0\u4e8e", "Collapse sidebar": "\u6298\u53e0\u8fb9\u680f", "Go": "\u8f6c\u5411", "Table Of Contents": "\u5167\u5bb9\u76ee\u5f55", "Search within %(docstitle)s": "\u5728 %(docstitle)s \u4e2d\u641c\u7d22", "all functions, classes, terms": "\u6240\u7684\u51fd\u6570\uff0c\u7c7b\uff0c\u672f\u8bed", "Please activate JavaScript to enable the search\n functionality.": "\u8bf7\u6fc0\u6d3b JavaScript \u4ee5\u5f00\u542f\u641c\u7d22\u529f\u80fd", "Indices and tables:": "\u7d22\u5f15\u548c\u8868\u683c\uff1a", "lists all sections and subsections": "\u5217\u51fa\u6240\u6709\u7684\u7ae0\u8282\u548c\u90e8\u5206", "Index pages by letter": "\u6309\u7167\u5b57\u6bcd\u7684\u7d22\u5f15\u9875", "search": "\u641c\u7d22", "Permalink to this definition": "\u6c38\u4e45\u94fe\u63a5\u81f3\u76ee\u6807", "Previous topic": "\u4e0a\u4e00\u4e2a\u4e3b\u9898", "Overview": "\u6982\u8ff0", "Last updated on %(last_updated)s.": "\u6700\u540e\u66f4\u65b0\u4e8e %(last_updated)s.", "Searching": "\u641c\u7d22\u4e2d", "search this documentation": "\u641c\u7d22\u6587\u6863", "Automatically generated list of changes in version %(version)s": "\u81ea\u52a8\u751f\u6210\u7684 %(version)s \u7248\u672c\u4e2d\u7684\u66f4\u6539\u5217\u8868", "Full index on one page": "\u4e00\u9875\u7684\u5168\u90e8\u7d22\u5f15", "Enter search terms or a module, class or function name.": "\u8f93\u5165\u76f8\u5173\u7684\u672f\u8bed\uff0c\u6a21\u5757\uff0c\u7c7b\u6216\u8005\u51fd\u6570\u540d\u79f0\u8fdb\u884c\u641c\u7d22", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">\u7248\u6743\u6240\u6709</a> %(copyright)s.", "Library changes": "\u5e93\u66f4\u6539", "Search Page": "\u641c\u7d22\u9875\u9762", "Search Results": "\u641c\u7d22\u7ed3\u679c"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "zh_Hans_CN", "messages": {"%(filename)s — %(docstitle)s": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "© Copyright %(copyright)s.": "", ", in ": "\uff0c\u5728", "About these documents": "\u5173\u4e8e\u8fd9\u4e9b\u6587\u6863", "Automatically generated list of changes in version %(version)s": "\u81ea\u52a8\u751f\u6210\u7684 %(version)s \u7248\u672c\u4e2d\u7684\u66f4\u6539\u5217\u8868", "C API changes": "C API \u66f4\u6539", "Changes in Version %(version)s — %(docstitle)s": "", "Collapse sidebar": "\u6298\u53e0\u8fb9\u680f", "Complete Table of Contents": "\u5b8c\u6574\u7684\u5185\u5bb9\u8868", "Contents": "\u76ee\u5f55", "Copyright": "\u7248\u6743\u6240\u6709", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "\u7531 <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s \u521b\u5efa\u3002", "Expand sidebar": "\u5c55\u5f00\u8fb9\u680f", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u5728\u8fd9\u513f\uff0c\u4f60\u53ef\u4ee5\u5bf9\u8fd9\u4e9b\u6587\u6863\u8fdb\u884c\u641c\u7d22\u3002\u5411\u641c\u7d22\u6846\u4e2d\u8f93\u5165\u4f60\u6240\u8981\u641c\u7d22\u7684\u5173\u952e\u5b57\u5e76\u70b9\u51fb\u201c\u641c\u7d22\u201d\u3002\u6ce8\u610f\uff1a\u641c\u7d22\u5f15\u64ce\u4f1a\u81ea\u52a8\u641c\u7d22\u6240\u6709\u7684\u5173\u952e\u5b57\u3002\u5c06\u4e0d\u4f1a\u641c\u7d22\u5230\u90e8\u5206\u5173\u952e\u5b57\u7684\u9875\u9762.", "Full index on one page": "\u4e00\u9875\u7684\u5168\u90e8\u7d22\u5f15", "General Index": "\u603b\u76ee\u5f55", "Global Module Index": "\u5168\u5c40\u6a21\u5757\u7d22\u5f15", "Go": "\u8f6c\u5411", "Hide Search Matches": "\u9690\u85cf\u641c\u7d22\u7ed3\u679c", "Index": "\u7d22\u5f15", "Index – %(key)s": "\u7d22\u5f15 – %(key)s", "Index pages by letter": "\u6309\u7167\u5b57\u6bcd\u7684\u7d22\u5f15\u9875", "Indices and tables:": "\u7d22\u5f15\u548c\u8868\u683c\uff1a", "Last updated on %(last_updated)s.": "\u6700\u540e\u66f4\u65b0\u4e8e %(last_updated)s.", "Library changes": "\u5e93\u66f4\u6539", "Navigation": "\u5bfc\u822a", "Next topic": "\u4e0b\u4e00\u4e2a\u4e3b\u9898", "Other changes": "\u5176\u4ed6\u66f4\u6539", "Overview": "\u6982\u8ff0", "Permalink to this definition": "\u6c38\u4e45\u94fe\u63a5\u81f3\u76ee\u6807", "Permalink to this headline": "\u6c38\u4e45\u94fe\u63a5\u81f3\u6807\u9898", "Please activate JavaScript to enable the search\n functionality.": "\u8bf7\u6fc0\u6d3b JavaScript \u4ee5\u5f00\u542f\u641c\u7d22\u529f\u80fd", "Preparing search...": "\u51c6\u5907\u641c\u7d22\u2026\u2026", "Previous topic": "\u4e0a\u4e00\u4e2a\u4e3b\u9898", "Quick search": "\u5feb\u901f\u641c\u7d22", "Search": "\u641c\u7d22", "Search Page": "\u641c\u7d22\u9875\u9762", "Search Results": "\u641c\u7d22\u7ed3\u679c", "Search finished, found %s page(s) matching the search query.": "\u641c\u7d22\u5b8c\u6210\uff0c\u6709 %s \u4e2a\u9875\u9762\u5339\u914d\u3002", "Search within %(docstitle)s": "\u5728 %(docstitle)s \u4e2d\u641c\u7d22", "Searching": "\u641c\u7d22\u4e2d", "Show Source": "\u663e\u793a\u6e90\u4ee3\u7801", "Table Of Contents": "\u5167\u5bb9\u76ee\u5f55", "This Page": "\u672c\u9875", "Welcome! This is": "\u6b22\u8fce\uff01\u8fd9\u662f", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u6ca1\u6709\u4efb\u4f55\u6587\u6863\u5339\u914d\u60a8\u7684\u641c\u7d22\u3002\u8bf7\u786e\u4fdd\u4f60\u8f93\u5165\u7684\u8bcd\u62fc\u5199\u6b63\u786e\u5e76\u9009\u62e9\u4e86\u5408\u9002\u7684\u5206\u7c7b\u3002", "all functions, classes, terms": "\u6240\u7684\u51fd\u6570\uff0c\u7c7b\uff0c\u672f\u8bed", "can be huge": "\u53ef\u80fd\u4f1a\u5f88\u591a", "last updated": "\u6700\u540e\u66f4\u65b0\u4e8e", "lists all sections and subsections": "\u5217\u51fa\u6240\u6709\u7684\u7ae0\u8282\u548c\u90e8\u5206", "next chapter": "\u4e0b\u4e00\u7ae0", "previous chapter": "\u4e0a\u4e00\u7ae0", "quick access to all modules": "\u5feb\u901f\u67e5\u770b\u6240\u6709\u7684\u6a21\u5757", "search": "\u641c\u7d22", "search this documentation": "\u641c\u7d22\u6587\u6863", "the documentation for": "\u8fd9\u4efd\u6587\u6863\u662f"}, "plural_expr": "0"}); \ No newline at end of file diff --git a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo index af7536ee40e..104982e2ee0 100644 Binary files a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo and b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po index 9f0eb238873..2f42aab8b3f 100644 --- a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po @@ -1,10 +1,10 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: # Aifen Qin <yinian1992@live.com>, 2015 -# 刘振涛 <lenville@gmail.com>, 2013 +# Lenville Leo <lenville@gmail.com>, 2013 # Ryekee Zhong <ryekee@gmail.com>, 2013 # Tower Joo<zhutao.iscas@gmail.com>, 2009 # Aifen Qin <yinian1992@live.com>, 2013 @@ -12,62 +12,42 @@ msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/sphinx-1/language/zh_CN/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-06 13:53+0000\n" +"Last-Translator: Takeshi KOMIYA <i.tkomiya@gmail.com>\n" +"Language-Team: Chinese (China) (http://www.transifex.com/sphinx-doc/sphinx-1/language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" msgstr "图 %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" msgstr "表 %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" msgstr "列表 %s" -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "%s %s 文档" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "见 %s" - -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "参见 %s" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "符号" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python 提高建议; PEP %s" -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%Y 年 %m 月 %d 日" - #: sphinx/builders/changes.py:75 msgid "Builtins" msgstr "内置" @@ -76,64 +56,76 @@ msgstr "内置" msgid "Module level" msgstr "模块级别" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" -msgstr "%Y 年 %m 月 %d 日" +msgstr "" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "总目录" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "索引" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "下一页" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "上一页" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s 文档" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " msgstr "(在" -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "" + +#: sphinx/directives/other.py:149 msgid "Section author: " msgstr "节作者:" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "模块作者:" -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " msgstr "代码作者:" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "作者:" -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "参数" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" msgstr "返回" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" msgstr "返回类型" @@ -162,12 +154,12 @@ msgstr "%s (C 类型)" msgid "%s (C variable)" msgstr "%s (C 变量)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "函数" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "成员" @@ -175,7 +167,7 @@ msgstr "成员" msgid "macro" msgstr "宏" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "类型" @@ -183,59 +175,72 @@ msgstr "类型" msgid "variable" msgstr "变量" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "" + +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" msgstr "抛出" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ 类型)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ 成员)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ 函数)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ 类)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" -msgstr "" +msgstr "%s (C++ 枚举)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" -msgstr "" +msgstr "%s (C++ 枚举子)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" msgstr "类" -#: sphinx/domains/cpp.py:2683 -msgid "enum" +#: sphinx/domains/cpp.py:4421 +msgid "concept" msgstr "" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4422 +msgid "enum" +msgstr "枚举" + +#: sphinx/domains/cpp.py:4423 msgid "enumerator" -msgstr "" +msgstr "枚举子" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (內置函数)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s 方法)" @@ -250,7 +255,7 @@ msgstr "%s() (类)" msgid "%s (global variable or constant)" msgstr "%s (全局变量或常量)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s 属性)" @@ -259,116 +264,116 @@ msgstr "%s (%s 属性)" msgid "Arguments" msgstr "参数" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" msgstr "数据" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "属性" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" msgstr "变量" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" msgstr "引发" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" msgstr "%s() (在 %s 模块中)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (內置变量)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" msgstr "%s() (在 %s 模块中)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (內置类)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" msgstr "%s (%s 中的类)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s 方法)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s 静态方法)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s 静态方法)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s 类方法)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s 类方法)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s 属性)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (模块)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" msgstr "Python 模块索引" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "模块" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" msgstr "已移除" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "例外" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" msgstr "方法" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" msgstr "类方法" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "静态方法" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "模块" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" msgstr " (已移除)" @@ -390,188 +395,219 @@ msgstr "指示" msgid "role" msgstr "角色" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "环境变量; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%s命令行选项; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" msgstr "术语" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" msgstr "语法记号" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" msgstr "引用标签" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "环境变量" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" msgstr "程序选项" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "索引" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "模块索引" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "搜索页面" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 +#, python-format +msgid "see %s" +msgstr "见 %s" + +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "参见 %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "符号" + +#: sphinx/ext/autodoc.py:1297 #, python-format -msgid " Bases: %s" -msgstr " 基类:%s" +msgid "Bases: %s" +msgstr "" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" msgstr ":class:`%s` 的别名" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" msgstr "[图表:%s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" msgstr "[图表]" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "" + +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" msgstr "(在 %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" msgstr "[源代码]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "" + +#: sphinx/ext/todo.py:56 msgid "Todo" msgstr "待处理" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "" + +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(<<原始记录>> 见 %s,第 %d 行)" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" msgstr "原始记录" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" msgstr "[文档]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" msgstr "模块代码" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>%s 源代码</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" msgstr "概览:模块代码" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>代码可用的所有模块</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "注意" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "警告" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "危险" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "错误" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "提示" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "重要" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" msgstr "注解" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" msgstr "参见" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" msgstr "小技巧" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "警告" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" msgstr "%s 新版功能" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" msgstr "在 %s 版更改" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" msgstr "%s 版后已移除" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "关键字" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "运算符" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "对象" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" msgstr "语句" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "內置函数" @@ -580,7 +616,7 @@ msgstr "內置函数" msgid "Table Of Contents" msgstr "內容目录" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -590,11 +626,7 @@ msgstr "搜索" msgid "Go" msgstr "转向" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "输入相关的术语,模块,类或者函数名称进行搜索" - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "显示源代码" @@ -642,15 +674,15 @@ msgstr "快速查看所有的模块" msgid "all functions, classes, terms" msgstr "所的函数,类,术语" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" msgstr "索引 – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" msgstr "一页的全部索引" @@ -666,35 +698,35 @@ msgstr "可能会很多" msgid "Navigation" msgstr "导航" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "在 %(docstitle)s 中搜索" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" msgstr "关于这些文档" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "版权所有" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "© <a href=\"%(path)s\">版权所有</a> %(copyright)s." +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "© 版权所有 %(copyright)s." +msgid "© Copyright %(copyright)s." +msgstr "" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." msgstr "最后更新于 %(last_updated)s." -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " @@ -743,13 +775,13 @@ msgstr "搜索" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "搜索结果" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." @@ -766,13 +798,13 @@ msgstr "本页" #: 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 "更改发生在版本 %(version)s — %(docstitle)s" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "%(filename)s — %(docstitle)s" +msgid "%(filename)s — %(docstitle)s" +msgstr "" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format @@ -791,33 +823,34 @@ msgstr "C API 更改" msgid "Other changes" msgstr "其他更改" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" msgstr "永久链接至标题" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" msgstr "永久链接至目标" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" msgstr "隐藏搜索结果" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" msgstr "搜索中" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." msgstr "准备搜索……" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "搜索完成,有 %s 个页面匹配。" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " msgstr ",在" @@ -834,44 +867,53 @@ msgstr "折叠边栏" msgid "Contents" msgstr "目录" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" msgstr "永久链接至代码" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" msgstr "永久链接至图片" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" -msgstr "" +msgstr "永久链接至目录树" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" msgstr "永久链接至表格" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "发布" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" msgstr "脚注" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" msgstr "续上页" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" msgstr "下页继续" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" msgstr "[图片: %s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[图片]" diff --git a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js index 1616baeb2ba..1e434fe1da4 100644 --- a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "zh_Hant_TW", "plural_expr": "0", "messages": {"Next topic": "\u4e0b\u4e00\u500b\u4e3b\u984c", "Index": "\u7d22\u5f15", "%(filename)s — %(docstitle)s": "", "Welcome! This is": "", "Copyright": "\u7248\u6b0a\u6240\u6709", "C API changes": "C API \u6539\u8b8a", "quick access to all modules": "", "© Copyright %(copyright)s.": "", "Global Module Index": "", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Index – %(key)s": "", "General Index": "\u7e3d\u7d22\u5f15", "next chapter": "\u4e0b\u4e00\u7ae0", "Search finished, found %s page(s) matching the search query.": "", "previous chapter": "\u4e0a\u4e00\u7ae0", "Permalink to this headline": "", "About these documents": "", "Preparing search...": "", ", in ": "", "Navigation": "\u700f\u89bd", "Expand sidebar": "", "the documentation for": "", "Complete Table of Contents": "", "Contents": "", "can be huge": "", "Changes in Version %(version)s — %(docstitle)s": "", "Other changes": "\u5176\u4ed6\u6539\u8b8a\uff1a", "Hide Search Matches": "", "Quick search": "\u5feb\u901f\u641c\u5c0b", "Show Source": "\u986f\u793a\u539f\u59cb\u78bc", "Search": "\u641c\u5c0b", "This Page": "\u672c\u9801", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "", "last updated": "", "Collapse sidebar": "", "Go": "", "Table Of Contents": "\u5167\u5bb9\u76ee\u9304", "Search within %(docstitle)s": "\u5728 %(docstitle)s \u4e2d\u641c\u5c0b", "all functions, classes, terms": "", "Please activate JavaScript to enable the search\n functionality.": "", "Indices and tables:": "", "lists all sections and subsections": "", "Index pages by letter": "", "search": "\u641c\u5c0b", "Permalink to this definition": "", "Previous topic": "\u4e0a\u4e00\u500b\u4e3b\u984c", "Overview": "", "Last updated on %(last_updated)s.": "\u6700\u5f8c\u66f4\u65b0\u65e5\u671f\u662f %(last_updated)s.", "Searching": "", "search this documentation": "", "Automatically generated list of changes in version %(version)s": "", "Full index on one page": "", "Enter search terms or a module, class or function name.": "", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "", "Library changes": "", "Search Page": "\u641c\u5c0b\u9801\u9762", "Search Results": "\u641c\u5c0b\u7d50\u679c"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "zh_Hant_TW", "messages": {"%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", "© <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "© <a href=\"%(path)s\">\u7248\u6b0a\u6240\u6709</a> %(copyright)s\u3002", "© Copyright %(copyright)s.": "© \u7248\u6b0a\u6240\u6709 %(copyright)s\u3002", ", in ": " \u65bc ", "About these documents": "\u95dc\u65bc\u9019\u4e9b\u6587\u4ef6", "Automatically generated list of changes in version %(version)s": "\u81ea\u52d5\u7522\u751f\u7684 %(version)s \u7248\u672c\u6539\u8b8a\u5217\u8868", "C API changes": "C API \u6539\u8b8a", "Changes in Version %(version)s — %(docstitle)s": "\u65bc %(version)s \u7248\u672c\u4e2d\u7684\u6240\u6709\u66f4\u8b8a — %(docstitle)s", "Collapse sidebar": "\u6536\u5408\u5074\u908a\u6b04", "Complete Table of Contents": "\u5b8c\u6574\u76ee\u9304", "Contents": "\u5167\u5bb9", "Copyright": "\u7248\u6b0a\u6240\u6709", "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "\u4f7f\u7528 <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s \u5275\u5efa\u3002", "Expand sidebar": "\u5c55\u958b\u5074\u908a\u6b04", "From here you can search these documents. Enter your search\n words into the box below and click \"search\". Note that the search\n function will automatically search for all of the words. Pages\n containing fewer words won't appear in the result list.": "\u4f60\u53ef\u4ee5\u5f9e\u9019\u88e1\u641c\u5c0b\u6587\u4ef6\u3002\u8f38\u5165\u641c\u5c0b\u8a5e\u81f3\u5e95\u4e0b\u7684\u6587\u5b57\u6846\u4e26\u9ede\u64ca\u300c\u641c\u5c0b\u300d\u3002\u6ce8\u610f\u641c\u5c0b\u529f\u80fd\u6703\u81ea\u52d5\u5c0b\u627e\u6eff\u8db3\u6240\u6709\u8a5e\u7684\u7d50\u679c\u3002\u53ea\u6eff\u8db3\u5c11\u90e8\u4efd\u641c\u5c0b\u8a5e\u7684\u9801\u9762\u5c07\u4e0d\u4e88\u986f\u793a\u5728\u7d50\u679c\u6e05\u55ae\u4e2d\u3002", "Full index on one page": "\u55ae\u9801\u5b8c\u6574\u7d22\u5f15", "General Index": "\u7e3d\u7d22\u5f15", "Global Module Index": "\u5168\u57df\u6a21\u7d44\u7d22\u5f15", "Go": "\u524d\u5f80", "Hide Search Matches": "\u96b1\u85cf\u543b\u5408\u641c\u5c0b\u7684\u4e0a\u8272", "Index": "\u7d22\u5f15", "Index – %(key)s": "\u7d22\u5f15 – %(key)s", "Index pages by letter": "\u7d22\u5f15\u9801\u9762\u6309\u5b57\u6bcd", "Indices and tables:": "\u7d22\u5f15\u8207\u8868\u683c\uff1a", "Last updated on %(last_updated)s.": "\u6700\u5f8c\u66f4\u65b0\u65bc %(last_updated)s\u3002", "Library changes": "\u51fd\u5f0f\u5eab\u7684\u6539\u8b8a", "Navigation": "\u700f\u89bd", "Next topic": "\u4e0b\u4e00\u500b\u4e3b\u984c", "Other changes": "\u5176\u4ed6\u6539\u8b8a", "Overview": "\u6982\u8981", "Permalink to this definition": "\u672c\u5b9a\u7fa9\u7684\u6c38\u4e45\u9023\u7d50", "Permalink to this headline": "\u672c\u6a19\u984c\u7684\u6c38\u4e45\u9023\u7d50", "Please activate JavaScript to enable the search\n functionality.": "\u8acb\u555f\u7528 Javascript \u4ee5\u958b\u555f\u641c\u5c0b\u529f\u80fd\u3002", "Preparing search...": "\u6e96\u5099\u641c\u5c0b\u4e2d\u2026", "Previous topic": "\u4e0a\u4e00\u500b\u4e3b\u984c", "Quick search": "\u5feb\u901f\u641c\u5c0b", "Search": "\u641c\u5c0b", "Search Page": "\u641c\u5c0b\u9801\u9762", "Search Results": "\u641c\u5c0b\u7d50\u679c", "Search finished, found %s page(s) matching the search query.": "\u641c\u5c0b\u5b8c\u6210\uff0c\u5171\u627e\u5230 %s \u9801\u9762\u6eff\u8db3\u641c\u5c0b\u689d\u4ef6\u3002", "Search within %(docstitle)s": "\u5728 %(docstitle)s \u4e2d\u641c\u5c0b", "Searching": "\u641c\u5c0b\u4e2d", "Show Source": "\u986f\u793a\u539f\u59cb\u78bc", "Table Of Contents": "\u76ee\u9304", "This Page": "\u672c\u9801", "Welcome! This is": "\u6b61\u8fce\uff01\u672c", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u4f60\u7684\u641c\u5c0b\u627e\u4e0d\u5230\u4efb\u4f55\u6eff\u8db3\u689d\u4ef6\u7684\u6587\u4ef6\u3002\u8acb\u78ba\u5b9a\u662f\u5426\u6240\u6709\u7684\u641c\u5c0b\u8a5e\u90fd\u6b63\u78ba\u5730\u62fc\u5beb\u4e14\u4f60\u5df2\u9078\u64c7\u8db3\u5920\u7684\u5206\u985e\u3002", "all functions, classes, terms": "\u6240\u6709\u51fd\u5f0f\u3001\u985e\u5225\u3001\u8853\u8a9e", "can be huge": "\u53ef\u80fd\u6703\u5f88\u5927", "last updated": "\u6700\u5f8c\u66f4\u65b0\u65bc", "lists all sections and subsections": "\u5217\u51fa\u6240\u6709\u6bb5\u843d\u8207\u5b50\u6bb5\u843d", "next chapter": "\u4e0b\u4e00\u7ae0", "previous chapter": "\u4e0a\u4e00\u7ae0", "quick access to all modules": "\u5feb\u901f\u524d\u5f80\u6240\u6709\u7684\u6a21\u7d44", "search": "\u641c\u5c0b", "search this documentation": "\u641c\u5c0b\u672c\u8aaa\u660e\u6587\u4ef6", "the documentation for": "\u8aaa\u660e\u6587\u4ef6\u4ecb\u7d39"}, "plural_expr": "0"}); \ No newline at end of file diff --git a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo index 42a67a1a03a..001e19d4d63 100644 Binary files a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo and b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo differ diff --git a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po index 80c36640710..3d52787f823 100644 --- a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po @@ -1,137 +1,131 @@ # Translations template for Sphinx. -# Copyright (C) 2015 ORGANIZATION +# Copyright (C) 2016 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # # Translators: # Fred Lin <gasolin@gmail.com>, 2008 +# Liang Bo Wang <me@liang2.tw>, 2016 +# Liang Bo Wang <me@liang2.tw>, 2016 msgid "" msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-03-08 23:31+0900\n" -"PO-Revision-Date: 2015-03-08 14:35+0000\n" -"Last-Translator: Takayuki Shimizukawa <shimizukawa@gmail.com>\n" -"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/sphinx-1/language/zh_TW/)\n" +"POT-Creation-Date: 2016-11-06 22:40+0900\n" +"PO-Revision-Date: 2016-11-22 02:50+0000\n" +"Last-Translator: Liang Bo Wang <me@liang2.tw>\n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/sphinx-doc/sphinx-1/language/zh_TW/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" +"Generated-By: Babel 2.3.4\n" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: sphinx/config.py:80 +#: sphinx/config.py:109 +#, python-format +msgid "Section %s" +msgstr "段落 %s" + +#: sphinx/config.py:110 #, python-format msgid "Fig. %s" -msgstr "" +msgstr "圖 %s" -#: sphinx/config.py:81 +#: sphinx/config.py:111 #, python-format msgid "Table %s" -msgstr "" +msgstr "表 %s" -#: sphinx/config.py:82 +#: sphinx/config.py:112 #, python-format msgid "Listing %s" -msgstr "" - -#: sphinx/config.py:89 -#, python-format -msgid "%s %s documentation" -msgstr "" - -#: sphinx/environment.py:1880 -#, python-format -msgid "see %s" -msgstr "" +msgstr "程式 %s" -#: sphinx/environment.py:1883 -#, python-format -msgid "see also %s" -msgstr "" - -#: sphinx/environment.py:1941 -msgid "Symbols" -msgstr "" - -#: sphinx/roles.py:193 +#: sphinx/roles.py:187 #, python-format msgid "Python Enhancement Proposals; PEP %s" -msgstr "" - -#: sphinx/transforms.py:58 sphinx/writers/latex.py:212 -#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:221 -#, python-format -msgid "%B %d, %Y" -msgstr "%Y 年 %m 月 %d 日" +msgstr "Python Enhancement Proposals; PEP %s" #: sphinx/builders/changes.py:75 msgid "Builtins" -msgstr "" +msgstr "內建" #: sphinx/builders/changes.py:77 msgid "Module level" -msgstr "" +msgstr "模組層次" -#: sphinx/builders/html.py:291 +#: sphinx/builders/html.py:294 sphinx/transforms/__init__.py:46 +#: sphinx/writers/latex.py:393 sphinx/writers/manpage.py:100 +#: sphinx/writers/texinfo.py:221 #, python-format msgid "%b %d, %Y" msgstr "%Y 年 %m 月 %d 日" -#: sphinx/builders/html.py:310 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:315 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "總索引" -#: sphinx/builders/html.py:310 +#: sphinx/builders/html.py:315 msgid "index" msgstr "索引" -#: sphinx/builders/html.py:371 +#: sphinx/builders/html.py:377 msgid "next" msgstr "下一頁" -#: sphinx/builders/html.py:380 +#: sphinx/builders/html.py:386 msgid "previous" msgstr "上一頁" -#: sphinx/builders/latex.py:144 sphinx/builders/texinfo.py:198 +#: sphinx/builders/html.py:1222 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s 說明文件" + +#: sphinx/builders/latex.py:177 sphinx/builders/texinfo.py:199 msgid " (in " -msgstr "" +msgstr "(於" -#: sphinx/directives/other.py:150 +#: sphinx/directives/code.py:140 sphinx/directives/code.py:370 +#, python-format +msgid "Invalid caption: %s" +msgstr "無效標題:%s" + +#: sphinx/directives/other.py:149 msgid "Section author: " -msgstr "Section 作者:" +msgstr "段落作者:" -#: sphinx/directives/other.py:152 +#: sphinx/directives/other.py:151 msgid "Module author: " msgstr "模組作者:" -#: sphinx/directives/other.py:154 +#: sphinx/directives/other.py:153 msgid "Code author: " -msgstr "" +msgstr "程式作者:" -#: sphinx/directives/other.py:156 +#: sphinx/directives/other.py:155 msgid "Author: " msgstr "作者:" -#: sphinx/domains/__init__.py:273 +#: sphinx/domains/__init__.py:277 #, python-format msgid "%s %s" -msgstr "" +msgstr "%s %s" -#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:2408 -#: sphinx/domains/python.py:122 +#: sphinx/domains/c.py:58 sphinx/domains/cpp.py:4051 +#: sphinx/domains/python.py:149 msgid "Parameters" msgstr "參數" -#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:2414 -#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:134 +#: sphinx/domains/c.py:61 sphinx/domains/cpp.py:4060 +#: sphinx/domains/javascript.py:128 sphinx/domains/python.py:161 msgid "Returns" -msgstr "返回" +msgstr "回傳" #: sphinx/domains/c.py:63 sphinx/domains/javascript.py:130 -#: sphinx/domains/python.py:136 +#: sphinx/domains/python.py:163 msgid "Return type" -msgstr "返回類別" +msgstr "回傳型態" #: sphinx/domains/c.py:177 #, python-format @@ -151,19 +145,19 @@ msgstr "%s (C 巨集)" #: sphinx/domains/c.py:183 #, python-format msgid "%s (C type)" -msgstr "%s (C 類別)" +msgstr "%s (C 型態)" #: sphinx/domains/c.py:185 #, python-format msgid "%s (C variable)" msgstr "%s (C 變數)" -#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:2680 -#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:587 +#: sphinx/domains/c.py:242 sphinx/domains/cpp.py:4418 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:614 msgid "function" msgstr "函式" -#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:2681 +#: sphinx/domains/c.py:243 sphinx/domains/cpp.py:4419 msgid "member" msgstr "成員" @@ -171,412 +165,456 @@ msgstr "成員" msgid "macro" msgstr "巨集" -#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:2682 +#: sphinx/domains/c.py:245 sphinx/domains/cpp.py:4420 msgid "type" msgstr "類別" #: sphinx/domains/c.py:246 msgid "variable" -msgstr "" +msgstr "變數" + +#: sphinx/domains/cpp.py:4054 +msgid "Template Parameters" +msgstr "模版參數" -#: sphinx/domains/cpp.py:2411 sphinx/domains/javascript.py:125 +#: sphinx/domains/cpp.py:4057 sphinx/domains/javascript.py:125 msgid "Throws" -msgstr "" +msgstr "丟出" -#: sphinx/domains/cpp.py:2518 +#: sphinx/domains/cpp.py:4205 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ 類別)" -#: sphinx/domains/cpp.py:2531 +#: sphinx/domains/cpp.py:4216 +#, python-format +msgid "%s (C++ concept)" +msgstr "%s (C++ concept)" + +#: sphinx/domains/cpp.py:4227 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ 成員)" -#: sphinx/domains/cpp.py:2543 +#: sphinx/domains/cpp.py:4238 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ 函式)" -#: sphinx/domains/cpp.py:2555 +#: sphinx/domains/cpp.py:4249 #, python-format msgid "%s (C++ class)" -msgstr "" +msgstr "%s (C++ 類別)" -#: sphinx/domains/cpp.py:2579 +#: sphinx/domains/cpp.py:4260 #, python-format msgid "%s (C++ enum)" -msgstr "" +msgstr "%s (C++ enum)" -#: sphinx/domains/cpp.py:2617 +#: sphinx/domains/cpp.py:4281 #, python-format msgid "%s (C++ enumerator)" -msgstr "" +msgstr "%s (C++ enumerator)" -#: sphinx/domains/cpp.py:2679 sphinx/domains/javascript.py:165 -#: sphinx/domains/python.py:589 +#: sphinx/domains/cpp.py:4417 sphinx/domains/javascript.py:165 +#: sphinx/domains/python.py:616 msgid "class" -msgstr "" +msgstr "類別" + +#: sphinx/domains/cpp.py:4421 +msgid "concept" +msgstr "concept" -#: sphinx/domains/cpp.py:2683 +#: sphinx/domains/cpp.py:4422 msgid "enum" -msgstr "" +msgstr "enum" -#: sphinx/domains/cpp.py:2684 +#: sphinx/domains/cpp.py:4423 msgid "enumerator" -msgstr "" +msgstr "enumerator" -#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:280 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:307 #, python-format msgid "%s() (built-in function)" msgstr "%s() (內建函式)" -#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:344 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:371 #, python-format msgid "%s() (%s method)" -msgstr "%s() (%s 方法)" +msgstr "%s() (%s 的方法)" #: sphinx/domains/javascript.py:109 #, python-format msgid "%s() (class)" -msgstr "" +msgstr "%s() (類別)" #: sphinx/domains/javascript.py:111 #, python-format msgid "%s (global variable or constant)" -msgstr "" +msgstr "%s (全域變數或常數)" -#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:382 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:409 #, python-format msgid "%s (%s attribute)" -msgstr "%s (%s 屬性)" +msgstr "%s (%s 的屬性)" #: sphinx/domains/javascript.py:122 msgid "Arguments" -msgstr "" +msgstr "引數" -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:588 +#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:615 msgid "data" -msgstr "" +msgstr "data" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:594 +#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:621 msgid "attribute" msgstr "屬性" -#: sphinx/domains/python.py:127 +#: sphinx/domains/python.py:154 msgid "Variables" -msgstr "" +msgstr "變數" -#: sphinx/domains/python.py:131 +#: sphinx/domains/python.py:158 msgid "Raises" -msgstr "" +msgstr "丟出" -#: sphinx/domains/python.py:281 sphinx/domains/python.py:338 -#: sphinx/domains/python.py:350 sphinx/domains/python.py:363 +#: sphinx/domains/python.py:308 sphinx/domains/python.py:365 +#: sphinx/domains/python.py:377 sphinx/domains/python.py:390 #, python-format msgid "%s() (in module %s)" -msgstr "%s() (在 %s 模組中)" +msgstr "%s() (於 %s 模組中)" -#: sphinx/domains/python.py:284 +#: sphinx/domains/python.py:311 #, python-format msgid "%s (built-in variable)" msgstr "%s (內建變數)" -#: sphinx/domains/python.py:285 sphinx/domains/python.py:376 +#: sphinx/domains/python.py:312 sphinx/domains/python.py:403 #, python-format msgid "%s (in module %s)" -msgstr "%s() (在 %s 模組中)" +msgstr "%s (於 %s 模組中)" -#: sphinx/domains/python.py:301 +#: sphinx/domains/python.py:328 #, python-format msgid "%s (built-in class)" msgstr "%s (內建類別)" -#: sphinx/domains/python.py:302 +#: sphinx/domains/python.py:329 #, python-format msgid "%s (class in %s)" -msgstr "" +msgstr "%s (%s 中的類別)" -#: sphinx/domains/python.py:342 +#: sphinx/domains/python.py:369 #, python-format msgid "%s() (%s.%s method)" -msgstr "%s() (%s.%s 方法)" +msgstr "%s() (%s.%s 的方法)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:381 #, python-format msgid "%s() (%s.%s static method)" -msgstr "%s() (%s.%s 靜態方法)" +msgstr "%s() (%s.%s 的靜態方法)" -#: sphinx/domains/python.py:357 +#: sphinx/domains/python.py:384 #, python-format msgid "%s() (%s static method)" -msgstr "%s() (%s 靜態方法)" +msgstr "%s() (%s 的靜態方法)" -#: sphinx/domains/python.py:367 +#: sphinx/domains/python.py:394 #, python-format msgid "%s() (%s.%s class method)" -msgstr "" +msgstr "%s() (%s.%s 的類別方法)" -#: sphinx/domains/python.py:370 +#: sphinx/domains/python.py:397 #, python-format msgid "%s() (%s class method)" -msgstr "" +msgstr "%s() (%s 的類別方法)" -#: sphinx/domains/python.py:380 +#: sphinx/domains/python.py:407 #, python-format msgid "%s (%s.%s attribute)" -msgstr "%s (%s.%s 屬性)" +msgstr "%s (%s.%s 的屬性)" -#: sphinx/domains/python.py:461 +#: sphinx/domains/python.py:488 #, python-format msgid "%s (module)" msgstr "%s (模組)" -#: sphinx/domains/python.py:518 +#: sphinx/domains/python.py:545 msgid "Python Module Index" -msgstr "" +msgstr "Python 模組索引" -#: sphinx/domains/python.py:519 +#: sphinx/domains/python.py:546 msgid "modules" msgstr "模組" -#: sphinx/domains/python.py:565 +#: sphinx/domains/python.py:592 msgid "Deprecated" -msgstr "已移除" +msgstr "已棄用" -#: sphinx/domains/python.py:590 sphinx/locale/__init__.py:181 +#: sphinx/domains/python.py:617 sphinx/locale/__init__.py:183 msgid "exception" msgstr "例外" -#: sphinx/domains/python.py:591 +#: sphinx/domains/python.py:618 msgid "method" -msgstr "" +msgstr "方法" -#: sphinx/domains/python.py:592 +#: sphinx/domains/python.py:619 msgid "class method" -msgstr "" +msgstr "類別方法" -#: sphinx/domains/python.py:593 +#: sphinx/domains/python.py:620 msgid "static method" msgstr "靜態方法" -#: sphinx/domains/python.py:595 sphinx/locale/__init__.py:177 +#: sphinx/domains/python.py:622 sphinx/locale/__init__.py:179 msgid "module" msgstr "模組" -#: sphinx/domains/python.py:760 +#: sphinx/domains/python.py:787 msgid " (deprecated)" -msgstr "" +msgstr "(已棄用)" #: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" -msgstr "" +msgstr "%s (directive)" #: sphinx/domains/rst.py:57 #, python-format msgid "%s (role)" -msgstr "" +msgstr "%s (role)" #: sphinx/domains/rst.py:106 msgid "directive" -msgstr "" +msgstr "directive" #: sphinx/domains/rst.py:107 msgid "role" -msgstr "" +msgstr "role" -#: sphinx/domains/std.py:73 sphinx/domains/std.py:89 +#: sphinx/domains/std.py:72 sphinx/domains/std.py:88 #, python-format msgid "environment variable; %s" msgstr "環境變數; %s" -#: sphinx/domains/std.py:185 +#: sphinx/domains/std.py:186 #, python-format msgid "%scommand line option; %s" msgstr "%s命令列選項; %s" -#: sphinx/domains/std.py:443 +#: sphinx/domains/std.py:434 msgid "glossary term" -msgstr "" +msgstr "雜項術語" -#: sphinx/domains/std.py:444 +#: sphinx/domains/std.py:435 msgid "grammar token" -msgstr "" +msgstr "語法單詞" -#: sphinx/domains/std.py:445 +#: sphinx/domains/std.py:436 msgid "reference label" -msgstr "" +msgstr "參照標籤" -#: sphinx/domains/std.py:447 +#: sphinx/domains/std.py:438 msgid "environment variable" msgstr "環境變數" -#: sphinx/domains/std.py:448 +#: sphinx/domains/std.py:439 msgid "program option" -msgstr "" +msgstr "程式選項" -#: sphinx/domains/std.py:481 sphinx/themes/basic/genindex-single.html:32 -#: sphinx/themes/basic/genindex-single.html:57 +#: sphinx/domains/std.py:473 sphinx/themes/basic/genindex-single.html:30 +#: sphinx/themes/basic/genindex-single.html:55 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: 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:201 sphinx/writers/texinfo.py:479 +#: sphinx/themes/basic/genindex.html:30 sphinx/themes/basic/genindex.html:33 +#: sphinx/themes/basic/genindex.html:66 sphinx/themes/basic/layout.html:135 +#: sphinx/writers/latex.py:381 sphinx/writers/texinfo.py:480 msgid "Index" msgstr "索引" -#: sphinx/domains/std.py:482 +#: sphinx/domains/std.py:474 msgid "Module Index" msgstr "模組索引" -#: sphinx/domains/std.py:483 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:475 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "搜尋頁面" -#: sphinx/ext/autodoc.py:1139 +#: sphinx/environment/managers/indexentries.py:104 #, python-format -msgid " Bases: %s" -msgstr "" +msgid "see %s" +msgstr "參考 %s" -#: sphinx/ext/autodoc.py:1181 +#: sphinx/environment/managers/indexentries.py:108 +#, python-format +msgid "see also %s" +msgstr "亦參考 %s" + +#: sphinx/environment/managers/indexentries.py:168 +msgid "Symbols" +msgstr "符號" + +#: sphinx/ext/autodoc.py:1297 +#, python-format +msgid "Bases: %s" +msgstr "基礎類別:%s" + +#: sphinx/ext/autodoc.py:1350 #, python-format msgid "alias of :class:`%s`" -msgstr "" +msgstr ":class:`%s` 的別名" -#: sphinx/ext/graphviz.py:293 sphinx/ext/graphviz.py:301 +#: sphinx/ext/graphviz.py:331 sphinx/ext/graphviz.py:340 #, python-format msgid "[graph: %s]" -msgstr "" +msgstr "[圖:%s]" -#: sphinx/ext/graphviz.py:295 sphinx/ext/graphviz.py:303 +#: sphinx/ext/graphviz.py:333 sphinx/ext/graphviz.py:342 msgid "[graph]" -msgstr "" +msgstr "[圖]" + +#: sphinx/ext/imgmath.py:258 sphinx/ext/jsmath.py:39 sphinx/ext/mathjax.py:40 +msgid "Permalink to this equation" +msgstr "本公式的永久連結" -#: sphinx/ext/intersphinx.py:257 +#: sphinx/ext/intersphinx.py:337 #, python-format msgid "(in %s v%s)" -msgstr "" +msgstr "(於 %s v%s)" -#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:99 +#: sphinx/ext/linkcode.py:69 sphinx/ext/viewcode.py:103 msgid "[source]" -msgstr "" +msgstr "[原始碼]" -#: sphinx/ext/todo.py:43 +#: sphinx/ext/mathbase.py:92 +#, python-format +msgid "duplicate label of equation %s, other instance in %s" +msgstr "重覆公式標籤 %s,亦出現於 %s" + +#: sphinx/ext/todo.py:56 msgid "Todo" -msgstr "待辦" +msgstr "Todo" + +#: sphinx/ext/todo.py:134 +msgid "<<original entry>>" +msgstr "<<original entry>>" -#: sphinx/ext/todo.py:113 +#: sphinx/ext/todo.py:137 #, python-format -msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "" +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(<<original entry>> 見 %s ,第 %d 行)" -#: sphinx/ext/todo.py:122 +#: sphinx/ext/todo.py:146 msgid "original entry" -msgstr "" +msgstr "原始記錄" -#: sphinx/ext/viewcode.py:158 +#: sphinx/ext/viewcode.py:166 msgid "[docs]" -msgstr "" +msgstr "[文件]" -#: sphinx/ext/viewcode.py:172 +#: sphinx/ext/viewcode.py:180 msgid "Module code" -msgstr "" +msgstr "模組原始碼" -#: sphinx/ext/viewcode.py:178 +#: sphinx/ext/viewcode.py:186 #, python-format msgid "<h1>Source code for %s</h1>" -msgstr "" +msgstr "<h1>%s 的原始碼</h1>" -#: sphinx/ext/viewcode.py:204 +#: sphinx/ext/viewcode.py:212 msgid "Overview: module code" -msgstr "" +msgstr "概要:模組原始碼" -#: sphinx/ext/viewcode.py:205 +#: sphinx/ext/viewcode.py:213 msgid "<h1>All modules for which code is available</h1>" -msgstr "" +msgstr "<h1>所有可得程式碼的模組</h1>" -#: sphinx/locale/__init__.py:157 +#: sphinx/ext/napoleon/__init__.py:313 +msgid "Keyword Arguments" +msgstr "關鍵字引數" + +#: sphinx/locale/__init__.py:159 msgid "Attention" msgstr "注意" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:160 msgid "Caution" msgstr "警示" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:161 msgid "Danger" msgstr "危險" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:162 msgid "Error" msgstr "錯誤" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:163 msgid "Hint" msgstr "提示" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:164 msgid "Important" msgstr "重要" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:165 msgid "Note" -msgstr "註解" +msgstr "備註" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:166 msgid "See also" -msgstr "" +msgstr "亦參考" -#: sphinx/locale/__init__.py:165 +#: sphinx/locale/__init__.py:167 msgid "Tip" -msgstr "小技巧" +msgstr "小訣竅" -#: sphinx/locale/__init__.py:166 +#: sphinx/locale/__init__.py:168 msgid "Warning" msgstr "警告" -#: sphinx/locale/__init__.py:170 +#: sphinx/locale/__init__.py:172 #, python-format msgid "New in version %s" -msgstr "%s 版新功能" +msgstr "%s 版新加入" -#: sphinx/locale/__init__.py:171 +#: sphinx/locale/__init__.py:173 #, python-format msgid "Changed in version %s" -msgstr "在 %s 版改變" +msgstr "%s 版更變" -#: sphinx/locale/__init__.py:172 +#: sphinx/locale/__init__.py:174 #, python-format msgid "Deprecated since version %s" -msgstr "%s 版後已移除" +msgstr "%s 版後已棄用" -#: sphinx/locale/__init__.py:178 +#: sphinx/locale/__init__.py:180 msgid "keyword" msgstr "關鍵字" -#: sphinx/locale/__init__.py:179 +#: sphinx/locale/__init__.py:181 msgid "operator" msgstr "運算子" -#: sphinx/locale/__init__.py:180 +#: sphinx/locale/__init__.py:182 msgid "object" msgstr "物件" -#: sphinx/locale/__init__.py:182 +#: sphinx/locale/__init__.py:184 msgid "statement" -msgstr "" +msgstr "陳述式" -#: sphinx/locale/__init__.py:183 +#: sphinx/locale/__init__.py:185 msgid "built-in function" msgstr "內建函式" #: sphinx/themes/agogo/layout.html:46 sphinx/themes/basic/globaltoc.html:10 #: sphinx/themes/basic/localtoc.html:11 sphinx/themes/scrolls/layout.html:35 msgid "Table Of Contents" -msgstr "內容目錄" +msgstr "目錄" -#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/agogo/layout.html:51 sphinx/themes/basic/layout.html:138 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:23 #: sphinx/themes/basic/searchresults.html:10 msgid "Search" @@ -584,118 +622,114 @@ msgstr "搜尋" #: sphinx/themes/agogo/layout.html:54 sphinx/themes/basic/searchbox.html:15 msgid "Go" -msgstr "" +msgstr "前往" -#: sphinx/themes/agogo/layout.html:59 sphinx/themes/basic/searchbox.html:20 -msgid "Enter search terms or a module, class or function name." -msgstr "" - -#: sphinx/themes/agogo/layout.html:84 sphinx/themes/basic/sourcelink.html:15 +#: sphinx/themes/agogo/layout.html:81 sphinx/themes/basic/sourcelink.html:15 msgid "Show Source" msgstr "顯示原始碼" #: sphinx/themes/basic/defindex.html:11 msgid "Overview" -msgstr "" +msgstr "概要" #: sphinx/themes/basic/defindex.html:15 msgid "Welcome! This is" -msgstr "" +msgstr "歡迎!本" #: sphinx/themes/basic/defindex.html:16 msgid "the documentation for" -msgstr "" +msgstr "說明文件介紹" #: sphinx/themes/basic/defindex.html:17 msgid "last updated" -msgstr "" +msgstr "最後更新於" #: sphinx/themes/basic/defindex.html:20 msgid "Indices and tables:" -msgstr "" +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" -msgstr "" +msgstr "列出所有段落與子段落" #: sphinx/themes/basic/defindex.html:26 msgid "search this documentation" -msgstr "" +msgstr "搜尋本說明文件" #: sphinx/themes/basic/defindex.html:28 msgid "Global Module Index" -msgstr "" +msgstr "全域模組索引" #: sphinx/themes/basic/defindex.html:29 msgid "quick access to all modules" -msgstr "" +msgstr "快速前往所有的模組" #: sphinx/themes/basic/defindex.html:31 msgid "all functions, classes, terms" -msgstr "" +msgstr "所有函式、類別、術語" -#: sphinx/themes/basic/genindex-single.html:35 +#: sphinx/themes/basic/genindex-single.html:33 #, python-format msgid "Index – %(key)s" -msgstr "" +msgstr "索引 – %(key)s" -#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-single.html:61 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:74 +#: sphinx/themes/basic/genindex.html:72 msgid "Full index on one page" -msgstr "" +msgstr "單頁完整索引" #: sphinx/themes/basic/genindex-split.html:16 msgid "Index pages by letter" -msgstr "" +msgstr "索引頁面按字母" #: sphinx/themes/basic/genindex-split.html:25 msgid "can be huge" -msgstr "" +msgstr "可能會很大" #: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "瀏覽" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:123 #, python-format msgid "Search within %(docstitle)s" msgstr "在 %(docstitle)s 中搜尋" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:132 msgid "About these documents" -msgstr "" +msgstr "關於這些文件" -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:141 msgid "Copyright" msgstr "版權所有" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:186 #, python-format -msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." -msgstr "" +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "© <a href=\"%(path)s\">版權所有</a> %(copyright)s。" -#: sphinx/themes/basic/layout.html:191 +#: sphinx/themes/basic/layout.html:188 #, python-format -msgid "© Copyright %(copyright)s." -msgstr "" +msgid "© Copyright %(copyright)s." +msgstr "© 版權所有 %(copyright)s。" -#: sphinx/themes/basic/layout.html:195 +#: sphinx/themes/basic/layout.html:192 #, python-format msgid "Last updated on %(last_updated)s." -msgstr "最後更新日期是 %(last_updated)s." +msgstr "最後更新於 %(last_updated)s。" -#: sphinx/themes/basic/layout.html:198 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "" "Created using <a href=\"http://sphinx-doc.org/\">Sphinx</a> " "%(sphinx_version)s." -msgstr "" +msgstr "使用 <a href=\"http://sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s 創建。" #: sphinx/themes/basic/opensearch.xml:4 #, python-format @@ -722,7 +756,7 @@ msgstr "下一章" msgid "" "Please activate JavaScript to enable the search\n" " functionality." -msgstr "" +msgstr "請啟用 Javascript 以開啟搜尋功能。" #: sphinx/themes/basic/search.html:32 msgid "" @@ -730,7 +764,7 @@ msgid "" " words into the box below and click \"search\". Note that the search\n" " function will automatically search for all of the words. Pages\n" " containing fewer words won't appear in the result list." -msgstr "" +msgstr "你可以從這裡搜尋文件。輸入搜尋詞至底下的文字框並點擊「搜尋」。注意搜尋功能會自動尋找滿足所有詞的結果。只滿足少部份搜尋詞的頁面將不予顯示在結果清單中。" #: sphinx/themes/basic/search.html:39 #: sphinx/themes/basic/searchresults.html:17 @@ -739,17 +773,17 @@ msgstr "搜尋" #: sphinx/themes/basic/search.html:43 #: sphinx/themes/basic/searchresults.html:21 -#: sphinx/themes/basic/static/searchtools.js_t:281 +#: sphinx/themes/basic/static/searchtools.js_t:287 msgid "Search Results" msgstr "搜尋結果" #: sphinx/themes/basic/search.html:45 #: sphinx/themes/basic/searchresults.html:23 -#: sphinx/themes/basic/static/searchtools.js_t:283 +#: sphinx/themes/basic/static/searchtools.js_t:289 msgid "" "Your search did not match any documents. Please make sure that all words are" " spelled correctly and that you've selected enough categories." -msgstr "" +msgstr "你的搜尋找不到任何滿足條件的文件。請確定是否所有的搜尋詞都正確地拼寫且你已選擇足夠的分類。" #: sphinx/themes/basic/searchbox.html:12 msgid "Quick search" @@ -762,22 +796,22 @@ msgstr "本頁" #: 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 "" +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "於 %(version)s 版本中的所有更變 — %(docstitle)s" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format -msgid "%(filename)s — %(docstitle)s" -msgstr "" +msgid "%(filename)s — %(docstitle)s" +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 "" +msgstr "自動產生的 %(version)s 版本改變列表" #: sphinx/themes/basic/changes/versionchanges.html:18 msgid "Library changes" -msgstr "" +msgstr "函式庫的改變" #: sphinx/themes/basic/changes/versionchanges.html:23 msgid "C API changes" @@ -785,89 +819,99 @@ msgstr "C API 改變" #: sphinx/themes/basic/changes/versionchanges.html:25 msgid "Other changes" -msgstr "其他改變:" +msgstr "其他改變" -#: sphinx/themes/basic/static/doctools.js:166 sphinx/writers/html.py:610 -#: sphinx/writers/html.py:615 +#: sphinx/themes/basic/static/doctools.js_t:169 sphinx/writers/html.py:708 +#: sphinx/writers/html.py:713 msgid "Permalink to this headline" -msgstr "" +msgstr "本標題的永久連結" -#: sphinx/themes/basic/static/doctools.js:172 sphinx/writers/html.py:107 +#: sphinx/themes/basic/static/doctools.js_t:175 sphinx/writers/html.py:108 +#: sphinx/writers/html.py:117 msgid "Permalink to this definition" -msgstr "" +msgstr "本定義的永久連結" -#: sphinx/themes/basic/static/doctools.js:205 +#: sphinx/themes/basic/static/doctools.js_t:208 msgid "Hide Search Matches" -msgstr "" +msgstr "隱藏吻合搜尋的上色" -#: sphinx/themes/basic/static/searchtools.js_t:119 +#: sphinx/themes/basic/static/searchtools.js_t:121 msgid "Searching" -msgstr "" +msgstr "搜尋中" -#: sphinx/themes/basic/static/searchtools.js_t:124 +#: sphinx/themes/basic/static/searchtools.js_t:126 msgid "Preparing search..." -msgstr "" +msgstr "準備搜尋中…" -#: sphinx/themes/basic/static/searchtools.js_t:285 +#: sphinx/themes/basic/static/searchtools.js_t:291 #, python-format msgid "Search finished, found %s page(s) matching the search query." -msgstr "" +msgstr "搜尋完成,共找到 %s 頁面滿足搜尋條件。" -#: sphinx/themes/basic/static/searchtools.js_t:337 +#: sphinx/themes/basic/static/searchtools.js_t:344 msgid ", in " -msgstr "" +msgstr " 於 " #: sphinx/themes/classic/static/sidebar.js_t:83 msgid "Expand sidebar" -msgstr "" +msgstr "展開側邊欄" #: sphinx/themes/classic/static/sidebar.js_t:96 #: sphinx/themes/classic/static/sidebar.js_t:124 msgid "Collapse sidebar" -msgstr "" +msgstr "收合側邊欄" #: sphinx/themes/haiku/layout.html:24 msgid "Contents" -msgstr "" +msgstr "內容" -#: sphinx/writers/html.py:334 +#: sphinx/writers/html.py:389 msgid "Permalink to this code" -msgstr "" +msgstr "本原始碼的永久連結" -#: sphinx/writers/html.py:337 +#: sphinx/writers/html.py:393 msgid "Permalink to this image" -msgstr "" +msgstr "本圖片的永久連結" -#: sphinx/writers/html.py:339 +#: sphinx/writers/html.py:395 msgid "Permalink to this toctree" -msgstr "" +msgstr "本目錄的永久連結" -#: sphinx/writers/html.py:619 +#: sphinx/writers/html.py:717 msgid "Permalink to this table" -msgstr "" +msgstr "本表格的永久連結" -#: sphinx/writers/latex.py:199 +#: sphinx/writers/latex.py:380 msgid "Release" msgstr "釋出" -#: sphinx/writers/latex.py:697 sphinx/writers/manpage.py:177 -#: sphinx/writers/texinfo.py:616 +#: sphinx/writers/latex.py:483 +msgid "page" +msgstr "頁" + +#: sphinx/writers/latex.py:528 +#, python-format +msgid "Unknown configure key: latex_elements[%r] is ignored." +msgstr "未知設定鍵:latex_elements[%r] 將被忽略。" + +#: sphinx/writers/latex.py:1003 sphinx/writers/manpage.py:238 +#: sphinx/writers/texinfo.py:619 msgid "Footnotes" -msgstr "" +msgstr "腳註" -#: sphinx/writers/latex.py:785 +#: sphinx/writers/latex.py:1112 msgid "continued from previous page" -msgstr "" +msgstr "呈接上一頁" -#: sphinx/writers/latex.py:791 +#: sphinx/writers/latex.py:1118 msgid "Continued on next page" -msgstr "" +msgstr "下一頁繼續" -#: sphinx/writers/manpage.py:223 sphinx/writers/text.py:541 +#: sphinx/writers/manpage.py:287 sphinx/writers/text.py:591 #, python-format msgid "[image: %s]" -msgstr "" +msgstr "[圖片:%s]" -#: sphinx/writers/manpage.py:224 sphinx/writers/text.py:542 +#: sphinx/writers/manpage.py:288 sphinx/writers/text.py:592 msgid "[image]" msgstr "[圖片]" diff --git a/sphinx/make_mode.py b/sphinx/make_mode.py index 7d239f51c4b..7751b8b4018 100644 --- a/sphinx/make_mode.py +++ b/sphinx/make_mode.py @@ -11,86 +11,91 @@ This is in its own module so that importing it is fast. It should not import the main Sphinx modules (like sphinx.applications, sphinx.builders). - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import print_function import os import sys -import shutil from os import path from subprocess import call import sphinx -from sphinx.util.console import bold, blue -from sphinx.util.osutil import cd +from sphinx.util.console import bold, blue # type: ignore +from sphinx.util.osutil import cd, rmtree proj_name = os.getenv('SPHINXPROJ', '<project>') BUILDERS = [ - ("", "html", "to make standalone HTML files"), - ("", "dirhtml", "to make HTML files named index.html in directories"), - ("", "singlehtml", "to make a single large HTML file"), - ("", "pickle", "to make pickle files"), - ("", "json", "to make JSON files"), - ("", "htmlhelp", "to make HTML files and a HTML help project"), - ("", "qthelp", "to make HTML files and a qthelp project"), - ("", "devhelp", "to make HTML files and a Devhelp project"), - ("", "epub", "to make an epub"), - ("", "latex", "to make LaTeX files, you can set PAPER=a4 or PAPER=letter"), - ("posix", "latexpdf", "to make LaTeX files and run them through pdflatex"), - ("posix", "latexpdfja", "to make LaTeX files and run them through platex/dvipdfmx"), - ("", "text", "to make text files"), - ("", "man", "to make manual pages"), - ("", "texinfo", "to make Texinfo files"), - ("posix", "info", "to make Texinfo files and run them through makeinfo"), - ("", "gettext", "to make PO message catalogs"), - ("", "changes", "to make an overview of all changed/added/deprecated items"), - ("", "xml", "to make Docutils-native XML files"), - ("", "pseudoxml", "to make pseudoxml-XML files for display purposes"), - ("", "linkcheck", "to check all external links for integrity"), - ("", "doctest", "to run all doctests embedded in the documentation " - "(if enabled)"), - ("", "coverage", "to run coverage check of the documentation (if enabled)"), + ("", "html", "to make standalone HTML files"), + ("", "dirhtml", "to make HTML files named index.html in directories"), + ("", "singlehtml", "to make a single large HTML file"), + ("", "pickle", "to make pickle files"), + ("", "json", "to make JSON files"), + ("", "htmlhelp", "to make HTML files and an HTML help project"), + ("", "qthelp", "to make HTML files and a qthelp project"), + ("", "devhelp", "to make HTML files and a Devhelp project"), + ("", "epub", "to make an epub"), + ("", "latex", "to make LaTeX files, you can set PAPER=a4 or PAPER=letter"), + ("posix", "latexpdf", "to make LaTeX and PDF files (default pdflatex)"), + ("posix", "latexpdfja", "to make LaTeX files and run them through platex/dvipdfmx"), + ("", "text", "to make text files"), + ("", "man", "to make manual pages"), + ("", "texinfo", "to make Texinfo files"), + ("posix", "info", "to make Texinfo files and run them through makeinfo"), + ("", "gettext", "to make PO message catalogs"), + ("", "changes", "to make an overview of all changed/added/deprecated items"), + ("", "xml", "to make Docutils-native XML files"), + ("", "pseudoxml", "to make pseudoxml-XML files for display purposes"), + ("", "linkcheck", "to check all external links for integrity"), + ("", "doctest", "to run all doctests embedded in the documentation " + "(if enabled)"), + ("", "coverage", "to run coverage check of the documentation (if enabled)"), ] class Make(object): def __init__(self, srcdir, builddir, opts): + # type: (unicode, unicode, List[unicode]) -> None self.srcdir = srcdir self.builddir = builddir self.opts = opts def builddir_join(self, *comps): + # type: (unicode) -> unicode return path.join(self.builddir, *comps) def build_clean(self): + # type: () -> int if not path.exists(self.builddir): - return + return 0 elif not path.isdir(self.builddir): print("Error: %r is not a directory!" % self.builddir) return 1 print("Removing everything under %r..." % self.builddir) for item in os.listdir(self.builddir): - shutil.rmtree(self.builddir_join(item)) + rmtree(self.builddir_join(item)) def build_help(self): + # type: () -> None print(bold("Sphinx v%s" % sphinx.__display_version__)) - print("Please use `make %s' where %s is one of" % ((blue('target'),)*2)) + print("Please use `make %s' where %s is one of" % ((blue('target'),)*2)) # type: ignore # NOQA for osname, bname, description in BUILDERS: if not osname or os.name == osname: print(' %s %s' % (blue(bname.ljust(10)), description)) def build_html(self): + # type: () -> int if self.run_generic_build('html') > 0: return 1 print() print('Build finished. The HTML pages are in %s.' % self.builddir_join('html')) def build_dirhtml(self): + # type: () -> int if self.run_generic_build('dirhtml') > 0: return 1 print() @@ -98,6 +103,7 @@ def build_dirhtml(self): self.builddir_join('dirhtml')) def build_singlehtml(self): + # type: () -> int if self.run_generic_build('singlehtml') > 0: return 1 print() @@ -105,18 +111,21 @@ def build_singlehtml(self): self.builddir_join('singlehtml')) def build_pickle(self): + # type: () -> int if self.run_generic_build('pickle') > 0: return 1 print() print('Build finished; now you can process the pickle files.') def build_json(self): + # type: () -> int if self.run_generic_build('json') > 0: return 1 print() print('Build finished; now you can process the JSON files.') def build_htmlhelp(self): + # type: () -> int if self.run_generic_build('htmlhelp') > 0: return 1 print() @@ -124,6 +133,7 @@ def build_htmlhelp(self): '.hhp project file in %s.' % self.builddir_join('htmlhelp')) def build_qthelp(self): + # type: () -> int if self.run_generic_build('qthelp') > 0: return 1 print() @@ -135,6 +145,7 @@ def build_qthelp(self): self.builddir_join('qthelp', proj_name)) def build_devhelp(self): + # type: () -> int if self.run_generic_build('devhelp') > 0: return 1 print() @@ -146,12 +157,14 @@ def build_devhelp(self): print("$ devhelp") def build_epub(self): + # type: () -> int if self.run_generic_build('epub') > 0: return 1 print() print('Build finished. The ePub file is in %s.' % self.builddir_join('epub')) def build_latex(self): + # type: () -> int if self.run_generic_build('latex') > 0: return 1 print("Build finished; the LaTeX files are in %s." % self.builddir_join('latex')) @@ -160,24 +173,28 @@ def build_latex(self): print("(use `make latexpdf' here to do that automatically).") def build_latexpdf(self): + # type: () -> int if self.run_generic_build('latex') > 0: return 1 with cd(self.builddir_join('latex')): os.system('make all-pdf') def build_latexpdfja(self): + # type: () -> int if self.run_generic_build('latex') > 0: return 1 with cd(self.builddir_join('latex')): os.system('make all-pdf-ja') def build_text(self): + # type: () -> int if self.run_generic_build('text') > 0: return 1 print() print('Build finished. The text files are in %s.' % self.builddir_join('text')) def build_texinfo(self): + # type: () -> int if self.run_generic_build('texinfo') > 0: return 1 print("Build finished; the Texinfo files are in %s." % @@ -187,12 +204,14 @@ def build_texinfo(self): print("(use `make info' here to do that automatically).") def build_info(self): + # type: () -> int if self.run_generic_build('texinfo') > 0: return 1 with cd(self.builddir_join('texinfo')): os.system('make info') def build_gettext(self): + # type: () -> int dtdir = self.builddir_join('gettext', '.doctrees') if self.run_generic_build('gettext', doctreedir=dtdir) > 0: return 1 @@ -201,6 +220,7 @@ def build_gettext(self): self.builddir_join('gettext')) def build_changes(self): + # type: () -> int if self.run_generic_build('changes') > 0: return 1 print() @@ -208,6 +228,7 @@ def build_changes(self): self.builddir_join('changes')) def build_linkcheck(self): + # type: () -> int res = self.run_generic_build('linkcheck') print() print('Link check complete; look for any errors in the above output ' @@ -215,12 +236,14 @@ def build_linkcheck(self): return res def build_doctest(self): + # type: () -> int res = self.run_generic_build('doctest') print("Testing of doctests in the sources finished, look at the " "results in %s." % self.builddir_join('doctest', 'output.txt')) return res def build_coverage(self): + # type: () -> int if self.run_generic_build('coverage') > 0: print("Has the coverage extension been enabled?") return 1 @@ -229,12 +252,14 @@ def build_coverage(self): "results in %s." % self.builddir_join('coverage')) def build_xml(self): + # type: () -> int if self.run_generic_build('xml') > 0: return 1 print() print('Build finished. The XML files are in %s.' % self.builddir_join('xml')) def build_pseudoxml(self): + # type: () -> int if self.run_generic_build('pseudoxml') > 0: return 1 print() @@ -242,6 +267,7 @@ def build_pseudoxml(self): self.builddir_join('pseudoxml')) def run_generic_build(self, builder, doctreedir=None): + # type: (unicode, unicode) -> int # compatibility with old Makefile papersize = os.getenv('PAPER', '') opts = self.opts @@ -262,11 +288,12 @@ def run_generic_build(self, builder, doctreedir=None): # linux, mac: 'sphinx-build' or 'sphinx-build.py' cmd = [sys.executable, orig_cmd] - return call(cmd + ['-b', builder] + opts + - ['-d', doctreedir, self.srcdir, self.builddir_join(builder)]) + return call(cmd + ['-b', builder] + opts + # type: ignore + ['-d', doctreedir, self.srcdir, self.builddir_join(builder)]) # type: ignore # NOQA def run_make_mode(args): + # type: (List[unicode]) -> int if len(args) < 3: print('Error: at least 3 arguments (builder, source ' 'dir, build dir) are required.', file=sys.stderr) diff --git a/sphinx/parsers.py b/sphinx/parsers.py new file mode 100644 index 00000000000..926de9f1cb0 --- /dev/null +++ b/sphinx/parsers.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +""" + sphinx.parsers + ~~~~~~~~~~~~~~ + + A Base class for additional parsers. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import docutils.parsers + + +class Parser(docutils.parsers.Parser): + """ + A base class of source parsers. The additonal parsers should inherits this class instead + of ``docutils.parsers.Parser``. Compared with ``docutils.parsers.Parser``, this class + improves accessibility to Sphinx APIs. + + The subclasses can access following objects and functions: + + self.app + The application object (:class:`sphinx.application.Sphinx`) + self.config + The config object (:class:`sphinx.config.Config`) + self.env + The environment object (:class:`sphinx.environment.BuildEnvironment`) + self.warn() + Emit a warning. (Same as :meth:`sphinx.application.Sphinx.warn()`) + self.info() + Emit a informational message. (Same as :meth:`sphinx.application.Sphinx.info()`) + """ + + def set_application(self, app): + """set_application will be called from Sphinx to set app and other instance variables + + :param sphinx.application.Sphinx app: Sphinx application object + """ + self.app = app + self.config = app.config + self.env = app.env + self.warn = app.warn + self.info = app.info diff --git a/sphinx/pycode/Grammar-py3.txt b/sphinx/pycode/Grammar-py3.txt index 083b5f91ea1..d05b758eebd 100644 --- a/sphinx/pycode/Grammar-py3.txt +++ b/sphinx/pycode/Grammar-py3.txt @@ -1,4 +1,5 @@ -# Grammar for Python 3.x (with at least x <= 4) +# Grammar for Python 3.x (with at least x <= 5) + # IMPORTANT: when copying over a new Grammar file, make sure file_input # is the first nonterminal in the file! @@ -14,8 +15,11 @@ eval_input: testlist NEWLINE* ENDMARKER decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE decorators: decorator+ -decorated: decorators (classdef | funcdef) +decorated: decorators (classdef | funcdef | async_funcdef) + +async_funcdef: ASYNC funcdef funcdef: 'def' NAME parameters ['->' test] ':' suite + parameters: '(' [typedargslist] ')' typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' ['*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef]] @@ -33,7 +37,7 @@ small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt | expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) | ('=' (yield_expr|testlist_star_expr))*) testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] -augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | +augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>>=' | '**=' | '//=') # For normal assignments, additional restrictions enforced by the interpreter del_stmt: 'del' exprlist @@ -58,7 +62,8 @@ global_stmt: 'global' NAME (',' NAME)* nonlocal_stmt: 'nonlocal' NAME (',' NAME)* assert_stmt: 'assert' test [',' test] -compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt +async_stmt: ASYNC (funcdef | with_stmt | for_stmt) if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] while_stmt: 'while' test ':' suite ['else' ':' suite] for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] @@ -82,7 +87,7 @@ and_test: not_test ('and' not_test)* not_test: 'not' not_test | comparison comparison: expr (comp_op expr)* # <> isn't actually a valid comparison operator in Python. It's here for the -# sake of a __future__ import described in PEP 401 +# sake of a __future__ import described in PEP 401 (which really works :-) comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' star_expr: '*' expr expr: xor_expr ('|' xor_expr)* @@ -90,9 +95,9 @@ xor_expr: and_expr ('^' and_expr)* and_expr: shift_expr ('&' shift_expr)* shift_expr: arith_expr (('<<'|'>>') arith_expr)* arith_expr: term (('+'|'-') term)* -term: factor (('*'|'/'|'%'|'//') factor)* +term: factor (('*'|'@'|'/'|'%'|'//') factor)* factor: ('+'|'-'|'~') factor | power -power: atom trailer* ['**' factor] +power: [AWAIT] atom trailer* ['**' factor] atom: ('(' [yield_expr|testlist_comp] ')' | '[' [testlist_comp] ']' | '{' [dictorsetmaker] '}' | @@ -104,17 +109,29 @@ subscript: test | [test] ':' [test] [sliceop] sliceop: ':' [test] exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] testlist: test (',' test)* [','] -dictorsetmaker: ( (test ':' test (comp_for | (',' test ':' test)* [','])) | - (test (comp_for | (',' test)* [','])) ) +dictorsetmaker: ( ((test ':' test | '**' expr) + (comp_for | (',' (test ':' test | '**' expr))* [','])) | + ((test | star_expr) + (comp_for | (',' (test | star_expr))* [','])) ) classdef: 'class' NAME ['(' [arglist] ')'] ':' suite -arglist: (argument ',')* (argument [','] - |'*' test (',' argument)* [',' '**' test] - |'**' test) +arglist: argument (',' argument)* [','] + # The reason that keywords are test nodes instead of NAME is that using NAME # results in an ambiguity. ast.c makes sure it's a NAME. -argument: test [comp_for] | test '=' test # Really [keyword '='] test +# "test '=' test" is really "keyword '=' test", but we have no such token. +# These need to be in a single rule to avoid grammar that is ambiguous +# to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, +# we explicitly match '*' here, too, to give it proper precedence. +# Illegal combinations and orderings are blocked in ast.c: +# multiple (test comp_for) arguements are blocked; keyword unpackings +# that precede iterable unpackings are blocked; etc. +argument: ( test [comp_for] | + test '=' test | + '**' test | + '*' test ) + comp_iter: comp_for | comp_if comp_for: 'for' exprlist 'in' or_test [comp_iter] comp_if: 'if' test_nocond [comp_iter] diff --git a/sphinx/pycode/__init__.py b/sphinx/pycode/__init__.py index 57707e9d0aa..2c898560b8f 100644 --- a/sphinx/pycode/__init__.py +++ b/sphinx/pycode/__init__.py @@ -5,7 +5,7 @@ Utilities parsing and analyzing Python code. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import print_function @@ -24,6 +24,10 @@ from sphinx.util.pycompat import TextIOWrapper from sphinx.util.docstrings import prepare_docstring, prepare_commentdoc +if False: + # For type annotation + from typing import Any, Tuple # NOQA + # load the Python grammar _grammarfile = path.join(package_dir, 'pycode', @@ -33,8 +37,10 @@ # an object with attributes corresponding to token and symbol names -class sym: +class sym(object): pass + + for k, v in iteritems(pygrammar.symbol2number): setattr(sym, k, v) for k, v in iteritems(token.tok_name): @@ -61,10 +67,10 @@ def init(self, scope, encoding): self.scope = scope self.in_init = 0 self.encoding = encoding - self.namespace = [] - self.collected = {} + self.namespace = [] # type: List[unicode] + self.collected = {} # type: Dict[Tuple[unicode, unicode], unicode] self.tagnumber = 0 - self.tagorder = {} + self.tagorder = {} # type: Dict[unicode, int] def add_tag(self, name): name = '.'.join(self.namespace + [name]) @@ -100,10 +106,10 @@ def visit_expr_stmt(self, node): parent = node.parent idx = parent.children.index(node) + 1 while idx < len(parent): - if parent[idx].type == sym.SEMI: + if parent[idx].type == sym.SEMI: # type: ignore idx += 1 continue # skip over semicolon - if parent[idx].type == sym.NEWLINE: + if parent[idx].type == sym.NEWLINE: # type: ignore prefix = parent[idx].get_prefix() if not isinstance(prefix, text_type): prefix = prefix.decode(self.encoding) @@ -136,8 +142,8 @@ def visit_simple_stmt(self, node): prev = node.get_prev_sibling() if not prev: return - if prev.type == sym.simple_stmt and \ - prev[0].type == sym.expr_stmt and _eq in prev[0].children: + if (prev.type == sym.simple_stmt and # type: ignore + prev[0].type == sym.expr_stmt and _eq in prev[0].children): # type: ignore # need to "eval" the string because it's returned in its # original form docstring = literals.evalString(node[0].value, self.encoding) @@ -176,7 +182,7 @@ def add_docstring(self, node, docstring): class ModuleAnalyzer(object): # cache for analyzer objects -- caches both by module and file name - cache = {} + cache = {} # type: Dict[Tuple[unicode, unicode], Any] @classmethod def for_string(cls, string, modname, srcname='<string>'): @@ -238,14 +244,14 @@ def __init__(self, source, modname, srcname, decoded=False): self.source.seek(pos) # will be filled by tokenize() - self.tokens = None + self.tokens = None # type: List[unicode] # will be filled by parse() - self.parsetree = None + self.parsetree = None # type: Any # will be filled by find_attr_docs() - self.attr_docs = None - self.tagorder = None + self.attr_docs = None # type: List[unicode] + self.tagorder = None # type: Dict[unicode, int] # will be filled by find_tags() - self.tags = None + self.tags = None # type: List[unicode] def tokenize(self): """Generate tokens from the source.""" @@ -287,8 +293,8 @@ def find_tags(self): return self.tags self.tokenize() result = {} - namespace = [] - stack = [] + namespace = [] # type: List[unicode] + stack = [] # type: List[Tuple[unicode, unicode, unicode, int]] indent = 0 defline = False expect_indent = False @@ -299,8 +305,8 @@ def tokeniter(ignore = (token.COMMENT,)): if tokentup[0] not in ignore: yield tokentup tokeniter = tokeniter() - for type, tok, spos, epos, line in tokeniter: - if expect_indent: + for type, tok, spos, epos, line in tokeniter: # type: ignore + if expect_indent and type != token.NL: if type != token.INDENT: # no suite -- one-line definition assert stack @@ -310,7 +316,7 @@ def tokeniter(ignore = (token.COMMENT,)): result[fullname] = (dtype, startline, endline - emptylines) expect_indent = False if tok in ('def', 'class'): - name = next(tokeniter)[1] + name = next(tokeniter)[1] # type: ignore namespace.append(name) fullname = '.'.join(namespace) stack.append((tok, fullname, spos[0], indent)) diff --git a/sphinx/pycode/nodes.py b/sphinx/pycode/nodes.py index 3b244db7f47..b6b3355c0be 100644 --- a/sphinx/pycode/nodes.py +++ b/sphinx/pycode/nodes.py @@ -5,7 +5,7 @@ Parse tree node implementations. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -14,7 +14,7 @@ class BaseNode(object): """ Node superclass for both terminal and nonterminal nodes. """ - parent = None + parent = None # type: BaseNode def _eq(self, other): raise NotImplementedError @@ -29,7 +29,7 @@ def __ne__(self, other): return NotImplemented return not self._eq(other) - __hash__ = None + __hash__ = None # type: str def get_prev_sibling(self): """Return previous child in parent's children, or None.""" @@ -204,5 +204,5 @@ def visit(self, node): def generic_visit(self, node): """Called if no explicit visitor function exists for a node.""" if isinstance(node, Node): - for child in node: + for child in node: # type: ignore self.visit(child) diff --git a/sphinx/pycode/pgen2/driver.py b/sphinx/pycode/pgen2/driver.py index c531edb340e..90476ed002b 100644 --- a/sphinx/pycode/pgen2/driver.py +++ b/sphinx/pycode/pgen2/driver.py @@ -92,11 +92,8 @@ def parse_stream(self, stream, debug=False): def parse_file(self, filename, debug=False): """Parse a file and return the syntax tree.""" - stream = open(filename) - try: + with open(filename) as stream: return self.parse_stream(stream, debug) - finally: - stream.close() def parse_string(self, text, debug=False): """Parse a string and return the syntax tree.""" @@ -112,27 +109,36 @@ def generate_lines(text): yield "" -def load_grammar(gt="Grammar.txt", gp=None, - save=True, force=False, logger=None): +def get_compiled_path(filename): + head, tail = os.path.splitext(filename) + if tail == ".txt": + tail = "" + return "%s%s.pickle" % (head, tail) + + +def compile_grammar(gt='Grammar.txt', logger=None): + """Compile the grammer.""" + if logger is None: + logger = logging.getLogger() + + logger.info("Generating grammar tables from %s", gt) + g = pgen.generate_grammar(gt) + gp = get_compiled_path(gt) + logger.info("Writing grammar tables to %s", gp) + try: + g.dump(gp) + except IOError as e: + logger.info("Writing failed:"+str(e)) + + +def load_grammar(gt="Grammar.txt", logger=None): """Load the grammar (maybe from a pickle).""" if logger is None: logger = logging.getLogger() - if gp is None: - head, tail = os.path.splitext(gt) - if tail == ".txt": - tail = "" - # embed Sphinx major version for the case we ever change the grammar... - gp = head + tail + "-sphinx" + \ - ".".join(map(str, sphinx.version_info[:2])) + ".pickle" - if force or not _newer(gp, gt): + gp = get_compiled_path(gt) + if not os.path.exists(gp): logger.info("Generating grammar tables from %s", gt) g = pgen.generate_grammar(gt) - if save: - logger.info("Writing grammar tables to %s", gp) - try: - g.dump(gp) - except IOError as e: - logger.info("Writing failed:"+str(e)) else: g = grammar.Grammar() g.load(gp) diff --git a/sphinx/pycode/pgen2/grammar.py b/sphinx/pycode/pgen2/grammar.py index 91874fa2313..cd6a435d535 100644 --- a/sphinx/pycode/pgen2/grammar.py +++ b/sphinx/pycode/pgen2/grammar.py @@ -19,6 +19,10 @@ # Local imports from sphinx.pycode.pgen2 import token +if False: + # For type annotation + from typing import Tuple # NOQA + class Grammar(object): """Pgen parsing tables tables conversion class. @@ -75,14 +79,14 @@ class Grammar(object): """ def __init__(self): - self.symbol2number = {} - self.number2symbol = {} - self.states = [] - self.dfas = {} + self.symbol2number = {} # type: Dict[unicode, int] + self.number2symbol = {} # type: Dict[int, unicode] + self.states = [] # type: List[List[List[Tuple[int, int]]]] + self.dfas = {} # type: Dict[int, Tuple[List[List[Tuple[int, int]]], unicode]] self.labels = [(0, "EMPTY")] - self.keywords = {} - self.tokens = {} - self.symbol2label = {} + self.keywords = {} # type: Dict[unicode, unicode] + self.tokens = {} # type: Dict[unicode, unicode] + self.symbol2label = {} # type: Dict[unicode, unicode] self.start = 256 def dump(self, filename): @@ -139,6 +143,7 @@ def report(self): { LBRACE } RBRACE @ AT +@= ATEQUAL == EQEQUAL != NOTEQUAL <> NOTEQUAL diff --git a/sphinx/pycode/pgen2/parse.py b/sphinx/pycode/pgen2/parse.py index 60eec05ea6e..43b88b519a0 100644 --- a/sphinx/pycode/pgen2/parse.py +++ b/sphinx/pycode/pgen2/parse.py @@ -13,6 +13,10 @@ # Local imports from sphinx.pycode.pgen2 import token +if False: + # For type annotation + from typing import Any, Tuple # NOQA + class ParseError(Exception): """Exception to signal the parser is stuck.""" @@ -104,11 +108,12 @@ def setup(self, start=None): # Each stack entry is a tuple: (dfa, state, node). # A node is a tuple: (type, value, context, children), # where children is a list of nodes or None, and context may be None. - newnode = (start, None, None, []) + newnode = (start, None, None, []) # type: Tuple[unicode, unicode, unicode, List] stackentry = (self.grammar.dfas[start], 0, newnode) self.stack = [stackentry] - self.rootnode = None - self.used_names = set() # Aliased to self.rootnode.used_names in pop() + self.rootnode = None # type: Any + self.used_names = set() # type: Set[unicode] + # Aliased to self.rootnode.used_names in pop() def addtoken(self, type, value, context): """Add a token; return True iff this is the end of the program.""" @@ -175,7 +180,7 @@ def classify(self, type, value, context): def shift(self, type, value, newstate, context): """Shift a token. (Internal)""" dfa, state, node = self.stack[-1] - newnode = (type, value, context, None) + newnode = (type, value, context, None) # type: Tuple[unicode, unicode, unicode, List] newnode = self.convert(self.grammar, newnode) if newnode is not None: node[-1].append(newnode) @@ -184,7 +189,7 @@ def shift(self, type, value, newstate, context): def push(self, type, newdfa, newstate, context): """Push a nonterminal. (Internal)""" dfa, state, node = self.stack[-1] - newnode = (type, None, context, []) + newnode = (type, None, context, []) # type: Tuple[unicode, unicode, unicode, List] self.stack[-1] = (dfa, newstate, node) self.stack.append((newdfa, 0, newnode)) diff --git a/sphinx/pycode/pgen2/pgen.py b/sphinx/pycode/pgen2/pgen.py index 85a1bcc4d69..3fe91e57e46 100644 --- a/sphinx/pycode/pgen2/pgen.py +++ b/sphinx/pycode/pgen2/pgen.py @@ -4,15 +4,16 @@ from __future__ import print_function from six import iteritems -try: - from collections import OrderedDict -except ImportError: # Fallback for Python 2.6 - OrderedDict = dict +from collections import OrderedDict # Pgen imports - from sphinx.pycode.pgen2 import grammar, token, tokenize +if False: + # For type annotation + from typing import Any, Tuple # NOQA + + class PgenGrammar(grammar.Grammar): pass @@ -30,7 +31,8 @@ def __init__(self, filename, stream=None): self.dfas, self.startsymbol = self.parse() if close_stream is not None: close_stream() - self.first = {} # map from symbol name to set of tokens + self.first = {} # type: Dict[unicode, List[unicode]] + # map from symbol name to set of tokens self.addfirstsets() def make_grammar(self): @@ -45,7 +47,7 @@ def make_grammar(self): c.number2symbol[i] = name for name in names: dfa = self.dfas[name] - states = [] + states = [] # type: List[List[Tuple[int, int]]] for state in dfa: arcs = [] for label, next in iteritems(state.arcs): @@ -125,7 +127,7 @@ def calcfirst(self, name): dfa = self.dfas[name] self.first[name] = None # dummy to detect left recursion state = dfa[0] - totalset = {} + totalset = {} # type: Dict[unicode, int] overlapcheck = {} for label, next in iteritems(state.arcs): if label in self.dfas: @@ -141,7 +143,7 @@ def calcfirst(self, name): else: totalset[label] = 1 overlapcheck[label] = {label: 1} - inverse = {} + inverse = {} # type: Dict[unicode, unicode] for label, itsfirst in sorted(overlapcheck.items()): for symbol in sorted(itsfirst): if symbol in inverse: @@ -183,7 +185,7 @@ def make_dfa(self, start, finish): assert isinstance(start, NFAState) assert isinstance(finish, NFAState) def closure(state): - base = {} + base = {} # type: Dict addclosure(state, base) return base def addclosure(state, base): @@ -191,12 +193,12 @@ def addclosure(state, base): if state in base: return base[state] = 1 - for label, next in state.arcs: + for label, next in state.arcs: # type: ignore if label is None: addclosure(next, base) states = [DFAState(closure(start), finish)] for state in states: # NB states grows while we're iterating - arcs = {} + arcs = {} # type: Dict[unicode, Dict] for nfastate in state.nfaset: for label, next in nfastate.arcs: if label is not None: @@ -346,7 +348,8 @@ def raise_error(self, msg, *args): class NFAState(object): def __init__(self): - self.arcs = [] # list of (label, NFAState) pairs + self.arcs = [] # type: List[Tuple[unicode, Any]] + # list of (label, NFAState) pairs def addarc(self, next, label=None): assert label is None or isinstance(label, str) @@ -364,7 +367,8 @@ def __init__(self, nfaset, final): assert isinstance(final, NFAState) self.nfaset = nfaset self.isfinal = final in nfaset - self.arcs = OrderedDict() # map from label to DFAState + self.arcs = OrderedDict() # type: OrderedDict + # map from label to DFAState def __hash__(self): return hash(tuple(self.arcs)) diff --git a/sphinx/pycode/pgen2/token.py b/sphinx/pycode/pgen2/token.py index 55bf5e8d142..73718d1663f 100755 --- a/sphinx/pycode/pgen2/token.py +++ b/sphinx/pycode/pgen2/token.py @@ -57,13 +57,16 @@ DOUBLESLASH = 48 DOUBLESLASHEQUAL = 49 AT = 50 -OP = 51 -COMMENT = 52 -NL = 53 -RARROW = 54 -ERRORTOKEN = 55 -ELLIPSIS = 56 -N_TOKENS = 57 +ATEQUAL = 51 +RARROW = 52 +ELLIPSIS = 53 +OP = 54 +AWAIT = 55 +ASYNC = 56 +COMMENT = 57 +NL = 58 +ERRORTOKEN = 59 +N_TOKENS = 60 NT_OFFSET = 256 #--end constants-- diff --git a/sphinx/pycode/pgen2/tokenize.py b/sphinx/pycode/pgen2/tokenize.py index d625350500f..a096795f878 100644 --- a/sphinx/pycode/pgen2/tokenize.py +++ b/sphinx/pycode/pgen2/tokenize.py @@ -183,7 +183,7 @@ def tokenize_loop(readline, tokeneater): class Untokenizer: def __init__(self): - self.tokens = [] + self.tokens = [] # type: List[unicode] self.prev_row = 1 self.prev_col = 0 @@ -294,17 +294,17 @@ def generate_tokens(readline): if contstr: # continued string if not line: - raise TokenError("EOF in multi-line string", strstart) - endmatch = endprog.match(line) + raise TokenError("EOF in multi-line string", strstart) # type: ignore + endmatch = endprog.match(line) # type: ignore if endmatch: pos = end = endmatch.end(0) - yield (STRING, contstr + line[:end], - strstart, (lnum, end), contline + line) + yield (STRING, contstr + line[:end], # type: ignore + strstart, (lnum, end), contline + line) # type: ignore contstr, needcont = '', 0 contline = None elif needcont and line[-2:] != '\\\n' and line[-3:] != '\\\r\n': - yield (ERRORTOKEN, contstr + line, - strstart, (lnum, len(line)), contline) + yield (ERRORTOKEN, contstr + line, # type: ignore + strstart, (lnum, len(line)), contline) # type: ignore contstr = '' contline = None continue @@ -333,7 +333,7 @@ def generate_tokens(readline): yield (NL, line[nl_pos:], (lnum, nl_pos), (lnum, len(line)), line) else: - yield ((NL, COMMENT)[line[pos] == '#'], line[pos:], + yield ((NL, COMMENT)[line[pos] == '#'], line[pos:], # type: ignore (lnum, pos), (lnum, len(line)), line) continue @@ -360,6 +360,16 @@ def generate_tokens(readline): spos, epos, pos = (lnum, start), (lnum, end), end token, initial = line[start:end], line[start] + if end < max: + next_pseudomatch = pseudoprog.match(line, end) + if next_pseudomatch: + n_start, n_end = next_pseudomatch.span(1) + n_token = line[n_start:n_end] + else: + n_token = None + else: + n_token = None + if initial in numchars or ( initial == '.' and token not in ('.', '...') ): # ordinary number @@ -396,6 +406,10 @@ def generate_tokens(readline): break else: # ordinary string yield (STRING, token, spos, epos, line) + elif token == 'await' and n_token: + yield (AWAIT, token, spos, epos, line) + elif token == 'async' and n_token in ('def', 'for', 'with'): + yield (ASYNC, token, spos, epos, line) elif initial in namechars: # ordinary name yield (NAME, token, spos, epos, line) elif token in ('...',): # ordinary name diff --git a/sphinx/pygments_styles.py b/sphinx/pygments_styles.py index ff2263e1ce0..46994714907 100644 --- a/sphinx/pygments_styles.py +++ b/sphinx/pygments_styles.py @@ -5,7 +5,7 @@ Sphinx theme specific highlighting styles. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ diff --git a/sphinx/quickstart.py b/sphinx/quickstart.py index c8c46fabfcf..eb5349edebe 100644 --- a/sphinx/quickstart.py +++ b/sphinx/quickstart.py @@ -5,10 +5,11 @@ Quickly setup documentation source to work with Sphinx. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import print_function +from __future__ import absolute_import import re import os @@ -33,10 +34,12 @@ from six.moves.urllib.parse import quote as urlquote from docutils.utils import column_width -from sphinx import __display_version__ +from sphinx import __display_version__, package_dir from sphinx.util.osutil import make_filename -from sphinx.util.console import purple, bold, red, turquoise, \ - nocolor, color_terminal +from sphinx.util.console import ( # type: ignore + purple, bold, red, turquoise, nocolor, color_terminal +) +from sphinx.util.template import SphinxRenderer from sphinx.util import texescape TERM_ENCODING = getattr(sys.stdin, 'encoding', None) @@ -60,946 +63,10 @@ } EXTENSIONS = ('autodoc', 'doctest', 'intersphinx', 'todo', 'coverage', - 'pngmath', 'mathjax', 'ifconfig', 'viewcode') + 'imgmath', 'mathjax', 'ifconfig', 'viewcode', 'githubpages') PROMPT_PREFIX = '> ' -if PY3: - # prevents that the file is checked for being written in Python 2.x syntax - QUICKSTART_CONF = u'#!/usr/bin/env python3\n' -else: - QUICKSTART_CONF = u'' - -QUICKSTART_CONF += u'''\ -# -*- coding: utf-8 -*- -# -# %(project)s documentation build configuration file, created by -# sphinx-quickstart on %(now)s. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [%(extensions)s] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['%(dot)stemplates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# source_suffix = ['.rst', '.md'] -source_suffix = '%(suffix)s' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = '%(master_str)s' - -# General information about the project. -project = u'%(project_str)s' -copyright = u'%(copyright_str)s' -author = u'%(author_str)s' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '%(version_str)s' -# The full version, including alpha/beta/rc tags. -release = '%(release_str)s' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = %(language)r - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%%B %%d, %%Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = [%(exclude_patterns)s] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = %(ext_todo)s - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'alabaster' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# "<project> v<release> documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['%(dot)sstatic'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -#html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%%b %%d, %%Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a <link> tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' -#html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# Now only 'ja' uses this config value -#html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -#html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = '%(project_fn)sdoc' - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', - -# Latex figure (float) alignment -#'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, '%(project_fn)s.tex', u'%(project_doc_texescaped_str)s', - u'%(author_texescaped_str)s', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, '%(project_manpage)s', u'%(project_doc_str)s', - [author], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, '%(project_fn)s', u'%(project_doc_str)s', - author, '%(project_fn)s', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False -''' - -EPUB_CONFIG = u''' - -# -- Options for Epub output ---------------------------------------------- - -# Bibliographic Dublin Core info. -epub_title = project -epub_author = author -epub_publisher = author -epub_copyright = copyright - -# The basename for the epub file. It defaults to the project name. -#epub_basename = project - -# The HTML theme for the epub output. Since the default themes are not optimized -# for small screen space, using the same theme for HTML and epub output is -# usually not wise. This defaults to 'epub', a theme designed to save visual -# space. -#epub_theme = 'epub' - -# The language of the text. It defaults to the language option -# or 'en' if the language is not set. -#epub_language = '' - -# The scheme of the identifier. Typical schemes are ISBN or URL. -#epub_scheme = '' - -# The unique identifier of the text. This can be a ISBN number -# or the project homepage. -#epub_identifier = '' - -# A unique identification for the text. -#epub_uid = '' - -# A tuple containing the cover image and cover page html template filenames. -#epub_cover = () - -# A sequence of (type, uri, title) tuples for the guide element of content.opf. -#epub_guide = () - -# HTML files that should be inserted before the pages created by sphinx. -# The format is a list of tuples containing the path and title. -#epub_pre_files = [] - -# HTML files shat should be inserted after the pages created by sphinx. -# The format is a list of tuples containing the path and title. -#epub_post_files = [] - -# A list of files that should not be packed into the epub file. -epub_exclude_files = ['search.html'] - -# The depth of the table of contents in toc.ncx. -#epub_tocdepth = 3 - -# Allow duplicate toc entries. -#epub_tocdup = True - -# Choose between 'default' and 'includehidden'. -#epub_tocscope = 'default' - -# Fix unsupported image types using the Pillow. -#epub_fix_images = False - -# Scale large images. -#epub_max_image_width = 0 - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#epub_show_urls = 'inline' - -# If false, no index is generated. -#epub_use_index = True -''' - -INTERSPHINX_CONFIG = u''' - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = {'https://docs.python.org/': None} -''' - -MASTER_FILE = u'''\ -.. %(project)s documentation master file, created by - sphinx-quickstart on %(now)s. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to %(project)s's documentation! -===========%(project_underline)s================= - -Contents: - -.. toctree:: - :maxdepth: %(mastertocmaxdepth)s - -%(mastertoctree)s - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - -''' - -MAKEFILE = u'''\ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = %(rbuilddir)s - -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -\t$(error \ -The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx \ -installed, then set the SPHINXBUILD environment variable to point \ -to the full path of the '$(SPHINXBUILD)' executable. Alternatively you \ -can add the directory with the executable to your PATH. \ -If you don\\'t have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) \ -$(SPHINXOPTS) %(rsrcdir)s -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) %(rsrcdir)s - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp \ -epub latex latexpdf text man changes linkcheck doctest coverage gettext - -help: -\t@echo "Please use \\`make <target>' where <target> is one of" -\t@echo " html to make standalone HTML files" -\t@echo " dirhtml to make HTML files named index.html in directories" -\t@echo " singlehtml to make a single large HTML file" -\t@echo " pickle to make pickle files" -\t@echo " json to make JSON files" -\t@echo " htmlhelp to make HTML files and a HTML help project" -\t@echo " qthelp to make HTML files and a qthelp project" -\t@echo " applehelp to make an Apple Help Book" -\t@echo " devhelp to make HTML files and a Devhelp project" -\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/dvipdfmx" -\t@echo " text to make text files" -\t@echo " man to make manual pages" -\t@echo " texinfo to make Texinfo files" -\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)" -\t@echo " coverage to run coverage check of the documentation (if enabled)" - -clean: -\trm -rf $(BUILDDIR)/* - -html: -\t$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html -\t@echo -\t@echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: -\t$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml -\t@echo -\t@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: -\t$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml -\t@echo -\t@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: -\t$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle -\t@echo -\t@echo "Build finished; now you can process the pickle files." - -json: -\t$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json -\t@echo -\t@echo "Build finished; now you can process the JSON files." - -htmlhelp: -\t$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp -\t@echo -\t@echo "Build finished; now you can run HTML Help Workshop with the" \\ -\t ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: -\t$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp -\t@echo -\t@echo "Build finished; now you can run "qcollectiongenerator" with the" \\ -\t ".qhcp project file in $(BUILDDIR)/qthelp, like this:" -\t@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/%(project_fn)s.qhcp" -\t@echo "To view the help file:" -\t@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/%(project_fn)s.qhc" - -applehelp: -\t$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp -\t@echo -\t@echo "Build finished. The help book is in $(BUILDDIR)/applehelp." -\t@echo "N.B. You won't be able to view it unless you put it in" \\ -\t "~/Library/Documentation/Help or install it in your application" \\ -\t "bundle." - -devhelp: -\t$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp -\t@echo -\t@echo "Build finished." -\t@echo "To view the help file:" -\t@echo "# mkdir -p $$HOME/.local/share/devhelp/%(project_fn)s" -\t@echo "# ln -s $(BUILDDIR)/devhelp\ - $$HOME/.local/share/devhelp/%(project_fn)s" -\t@echo "# devhelp" - -epub: -\t$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub -\t@echo -\t@echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: -\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex -\t@echo -\t@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." -\t@echo "Run \\`make' in that directory to run these through (pdf)latex" \\ -\t "(use \\`make latexpdf' here to do that automatically)." - -latexpdf: -\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex -\t@echo "Running LaTeX files through pdflatex..." -\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 -\t@echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: -\t$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man -\t@echo -\t@echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: -\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo -\t@echo -\t@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." -\t@echo "Run \\`make' in that directory to run these through makeinfo" \\ -\t "(use \\`make info' here to do that automatically)." - -info: -\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo -\t@echo "Running Texinfo files through makeinfo..." -\tmake -C $(BUILDDIR)/texinfo info -\t@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: -\t$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale -\t@echo -\t@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: -\t$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes -\t@echo -\t@echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: -\t$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck -\t@echo -\t@echo "Link check complete; look for any errors in the above output " \\ -\t "or in $(BUILDDIR)/linkcheck/output.txt." - -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." - -coverage: -\t$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage -\t@echo "Testing of coverage in the sources finished, look at the " \\ -\t "results in $(BUILDDIR)/coverage/python.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 = u'''\ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%%SPHINXBUILD%%" == "" ( -\tset SPHINXBUILD=sphinx-build -) -set BUILDDIR=%(rbuilddir)s -set ALLSPHINXOPTS=-d %%BUILDDIR%%/doctrees %%SPHINXOPTS%% %(rsrcdir)s -set I18NSPHINXOPTS=%%SPHINXOPTS%% %(rsrcdir)s -if NOT "%%PAPER%%" == "" ( -\tset ALLSPHINXOPTS=-D latex_paper_size=%%PAPER%% %%ALLSPHINXOPTS%% -\tset I18NSPHINXOPTS=-D latex_paper_size=%%PAPER%% %%I18NSPHINXOPTS%% -) - -if "%%1" == "" goto help - -if "%%1" == "help" ( -\t:help -\techo.Please use `make ^<target^>` where ^<target^> is one of -\techo. html to make standalone HTML files -\techo. dirhtml to make HTML files named index.html in directories -\techo. singlehtml to make a single large HTML file -\techo. pickle to make pickle files -\techo. json to make JSON files -\techo. htmlhelp to make HTML files and a HTML help project -\techo. qthelp to make HTML files and a qthelp project -\techo. devhelp to make HTML files and a Devhelp project -\techo. epub to make an epub -\techo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter -\techo. text to make text files -\techo. man to make manual pages -\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 -\techo. coverage to run coverage check of the documentation if enabled -\tgoto end -) - -if "%%1" == "clean" ( -\tfor /d %%%%i in (%%BUILDDIR%%\*) do rmdir /q /s %%%%i -\tdel /q /s %%BUILDDIR%%\* -\tgoto end -) - - -REM Check if sphinx-build is available and fallback to Python version if any -%%SPHINXBUILD%% 2> nul -if errorlevel 9009 goto sphinx_python -goto sphinx_ok - -:sphinx_python - -set SPHINXBUILD=python -m sphinx.__init__ -%%SPHINXBUILD%% 2> nul -if errorlevel 9009 ( -\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 -) - -:sphinx_ok - - -if "%%1" == "html" ( -\t%%SPHINXBUILD%% -b html %%ALLSPHINXOPTS%% %%BUILDDIR%%/html -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Build finished. The HTML pages are in %%BUILDDIR%%/html. -\tgoto end -) - -if "%%1" == "dirhtml" ( -\t%%SPHINXBUILD%% -b dirhtml %%ALLSPHINXOPTS%% %%BUILDDIR%%/dirhtml -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Build finished. The HTML pages are in %%BUILDDIR%%/dirhtml. -\tgoto end -) - -if "%%1" == "singlehtml" ( -\t%%SPHINXBUILD%% -b singlehtml %%ALLSPHINXOPTS%% %%BUILDDIR%%/singlehtml -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Build finished. The HTML pages are in %%BUILDDIR%%/singlehtml. -\tgoto end -) - -if "%%1" == "pickle" ( -\t%%SPHINXBUILD%% -b pickle %%ALLSPHINXOPTS%% %%BUILDDIR%%/pickle -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Build finished; now you can process the pickle files. -\tgoto end -) - -if "%%1" == "json" ( -\t%%SPHINXBUILD%% -b json %%ALLSPHINXOPTS%% %%BUILDDIR%%/json -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Build finished; now you can process the JSON files. -\tgoto end -) - -if "%%1" == "htmlhelp" ( -\t%%SPHINXBUILD%% -b htmlhelp %%ALLSPHINXOPTS%% %%BUILDDIR%%/htmlhelp -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %%BUILDDIR%%/htmlhelp. -\tgoto end -) - -if "%%1" == "qthelp" ( -\t%%SPHINXBUILD%% -b qthelp %%ALLSPHINXOPTS%% %%BUILDDIR%%/qthelp -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %%BUILDDIR%%/qthelp, like this: -\techo.^> qcollectiongenerator %%BUILDDIR%%\\qthelp\\%(project_fn)s.qhcp -\techo.To view the help file: -\techo.^> assistant -collectionFile %%BUILDDIR%%\\qthelp\\%(project_fn)s.ghc -\tgoto end -) - -if "%%1" == "devhelp" ( -\t%%SPHINXBUILD%% -b devhelp %%ALLSPHINXOPTS%% %%BUILDDIR%%/devhelp -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Build finished. -\tgoto end -) - -if "%%1" == "epub" ( -\t%%SPHINXBUILD%% -b epub %%ALLSPHINXOPTS%% %%BUILDDIR%%/epub -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Build finished. The epub file is in %%BUILDDIR%%/epub. -\tgoto end -) - -if "%%1" == "latex" ( -\t%%SPHINXBUILD%% -b latex %%ALLSPHINXOPTS%% %%BUILDDIR%%/latex -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Build finished; the LaTeX files are in %%BUILDDIR%%/latex. -\tgoto end -) - -if "%%1" == "latexpdf" ( -\t%%SPHINXBUILD%% -b latex %%ALLSPHINXOPTS%% %%BUILDDIR%%/latex -\tcd %%BUILDDIR%%/latex -\tmake all-pdf -\tcd %%~dp0 -\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 %%~dp0 -\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 -\techo. -\techo.Build finished. The text files are in %%BUILDDIR%%/text. -\tgoto end -) - -if "%%1" == "man" ( -\t%%SPHINXBUILD%% -b man %%ALLSPHINXOPTS%% %%BUILDDIR%%/man -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Build finished. The manual pages are in %%BUILDDIR%%/man. -\tgoto end -) - -if "%%1" == "texinfo" ( -\t%%SPHINXBUILD%% -b texinfo %%ALLSPHINXOPTS%% %%BUILDDIR%%/texinfo -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Build finished. The Texinfo files are in %%BUILDDIR%%/texinfo. -\tgoto end -) - -if "%%1" == "gettext" ( -\t%%SPHINXBUILD%% -b gettext %%I18NSPHINXOPTS%% %%BUILDDIR%%/locale -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Build finished. The message catalogs are in %%BUILDDIR%%/locale. -\tgoto end -) - -if "%%1" == "changes" ( -\t%%SPHINXBUILD%% -b changes %%ALLSPHINXOPTS%% %%BUILDDIR%%/changes -\tif errorlevel 1 exit /b 1 -\techo. -\techo.The overview file is in %%BUILDDIR%%/changes. -\tgoto end -) - -if "%%1" == "linkcheck" ( -\t%%SPHINXBUILD%% -b linkcheck %%ALLSPHINXOPTS%% %%BUILDDIR%%/linkcheck -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Link check complete; look for any errors in the above output ^ -or in %%BUILDDIR%%/linkcheck/output.txt. -\tgoto end -) - -if "%%1" == "doctest" ( -\t%%SPHINXBUILD%% -b doctest %%ALLSPHINXOPTS%% %%BUILDDIR%%/doctest -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Testing of doctests in the sources finished, look at the ^ -results in %%BUILDDIR%%/doctest/output.txt. -\tgoto end -) - -if "%%1" == "coverage" ( -\t%%SPHINXBUILD%% -b coverage %%ALLSPHINXOPTS%% %%BUILDDIR%%/coverage -\tif errorlevel 1 exit /b 1 -\techo. -\techo.Testing of coverage in the sources finished, look at the ^ -results in %%BUILDDIR%%/coverage/python.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 -''' - -# This will become the Makefile template for Sphinx 1.5. -MAKEFILE_NEW = u'''\ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SPHINXPROJ = %(project_fn)s -SOURCEDIR = %(rsrcdir)s -BUILDDIR = %(rbuilddir)s - -# User-friendly check for sphinx-build. -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error \ -The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx \ -installed, then set the SPHINXBUILD environment variable to point \ -to the full path of the '$(SPHINXBUILD)' executable. Alternatively you \ -can add the directory with the executable to your PATH. \ -If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Has to be explicit, otherwise we don't get "make" without targets right. -help: -\t@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -# You can add custom targets here. - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%%: -\t@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -''' - -# This will become the make.bat template for Sphinx 1.5. -BATCHFILE_NEW = u'''\ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%%SPHINXBUILD%%" == "" ( -\tset SPHINXBUILD=sphinx-build -) -set SOURCEDIR=%(rsrcdir)s -set BUILDDIR=%(rbuilddir)s -set SPHINXPROJ=%(project_fn)s - -if "%%1" == "" goto help - -%%SPHINXBUILD%% 2> nul -if errorlevel 9009 ( -\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 -) - -%%SPHINXBUILD%% -M %%1 %%SOURCEDIR%% %%BUILDDIR%% %%SPHINXOPTS%% -goto end - -:help -%%SPHINXBUILD%% -M help %%SOURCEDIR%% %%BUILDDIR%% %%SPHINXOPTS%% - -:end -''' - def mkdir_p(dir): if path.isdir(dir): @@ -1018,6 +85,10 @@ def is_path(x): return x +def allow_empty(x): + return x + + def nonempty(x): if not x: raise ValidationError("Please enter some text.") @@ -1072,7 +143,7 @@ def term_decode(text): def do_prompt(d, key, text, default=None, validator=nonempty): while True: - if default: + if default is not None: prompt = PROMPT_PREFIX + '%s [%s]: ' % (text, default) else: prompt = PROMPT_PREFIX + text + ': ' @@ -1104,15 +175,25 @@ def do_prompt(d, key, text, default=None, validator=nonempty): d[key] = x -if PY3: +def convert_python_source(source, rex=re.compile(r"[uU]('.*?')")): # remove Unicode literal prefixes - def _convert_python_source(source, rex=re.compile(r"[uU]('.*?')")): + if PY3: return rex.sub('\\1', source) + else: + return source - for f in ['QUICKSTART_CONF', 'EPUB_CONFIG', 'INTERSPHINX_CONFIG']: - globals()[f] = _convert_python_source(globals()[f]) - del _convert_python_source +class QuickstartRenderer(SphinxRenderer): + def __init__(self, templatedir): + self.templatedir = templatedir or '' + super(QuickstartRenderer, self).__init__() + + def render(self, template_name, context): + user_template = path.join(self.templatedir, path.basename(template_name)) + if self.templatedir and path.exists(user_template): + return self.render_from_file(user_template, context) + else: + return super(QuickstartRenderer, self).render(template_name, context) def ask_user(d): @@ -1190,9 +271,9 @@ def ask_user(d): Python the version is something like 2.5 or 3.0, while the release is something like 2.5.1 or 3.0a1. If you don't need this dual structure, just set both to the same value.''') - do_prompt(d, 'version', 'Project version') + do_prompt(d, 'version', 'Project version', '', allow_empty) if 'release' not in d: - do_prompt(d, 'release', 'Project release', d['version']) + do_prompt(d, 'release', 'Project release', d['version'], allow_empty) if 'language' not in d: print(''' @@ -1254,22 +335,25 @@ def ask_user(d): if 'ext_coverage' not in d: do_prompt(d, 'ext_coverage', 'coverage: checks for documentation ' 'coverage (y/n)', 'n', boolean) - if 'ext_pngmath' not in d: - do_prompt(d, 'ext_pngmath', 'pngmath: include math, rendered ' - 'as PNG images (y/n)', 'n', boolean) + if 'ext_imgmath' not in d: + do_prompt(d, 'ext_imgmath', 'imgmath: include math, rendered ' + 'as PNG or SVG images (y/n)', 'n', boolean) if 'ext_mathjax' not in d: do_prompt(d, 'ext_mathjax', 'mathjax: include math, rendered in the ' 'browser by MathJax (y/n)', 'n', boolean) - if d['ext_pngmath'] and d['ext_mathjax']: - print('''Note: pngmath and mathjax cannot be enabled at the same time. -pngmath has been deselected.''') - d['ext_pngmath'] = False + if d['ext_imgmath'] and d['ext_mathjax']: + print('''Note: imgmath and mathjax cannot be enabled at the same time. +imgmath has been deselected.''') + d['ext_imgmath'] = False if 'ext_ifconfig' not in d: do_prompt(d, 'ext_ifconfig', 'ifconfig: conditional inclusion of ' 'content based on config values (y/n)', 'n', boolean) if 'ext_viewcode' not in d: do_prompt(d, 'ext_viewcode', 'viewcode: include links to the source ' 'code of documented Python objects (y/n)', 'n', boolean) + if 'ext_githubpages' not in d: + do_prompt(d, 'ext_githubpages', 'githubpages: create .nojekyll file ' + 'to publish the document on GitHub pages (y/n)', 'n', boolean) if 'no_makefile' in d: d['makefile'] = False @@ -1287,8 +371,9 @@ def ask_user(d): print() -def generate(d, overwrite=True, silent=False): +def generate(d, overwrite=True, silent=False, templatedir=None): """Generate project based on values in *d*.""" + template = QuickstartRenderer(templatedir=templatedir) texescape.init() indent = ' ' * 4 @@ -1298,19 +383,17 @@ def generate(d, overwrite=True, silent=False): if 'mastertocmaxdepth' not in d: d['mastertocmaxdepth'] = 2 + d['PY3'] = PY3 d['project_fn'] = make_filename(d['project']) d['project_url'] = urlquote(d['project'].encode('idna')) d['project_manpage'] = d['project_fn'].lower() d['now'] = time.asctime() d['project_underline'] = column_width(d['project']) * '=' - extensions = (',\n' + indent).join( - repr('sphinx.ext.' + name) - for name in EXTENSIONS - if d.get('ext_' + name)) - if extensions: - d['extensions'] = '\n' + indent + extensions + ',\n' - else: - d['extensions'] = extensions + d.setdefault('extensions', []) + for name in EXTENSIONS: + if d.get('ext_' + name): + d['extensions'].append('sphinx.ext.' + name) + d['extensions'] = (',\n' + indent).join(repr(name) for name in d['extensions']) d['copyright'] = time.strftime('%Y') + ', ' + d['author'] d['author_texescaped'] = text_type(d['author']).\ translate(texescape.tex_escape_map) @@ -1336,7 +419,11 @@ def generate(d, overwrite=True, silent=False): d['exclude_patterns'] = '' else: builddir = path.join(srcdir, d['dot'] + 'build') - d['exclude_patterns'] = repr(d['dot'] + 'build') + exclude_patterns = map(repr, [ + d['dot'] + 'build', + 'Thumbs.db', '.DS_Store', + ]) + d['exclude_patterns'] = ', '.join(exclude_patterns) mkdir_p(builddir) mkdir_p(path.join(srcdir, d['dot'] + 'templates')) mkdir_p(path.join(srcdir, d['dot'] + 'static')) @@ -1344,42 +431,38 @@ def generate(d, overwrite=True, silent=False): def write_file(fpath, content, newline=None): if overwrite or not path.isfile(fpath): print('Creating file %s.' % fpath) - f = open(fpath, 'wt', encoding='utf-8', newline=newline) - try: + with open(fpath, 'wt', encoding='utf-8', newline=newline) as f: f.write(content) - finally: - f.close() else: print('File %s already exists, skipping.' % fpath) - conf_text = QUICKSTART_CONF % d - if d['epub']: - conf_text += EPUB_CONFIG % d - if d.get('ext_intersphinx'): - conf_text += INTERSPHINX_CONFIG + with open(os.path.join(package_dir, 'templates', 'quickstart', 'conf.py_t')) as f: + conf_text = convert_python_source(f.read()) - write_file(path.join(srcdir, 'conf.py'), conf_text) + write_file(path.join(srcdir, 'conf.py'), template.render_string(conf_text, d)) masterfile = path.join(srcdir, d['master'] + d['suffix']) - write_file(masterfile, MASTER_FILE % d) + write_file(masterfile, template.render('quickstart/master_doc.rst_t', d)) if d.get('make_mode') is True: - makefile_template = MAKEFILE_NEW - batchfile_template = BATCHFILE_NEW + makefile_template = 'quickstart/Makefile.new_t' + batchfile_template = 'quickstart/make.bat.new_t' else: - makefile_template = MAKEFILE - batchfile_template = BATCHFILE + makefile_template = 'quickstart/Makefile_t' + batchfile_template = 'quickstart/make.bat_t' if d['makefile'] is True: d['rsrcdir'] = d['sep'] and 'source' or '.' d['rbuilddir'] = d['sep'] and 'build' or d['dot'] + 'build' # use binary mode, to avoid writing \r\n on Windows - write_file(path.join(d['path'], 'Makefile'), makefile_template % d, u'\n') + write_file(path.join(d['path'], 'Makefile'), + template.render(makefile_template, d), u'\n') if d['batchfile'] is True: d['rsrcdir'] = d['sep'] and 'source' or '.' d['rbuilddir'] = d['sep'] and 'build' or d['dot'] + 'build' - write_file(path.join(d['path'], 'make.bat'), batchfile_template % d, u'\r\n') + write_file(path.join(d['path'], 'make.bat'), + template.render(batchfile_template, d), u'\r\n') if silent: return @@ -1403,6 +486,7 @@ def usage(argv, msg=None): print(msg, file=sys.stderr) print(file=sys.stderr) + USAGE = """\ Sphinx v%s Usage: %%prog [options] [projectdir] @@ -1496,6 +580,8 @@ def main(argv=sys.argv): group.add_option('--ext-' + ext, action='store_true', dest='ext_' + ext, default=False, help='enable %s extension' % ext) + group.add_option('--extensions', metavar='EXTENSIONS', dest='extensions', + action='append', help='enable extensions') group = parser.add_option_group('Makefile and Batchfile creation') group.add_option('--makefile', action='store_true', dest='makefile', @@ -1513,11 +599,18 @@ def main(argv=sys.argv): group.add_option('-M', '--no-use-make-mode', action='store_false', dest='make_mode', help='not use make-mode for Makefile/make.bat') group.add_option('-m', '--use-make-mode', action='store_true', dest='make_mode', + default=True, help='use make-mode for Makefile/make.bat') + group = parser.add_option_group('Project templating') + group.add_option('-t', '--templatedir', metavar='TEMPLATEDIR', dest='templatedir', + help='template directory for template files') + group.add_option('-d', metavar='NAME=VALUE', action='append', dest='variables', + help='define a template variable') + # parse options try: - opts, args = parser.parse_args() + opts, args = parser.parse_args(argv[1:]) except SystemExit as err: return err.code @@ -1530,13 +623,14 @@ def main(argv=sys.argv): try: if 'quiet' in d: - if not set(['project', 'author', 'version']).issubset(d): - print('''"quiet" is specified, but any of "project", \ -"author" or "version" is not specified.''') - return + if not set(['project', 'author']).issubset(d): + print('''"quiet" is specified, but any of "project" or \ +"author" is not specified.''') + return 1 - if set(['quiet', 'project', 'author', 'version']).issubset(d): + if set(['quiet', 'project', 'author']).issubset(d): # quiet mode with all required params satisfied, use default + d.setdefault('version', '') d.setdefault('release', d['version']) d2 = DEFAULT_VALUE.copy() d2.update(dict(("ext_"+ext, False) for ext in EXTENSIONS)) @@ -1553,20 +647,36 @@ def main(argv=sys.argv): ' files already exist.')) print('sphinx-quickstart only generate into a empty directory.' ' Please specify a new root path.') - return + return 1 else: ask_user(d) except (KeyboardInterrupt, EOFError): print() print('[Interrupted.]') - return + return 130 # 128 + SIGINT # decode values in d if value is a Python string literal for key, value in d.items(): if isinstance(value, binary_type): d[key] = term_decode(value) - generate(d) + # parse extensions list + d.setdefault('extensions', []) + for ext in d['extensions'][:]: + if ',' in ext: + d['extensions'].remove(ext) + for modname in ext.split(','): + d['extensions'].append(modname) + + for variable in d.get('variables', []): + try: + name, value = variable.split('=') + d[name] = value + except ValueError: + print('Invalid template variable: %s' % variable) + + generate(d, templatedir=opts.templatedir) + if __name__ == '__main__': sys.exit(main(sys.argv)) diff --git a/sphinx/roles.py b/sphinx/roles.py index 96e098569d4..01e34fa71d8 100644 --- a/sphinx/roles.py +++ b/sphinx/roles.py @@ -5,7 +5,7 @@ Handlers for additional ReST roles. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -13,7 +13,6 @@ from six import iteritems from docutils import nodes, utils -from docutils.parsers.rst import roles from sphinx import addnodes from sphinx.locale import _ @@ -29,18 +28,13 @@ 'kbd': nodes.literal, 'mailheader': addnodes.literal_emphasis, 'makevar': addnodes.literal_strong, - 'manpage': addnodes.literal_emphasis, + 'manpage': addnodes.manpage, 'mimetype': addnodes.literal_emphasis, 'newsgroup': addnodes.literal_emphasis, 'program': addnodes.literal_strong, # XXX should be an x-ref 'regexp': nodes.literal, } -for rolename, nodeclass in iteritems(generic_docroles): - generic = roles.GenericRole(rolename, nodeclass) - role = roles.CustomRole(rolename, generic, {'classes': [rolename]}) - roles.register_local_role(rolename, role) - # -- generic cross-reference role ---------------------------------------------- @@ -181,7 +175,7 @@ def indexmarkup_role(typ, rawtext, text, lineno, inliner, typ = env.config.default_role else: typ = typ.lower() - has_explicit_title, title, target = split_explicit_title(text) + has_explicit_title, title, target = split_explicit_title(text) # type: bool, unicode, unicode # NOQA title = utils.unescape(title) target = utils.unescape(target) targetid = 'index-%s' % env.new_serialno('index') @@ -191,8 +185,8 @@ def indexmarkup_role(typ, rawtext, text, lineno, inliner, if typ == 'pep': indexnode['entries'] = [ ('single', _('Python Enhancement Proposals; PEP %s') % target, - targetid, '')] - anchor = '' + targetid, '', None)] + anchor = '' # type: unicode anchorindex = target.find('#') if anchorindex > 0: target, anchor = target[:anchorindex], target[anchorindex:] @@ -212,7 +206,8 @@ def indexmarkup_role(typ, rawtext, text, lineno, inliner, rn += sn return [indexnode, targetnode, rn], [] elif typ == 'rfc': - indexnode['entries'] = [('single', 'RFC; RFC %s' % target, targetid, '')] + indexnode['entries'] = [ + ('single', 'RFC; RFC %s' % target, targetid, '', None)] anchor = '' anchorindex = target.find('#') if anchorindex > 0: @@ -317,7 +312,7 @@ def index_role(typ, rawtext, text, lineno, inliner, options={}, content=[]): target = target[1:] title = title[1:] main = 'main' - entries = [('single', target, targetid, main)] + entries = [('single', target, targetid, main, None)] indexnode = addnodes.index() indexnode['entries'] = entries set_role_source_info(inliner, lineno, indexnode) @@ -343,5 +338,14 @@ def index_role(typ, rawtext, text, lineno, inliner, options={}, content=[]): 'index': index_role, } -for rolename, func in iteritems(specific_docroles): - roles.register_local_role(rolename, func) + +def setup(app): + from docutils.parsers.rst import roles + + for rolename, nodeclass in iteritems(generic_docroles): + generic = roles.GenericRole(rolename, nodeclass) + role = roles.CustomRole(rolename, generic, {'classes': [rolename]}) + roles.register_local_role(rolename, role) + + for rolename, func in iteritems(specific_docroles): + roles.register_local_role(rolename, func) diff --git a/sphinx/search/__init__.py b/sphinx/search/__init__.py index 050ab2d7f9a..d2baf363c86 100644 --- a/sphinx/search/__init__.py +++ b/sphinx/search/__init__.py @@ -5,17 +5,27 @@ Create a full-text search index for offline search. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ import re +from os import path from six import iteritems, itervalues, text_type, string_types from six.moves import cPickle as pickle + from docutils.nodes import raw, comment, title, Text, NodeVisitor, SkipNode -from os import path +import sphinx from sphinx.util import jsdump, rpartition +from sphinx.util.pycompat import htmlescape +from sphinx.search.jssplitter import splitter_code + +if False: + # For type annotation + from typing import Any, IO, Iterable, Tuple, Type # NOQA + from docutils import nodes # NOQA + from sphinx.environment import BuildEnvironment # NOQA class SearchLanguage(object): @@ -40,10 +50,10 @@ class SearchLanguage(object): This class is used to preprocess search word which Sphinx HTML readers type, before searching index. Default implementation does nothing. """ - lang = None - language_name = None - stopwords = set() - js_stemmer_rawcode = None + lang = None # type: unicode + language_name = None # type: unicode + stopwords = set() # type: Set[unicode] + js_stemmer_rawcode = None # type: unicode js_stemmer_code = """ /** * Dummy stemmer for languages without stemming rules. @@ -58,23 +68,27 @@ class SearchLanguage(object): _word_re = re.compile(r'\w+(?u)') def __init__(self, options): + # type: (Dict) -> None self.options = options self.init(options) def init(self, options): + # type: (Dict) -> None """ Initialize the class with the options the user has given. """ def split(self, input): + # type: (unicode) -> List[unicode] """ This method splits a sentence into words. Default splitter splits input at white spaces, which should be enough for most languages except CJK languages. """ - return self._word_re.findall(input) + return self._word_re.findall(input) # type: ignore def stem(self, word): + # type: (unicode) -> unicode """ This method implements stemming algorithm of the Python version. @@ -88,6 +102,7 @@ def stem(self, word): return word def word_filter(self, word): + # type: (unicode) -> bool """ Return true if the target word should be registered in the search index. This method is called after stemming. @@ -105,6 +120,7 @@ def word_filter(self, word): def parse_stop_word(source): + # type: (unicode) -> Set[unicode] """ parse snowball style word list like this: @@ -135,7 +151,8 @@ def parse_stop_word(source): 'ru': 'sphinx.search.ru.SearchRussian', 'sv': 'sphinx.search.sv.SearchSwedish', 'tr': 'sphinx.search.tr.SearchTurkish', -} + 'zh': 'sphinx.search.zh.SearchChinese', +} # type: Dict[unicode, Any] class _JavaScriptIndex(object): @@ -148,9 +165,11 @@ class _JavaScriptIndex(object): SUFFIX = ')' def dumps(self, data): + # type: (Any) -> unicode return self.PREFIX + jsdump.dumps(data) + self.SUFFIX def loads(self, s): + # type: (str) -> Any data = s[len(self.PREFIX):-len(self.SUFFIX)] if not data or not s.startswith(self.PREFIX) or not \ s.endswith(self.SUFFIX): @@ -158,9 +177,11 @@ def loads(self, s): return jsdump.loads(data) def dump(self, data, f): + # type: (Any, IO) -> None f.write(self.dumps(data)) def load(self, f): + # type: (IO) -> Any return self.loads(f.read()) @@ -173,28 +194,46 @@ class WordCollector(NodeVisitor): """ def __init__(self, document, lang): + # type: (nodes.Node, SearchLanguage) -> None NodeVisitor.__init__(self, document) - self.found_words = [] - self.found_title_words = [] + self.found_words = [] # type: List[unicode] + self.found_title_words = [] # type: List[unicode] self.lang = lang + def is_meta_keywords(self, node, nodetype): + # type: (nodes.Node, Type) -> bool + if isinstance(node, sphinx.addnodes.meta) and node.get('name') == 'keywords': + meta_lang = node.get('lang') + if meta_lang is None: # lang not specified + return True + elif meta_lang == self.lang.lang: # matched to html_search_language + return True + + return False + def dispatch_visit(self, node): + # type: (nodes.Node) -> None nodetype = type(node) if issubclass(nodetype, comment): raise SkipNode if issubclass(nodetype, raw): - # Some people might put content in raw HTML that should be searched, - # so we just amateurishly strip HTML tags and index the remaining - # content - nodetext = re.sub(r'(?is)<style.*?</style>', '', node.astext()) - nodetext = re.sub(r'(?is)<script.*?</script>', '', nodetext) - nodetext = re.sub(r'<[^<]+?>', '', nodetext) - self.found_words.extend(self.lang.split(nodetext)) + if 'html' in node.get('format', '').split(): + # Some people might put content in raw HTML that should be searched, + # so we just amateurishly strip HTML tags and index the remaining + # content + nodetext = re.sub(r'(?is)<style.*?</style>', '', node.astext()) + nodetext = re.sub(r'(?is)<script.*?</script>', '', nodetext) + nodetext = re.sub(r'<[^<]+?>', '', nodetext) + self.found_words.extend(self.lang.split(nodetext)) raise SkipNode if issubclass(nodetype, Text): self.found_words.extend(self.lang.split(node.astext())) elif issubclass(nodetype, title): self.found_title_words.extend(self.lang.split(node.astext())) + elif self.is_meta_keywords(node, nodetype): + keywords = node['content'] + keywords = [keyword.strip() for keyword in keywords.split(',')] + self.found_words.extend(keywords) class IndexBuilder(object): @@ -205,26 +244,29 @@ class IndexBuilder(object): formats = { 'jsdump': jsdump, 'pickle': pickle - } + } # type: Dict[unicode, Any] def __init__(self, env, lang, options, scoring): + # type: (BuildEnvironment, unicode, Dict, unicode) -> None self.env = env - # filename -> title - self._titles = {} - # stemmed word -> set(filenames) - self._mapping = {} - # stemmed words in titles -> set(filenames) - self._title_mapping = {} - # word -> stemmed word - self._stem_cache = {} - # objtype -> index - self._objtypes = {} - # objtype index -> (domain, type, objname (localized)) - self._objnames = {} - # add language-specific SearchLanguage instance - lang_class = languages.get(lang) + self._titles = {} # type: Dict[unicode, unicode] + # docname -> title + self._filenames = {} # type: Dict[unicode, unicode] + # docname -> filename + self._mapping = {} # type: Dict[unicode, Set[unicode]] + # stemmed word -> set(docname) + self._title_mapping = {} # type: Dict[unicode, Set[unicode]] + # stemmed words in titles -> set(docname) + self._stem_cache = {} # type: Dict[unicode, unicode] + # word -> stemmed word + self._objtypes = {} # type: Dict[Tuple[unicode, unicode], int] + # objtype -> index + self._objnames = {} # type: Dict[int, Tuple[unicode, unicode, unicode]] + # objtype index -> (domain, type, objname (localized)) + lang_class = languages.get(lang) # type: Type[SearchLanguage] + # add language-specific SearchLanguage instance if lang_class is None: - self.lang = SearchEnglish(options) + self.lang = SearchEnglish(options) # type: SearchLanguage elif isinstance(lang_class, str): module, classname = lang_class.rsplit('.', 1) lang_class = getattr(__import__(module, None, None, [classname]), @@ -239,11 +281,13 @@ def __init__(self, env, lang, options, scoring): self.js_scorer_code = fp.read().decode('utf-8') else: self.js_scorer_code = u'' + self.js_splitter_code = splitter_code def load(self, stream, format): + # type: (IO, Any) -> None """Reconstruct from frozen data.""" if isinstance(format, string_types): - format = self.formats[format] + format = self.formats[format] # type: ignore frozen = format.load(stream) # if an old index is present, we treat it as not existing. if not isinstance(frozen, dict) or \ @@ -253,6 +297,7 @@ def load(self, stream, format): self._titles = dict(zip(index2fn, frozen['titles'])) def load_terms(mapping): + # type: (Dict[unicode, Any]) -> Dict[unicode, Set[unicode]] rv = {} for k, v in iteritems(mapping): if isinstance(v, int): @@ -266,13 +311,15 @@ def load_terms(mapping): # no need to load keywords/objtypes def dump(self, stream, format): + # type: (IO, Any) -> None """Dump the frozen index to a stream.""" if isinstance(format, string_types): - format = self.formats[format] - format.dump(self.freeze(), stream) + format = self.formats[format] # type: ignore + format.dump(self.freeze(), stream) # type: ignore def get_objects(self, fn2index): - rv = {} + # type: (Dict[unicode, int]) -> Dict[unicode, Dict[unicode, Tuple[int, int, int, unicode]]] # NOQA + rv = {} # type: Dict[unicode, Dict[unicode, Tuple[int, int, int, unicode]]] otypes = self._objtypes onames = self._objnames for domainname, domain in sorted(iteritems(self.env.domains)): @@ -283,6 +330,7 @@ def get_objects(self, fn2index): continue if prio < 0: continue + fullname = htmlescape(fullname) prefix, name = rpartition(fullname, '.') pdict = rv.setdefault(prefix, {}) try: @@ -298,7 +346,7 @@ def get_objects(self, fn2index): else: onames[typeindex] = (domainname, type, type) if anchor == fullname: - shortanchor = '' + shortanchor = '' # type: unicode elif anchor == type + '-' + fullname: shortanchor = '-' else: @@ -307,7 +355,8 @@ def get_objects(self, fn2index): return rv def get_terms(self, fn2index): - rvs = {}, {} + # type: (Dict) -> Tuple[Dict[unicode, List[unicode]], Dict[unicode, List[unicode]]] + rvs = {}, {} # type: Tuple[Dict[unicode, List[unicode]], Dict[unicode, List[unicode]]] for rv, mapping in zip(rvs, (self._mapping, self._title_mapping)): for k, v in iteritems(mapping): if len(v) == 1: @@ -319,23 +368,27 @@ def get_terms(self, fn2index): return rvs def freeze(self): + # type: () -> Dict[unicode, Any] """Create a usable data structure for serializing.""" - filenames, titles = zip(*sorted(self._titles.items())) - fn2index = dict((f, i) for (i, f) in enumerate(filenames)) + docnames, titles = zip(*sorted(self._titles.items())) + filenames = [self._filenames.get(docname) for docname in docnames] + fn2index = dict((f, i) for (i, f) in enumerate(docnames)) terms, title_terms = self.get_terms(fn2index) objects = self.get_objects(fn2index) # populates _objtypes objtypes = dict((v, k[0] + ':' + k[1]) for (k, v) in iteritems(self._objtypes)) objnames = self._objnames - return dict(filenames=filenames, titles=titles, terms=terms, + return dict(docnames=docnames, filenames=filenames, titles=titles, terms=terms, objects=objects, objtypes=objtypes, objnames=objnames, titleterms=title_terms, envversion=self.env.version) def label(self): + # type: () -> unicode return "%s (code: %s)" % (self.lang.language_name, self.lang.lang) def prune(self, filenames): + # type: (Iterable[unicode]) -> None """Remove data for all filenames not in the list.""" new_titles = {} for filename in filenames: @@ -347,40 +400,52 @@ def prune(self, filenames): for wordnames in itervalues(self._title_mapping): wordnames.intersection_update(filenames) - def feed(self, filename, title, doctree): + def feed(self, docname, filename, title, doctree): + # type: (unicode, unicode, unicode, nodes.Node) -> None """Feed a doctree to the index.""" - self._titles[filename] = title + self._titles[docname] = title + self._filenames[docname] = filename visitor = WordCollector(doctree, self.lang) doctree.walk(visitor) # memoize self.lang.stem def stem(word): + # type: (unicode) -> unicode try: return self._stem_cache[word] except KeyError: - self._stem_cache[word] = self.lang.stem(word) + self._stem_cache[word] = self.lang.stem(word).lower() return self._stem_cache[word] _filter = self.lang.word_filter for word in visitor.found_title_words: - word = stem(word) - if _filter(word): - self._title_mapping.setdefault(word, set()).add(filename) + stemmed_word = stem(word) + if _filter(stemmed_word): + self._title_mapping.setdefault(stemmed_word, set()).add(docname) + elif _filter(word): # stemmer must not remove words from search index + self._title_mapping.setdefault(word, set()).add(docname) for word in visitor.found_words: - word = stem(word) - if word not in self._title_mapping and _filter(word): - self._mapping.setdefault(word, set()).add(filename) + stemmed_word = stem(word) + # again, stemmer must not remove words from search index + if not _filter(stemmed_word) and _filter(word): + stemmed_word = word + already_indexed = docname in self._title_mapping.get(stemmed_word, []) + if _filter(stemmed_word) and not already_indexed: + self._mapping.setdefault(stemmed_word, set()).add(docname) def context_for_searchtool(self): + # type: () -> Dict[unicode, Any] return dict( search_language_stemming_code = self.lang.js_stemmer_code, search_language_stop_words = jsdump.dumps(sorted(self.lang.stopwords)), search_scorer_tool = self.js_scorer_code, + search_word_splitter_code = self.js_splitter_code, ) def get_js_stemmer_rawcode(self): + # type: () -> unicode if self.lang.js_stemmer_rawcode: return path.join( path.dirname(path.abspath(__file__)), diff --git a/sphinx/search/en.py b/sphinx/search/en.py index de77ae294db..22d4e5acb98 100644 --- a/sphinx/search/en.py +++ b/sphinx/search/en.py @@ -5,25 +5,18 @@ English search language: includes the JS porter stemmer. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from sphinx.search import SearchLanguage try: - # http://bitbucket.org/methane/porterstemmer/ - from porterstemmer import Stemmer as CStemmer - CSTEMMER = True - PYSTEMMER = False + from Stemmer import Stemmer as PyStemmer + PYSTEMMER = True except ImportError: - CSTEMMER = False - try: - from Stemmer import Stemmer as PyStemmer - PYSTEMMER = True - except ImportError: - from sphinx.util.stemmer import PorterStemmer - PYSTEMMER = False + from sphinx.util.stemmer import PorterStemmer + PYSTEMMER = False english_stopwords = set(""" a and are as at @@ -231,16 +224,15 @@ class SearchEnglish(SearchLanguage): stopwords = english_stopwords def init(self, options): - if CSTEMMER: - class Stemmer(CStemmer): - def stem(self, word): - return self(word.lower()) - elif PYSTEMMER: + # type: (Dict) -> None + if PYSTEMMER: class Stemmer(object): def __init__(self): + # type: () -> None self.stemmer = PyStemmer('porter') def stem(self, word): + # type: (unicode) -> unicode return self.stemmer.stemWord(word) else: class Stemmer(PorterStemmer): @@ -248,10 +240,11 @@ class Stemmer(PorterStemmer): make at least the stem method nicer. """ def stem(self, word): - word = word.lower() + # type: (unicode) -> unicode return PorterStemmer.stem(self, word, 0, len(word) - 1) self.stemmer = Stemmer() def stem(self, word): - return self.stemmer.stem(word) + # type: (unicode) -> unicode + return self.stemmer.stem(word.lower()) diff --git a/sphinx/search/ja.py b/sphinx/search/ja.py index 3c9ee88fdb2..cf3b67c0073 100644 --- a/sphinx/search/ja.py +++ b/sphinx/search/ja.py @@ -5,7 +5,7 @@ Japanese search language: includes routine to split words. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -21,7 +21,7 @@ import re import sys -from six import iteritems +from six import iteritems, PY3 try: import MeCab @@ -29,13 +29,40 @@ except ImportError: native_module = False +try: + import janome.tokenizer + janome_module = True +except ImportError: + janome_module = False + +from sphinx.errors import SphinxError, ExtensionError from sphinx.search import SearchLanguage +from sphinx.util import import_object -class MecabBinder(object): +class BaseSplitter(object): + def __init__(self, options): - self.ctypes_libmecab = None - self.ctypes_mecab = None + # type: (Dict) -> None + self.options = options + + def split(self, input): + # type: (unicode) -> List[unicode] + """ + + :param str input: + :return: + :rtype: list[str] + """ + raise NotImplementedError + + +class MecabSplitter(BaseSplitter): + def __init__(self, options): + # type: (Dict) -> None + super(MecabSplitter, self).__init__(options) + self.ctypes_libmecab = None # type: ignore + self.ctypes_mecab = None # type: ignore if not native_module: self.init_ctypes(options) else: @@ -43,15 +70,20 @@ def __init__(self, options): self.dict_encode = options.get('dic_enc', 'utf-8') def split(self, input): - input2 = input.encode(self.dict_encode) + # type: (unicode) -> List[unicode] + input2 = input if PY3 else input.encode(self.dict_encode) if native_module: result = self.native.parse(input2) else: result = self.ctypes_libmecab.mecab_sparse_tostr( self.ctypes_mecab, input.encode(self.dict_encode)) - return result.decode(self.dict_encode).split(' ') + if PY3: + return result.split(' ') + else: + return result.decode(self.dict_encode).split(' ') def init_native(self, options): + # type: (Dict) -> None param = '-Owakati' dict = options.get('dict') if dict: @@ -59,6 +91,7 @@ def init_native(self, options): self.native = MeCab.Tagger(param) def init_ctypes(self, options): + # type: (Dict) -> None import ctypes.util lib = options.get('lib') @@ -83,16 +116,46 @@ def init_ctypes(self, options): if dict: param += ' -d %s' % dict + fs_enc = sys.getfilesystemencoding() or sys.getdefaultencoding() + self.ctypes_libmecab = ctypes.CDLL(libpath) + self.ctypes_libmecab.mecab_new2.argtypes = (ctypes.c_char_p,) + self.ctypes_libmecab.mecab_new2.restype = ctypes.c_void_p + self.ctypes_libmecab.mecab_sparse_tostr.argtypes = (ctypes.c_void_p, ctypes.c_char_p) self.ctypes_libmecab.mecab_sparse_tostr.restype = ctypes.c_char_p - self.ctypes_mecab = self.ctypes_libmecab.mecab_new2(param) + self.ctypes_mecab = self.ctypes_libmecab.mecab_new2(param.encode(fs_enc)) + if self.ctypes_mecab is None: + raise SphinxError('mecab initialization failed') def __del__(self): + # type: () -> None if self.ctypes_libmecab: self.ctypes_libmecab.mecab_destroy(self.ctypes_mecab) +MeCabBinder = MecabSplitter # keep backward compatibility until Sphinx-1.6 + + +class JanomeSplitter(BaseSplitter): + def __init__(self, options): + # type: (Dict) -> None + super(JanomeSplitter, self).__init__(options) + self.user_dict = options.get('user_dic') + self.user_dict_enc = options.get('user_dic_enc', 'utf8') + self.init_tokenizer() + + def init_tokenizer(self): + # type: () -> None + if not janome_module: + raise RuntimeError('Janome is not available') + self.tokenizer = janome.tokenizer.Tokenizer(udic=self.user_dict, udic_enc=self.user_dict_enc) -class TinySegmenter(object): + def split(self, input): + # type: (unicode) -> List[unicode] + result = u' '.join(token.surface for token in self.tokenizer.tokenize(input)) + return result.split(u' ') + + +class DefaultSplitter(BaseSplitter): patterns_ = dict([(re.compile(pattern), value) for pattern, value in iteritems({ u'[一二三四五六七八九十百千万億兆]': u'M', u'[一-龠々〆ヵヶ]': u'H', @@ -364,6 +427,7 @@ class TinySegmenter(object): # ctype_ def ctype_(self, char): + # type: (unicode) -> unicode for pattern, value in iteritems(self.patterns_): if pattern.match(char): return value @@ -371,12 +435,14 @@ def ctype_(self, char): # ts_ def ts_(self, dict, key): + # type: (Dict[unicode, int], unicode) -> int if key in dict: return dict[key] return 0 # segment def split(self, input): + # type: (unicode) -> List[unicode] if not input: return [] @@ -468,6 +534,9 @@ def split(self, input): return result +TinySegmenter = DefaultSplitter # keep backward compatibility until Sphinx-1.6 + + class SearchJapanese(SearchLanguage): """ Japanese search implementation: uses no stemmer, but word splitting is quite @@ -475,22 +544,33 @@ class SearchJapanese(SearchLanguage): """ lang = 'ja' language_name = 'Japanese' + splitters = { + 'default': 'sphinx.search.ja.DefaultSplitter', + 'mecab': 'sphinx.search.ja.MecabSplitter', + 'janome': 'sphinx.search.ja.JanomeSplitter', + } def init(self, options): + # type: (Dict) -> None type = options.get('type', 'default') - if type not in ('mecab', 'default'): - raise ValueError(("Japanese tokenizer's type should be 'mecab'" - " or 'default'")) - if type == 'mecab': - self.splitter = MecabBinder(options) + if type in self.splitters: + dotted_path = self.splitters[type] else: - self.splitter = TinySegmenter() + dotted_path = type + try: + self.splitter = import_object(dotted_path)(options) + except ExtensionError: + raise ExtensionError("Splitter module %r can't be imported" % + dotted_path) def split(self, input): + # type: (unicode) -> List[unicode] return self.splitter.split(input) def word_filter(self, stemmed_word): + # type: (unicode) -> bool return len(stemmed_word) > 1 def stem(self, word): - return word.lower() + # type: (unicode) -> unicode + return word diff --git a/sphinx/search/jssplitter.py b/sphinx/search/jssplitter.py new file mode 100644 index 00000000000..9dc0ca6e7a3 --- /dev/null +++ b/sphinx/search/jssplitter.py @@ -0,0 +1,110 @@ +# -*- coding: utf-8 -*- +""" + sphinx.search.jssplitter + ~~~~~~~~~~~~~~~~~~~~~~~~ + + Provides Python compatible word splitter to JavaScript + + DO NOT EDIT. This is generated by utils/jssplitter_generator.py + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +splitter_code = """ + +var splitChars = (function() { + var result = {}; + var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, + 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, + 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, + 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, + 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, + 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, + 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, + 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, + 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, + 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; + var i, j, start, end; + for (i = 0; i < singles.length; i++) { + result[singles[i]] = true; + } + var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], + [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], + [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], + [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], + [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], + [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], + [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], + [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], + [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], + [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], + [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], + [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], + [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], + [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], + [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], + [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], + [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], + [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], + [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], + [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], + [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], + [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], + [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], + [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], + [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], + [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], + [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], + [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], + [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], + [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], + [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], + [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], + [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], + [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], + [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], + [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], + [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], + [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], + [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], + [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], + [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], + [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], + [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], + [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], + [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], + [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], + [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], + [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], + [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; + for (i = 0; i < ranges.length; i++) { + start = ranges[i][0]; + end = ranges[i][1]; + for (j = start; j <= end; j++) { + result[j] = true; + } + } + return result; +})(); + +function splitQuery(query) { + var result = []; + var start = -1; + for (var i = 0; i < query.length; i++) { + if (splitChars[query.charCodeAt(i)]) { + if (start !== -1) { + result.push(query.slice(start, i)); + start = -1; + } + } else if (start === -1) { + start = i; + } + } + if (start !== -1) { + result.push(query.slice(start)); + } + return result; +} + +""" diff --git a/sphinx/search/ro.py b/sphinx/search/ro.py index 78ae01851b2..f44f38e34cb 100644 --- a/sphinx/search/ro.py +++ b/sphinx/search/ro.py @@ -24,10 +24,12 @@ class SearchRomanian(SearchLanguage): language_name = 'Romanian' js_stemmer_rawcode = 'romanian-stemmer.js' js_stemmer_code = js_stemmer - stopwords = [] + stopwords = [] # type: List[unicode] def init(self, options): + # type: (Dict) -> None self.stemmer = snowballstemmer.stemmer('romanian') def stem(self, word): + # type: (unicode) -> unicode return self.stemmer.stemWord(word) diff --git a/sphinx/search/test b/sphinx/search/test new file mode 100644 index 00000000000..e69de29bb2d diff --git a/sphinx/search/tr.py b/sphinx/search/tr.py index 33c5c519284..14cc710f845 100644 --- a/sphinx/search/tr.py +++ b/sphinx/search/tr.py @@ -24,10 +24,12 @@ class SearchTurkish(SearchLanguage): language_name = 'Turkish' js_stemmer_rawcode = 'turkish-stemmer.js' js_stemmer_code = js_stemmer - stopwords = [] + stopwords = [] # type: List[unicode] def init(self, options): + # type: (Dict) -> None self.stemmer = snowballstemmer.stemmer('turkish') def stem(self, word): + # type: (unicode) -> unicode return self.stemmer.stemWord(word) diff --git a/sphinx/search/zh.py b/sphinx/search/zh.py new file mode 100644 index 00000000000..bd47875068d --- /dev/null +++ b/sphinx/search/zh.py @@ -0,0 +1,282 @@ +# -*- coding: utf-8 -*- +""" + sphinx.search.zh + ~~~~~~~~~~~~~~~~ + + Chinese search language: includes routine to split words. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import os +import re + +from sphinx.search import SearchLanguage + +try: + from Stemmer import Stemmer as PyStemmer + PYSTEMMER = True +except ImportError: + from sphinx.util.stemmer import PorterStemmer + PYSTEMMER = False + +try: + import jieba + JIEBA = True +except ImportError: + JIEBA = False + +english_stopwords = set(""" +a and are as at +be but by +for +if in into is it +near no not +of on or +such +that the their then there these they this to +was will with +""".split()) + +js_porter_stemmer = """ +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|\ +ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|\ +iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} +""" + + +class SearchChinese(SearchLanguage): + """ + Chinese search implementation + """ + + lang = 'zh' + language_name = 'Chinese' + js_stemmer_code = js_porter_stemmer + stopwords = english_stopwords + latin1_letters = re.compile(r'\w+(?u)[\u0000-\u00ff]') + + def init(self, options): + # type: (Dict) -> None + if JIEBA: + dict_path = options.get('dict') + if dict_path and os.path.isfile(dict_path): + jieba.set_dictionary(dict_path) + + if PYSTEMMER: + class Stemmer(object): + def __init__(self): + # type: () -> None + self.stemmer = PyStemmer('porter') + + def stem(self, word): + # type: (unicode) -> unicode + return self.stemmer.stemWord(word) + else: + class Stemmer(PorterStemmer): + """All those porter stemmer implementations look hideous; + make at least the stem method nicer. + """ + def stem(self, word): + # type: (unicode) -> unicode + return PorterStemmer.stem(self, word, 0, len(word) - 1) + + self.stemmer = Stemmer() + + def split(self, input): + # type: (unicode) -> List[unicode] + chinese = [] # type: List[unicode] + if JIEBA: + chinese = list(jieba.cut_for_search(input)) + + latin1 = self.latin1_letters.findall(input) # type: ignore + return chinese + latin1 + + def word_filter(self, stemmed_word): + # type: (unicode) -> bool + return len(stemmed_word) > 1 + + def stem(self, word): + # type: (unicode) -> unicode + return self.stemmer.stem(word) diff --git a/sphinx/setup_command.py b/sphinx/setup_command.py index 1a942c5da4f..f263f8df18e 100644 --- a/sphinx/setup_command.py +++ b/sphinx/setup_command.py @@ -8,22 +8,28 @@ :author: Sebastian Wiesner :contact: basti.wiesner@gmx.net - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import print_function import sys import os -from distutils.cmd import Command -from distutils.errors import DistutilsOptionError, DistutilsExecError from six import StringIO, string_types +from distutils.cmd import Command +from distutils.errors import DistutilsOptionError, DistutilsExecError # type: ignore from sphinx.application import Sphinx -from sphinx.util.console import darkred, nocolor, color_terminal +from sphinx.cmdline import handle_exception +from sphinx.util.console import nocolor, color_terminal +from sphinx.util.docutils import docutils_namespace from sphinx.util.osutil import abspath +if False: + # For type annotation + from typing import Any # NOQA + class BuildDoc(Command): """ @@ -71,6 +77,7 @@ class BuildDoc(Command): ('build-dir=', None, 'Build directory'), ('config-dir=', 'c', 'Location of the configuration directory'), ('builder=', 'b', 'The builder to use. Defaults to "html"'), + ('warning-is-error', 'W', 'Turn warning into errors'), ('project=', None, 'The documented project\'s name'), ('version=', None, 'The short X.Y version'), ('release=', None, 'The full version, including alpha/beta/rc tags'), @@ -78,22 +85,30 @@ class BuildDoc(Command): 'replacement for |today|'), ('link-index', 'i', 'Link index.html to the master doc'), ('copyright', None, 'The copyright string'), + ('pdb', None, 'Start pdb on exception'), ] - boolean_options = ['fresh-env', 'all-files', 'link-index'] + boolean_options = ['fresh-env', 'all-files', 'warning-is-error', + 'link-index'] def initialize_options(self): + # type: () -> None self.fresh_env = self.all_files = False - self.source_dir = self.build_dir = None + self.pdb = False + self.source_dir = self.build_dir = None # type: unicode self.builder = 'html' + self.warning_is_error = False self.project = '' self.version = '' self.release = '' self.today = '' - self.config_dir = None + self.config_dir = None # type: unicode self.link_index = False self.copyright = '' + self.verbosity = 0 + self.traceback = False def _guess_source_dir(self): + # type: () -> unicode for guess in ('doc', 'docs'): if not os.path.isdir(guess): continue @@ -106,6 +121,7 @@ def _guess_source_dir(self): # unicode, causing finalize_options to fail if invoked again. Workaround # for http://bugs.python.org/issue19570 def _ensure_stringlike(self, option, what, default=None): + # type: (unicode, unicode, Any) -> Any val = getattr(self, option) if val is None: setattr(self, option, default) @@ -116,10 +132,11 @@ def _ensure_stringlike(self, option, what, default=None): return val def finalize_options(self): + # type: () -> None if self.source_dir is None: self.source_dir = self._guess_source_dir() - self.announce('Using source directory %s' % self.source_dir) - self.ensure_dirname('source_dir') + self.announce('Using source directory %s' % self.source_dir) # type: ignore + self.ensure_dirname('source_dir') # type: ignore if self.source_dir is None: self.source_dir = os.curdir self.source_dir = abspath(self.source_dir) @@ -128,22 +145,23 @@ def finalize_options(self): self.config_dir = abspath(self.config_dir) if self.build_dir is None: - build = self.get_finalized_command('build') + build = self.get_finalized_command('build') # type: ignore self.build_dir = os.path.join(abspath(build.build_base), 'sphinx') - self.mkpath(self.build_dir) + self.mkpath(self.build_dir) # type: ignore self.build_dir = abspath(self.build_dir) self.doctree_dir = os.path.join(self.build_dir, 'doctrees') - self.mkpath(self.doctree_dir) + self.mkpath(self.doctree_dir) # type: ignore self.builder_target_dir = os.path.join(self.build_dir, self.builder) - self.mkpath(self.builder_target_dir) + self.mkpath(self.builder_target_dir) # type: ignore def run(self): + # type: () -> None if not color_terminal(): nocolor() - if not self.verbose: + if not self.verbose: # type: ignore status_stream = StringIO() else: - status_stream = sys.stdout + status_stream = sys.stdout # type: ignore confoverrides = {} if self.project: confoverrides['project'] = self.project @@ -155,26 +173,24 @@ def run(self): confoverrides['today'] = self.today if self.copyright: confoverrides['copyright'] = self.copyright - app = Sphinx(self.source_dir, self.config_dir, - self.builder_target_dir, self.doctree_dir, - self.builder, confoverrides, status_stream, - freshenv=self.fresh_env) try: - app.build(force_all=self.all_files) - if app.statuscode: - raise DistutilsExecError( - 'caused by %s builder.' % app.builder.name) - except Exception as err: - from docutils.utils import SystemMessage - if isinstance(err, SystemMessage): - print(darkred('reST markup error:'), file=sys.stderr) - print(err.args[0].encode('ascii', 'backslashreplace'), - file=sys.stderr) - else: - raise + with docutils_namespace(): + app = Sphinx(self.source_dir, self.config_dir, + self.builder_target_dir, self.doctree_dir, + self.builder, confoverrides, status_stream, + freshenv=self.fresh_env, + warningiserror=self.warning_is_error) + app.build(force_all=self.all_files) + if app.statuscode: + raise DistutilsExecError( + 'caused by %s builder.' % app.builder.name) + except Exception as exc: + handle_exception(app, self, exc, sys.stderr) + if not self.pdb: + raise SystemExit(1) if self.link_index: - src = app.config.master_doc + app.builder.out_suffix - dst = app.builder.get_outfilename('index') + src = app.config.master_doc + app.builder.out_suffix # type: ignore + dst = app.builder.get_outfilename('index') # type: ignore os.symlink(src, dst) diff --git a/sphinx/templates/latex/content.tex_t b/sphinx/templates/latex/content.tex_t new file mode 100644 index 00000000000..e35c83648be --- /dev/null +++ b/sphinx/templates/latex/content.tex_t @@ -0,0 +1,52 @@ +%% Generated by Sphinx. +\def\sphinxdocclass{<%= docclass %>} +<% if latex_engine == 'lualatex' -%> +\IfFileExists{luatex85.sty} + {\RequirePackage{luatex85}} + {\ifdefined\luatexversion\ifnum\luatexversion>84\relax + \PackageError{sphinx} + {** With this LuaTeX (\the\luatexversion),Sphinx requires luatex85.sty **} + {** Add the LaTeX package luatex85 to your TeX installation, and try again **} + \endinput\fi\fi} +<% endif -%> +\documentclass[<%= papersize %>,<%= pointsize %><%= classoptions %>]{<%= wrapperclass %>} +\ifdefined\pdfpxdimen + \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen +\fi \sphinxpxdimen=<%= pxunit %>\relax +<%= passoptionstopackages %> +<%= geometry %> +<%= inputenc %> +<%= utf8extra %> +<%= cmappkg %> +<%= fontenc %> +<%= amsmath %> +<%= multilingual %> +<%= fontpkg %> +<%= fncychap %> +<%= longtable %> +\usepackage<%= sphinxpkgoptions %>{sphinx} +<%= sphinxsetup %> +\usepackage{multirow} +\usepackage{eqparbox} +<%= usepackages %> +<%= hyperref %> +<%= contentsname %> +<%= numfig_format %> +<%= pageautorefname %> +<%= tocdepth %> +<%= secnumdepth %> +<%= preamble %> + +\title{<%= title %>} +\date{<%= date %>} +\release{<%= release %>} +\author{<%= author %>} +\newcommand{\sphinxlogo}{<%= logo %>} +\renewcommand{\releasename}{<%= releasename %>} +<%= makeindex %> +<%= body %> +<%= atendofbody %> +<%= indices %> +\renewcommand{\indexname}{<%= indexname %>} +<%= printindex %> +\end{document} diff --git a/sphinx/templates/quickstart/Makefile.new_t b/sphinx/templates/quickstart/Makefile.new_t new file mode 100644 index 00000000000..c7cd62ddaa9 --- /dev/null +++ b/sphinx/templates/quickstart/Makefile.new_t @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = {{ project_fn }} +SOURCEDIR = {{ rsrcdir }} +BUILDDIR = {{ rbuilddir }} + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/sphinx/templates/quickstart/Makefile_t b/sphinx/templates/quickstart/Makefile_t new file mode 100644 index 00000000000..5505f23f5c6 --- /dev/null +++ b/sphinx/templates/quickstart/Makefile_t @@ -0,0 +1,242 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = {{ rbuilddir }} + +# Internal variables. +PAPEROPT_a4 = -D latex_elements.papersize=a4 +PAPEROPT_letter = -D latex_elements.papersize=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) {{ rsrcdir }} +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) {{ rsrcdir }} + +.PHONY: help +help: + @echo "Please use \`make <target>' where <target> is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and an HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " applehelp to make an Apple Help Book" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " epub3 to make an epub3" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " lualatexpdf to make LaTeX files and run them through lualatex" + @echo " xelatexpdf to make LaTeX files and run them through xelatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " coverage to run coverage check of the documentation (if enabled)" + @echo " dummy to check syntax errors of document sources" + +.PHONY: clean +clean: + rm -rf $(BUILDDIR)/* + +.PHONY: html +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +.PHONY: dirhtml +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +.PHONY: singlehtml +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +.PHONY: pickle +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +.PHONY: json +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +.PHONY: htmlhelp +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +.PHONY: qthelp +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/{{ project_fn }}.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/{{ project_fn }}.qhc" + +.PHONY: applehelp +applehelp: + $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp + @echo + @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." + @echo "N.B. You won't be able to view it unless you put it in" \ + "~/Library/Documentation/Help or install it in your application" \ + "bundle." + +.PHONY: devhelp +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/{{ project_fn }}" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/{{ project_fn }}" + @echo "# devhelp" + +.PHONY: epub +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +.PHONY: epub3 +epub3: + $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 + @echo + @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." + +.PHONY: latex +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +.PHONY: latexpdf +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: latexpdfja +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: lualatexpdf +lualatexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through lualatex..." + $(MAKE) PDFLATEX=lualatex -C $(BUILDDIR)/latex all-pdf + @echo "lualatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: xelatexpdf +xelatexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through xelatex..." + $(MAKE) PDFLATEX=xelatex -C $(BUILDDIR)/latex all-pdf + @echo "xelatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: text +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +.PHONY: man +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +.PHONY: texinfo +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +.PHONY: info +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +.PHONY: gettext +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +.PHONY: changes +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +.PHONY: linkcheck +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +.PHONY: doctest +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +.PHONY: coverage +coverage: + $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/coverage/python.txt." + +.PHONY: xml +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +.PHONY: pseudoxml +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." + +.PHONY: dummy +dummy: + $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy + @echo + @echo "Build finished. Dummy builder generates no files." + diff --git a/sphinx/templates/quickstart/conf.py_t b/sphinx/templates/quickstart/conf.py_t new file mode 100644 index 00000000000..60a8f5cdcc4 --- /dev/null +++ b/sphinx/templates/quickstart/conf.py_t @@ -0,0 +1,193 @@ +{% if PY3 -%} +#!/usr/bin/env python3 +{% endif -%} +# -*- coding: utf-8 -*- +# +# {{ project }} documentation build configuration file, created by +# sphinx-quickstart on {{ now }}. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +{% if append_syspath -%} +import os +import sys +sys.path.insert(0, u'{{ module_path }}') +{% else -%} +# import os +# import sys +{% if module_path -%} +# sys.path.insert(0, u'{{ module_path }}') +{% else -%} +# sys.path.insert(0, os.path.abspath('.')) +{% endif -%} +{% endif %} + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [{{ extensions }}] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['{{ dot }}templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '{{ suffix }}' + +# The master toctree document. +master_doc = '{{ master_str }}' + +# General information about the project. +project = u'{{ project_str }}' +copyright = u'{{ copyright_str }}' +author = u'{{ author_str }}' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'{{ version_str }}' +# The full version, including alpha/beta/rc tags. +release = u'{{ release_str }}' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = {{ language | repr }} + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [{{ exclude_patterns }}] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = {{ ext_todo }} + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'alabaster' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['{{ dot }}static'] + + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = '{{ project_fn }}doc' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, '{{ project_fn }}.tex', u'{{ project_doc_texescaped_str }}', + u'{{ author_texescaped_str }}', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, '{{ project_manpage }}', u'{{ project_doc_str }}', + [author], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, '{{ project_fn }}', u'{{ project_doc_str }}', + author, '{{ project_fn }}', 'One line description of project.', + 'Miscellaneous'), +] + +{% if epub %} + +# -- Options for Epub output ---------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = project +epub_author = author +epub_publisher = author +epub_copyright = copyright + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +# +# epub_identifier = '' + +# A unique identification for the text. +# +# epub_uid = '' + +# A list of files that should not be packed into the epub file. +epub_exclude_files = ['search.html'] +{% endif %} + +{% if ext_intersphinx %} +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'https://docs.python.org/': None} +{% endif %} diff --git a/sphinx/templates/quickstart/make.bat.new_t b/sphinx/templates/quickstart/make.bat.new_t new file mode 100644 index 00000000000..e49ffbe78b2 --- /dev/null +++ b/sphinx/templates/quickstart/make.bat.new_t @@ -0,0 +1,37 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR={{ rsrcdir }} +set BUILDDIR={{ rbuilddir }} +set SPHINXPROJ={{ project_fn }} + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.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 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd + diff --git a/sphinx/templates/quickstart/make.bat_t b/sphinx/templates/quickstart/make.bat_t new file mode 100644 index 00000000000..8f993a7b139 --- /dev/null +++ b/sphinx/templates/quickstart/make.bat_t @@ -0,0 +1,285 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +pushd %~dp0 + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR={{ rbuilddir }} +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% {{ rsrcdir }} +set I18NSPHINXOPTS=%SPHINXOPTS% {{ rsrcdir }} +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^<target^>` where ^<target^> is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and an HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. epub3 to make an epub3 + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. texinfo to make Texinfo files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. xml to make Docutils-native XML files + echo. pseudoxml to make pseudoxml-XML files for display purposes + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + echo. coverage to run coverage check of the documentation if enabled + echo. dummy to check syntax errors of document sources + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + + +REM Check if sphinx-build is available and fallback to Python version if any +%SPHINXBUILD% 1>NUL 2>NUL +if errorlevel 9009 goto sphinx_python +goto sphinx_ok + +:sphinx_python + +set SPHINXBUILD=python -m sphinx.__init__ +%SPHINXBUILD% 2> nul +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.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 +) + +:sphinx_ok + + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "singlehtml" ( + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\{{ project_fn }}.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\{{ project_fn }}.ghc + goto end +) + +if "%1" == "devhelp" ( + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. + goto end +) + +if "%1" == "epub" ( + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end +) + +if "%1" == "epub3" ( + %SPHINXBUILD% -b epub3 %ALLSPHINXOPTS% %BUILDDIR%/epub3 + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub3 file is in %BUILDDIR%/epub3. + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdf" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf + cd %~dp0 + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdfja" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf-ja + cd %~dp0 + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "text" ( + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end +) + +if "%1" == "man" ( + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end +) + +if "%1" == "texinfo" ( + %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + if errorlevel 1 exit /b 1 + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +if "%1" == "coverage" ( + %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage + if errorlevel 1 exit /b 1 + echo. + echo.Testing of coverage in the sources finished, look at the ^ +results in %BUILDDIR%/coverage/python.txt. + goto end +) + +if "%1" == "xml" ( + %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The XML files are in %BUILDDIR%/xml. + goto end +) + +if "%1" == "pseudoxml" ( + %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. + goto end +) + +if "%1" == "dummy" ( + %SPHINXBUILD% -b dummy %ALLSPHINXOPTS% %BUILDDIR%/dummy + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. Dummy builder generates no files. + goto end +) + +:end +popd + diff --git a/sphinx/templates/quickstart/master_doc.rst_t b/sphinx/templates/quickstart/master_doc.rst_t new file mode 100644 index 00000000000..3aa98af084c --- /dev/null +++ b/sphinx/templates/quickstart/master_doc.rst_t @@ -0,0 +1,21 @@ +.. {{ project }} documentation master file, created by + sphinx-quickstart on {{ now }}. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to {{ project }}'s documentation! +==========={{ project_underline }}================= + +.. toctree:: + :maxdepth: {{ mastertocmaxdepth }} + :caption: Contents: + +{{ mastertoctree }} + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/sphinx/texinputs/Makefile b/sphinx/texinputs/Makefile_t similarity index 77% rename from sphinx/texinputs/Makefile rename to sphinx/texinputs/Makefile_t index 5e6030c0d4e..ffec3662c25 100644 --- a/sphinx/texinputs/Makefile +++ b/sphinx/texinputs/Makefile_t @@ -3,21 +3,28 @@ ALLDOCS = $(basename $(wildcard *.tex)) ALLPDF = $(addsuffix .pdf,$(ALLDOCS)) ALLDVI = $(addsuffix .dvi,$(ALLDOCS)) +ALLPS = $(addsuffix .ps,$(ALLDOCS)) # Prefix for archive names ARCHIVEPRREFIX = # Additional LaTeX options LATEXOPTS = +# format: pdf or dvi +FMT = pdf LATEX = latex -PDFLATEX = pdflatex +PDFLATEX = {{ latex_engine }} MAKEINDEX = makeindex +{% if latex_engine == 'platex' %} +all: all-pdf-ja +all-pdf: all-pdf-ja +{% else %} all: $(ALLPDF) all-pdf: $(ALLPDF) +{% endif -%} all-dvi: $(ALLDVI) -all-ps: all-dvi - for f in *.dvi; do dvips $$f; done +all-ps: $(ALLPS) all-pdf-ja: for f in *.pdf *.png *.gif *.jpg *.jpeg; do extractbb $$f; done @@ -41,9 +48,15 @@ tar: all-$(FMT) tar cf $(ARCHIVEPREFIX)docs-$(FMT).tar $(ARCHIVEPREFIX)docs-$(FMT) rm -r $(ARCHIVEPREFIX)docs-$(FMT) +gz: tar + gzip -9 < $(ARCHIVEPREFIX)docs-$(FMT).tar > $(ARCHIVEPREFIX)docs-$(FMT).tar.gz + bz2: tar bzip2 -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar +xz: tar + xz -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar + # The number of LaTeX runs is quite conservative, but I don't expect it # to get run often, so the little extra time won't hurt. %.dvi: %.tex @@ -62,9 +75,12 @@ bz2: tar $(PDFLATEX) $(LATEXOPTS) '$<' $(PDFLATEX) $(LATEXOPTS) '$<' +%.ps: %.dvi + dvips '$<' + clean: - rm -f *.dvi *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla + rm -f *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla *.ps *.tar *.tar.gz *.tar.bz2 *.tar.xz $(ALLPDF) $(ALLDVI) -.PHONY: all all-pdf all-dvi all-ps clean +.PHONY: all all-pdf all-dvi all-ps clean zip tar gz bz2 xz .PHONY: all-pdf-ja diff --git a/sphinx/texinputs/fncychap.sty b/sphinx/texinputs/fncychap.sty deleted file mode 100644 index 9a56c04ed42..00000000000 --- a/sphinx/texinputs/fncychap.sty +++ /dev/null @@ -1,683 +0,0 @@ -%%% Copyright Ulf A. Lindgren -%%% -%%% Note Premission is granted to modify this file under -%%% the condition that it is saved using another -%%% file and package name. -%%% -%%% Revision 1.1 (1997) -%%% -%%% Jan. 8th Modified package name base date option -%%% Jan. 22th Modified FmN and FmTi for error in book.cls -%%% \MakeUppercase{#}->{\MakeUppercase#} -%%% Apr. 6th Modified Lenny option to prevent undesired -%%% skip of line. -%%% Nov. 8th Fixed \@chapapp for AMS -%%% -%%% Revision 1.2 (1998) -%%% -%%% Feb. 11th Fixed appendix problem related to Bjarne -%%% Aug. 11th Fixed problem related to 11pt and 12pt -%%% suggested by Tomas Lundberg. THANKS! -%%% -%%% Revision 1.3 (2004) -%%% Sep. 20th problem with frontmatter, mainmatter and -%%% backmatter, pointed out by Lapo Mori -%%% -%%% Revision 1.31 (2004) -%%% Sep. 21th problem with the Rejne definition streched text -%%% caused ugly gaps in the vrule aligned with the title -%%% text. Kindly pointed out to me by Hendri Adriaens -%%% -%%% Revision 1.32 (2005) -%%% Jun. 23th compatibility problem with the KOMA class 'scrbook.cls' -%%% a remedy is a redefinition of '\@schapter' in -%%% line with that used in KOMA. The problem was pointed -%%% out to me by Mikkel Holm Olsen -%%% -%%% Revision 1.33 (2005) -%%% Aug. 9th misspelled ``TWELV'' corrected, the error was pointed -%%% out to me by George Pearson -%%% -%%% Revision 1.34 (2007) -%%% Added an alternative to Lenny provided by Peter -%%% Osborne (2005-11-28) -%%% Corrected front, main and back matter, based on input -%%% from Bas van Gils (2006-04-24) -%%% Jul. 30th Added Bjornstrup option provided by Jean-Marc -%%% Francois (2007-01-05). -%%% Reverted to \MakeUppercase{#} see rev 1.1, solved -%%% problem with MakeUppercase and MakeLowercase pointed -%%% out by Marco Feuerstein (2007-06-06) - - -%%% Last modified Jul. 2007 - -\NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesPackage{fncychap} - [2007/07/30 v1.34 - LaTeX package (Revised chapters)] - -%%%% For conditional inclusion of color -\newif\ifusecolor -\usecolorfalse - - - -%%%% DEFINITION OF Chapapp variables -\newcommand{\CNV}{\huge\bfseries} -\newcommand{\ChNameVar}[1]{\renewcommand{\CNV}{#1}} - - -%%%% DEFINITION OF TheChapter variables -\newcommand{\CNoV}{\huge\bfseries} -\newcommand{\ChNumVar}[1]{\renewcommand{\CNoV}{#1}} - -\newif\ifUCN -\UCNfalse -\newif\ifLCN -\LCNfalse -\def\ChNameLowerCase{\LCNtrue\UCNfalse} -\def\ChNameUpperCase{\UCNtrue\LCNfalse} -\def\ChNameAsIs{\UCNfalse\LCNfalse} - -%%%%% Fix for AMSBook 971008 - -\@ifundefined{@chapapp}{\let\@chapapp\chaptername}{} - - -%%%%% Fix for Bjarne and appendix 980211 - -\newif\ifinapp -\inappfalse -\renewcommand\appendix{\par - \setcounter{chapter}{0}% - \setcounter{section}{0}% - \inapptrue% - \renewcommand\@chapapp{\appendixname}% - \renewcommand\thechapter{\@Alph\c@chapter}} - -%%%%% Fix for frontmatter, mainmatter, and backmatter 040920 - -\@ifundefined{@mainmatter}{\newif\if@mainmatter \@mainmattertrue}{} - -%%%%% - - - -\newcommand{\FmN}[1]{% -\ifUCN - {\MakeUppercase{#1}}\LCNfalse -\else - \ifLCN - {\MakeLowercase{#1}}\UCNfalse - \else #1 - \fi -\fi} - - -%%%% DEFINITION OF Title variables -\newcommand{\CTV}{\Huge\bfseries} -\newcommand{\ChTitleVar}[1]{\renewcommand{\CTV}{#1}} - -%%%% DEFINITION OF the basic rule width -\newlength{\RW} -\setlength{\RW}{1pt} -\newcommand{\ChRuleWidth}[1]{\setlength{\RW}{#1}} - -\newif\ifUCT -\UCTfalse -\newif\ifLCT -\LCTfalse -\def\ChTitleLowerCase{\LCTtrue\UCTfalse} -\def\ChTitleUpperCase{\UCTtrue\LCTfalse} -\def\ChTitleAsIs{\UCTfalse\LCTfalse} -\newcommand{\FmTi}[1]{% -\ifUCT - {\MakeUppercase{#1}}\LCTfalse -\else - \ifLCT - {\MakeLowercase{#1}}\UCTfalse - \else {#1} - \fi -\fi} - - - -\newlength{\mylen} -\newlength{\myhi} -\newlength{\px} -\newlength{\py} -\newlength{\pyy} -\newlength{\pxx} - - -\def\mghrulefill#1{\leavevmode\leaders\hrule\@height #1\hfill\kern\z@} - -\newcommand{\DOCH}{% - \CNV\FmN{\@chapapp}\space \CNoV\thechapter - \par\nobreak - \vskip 20\p@ - } -\newcommand{\DOTI}[1]{% - \CTV\FmTi{#1}\par\nobreak - \vskip 40\p@ - } -\newcommand{\DOTIS}[1]{% - \CTV\FmTi{#1}\par\nobreak - \vskip 40\p@ - } - -%%%%%% SONNY DEF - -\DeclareOption{Sonny}{% - \ChNameVar{\Large\sf} - \ChNumVar{\Huge} - \ChTitleVar{\Large\sf} - \ChRuleWidth{0.5pt} - \ChNameUpperCase - \renewcommand{\DOCH}{% - \raggedleft - \CNV\FmN{\@chapapp}\space \CNoV\thechapter - \par\nobreak - \vskip 40\p@} - \renewcommand{\DOTI}[1]{% - \CTV\raggedleft\mghrulefill{\RW}\par\nobreak - \vskip 5\p@ - \CTV\FmTi{#1}\par\nobreak - \mghrulefill{\RW}\par\nobreak - \vskip 40\p@} - \renewcommand{\DOTIS}[1]{% - \CTV\raggedleft\mghrulefill{\RW}\par\nobreak - \vskip 5\p@ - \CTV\FmTi{#1}\par\nobreak - \mghrulefill{\RW}\par\nobreak - \vskip 40\p@} -} - -%%%%%% LENNY DEF - -\DeclareOption{Lenny}{% - - \ChNameVar{\fontsize{14}{16}\usefont{OT1}{phv}{m}{n}\selectfont} - \ChNumVar{\fontsize{60}{62}\usefont{OT1}{ptm}{m}{n}\selectfont} - \ChTitleVar{\Huge\bfseries\rm} - \ChRuleWidth{1pt} - \renewcommand{\DOCH}{% - \settowidth{\px}{\CNV\FmN{\@chapapp}} - \addtolength{\px}{2pt} - \settoheight{\py}{\CNV\FmN{\@chapapp}} - \addtolength{\py}{1pt} - - \settowidth{\mylen}{\CNV\FmN{\@chapapp}\space\CNoV\thechapter} - \addtolength{\mylen}{1pt} - \settowidth{\pxx}{\CNoV\thechapter} - \addtolength{\pxx}{-1pt} - - \settoheight{\pyy}{\CNoV\thechapter} - \addtolength{\pyy}{-2pt} - \setlength{\myhi}{\pyy} - \addtolength{\myhi}{-1\py} - \par - \parbox[b]{\textwidth}{% - \rule[\py]{\RW}{\myhi}% - \hskip -\RW% - \rule[\pyy]{\px}{\RW}% - \hskip -\px% - \raggedright% - \CNV\FmN{\@chapapp}\space\CNoV\thechapter% - \hskip1pt% - \mghrulefill{\RW}% - \rule{\RW}{\pyy}\par\nobreak% - \vskip -\baselineskip% - \vskip -\pyy% - \hskip \mylen% - \mghrulefill{\RW}\par\nobreak% - \vskip \pyy}% - \vskip 20\p@} - - - \renewcommand{\DOTI}[1]{% - \raggedright - \CTV\FmTi{#1}\par\nobreak - \vskip 40\p@} - - \renewcommand{\DOTIS}[1]{% - \raggedright - \CTV\FmTi{#1}\par\nobreak - \vskip 40\p@} - } - -%%%%%% Peter Osbornes' version of LENNY DEF - -\DeclareOption{PetersLenny}{% - -% five new lengths -\newlength{\bl} % bottom left : orig \space -\setlength{\bl}{6pt} -\newcommand{\BL}[1]{\setlength{\bl}{#1}} -\newlength{\br} % bottom right : orig 1pt -\setlength{\br}{1pt} -\newcommand{\BR}[1]{\setlength{\br}{#1}} -\newlength{\tl} % top left : orig 2pt -\setlength{\tl}{2pt} -\newcommand{\TL}[1]{\setlength{\tl}{#1}} -\newlength{\trr} % top right :orig 1pt -\setlength{\trr}{1pt} -\newcommand{\TR}[1]{\setlength{\trr}{#1}} -\newlength{\blrule} % top right :orig 1pt -\setlength{\trr}{0pt} -\newcommand{\BLrule}[1]{\setlength{\blrule}{#1}} - - - \ChNameVar{\fontsize{14}{16}\usefont{OT1}{phv}{m}{n}\selectfont} - \ChNumVar{\fontsize{60}{62}\usefont{OT1}{ptm}{m}{n}\selectfont} - \ChTitleVar{\Huge\bfseries\rm} - \ChRuleWidth{1pt} -\renewcommand{\DOCH}{% - - -%%%%%%% tweaks for 1--9 and A--Z -\ifcase\c@chapter\relax% -\or\BL{-3pt}\TL{-4pt}\BR{0pt}\TR{-6pt}%1 -\or\BL{0pt}\TL{-4pt}\BR{2pt}\TR{-4pt}%2 -\or\BL{0pt}\TL{-4pt}\BR{2pt}\TR{-4pt}%3 -\or\BL{0pt}\TL{5pt}\BR{2pt}\TR{-4pt}%4 -\or\BL{0pt}\TL{3pt}\BR{2pt}\TR{-4pt}%5 -\or\BL{-1pt}\TL{0pt}\BR{2pt}\TR{-2pt}%6 -\or\BL{0pt}\TL{-3pt}\BR{2pt}\TR{-2pt}%7 -\or\BL{0pt}\TL{-3pt}\BR{2pt}\TR{-2pt}%8 -\or\BL{0pt}\TL{-3pt}\BR{-4pt}\TR{-2pt}%9 -\or\BL{-3pt}\TL{-3pt}\BR{2pt}\TR{-7pt}%10 -\or\BL{-6pt}\TL{-6pt}\BR{0pt}\TR{-9pt}%11 -\or\BL{-6pt}\TL{-6pt}\BR{2pt}\TR{-7pt}%12 -\or\BL{-5pt}\TL{-5pt}\BR{0pt}\TR{-9pt}%13 -\or\BL{-6pt}\TL{-6pt}\BR{0pt}\TR{-9pt}%14 -\or\BL{-3pt}\TL{-3pt}\BR{3pt}\TR{-6pt}%15 -\or\BL{-3pt}\TL{-3pt}\BR{3pt}\TR{-6pt}%16 -\or\BL{-5pt}\TL{-3pt}\BR{-8pt}\TR{-6pt}%17 -\or\BL{-5pt}\TL{-5pt}\BR{0pt}\TR{-9pt}%18 -\or\BL{-3pt}\TL{-3pt}\BR{-6pt}\TR{-9pt}%19 -\or\BL{0pt}\TL{0pt}\BR{0pt}\TR{-5pt}%20 -\fi - -\ifinapp\ifcase\c@chapter\relax% -\or\BL{0pt}\TL{14pt}\BR{5pt}\TR{-19pt}%A -\or\BL{0pt}\TL{-5pt}\BR{-3pt}\TR{-8pt}%B -\or\BL{-3pt}\TL{-2pt}\BR{1pt}\TR{-6pt}\BLrule{0pt}%C -\or\BL{0pt}\TL{-5pt}\BR{-3pt}\TR{-8pt}\BLrule{0pt}%D -\or\BL{0pt}\TL{-5pt}\BR{2pt}\TR{-3pt}%E -\or\BL{0pt}\TL{-5pt}\BR{-10pt}\TR{-1pt}%F -\or\BL{-3pt}\TL{0pt}\BR{0pt}\TR{-7pt}%G -\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}%H -\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}%I -\or\BL{2pt}\TL{0pt}\BR{-3pt}\TR{1pt}%J -\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}%K -\or\BL{0pt}\TL{-5pt}\BR{2pt}\TR{-19pt}%L -\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}%M -\or\BL{0pt}\TL{-5pt}\BR{-2pt}\TR{-1pt}%N -\or\BL{-3pt}\TL{-2pt}\BR{-3pt}\TR{-11pt}%O -\or\BL{0pt}\TL{-5pt}\BR{-9pt}\TR{-3pt}%P -\or\BL{-3pt}\TL{-2pt}\BR{-3pt}\TR{-11pt}%Q -\or\BL{0pt}\TL{-5pt}\BR{4pt}\TR{-8pt}%R -\or\BL{-2pt}\TL{-2pt}\BR{-2pt}\TR{-7pt}%S -\or\BL{-3pt}\TL{0pt}\BR{-5pt}\TR{4pt}\BLrule{8pt}%T -\or\BL{-7pt}\TL{-11pt}\BR{-5pt}\TR{-7pt}\BLrule{0pt}%U -\or\BL{-14pt}\TL{-5pt}\BR{-14pt}\TR{-1pt}\BLrule{14pt}%V -\or\BL{-10pt}\TL{-9pt}\BR{-13pt}\TR{-3pt}\BLrule{7pt}%W -\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}\BLrule{0pt}%X -\or\BL{-6pt}\TL{-4pt}\BR{-7pt}\TR{1pt}\BLrule{7pt}%Y -\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}\BLrule{0pt}%Z -\fi\fi -%%%%%%% - \settowidth{\px}{\CNV\FmN{\@chapapp}} - \addtolength{\px}{\tl} %MOD change 2pt to \tl - \settoheight{\py}{\CNV\FmN{\@chapapp}} - \addtolength{\py}{1pt} - - \settowidth{\mylen}{\CNV\FmN{\@chapapp}\space\CNoV\thechapter} - \addtolength{\mylen}{\trr}% MOD change 1pt to \tr - \settowidth{\pxx}{\CNoV\thechapter} - \addtolength{\pxx}{-1pt} - - \settoheight{\pyy}{\CNoV\thechapter} - \addtolength{\pyy}{-2pt} - \setlength{\myhi}{\pyy} - \addtolength{\myhi}{-1\py} - \par - \parbox[b]{\textwidth}{% - \rule[\py]{\RW}{\myhi}% - \hskip -\RW% - \rule[\pyy]{\px}{\RW}% - \hskip -\px% - \raggedright% - \CNV\FmN{\@chapapp}\rule{\blrule}{\RW}\hskip\bl\CNoV\thechapter%MOD -% \CNV\FmN{\@chapapp}\space\CNoV\thechapter %ORIGINAL - \hskip\br% %MOD 1pt to \br - \mghrulefill{\RW}% - \rule{\RW}{\pyy}\par\nobreak% - \vskip -\baselineskip% - \vskip -\pyy% - \hskip \mylen% - \mghrulefill{\RW}\par\nobreak% - \vskip \pyy}% - \vskip 20\p@} - - - \renewcommand{\DOTI}[1]{% - \raggedright - \CTV\FmTi{#1}\par\nobreak - \vskip 40\p@} - - \renewcommand{\DOTIS}[1]{% - \raggedright - \CTV\FmTi{#1}\par\nobreak - \vskip 40\p@} - } - - -% - - -%%%%%% BJORNSTRUP DEF - -\DeclareOption{Bjornstrup}{% - \usecolortrue - % pzc (Zapf Chancelery) is nice. ppl (Palatino) is cool too. - \ChNumVar{\fontsize{76}{80}\usefont{OT1}{pzc}{m}{n}\selectfont} - \ChTitleVar{\raggedleft\Large\sffamily\bfseries} - - \setlength{\myhi}{10pt} % Space between grey box border and text - \setlength{\mylen}{\textwidth} - \addtolength{\mylen}{-2\myhi} - \renewcommand{\DOCH}{% - \settowidth{\py}{\CNoV\thechapter} - \addtolength{\py}{-10pt} % Amount of space by which the -% % number is shifted right - \fboxsep=0pt% - \colorbox[gray]{.85}{\rule{0pt}{40pt}\parbox[b]{\textwidth}{\hfill}}% - \kern-\py\raise20pt% - \hbox{\color[gray]{.5}\CNoV\thechapter}\\% - } - - \renewcommand{\DOTI}[1]{% - \nointerlineskip\raggedright% - \fboxsep=\myhi% - \vskip-1ex% - \colorbox[gray]{.85}{\parbox[t]{\mylen}{\CTV\FmTi{#1}}}\par\nobreak% - \vskip 40\p@% - } - - \renewcommand{\DOTIS}[1]{% - \fboxsep=0pt - \colorbox[gray]{.85}{\rule{0pt}{40pt}\parbox[b]{\textwidth}{\hfill}}\\% - \nointerlineskip\raggedright% - \fboxsep=\myhi% - \colorbox[gray]{.85}{\parbox[t]{\mylen}{\CTV\FmTi{#1}}}\par\nobreak% - \vskip 40\p@% - } -} - - -%%%%%%% GLENN DEF - - -\DeclareOption{Glenn}{% - \ChNameVar{\bfseries\Large\sf} - \ChNumVar{\Huge} - \ChTitleVar{\bfseries\Large\rm} - \ChRuleWidth{1pt} - \ChNameUpperCase - \ChTitleUpperCase - \renewcommand{\DOCH}{% - \settoheight{\myhi}{\CTV\FmTi{Test}} - \setlength{\py}{\baselineskip} - \addtolength{\py}{\RW} - \addtolength{\py}{\myhi} - \setlength{\pyy}{\py} - \addtolength{\pyy}{-1\RW} - - \raggedright - \CNV\FmN{\@chapapp}\space\CNoV\thechapter - \hskip 3pt\mghrulefill{\RW}\rule[-1\pyy]{2\RW}{\py}\par\nobreak} - - \renewcommand{\DOTI}[1]{% - \addtolength{\pyy}{-4pt} - \settoheight{\myhi}{\CTV\FmTi{#1}} - \addtolength{\myhi}{\py} - \addtolength{\myhi}{-1\RW} - \vskip -1\pyy - \rule{2\RW}{\myhi}\mghrulefill{\RW}\hskip 2pt - \raggedleft\CTV\FmTi{#1}\par\nobreak - \vskip 80\p@} - -\newlength{\backskip} - \renewcommand{\DOTIS}[1]{% -% \setlength{\py}{10pt} -% \setlength{\pyy}{\py} -% \addtolength{\pyy}{\RW} -% \setlength{\myhi}{\baselineskip} -% \addtolength{\myhi}{\pyy} -% \mghrulefill{\RW}\rule[-1\py]{2\RW}{\pyy}\par\nobreak -% \addtolength{}{} -%\vskip -1\baselineskip -% \rule{2\RW}{\myhi}\mghrulefill{\RW}\hskip 2pt -% \raggedleft\CTV\FmTi{#1}\par\nobreak -% \vskip 60\p@} -%% Fix suggested by Tomas Lundberg - \setlength{\py}{25pt} % eller vad man vill - \setlength{\pyy}{\py} - \setlength{\backskip}{\py} - \addtolength{\backskip}{2pt} - \addtolength{\pyy}{\RW} - \setlength{\myhi}{\baselineskip} - \addtolength{\myhi}{\pyy} - \mghrulefill{\RW}\rule[-1\py]{2\RW}{\pyy}\par\nobreak - \vskip -1\backskip - \rule{2\RW}{\myhi}\mghrulefill{\RW}\hskip 3pt % - \raggedleft\CTV\FmTi{#1}\par\nobreak - \vskip 40\p@} - } - -%%%%%%% CONNY DEF - -\DeclareOption{Conny}{% - \ChNameUpperCase - \ChTitleUpperCase - \ChNameVar{\centering\Huge\rm\bfseries} - \ChNumVar{\Huge} - \ChTitleVar{\centering\Huge\rm} - \ChRuleWidth{2pt} - - \renewcommand{\DOCH}{% - \mghrulefill{3\RW}\par\nobreak - \vskip -0.5\baselineskip - \mghrulefill{\RW}\par\nobreak - \CNV\FmN{\@chapapp}\space \CNoV\thechapter - \par\nobreak - \vskip -0.5\baselineskip - } - \renewcommand{\DOTI}[1]{% - \mghrulefill{\RW}\par\nobreak - \CTV\FmTi{#1}\par\nobreak - \vskip 60\p@ - } - \renewcommand{\DOTIS}[1]{% - \mghrulefill{\RW}\par\nobreak - \CTV\FmTi{#1}\par\nobreak - \vskip 60\p@ - } - } - -%%%%%%% REJNE DEF - -\DeclareOption{Rejne}{% - - \ChNameUpperCase - \ChTitleUpperCase - \ChNameVar{\centering\Large\rm} - \ChNumVar{\Huge} - \ChTitleVar{\centering\Huge\rm} - \ChRuleWidth{1pt} - \renewcommand{\DOCH}{% - \settoheight{\py}{\CNoV\thechapter} - \parskip=0pt plus 1pt % Set parskip to default, just in case v1.31 - \addtolength{\py}{-1pt} - \CNV\FmN{\@chapapp}\par\nobreak - \vskip 20\p@ - \setlength{\myhi}{2\baselineskip} - \setlength{\px}{\myhi} - \addtolength{\px}{-1\RW} - \rule[-1\px]{\RW}{\myhi}\mghrulefill{\RW}\hskip - 10pt\raisebox{-0.5\py}{\CNoV\thechapter}\hskip 10pt\mghrulefill{\RW}\rule[-1\px]{\RW}{\myhi}\par\nobreak - \vskip -3\p@% Added -2pt vskip to correct for streched text v1.31 - } - \renewcommand{\DOTI}[1]{% - \setlength{\mylen}{\textwidth} - \parskip=0pt plus 1pt % Set parskip to default, just in case v1.31 - \addtolength{\mylen}{-2\RW} - {\vrule width\RW}\parbox{\mylen}{\CTV\FmTi{#1}}{\vrule width\RW}\par\nobreak% - \vskip -3pt\rule{\RW}{2\baselineskip}\mghrulefill{\RW}\rule{\RW}{2\baselineskip}% - \vskip 60\p@% Added -2pt in vskip to correct for streched text v1.31 - } - \renewcommand{\DOTIS}[1]{% - \setlength{\py}{\fboxrule} - \setlength{\fboxrule}{\RW} - \setlength{\mylen}{\textwidth} - \addtolength{\mylen}{-2\RW} - \fbox{\parbox{\mylen}{\vskip 2\baselineskip\CTV\FmTi{#1}\par\nobreak\vskip \baselineskip}} - \setlength{\fboxrule}{\py} - \vskip 60\p@ - } - } - - -%%%%%%% BJARNE DEF - -\DeclareOption{Bjarne}{% - \ChNameUpperCase - \ChTitleUpperCase - \ChNameVar{\raggedleft\normalsize\rm} - \ChNumVar{\raggedleft \bfseries\Large} - \ChTitleVar{\raggedleft \Large\rm} - \ChRuleWidth{1pt} - - -%% Note thechapter -> c@chapter fix appendix bug -%% Fixed misspelled 12 - - \newcounter{AlphaCnt} - \newcounter{AlphaDecCnt} - \newcommand{\AlphaNo}{% - \ifcase\number\theAlphaCnt - \ifnum\c@chapter=0 - ZERO\else{}\fi - \or ONE\or TWO\or THREE\or FOUR\or FIVE - \or SIX\or SEVEN\or EIGHT\or NINE\or TEN - \or ELEVEN\or TWELVE\or THIRTEEN\or FOURTEEN\or FIFTEEN - \or SIXTEEN\or SEVENTEEN\or EIGHTEEN\or NINETEEN\fi -} - - \newcommand{\AlphaDecNo}{% - \setcounter{AlphaDecCnt}{0} - \@whilenum\number\theAlphaCnt>0\do - {\addtocounter{AlphaCnt}{-10} - \addtocounter{AlphaDecCnt}{1}} - \ifnum\number\theAlphaCnt=0 - \else - \addtocounter{AlphaDecCnt}{-1} - \addtocounter{AlphaCnt}{10} - \fi - - - \ifcase\number\theAlphaDecCnt\or TEN\or TWENTY\or THIRTY\or - FORTY\or FIFTY\or SIXTY\or SEVENTY\or EIGHTY\or NINETY\fi - } - \newcommand{\TheAlphaChapter}{% - - \ifinapp - \thechapter - \else - \setcounter{AlphaCnt}{\c@chapter} - \ifnum\c@chapter<20 - \AlphaNo - \else - \AlphaDecNo\AlphaNo - \fi - \fi - } - \renewcommand{\DOCH}{% - \mghrulefill{\RW}\par\nobreak - \CNV\FmN{\@chapapp}\par\nobreak - \CNoV\TheAlphaChapter\par\nobreak - \vskip -1\baselineskip\vskip 5pt\mghrulefill{\RW}\par\nobreak - \vskip 20\p@ - } - \renewcommand{\DOTI}[1]{% - \CTV\FmTi{#1}\par\nobreak - \vskip 40\p@ - } - \renewcommand{\DOTIS}[1]{% - \CTV\FmTi{#1}\par\nobreak - \vskip 40\p@ - } -} - -\DeclareOption*{% - \PackageWarning{fancychapter}{unknown style option} - } - -\ProcessOptions* \relax - -\ifusecolor - \RequirePackage{color} -\fi -\def\@makechapterhead#1{% - \vspace*{50\p@}% - {\parindent \z@ \raggedright \normalfont - \ifnum \c@secnumdepth >\m@ne - \if@mainmatter%%%%% Fix for frontmatter, mainmatter, and backmatter 040920 - \DOCH - \fi - \fi - \interlinepenalty\@M - \if@mainmatter%%%%% Fix for frontmatter, mainmatter, and backmatter 060424 - \DOTI{#1}% - \else% - \DOTIS{#1}% - \fi - }} - - -%%% Begin: To avoid problem with scrbook.cls (fncychap version 1.32) - -%%OUT: -%\def\@schapter#1{\if@twocolumn -% \@topnewpage[\@makeschapterhead{#1}]% -% \else -% \@makeschapterhead{#1}% -% \@afterheading -% \fi} - -%%IN: -\def\@schapter#1{% -\if@twocolumn% - \@makeschapterhead{#1}% -\else% - \@makeschapterhead{#1}% - \@afterheading% -\fi} - -%%% End: To avoid problem with scrbook.cls (fncychap version 1.32) - -\def\@makeschapterhead#1{% - \vspace*{50\p@}% - {\parindent \z@ \raggedright - \normalfont - \interlinepenalty\@M - \DOTIS{#1} - \vskip 40\p@ - }} - -\endinput - - diff --git a/sphinx/texinputs/footnotehyper-sphinx.sty b/sphinx/texinputs/footnotehyper-sphinx.sty new file mode 100644 index 00000000000..a714f211dea --- /dev/null +++ b/sphinx/texinputs/footnotehyper-sphinx.sty @@ -0,0 +1,156 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{footnotehyper-sphinx}% + [2016/10/27 v0.9f hyperref aware footnote.sty for sphinx (JFB)] +%% +%% Package: footnotehyper-sphinx +%% Version: based on footnotehyper.sty v0.9f (2016/10/03) +%% as available at http://www.ctan.org/pkg/footnotehyper +%% License: the one applying to Sphinx +%% +%% Differences from footnotehyper v0.9f (2016/10/03): +%% 1. hyperref is assumed in use (with default hyperfootnotes=true), +%% 2. no need to check if footnote.sty was loaded, +%% 3. a special tabulary compatibility layer added, (partial but enough for +%% Sphinx), +%% 4. \sphinxfootnotemark, and use of \spx@opt@BeforeFootnote from sphinx.sty. +%% Note: with \footnotemark[N]/\footnotetext[N] syntax, hyperref +%% does not insert an hyperlink. This is _not_ improved here. +%% +\DeclareOption*{\PackageWarning{footnotehyper}{Option `\CurrentOption' is unknown}}% +\ProcessOptions\relax +\let\FNH@@makefntext\@makefntext\let\@makefntext\@firstofone +\RequirePackage{footnote} +\let\fnparbox\parbox\let\parbox\fn@parbox\let\@makefntext\FNH@@makefntext +\let\FNH@fn@footnote \footnote % buggy footnote.sty's \footnote +\let\FNH@fn@footnotetext\footnotetext % will be redefined later +\let\footnote \fn@latex@@footnote % meaning of \footnote before footnote.sty +\let\footnotetext\fn@latex@@footnotetext +\def\fn@endnote {\color@endgroup}% +\AtBeginDocument {% + \let\fn@latex@@footnote \footnote % meaning of \footnote at end of preamble + \let\fn@latex@@footnotetext\footnotetext + \let\fn@fntext \FNH@hyper@fntext + \let\spewnotes \FNH@hyper@spewnotes + \let\endsavenotes\spewnotes + \let\fn@endfntext\FNH@fixed@endfntext + \let\footnote \FNH@fixed@footnote + \let\footnotetext\FNH@fixed@footnotetext + \let\endfootnote\fn@endfntext + \let\endfootnotetext\endfootnote +}% +\def\FNH@hyper@fntext {% +%% amsmath compatibility + \ifx\ifmeasuring@\undefined\expandafter\@secondoftwo + \else\expandafter\@firstofone\fi + {\ifmeasuring@\expandafter\@gobbletwo\else\expandafter\@firstofone\fi}% +%% partial tabulary compatibility, [N] must be used, but Sphinx does it + {\ifx\equation$\expandafter\@gobbletwo\fi\FNH@hyper@fntext@i }%$ +}% +\long\def\FNH@hyper@fntext@i #1{\global\setbox\fn@notes\vbox + {\unvbox\fn@notes + \fn@startnote + \@makefntext + {\rule\z@\footnotesep\ignorespaces + \ifHy@nesting\expandafter\ltx@firstoftwo + \else\expandafter\ltx@secondoftwo + \fi + {\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}{#1}}% + {\Hy@raisedlink + {\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}% + {\relax}}% + \let\@currentHref\Hy@footnote@currentHref + \let\@currentlabelname\@empty + #1}% + \@finalstrut\strutbox }% + \fn@endnote }% +}% +\def\FNH@hyper@spewnotes {\endgroup + \if@savingnotes\else\ifvoid\fn@notes\else + \begingroup\let\@makefntext\@empty + \let\@finalstrut\@gobble + \let\rule\@gobbletwo + \H@@footnotetext{\unvbox\fn@notes}% + \endgroup\fi\fi +}% +\def\FNH@fixed@endfntext {% + \@finalstrut\strutbox + \fn@postfntext + \fn@endnote + \egroup\FNH@endfntext@next % will decide if link or no link +}% +\def\FNH@endfntext@link {\begingroup + \let\@makefntext\@empty\let\@finalstrut\@gobble\let\rule\@gobbletwo + \@footnotetext {\unvbox\z@}% + \endgroup +}% +\def\FNH@endfntext@nolink {\begingroup + \let\@makefntext\@empty\let\@finalstrut\@gobble + \let\rule\@gobbletwo + \if@savingnotes\expandafter\fn@fntext\else\expandafter\H@@footnotetext\fi + {\unvbox\z@}\endgroup +}% +%% \spx@opt@BeforeFootnote is defined in sphinx.sty +\def\FNH@fixed@footnote {\spx@opt@BeforeFootnote\ifx\@currenvir\fn@footnote + \expandafter\FNH@footnoteenv\else\expandafter\fn@latex@@footnote\fi }% +\def\FNH@footnoteenv {\@ifnextchar[\FNH@xfootnoteenv%] + {\stepcounter\@mpfn + \protected@xdef\@thefnmark{\thempfn}\@footnotemark + \def\FNH@endfntext@next{\FNH@endfntext@link}\fn@startfntext}}% +\def\FNH@xfootnoteenv [#1]{% + \begingroup + \csname c@\@mpfn\endcsname #1\relax + \unrestored@protected@xdef\@thefnmark{\thempfn}% + \endgroup\@footnotemark\def\FNH@endfntext@next{\FNH@endfntext@link}% + \fn@startfntext}% +\def\FNH@fixed@footnotetext {\ifx\@currenvir\fn@footnotetext + \expandafter\FNH@footnotetextenv\else\expandafter\fn@latex@@footnotetext\fi}% +\def\FNH@footnotetextenv {\@ifnextchar[\FNH@xfootnotetextenv%] + {\protected@xdef\@thefnmark{\thempfn}% + \def\FNH@endfntext@next{\FNH@endfntext@link}\fn@startfntext}}% +\def\FNH@xfootnotetextenv [#1]{% + \begingroup + \csname c@\@mpfn\endcsname #1\relax + \unrestored@protected@xdef\@thefnmark{\thempfn}% + \endgroup\def\FNH@endfntext@next{\FNH@endfntext@nolink}% + \fn@startfntext }% +% Now some checks in case some package has modified \@makefntext. +\AtBeginDocument +{% compatibility with French module of LaTeX babel + \ifx\@makefntextFB\undefined + \expandafter\@gobble\else\expandafter\@firstofone\fi + {\ifFBFrenchFootnotes \let\FNH@@makefntext\@makefntextFB \else + \let\FNH@@makefntext\@makefntextORI\fi}% + \expandafter\FNH@check@a\FNH@@makefntext{1.2!3?4,}\FNH@@@1.2!3?4,\FNH@@@\relax +}% +\long\def\FNH@check@a #11.2!3?4,#2\FNH@@@#3% +{% + \ifx\relax#3\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi + \FNH@bad@footnote@env + {\def\fn@prefntext{#1}\def\fn@postfntext{#2}\FNH@check@b}% +}% +\def\FNH@check@b #1\relax +{% + \expandafter\expandafter\expandafter\FNH@check@c + \expandafter\meaning\expandafter\fn@prefntext + \meaning\fn@postfntext1.2!3?4,\FNH@check@c\relax +}% +\def\FNH@check@c #11.2!3?4,#2#3\relax + {\ifx\FNH@check@c#2\expandafter\@gobble\fi\FNH@bad@footnote@env}% +\def\FNH@bad@footnote@env +{\PackageWarningNoLine{footnotehyper}% + {The footnote environment from package footnote^^J + will be dysfunctional, sorry (not my fault...). You may try to make a bug^^J + report at https://github.com/sphinx-doc/sphinx including the next lines:}% + \typeout{\meaning\@makefntext}% + \let\fn@prefntext\@empty\let\fn@postfntext\@empty +}% +%% \sphinxfootnotemark: usable in section titles and silently removed from +%% TOCs. +\def\sphinxfootnotemark [#1]% + {\ifx\thepage\relax\else \protect\spx@opt@BeforeFootnote + \protect\footnotemark[#1]\fi}% +\AtBeginDocument % let hyperref less complain + {\pdfstringdefDisableCommands{\def\sphinxfootnotemark [#1]{}}}% +\endinput +%% +%% End of file `footnotehyper-sphinx.sty'. diff --git a/sphinx/texinputs/needspace.sty b/sphinx/texinputs/needspace.sty new file mode 100644 index 00000000000..113d87216ff --- /dev/null +++ b/sphinx/texinputs/needspace.sty @@ -0,0 +1,35 @@ + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{needspace}[2010/09/12 v1.3d reserve vertical space] + +\newcommand{\needspace}[1]{% + \begingroup + \setlength{\dimen@}{#1}% + \vskip\z@\@plus\dimen@ + \penalty -100\vskip\z@\@plus -\dimen@ + \vskip\dimen@ + \penalty 9999% + \vskip -\dimen@ + \vskip\z@skip % hide the previous |\vskip| from |\addvspace| + \endgroup +} + +\newcommand{\Needspace}{\@ifstar{\@sneedsp@}{\@needsp@}} + +\newcommand{\@sneedsp@}[1]{\par \penalty-100\begingroup + \setlength{\dimen@}{#1}% + \dimen@ii\pagegoal \advance\dimen@ii-\pagetotal + \ifdim \dimen@>\dimen@ii + \break + \fi\endgroup} + +\newcommand{\@needsp@}[1]{\par \penalty-100\begingroup + \setlength{\dimen@}{#1}% + \dimen@ii\pagegoal \advance\dimen@ii-\pagetotal + \ifdim \dimen@>\dimen@ii + \ifdim \dimen@ii>\z@ + \vfil + \fi + \break + \fi\endgroup} + diff --git a/sphinx/texinputs/sphinx.sty b/sphinx/texinputs/sphinx.sty index 210f6ea1dd5..5037fbd921c 100644 --- a/sphinx/texinputs/sphinx.sty +++ b/sphinx/texinputs/sphinx.sty @@ -6,28 +6,44 @@ % \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesPackage{sphinx}[2010/01/15 LaTeX package (Sphinx markup)] +\ProvidesPackage{sphinx}[2016/10/29 v1.5 LaTeX package (Sphinx markup)] +% we delay handling of options to after having loaded packages, because +% of the need to use \definecolor. + +\RequirePackage{graphicx} \@ifclassloaded{memoir}{}{\RequirePackage{fancyhdr}} +% for \text macro and \iffirstchoice@ conditional even if amsmath not loaded +\RequirePackage{amstext} \RequirePackage{textcomp} -\RequirePackage{fancybox} \RequirePackage{titlesec} \RequirePackage{tabulary} -\RequirePackage{amsmath} % for \text -\RequirePackage{amssymb} % for some symbols \RequirePackage{makeidx} +% For framing code-blocks and warning type notices, and shadowing topics \RequirePackage{framed} -\RequirePackage{ifthen} -\RequirePackage{color} +% The xcolor package draws better fcolorboxes around verbatim code +\IfFileExists{xcolor.sty}{ + \RequirePackage{xcolor} +}{ + \RequirePackage{color} +} % For highlighted code. \RequirePackage{fancyvrb} +\fvset{fontsize=\small} % For table captions. \RequirePackage{threeparttable} -% Handle footnotes in tables. -\RequirePackage{footnote} +% For hyperlinked footnotes in tables; also for gathering footnotes from +% topic and warning blocks. Also to allow code-blocks in footnotes. +\RequirePackage{footnotehyper-sphinx} \makesavenoteenv{tabulary} -% For floating figures in the text. +\makesavenoteenv{tabular} +\makesavenoteenv{threeparttable} +% (longtable is hyperref compatible and needs no special treatment here.) +% For the H specifier. Do not \restylefloat{figure}, it breaks Sphinx code +% for allowing figures in tables. +\RequirePackage{float} +% For floating figures in the text. Better to load after float. \RequirePackage{wrapfig} % Separate paragraphs by space by default. \RequirePackage{parskip} @@ -36,47 +52,144 @@ % Display "real" single quotes in literal blocks. \RequirePackage{upquote} -% Redefine these colors to your liking in the preamble. -\definecolor{TitleColor}{rgb}{0.126,0.263,0.361} -\definecolor{InnerLinkColor}{rgb}{0.208,0.374,0.486} -\definecolor{OuterLinkColor}{rgb}{0.216,0.439,0.388} -% Redefine these colors to something if you want to have colored -% background and border for code examples. -\definecolor{VerbatimColor}{rgb}{1,1,1} -\definecolor{VerbatimBorderColor}{rgb}{0,0,0} - -% Uncomment these two lines to ignore the paper size and make the page -% size more like a typical published manual. -%\renewcommand{\paperheight}{9in} -%\renewcommand{\paperwidth}{8.5in} % typical squarish manual -%\renewcommand{\paperwidth}{7in} % O'Reilly ``Programmming Python'' +% Handle options via "kvoptions" (later loaded by hyperref anyhow) +\RequirePackage{kvoptions} +\SetupKeyvalOptions{prefix=spx@opt@} % use \spx@opt@ prefix + +\DeclareBoolOption{dontkeepoldnames} % \ifspx@opt@dontkeepoldnames = \iffalse +\DeclareStringOption[0]{maxlistdepth}% \newcommand*\spx@opt@maxlistdepth{0} +% dimensions, we declare the \dimen registers here. +\newdimen\sphinxverbatimsep +\newdimen\sphinxverbatimborder +\newdimen\sphinxshadowsep +\newdimen\sphinxshadowsize +\newdimen\sphinxshadowrule +% \DeclareStringOption is not convenient for the handling of these dimensions +% because we want to assign the values to the corresponding registers. Even if +% we added the code to the key handler it would be too late for the initial +% set-up and we would need to do initial assignments explicitely. We end up +% using \define@key directly. +% verbatim +\sphinxverbatimsep=\fboxsep + \define@key{sphinx}{verbatimsep}{\sphinxverbatimsep\dimexpr #1\relax} +\sphinxverbatimborder=\fboxrule + \define@key{sphinx}{verbatimborder}{\sphinxverbatimborder\dimexpr #1\relax} +% topic boxes +\sphinxshadowsep =5pt + \define@key{sphinx}{shadowsep}{\sphinxshadowsep\dimexpr #1\relax} +\sphinxshadowsize=4pt + \define@key{sphinx}{shadowsize}{\sphinxshadowsize\dimexpr #1\relax} +\sphinxshadowrule=\fboxrule + \define@key{sphinx}{shadowrule}{\sphinxshadowrule\dimexpr #1\relax} +% verbatim +\DeclareBoolOption[true]{verbatimwithframe} +\DeclareBoolOption[true]{verbatimwrapslines} +\DeclareBoolOption[true]{inlineliteralwraps} +% \textvisiblespace for compatibility with fontspec+XeTeX/LuaTeX +\DeclareStringOption[\textcolor{red}{\textvisiblespace}]{verbatimvisiblespace} +\DeclareStringOption % must use braces to hide the brackets + [{\makebox[2\fontcharwd\font`\x][r]{\textcolor{red}{\tiny$\m@th\hookrightarrow$}}}]% + {verbatimcontinued} +% notices/admonitions +% the dimensions for notices/admonitions are kept as macros and assigned to +% \spx@notice@border at time of use, hence \DeclareStringOption is ok for this +\newdimen\spx@notice@border +\DeclareStringOption[0.5pt]{noteborder} +\DeclareStringOption[0.5pt]{hintborder} +\DeclareStringOption[0.5pt]{importantborder} +\DeclareStringOption[0.5pt]{tipborder} +\DeclareStringOption[1pt]{warningborder} +\DeclareStringOption[1pt]{cautionborder} +\DeclareStringOption[1pt]{attentionborder} +\DeclareStringOption[1pt]{dangerborder} +\DeclareStringOption[1pt]{errorborder} +% footnotes +\DeclareStringOption[\mbox{ }]{AtStartFootnote} +% we need a public macro name for direct use in latex file +\newcommand*{\sphinxAtStartFootnote}{\spx@opt@AtStartFootnote} +% no such need for this one, as it is used inside other macros +\DeclareStringOption[\leavevmode\unskip]{BeforeFootnote} +% some font styling. +\DeclareStringOption[\sffamily\bfseries]{HeaderFamily} +% colours +% same problems as for dimensions: we want the key handler to use \definecolor +% first, some colours with no prefix, for backwards compatibility +\newcommand*{\sphinxDeclareColorOption}[2]{% + \definecolor{#1}#2% + \define@key{sphinx}{#1}{\definecolor{#1}##1}% +}% +\sphinxDeclareColorOption{TitleColor}{{rgb}{0.126,0.263,0.361}} +\sphinxDeclareColorOption{InnerLinkColor}{{rgb}{0.208,0.374,0.486}} +\sphinxDeclareColorOption{OuterLinkColor}{{rgb}{0.216,0.439,0.388}} +\sphinxDeclareColorOption{VerbatimColor}{{rgb}{1,1,1}} +\sphinxDeclareColorOption{VerbatimBorderColor}{{rgb}{0,0,0}} +% now the colours defined with "sphinx" prefix in their names +\newcommand*{\sphinxDeclareSphinxColorOption}[2]{% + % set the initial default + \definecolor{sphinx#1}#2% + % set the key handler. The "value" ##1 must be acceptable by \definecolor. + \define@key{sphinx}{#1}{\definecolor{sphinx#1}##1}% +}% +% admonition boxes, "light" style +\sphinxDeclareSphinxColorOption{noteBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{hintBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{importantBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{tipBorderColor}{{rgb}{0,0,0}} +% admonition boxes, "heavy" style +\sphinxDeclareSphinxColorOption{warningBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{cautionBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{attentionBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{dangerBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{errorBorderColor}{{rgb}{0,0,0}} +\sphinxDeclareSphinxColorOption{warningBgColor}{{rgb}{1,1,1}} +\sphinxDeclareSphinxColorOption{cautionBgColor}{{rgb}{1,1,1}} +\sphinxDeclareSphinxColorOption{attentionBgColor}{{rgb}{1,1,1}} +\sphinxDeclareSphinxColorOption{dangerBgColor}{{rgb}{1,1,1}} +\sphinxDeclareSphinxColorOption{errorBgColor}{{rgb}{1,1,1}} + +\DeclareDefaultOption{\@unknownoptionerror} +\ProcessKeyvalOptions* +% don't allow use of maxlistdepth via \sphinxsetup. +\DisableKeyvalOption{sphinx}{maxlistdepth} +% user interface: options can be changed midway in a document! +\newcommand\sphinxsetup[1]{\setkeys{sphinx}{#1}} + +% this is the \ltx@ifundefined of ltxcmds.sty, which is loaded by +% hyperref.sty, but we need it before, and the first release of +% ltxcmds.sty as in TL2009/Debian has wrong definition. +\newcommand{\spx@ifundefined}[1]{% + \ifcsname #1\endcsname + \expandafter\ifx\csname #1\endcsname\relax + \expandafter\expandafter\expandafter\@firstoftwo + \else + \expandafter\expandafter\expandafter\@secondoftwo + \fi + \else + \expandafter\@firstoftwo + \fi +} +% FIXME: the reasons might be obsolete (better color drivers now?) % use pdfoutput for pTeX and dvipdfmx +% when pTeX (\kanjiskip is defined), set pdfoutput to evade \include{pdfcolor} \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} -\else - \usepackage[pdftex]{graphicx} + \newcount\pdfoutput\pdfoutput=0 \fi % for PDF output, use colors and maximal compression -\newif\ifsphinxpdfoutput\sphinxpdfoutputfalse -\ifx\pdfoutput\undefined\else\ifcase\pdfoutput +\newif\ifsphinxpdfoutput % used in \maketitle +\ifx\pdfoutput\undefined\else + \ifnum\pdfoutput=\z@ \let\py@NormalColor\relax \let\py@TitleColor\relax -\else + \else \sphinxpdfoutputtrue \input{pdfcolor} \def\py@NormalColor{\color[rgb]{0.0,0.0,0.0}} \def\py@TitleColor{\color{TitleColor}} \pdfcompresslevel=9 -\fi\fi + \fi +\fi % XeLaTeX can do colors, too \ifx\XeTeXrevision\undefined\else @@ -84,24 +197,6 @@ \def\py@TitleColor{\color{TitleColor}} \fi -% Increase printable page size (copied from fullpage.sty) -\topmargin 0pt -\advance \topmargin by -\headheight -\advance \topmargin by -\headsep - -% attempt to work a little better for A4 users -\textheight \paperheight -\advance\textheight by -2in - -\oddsidemargin 0pt -\evensidemargin 0pt -%\evensidemargin -.25in % for ``manual size'' documents -\marginparwidth 0.5in - -\textwidth \paperwidth -\advance\textwidth by -2in - - % Style parameters and macros used by most documents here \raggedbottom \sloppy @@ -110,10 +205,10 @@ \pagestyle{empty} % start this way % Use this to set the font family for headers and other decor: -\newcommand{\py@HeaderFamily}{\sffamily\bfseries} +\newcommand{\py@HeaderFamily}{\spx@opt@HeaderFamily} % Redefine the 'normal' header/footer style when using "fancyhdr" package: -\@ifundefined{fancyhf}{}{ +\spx@ifundefined{fancyhf}{}{ % Use \pagestyle{normal} as the primary pagestyle for text. \fancypagestyle{normal}{ \fancyhf{} @@ -124,9 +219,8 @@ \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 + \spx@ifundefined{@chappos}{} + {\def\chaptermark##1{\markboth{\@chapapp\space\thechapter\space\@chappos\space ##1}{}}} } % 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 @@ -140,54 +234,378 @@ } % Some custom font markup commands. -% -\newcommand{\strong}[1]{{\textbf{#1}}} -\newcommand{\code}[1]{\texttt{#1}} -\newcommand{\bfcode}[1]{\code{\bfseries#1}} -\newcommand{\email}[1]{\textsf{#1}} - -% Redefine the Verbatim environment to allow border and background colors. -% The original environment is still used for verbatims within tables. -\let\OriginalVerbatim=\Verbatim -\let\endOriginalVerbatim=\endVerbatim - -% Play with vspace to be able to keep the indentation. -\newlength\distancetoright -\def\mycolorbox#1{% - \setlength\distancetoright{\linewidth}% - \advance\distancetoright -\@totalleftmargin % - \fcolorbox{VerbatimBorderColor}{VerbatimColor}{% - \begin{minipage}{\distancetoright}% - #1 - \end{minipage}% - }% +% *** the macros without \sphinx prefix are still defined near end of file *** +\long\protected\def\sphinxstrong#1{{\textbf{#1}}} +% to obtain straight quotes we execute \@noligs as patched by upquote, and +% \scantokens is needed in cases where it would be too late for the macro to +% first set catcodes and then fetch its argument. We also make the contents +% breakable at non-escaped . , ; ? ! / using \sphinxbreaksviaactive. +% the macro must be protected if it ends up used in moving arguments, +% in 'alltt' \@noligs is done already, and the \scantokens must be avoided. +\long\protected\def\sphinxcode#1{{\def\@tempa{alltt}% + \ifx\@tempa\@currenvir\else + \ifspx@opt@inlineliteralwraps + \sphinxbreaksviaactive\let\sphinxafterbreak\empty + % do not overwrite the comma set-up + \let\verbatim@nolig@list\sphinx@literal@nolig@list + \fi + % fix a space-gobbling issue due to LaTeX's original \do@noligs + \let\do@noligs\sphinx@do@noligs + \@noligs\endlinechar\m@ne\everyeof{\noexpand}% + \expandafter\scantokens + \fi {\texttt{#1}}}} +\def\sphinx@do@noligs #1{\catcode`#1\active\begingroup\lccode`\~`#1\relax + \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1 }}} +\def\sphinx@literal@nolig@list {\do\`\do\<\do\>\do\'\do\-}% + +\long\protected\def\sphinxbfcode#1{\sphinxcode{\bfseries#1}} +\long\protected\def\sphinxemail#1{\textsf{#1}} +\long\protected\def\sphinxtablecontinued#1{\textsf{#1}} +\long\protected\def\sphinxtitleref#1{\emph{#1}} +\long\protected\def\sphinxmenuselection#1{\emph{#1}} +\long\protected\def\sphinxaccelerator#1{\underline{#1}} +\long\protected\def\sphinxcrossref#1{\emph{#1}} +\long\protected\def\sphinxtermref#1{\emph{#1}} + +% Support large numbered footnotes in minipage +% But now obsolete due to systematic use of \savenotes/\spewnotes +% when minipages are in use in the various macro definitions next. +\def\thempfootnote{\arabic{mpfootnote}} + +% Code-blocks + +% Based on use of "fancyvrb.sty"'s Verbatim. +% - with framing allowing page breaks ("framed.sty") +% - with breaking of long lines (exploits Pygments mark-up), +% - with possibly of a top caption, non-separable by pagebreak. +% - and usable inside tables or footnotes ("footnotehyper-sphinx"). + +% For maintaining compatibility with Sphinx < 1.5, we define and use these +% when (unmodified) Verbatim will be needed. But Sphinx >= 1.5 does not modify +% original Verbatim anyhow. +\let\OriginalVerbatim \Verbatim +\let\endOriginalVerbatim\endVerbatim + +\newif\ifspx@inframed % flag set if we are already in a framed environment +% if forced use of minipage encapsulation is needed (e.g. table cells) +\newif\ifsphinxverbatimwithminipage \sphinxverbatimwithminipagefalse +\newcommand\spx@colorbox [2]{% +% #1 will be \fcolorbox or, for first part of frame: \spx@fcolorbox +% let the framing obey the current indentation (adapted from framed.sty's code). + \hskip\@totalleftmargin + \hskip-\fboxsep\hskip-\fboxrule + #1{VerbatimBorderColor}{VerbatimColor}{#2}% + \hskip-\fboxsep\hskip-\fboxrule + \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth +} +% use of \color@b@x here is compatible with both xcolor.sty and color.sty +\def\spx@fcolorbox #1#2% + {\color@b@x {\fboxsep\z@\color{#1}\spx@VerbatimFBox}{\color{#2}}}% + +% The title (caption) is specified from outside as macro \sphinxVerbatimTitle. +% \sphinxVerbatimTitle is reset to empty after each use of Verbatim. +\newcommand*\sphinxVerbatimTitle {} +% This box to typeset the caption before framed.sty multiple passes for framing. +\newbox\spx@VerbatimTitleBox +% Holder macro for labels of literal blocks. Set-up by LaTeX writer. +\newcommand*\sphinxLiteralBlockLabel {} +\newcommand*\sphinxSetupCaptionForVerbatim [1] +{% + \needspace{\sphinxliteralblockneedspace}% +% insert a \label via \sphinxLiteralBlockLabel +% reset to normal the color for the literal block caption +% the caption inserts \abovecaptionskip whitespace above itself (usually 10pt) +% there is also \belowcaptionskip but it is usually zero, hence the \smallskip + \def\sphinxVerbatimTitle + {\py@NormalColor + \captionof{literalblock}{\sphinxLiteralBlockLabel #1}\smallskip }% } -\def\FrameCommand{\mycolorbox} +\newcommand*\sphinxSetupCodeBlockInFootnote {% + \fvset{fontsize=\footnotesize}\let\caption\sphinxfigcaption + \sphinxverbatimwithminipagetrue % reduces vertical spaces + % we counteract float.sty's \caption which does \@normalsize + \let\normalsize\footnotesize\let\@parboxrestore\relax + \abovecaptionskip \smallskipamount \belowcaptionskip \z@skip} -\renewcommand{\Verbatim}[1][1]{% +% Inspired and adapted from framed.sty's \CustomFBox with extra handling +% of a non separable by pagebreak caption. +\long\def\spx@VerbatimFBox#1{% + \leavevmode + \begingroup + \setbox\@tempboxa\hbox{\kern\fboxsep{#1}\kern\fboxsep}% + \hbox + {\lower\dimexpr\fboxrule+\fboxsep+\dp\@tempboxa + \hbox{% + \vbox{\ifvoid\spx@VerbatimTitleBox\else + % add the caption in a centered way above possibly indented frame + % hide its width from framed.sty's measuring step + % note that the caption brings \abovecaptionskip top vertical space + \moveright\dimexpr\fboxrule+.5\wd\@tempboxa + \hb@xt@\z@{\hss\unhcopy\spx@VerbatimTitleBox\hss}\fi + % draw frame border _latest_ to avoid pdf viewer issue + \kern\fboxrule + \hbox{\kern\fboxrule + \vbox{\vskip\fboxsep\copy\@tempboxa\vskip\fboxsep}% + \kern-\wd\@tempboxa\kern-\fboxrule + \vrule\@width\fboxrule + \kern\wd\@tempboxa + \vrule\@width\fboxrule}% + \kern-\dimexpr\fboxsep+\ht\@tempboxa+\dp\@tempboxa + +\fboxsep+\fboxrule\relax + \hrule\@height\fboxrule + \kern\dimexpr\fboxsep+\ht\@tempboxa+\dp\@tempboxa+\fboxsep\relax + \hrule\@height\fboxrule}% + }}% + \endgroup +} + +% For linebreaks inside Verbatim environment from package fancyvrb. +\newbox\sphinxcontinuationbox +\newbox\sphinxvisiblespacebox +\newcommand*\sphinxafterbreak {\copy\sphinxcontinuationbox} + +% Take advantage of the already applied Pygments mark-up to insert +% potential linebreaks for TeX processing. +% {, <, #, %, $, ' and ": go to next line. +% _, }, ^, &, >, - and ~: stay at end of broken line. +% Use of \textquotesingle for straight quote. +% FIXME: convert this to package options +\newcommand*\sphinxbreaksbeforelist {% + \do\PYGZob\{\do\PYGZlt\<\do\PYGZsh\#\do\PYGZpc\%% {, <, #, %, + \do\PYGZdl\$\do\PYGZdq\"% $, " + \def\PYGZsq + {\discretionary{}{\sphinxafterbreak\textquotesingle}{\textquotesingle}}% ' +} +\newcommand*\sphinxbreaksafterlist {% + \do\PYGZus\_\do\PYGZcb\}\do\PYGZca\^\do\PYGZam\&% _, }, ^, &, + \do\PYGZgt\>\do\PYGZhy\-\do\PYGZti\~% >, -, ~ +} +\newcommand*\sphinxbreaksatspecials {% + \def\do##1##2% + {\def##1{\discretionary{}{\sphinxafterbreak\char`##2}{\char`##2}}}% + \sphinxbreaksbeforelist + \def\do##1##2% + {\def##1{\discretionary{\char`##2}{\sphinxafterbreak}{\char`##2}}}% + \sphinxbreaksafterlist +} + +\def\sphinx@verbatim@nolig@list {\do \`}% +% Some characters . , ; ? ! / are not pygmentized. +% This macro makes them "active" and they will insert potential linebreaks +\newcommand*\sphinxbreaksbeforeactivelist {}% none +\newcommand*\sphinxbreaksafteractivelist {\do\.\do\,\do\;\do\?\do\!\do\/} +\newcommand*\sphinxbreaksviaactive {% + \def\do##1{\lccode`\~`##1% + \lowercase{\def~}{\discretionary{}{\sphinxafterbreak\char`##1}{\char`##1}}% + \catcode`##1\active}% + \sphinxbreaksbeforeactivelist + \def\do##1{\lccode`\~`##1% + \lowercase{\def~}{\discretionary{\char`##1}{\sphinxafterbreak}{\char`##1}}% + \catcode`##1\active}% + \sphinxbreaksafteractivelist + \lccode`\~`\~ +} + +% needed to create wrapper environments of fancyvrb's Verbatim +\newcommand*{\sphinxVerbatimEnvironment}{\gdef\FV@EnvironName{sphinxVerbatim}} +% Sphinx <1.5 optional argument was in fact mandatory. It is now really +% optional and handled by original Verbatim. +\newenvironment{sphinxVerbatim}{% + % quit horizontal mode if we are still in a paragraph + \par % list starts new par, but we don't want it to be set apart vertically - \bgroup\parskip=0pt% - \smallskip% - % The list environement is needed to control perfectly the vertical - % space. - \list{}{% - \setlength\parskip{0pt}% - \setlength\itemsep{0ex}% - \setlength\topsep{0ex}% - \setlength\partopsep{0pt}% - \setlength\leftmargin{0pt}% - }% - \item\MakeFramed {\FrameRestore}% - \small% - \OriginalVerbatim[#1]% + \parskip\z@skip + % first, let's check if there is a caption + \ifx\sphinxVerbatimTitle\empty + \addvspace\z@% counteract possible previous negative skip (French lists!) + \smallskip + % there was no caption. Check if nevertheless a label was set. + \ifx\sphinxLiteralBlockLabel\empty\else + % we require some space to be sure hyperlink target from \phantomsection + % will not be separated from upcoming verbatim by a page break + \needspace{\sphinxliteralblockwithoutcaptionneedspace}% + \phantomsection\sphinxLiteralBlockLabel + \fi + \setbox\spx@VerbatimTitleBox\box\voidb@x + \else + % non-empty \sphinxVerbatimTitle has label inside it (in case there is one) + \setbox\spx@VerbatimTitleBox + \hbox{\begin{minipage}{\linewidth}% + \sphinxVerbatimTitle + \end{minipage}}% + \fi + \fboxsep\sphinxverbatimsep \fboxrule\sphinxverbatimborder + % setting borderwidth to zero is simplest for no-frame effect with same pagebreaks + \ifspx@opt@verbatimwithframe\else\fboxrule\z@\fi + % Customize framed.sty \MakeFramed to glue caption to literal block + % via \spx@fcolorbox, will use \spx@VerbatimFBox which inserts title + \def\FrameCommand {\spx@colorbox\spx@fcolorbox }% + \let\FirstFrameCommand\FrameCommand + % for mid pages and last page portion of (long) split frame: + \def\MidFrameCommand{\spx@colorbox\fcolorbox }% + \let\LastFrameCommand\MidFrameCommand + \ifspx@opt@verbatimwrapslines + % fancyvrb's Verbatim puts each input line in (unbreakable) horizontal boxes. + % This customization wraps each line from the input in a \vtop, thus + % allowing it to wrap and display on two or more lines in the latex output. + % - The codeline counter will be increased only once. + % - The wrapped material will not break across pages, it is impossible + % to achieve this without extensive rewrite of fancyvrb. + % - The (not used in sphinx) obeytabs option to Verbatim is + % broken by this change (showtabs and tabspace work). + \expandafter\def\expandafter\FV@SetupFont\expandafter + {\FV@SetupFont\sbox\sphinxcontinuationbox {\spx@opt@verbatimcontinued}% + \sbox\sphinxvisiblespacebox {\spx@opt@verbatimvisiblespace}}% + \def\FancyVerbFormatLine ##1{\hsize\linewidth + \vtop{\raggedright\hyphenpenalty\z@\exhyphenpenalty\z@ + \doublehyphendemerits\z@\finalhyphendemerits\z@ + \strut ##1\strut}% + }% + % If the linebreak is at a space, the latter will be displayed as visible + % space at end of first line, and a continuation symbol starts next line. + % Stretch/shrink are however usually zero for typewriter font. + \def\FV@Space {% + \nobreak\hskip\z@ plus\fontdimen3\font minus\fontdimen4\font + \discretionary{\copy\sphinxvisiblespacebox}{\sphinxafterbreak} + {\kern\fontdimen2\font}% + }% + % Allow breaks at special characters using \PYG... macros. + \sphinxbreaksatspecials + % Breaks at punctuation characters . , ; ? ! and / (needs catcode activation) + \def\FancyVerbCodes{\sphinxbreaksviaactive}% + \fi % end of conditional code for wrapping long code lines + % go around fancyvrb's check of \@currenvir + \let\VerbatimEnvironment\sphinxVerbatimEnvironment + % go around fancyvrb's check of current list depth + \def\@toodeep {\advance\@listdepth\@ne}% + % The list environment is needed to control perfectly the vertical space. + % Note: \OuterFrameSep used by framed.sty is later set to \topsep hence 0pt. + % - if caption: vertical space above caption = (\abovecaptionskip + D) with + % D = \baselineskip-\FrameHeightAdjust, and then \smallskip above frame. + % - if no caption: (\smallskip + D) above frame. By default D=6pt. + % Use trivlist rather than list to avoid possible "too deeply nested" error. + \itemsep \z@skip + \topsep \z@skip + \partopsep \z@skip% trivlist will set \parsep to \parskip = zero (see above) + % \leftmargin will be set to zero by trivlist + \rightmargin\z@ + \parindent \z@% becomes \itemindent. Default zero, but perhaps overwritten. + \trivlist\item\relax + \ifsphinxverbatimwithminipage\spx@inframedtrue\fi + % use a minipage if we are already inside a framed environment + \ifspx@inframed\noindent\begin{minipage}{\linewidth}\fi + \MakeFramed {% adapted over from framed.sty's snugshade environment + \advance\hsize-\width\@totalleftmargin\z@\linewidth\hsize\@setminipage + }% + % For grid placement from \strut's in \FancyVerbFormatLine + \lineskip\z@skip + % active comma should not be overwritten by \@noligs + \ifspx@opt@verbatimwrapslines + \let\verbatim@nolig@list \sphinx@verbatim@nolig@list + \fi + % will fetch its optional arguments if any + \OriginalVerbatim } -\renewcommand{\endVerbatim}{% - \endOriginalVerbatim% - \endMakeFramed% - \endlist% - % close group to restore \parskip - \egroup% +{% + \endOriginalVerbatim + \par\unskip\@minipagefalse\endMakeFramed % from framed.sty snugshade + \ifspx@inframed\end{minipage}\fi + \endtrivlist } +\newenvironment {sphinxVerbatimNoFrame} + {\spx@opt@verbatimwithframefalse + % needed for fancyvrb as literal code will end in \end{sphinxVerbatimNoFrame} + \def\sphinxVerbatimEnvironment{\gdef\FV@EnvironName{sphinxVerbatimNoFrame}}% + \begin{sphinxVerbatim}} + {\end{sphinxVerbatim}} +\newenvironment {sphinxVerbatimintable} + {% don't use a frame if in a table cell + \spx@opt@verbatimwithframefalse + \sphinxverbatimwithminipagetrue + % counteract longtable redefinition of caption + \let\caption\sphinxfigcaption + % reduce above caption space if in a table cell + \abovecaptionskip\smallskipamount + \def\sphinxVerbatimEnvironment{\gdef\FV@EnvironName{sphinxVerbatimintable}}% + \begin{sphinxVerbatim}} + {\end{sphinxVerbatim}} + +% Topic boxes + +% Again based on use of "framed.sty", this allows breakable framed boxes. +\long\def\spx@ShadowFBox#1{% + \leavevmode\begingroup + % first we frame the box #1 + \setbox\@tempboxa + \hbox{\vrule\@width\sphinxshadowrule + \vbox{\hrule\@height\sphinxshadowrule + \kern\sphinxshadowsep + \hbox{\kern\sphinxshadowsep #1\kern\sphinxshadowsep}% + \kern\sphinxshadowsep + \hrule\@height\sphinxshadowrule}% + \vrule\@width\sphinxshadowrule}% + % Now we add the shadow, like \shadowbox from fancybox.sty would do + \dimen@\dimexpr.5\sphinxshadowrule+\sphinxshadowsize\relax + \hbox{\vbox{\offinterlineskip + \hbox{\copy\@tempboxa\kern-.5\sphinxshadowrule + % add shadow on right side + \lower\sphinxshadowsize + \hbox{\vrule\@height\ht\@tempboxa \@width\dimen@}% + }% + \kern-\dimen@ % shift back vertically to bottom of frame + % and add shadow at bottom + \moveright\sphinxshadowsize + \vbox{\hrule\@width\wd\@tempboxa \@height\dimen@}% + }% + % move left by the size of right shadow so shadow adds no width + \kern-\sphinxshadowsize + }% + \endgroup +} + +% use framed.sty to allow page breaks in frame+shadow +% works well inside Lists and Quote-like environments +% produced by ``topic'' directive (or local contents) +% could nest if LaTeX writer authorized it +\newenvironment{sphinxShadowBox} + {\def\FrameCommand {\spx@ShadowFBox }% + % configure framed.sty not to add extra vertical spacing + \spx@ifundefined{OuterFrameSep}{}{\OuterFrameSep\z@skip}% + % the \trivlist will add the vertical spacing on top and bottom which is + % typical of center environment as used in Sphinx <= 1.4.1 + % the \noindent has the effet of an extra blank line on top, to + % imitate closely the layout from Sphinx <= 1.4.1; the \FrameHeightAdjust + % will put top part of frame on this baseline. + \def\FrameHeightAdjust {\baselineskip}% + % use package footnote to handle footnotes + \savenotes + \trivlist\item\noindent + % use a minipage if we are already inside a framed environment + \ifspx@inframed\begin{minipage}{\linewidth}\fi + \MakeFramed {\spx@inframedtrue + % framed.sty puts into "\width" the added width (=2shadowsep+2shadowrule) + % adjust \hsize to what the contents must use + \advance\hsize-\width + % adjust LaTeX parameters to behave properly in indented/quoted contexts + \FrameRestore + % typeset the contents as in a minipage (Sphinx <= 1.4.1 used a minipage and + % itemize/enumerate are therein typeset more tightly, we want to keep + % that). We copy-paste from LaTeX source code but don't do a real minipage. + \@pboxswfalse + \let\@listdepth\@mplistdepth \@mplistdepth\z@ + \@minipagerestore + \@setminipage + }% + }% + {% insert the "endminipage" code + \par\unskip + \@minipagefalse + \endMakeFramed + \ifspx@inframed\end{minipage}\fi + \endtrivlist + % output the stored footnotes + \spewnotes + } % \moduleauthor{name}{email} @@ -204,110 +622,179 @@ {\py@TitleColor\thesubsection}{0.5em}{\py@TitleColor}{\py@NormalColor} \titleformat{\subsubsection}{\py@HeaderFamily}% {\py@TitleColor\thesubsubsection}{0.5em}{\py@TitleColor}{\py@NormalColor} -\titleformat{\paragraph}{\small\py@HeaderFamily}% - {\py@TitleColor}{0em}{\py@TitleColor}{\py@NormalColor} +% By default paragraphs (and subsubsections) will not be numbered because +% sphinxmanual.cls and sphinxhowto.cls set secnumdepth to 2 +\titleformat{\paragraph}{\py@HeaderFamily}% + {\py@TitleColor\theparagraph}{0.5em}{\py@TitleColor}{\py@NormalColor} +\titleformat{\subparagraph}{\py@HeaderFamily}% + {\py@TitleColor\thesubparagraph}{0.5em}{\py@TitleColor}{\py@NormalColor} % {fulllineitems} is the main environment for object descriptions. % \newcommand{\py@itemnewline}[1]{% - \@tempdima\linewidth% + \@tempdima\linewidth \advance\@tempdima \leftmargin\makebox[\@tempdima][l]{#1}% } \newenvironment{fulllineitems}{ - \begin{list}{}{\labelwidth \leftmargin \labelsep 0pt - \rightmargin 0pt \topsep -\parskip \partopsep \parskip + \begin{list}{}{\labelwidth \leftmargin \labelsep \z@ + \rightmargin \z@ \topsep -\parskip \partopsep \parskip \itemsep -\parsep \let\makelabel=\py@itemnewline} }{\end{list}} % \optional is used for ``[, arg]``, i.e. desc_optional nodes. -\newcommand{\optional}[1]{% +\newcommand{\sphinxoptional}[1]{% {\textnormal{\Large[}}{#1}\hspace{0.5mm}{\textnormal{\Large]}}} \newlength{\py@argswidth} \newcommand{\py@sigparams}[2]{% - \parbox[t]{\py@argswidth}{#1\code{)}#2}} -\newcommand{\pysigline}[1]{\item[#1]\nopagebreak} + \parbox[t]{\py@argswidth}{#1\sphinxcode{)}#2}} +\newcommand{\pysigline}[1]{\item[{#1}]} \newcommand{\pysiglinewithargsret}[3]{% - \settowidth{\py@argswidth}{#1\code{(}}% + \settowidth{\py@argswidth}{#1\sphinxcode{(}}% \addtolength{\py@argswidth}{-2\py@argswidth}% \addtolength{\py@argswidth}{\linewidth}% - \item[#1\code{(}\py@sigparams{#2}{#3}]} + \item[{#1\sphinxcode{(}\py@sigparams{#2}{#3}}]} +\newcommand{\pysigstartmultiline}{% + \def\pysigstartmultiline{\vskip\smallskipamount\parskip\z@skip\itemsep\z@skip}% + \edef\pysigstopmultiline + {\noexpand\leavevmode\parskip\the\parskip\relax\itemsep\the\itemsep\relax}% + \parskip\z@skip\itemsep\z@skip +} % Production lists % -\newenvironment{productionlist}{ -% \def\optional##1{{\Large[}##1{\Large]}} - \def\production##1##2{\\\code{##1}&::=&\code{##2}} - \def\productioncont##1{\\& &\code{##1}} +\newenvironment{productionlist}{% +% \def\sphinxoptional##1{{\Large[}##1{\Large]}} + \def\production##1##2{\\\sphinxcode{##1}&::=&\sphinxcode{##2}}% + \def\productioncont##1{\\& &\sphinxcode{##1}}% \parindent=2em \indent - \setlength{\LTpre}{0pt} - \setlength{\LTpost}{0pt} + \setlength{\LTpre}{0pt}% + \setlength{\LTpost}{0pt}% \begin{longtable}[l]{lcl} }{% \end{longtable} } % Notices / Admonitions -% -\newlength{\py@noticelength} - -\newcommand{\py@heavybox}{ - \setlength{\fboxrule}{1pt} - \setlength{\fboxsep}{6pt} - \setlength{\py@noticelength}{\linewidth} - \addtolength{\py@noticelength}{-2\fboxsep} - \addtolength{\py@noticelength}{-2\fboxrule} - %\setlength{\shadowsize}{3pt} - \noindent\Sbox - \minipage{\py@noticelength} -} -\newcommand{\py@endheavybox}{ - \endminipage - \endSbox - \fbox{\TheSbox} -} -\newcommand{\py@lightbox}{{% - \setlength\parskip{0pt}\par - \noindent\rule[0ex]{\linewidth}{0.5pt}% - \par\noindent\vspace{-0.5ex}% - }} -\newcommand{\py@endlightbox}{{% - \setlength{\parskip}{0pt}% - \par\noindent\rule[0.5ex]{\linewidth}{0.5pt}% - \par\vspace{-0.5ex}% - }} - -% Some are quite plain: -\newcommand{\py@noticestart@note}{\py@lightbox} -\newcommand{\py@noticeend@note}{\py@endlightbox} -\newcommand{\py@noticestart@hint}{\py@lightbox} -\newcommand{\py@noticeend@hint}{\py@endlightbox} -\newcommand{\py@noticestart@important}{\py@lightbox} -\newcommand{\py@noticeend@important}{\py@endlightbox} -\newcommand{\py@noticestart@tip}{\py@lightbox} -\newcommand{\py@noticeend@tip}{\py@endlightbox} - -% Others gets more visible distinction: -\newcommand{\py@noticestart@warning}{\py@heavybox} -\newcommand{\py@noticeend@warning}{\py@endheavybox} -\newcommand{\py@noticestart@caution}{\py@heavybox} -\newcommand{\py@noticeend@caution}{\py@endheavybox} -\newcommand{\py@noticestart@attention}{\py@heavybox} -\newcommand{\py@noticeend@attention}{\py@endheavybox} -\newcommand{\py@noticestart@danger}{\py@heavybox} -\newcommand{\py@noticeend@danger}{\py@endheavybox} -\newcommand{\py@noticestart@error}{\py@heavybox} -\newcommand{\py@noticeend@error}{\py@endheavybox} - -\newenvironment{notice}[2]{ - \def\py@noticetype{#1} - \csname py@noticestart@#1\endcsname - \strong{#2} -}{\csname py@noticeend@\py@noticetype\endcsname} +% Some are quite plain +% the spx@notice@bordercolor etc are set in the sphinxadmonition environment +\newenvironment{sphinxlightbox}{% + \par\allowbreak + \noindent{\color{spx@notice@bordercolor}% + \rule{\linewidth}{\spx@notice@border}}\par\nobreak + {\parskip\z@skip\noindent}% + } + {% + \par + % counteract previous possible negative skip (French lists!): + % (we can't cancel that any earlier \vskip introduced a potential pagebreak) + \ifdim\lastskip<\z@\vskip-\lastskip\fi + \nobreak\vbox{\noindent\kern\@totalleftmargin + {\color{spx@notice@bordercolor}% + \rule[\dimexpr.4\baselineskip-\spx@notice@border\relax] + {\linewidth}{\spx@notice@border}}\hss}\allowbreak + }% end of sphinxlightbox environment definition +% may be renewenvironment'd by user for complete customization +\newenvironment{sphinxnote}[1] + {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}} +\newenvironment{sphinxhint}[1] + {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}} +\newenvironment{sphinximportant}[1] + {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}} +\newenvironment{sphinxtip}[1] + {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}} +% or just use the package options +% these are needed for common handling by notice environment of lightbox +% and heavybox but they are currently not used by lightbox environment +% and there is consequently no corresponding package option +\definecolor{sphinxnoteBgColor}{rgb}{1,1,1} +\definecolor{sphinxhintBgColor}{rgb}{1,1,1} +\definecolor{sphinimportantBgColor}{rgb}{1,1,1} +\definecolor{sphinxtipBgColor}{rgb}{1,1,1} + +% Others get more distinction +% Code adapted from framed.sty's "snugshade" environment. +% Nesting works (inner frames do not allow page breaks). +\newenvironment{sphinxheavybox}{\par + \setlength{\FrameRule}{\spx@notice@border}% + \setlength{\FrameSep}{\dimexpr.6\baselineskip-\FrameRule\relax} + % configure framed.sty's parameters to obtain same vertical spacing + % as for "light" boxes. We need for this to manually insert parskip glue and + % revert a skip done by framed before the frame. + \spx@ifundefined{OuterFrameSep}{}{\OuterFrameSep\z@skip}% + \vspace{\FrameHeightAdjust} + % copied/adapted from framed.sty's snugshade + \def\FrameCommand##1{\hskip\@totalleftmargin + \fboxsep\FrameSep \fboxrule\FrameRule + \fcolorbox{spx@notice@bordercolor}{spx@notice@bgcolor}{##1}% + \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}% + \savenotes + % use a minipage if we are already inside a framed environment + \ifspx@inframed + \noindent\begin{minipage}{\linewidth} + \else + % handle case where notice is first thing in a list item (or is quoted) + \if@inlabel + \noindent\par\vspace{-\baselineskip} + \else + \vspace{\parskip} + \fi + \fi + \MakeFramed {\spx@inframedtrue + \advance\hsize-\width \@totalleftmargin\z@ \linewidth\hsize + % minipage initialization copied from LaTeX source code. + \@pboxswfalse + \let\@listdepth\@mplistdepth \@mplistdepth\z@ + \@minipagerestore + \@setminipage }% + } + {% + \par\unskip + \@minipagefalse + \endMakeFramed + \ifspx@inframed\end{minipage}\fi + % set footnotes at bottom of page + \spewnotes + % arrange for similar spacing below frame as for "light" boxes. + \vskip .4\baselineskip + }% end of sphinxheavybox environment definition +% may be renewenvironment'd by user for complete customization +\newenvironment{sphinxwarning}[1] + {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}} +\newenvironment{sphinxcaution}[1] + {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}} +\newenvironment{sphinxattention}[1] + {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}} +\newenvironment{sphinxdanger}[1] + {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}} +\newenvironment{sphinxerror}[1] + {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}} +% or just use package options + +% the \colorlet of xcolor (if at all loaded) is overkill for our use case +\newcommand{\sphinxcolorlet}[2] + {\expandafter\let\csname\@backslashchar color@#1\expandafter\endcsname + \csname\@backslashchar color@#2\endcsname } + +% the main dispatch for all types of notices +\newenvironment{sphinxadmonition}{\begin{notice}}{\end{notice}} +% use of ``notice'' is for backwards compatibility and will be removed in +% future release; sphinxadmonition environment will be defined directly. +\newenvironment{notice}[2]{% #1=type, #2=heading + % can't use #1 directly in definition of end part + \def\spx@noticetype {#1}% + % set parameters of heavybox/lightbox + \sphinxcolorlet{spx@notice@bordercolor}{sphinx#1BorderColor}% + \sphinxcolorlet{spx@notice@bgcolor}{sphinx#1BgColor}% + \spx@notice@border \dimexpr\csname spx@opt@#1border\endcsname\relax + % start specific environment, passing the heading as argument + \begin{sphinx#1}{#2}} + % in end part, need to go around a LaTeX's "feature" + {\edef\spx@temp{\noexpand\end{sphinx\spx@noticetype}}\spx@temp} % Allow the release number to be specified independently of the % \date{}. This allows the date to reflect the document's date and @@ -336,28 +823,33 @@ % This sets up the fancy chapter headings that make the documents look % at least a little better than the usual LaTeX output. % -\@ifundefined{ChTitleVar}{}{ - \ChNameVar{\raggedleft\normalsize\py@HeaderFamily} - \ChNumVar{\raggedleft \bfseries\Large\py@HeaderFamily} - \ChTitleVar{\raggedleft \textrm{\Huge\py@HeaderFamily}} - % This creates chapter heads without the leading \vspace*{}: +\@ifpackagewith{fncychap}{Bjarne}{ + \ChNameVar {\raggedleft\normalsize \py@HeaderFamily} + \ChNumVar {\raggedleft\Large \py@HeaderFamily} + \ChTitleVar{\raggedleft\Large \py@HeaderFamily} + % This creates (numbered) chapter heads without the leading \vspace*{}: \def\@makechapterhead#1{% {\parindent \z@ \raggedright \normalfont \ifnum \c@secnumdepth >\m@ne - \DOCH + \if@mainmatter + \DOCH + \fi \fi \interlinepenalty\@M - \DOTI{#1} - } - } -} + \if@mainmatter + \DOTI{#1}% + \else% + \DOTIS{#1}% + \fi + }} +}{}% <-- "false" clause of \@ifpackagewith % Redefine description environment so that it is usable inside fulllineitems. % \renewcommand{\description}{% - \list{}{\labelwidth\z@% - \itemindent-\leftmargin% - \labelsep5pt% + \list{}{\labelwidth\z@ + \itemindent-\leftmargin + \labelsep5pt\relax \let\makelabel=\descriptionlabel}} % Definition lists; requested by AMK for HOWTO documents. Probably useful @@ -365,7 +857,7 @@ % \newenvironment{definitions}{% \begin{description}% - \def\term##1{\item[##1]\mbox{}\\*[0mm]} + \def\term##1{\item[{##1}]\mbox{}\\*[0mm]}% }{% \end{description}% } @@ -373,10 +865,9 @@ % Tell TeX about pathological hyphenation cases: \hyphenation{Base-HTTP-Re-quest-Hand-ler} - % The following is stuff copied from docutils' latex writer. % -\newcommand{\optionlistlabel}[1]{\bf #1 \hfill} +\newcommand{\optionlistlabel}[1]{\normalfont\bfseries #1 \hfill}% \bf deprecated \newenvironment{optionlist}[1] {\begin{list}{} {\setlength{\labelwidth}{#1} @@ -394,34 +885,44 @@ {\setlength{\partopsep}{\parskip} \addtolength{\partopsep}{\baselineskip} \topsep0pt\itemsep0.15\baselineskip\parsep0pt - \leftmargin#1} + \leftmargin#1\relax} \raggedright} {\end{list}} -% Redefine includgraphics for avoiding images larger than the screen size -% If the size is not specified. +% Redefine \includegraphics to resize images larger than the line width, +% except if height or width option present. +% +% If scale is present, rescale before fitting to line width. (since 1.5) +% +% Warning: future version of Sphinx will not modify original \includegraphics, +% below code will be definition only of \sphinxincludegraphics. \let\py@Oldincludegraphics\includegraphics - -\newbox\image@box% -\newdimen\image@width% -\renewcommand\includegraphics[2][\@empty]{% - \ifx#1\@empty% - \setbox\image@box=\hbox{\py@Oldincludegraphics{#2}}% - \image@width\wd\image@box% - \ifdim \image@width>\linewidth% - \setbox\image@box=\hbox{\py@Oldincludegraphics[width=\linewidth]{#2}}% - \box\image@box% - \else% - \py@Oldincludegraphics{#2}% - \fi% - \else% +\newbox\spx@image@box +\renewcommand*{\includegraphics}[2][]{% + \in@{height}{#1}\ifin@\else\in@{width}{#1}\fi + \ifin@ % height or width present \py@Oldincludegraphics[#1]{#2}% - \fi% + \else % no height nor width (but #1 may be "scale=...") + \setbox\spx@image@box\hbox{\py@Oldincludegraphics[#1,draft]{#2}}% + \ifdim \wd\spx@image@box>\linewidth + \setbox\spx@image@box\box\voidb@x % clear memory + \py@Oldincludegraphics[#1,width=\linewidth]{#2}% + \else + \py@Oldincludegraphics[#1]{#2}% + \fi + \fi } +% Writer will put \sphinxincludegraphics in LaTeX source, and with this, +% documents which used their own modified \includegraphics will compile +% as before. But see warning above. +\newcommand*{\sphinxincludegraphics}{\includegraphics} % to make pdf with correct encoded bookmarks in Japanese % this should precede the hyperref package -\ifx\kanjiskip\undefined\else +\ifx\kanjiskip\undefined +% for non-Japanese: make sure bookmarks are ok also with lualatex + \PassOptionsToPackage{pdfencoding=unicode}{hyperref} +\else \usepackage{atbegshi} \ifx\ucs\undefined \ifnum 42146=\euc"A4A2 @@ -434,34 +935,34 @@ \fi \fi -% Include hyperref last. -\RequirePackage[colorlinks,breaklinks, - linkcolor=InnerLinkColor,filecolor=OuterLinkColor, - menucolor=OuterLinkColor,urlcolor=OuterLinkColor, - citecolor=InnerLinkColor]{hyperref} -% Fix anchor placement for figures with captions. -% (Note: we don't use a package option here; instead, we give an explicit -% \capstart for figures that actually have a caption.) -\RequirePackage{hypcap} +% These options can be overriden inside 'hyperref' key +% or by later use of \hypersetup. +\PassOptionsToPackage{colorlinks,breaklinks,% + linkcolor=InnerLinkColor,filecolor=OuterLinkColor,% + menucolor=OuterLinkColor,urlcolor=OuterLinkColor,% + citecolor=InnerLinkColor}{hyperref} % From docutils.writers.latex2e -\providecommand{\DUspan}[2]{% - {% group ("span") to limit the scope of styling commands - \@for\node@class@name:=#1\do{% - \ifcsname docutilsrole\node@class@name\endcsname% - \csname docutilsrole\node@class@name\endcsname% - \fi% - }% - {#2}% node content - }% close "span" +% inline markup (custom roles) +% \DUrole{#1}{#2} tries \DUrole#1{#2} +\providecommand*{\DUrole}[2]{% + \ifcsname DUrole#1\endcsname + \csname DUrole#1\endcsname{#2}% + \else% backwards compatibility: try \docutilsrole#1{#2} + \ifcsname docutilsrole#1\endcsname + \csname docutilsrole#1\endcsname{#2}% + \else + #2% + \fi + \fi } -\providecommand*{\DUprovidelength}[2]{ - \ifthenelse{\isundefined{#1}}{\newlength{#1}\setlength{#1}{#2}}{} +\providecommand*{\DUprovidelength}[2]{% + \ifdefined#1\else\newlength{#1}\setlength{#1}{#2}\fi } \DUprovidelength{\DUlineblockindent}{2.5em} -\ifthenelse{\isundefined{\DUlineblock}}{ +\ifdefined\DUlineblock\else \newenvironment{DUlineblock}[1]{% \list{}{\setlength{\partopsep}{\parskip} \addtolength{\partopsep}{\baselineskip} @@ -472,30 +973,13 @@ \raggedright } {\endlist} -}{} - - -% From footmisc.sty: allows footnotes in titles -\let\FN@sf@@footnote\footnote -\def\footnote{\ifx\protect\@typeset@protect - \expandafter\FN@sf@@footnote - \else - \expandafter\FN@sf@gobble@opt - \fi -} -\edef\FN@sf@gobble@opt{\noexpand\protect - \expandafter\noexpand\csname FN@sf@gobble@opt \endcsname} -\expandafter\def\csname FN@sf@gobble@opt \endcsname{% - \@ifnextchar[%] - \FN@sf@gobble@twobracket - \@gobble -} -\def\FN@sf@gobble@twobracket[#1]#2{} +\fi % adjust the margins for footer, % this works with the jsclasses only (Japanese standard document classes) +% FIXME: rather, pass options to "geometry". \ifx\@jsc@uplatextrue\undefined\else - \hypersetup{setpagesize=false} + \PassOptionsToPackage{setpagesize=false}{hyperref} \setlength\footskip{2\baselineskip} \addtolength{\textheight}{-2\baselineskip} \fi @@ -503,16 +987,15 @@ % 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} - } + \renewenvironment{sphinxtheindex} + {\cleardoublepage\phantomsection + \begin{theindex}} + {\end{theindex}} + + \renewenvironment{sphinxthebibliography}[1] + {\cleardoublepage\phantomsection + \begin{thebibliography}{1}} + {\end{thebibliography}} \fi % disable \@chappos in Appendix in pTeX @@ -524,12 +1007,156 @@ } \fi -% Define literal-block environment -\RequirePackage{float} -\floatstyle{plaintop} -\ifx\thechapter\undefined - \newfloat{literal-block}{htbp}{loc}[section] -\else - \newfloat{literal-block}{htbp}{loc}[chapter] +% for captions of literal blocks +% with `\theH...` macros for hyperref +\newcounter{literalblock} +\spx@ifundefined{c@chapter} + {\@addtoreset{literalblock}{section} + \def\theliteralblock {\ifnum\c@section>\z@ \thesection.\fi\arabic{literalblock}} + \def\theHliteralblock {\theHsection.\arabic{literalblock}}} + {\@addtoreset{literalblock}{chapter} + \def\theliteralblock {\ifnum\c@chapter>\z@ \thechapter.\fi\arabic{literalblock}} + \def\theHliteralblock {\theHchapter.\arabic{literalblock}}} +% at start of caption title +\newcommand*{\fnum@literalblock}{\literalblockname\nobreakspace\theliteralblock} +% this will be overwritten in document preamble by Babel translation +\newcommand*{\literalblockname}{Listing } +% file extension needed for \caption's good functioning, the file is created +% only if a \listof{literalblock}{foo} command is encountered, which is +% analogous to \listoffigures, but for the code listings (foo = chosen title.) +\newcommand*{\ext@literalblock}{lol} + +% control caption around literal-block +\RequirePackage{capt-of} +\RequirePackage{needspace} +% if the left page space is less than \literalblockneedspace, insert page-break +\newcommand{\sphinxliteralblockneedspace}{5\baselineskip} +\newcommand{\sphinxliteralblockwithoutcaptionneedspace}{1.5\baselineskip} + +% figure in table +\newenvironment{sphinxfigure-in-table}[1][\linewidth]{% + \def\@captype{figure}% + \begin{minipage}{#1}% +}{\end{minipage}} +% store original \caption macro for use with figures in longtable and tabulary +\AtBeginDocument{\let\spx@originalcaption\caption} +\newcommand*\sphinxfigcaption + {\ifx\equation$%$% this is trick to identify tabulary first pass + \firstchoice@false\else\firstchoice@true\fi + \spx@originalcaption } + +% by default, also define macros with the no-prefix names +\ifspx@opt@dontkeepoldnames\else + \typeout{** (sphinx) defining (legacy) text style macros without \string\sphinx\space prefix} + \typeout{** if clashes with packages, set latex_keep_old_macro_names=False + in conf.py} + \@for\@tempa:=code,strong,bfcode,email,tablecontinued,titleref,% + menuselection,accelerator,crossref,termref,optional\do +{% first, check if command with no prefix already exists + \expandafter\newcommand\csname\@tempa\endcsname{}% + % give it the meaning defined so far with \sphinx prefix + \expandafter\let\csname\@tempa\expandafter\endcsname + \csname sphinx\@tempa\endcsname + % redefine the \sphinx prefixed macro to expand to non-prefixed one + \expandafter\def\csname sphinx\@tempa\expandafter\endcsname + \expandafter{\csname\@tempa\endcsname}% +}% \fi -\floatname{literal-block}{List} + +% additional customizable styling +% FIXME: convert this to package options ? +\protected\def\sphinxstyleindexentry {\texttt} +\long\protected\def\sphinxstyleindexextra #1{ \emph{(#1)}} +\protected\def\sphinxstyleindexpageref {, \pageref} +\long\protected\def\sphinxstyletopictitle #1{\textbf{#1}\par\medskip} +\let\sphinxstylesidebartitle\sphinxstyletopictitle +\protected\def\sphinxstyleothertitle {\textbf} +\long\protected\def\sphinxstylesidebarsubtitle #1{~\\\textbf{#1} \smallskip} +\protected\def\sphinxstylethead {\textsf} +\protected\def\sphinxstyleemphasis {\emph} +\long\protected\def\sphinxstyleliteralemphasis#1{\emph{\sphinxcode{#1}}} +\protected\def\sphinxstylestrong {\textbf} +\protected\def\sphinxstyleliteralstrong {\sphinxbfcode} +\protected\def\sphinxstyleabbreviation {\textsc} +\protected\def\sphinxstyleliteralintitle {\sphinxcode} + +% stylesheet for highlighting with pygments +\RequirePackage{sphinxhighlight} + +% make commands known to non-Sphinx document classes +\providecommand*{\sphinxtableofcontents}{\tableofcontents} +\providecommand*{\sphinxthebibliography}{\thebibliography} +\providecommand*{\sphinxtheindex}{\theindex} + +% remove LaTeX's cap on nesting depth if 'maxlistdepth' key used. +% This is a hack, which works with the standard classes: it assumes \@toodeep +% is always used in "true" branches: "\if ... \@toodeep \else .. \fi." + +% will force use the "false" branch (if there is one) +\def\spx@toodeep@hack{\fi\iffalse} + +% do nothing if 'maxlistdepth' key not used or if package enumitem loaded. +\ifnum\spx@opt@maxlistdepth=\z@\expandafter\@gobbletwo\fi +\AtBeginDocument{% +\@ifpackageloaded{enumitem}{\remove@to@nnil}{}% + \let\spx@toodeepORI\@toodeep + \def\@toodeep{% + \ifnum\@listdepth<\spx@opt@maxlistdepth\relax + \expandafter\spx@toodeep@hack + \else + \expandafter\spx@toodeepORI + \fi}% +% define all missing \@list... macros + \count@\@ne + \loop + \spx@ifundefined{@list\romannumeral\the\count@} + {\iffalse}{\iftrue\advance\count@\@ne}% + \repeat + \loop + \ifnum\count@>\spx@opt@maxlistdepth\relax\else + \expandafter\let + \csname @list\romannumeral\the\count@\expandafter\endcsname + \csname @list\romannumeral\the\numexpr\count@-\@ne\endcsname + % higher \leftmargin... needed to fix issue with babel-french (v2.6--...) + \spx@ifundefined{leftmargin\romannumeral\the\count@} + {\expandafter\let + \csname leftmargin\romannumeral\the\count@\expandafter\endcsname + \csname leftmargin\romannumeral\the\numexpr\count@-\@ne\endcsname}{}% + \advance\count@\@ne + \repeat +% define all missing enum... counters and \labelenum... macros and \p@enum.. + \count@\@ne + \loop + \spx@ifundefined{c@enum\romannumeral\the\count@} + {\iffalse}{\iftrue\advance\count@\@ne}% + \repeat + \loop + \ifnum\count@>\spx@opt@maxlistdepth\relax\else + \newcounter{enum\romannumeral\the\count@}% + \expandafter\def + \csname labelenum\romannumeral\the\count@\expandafter\endcsname + \expandafter + {\csname theenum\romannumeral\the\numexpr\count@\endcsname.}% + \expandafter\def + \csname p@enum\romannumeral\the\count@\expandafter\endcsname + \expandafter + {\csname p@enum\romannumeral\the\numexpr\count@-\@ne\expandafter + \endcsname\csname theenum\romannumeral\the\numexpr\count@-\@ne\endcsname.}% + \advance\count@\@ne + \repeat +% define all missing labelitem... macros + \count@\@ne + \loop + \spx@ifundefined{labelitem\romannumeral\the\count@} + {\iffalse}{\iftrue\advance\count@\@ne}% + \repeat + \loop + \ifnum\count@>\spx@opt@maxlistdepth\relax\else + \expandafter\let + \csname labelitem\romannumeral\the\count@\expandafter\endcsname + \csname labelitem\romannumeral\the\numexpr\count@-\@ne\endcsname + \advance\count@\@ne + \repeat + \PackageInfo{sphinx}{maximal list depth extended to \spx@opt@maxlistdepth}% +\@gobble\@nnil +} diff --git a/sphinx/texinputs/sphinxhowto.cls b/sphinx/texinputs/sphinxhowto.cls index 26e63a7ee48..3e34063ef0a 100644 --- a/sphinx/texinputs/sphinxhowto.cls +++ b/sphinx/texinputs/sphinxhowto.cls @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesClass{sphinxhowto}[2009/06/02 Document class (Sphinx HOWTO)] +\ProvidesClass{sphinxhowto}[2016/10/12 v1.5 Document class (Sphinx HOWTO)] % 'oneside' option overriding the 'twoside' default \newif\if@oneside @@ -29,30 +29,31 @@ % Change the title page to look a bit better, and fit in with the fncychap % ``Bjarne'' style a bit better. % -\renewcommand{\maketitle}{ - \rule{\textwidth}{1pt} +\renewcommand{\maketitle}{% + \noindent\rule{\textwidth}{1pt}\ifsphinxpdfoutput\newline\null\fi\par \ifsphinxpdfoutput \begingroup % These \defs are required to deal with multi-line authors; it % changes \\ to ', ' (comma-space), making it pass muster for % generating document info in the PDF file. - \def\\{, } - \def\and{and } + \def\\{, }% + \def\and{and }% \pdfinfo{ /Author (\@author) /Title (\@title) - } + }% \endgroup \fi \begin{flushright} - \sphinxlogo% - {\rm\Huge\py@HeaderFamily \@title} \par - {\em\large\py@HeaderFamily \py@release\releaseinfo} \par + \sphinxlogo + \py@HeaderFamily + {\Huge \@title }\par + {\itshape\large \py@release \releaseinfo}\par \vspace{25pt} - {\Large\py@HeaderFamily + {\Large \begin{tabular}[t]{c} \@author - \end{tabular}} \par + \end{tabular}}\par \vspace{25pt} \@date \par \py@authoraddress \par @@ -63,11 +64,10 @@ %\gdef\@thanks{}\gdef\@author{}\gdef\@title{} } -\let\py@OldTableofcontents=\tableofcontents -\renewcommand{\tableofcontents}{ +\newcommand{\sphinxtableofcontents}{ \begingroup \parskip = 0mm - \py@OldTableofcontents + \tableofcontents \endgroup \rule{\textwidth}{1pt} \vspace{12pt} @@ -84,21 +84,21 @@ % Contents. % For an article document class this environment is a section, % so no page break before it. -\let\py@OldThebibliography=\thebibliography -\renewcommand{\thebibliography}[1]{ +% +% Note: \phantomsection is required for TeXLive 2009 +% http://tex.stackexchange.com/questions/44088/when-do-i-need-to-invoke-phantomsection#comment166081_44091 +\newenvironment{sphinxthebibliography}[1]{% \phantomsection - \py@OldThebibliography{1} - \addcontentsline{toc}{section}{\bibname} -} + \begin{thebibliography}{1}% + \addcontentsline{toc}{section}{\ifdefined\refname\refname\else\ifdefined\bibname\bibname\fi\fi}}{\end{thebibliography}} + % Same for the indices. % The memoir class already does this, so we don't duplicate it in that case. % -\@ifclassloaded{memoir}{}{ - \let\py@OldTheindex=\theindex - \renewcommand{\theindex}{ +\@ifclassloaded{memoir} + {\newenvironment{sphinxtheindex}{\begin{theindex}}{\end{theindex}}} + {\newenvironment{sphinxtheindex}{% \phantomsection - \py@OldTheindex - \addcontentsline{toc}{section}{\indexname} - } -} + \begin{theindex}% + \addcontentsline{toc}{section}{\indexname}}{\end{theindex}}} diff --git a/sphinx/texinputs/sphinxmanual.cls b/sphinx/texinputs/sphinxmanual.cls index a6b9b392859..3a48c67603e 100644 --- a/sphinx/texinputs/sphinxmanual.cls +++ b/sphinx/texinputs/sphinxmanual.cls @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesClass{sphinxmanual}[2009/06/02 Document class (Sphinx manual)] +\ProvidesClass{sphinxmanual}[2016/10/12 v1.5 Document class (Sphinx manual)] % chapters starting at odd pages (overridden by 'openany' document option) \PassOptionsToClass{openright}{\sphinxdocclass} @@ -34,29 +34,33 @@ % ``Bjarne'' style a bit better. % \renewcommand{\maketitle}{% + \let\spx@tempa\relax + \ifHy@pageanchor\def\spx@tempa{\Hy@pageanchortrue}\fi + \hypersetup{pageanchor=false}% avoid duplicate destination warnings \begin{titlepage}% \let\footnotesize\small \let\footnoterule\relax - \rule{\textwidth}{1pt}% + \noindent\rule{\textwidth}{1pt}\ifsphinxpdfoutput\newline\null\fi\par \ifsphinxpdfoutput \begingroup % These \defs are required to deal with multi-line authors; it % changes \\ to ', ' (comma-space), making it pass muster for % generating document info in the PDF file. - \def\\{, } - \def\and{and } + \def\\{, }% + \def\and{and }% \pdfinfo{ /Author (\@author) /Title (\@title) - } + }% \endgroup \fi \begin{flushright}% - \sphinxlogo% - {\rm\Huge\py@HeaderFamily \@title \par}% - {\em\LARGE\py@HeaderFamily \py@release\releaseinfo \par} + \sphinxlogo + \py@HeaderFamily + {\Huge \@title \par} + {\itshape\LARGE \py@release\releaseinfo \par} \vfill - {\LARGE\py@HeaderFamily + {\LARGE \begin{tabular}[t]{c} \@author \end{tabular} @@ -70,52 +74,25 @@ \end{flushright}%\par \@thanks \end{titlepage}% - \cleardoublepage% \setcounter{footnote}{0}% \let\thanks\relax\let\maketitle\relax %\gdef\@thanks{}\gdef\@author{}\gdef\@title{} + \if@openright\cleardoublepage\else\clearpage\fi + \spx@tempa } - -% Catch the end of the {abstract} environment, but here make sure the abstract -% is followed by a blank page if the 'openright' option is used. -% -\let\py@OldEndAbstract=\endabstract -\renewcommand{\endabstract}{ - \if@openright - \ifodd\value{page} - \typeout{Adding blank page after the abstract.} - \vfil\pagebreak - \fi - \fi - \py@OldEndAbstract -} - -% This wraps the \tableofcontents macro with all the magic to get the spacing -% right and have the right number of pages if the 'openright' option has been -% used. This eliminates a fair amount of crud in the individual document files. -% -\let\py@OldTableofcontents=\tableofcontents -\renewcommand{\tableofcontents}{% +\newcommand{\sphinxtableofcontents}{% \pagenumbering{roman}% - \setcounter{page}{1}% - \pagebreak% \pagestyle{plain}% - {% - \parskip = 0mm% - \py@OldTableofcontents% - \if@openright% - \ifodd\value{page}% - \typeout{Adding blank page after the table of contents.}% - \pagebreak\hspace{0pt}% - \fi% - \fi% - \cleardoublepage% - }% + \begingroup + \parskip \z@skip + \tableofcontents + \endgroup + % before resetting page counter, let's do the right thing. + \if@openright\cleardoublepage\else\clearpage\fi \pagenumbering{arabic}% - \@ifundefined{fancyhf}{}{\pagestyle{normal}}% + \ifdefined\fancyhf\pagestyle{normal}\fi } -\pagenumbering{alph} % This is needed to get the width of the section # area wide enough in the % library reference. Doing it here keeps it the same for all the manuals. @@ -126,23 +103,22 @@ % Fix the bibliography environment to add an entry to the Table of % Contents. % For a report document class this environment is a chapter. -\let\py@OldThebibliography=\thebibliography -\renewcommand{\thebibliography}[1]{ - \cleardoublepage +% +% Note: \phantomsection is required for TeXLive 2009 +% http://tex.stackexchange.com/questions/44088/when-do-i-need-to-invoke-phantomsection#comment166081_44091 +\newenvironment{sphinxthebibliography}[1]{% + \if@openright\cleardoublepage\else\clearpage\fi \phantomsection - \py@OldThebibliography{1} - \addcontentsline{toc}{chapter}{\bibname} -} + \begin{thebibliography}{1}% + \addcontentsline{toc}{chapter}{\bibname}}{\end{thebibliography}} % Same for the indices. % The memoir class already does this, so we don't duplicate it in that case. % -\@ifclassloaded{memoir}{}{ - \let\py@OldTheindex=\theindex - \renewcommand{\theindex}{ - \cleardoublepage +\@ifclassloaded{memoir} + {\newenvironment{sphinxtheindex}{\begin{theindex}}{\end{theindex}}} + {\newenvironment{sphinxtheindex}{% + \if@openright\cleardoublepage\else\clearpage\fi \phantomsection - \py@OldTheindex - \addcontentsline{toc}{chapter}{\indexname} - } -} + \begin{theindex}% + \addcontentsline{toc}{chapter}{\indexname}}{\end{theindex}}} diff --git a/sphinx/texinputs/tabulary.sty b/sphinx/texinputs/tabulary.sty deleted file mode 100644 index 11fdf7428c8..00000000000 --- a/sphinx/texinputs/tabulary.sty +++ /dev/null @@ -1,452 +0,0 @@ -%% -%% This is file `tabulary.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% tabulary.dtx (with options: `package') -%% DRAFT VERSION -%% -%% File `tabulary.dtx'. -%% Copyright (C) 1995 1996 2003 2008 David Carlisle -%% This file may be distributed under the terms of the LPPL. -%% See 00readme.txt for details. -%% -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{tabulary} - [2008/12/01 v0.9 tabulary package (DPC)] -\RequirePackage{array} -\catcode`\Z=14 -\DeclareOption{debugshow}{\catcode`\Z=9\relax} -\ProcessOptions -\def\arraybackslash{\let\\=\@arraycr} -\def\@finalstrut#1{% - \unskip\ifhmode\nobreak\fi\vrule\@width\z@\@height\z@\@depth\dp#1} -\newcount\TY@count -\def\tabulary{% - \let\TY@final\tabular - \let\endTY@final\endtabular - \TY@tabular} -\def\TY@tabular#1{% - \edef\TY@{\@currenvir}% - {\ifnum0=`}\fi - \@ovxx\TY@linewidth - \@ovyy\TY@tablewidth - \count@\z@ - \@tempswatrue - \@whilesw\if@tempswa\fi{% - \advance\count@\@ne - \expandafter\ifx\csname TY@F\the\count@\endcsname\relax - \@tempswafalse - \else - \expandafter\let\csname TY@SF\the\count@\expandafter\endcsname - \csname TY@F\the\count@\endcsname - \global\expandafter\let\csname TY@F\the\count@\endcsname\relax - \expandafter\let\csname TY@S\the\count@\expandafter\endcsname - \csname TY@\the\count@\endcsname - \fi}% - \global\TY@count\@ne - \TY@width\xdef{0pt}% - \global\TY@tablewidth\z@ - \global\TY@linewidth#1\relax -Z\message{^^J^^JTable^^J% -Z Target Width: \the\TY@linewidth^^J% -Z \string\tabcolsep: \the\tabcolsep\space -Z \string\arrayrulewidth: \the\arrayrulewidth\space -Z \string\doublerulesep: \the\doublerulesep^^J% -Z \string\tymin: \the\tymin\space -Z \string\tymax: \the\tymax^^J}% - \let\@classz\TY@classz - \let\verb\TX@verb - \toks@{}\TY@get@body} -\let\TY@@mkpream\@mkpream -\def\TY@mkpream{% - \def\@addamp{% - \if@firstamp \@firstampfalse \else - \global\advance\TY@count\@ne - \edef\@preamble{\@preamble &}\fi - \TY@width\xdef{0pt}}% - \def\@acol{% - \TY@subwidth\col@sep - \@addtopreamble{\hskip\col@sep}}% - \let\@arrayrule\TY@arrayrule - \let\@classvi\TY@classvi - \def\@classv{\save@decl - \expandafter\NC@ecs\@nextchar\extracolsep{}\extracolsep\@@@ - \sbox\z@{\d@llarbegin\@nextchar\d@llarend}% - \TY@subwidth{\wd\z@}% - \@addtopreamble{\d@llarbegin\the@toks\the\count@\relax\d@llarend}% - \prepnext@tok}% - \global\let\@mkpream\TY@@mkpream - \TY@@mkpream} -\def\TY@arrayrule{% - \TY@subwidth\arrayrulewidth - \@addtopreamble \vline} -\def\TY@classvi{\ifcase \@lastchclass - \@acol \or - \TY@subwidth\doublerulesep - \@addtopreamble{\hskip \doublerulesep}\or - \@acol \or - \@classvii - \fi} -\def\TY@tab{% - \setbox\z@\hbox\bgroup - \let\[$\let\]$% - \let\equation$\let\endequation$% - \col@sep\tabcolsep - \let\d@llarbegin\begingroup\let\d@llarend\endgroup - \let\@mkpream\TY@mkpream - \def\multicolumn##1##2##3{\multispan##1\relax}% - \CT@start\TY@tabarray} -\def\TY@tabarray{\@ifnextchar[{\TY@array}{\@array[t]}} -\def\TY@array[#1]{\@array[t]} -\def\TY@width#1{% - \expandafter#1\csname TY@\the\TY@count\endcsname} -\def\TY@subwidth#1{% - \TY@width\dimen@ - \advance\dimen@-#1\relax - \TY@width\xdef{\the\dimen@}% - \global\advance\TY@linewidth-#1\relax} -\def\endtabulary{% - \gdef\@halignto{}% - \let\TY@footnote\footnote% - \def\footnote{}% prevent footnotes from doing anything - \expandafter\TY@tab\the\toks@ - \crcr\omit - {\xdef\TY@save@row{}% - \loop - \advance\TY@count\m@ne - \ifnum\TY@count>\z@ - \xdef\TY@save@row{\TY@save@row&\omit}% - \repeat}\TY@save@row - \endarray\global\setbox1=\lastbox\setbox0=\vbox{\unvbox1 - \unskip\global\setbox1=\lastbox}\egroup - \dimen@\TY@linewidth - \divide\dimen@\TY@count - \ifdim\dimen@<\tymin - \TY@warn{tymin too large (\the\tymin), resetting to \the\dimen@}% - \tymin\dimen@ - \fi - \setbox\tw@=\hbox{\unhbox\@ne - \loop -\@tempdima=\lastskip -\ifdim\@tempdima>\z@ -Z \message{ecs=\the\@tempdima^^J}% - \global\advance\TY@linewidth-\@tempdima -\fi - \unskip - \setbox\tw@=\lastbox - \ifhbox\tw@ -Z \message{Col \the\TY@count: Initial=\the\wd\tw@\space}% - \ifdim\wd\tw@>\tymax - \wd\tw@\tymax -Z \message{> max\space}% -Z \else -Z \message{ \@spaces\space}% - \fi - \TY@width\dimen@ -Z \message{\the\dimen@\space}% - \advance\dimen@\wd\tw@ -Z \message{Final=\the\dimen@\space}% - \TY@width\xdef{\the\dimen@}% - \ifdim\dimen@<\tymin -Z \message{< tymin}% - \global\advance\TY@linewidth-\dimen@ - \expandafter\xdef\csname TY@F\the\TY@count\endcsname - {\the\dimen@}% - \else - \expandafter\ifx\csname TY@F\the\TY@count\endcsname\z@ -Z \message{***}% - \global\advance\TY@linewidth-\dimen@ - \expandafter\xdef\csname TY@F\the\TY@count\endcsname - {\the\dimen@}% - \else -Z \message{> tymin}% - \global\advance\TY@tablewidth\dimen@ - \global\expandafter\let\csname TY@F\the\TY@count\endcsname - \maxdimen - \fi\fi - \advance\TY@count\m@ne - \repeat}% - \TY@checkmin - \TY@checkmin - \TY@checkmin - \TY@checkmin - \TY@count\z@ - \let\TY@box\TY@box@v - \let\footnote\TY@footnote % restore footnotes - {\expandafter\TY@final\the\toks@\endTY@final}% - \count@\z@ - \@tempswatrue - \@whilesw\if@tempswa\fi{% - \advance\count@\@ne - \expandafter\ifx\csname TY@SF\the\count@\endcsname\relax - \@tempswafalse - \else - \global\expandafter\let\csname TY@F\the\count@\expandafter\endcsname - \csname TY@SF\the\count@\endcsname - \global\expandafter\let\csname TY@\the\count@\expandafter\endcsname - \csname TY@S\the\count@\endcsname - \fi}% - \TY@linewidth\@ovxx - \TY@tablewidth\@ovyy - \ifnum0=`{\fi}} -\def\TY@checkmin{% - \let\TY@checkmin\relax -\ifdim\TY@tablewidth>\z@ - \Gscale@div\TY@ratio\TY@linewidth\TY@tablewidth - \ifdim\TY@tablewidth <\TY@linewidth - \def\TY@ratio{1}% - \fi -\else - \TY@warn{No suitable columns!}% - \def\TY@ratio{1}% -\fi -\count@\z@ -Z \message{^^JLine Width: \the\TY@linewidth, -Z Natural Width: \the\TY@tablewidth, -Z Ratio: \TY@ratio^^J}% -\@tempdima\z@ -\loop -\ifnum\count@<\TY@count -\advance\count@\@ne - \ifdim\csname TY@F\the\count@\endcsname>\tymin - \dimen@\csname TY@\the\count@\endcsname - \dimen@\TY@ratio\dimen@ - \ifdim\dimen@<\tymin -Z \message{Column \the\count@\space ->}% - \global\expandafter\let\csname TY@F\the\count@\endcsname\tymin - \global\advance\TY@linewidth-\tymin - \global\advance\TY@tablewidth-\csname TY@\the\count@\endcsname - \let\TY@checkmin\TY@@checkmin - \else - \expandafter\xdef\csname TY@F\the\count@\endcsname{\the\dimen@}% - \advance\@tempdima\csname TY@F\the\count@\endcsname - \fi - \fi -Z \dimen@\csname TY@F\the\count@\endcsname\message{\the\dimen@, }% -\repeat -Z \message{^^JTotal:\the\@tempdima^^J}% -} -\let\TY@@checkmin\TY@checkmin -\newdimen\TY@linewidth -\def\tyformat{\everypar{{\nobreak\hskip\z@skip}}} -\newdimen\tymin -\tymin=10pt -\newdimen\tymax -\tymax=2\textwidth -\def\@testpach{\@chclass - \ifnum \@lastchclass=6 \@ne \@chnum \@ne \else - \ifnum \@lastchclass=7 5 \else - \ifnum \@lastchclass=8 \tw@ \else - \ifnum \@lastchclass=9 \thr@@ - \else \z@ - \ifnum \@lastchclass = 10 \else - \edef\@nextchar{\expandafter\string\@nextchar}% - \@chnum - \if \@nextchar c\z@ \else - \if \@nextchar l\@ne \else - \if \@nextchar r\tw@ \else - \if \@nextchar C7 \else - \if \@nextchar L8 \else - \if \@nextchar R9 \else - \if \@nextchar J10 \else - \z@ \@chclass - \if\@nextchar |\@ne \else - \if \@nextchar !6 \else - \if \@nextchar @7 \else - \if \@nextchar <8 \else - \if \@nextchar >9 \else - 10 - \@chnum - \if \@nextchar m\thr@@\else - \if \@nextchar p4 \else - \if \@nextchar b5 \else - \z@ \@chclass \z@ \@preamerr \z@ \fi \fi \fi \fi\fi \fi \fi\fi \fi - \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi} -\def\TY@classz{% - \@classx - \@tempcnta\count@ - \ifx\TY@box\TY@box@v - \global\advance\TY@count\@ne - \fi - \let\centering c% - \let\raggedright\noindent - \let\raggedleft\indent - \let\arraybackslash\relax - \prepnext@tok - \ifnum\@chnum<4 - \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@ - \fi - \ifnum\@chnum=6 - \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@ - \fi - \@addtopreamble{% - \ifcase\@chnum - \hfil \d@llarbegin\insert@column\d@llarend \hfil \or - \kern\z@ - \d@llarbegin \insert@column \d@llarend \hfil \or - \hfil\kern\z@ \d@llarbegin \insert@column \d@llarend \or - $\vcenter\@startpbox{\@nextchar}\insert@column \@endpbox $\or - \vtop \@startpbox{\@nextchar}\insert@column \@endpbox \or - \vbox \@startpbox{\@nextchar}\insert@column \@endpbox \or - \d@llarbegin \insert@column \d@llarend \or% dubious "s" case - \TY@box\centering\or - \TY@box\raggedright\or - \TY@box\raggedleft\or - \TY@box\relax - \fi}\prepnext@tok} -\def\TY@box#1{% - \ifx\centering#1% - \hfil \d@llarbegin\insert@column\d@llarend \hfil \else - \ifx\raggedright#1% - \kern\z@%<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - \d@llarbegin \insert@column \d@llarend \hfil \else - \ifx\raggedleft#1% - \hfil\kern\z@ \d@llarbegin \insert@column \d@llarend \else - \ifx\relax#1% - \d@llarbegin \insert@column \d@llarend - \fi \fi \fi \fi} -\def\TY@box@v#1{% - \vtop \@startpbox{\csname TY@F\the\TY@count\endcsname}% - #1\arraybackslash\tyformat - \insert@column\@endpbox} -\newdimen\TY@tablewidth -\def\Gscale@div#1#2#3{% - \setlength\dimen@{#3}% - \ifdim\dimen@=\z@ - \PackageError{graphics}{Division by 0}\@eha - \dimen@#2% - \fi - \edef\@tempd{\the\dimen@}% - \setlength\dimen@{#2}% - \count@65536\relax - \ifdim\dimen@<\z@ - \dimen@-\dimen@ - \count@-\count@ - \fi - \loop - \ifdim\dimen@<8192\p@ - \dimen@\tw@\dimen@ - \divide\count@\tw@ - \repeat - \dimen@ii=\@tempd\relax - \divide\dimen@ii\count@ - \divide\dimen@\dimen@ii - \edef#1{\strip@pt\dimen@}} -\long\def\TY@get@body#1\end - {\toks@\expandafter{\the\toks@#1}\TY@find@end} -\def\TY@find@end#1{% - \def\@tempa{#1}% - \ifx\@tempa\TY@\def\@tempa{\end{#1}}\expandafter\@tempa - \else\toks@\expandafter - {\the\toks@\end{#1}}\expandafter\TY@get@body\fi} -\def\TY@warn{% - \PackageWarning{tabulary}} -\catcode`\Z=11 -\AtBeginDocument{ -\@ifpackageloaded{colortbl}{% -\expandafter\def\expandafter\@mkpream\expandafter#\expandafter1% - \expandafter{% - \expandafter\let\expandafter\CT@setup\expandafter\relax - \expandafter\let\expandafter\CT@color\expandafter\relax - \expandafter\let\expandafter\CT@do@color\expandafter\relax - \expandafter\let\expandafter\color\expandafter\relax - \expandafter\let\expandafter\CT@column@color\expandafter\relax - \expandafter\let\expandafter\CT@row@color\expandafter\relax - \@mkpream{#1}} -\let\TY@@mkpream\@mkpream -\def\TY@classz{% - \@classx - \@tempcnta\count@ - \ifx\TY@box\TY@box@v - \global\advance\TY@count\@ne - \fi - \let\centering c% - \let\raggedright\noindent - \let\raggedleft\indent - \let\arraybackslash\relax - \prepnext@tok -\expandafter\CT@extract\the\toks\@tempcnta\columncolor!\@nil - \ifnum\@chnum<4 - \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@ - \fi - \ifnum\@chnum=6 - \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@ - \fi - \@addtopreamble{% - \setbox\z@\hbox\bgroup\bgroup - \ifcase\@chnum - \hskip\stretch{.5}\kern\z@ - \d@llarbegin\insert@column\d@llarend\hskip\stretch{.5}\or - \kern\z@%<<<<<<<<<<<<<<<<<<<<<<<<<<< - \d@llarbegin \insert@column \d@llarend \hfill \or - \hfill\kern\z@ \d@llarbegin \insert@column \d@llarend \or - $\vcenter\@startpbox{\@nextchar}\insert@column \@endpbox $\or - \vtop \@startpbox{\@nextchar}\insert@column \@endpbox \or - \vbox \@startpbox{\@nextchar}\insert@column \@endpbox \or - \d@llarbegin \insert@column \d@llarend \or% dubious s case - \TY@box\centering\or - \TY@box\raggedright\or - \TY@box\raggedleft\or - \TY@box\relax - \fi - \egroup\egroup -\begingroup - \CT@setup - \CT@column@color - \CT@row@color - \CT@do@color -\endgroup - \@tempdima\ht\z@ - \advance\@tempdima\minrowclearance - \vrule\@height\@tempdima\@width\z@ -\unhbox\z@ -}\prepnext@tok}% - \def\TY@arrayrule{% - \TY@subwidth\arrayrulewidth - \@addtopreamble{{\CT@arc@\vline}}}% - \def\TY@classvi{\ifcase \@lastchclass - \@acol \or - \TY@subwidth\doublerulesep - \ifx\CT@drsc@\relax - \@addtopreamble{\hskip\doublerulesep}% - \else - \@addtopreamble{{\CT@drsc@\vrule\@width\doublerulesep}}% - \fi\or - \@acol \or - \@classvii - \fi}% -}{% -\let\CT@start\relax -} -} -{\uccode`\*=`\ % -\uppercase{\gdef\TX@verb{% - \leavevmode\null\TX@vwarn - {\ifnum0=`}\fi\ttfamily\let\\\ignorespaces - \@ifstar{\let~*\TX@vb}{\TX@vb}}}} -\def\TX@vb#1{\def\@tempa##1#1{\toks@{##1}\edef\@tempa{\the\toks@}% - \expandafter\TX@v\meaning\@tempa\\ \\\ifnum0=`{\fi}}\@tempa!} -\def\TX@v#1!{\afterassignment\TX@vfirst\let\@tempa= } -\begingroup -\catcode`\*=\catcode`\# -\catcode`\#=12 -\gdef\TX@vfirst{% - \if\@tempa#% - \def\@tempb{\TX@v@#}% - \else - \let\@tempb\TX@v@ - \if\@tempa\space~\else\@tempa\fi - \fi - \@tempb} -\gdef\TX@v@*1 *2{% - \TX@v@hash*1##\relax\if*2\\\else~\expandafter\TX@v@\fi*2} -\gdef\TX@v@hash*1##*2{*1\ifx*2\relax\else#\expandafter\TX@v@hash\fi*2} -\endgroup -\def\TX@vwarn{% - \@warning{\noexpand\verb may be unreliable inside tabularx/y}% - \global\let\TX@vwarn\@empty} -\endinput -%% -%% End of file `tabulary.sty'. diff --git a/sphinx/themes/agogo/layout.html b/sphinx/themes/agogo/layout.html index 6a80a207fe8..d9d67f492a5 100644 --- a/sphinx/themes/agogo/layout.html +++ b/sphinx/themes/agogo/layout.html @@ -5,7 +5,7 @@ Sphinx layout template for the agogo theme, originally written by Andi Albrecht. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. #} {%- extends "basic/layout.html" %} @@ -55,9 +55,6 @@ <h3 style="margin-top: 1.5em;">{{ _('Search') }}</h3> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> - <p class="searchtip" style="font-size: 90%"> - {{ _('Enter search terms or a module, class or function name.') }} - </p> </div> {%- endblock %} </div> diff --git a/sphinx/themes/agogo/static/agogo.css_t b/sphinx/themes/agogo/static/agogo.css_t index 87801d68569..0baec16fcab 100644 --- a/sphinx/themes/agogo/static/agogo.css_t +++ b/sphinx/themes/agogo/static/agogo.css_t @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- agogo theme. * - * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -462,9 +462,14 @@ table.indextable td { vertical-align: top; } -table.indextable dl, table.indextable dd { +table.indextable ul { margin-top: 0; margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; } table.indextable tr.pcap { @@ -482,6 +487,13 @@ img.toggler { cursor: pointer; } +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + /* -- viewcode extension ---------------------------------------------------- */ .viewcode-link { @@ -507,3 +519,13 @@ div.code-block-caption { padding: 2px 5px; font-size: small; } + +/* -- math display ---------------------------------------------------------- */ + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} diff --git a/sphinx/themes/agogo/static/bgfooter.png b/sphinx/themes/agogo/static/bgfooter.png index 9ce5bdd9029..b7c7cadd4e6 100644 Binary files a/sphinx/themes/agogo/static/bgfooter.png and b/sphinx/themes/agogo/static/bgfooter.png differ diff --git a/sphinx/themes/agogo/static/bgtop.png b/sphinx/themes/agogo/static/bgtop.png index a0d4709bac8..05740880ff9 100644 Binary files a/sphinx/themes/agogo/static/bgtop.png and b/sphinx/themes/agogo/static/bgtop.png differ diff --git a/sphinx/themes/basic/changes/frameset.html b/sphinx/themes/basic/changes/frameset.html index 9d9af9eb568..2331ec11c29 100644 --- a/sphinx/themes/basic/changes/frameset.html +++ b/sphinx/themes/basic/changes/frameset.html @@ -1,8 +1,8 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> -<html> +<html{% if language is not none %} lang="{{ language }}"{% endif %}> <head> - <title>{% trans version=version|e, docstitle=docstitle|e %}Changes in Version {{ version }} — {{ docstitle }}{% endtrans %} + {% trans version=version|e, docstitle=docstitle|e %}Changes in Version {{ version }} — {{ docstitle }}{% endtrans %} diff --git a/sphinx/themes/basic/changes/rstsource.html b/sphinx/themes/basic/changes/rstsource.html index abd12c1d0b5..c93a28dad93 100644 --- a/sphinx/themes/basic/changes/rstsource.html +++ b/sphinx/themes/basic/changes/rstsource.html @@ -1,8 +1,8 @@ - + - {% trans filename=filename, docstitle=docstitle|e %}{{ filename }} — {{ docstitle }}{% endtrans %} + {% trans filename=filename, docstitle=docstitle|e %}{{ filename }} — {{ docstitle }}{% endtrans %} diff --git a/sphinx/themes/basic/changes/versionchanges.html b/sphinx/themes/basic/changes/versionchanges.html index 09651bf1d32..c42cef42e47 100644 --- a/sphinx/themes/basic/changes/versionchanges.html +++ b/sphinx/themes/basic/changes/versionchanges.html @@ -5,11 +5,11 @@ {% endmacro -%} - + - {% trans version=version|e, docstitle=docstitle|e %}Changes in Version {{ version }} — {{ docstitle }}{% endtrans %} + {% trans version=version|e, docstitle=docstitle|e %}Changes in Version {{ version }} — {{ docstitle }}{% endtrans %}
    diff --git a/sphinx/themes/basic/defindex.html b/sphinx/themes/basic/defindex.html index 3c1240ebd23..190680724a7 100644 --- a/sphinx/themes/basic/defindex.html +++ b/sphinx/themes/basic/defindex.html @@ -4,9 +4,9 @@ Default template for the "index" page. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. -#} +#}{{ warn('Now base template defindex.html is deprecated.') }} {%- extends "layout.html" %} {% set title = _('Overview') %} {% block body %} @@ -18,13 +18,13 @@

    {{ docstitle|e }}

    {% block tables %}

    {{ _('Indices and tables:') }}

    - - from table fragments - if ( !support.tbody ) { - - // String was a
    + + \s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - option: [ 1, "" ], - legend: [ 1, "
    ", "
    " ], - area: [ 1, "", "" ], - param: [ 1, "", "" ], - thead: [ 1, "
    - +

    {{ indextitle }}

    {%- endfor %} - +
    {%- for letter, entries in content %} - + {%- for (name, grouptype, page, anchor, extra, qualifier, description) @@ -42,7 +42,7 @@

    {{ indextitle }}

    {%- endif %} - or other required elements. + thead: [ 1, "
     
     
    {{ letter }}
    {% if grouptype == 2 %}   {% endif %} + {% if grouptype == 2 %}   {% endif %} {% if page %}{% endif -%} {{ name|e }} {%- if page %}{% endif %} diff --git a/sphinx/themes/basic/genindex-single.html b/sphinx/themes/basic/genindex-single.html index ddc9883814a..e1da78ab583 100644 --- a/sphinx/themes/basic/genindex-single.html +++ b/sphinx/themes/basic/genindex-single.html @@ -4,11 +4,10 @@ Template for a "single" page of a split index. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. #} {% macro indexentries(firstname, links) %} -
    {%- if links -%} {%- if links[0][0] %}{% endif -%} @@ -25,7 +24,6 @@ {%- else %} {{ firstname|e }} {%- endif %} -
    {% endmacro %} {%- extends "layout.html" %} @@ -36,18 +34,18 @@

    {% trans key=key %}Index – {{ key }}{% endtrans %}

    {%- for column in entries|slice(2) if column %} - + {%- endfor %}
    - {%- for entryname, (links, subitems) in column %} - {{ indexentries(entryname, links) }} +
      + {%- for entryname, (links, subitems, _) in column %} +
    • {{ indexentries(entryname, links) }} {%- if subitems %} -
      +
        {%- for subentryname, subentrylinks in subitems %} - {{ indexentries(subentryname, subentrylinks) }} +
      • {{ indexentries(subentryname, subentrylinks) }}
      • {%- endfor %} -
      - {%- endif -%} +
    + {%- endif -%} {%- endfor %} -
    diff --git a/sphinx/themes/basic/genindex-split.html b/sphinx/themes/basic/genindex-split.html index ca8db18b024..f6545dea09e 100644 --- a/sphinx/themes/basic/genindex-split.html +++ b/sphinx/themes/basic/genindex-split.html @@ -4,7 +4,7 @@ Template for a "split" index overview page. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. #} {%- extends "layout.html" %} diff --git a/sphinx/themes/basic/genindex.html b/sphinx/themes/basic/genindex.html index 18e29b5e377..57453c3f5ce 100644 --- a/sphinx/themes/basic/genindex.html +++ b/sphinx/themes/basic/genindex.html @@ -4,11 +4,10 @@ Template for an "all-in-one" index. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. #} {% macro indexentries(firstname, links) %} -
    {%- if links -%} {%- if links[0][0] %}{% endif -%} @@ -25,7 +24,6 @@ {%- else %} {{ firstname|e }} {%- endif %} -
    {% endmacro %} {%- extends "layout.html" %} @@ -44,19 +42,19 @@

    {{ _('Index') }}

    {%- for key, entries in genindexentries %}

    {{ key }}

    - {%- for column in entries|slice(2) if column %} - + {%- endfor %}
    - {%- for entryname, (links, subitems) in column %} - {{ indexentries(entryname, links) }} + {%- for column in entries|slice_index(2) if column %} +
      + {%- for entryname, (links, subitems, _) in column %} +
    • {{ indexentries(entryname, links) }} {%- if subitems %} -
      +
        {%- for subentryname, subentrylinks in subitems %} - {{ indexentries(subentryname, subentrylinks) }} +
      • {{ indexentries(subentryname, subentrylinks) }}
      • {%- endfor %} -
      - {%- endif -%} +
    + {%- endif -%} {%- endfor %} -
    {% endfor %} diff --git a/sphinx/themes/basic/globaltoc.html b/sphinx/themes/basic/globaltoc.html index 9f0296a934a..b16bb9f51c1 100644 --- a/sphinx/themes/basic/globaltoc.html +++ b/sphinx/themes/basic/globaltoc.html @@ -4,7 +4,7 @@ Sphinx sidebar template: global table of contents. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. #}

    {{ _('Table Of Contents') }}

    diff --git a/sphinx/themes/basic/layout.html b/sphinx/themes/basic/layout.html index 4c0ebd658b8..2d37d71345f 100644 --- a/sphinx/themes/basic/layout.html +++ b/sphinx/themes/basic/layout.html @@ -4,14 +4,14 @@ Master layout template for Sphinx themes. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. #} {%- block doctype -%} {%- endblock %} -{%- set reldelim1 = reldelim1 is not defined and ' »' or reldelim1 %} +{%- set reldelim1 = reldelim1 is not defined and ' »' or reldelim1 %} {%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %} {%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and (sidebars != []) %} @@ -19,7 +19,7 @@ {# XXX necessary? #} {%- if url_root == '#' %}{% set url_root = '' %}{% endif %} {%- if not embedded and docstitle %} - {%- set titlesuffix = " — "|safe + docstitle|e %} + {%- set titlesuffix = " — "|safe + docstitle|e %} {%- else %} {%- set titlesuffix = "" %} {%- endif %} @@ -91,7 +91,8 @@

    {{ _('Navigation') }}

    VERSION: '{{ release|e }}', COLLAPSE_INDEX: false, FILE_SUFFIX: '{{ '' if no_search_suffix else file_suffix }}', - HAS_SOURCE: {{ has_source|lower }} + HAS_SOURCE: {{ has_source|lower }}, + SOURCELINK_SUFFIX: '{{ sourcelink_suffix }}' }; {%- for scriptfile in script_files %} @@ -107,7 +108,7 @@

    {{ _('Navigation') }}

    {%- endfor %} {%- endmacro %} - + {{ metatags }} @@ -139,10 +140,6 @@

    {{ _('Navigation') }}

    {%- if hasdoc('copyright') %} {%- endif %} - - {%- if parents %} - - {%- endif %} {%- if next %} {%- endif %} @@ -186,9 +183,9 @@

    {{ _('Navigation') }}

    ", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== "undefined" ? + context.querySelectorAll( tag || "*" ) : + []; + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], ret ) : + ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded - return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ? - jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : - undefined; + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; }; - // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events - eventHandle.elem = elem; } // Handle multiple events separated by a space types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); // There *must* be a type, no attaching namespace-only handlers if ( !type ) { @@ -4336,7 +4942,7 @@ jQuery.event = { special = jQuery.event.special[ type ] || {}; // handleObj is passed to all event handlers - handleObj = jQuery.extend({ + handleObj = jQuery.extend( { type: type, origType: origType, data: data, @@ -4344,22 +4950,20 @@ jQuery.event = { guid: handler.guid, selector: selector, needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join(".") + namespace: namespaces.join( "." ) }, handleObjIn ); // Init the event handler queue if we're the first - if ( !(handlers = events[ type ]) ) { + if ( !( handlers = events[ type ] ) ) { handlers = events[ type ] = []; handlers.delegateCount = 0; - // Only use addEventListener/attachEvent if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, eventHandle ); + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); } } } @@ -4383,19 +4987,17 @@ jQuery.event = { jQuery.event.global[ type ] = true; } - // Nullify elem to prevent memory leaks in IE - elem = null; }, // Detach an event or set of events from an element remove: function( elem, types, handler, selector, mappedTypes ) { - var j, handleObj, tmp, - origCount, t, events, - special, handlers, type, - namespaces, origType, - elemData = jQuery.hasData( elem ) && jQuery._data( elem ); - if ( !elemData || !(events = elemData.events) ) { + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { return; } @@ -4403,9 +5005,9 @@ jQuery.event = { types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); // Unbind all events (on this namespace, if provided) for the element if ( !type ) { @@ -4418,7 +5020,8 @@ jQuery.event = { special = jQuery.event.special[ type ] || {}; type = ( selector ? special.delegateType : special.bindType ) || type; handlers = events[ type ] || []; - tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); // Remove matching events origCount = j = handlers.length; @@ -4428,7 +5031,8 @@ jQuery.event = { if ( ( mappedTypes || origType === handleObj.origType ) && ( !handler || handler.guid === handleObj.guid ) && ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { handlers.splice( j, 1 ); if ( handleObj.selector ) { @@ -4443,7 +5047,9 @@ jQuery.event = { // Remove generic event handler if we removed something and no more handlers exist // (avoids potential for endless recursion during removal of special event handlers) if ( origCount && !handlers.length ) { - if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); } @@ -4451,202 +5057,65 @@ jQuery.event = { } } - // Remove the expando if it's no longer used + // Remove data and the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { - delete elemData.handle; - - // removeData also checks for emptiness and clears the expando if empty - // so use it instead of delete - jQuery._removeData( elem, "events" ); + dataPriv.remove( elem, "handle events" ); } }, - trigger: function( event, data, elem, onlyHandlers ) { - var handle, ontype, cur, - bubbleType, special, tmp, i, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + dispatch: function( nativeEvent ) { - cur = tmp = elem = elem || document; + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; - if ( type.indexOf(".") >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; } - ontype = type.indexOf(":") < 0 && "on" + type; - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join("."); - event.namespace_re = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : - null; + event.delegateTarget = this; - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; } - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === (elem.ownerDocument || document) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && jQuery.acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && - jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Can't use an .isFunction() check here because IE6/7 fails that test. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - try { - elem[ type ](); - } catch ( e ) { - // IE<9 dies on focus/blur to hidden element (#1486,#12518) - // only reproducible on winXP IE8 native, not IE9 in IE8 mode - } - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event ); - - var i, ret, handleObj, matched, j, - handlerQueue = [], - args = slice.call( arguments ), - handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[0] = event; - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). - if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) - .apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( (event.result = ret) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } } } @@ -4659,23 +5128,25 @@ jQuery.event = { }, handlers: function( event, handlers ) { - var sel, handleObj, matches, i, + var i, matches, sel, handleObj, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target; + // Support: IE <=9 // Find delegate handlers // Black-hole SVG instance trees (#13180) - // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + // + // Support: Firefox <=42 + // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) + if ( delegateCount && cur.nodeType && + ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { - /* jshint eqeqeq: false */ - for ( ; cur != this; cur = cur.parentNode || this ) { - /* jshint eqeqeq: true */ + for ( ; cur !== this; cur = cur.parentNode || this ) { // Don't check non-elements (#13208) // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { matches = []; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; @@ -4685,7 +5156,7 @@ jQuery.event = { if ( matches[ sel ] === undefined ) { matches[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) >= 0 : + jQuery( sel, this ).index( cur ) > -1 : jQuery.find( sel, this, null, [ cur ] ).length; } if ( matches[ sel ] ) { @@ -4693,7 +5164,7 @@ jQuery.event = { } } if ( matches.length ) { - handlerQueue.push({ elem: cur, handlers: matches }); + handlerQueue.push( { elem: cur, handlers: matches } ); } } } @@ -4701,125 +5172,59 @@ jQuery.event = { // Add the remaining (directly-bound) handlers if ( delegateCount < handlers.length ) { - handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); } return handlerQueue; }, - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, copy, - type = event.type, - originalEvent = event, - fixHook = this.fixHooks[ type ]; - - if ( !fixHook ) { - this.fixHooks[ type ] = fixHook = - rmouseEvent.test( type ) ? this.mouseHooks : - rkeyEvent.test( type ) ? this.keyHooks : - {}; - } - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = new jQuery.Event( originalEvent ); - - i = copy.length; - while ( i-- ) { - prop = copy[ i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Support: IE<9 - // Fix target property (#1925) - if ( !event.target ) { - event.target = originalEvent.srcElement || document; - } - - // Support: Chrome 23+, Safari? - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Support: IE<9 - // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) - event.metaKey = !!event.metaKey; - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, - fixHooks: {}, - - keyHooks: { - props: "char charCode key keyCode".split(" "), - filter: function( event, original ) { + get: jQuery.isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, - // Add which for key events - if ( event.which == null ) { - event.which = original.charCode != null ? original.charCode : original.keyCode; + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); } - - return event; - } + } ); }, - mouseHooks: { - props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var body, eventDoc, doc, - button = original.button, - fromElement = original.fromElement; - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && original.clientX != null ) { - eventDoc = event.target.ownerDocument || document; - doc = eventDoc.documentElement; - body = eventDoc.body; - - event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); - event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && fromElement ) { - event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && button !== undefined ) { - event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); - } - - return event; - } + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); }, special: { load: { + // Prevent triggered image.load events from bubbling to window.load noBubble: true }, focus: { + // Fire native event if possible so blur/focus sequence is correct trigger: function() { if ( this !== safeActiveElement() && this.focus ) { - try { - this.focus(); - return false; - } catch ( e ) { - // Support: IE<9 - // If we error on focus to hidden element (#1486, #12518), - // let .trigger() run the handlers - } + this.focus(); + return false; } }, delegateType: "focusin" @@ -4834,9 +5239,10 @@ jQuery.event = { delegateType: "focusout" }, click: { + // For checkbox, fire native event so checked state will be right trigger: function() { - if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { this.click(); return false; } @@ -4858,56 +5264,21 @@ jQuery.event = { } } } - }, - - simulate: function( type, elem, event, bubble ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true, - originalEvent: {} - } - ); - if ( bubble ) { - jQuery.event.trigger( e, null, elem ); - } else { - jQuery.event.dispatch.call( elem, e ); - } - if ( e.isDefaultPrevented() ) { - event.preventDefault(); - } } }; -jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } - } : - function( elem, type, handle ) { - var name = "on" + type; - - if ( elem.detachEvent ) { - - // #8545, #7054, preventing memory leaks for custom events in IE6-8 - // detachEvent needed property on element, by name of that event, to properly expose it to GC - if ( typeof elem[ name ] === strundefined ) { - elem[ name ] = null; - } +jQuery.removeEvent = function( elem, type, handle ) { - elem.detachEvent( name, handle ); - } - }; + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword - if ( !(this instanceof jQuery.Event) ) { + if ( !( this instanceof jQuery.Event ) ) { return new jQuery.Event( src, props ); } @@ -4920,11 +5291,22 @@ jQuery.Event = function( src, props ) { // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && - // Support: IE < 9, Android < 4.0 + + // Support: Android <=2.3 only src.returnValue === false ? returnTrue : returnFalse; + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + // Event type } else { this.type = src; @@ -4943,52 +5325,38 @@ jQuery.Event = function( src, props ) { }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { + constructor: jQuery.Event, isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse, + isSimulated: false, preventDefault: function() { var e = this.originalEvent; this.isDefaultPrevented = returnTrue; - if ( !e ) { - return; - } - // If preventDefault exists, run it on the original event - if ( e.preventDefault ) { + if ( e && !this.isSimulated ) { e.preventDefault(); - - // Support: IE - // Otherwise set the returnValue property of the original event to false - } else { - e.returnValue = false; } }, stopPropagation: function() { var e = this.originalEvent; this.isPropagationStopped = returnTrue; - if ( !e ) { - return; - } - // If stopPropagation exists, run it on the original event - if ( e.stopPropagation ) { + + if ( e && !this.isSimulated ) { e.stopPropagation(); } - - // Support: IE - // Set the cancelBubble property of the original event to true - e.cancelBubble = true; }, stopImmediatePropagation: function() { var e = this.originalEvent; this.isImmediatePropagationStopped = returnTrue; - if ( e && e.stopImmediatePropagation ) { + if ( e && !this.isSimulated ) { e.stopImmediatePropagation(); } @@ -4996,8 +5364,64 @@ jQuery.Event.prototype = { } }; +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + return ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event.which; + } +}, jQuery.event.addProp ); + // Create mouseenter/leave events using mouseover/out and event-time checks -jQuery.each({ +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", @@ -5013,9 +5437,9 @@ jQuery.each({ related = event.relatedTarget, handleObj = event.handleObj; - // For mousenter/leave call the handler if related is outside the target. + // For mouseenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { event.type = handleObj.origType; ret = handleObj.handler.apply( this, arguments ); event.type = fix; @@ -5023,219 +5447,33 @@ jQuery.each({ return ret; } }; -}); - -// IE submit delegation -if ( !support.submitBubbles ) { - - jQuery.event.special.submit = { - setup: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Lazy-add a submit handler when a descendant form may potentially be submitted - jQuery.event.add( this, "click._submit keypress._submit", function( e ) { - // Node name check avoids a VML-related crash in IE (#9807) - var elem = e.target, - form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; - if ( form && !jQuery._data( form, "submitBubbles" ) ) { - jQuery.event.add( form, "submit._submit", function( event ) { - event._submit_bubble = true; - }); - jQuery._data( form, "submitBubbles", true ); - } - }); - // return undefined since we don't need an event listener - }, - - postDispatch: function( event ) { - // If form was submitted by the user, bubble the event up the tree - if ( event._submit_bubble ) { - delete event._submit_bubble; - if ( this.parentNode && !event.isTrigger ) { - jQuery.event.simulate( "submit", this.parentNode, event, true ); - } - } - }, - - teardown: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Remove delegated handlers; cleanData eventually reaps submit handlers attached above - jQuery.event.remove( this, "._submit" ); - } - }; -} - -// IE change delegation and checkbox/radio fix -if ( !support.changeBubbles ) { - - jQuery.event.special.change = { - - setup: function() { - - if ( rformElems.test( this.nodeName ) ) { - // IE doesn't fire change on a check/radio until blur; trigger it on click - // after a propertychange. Eat the blur-change in special.change.handle. - // This still fires onchange a second time for check/radio after blur. - if ( this.type === "checkbox" || this.type === "radio" ) { - jQuery.event.add( this, "propertychange._change", function( event ) { - if ( event.originalEvent.propertyName === "checked" ) { - this._just_changed = true; - } - }); - jQuery.event.add( this, "click._change", function( event ) { - if ( this._just_changed && !event.isTrigger ) { - this._just_changed = false; - } - // Allow triggered, simulated change events (#11500) - jQuery.event.simulate( "change", this, event, true ); - }); - } - return false; - } - // Delegated event; lazy-add a change handler on descendant inputs - jQuery.event.add( this, "beforeactivate._change", function( e ) { - var elem = e.target; - - if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { - jQuery.event.add( elem, "change._change", function( event ) { - if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { - jQuery.event.simulate( "change", this.parentNode, event, true ); - } - }); - jQuery._data( elem, "changeBubbles", true ); - } - }); - }, - - handle: function( event ) { - var elem = event.target; - - // Swallow native change events from checkbox/radio, we already triggered them above - if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { - return event.handleObj.handler.apply( this, arguments ); - } - }, - - teardown: function() { - jQuery.event.remove( this, "._change" ); - - return !rformElems.test( this.nodeName ); - } - }; -} - -// Create "bubbling" focus and blur events -if ( !support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = jQuery._data( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = jQuery._data( doc, fix ) - 1; +} ); - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - jQuery._removeData( doc, fix ); - } else { - jQuery._data( doc, fix, attaches ); - } - } - }; - }); -} - -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var type, origFn; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - this.on( type, selector, data, types[ type ], one ); - } - return this; - } - - if ( data == null && fn == null ) { - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return this; - } +jQuery.fn.extend( { - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return this.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - }); + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); }, one: function( types, selector, data, fn ) { - return this.on( types, selector, data, fn, 1 ); + return on( this, types, selector, data, fn, 1 ); }, off: function( types, selector, fn ) { var handleObj, type; if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event handleObj = types.handleObj; jQuery( types.delegateTarget ).off( - handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, handleObj.selector, handleObj.handler ); return this; } if ( typeof types === "object" ) { + // ( types-object [, selector] ) for ( type in types ) { this.off( type, selector, types[ type ] ); @@ -5243,6 +5481,7 @@ jQuery.fn.extend({ return this; } if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) fn = selector; selector = undefined; @@ -5250,263 +5489,238 @@ jQuery.fn.extend({ if ( fn === false ) { fn = returnFalse; } - return this.each(function() { + return this.each( function() { jQuery.event.remove( this, types, fn, selector ); - }); - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - triggerHandler: function( type, data ) { - var elem = this[0]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } + } ); } -}); +} ); -function createSafeFragment( document ) { - var list = nodeNames.split( "|" ), - safeFrag = document.createDocumentFragment(); +var - if ( safeFrag.createElement ) { - while ( list.length ) { - safeFrag.createElement( - list.pop() - ); - } - } - return safeFrag; -} + /* eslint-disable max-len */ -var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + - "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", - rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, - rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rtbody = /
    ", "
    " ], - tr: [ 2, "", "
    " ], - col: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - - // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, - // unless wrapped in a div with non-breaking characters in front of it. - _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
    ", "
    " ] - }, - safeFragment = createSafeFragment( document ), - fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; + /* eslint-enable */ -function getAll( context, tag ) { - var elems, elem, - i = 0, - found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) : - typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) : - undefined; + // Support: IE <=10 - 11, Edge 12 - 13 + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], found ) : - found; -} +function manipulationTarget( elem, content ) { + if ( jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { -// Used in buildFragment, fixes the defaultChecked property -function fixDefaultChecked( elem ) { - if ( rcheckableType.test( elem.type ) ) { - elem.defaultChecked = elem.checked; + return elem.getElementsByTagName( "tbody" )[ 0 ] || elem; } -} - -// Support: IE<8 -// Manipulating tables requires a tbody -function manipulationTarget( elem, content ) { - return jQuery.nodeName( elem, "table" ) && - jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? - elem.getElementsByTagName("tbody")[0] || - elem.appendChild( elem.ownerDocument.createElement("tbody") ) : - elem; + return elem; } // Replace/restore the type attribute of script elements for safe DOM manipulation function disableScript( elem ) { - elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; return elem; } function restoreScript( elem ) { var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { - elem.type = match[1]; + elem.type = match[ 1 ]; } else { - elem.removeAttribute("type"); + elem.removeAttribute( "type" ); } - return elem; -} -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var elem, - i = 0; - for ( ; (elem = elems[i]) != null; i++ ) { - jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); - } + return elem; } function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + if ( dest.nodeType !== 1 ) { return; } - var type, i, l, - oldData = jQuery._data( src ), - curData = jQuery._data( dest, oldData ), - events = oldData.events; + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; - if ( events ) { - delete curData.handle; - curData.events = {}; + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } } } } - // make the cloned public data object a copy from the original - if ( curData.data ) { - curData.data = jQuery.extend( {}, curData.data ); + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); } } -function fixCloneNodeIssues( src, dest ) { - var nodeName, e, data; +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); - // We do not need to do anything for non-Elements - if ( dest.nodeType !== 1 ) { - return; + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; } +} - nodeName = dest.nodeName.toLowerCase(); +function domManip( collection, args, callback, ignored ) { - // IE6-8 copies events bound via attachEvent when using cloneNode. - if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { - data = jQuery._data( dest ); + // Flatten any nested arrays + args = concat.apply( [], args ); - for ( e in data.events ) { - jQuery.removeEvent( dest, e, data.handle ); - } + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); - // Event data gets referenced instead of copied if the expando gets copied too - dest.removeAttribute( jQuery.expando ); + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); } - // IE blanks contents when cloning scripts, and tries to evaluate newly-set text - if ( nodeName === "script" && dest.text !== src.text ) { - disableScript( dest ).text = src.text; - restoreScript( dest ); + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; - // IE6-10 improperly clones children of object elements using classid. - // IE10 throws NoModificationAllowedError if parent is null, #12132. - } else if ( nodeName === "object" ) { - if ( dest.parentNode ) { - dest.outerHTML = src.outerHTML; + if ( fragment.childNodes.length === 1 ) { + fragment = first; } - // This path appears unavoidable for IE9. When cloning an object - // element in IE9, the outerHTML strategy above is not sufficient. - // If the src has innerHTML and the destination does not, - // copy the src.innerHTML into the dest.innerHTML. #10324 - if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { - dest.innerHTML = src.innerHTML; - } + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; - } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - // IE6-8 fails to persist the checked state of a cloned checkbox - // or radio button. Worse, IE6-7 fail to give the cloned element - // a checked appearance if the defaultChecked value isn't also set + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; - dest.defaultChecked = dest.checked = src.checked; + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); - // IE6-7 get confused and end up setting the value of a cloned - // checkbox/radio button to an empty string instead of "on" - if ( dest.value !== src.value ) { - dest.value = src.value; - } + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { - // IE6-8 fails to return the selected option to the default selected - // state when cloning options - } else if ( nodeName === "option" ) { - dest.defaultSelected = dest.selected = src.defaultSelected; + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } - // IE6-8 fails to set the defaultValue to the correct value when - // cloning other types of input fields - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + } + } + } + } + } } + + return collection; } -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var destElements, node, clone, i, srcElements, - inPage = jQuery.contains( elem.ownerDocument, elem ); +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; - if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { - clone = elem.cloneNode( true ); + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } - // IE<=8 does not properly clone detached, unknown element nodes - } else { - fragmentDiv.innerHTML = elem.outerHTML; - fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); - if ( (!support.noCloneEvent || !support.noCloneChecked) && - (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { - // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 destElements = getAll( clone ); srcElements = getAll( elem ); - // Fix all IE cloning issues - for ( i = 0; (node = srcElements[i]) != null; ++i ) { - // Ensure that the destination node is not null; Fixes #9587 - if ( destElements[i] ) { - fixCloneNodeIssues( node, destElements[i] ); - } + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); } } @@ -5516,8 +5730,8 @@ jQuery.extend({ srcElements = srcElements || getAll( elem ); destElements = destElements || getAll( clone ); - for ( i = 0; (node = srcElements[i]) != null; i++ ) { - cloneCopyEvent( node, destElements[i] ); + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); } } else { cloneCopyEvent( elem, clone ); @@ -5530,154 +5744,18 @@ jQuery.extend({ setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); } - destElements = srcElements = node = null; - // Return the cloned set return clone; }, - buildFragment: function( elems, context, scripts, selection ) { - var j, elem, contains, - tmp, tag, tbody, wrap, - l = elems.length, - - // Ensure a safe fragment - safe = createSafeFragment( context ), - - nodes = [], + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, i = 0; - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || safe.appendChild( context.createElement("div") ); - - // Deserialize a standard representation - tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - - tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; - - // Descend through wrappers to the right content - j = wrap[0]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Manually add leading whitespace removed by IE - if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { - nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); - } - - // Remove IE's autoinserted
    , *may* have spurious - elem = tag === "table" && !rtbody.test( elem ) ? - tmp.firstChild : - - // String was a bare or - wrap[1] === "
    " && !rtbody.test( elem ) ? - tmp : - 0; - - j = elem && elem.childNodes.length; - while ( j-- ) { - if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { - elem.removeChild( tbody ); - } - } - } - - jQuery.merge( nodes, tmp.childNodes ); - - // Fix #12392 for WebKit and IE > 9 - tmp.textContent = ""; - - // Fix #12392 for oldIE - while ( tmp.firstChild ) { - tmp.removeChild( tmp.firstChild ); - } - - // Remember the top-level container for proper cleanup - tmp = safe.lastChild; - } - } - } - - // Fix #11356: Clear elements from fragment - if ( tmp ) { - safe.removeChild( tmp ); - } - - // Reset defaultChecked for any radios and checkboxes - // about to be appended to the DOM in IE 6/7 (#8060) - if ( !support.appendChecked ) { - jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); - } - - i = 0; - while ( (elem = nodes[ i++ ]) ) { - - // #4087 - If origin and destination elements are the same, and this is - // that element, do not do anything - if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( safe.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( (elem = tmp[ j++ ]) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - tmp = null; - - return safe; - }, - - cleanData: function( elems, /* internal */ acceptData ) { - var elem, type, id, data, - i = 0, - internalKey = jQuery.expando, - cache = jQuery.cache, - deleteExpando = support.deleteExpando, - special = jQuery.event.special; - - for ( ; (elem = elems[i]) != null; i++ ) { - if ( acceptData || jQuery.acceptData( elem ) ) { - - id = elem[ internalKey ]; - data = id && cache[ id ]; - - if ( data ) { + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { if ( data.events ) { for ( type in data.events ) { if ( special[ type ] ) { @@ -5690,116 +5768,88 @@ jQuery.extend({ } } - // Remove cache only if it was not already removed by jQuery.event.remove - if ( cache[ id ] ) { - - delete cache[ id ]; - - // IE does not allow us to delete expando properties from nodes, - // nor does it have a removeAttribute function on Document nodes; - // we must handle all of these cases - if ( deleteExpando ) { - delete elem[ internalKey ]; - - } else if ( typeof elem.removeAttribute !== strundefined ) { - elem.removeAttribute( internalKey ); - - } else { - elem[ internalKey ] = null; - } + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { - deletedIds.push( id ); - } + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; } } } } -}); +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, -jQuery.fn.extend({ text: function( value ) { return access( this, function( value ) { return value === undefined ? jQuery.text( this ) : - this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); }, null, value, arguments.length ); }, append: function() { - return this.domManip( arguments, function( elem ) { + return domManip( this, arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.appendChild( elem ); } - }); + } ); }, prepend: function() { - return this.domManip( arguments, function( elem ) { + return domManip( this, arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.insertBefore( elem, target.firstChild ); } - }); + } ); }, before: function() { - return this.domManip( arguments, function( elem ) { + return domManip( this, arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this ); } - }); + } ); }, after: function() { - return this.domManip( arguments, function( elem ) { + return domManip( this, arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this.nextSibling ); } - }); - }, - - remove: function( selector, keepData /* Internal Use Only */ ) { - var elem, - elems = selector ? jQuery.filter( selector, this ) : this, - i = 0; - - for ( ; (elem = elems[i]) != null; i++ ) { - - if ( !keepData && elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem ) ); - } - - if ( elem.parentNode ) { - if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { - setGlobalEval( getAll( elem, "script" ) ); - } - elem.parentNode.removeChild( elem ); - } - } - - return this; + } ); }, empty: function() { var elem, i = 0; - for ( ; (elem = this[i]) != null; i++ ) { - // Remove element nodes and prevent memory leaks + for ( ; ( elem = this[ i ] ) != null; i++ ) { if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - } - // Remove any remaining nodes - while ( elem.firstChild ) { - elem.removeChild( elem.firstChild ); - } + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); - // If this is a select, ensure that it displays empty (#12336) - // Support: IE<9 - if ( elem.options && jQuery.nodeName( elem, "select" ) ) { - elem.options.length = 0; + // Remove any remaining nodes + elem.textContent = ""; } } @@ -5810,9 +5860,9 @@ jQuery.fn.extend({ dataAndEvents = dataAndEvents == null ? false : dataAndEvents; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - return this.map(function() { + return this.map( function() { return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); + } ); }, html: function( value ) { @@ -5821,24 +5871,21 @@ jQuery.fn.extend({ i = 0, l = this.length; - if ( value === undefined ) { - return elem.nodeType === 1 ? - elem.innerHTML.replace( rinlinejQuery, "" ) : - undefined; + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; } // See if we can take a shortcut and just use innerHTML if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - ( support.htmlSerialize || !rnoshimcache.test( value ) ) && - ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && - !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) { + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - value = value.replace( rxhtmlTag, "<$1>" ); + value = jQuery.htmlPrefilter( value ); try { - for (; i < l; i++ ) { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + // Remove element nodes and prevent memory leaks - elem = this[i] || {}; if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); elem.innerHTML = value; @@ -5848,7 +5895,7 @@ jQuery.fn.extend({ elem = 0; // If using innerHTML throws an exception, use the fallback method - } catch(e) {} + } catch ( e ) {} } if ( elem ) { @@ -5858,117 +5905,25 @@ jQuery.fn.extend({ }, replaceWith: function() { - var arg = arguments[ 0 ]; - - // Make the changes, replacing each context element with the new content - this.domManip( arguments, function( elem ) { - arg = this.parentNode; - - jQuery.cleanData( getAll( this ) ); - - if ( arg ) { - arg.replaceChild( elem, this ); - } - }); - - // Force removal if there was no new content (e.g., from empty arguments) - return arg && (arg.length || arg.nodeType) ? this : this.remove(); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, callback ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var first, node, hasScripts, - scripts, doc, fragment, - i = 0, - l = this.length, - set = this, - iNoClone = l - 1, - value = args[0], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[0] = value.call( this, index, self.html() ); - } - self.domManip( args, callback ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( this[i], node, i ); - } + var ignored = []; - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); - } - } - } + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); } - - // Fix #11809: Avoid leaking memory - fragment = first = null; } - } - return this; + // Force callback invocation + }, ignored ); } -}); +} ); -jQuery.each({ +jQuery.each( { appendTo: "append", prependTo: "prepend", insertBefore: "before", @@ -5977,570 +5932,270 @@ jQuery.each({ }, function( name, original ) { jQuery.fn[ name ] = function( selector ) { var elems, - i = 0, ret = [], insert = jQuery( selector ), - last = insert.length - 1; + last = insert.length - 1, + i = 0; for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone(true); - jQuery( insert[i] )[ original ]( elems ); + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); - // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit push.apply( ret, elems.get() ); } return this.pushStack( ret ); }; -}); +} ); +var rmargin = ( /^margin/ ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); -var iframe, - elemdisplay = {}; +var getStyles = function( elem ) { -/** - * Retrieve the actual display of a element - * @param {String} name nodeName of the element - * @param {Object} doc Document object - */ -// Called only from within defaultDisplay -function actualDisplay( name, doc ) { - var style, - elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; - // getDefaultComputedStyle might be reliably used only on attached element - display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? + if ( !view || !view.opener ) { + view = window; + } - // Use of this method is a temporary fix (more like optmization) until something better comes along, - // since it was removed from specification and supported only in FF - style.display : jQuery.css( elem[ 0 ], "display" ); + return view.getComputedStyle( elem ); + }; - // We don't have any data stored on the element, - // so use "detach" method as fast way to get rid of the element - elem.detach(); - return display; -} -/** - * Try to determine the default display value of an element - * @param {String} nodeName - */ -function defaultDisplay( nodeName ) { - var doc = document, - display = elemdisplay[ nodeName ]; +( function() { - if ( !display ) { - display = actualDisplay( nodeName, doc ); + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { - // If the simple way fails, read from inside an iframe - if ( display === "none" || !display ) { + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } - // Use the already-created iframe if possible - iframe = (iframe || jQuery( """" yield assert_count(expected_expr, result, 1) - ## figure.txt + # [figure.txt] result = (app.outdir / 'figure.html').text(encoding='utf-8') @@ -705,7 +781,7 @@ def test_additional_targets_should_not_be_translated(app, status, warning): def test_additional_targets_should_be_translated(app, status, warning): app.builder.build_all() - ## literalblock.txt + # [literalblock.txt] result = (app.outdir / 'literalblock.html').text(encoding='utf-8') # title should be translated @@ -721,17 +797,18 @@ def test_additional_targets_should_be_translated(app, status, warning): yield assert_count(expected_expr, result, 1) # C code block with lang should be translated and be *C* highlighted - expected_expr = """#include <STDIO.H>""" + expected_expr = ("""#include """ + """<STDIO.H>""") yield assert_count(expected_expr, result, 1) # doctest block should not be translated but be highlighted expected_expr = ( """>>> """ """importsys """ - """# SYS IMPORTING""") + """# SYS IMPORTING""") yield assert_count(expected_expr, result, 1) - ## raw.txt + # [raw.txt] result = (app.outdir / 'raw.html').text(encoding='utf-8') @@ -739,7 +816,7 @@ def test_additional_targets_should_be_translated(app, status, warning): expected_expr = """""" yield assert_count(expected_expr, result, 1) - ## figure.txt + # [figure.txt] result = (app.outdir / 'figure.html').text(encoding='utf-8') @@ -759,3 +836,91 @@ def test_references(app, status, warning): warnings = warning.getvalue().replace(os.sep, '/') warning_expr = u'refs.txt:\\d+: ERROR: Unknown target name:' yield assert_count(warning_expr, warnings, 0) + + +@with_app(buildername='dummy', testroot='image-glob', confoverrides={'language': 'xx'}) +def test_image_glob_intl(app, status, warning): + app.builder.build_all() + + # index.rst + doctree = pickle.loads((app.doctreedir / 'index.doctree').bytes()) + + assert_node(doctree[0][1], nodes.image, uri='rimg.xx.png', + candidates={'*': 'rimg.xx.png'}) + + assert isinstance(doctree[0][2], nodes.figure) + assert_node(doctree[0][2][0], nodes.image, uri='rimg.xx.png', + candidates={'*': 'rimg.xx.png'}) + + assert_node(doctree[0][3], nodes.image, uri='img.*', + candidates={'application/pdf': 'img.pdf', + 'image/gif': 'img.gif', + 'image/png': 'img.png'}) + + assert isinstance(doctree[0][4], nodes.figure) + assert_node(doctree[0][4][0], nodes.image, uri='img.*', + candidates={'application/pdf': 'img.pdf', + 'image/gif': 'img.gif', + 'image/png': 'img.png'}) + + # subdir/index.rst + doctree = pickle.loads((app.doctreedir / 'subdir/index.doctree').bytes()) + + assert_node(doctree[0][1], nodes.image, uri='subdir/rimg.xx.png', + candidates={'*': 'subdir/rimg.xx.png'}) + + assert_node(doctree[0][2], nodes.image, uri='subdir/svgimg.*', + candidates={'application/pdf': 'subdir/svgimg.pdf', + 'image/svg+xml': 'subdir/svgimg.xx.svg'}) + + assert isinstance(doctree[0][3], nodes.figure) + assert_node(doctree[0][3][0], nodes.image, uri='subdir/svgimg.*', + candidates={'application/pdf': 'subdir/svgimg.pdf', + 'image/svg+xml': 'subdir/svgimg.xx.svg'}) + + +@with_app(buildername='dummy', testroot='image-glob', + confoverrides={'language': 'xx', + 'figure_language_filename': u'{root}{ext}.{language}'}) +def test_image_glob_intl_using_figure_language_filename(app, status, warning): + app.builder.build_all() + + # index.rst + doctree = pickle.loads((app.doctreedir / 'index.doctree').bytes()) + + assert_node(doctree[0][1], nodes.image, uri='rimg.png.xx', + candidates={'*': 'rimg.png.xx'}) + + assert isinstance(doctree[0][2], nodes.figure) + assert_node(doctree[0][2][0], nodes.image, uri='rimg.png.xx', + candidates={'*': 'rimg.png.xx'}) + + assert_node(doctree[0][3], nodes.image, uri='img.*', + candidates={'application/pdf': 'img.pdf', + 'image/gif': 'img.gif', + 'image/png': 'img.png'}) + + assert isinstance(doctree[0][4], nodes.figure) + assert_node(doctree[0][4][0], nodes.image, uri='img.*', + candidates={'application/pdf': 'img.pdf', + 'image/gif': 'img.gif', + 'image/png': 'img.png'}) + + # subdir/index.rst + doctree = pickle.loads((app.doctreedir / 'subdir/index.doctree').bytes()) + + assert_node(doctree[0][1], nodes.image, uri='subdir/rimg.png', + candidates={'*': 'subdir/rimg.png'}) + + assert_node(doctree[0][2], nodes.image, uri='subdir/svgimg.*', + candidates={'application/pdf': 'subdir/svgimg.pdf', + 'image/svg+xml': 'subdir/svgimg.svg'}) + + assert isinstance(doctree[0][3], nodes.figure) + assert_node(doctree[0][3][0], nodes.image, uri='subdir/svgimg.*', + candidates={'application/pdf': 'subdir/svgimg.pdf', + 'image/svg+xml': 'subdir/svgimg.svg'}) + + +def getwarning(warnings): + return repr_as(warnings.getvalue().replace(os.sep, '/'), '') diff --git a/tests/test_markup.py b/tests/test_markup.py index a5804366ff4..ec203447fd0 100644 --- a/tests/test_markup.py +++ b/tests/test_markup.py @@ -5,40 +5,46 @@ Test various Sphinx-specific markup extensions. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ import re +import pickle from docutils import frontend, utils, nodes from docutils.parsers import rst +from sphinx import addnodes from sphinx.util import texescape +from sphinx.util.docutils import sphinx_domains from sphinx.writers.html import HTMLWriter, SmartyPantsHTMLTranslator from sphinx.writers.latex import LaTeXWriter, LaTeXTranslator -from util import TestApp +from util import TestApp, with_app, assert_node -app = settings = parser = None +app = settings = parser = domain_context = None def setup_module(): - global app, settings, parser + global app, settings, parser, domain_context texescape.init() # otherwise done by the latex builder app = TestApp() optparser = frontend.OptionParser( components=(rst.Parser, HTMLWriter, LaTeXWriter)) settings = optparser.get_default_values() settings.env = app.builder.env - settings.env.patch_lookup_functions() settings.env.temp_data['docname'] = 'dummy' parser = rst.Parser() + domain_context = sphinx_domains(settings.env) + domain_context.enable() def teardown_module(): app.cleanup() + domain_context.disable() + # since we're not resolving the markup afterwards, these nodes may remain class ForgivingTranslator: @@ -73,11 +79,12 @@ def verify_re(rst, html_expected, latex_expected): if latex_expected: latex_translator = ForgivingLaTeXTranslator(document, app.builder) - latex_translator.first_document = -1 # don't write \begin{document} + latex_translator.first_document = -1 # don't write \begin{document} document.walkabout(latex_translator) latex_translated = ''.join(latex_translator.body).strip() assert re.match(latex_expected, latex_translated), 'from ' + repr(rst) + def verify(rst, html_expected, latex_expected): if html_expected: html_expected = re.escape(html_expected) + '$' @@ -89,33 +96,33 @@ def verify(rst, html_expected, latex_expected): def test_inline(): # correct interpretation of code with whitespace _html = ('

    ' - 'code   sample

    ') - yield verify_re, '``code sample``', _html, r'\\code{code sample}' - yield verify_re, ':samp:`code sample`', _html, r'\\code{code sample}' + 'code   sample

    ') + yield verify_re, '``code sample``', _html, r'\\sphinxcode{code sample}' + yield verify_re, ':samp:`code sample`', _html, r'\\sphinxcode{code sample}' # interpolation of braces in samp and file roles (HTML only) yield (verify, ':samp:`a{b}c`', '

    a' 'b' 'c

    ', - '\\code{a\\emph{b}c}') + '\\sphinxcode{a\\sphinxstyleemphasis{b}c}') # interpolation of arrows in menuselection yield (verify, ':menuselection:`a --> b`', u'

    a \N{TRIANGULAR BULLET} b

    ', - '\\emph{a \\(\\rightarrow\\) b}') + '\\sphinxmenuselection{a \\(\\rightarrow\\) b}') # interpolation of ampersands in guilabel/menuselection yield (verify, ':guilabel:`&Foo -&&- &Bar`', u'

    Foo ' '-&- Bar

    ', - r'\emph{\underline{F}oo -\&- \underline{B}ar}') + r'\sphinxmenuselection{\sphinxaccelerator{F}oo -\&- \sphinxaccelerator{B}ar}') # non-interpolation of dashes in option role yield (verify_re, ':option:`--with-option`', '

    ' '--with-option

    $', - r'\\code{-{-}with-option}$') + r'\\sphinxcode{-{-}with-option}$') # verify smarty-pants quotes yield verify, '"John"', '

    “John”

    ', "``John''" @@ -123,12 +130,13 @@ def test_inline(): yield (verify, '``"John"``', '

    ' '"John"

    ', - '\\code{"John"}') + '\\sphinxcode{"John"}') # verify classes for inline roles yield (verify, ':manpage:`mp(1)`', '

    mp(1)

    ', - '\\emph{\\texttt{mp(1)}}') + '\\sphinxstyleliteralemphasis{mp(1)}') + def test_latex_escaping(): # correct escaping in normal mode @@ -136,9 +144,69 @@ def test_latex_escaping(): r'\(\Gamma\)\textbackslash{}\(\infty\)\$') # in verbatim code fragments yield (verify, u'::\n\n @Γ\\∞${}', None, - u'\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n' + u'\\begin{sphinxVerbatim}[commandchars=\\\\\\{\\}]\n' u'@\\(\\Gamma\\)\\PYGZbs{}\\(\\infty\\)\\PYGZdl{}\\PYGZob{}\\PYGZcb{}\n' - u'\\end{Verbatim}') + u'\\end{sphinxVerbatim}') # in URIs yield (verify_re, u'`test `_', None, r'\\href{http://example.com/~me/}{test}.*') + + +@with_app(buildername='dummy', testroot='prolog') +def test_rst_prolog(app, status, warning): + app.builder.build_all() + rst = pickle.loads((app.doctreedir / 'restructuredtext.doctree').bytes()) + md = pickle.loads((app.doctreedir / 'markdown.doctree').bytes()) + + # rst_prolog + assert_node(rst[0], nodes.paragraph) + assert_node(rst[0][0], nodes.emphasis) + assert_node(rst[0][0][0], nodes.Text) + assert rst[0][0][0] == 'Hello world' + + # rst_epilog + assert_node(rst[-1], nodes.section) + assert_node(rst[-1][-1], nodes.paragraph) + assert_node(rst[-1][-1][0], nodes.emphasis) + assert_node(rst[-1][-1][0][0], nodes.Text) + assert rst[-1][-1][0][0] == 'Good-bye world' + + # rst_prolog & rst_epilog on exlucding reST parser + assert not md.rawsource.startswith('*Hello world*.') + assert not md.rawsource.endswith('*Good-bye world*.\n') + + +@with_app(buildername='dummy', testroot='keep_warnings') +def test_keep_warnings_is_True(app, status, warning): + app.builder.build_all() + doctree = pickle.loads((app.doctreedir / 'index.doctree').bytes()) + assert_node(doctree[0], nodes.section) + assert len(doctree[0]) == 2 + assert_node(doctree[0][1], nodes.system_message) + + +@with_app(buildername='dummy', testroot='keep_warnings', + confoverrides={'keep_warnings': False}) +def test_keep_warnings_is_False(app, status, warning): + app.builder.build_all() + doctree = pickle.loads((app.doctreedir / 'index.doctree').bytes()) + assert_node(doctree[0], nodes.section) + assert len(doctree[0]) == 1 + + +@with_app(buildername='dummy', testroot='refonly_bullet_list') +def test_compact_refonly_bullet_list(app, status, warning): + app.builder.build_all() + doctree = pickle.loads((app.doctreedir / 'index.doctree').bytes()) + assert_node(doctree[0], nodes.section) + assert len(doctree[0]) == 5 + + assert doctree[0][1].astext() == 'List A:' + assert_node(doctree[0][2], nodes.bullet_list) + assert_node(doctree[0][2][0][0], addnodes.compact_paragraph) + assert doctree[0][2][0][0].astext() == 'genindex' + + assert doctree[0][3].astext() == 'List B:' + assert_node(doctree[0][4], nodes.bullet_list) + assert_node(doctree[0][4][0][0], nodes.paragraph) + assert doctree[0][4][0][0].astext() == 'Hello' diff --git a/tests/test_metadata.py b/tests/test_metadata.py index d61f1b522a9..14ab51ccd5b 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -5,7 +5,7 @@ Test our handling of metadata in files with bibliographic metadata. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ diff --git a/tests/test_quickstart.py b/tests/test_quickstart.py index 01370041777..7a77ce225d1 100644 --- a/tests/test_quickstart.py +++ b/tests/test_quickstart.py @@ -5,7 +5,7 @@ Test the sphinx.quickstart module. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -181,10 +181,11 @@ def test_quickstart_all_answers(tempdir): 'intersphinx': 'no', 'todo': 'y', 'coverage': 'no', - 'pngmath': 'N', + 'imgmath': 'N', 'mathjax': 'no', 'ifconfig': 'no', 'viewcode': 'no', + 'githubpages': 'no', 'Create Makefile': 'no', 'Create Windows command file': 'no', 'Do you want to use the epub builder': 'yes', @@ -297,3 +298,16 @@ def test_default_filename(tempdir): assert ns['latex_documents'][0][1] == 'sphinx.tex' assert ns['man_pages'][0][1] == 'sphinx' assert ns['texinfo_documents'][0][1] == 'sphinx' + + +@with_tempdir +def test_extensions(tempdir): + qs.main(['sphinx-quickstart', '-q', + '-p', 'project_name', '-a', 'author', + '--extensions', 'foo,bar,baz', tempdir]) + + conffile = tempdir / 'conf.py' + assert conffile.isfile() + ns = {} + execfile_(conffile, ns) + assert ns['extensions'] == ['foo', 'bar', 'baz'] diff --git a/tests/test_search.py b/tests/test_search.py index 391c2ee8325..fb7d47d6fbd 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -5,18 +5,23 @@ Test the search index builder. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ +import os from docutils import frontend, utils from docutils.parsers import rst from sphinx.search import IndexBuilder +from sphinx.util import jsdump + +from util import with_app settings = parser = None + def setup_module(): global settings, parser optparser = frontend.OptionParser(components=(rst.Parser,)) @@ -24,18 +29,99 @@ def setup_module(): parser = rst.Parser() +def jsload(path): + searchindex = path.text() + assert searchindex.startswith('Search.setIndex(') + + return jsdump.loads(searchindex[16:-2]) + + +def is_registered_term(index, keyword): + return index['terms'].get(keyword, []) != [] + + FILE_CONTENTS = '''\ .. test that comments are not indexed: boson test that non-comments are indexed: fermion ''' + def test_wordcollector(): doc = utils.new_document(b'test data', settings) doc['file'] = 'dummy' parser.parse(FILE_CONTENTS, doc) ix = IndexBuilder(None, 'en', {}, None) - ix.feed('filename', 'title', doc) + ix.feed('docname', 'filename', 'title', doc) assert 'boson' not in ix._mapping assert 'fermion' in ix._mapping + + +@with_app(testroot='ext-viewcode') +def test_objects_are_escaped(app, status, warning): + app.builder.build_all() + searchindex = (app.outdir / 'searchindex.js').text() + assert searchindex.startswith('Search.setIndex(') + + index = jsdump.loads(searchindex[16:-2]) + assert 'n::Array<T, d>' in index.get('objects').get('') # n::Array is escaped + + +@with_app(testroot='search') +def test_meta_keys_are_handled_for_language_en(app, status, warning): + app.builder.build_all() + searchindex = jsload(app.outdir / 'searchindex.js') + assert not is_registered_term(searchindex, 'thisnoteith') + assert is_registered_term(searchindex, 'thisonetoo') + assert is_registered_term(searchindex, 'findthiskei') + assert is_registered_term(searchindex, 'thistoo') + assert not is_registered_term(searchindex, 'onlygerman') + assert is_registered_term(searchindex, 'notgerman') + assert not is_registered_term(searchindex, 'onlytoogerman') + + +@with_app(testroot='search', confoverrides={'html_search_language': 'de'}) +def test_meta_keys_are_handled_for_language_de(app, status, warning): + app.builder.build_all() + searchindex = jsload(app.outdir / 'searchindex.js') + assert not is_registered_term(searchindex, 'thisnoteith') + assert is_registered_term(searchindex, 'thisonetoo') + assert not is_registered_term(searchindex, 'findthiskei') + assert not is_registered_term(searchindex, 'thistoo') + assert is_registered_term(searchindex, 'onlygerman') + assert not is_registered_term(searchindex, 'notgerman') + assert is_registered_term(searchindex, 'onlytoogerman') + + +@with_app(testroot='search') +def test_stemmer_does_not_remove_short_words(app, status, warning): + app.builder.build_all() + searchindex = (app.outdir / 'searchindex.js').text() + assert 'zfs' in searchindex + + +@with_app(testroot='search') +def test_stemmer(app, status, warning): + searchindex = jsload(app.outdir / 'searchindex.js') + print(searchindex) + assert is_registered_term(searchindex, 'findthisstemmedkei') + assert is_registered_term(searchindex, 'intern') + + +@with_app(testroot='search') +def test_term_in_heading_and_section(app, status, warning): + searchindex = (app.outdir / 'searchindex.js').text() + # if search term is in the title of one doc and in the text of another + # both documents should be a hit in the search index as a title, + # respectively text hit + assert 'textinhead:1' in searchindex + assert 'textinhead:0' in searchindex + + +@with_app(testroot='search') +def test_term_in_raw_directive(app, status, warning): + searchindex = jsload(app.outdir / 'searchindex.js') + assert not is_registered_term(searchindex, 'raw') + assert is_registered_term(searchindex, 'rawword') + assert not is_registered_term(searchindex, 'latex_keyword') diff --git a/tests/test_searchadapters.py b/tests/test_searchadapters.py index 7818ec80782..ee350182f77 100644 --- a/tests/test_searchadapters.py +++ b/tests/test_searchadapters.py @@ -5,7 +5,7 @@ Test the Web Support Package search adapters. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -22,7 +22,7 @@ def teardown_module(): def search_adapter_helper(adapter): - settings = {'srcdir': rootdir / 'root', + settings = {'srcdir': rootdir / 'roots' / 'test-searchadapters', 'builddir': tempdir / 'websupport', 'status': StringIO(), 'warning': StringIO(), @@ -41,7 +41,7 @@ def search_adapter_helper(adapter): # Make sure documents are properly updated by the search adapter. s.init_indexing(changed=['markup']) - s.add_document(u'markup', u'title', u'SomeLongRandomWord') + s.add_document(u'markup', u'filename', u'title', u'SomeLongRandomWord') s.finish_indexing() # Now a search for "Epigraph" should return zero results. results = s.query(u'Epigraph') diff --git a/tests/test_setup_command.py b/tests/test_setup_command.py index 7816fd183e3..c92f6220f4b 100644 --- a/tests/test_setup_command.py +++ b/tests/test_setup_command.py @@ -5,7 +5,7 @@ Test setup_command for distutils. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -108,3 +108,25 @@ def test_build_sphinx_return_nonzero_status(pkgroot, proc): print(out) print(err) assert proc.returncode != 0, 'expect non-zero status for setup.py' + + +@with_setup_command(root) +def test_build_sphinx_warning_return_zero_status(pkgroot, proc): + srcdir = (pkgroot / 'doc') + (srcdir / 'contents.txt').write_text( + 'See :ref:`unexisting-reference-label`') + out, err = proc.communicate() + print(out) + print(err) + assert proc.returncode == 0 + + +@with_setup_command(root, '--warning-is-error') +def test_build_sphinx_warning_is_error_return_nonzero_status(pkgroot, proc): + srcdir = (pkgroot / 'doc') + (srcdir / 'contents.txt').write_text( + 'See :ref:`unexisting-reference-label`') + out, err = proc.communicate() + print(out) + print(err) + assert proc.returncode != 0, 'expect non-zero status for setup.py' diff --git a/tests/test_templating.py b/tests/test_templating.py index 3cf331bbcca..3cfb69ba26f 100644 --- a/tests/test_templating.py +++ b/tests/test_templating.py @@ -5,7 +5,7 @@ Test templating. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ diff --git a/tests/test_theming.py b/tests/test_theming.py index 45229c84248..b62cbcd72be 100644 --- a/tests/test_theming.py +++ b/tests/test_theming.py @@ -5,16 +5,18 @@ Test the Theme class. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ import os import zipfile +import mock + from sphinx.theming import Theme, ThemeError -from util import with_app, raises, TestApp +from util import with_app, raises, path @with_app(confoverrides={'html_theme': 'ziptheme', @@ -26,7 +28,7 @@ def test_theme_api(app, status, warning): assert set(Theme.themes.keys()) == \ set(['basic', 'default', 'scrolls', 'agogo', 'sphinxdoc', 'haiku', 'traditional', 'testtheme', 'ziptheme', 'epub', 'nature', - 'pyramid', 'bizstyle', 'classic']) + 'pyramid', 'bizstyle', 'classic', 'nonav']) assert Theme.themes['testtheme'][1] is None assert isinstance(Theme.themes['ziptheme'][1], zipfile.ZipFile) @@ -66,7 +68,7 @@ def test_js_source(app, status, warning): app.builder.build(['contents']) - v = '1.11.1' + v = '3.1.0' msg = 'jquery.js version does not match to {v}'.format(v=v) jquery_min = (app.outdir / '_static' / 'jquery.js').text() assert 'jQuery v{v}'.format(v=v) in jquery_min, msg @@ -79,3 +81,19 @@ def test_js_source(app, status, warning): assert 'Underscore.js {v}'.format(v=v) in underscore_min, msg underscore_src = (app.outdir / '_static' / 'underscore-{v}.js'.format(v=v)).text() assert 'Underscore.js {v}'.format(v=v) in underscore_src, msg + + +def test_double_inheriting_theme(): + from sphinx.theming import load_theme_plugins # load original before patching + + def load_themes(): + roots = path(__file__).abspath().parent / 'roots' + yield roots / 'test-double-inheriting-theme' / 'base_themes_dir' + for t in load_theme_plugins(): + yield t + + @mock.patch('sphinx.theming.load_theme_plugins', side_effect=load_themes) + @with_app(testroot='double-inheriting-theme') + def test_double_inheriting_theme_(app, status, warning, m_): + pass + yield test_double_inheriting_theme_ diff --git a/tests/test_toctree.py b/tests/test_toctree.py new file mode 100644 index 00000000000..64cb8cfd68e --- /dev/null +++ b/tests/test_toctree.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +""" + test_toctree + ~~~~~~~~~~~~ + + Test the HTML builder and check output against XPath. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from util import with_app + + +@with_app(testroot='toctree-glob') +def test_relations(app, status, warning): + app.builder.build_all() + assert app.builder.relations['index'] == [None, None, 'foo'] + assert app.builder.relations['foo'] == ['index', 'index', 'bar/index'] + assert app.builder.relations['bar/index'] == ['index', 'foo', 'bar/bar_1'] + assert app.builder.relations['bar/bar_1'] == ['bar/index', 'bar/index', 'bar/bar_2'] + assert app.builder.relations['bar/bar_2'] == ['bar/index', 'bar/bar_1', 'bar/bar_3'] + assert app.builder.relations['bar/bar_3'] == ['bar/index', 'bar/bar_2', 'bar/bar_4/index'] + assert app.builder.relations['bar/bar_4/index'] == ['bar/index', 'bar/bar_3', 'baz'] + assert app.builder.relations['baz'] == ['index', 'bar/bar_4/index', 'qux/index'] + assert app.builder.relations['qux/index'] == ['index', 'baz', 'qux/qux_1'] + assert app.builder.relations['qux/qux_1'] == ['qux/index', 'qux/index', 'qux/qux_2'] + assert app.builder.relations['qux/qux_2'] == ['qux/index', 'qux/qux_1', None] + assert 'quux' not in app.builder.relations diff --git a/tests/test_util.py b/tests/test_util.py new file mode 100644 index 00000000000..d97329668dd --- /dev/null +++ b/tests/test_util.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +""" + test_util + ~~~~~~~~~~~~~~~ + + Tests util functions. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" +from sphinx.util import encode_uri, split_docinfo + + +def test_encode_uri(): + expected = (u'https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_' + u'%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_' + u'%D0%B1%D0%B0%D0%B7%D0%B0%D0%BC%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85') + uri = (u'https://ru.wikipedia.org/wiki' + u'/Система_управления_базами_данных') + assert expected, encode_uri(uri) + + expected = (u'https://github.com/search?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+is%3A' + u'sprint-friendly+user%3Ajupyter&type=Issues&ref=searchresults') + uri = (u'https://github.com/search?utf8=✓&q=is%3Aissue+is%3Aopen+is%3A' + u'sprint-friendly+user%3Ajupyter&type=Issues&ref=searchresults') + assert expected, encode_uri(uri) + + +def test_splitdocinfo(): + source = "Hello world.\n" + docinfo, content = split_docinfo(source) + assert docinfo == '' + assert content == 'Hello world.\n' + + source = ":orphan:\n\nHello world.\n" + docinfo, content = split_docinfo(source) + assert docinfo == ':orphan:\n' + assert content == '\nHello world.\n' + + source = ":author: Georg Brandl\n:title: Manual of Sphinx\n\nHello world.\n" + docinfo, content = split_docinfo(source) + assert docinfo == ':author: Georg Brandl\n:title: Manual of Sphinx\n' + assert content == '\nHello world.\n' + + source = ":multiline: one\n\ttwo\n\tthree\n\nHello world.\n" + docinfo, content = split_docinfo(source) + assert docinfo == ":multiline: one\n\ttwo\n\tthree\n" + assert content == '\nHello world.\n' diff --git a/tests/test_util_fileutil.py b/tests/test_util_fileutil.py new file mode 100644 index 00000000000..5810dd2a856 --- /dev/null +++ b/tests/test_util_fileutil.py @@ -0,0 +1,114 @@ +# -*- coding: utf-8 -*- +""" + test_util_fileutil + ~~~~~~~~~~~~~~~~~~ + + Tests sphinx.util.fileutil functions. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" +from sphinx.util.fileutil import copy_asset, copy_asset_file +from sphinx.jinja2glue import BuiltinTemplateLoader + +import mock +from util import with_tempdir + + +class DummyTemplateLoader(BuiltinTemplateLoader): + def __init__(self): + BuiltinTemplateLoader.__init__(self) + builder = mock.Mock() + builder.config.templates_path = [] + builder.app.translater = None + self.init(builder) + + +@with_tempdir +def test_copy_asset_file(tmpdir): + renderer = DummyTemplateLoader() + + # copy normal file + src = (tmpdir / 'asset.txt') + src.write_text('# test data') + dest = (tmpdir / 'output.txt') + + copy_asset_file(src, dest) + assert dest.exists() + assert src.text() == dest.text() + + # copy template file + src = (tmpdir / 'asset.txt_t') + src.write_text('# {{var1}} data') + dest = (tmpdir / 'output.txt_t') + + copy_asset_file(src, dest, {'var1': 'template'}, renderer) + assert not dest.exists() + assert (tmpdir / 'output.txt').exists() + assert (tmpdir / 'output.txt').text() == '# template data' + + # copy template file to subdir + src = (tmpdir / 'asset.txt_t') + src.write_text('# {{var1}} data') + subdir1 = (tmpdir / 'subdir') + subdir1.makedirs() + + copy_asset_file(src, subdir1, {'var1': 'template'}, renderer) + assert (subdir1 / 'asset.txt').exists() + assert (subdir1 / 'asset.txt').text() == '# template data' + + # copy template file without context + src = (tmpdir / 'asset.txt_t') + subdir2 = (tmpdir / 'subdir2') + subdir2.makedirs() + + copy_asset_file(src, subdir2) + assert not (subdir2 / 'asset.txt').exists() + assert (subdir2 / 'asset.txt_t').exists() + assert (subdir2 / 'asset.txt_t').text() == '# {{var1}} data' + + +@with_tempdir +def test_copy_asset(tmpdir): + renderer = DummyTemplateLoader() + + # prepare source files + source = (tmpdir / 'source') + source.makedirs() + (source / 'index.rst').write_text('index.rst') + (source / 'foo.rst_t').write_text('{{var1}}.rst') + (source / '_static').makedirs() + (source / '_static' / 'basic.css').write_text('basic.css') + (source / '_templates').makedirs() + (source / '_templates' / 'layout.html').write_text('layout.html') + (source / '_templates' / 'sidebar.html_t').write_text('sidebar: {{var2}}') + + # copy a single file + assert not (tmpdir / 'test1').exists() + copy_asset(source / 'index.rst', tmpdir / 'test1') + assert (tmpdir / 'test1').exists() + assert (tmpdir / 'test1/index.rst').exists() + + # copy directories + destdir = tmpdir / 'test2' + copy_asset(source, destdir, context=dict(var1='bar', var2='baz'), renderer=renderer) + assert (destdir / 'index.rst').exists() + assert (destdir / 'foo.rst').exists() + assert (destdir / 'foo.rst').text() == 'bar.rst' + assert (destdir / '_static' / 'basic.css').exists() + assert (destdir / '_templates' / 'layout.html').exists() + assert (destdir / '_templates' / 'sidebar.html').exists() + assert (destdir / '_templates' / 'sidebar.html').text() == 'sidebar: baz' + + # copy with exclusion + def excluded(path): + return ('sidebar.html' in path or 'basic.css' in path) + + destdir = tmpdir / 'test3' + copy_asset(source, destdir, excluded, + context=dict(var1='bar', var2='baz'), renderer=renderer) + assert (destdir / 'index.rst').exists() + assert (destdir / 'foo.rst').exists() + assert not (destdir / '_static' / 'basic.css').exists() + assert (destdir / '_templates' / 'layout.html').exists() + assert not (destdir / '_templates' / 'sidebar.html').exists() diff --git a/tests/test_util_i18n.py b/tests/test_util_i18n.py index 47ef8ecce4c..849796a8fac 100644 --- a/tests/test_util_i18n.py +++ b/tests/test_util_i18n.py @@ -5,18 +5,20 @@ Test i18n util. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import print_function import os +import datetime from os import path from babel.messages.mofile import read_mo from sphinx.util import i18n +from sphinx.errors import SphinxError -from util import with_tempdir +from util import TestApp, with_tempdir, raises def test_catalog_info_for_file_and_path(): @@ -45,7 +47,7 @@ def test_catalog_outdated(dir): mo_file.write_text('#') assert not cat.is_outdated() # if mo is exist and newer than po - os.utime(mo_file, (os.stat(mo_file).st_mtime - 10,) * 2) # to be outdate + os.utime(mo_file, (os.stat(mo_file).st_mtime - 10,) * 2) # to be outdate assert cat.is_outdated() # if mo is exist and older than po @@ -55,7 +57,8 @@ def test_catalog_write_mo(dir): cat = i18n.CatalogInfo(dir, 'test', 'utf-8') cat.write_mo('en') assert path.exists(cat.mo_path) - assert read_mo(open(cat.mo_path, 'rb')) is not None + with open(cat.mo_path, 'rb') as f: + assert read_mo(f) is not None @with_tempdir @@ -161,3 +164,109 @@ def test_get_catalogs_with_compact(dir): catalogs = i18n.find_catalog_source_files([dir / 'loc1'], 'xx', gettext_compact=True) domains = set(c.domain for c in catalogs) assert domains == set(['test1', 'test2', 'sub']) + + +def test_format_date(): + date = datetime.date(2016, 2, 7) + + # default format + format = None + assert i18n.format_date(format, date=date) == 'Feb 7, 2016' + assert i18n.format_date(format, date=date, language='') == 'Feb 7, 2016' + assert i18n.format_date(format, date=date, language='unknown') == 'Feb 7, 2016' + assert i18n.format_date(format, date=date, language='en') == 'Feb 7, 2016' + assert i18n.format_date(format, date=date, language='ja') == '2016/02/07' + assert i18n.format_date(format, date=date, language='de') == '07.02.2016' + + # strftime format + format = '%B %d, %Y' + assert i18n.format_date(format, date=date) == 'February 07, 2016' + assert i18n.format_date(format, date=date, language='') == 'February 07, 2016' + assert i18n.format_date(format, date=date, language='unknown') == 'February 07, 2016' + assert i18n.format_date(format, date=date, language='en') == 'February 07, 2016' + assert i18n.format_date(format, date=date, language='ja') == u'2月 07, 2016' + assert i18n.format_date(format, date=date, language='de') == 'Februar 07, 2016' + + # LDML format + format = 'MMM dd, YYYY' + assert i18n.format_date(format, date=date) == 'Feb 07, 2016' + assert i18n.format_date(format, date=date, language='') == 'Feb 07, 2016' + assert i18n.format_date(format, date=date, language='unknown') == 'Feb 07, 2016' + assert i18n.format_date(format, date=date, language='en') == 'Feb 07, 2016' + assert i18n.format_date(format, date=date, language='ja') == u'2月 07, 2016' + assert i18n.format_date(format, date=date, language='de') == 'Feb. 07, 2016' + + # raw string + format = 'Mon Mar 28 12:37:08 2016, commit 4367aef' + assert i18n.format_date(format, date=date) == format + + format = '%B %d, %Y, %H:%M:%S %I %p' + datet = datetime.datetime(2016, 2, 7, 5, 11, 17, 0) + assert i18n.format_date(format, date=datet) == 'February 07, 2016, 05:11:17 05 AM' + + format = '%x' + assert i18n.format_date(format, date=datet) == 'Feb 7, 2016' + format = '%X' + assert i18n.format_date(format, date=datet) == '5:11:17 AM' + assert i18n.format_date(format, date=date) == 'Feb 7, 2016' + format = '%c' + assert i18n.format_date(format, date=datet) == 'Feb 7, 2016, 5:11:17 AM' + assert i18n.format_date(format, date=date) == 'Feb 7, 2016' + + +def test_get_filename_for_language(): + app = TestApp() + + # language is None + app.env.config.language = None + assert app.env.config.language is None + assert i18n.get_image_filename_for_language('foo.png', app.env) == 'foo.png' + assert i18n.get_image_filename_for_language('foo.bar.png', app.env) == 'foo.bar.png' + assert i18n.get_image_filename_for_language('subdir/foo.png', app.env) == 'subdir/foo.png' + assert i18n.get_image_filename_for_language('../foo.png', app.env) == '../foo.png' + assert i18n.get_image_filename_for_language('foo', app.env) == 'foo' + + # language is en + app.env.config.language = 'en' + assert i18n.get_image_filename_for_language('foo.png', app.env) == 'foo.en.png' + assert i18n.get_image_filename_for_language('foo.bar.png', app.env) == 'foo.bar.en.png' + assert i18n.get_image_filename_for_language('dir/foo.png', app.env) == 'dir/foo.en.png' + assert i18n.get_image_filename_for_language('../foo.png', app.env) == '../foo.en.png' + assert i18n.get_image_filename_for_language('foo', app.env) == 'foo.en' + + # modify figure_language_filename and language is None + app.env.config.language = None + app.env.config.figure_language_filename = 'images/{language}/{root}{ext}' + assert i18n.get_image_filename_for_language('foo.png', app.env) == 'foo.png' + assert i18n.get_image_filename_for_language('foo.bar.png', app.env) == 'foo.bar.png' + assert i18n.get_image_filename_for_language('subdir/foo.png', app.env) == 'subdir/foo.png' + assert i18n.get_image_filename_for_language('../foo.png', app.env) == '../foo.png' + assert i18n.get_image_filename_for_language('foo', app.env) == 'foo' + + # modify figure_language_filename and language is 'en' + app.env.config.language = 'en' + app.env.config.figure_language_filename = 'images/{language}/{root}{ext}' + assert i18n.get_image_filename_for_language('foo.png', app.env) == 'images/en/foo.png' + assert i18n.get_image_filename_for_language( + 'foo.bar.png', app.env) == 'images/en/foo.bar.png' + assert i18n.get_image_filename_for_language( + 'subdir/foo.png', app.env) == 'images/en/subdir/foo.png' + assert i18n.get_image_filename_for_language( + '../foo.png', app.env) == 'images/en/../foo.png' + assert i18n.get_image_filename_for_language('foo', app.env) == 'images/en/foo' + + # new path and basename tokens + app.env.config.language = 'en' + app.env.config.figure_language_filename = '{path}{language}/{basename}{ext}' + assert i18n.get_image_filename_for_language('foo.png', app.env) == 'en/foo.png' + assert i18n.get_image_filename_for_language( + 'foo.bar.png', app.env) == 'en/foo.bar.png' + assert i18n.get_image_filename_for_language( + 'subdir/foo.png', app.env) == 'subdir/en/foo.png' + assert i18n.get_image_filename_for_language( + '../foo.png', app.env) == '../en/foo.png' + assert i18n.get_image_filename_for_language('foo', app.env) == 'en/foo' + + # invalid figure_language_filename + app.env.config.figure_language_filename = '{root}.{invalid}{ext}' + raises(SphinxError, i18n.get_image_filename_for_language, 'foo.png', app.env) diff --git a/tests/test_util_inspect.py b/tests/test_util_inspect.py new file mode 100644 index 00000000000..2dcbc37d55d --- /dev/null +++ b/tests/test_util_inspect.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +""" + test_util_inspect + ~~~~~~~~~~~~~~~ + + Tests util.inspect functions. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" +from unittest import TestCase + +from sphinx.util import inspect + + +class TestSafeGetAttr(TestCase): + def test_safe_getattr_with_default(self): + class Foo(object): + def __getattr__(self, item): + raise Exception + + obj = Foo() + + result = inspect.safe_getattr(obj, 'bar', 'baz') + + assert result == 'baz' + + def test_safe_getattr_with_exception(self): + class Foo(object): + def __getattr__(self, item): + raise Exception + + obj = Foo() + + try: + inspect.safe_getattr(obj, 'bar') + except AttributeError as exc: + self.assertEqual(exc.args[0], 'bar') + else: + self.fail('AttributeError not raised') + + def test_safe_getattr_with_property_exception(self): + class Foo(object): + @property + def bar(self): + raise Exception + + obj = Foo() + + try: + inspect.safe_getattr(obj, 'bar') + except AttributeError as exc: + self.assertEqual(exc.args[0], 'bar') + else: + self.fail('AttributeError not raised') + + def test_safe_getattr_with___dict___override(self): + class Foo(object): + @property + def __dict__(self): + raise Exception + + obj = Foo() + + try: + inspect.safe_getattr(obj, 'bar') + except AttributeError as exc: + self.assertEqual(exc.args[0], 'bar') + else: + self.fail('AttributeError not raised') diff --git a/tests/test_util_jsdump.py b/tests/test_util_jsdump.py new file mode 100644 index 00000000000..8f98c79acc3 --- /dev/null +++ b/tests/test_util_jsdump.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from sphinx.util.jsdump import dumps, loads + + +def test_jsdump(): + data = {'1a': 1} + assert dumps(data) == '{"1a":1}' + assert data == loads(dumps(data)) + + data = {'a1': 1} + assert dumps(data) == '{a1:1}' + assert data == loads(dumps(data)) + + data = {u'a\xe8': 1} + assert dumps(data) == '{"a\\u00e8":1}' + assert data == loads(dumps(data)) + + data = {'_foo': 1} + assert dumps(data) == '{_foo:1}' + assert data == loads(dumps(data)) diff --git a/tests/test_util_logging.py b/tests/test_util_logging.py new file mode 100644 index 00000000000..d88d3cc6de7 --- /dev/null +++ b/tests/test_util_logging.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +""" + test_util_logging + ~~~~~~~~~~~~~~~~~ + + Test logging util. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" +from __future__ import print_function + +from sphinx.util.logging import is_suppressed_warning + + +def test_is_suppressed_warning(): + suppress_warnings = ["ref", "files.*", "rest.duplicated_labels"] + + assert is_suppressed_warning(None, None, suppress_warnings) is False + assert is_suppressed_warning("ref", None, suppress_warnings) is True + assert is_suppressed_warning("ref", "numref", suppress_warnings) is True + assert is_suppressed_warning("ref", "option", suppress_warnings) is True + assert is_suppressed_warning("files", "image", suppress_warnings) is True + assert is_suppressed_warning("files", "stylesheet", suppress_warnings) is True + assert is_suppressed_warning("rest", "syntax", suppress_warnings) is False + assert is_suppressed_warning("rest", "duplicated_labels", suppress_warnings) is True diff --git a/tests/test_util_matching.py b/tests/test_util_matching.py new file mode 100644 index 00000000000..9e99a532230 --- /dev/null +++ b/tests/test_util_matching.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +""" + test_util_matching + ~~~~~~~~~~~~~~~~~~ + + Tests sphinx.util.matching functions. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" +from sphinx.util.matching import compile_matchers, Matcher + + +def test_compile_matchers(): + # exact matching + pat = compile_matchers(['hello.py']).pop() + assert pat('hello.py') + assert not pat('hello-py') + assert not pat('subdir/hello.py') + + # wild card (*) + pat = compile_matchers(['hello.*']).pop() + assert pat('hello.py') + assert pat('hello.rst') + + pat = compile_matchers(['*.py']).pop() + assert pat('hello.py') + assert pat('world.py') + assert not pat('subdir/hello.py') + + # wild card (**) + pat = compile_matchers(['hello.**']).pop() + assert pat('hello.py') + assert pat('hello.rst') + assert pat('hello.py/world.py') + + pat = compile_matchers(['**.py']).pop() + assert pat('hello.py') + assert pat('world.py') + assert pat('subdir/hello.py') + + pat = compile_matchers(['**/hello.py']).pop() + assert not pat('hello.py') + assert pat('subdir/hello.py') + assert pat('subdir/subdir/hello.py') + + # wild card (?) + pat = compile_matchers(['hello.?']).pop() + assert pat('hello.c') + assert not pat('hello.py') + + # pattern ([...]) + pat = compile_matchers(['hello[12\\].py']).pop() + assert pat('hello1.py') + assert pat('hello2.py') + assert pat('hello\\.py') + assert not pat('hello3.py') + + pat = compile_matchers(['hello[^12].py']).pop() # "^" is not negative identifier + assert pat('hello1.py') + assert pat('hello2.py') + assert pat('hello^.py') + assert not pat('hello3.py') + + # negative pattern ([!...]) + pat = compile_matchers(['hello[!12].py']).pop() + assert not pat('hello1.py') + assert not pat('hello2.py') + assert not pat('hello/.py') # negative pattern does not match to "/" + assert pat('hello3.py') + + # non patterns + pat = compile_matchers(['hello[.py']).pop() + assert pat('hello[.py') + assert not pat('hello.py') + + pat = compile_matchers(['hello[].py']).pop() + assert pat('hello[].py') + assert not pat('hello.py') + + pat = compile_matchers(['hello[!].py']).pop() + assert pat('hello[!].py') + assert not pat('hello.py') + + +def test_Matcher(): + matcher = Matcher(['hello.py', '**/world.py']) + assert matcher('hello.py') + assert not matcher('subdir/hello.py') + assert matcher('world.py') + assert matcher('subdir/world.py') diff --git a/tests/test_util_nodes.py b/tests/test_util_nodes.py index 33b8f8913fd..e7a4b7e9083 100644 --- a/tests/test_util_nodes.py +++ b/tests/test_util_nodes.py @@ -5,7 +5,7 @@ Tests uti.nodes functions. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from textwrap import dedent @@ -87,7 +87,6 @@ def test_extract_messages(): nodes.rubric, 1, ) - text = dedent( """ | spam @@ -100,7 +99,6 @@ def test_extract_messages(): nodes.line, 2, ) - text = dedent( """ section @@ -118,7 +116,6 @@ def test_extract_messages(): nodes.line, 2, ) - text = dedent( """ * | **Title 1** @@ -137,8 +134,7 @@ def test_extract_messages_without_rawsource(): Check node.rawsource is fall-backed by using node.astext() value. `extract_message` which is used from Sphinx i18n feature drop ``not node.rawsource`` - nodes. - So, all nodes which want to translate must have ``rawsource`` value. + nodes. So, all nodes which want to translate must have ``rawsource`` value. However, sometimes node.rawsource is not set. For example: recommonmark-0.2.0 doesn't set rawsource to `paragraph` node. diff --git a/tests/test_util_rst.py b/tests/test_util_rst.py new file mode 100644 index 00000000000..72cd87fe8d4 --- /dev/null +++ b/tests/test_util_rst.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +""" + test_util_rst + ~~~~~~~~~~~~~~~ + + Tests sphinx.util.rst functions. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" +from sphinx.util.rst import escape + + +def test_escape(): + assert escape(':ref:`id`') == '\:ref\:\`id\`' + assert escape('footnote [#]_') == 'footnote \[\#\]\_' diff --git a/tests/test_versioning.py b/tests/test_versioning.py index 140082e1545..f5b5057d7d6 100644 --- a/tests/test_versioning.py +++ b/tests/test_versioning.py @@ -5,7 +5,7 @@ Test the versioning implementation. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ diff --git a/tests/test_websupport.py b/tests/test_websupport.py index 6ea4588dd34..bb41ae1ab07 100644 --- a/tests/test_websupport.py +++ b/tests/test_websupport.py @@ -5,7 +5,7 @@ Test the Web Support Package - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ diff --git a/tests/test_writer_latex.py b/tests/test_writer_latex.py new file mode 100644 index 00000000000..72eb7ed2adf --- /dev/null +++ b/tests/test_writer_latex.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +""" + test_writer_latex + ~~~~~~~~~~~~~~~~ + + Test the LaTeX writer + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" +from __future__ import print_function +from sphinx.writers.latex import rstdim_to_latexdim + +from util import raises + + +def test_rstdim_to_latexdim(): + # Length units docutils supported + # http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#length-units + assert rstdim_to_latexdim('160em') == '160em' + assert rstdim_to_latexdim('160px') == '160\\sphinxpxdimen' + assert rstdim_to_latexdim('160in') == '160in' + assert rstdim_to_latexdim('160cm') == '160cm' + assert rstdim_to_latexdim('160mm') == '160mm' + assert rstdim_to_latexdim('160pt') == '160bp' + assert rstdim_to_latexdim('160pc') == '160pc' + assert rstdim_to_latexdim('30%') == '0.300\\linewidth' + assert rstdim_to_latexdim('160') == '160\\sphinxpxdimen' + + # flaot values + assert rstdim_to_latexdim('160.0em') == '160.0em' + assert rstdim_to_latexdim('.5em') == '.5em' + + # unknown values (it might be generated by 3rd party extension) + raises(ValueError, rstdim_to_latexdim, 'unknown') + assert rstdim_to_latexdim('160.0unknown') == '160.0unknown' diff --git a/tests/typing_test_data.py b/tests/typing_test_data.py index 74a906ad182..84bb3377be2 100644 --- a/tests/typing_test_data.py +++ b/tests/typing_test_data.py @@ -35,14 +35,31 @@ def f5(x: int, *, y: str, z: str) -> None: pass -def f6(x: int = None, y: dict = {}) -> None: +def f6(x: int, *args, y: str, z: str) -> None: pass -def f7(x: Callable[[int, str], int]) -> None: +def f7(x: int = None, y: dict = {}) -> None: + pass + + +def f8(x: Callable[[int, str], int]) -> None: # See https://github.com/ambv/typehinting/issues/149 for Callable[..., int] pass -def f8(x: Tuple[int, str], y: Tuple[int, ...]) -> None: +def f9(x: Callable) -> None: + pass + + +def f10(x: Tuple[int, str], y: Tuple[int, ...]) -> None: + pass + + +class CustomAnnotation: + def __repr__(self): + return 'CustomAnnotation' + + +def f11(x: CustomAnnotation(), y: 123) -> None: pass diff --git a/tests/util.py b/tests/util.py index df952d4575e..120492d47ed 100644 --- a/tests/util.py +++ b/tests/util.py @@ -3,7 +3,7 @@ Sphinx test suite utilities ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -13,7 +13,7 @@ import tempfile from functools import wraps -from six import StringIO +from six import StringIO, string_types from nose import tools, SkipTest @@ -26,13 +26,7 @@ from sphinx.ext.autodoc import AutoDirective from sphinx.pycode import ModuleAnalyzer -from path import path - -try: - # Python >=3.3 - from unittest import mock -except ImportError: - import mock +from path import path, repr_as # NOQA __all__ = [ @@ -41,7 +35,6 @@ 'ListOutput', 'TestApp', 'with_app', 'gen_with_app', 'path', 'with_tempdir', 'sprint', 'remove_unicode_literals', - 'mock', ] @@ -94,14 +87,45 @@ def assert_startswith(thing, prefix): assert False, '%r does not start with %r' % (thing, prefix) -def assert_in(x, thing): - if x not in thing: - assert False, '%r is not in %r' % (x, thing) +def assert_node(node, cls=None, xpath="", **kwargs): + if cls: + if isinstance(cls, list): + assert_node(node, cls[0], xpath=xpath, **kwargs) + if cls[1:]: + if isinstance(cls[1], tuple): + assert_node(node, cls[1], xpath=xpath, **kwargs) + else: + assert len(node) == 1, \ + 'The node%s has %d child nodes, not one' % (xpath, len(node)) + assert_node(node[0], cls[1:], xpath=xpath + "[0]", **kwargs) + elif isinstance(cls, tuple): + assert len(node) == len(cls), \ + 'The node%s has %d child nodes, not %r' % (xpath, len(node), len(cls)) + for i, nodecls in enumerate(cls): + path = xpath + "[%d]" % i + assert_node(node[i], nodecls, xpath=path, **kwargs) + elif isinstance(cls, string_types): + assert node == cls, 'The node %r is not %r: %r' % (xpath, cls, node) + else: + assert isinstance(node, cls), \ + 'The node%s is not subclass of %r: %r' % (xpath, cls, node) + + for key, value in kwargs.items(): + assert key in node, 'The node%s does not have %r attribute: %r' % (xpath, key, node) + assert node[key] == value, \ + 'The node%s[%s] is not %r: %r' % (xpath, key, value, node[key]) + +try: + from nose.tools import assert_in, assert_not_in +except ImportError: + def assert_in(x, thing, msg=''): + if x not in thing: + assert False, msg or '%r is not in %r' % (x, thing) -def assert_not_in(x, thing): - if x in thing: - assert False, '%r is in %r' % (x, thing) + def assert_not_in(x, thing, msg=''): + if x in thing: + assert False, msg or '%r is in %r' % (x, thing) def skip_if(condition, msg=None): @@ -297,3 +321,7 @@ def find_files(root, suffix=None): for f in [f for f in files if not suffix or f.endswith(suffix)]: fpath = dirpath / f yield os.path.relpath(fpath, root) + + +def strip_escseq(text): + return re.sub('\x1b.*?m', '', text) diff --git a/tox.ini b/tox.ini index 2855db009a5..c14d1492f29 100644 --- a/tox.ini +++ b/tox.ini @@ -1,51 +1,56 @@ [tox] -envlist=flake8,py26,py27,py33,py34,pypy,du12,du11,du10 +envlist=flake8,py27,py34,py35,pypy,du12,du11,du10 [testenv] deps= + six nose + docutils sqlalchemy whoosh + html5lib + mock + typing setenv = SPHINX_TEST_TEMPDIR = {envdir}/testbuild commands= - {envpython} tests/run.py -m '^[tT]est' {posargs} + {envpython} -Wall tests/run.py -I py35 -m '^[tT]est' {posargs} sphinx-build -q -W -b html -d {envtmpdir}/doctrees doc {envtmpdir}/html -[testenv:py26] -deps= - mock - {[testenv]deps} - -[testenv:py27] -deps= - mock - {[testenv]deps} - [testenv:pypy] deps= - mock simplejson {[testenv]deps} [testenv:du10] deps= - mock docutils==0.10 {[testenv]deps} [testenv:du11] deps= - mock docutils==0.11 {[testenv]deps} [testenv:du12] deps= - mock docutils==0.12 {[testenv]deps} [testenv:flake8] deps=flake8 commands=flake8 + +[testenv:py27] +deps= + enum34 + {[testenv]deps} + +[testenv:py35] +deps= + mypy-lang + typed_ast + {[testenv]deps} +commands= + {envpython} -Wall tests/run.py -m '^[tT]est' {posargs} + sphinx-build -q -W -b html -d {envtmpdir}/doctrees doc {envtmpdir}/html diff --git a/utils/check_sources.py b/utils/check_sources.py index 91bab1f2092..d4a5ab49106 100755 --- a/utils/check_sources.py +++ b/utils/check_sources.py @@ -7,7 +7,7 @@ Make sure each Python file has a correct file header including copyright and license information. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import print_function @@ -46,6 +46,7 @@ def deco(func): (name_mail_re, name_mail_re)) not_ix_re = re.compile(r'\bnot\s+\S+?\s+i[sn]\s\S+') is_const_re = re.compile(r'if.*?==\s+(None|False|True)\b') +noqa_re = re.compile(r'#\s+NOQA\s*$', re.I) misspellings = ["developement", "adress", # ALLOW-MISSPELLING "verificate", "informations"] # ALLOW-MISSPELLING @@ -81,7 +82,9 @@ def check_syntax(fn, lines): @checker('.py') def check_style(fn, lines): for lno, line in enumerate(lines): - if len(line) > 95: + if noqa_re.search(line): + continue + if len(line.rstrip('\n')) > 95: yield lno+1, "line too long" if line.strip().startswith('#'): continue @@ -223,11 +226,8 @@ def main(argv): print("Checking %s..." % fn) try: - f = open(fn, 'rb') - try: + with open(fn, 'rb') as f: lines = list(f) - finally: - f.close() except (IOError, OSError) as err: print("%s: cannot open: %s" % (fn, err)) num += 1 diff --git a/utils/jssplitter_generator.py b/utils/jssplitter_generator.py new file mode 100644 index 00000000000..e236f00d0be --- /dev/null +++ b/utils/jssplitter_generator.py @@ -0,0 +1,142 @@ +# -*- coding: utf-8 -*- +import re +import json +import subprocess +import sys +import six + +# find char codes they are matched with Python's \\w(?u) + +match = re.compile(r'\w(?u)') +begin = -1 + +ranges = [] +singles = [] + +for i in range(65536): + # 0xd800-0xdfff is surrogate pair area. skip this. + if not match.match(six.unichr(i)) and not (0xd800 <= i <= 0xdfff): + if begin == -1: + begin = i + elif begin != -1: + if begin + 1 == i: + singles.append(begin) + else: + ranges.append((begin, i - 1)) + begin = -1 + + +# fold json within almost 80 chars per line +def fold(jsonData, splitter): + code = json.dumps(jsonData) + lines = [] + while True: + if len(code) < 71: + lines.append(' ' + code) + break + index = code.index(splitter, 70) + lines.append(' ' + code[:index+len(splitter)]) + code = code[index+len(splitter):] + lines[0] = lines[0][8:] + return '\n'.join(lines) + + +# JavaScript code +js_src = ''' +var splitChars = (function() { + var result = {}; + var singles = %s; + var i, j, start, end; + for (i = 0; i < singles.length; i++) { + result[singles[i]] = true; + } + var ranges = %s; + for (i = 0; i < ranges.length; i++) { + start = ranges[i][0]; + end = ranges[i][1]; + for (j = start; j <= end; j++) { + result[j] = true; + } + } + return result; +})(); + +function splitQuery(query) { + var result = []; + var start = -1; + for (var i = 0; i < query.length; i++) { + if (splitChars[query.charCodeAt(i)]) { + if (start !== -1) { + result.push(query.slice(start, i)); + start = -1; + } + } else if (start === -1) { + start = i; + } + } + if (start !== -1) { + result.push(query.slice(start)); + } + return result; +} +''' % (fold(singles, ','), fold(ranges, '],')) + +js_test_src = u''' +// This is regression test for https://github.com/sphinx-doc/sphinx/issues/3150 +// generated by compat_regexp_generator.py +// it needs node.js for testing +var assert = require('assert'); + +%s + +console.log("test splitting English words") +assert.deepEqual(['Hello', 'World'], splitQuery(' Hello World ')); +console.log(' ... ok\\n') + +console.log("test splitting special characters") +assert.deepEqual(['Pin', 'Code'], splitQuery('Pin-Code')); +console.log(' ... ok\\n') + +console.log("test splitting Chinese characters") +assert.deepEqual(['Hello', 'from', '中国', '上海'], splitQuery('Hello from 中国 上海')); +console.log(' ... ok\\n') + +console.log("test splitting Emoji(surrogate pair) characters. It should keep emojis.") +assert.deepEqual(['😁😁'], splitQuery('😁😁')); +console.log(' ... ok\\n') + +console.log("test splitting umlauts. It should keep umlauts.") +assert.deepEqual( + ['Löschen', 'Prüfung', 'Abändern', 'ærlig', 'spørsmål'], + splitQuery('Löschen Prüfung Abändern ærlig spørsmål')); +console.log(' ... ok\\n') + +''' % js_src + +python_src = '''# -*- coding: utf-8 -*- +""" + sphinx.search.jssplitter + ~~~~~~~~~~~~~~~~~~~~~~~~ + + Provides Python compatible word splitter to JavaScript + + DO NOT EDIT. This is generated by utils/jssplitter_generator.py + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +splitter_code = """ +%s +""" +''' % js_src + +with open('../sphinx/search/jssplitter.py', 'w') as f: + f.write(python_src) + +with open('./regression_test.js', 'w') as f: + f.write(js_test_src.encode('utf-8')) + +print("starting test...") +result = subprocess.call(['node', './regression_test.js']) +sys.exit(result) diff --git a/utils/reindent.py b/utils/reindent.py index ef53fe8ca7a..a4fe93e246c 100755 --- a/utils/reindent.py +++ b/utils/reindent.py @@ -40,11 +40,13 @@ """ from __future__ import print_function -__version__ = "1" - -import tokenize -import os, shutil +import os import sys +import shutil +import tokenize +from six.ranges import range + +__version__ = "1" if sys.version_info >= (3, 0): def tokens(readline, tokeneater): @@ -58,11 +60,13 @@ def tokens(readline, tokeneater): dryrun = 0 makebackup = True + def usage(msg=None): if msg is not None: print(msg, file=sys.stderr) print(__doc__, file=sys.stderr) + def errprint(*args): sep = "" for arg in args: @@ -70,12 +74,13 @@ def errprint(*args): sep = " " sys.stderr.write("\n") + def main(): import getopt global verbose, recurse, dryrun, makebackup try: opts, args = getopt.getopt(sys.argv[1:], "drnvh", - ["dryrun", "recurse", "nobackup", "verbose", "help"]) + ["dryrun", "recurse", "nobackup", "verbose", "help"]) except getopt.error as msg: usage(msg) return @@ -99,6 +104,7 @@ def main(): for arg in args: check(arg) + def check(file): if os.path.isdir(file) and not os.path.islink(file): if verbose: @@ -108,8 +114,8 @@ def check(file): fullname = os.path.join(file, name) if ((recurse and os.path.isdir(fullname) and not os.path.islink(fullname) and - not os.path.split(fullname)[1].startswith(".")) - or name.lower().endswith(".py")): + not os.path.split(fullname)[1].startswith(".")) or + name.lower().endswith(".py")): check(fullname) return @@ -121,8 +127,8 @@ def check(file): errprint("%s: I/O Error: %s" % (file, str(msg))) return - r = Reindenter(f) - f.close() + with f: + r = Reindenter(f) if r.run(): if verbose: print("changed.") @@ -134,9 +140,8 @@ def check(file): shutil.copyfile(file, bak) if verbose: print("backed up", file, "to", bak) - f = open(file, "w") - r.write(f) - f.close() + with open(file, "w") as f: + r.write(f) if verbose: print("wrote new", file) return True @@ -145,6 +150,7 @@ def check(file): print("unchanged.") return False + def _rstrip(line, JUNK='\n \t'): """Return line stripped of trailing spaces, tabs, newlines. @@ -158,8 +164,8 @@ def _rstrip(line, JUNK='\n \t'): i -= 1 return line[:i] -class Reindenter: +class Reindenter: def __init__(self, f): self.find_stmt = 1 # next token begins a fresh stmt? self.level = 0 # current indent level @@ -212,21 +218,21 @@ def run(self): want = have2want.get(have, -1) if want < 0: # Then it probably belongs to the next real stmt. - for j in xrange(i+1, len(stats)-1): + for j in range(i+1, len(stats)-1): jline, jlevel = stats[j] if jlevel >= 0: if have == getlspace(lines[jline]): want = jlevel * 4 break - if want < 0: # Maybe it's a hanging - # comment like this one, + if want < 0: # Maybe it's a hanging + # comment like this one, # in which case we should shift it like its base # line got shifted. - for j in xrange(i-1, -1, -1): + for j in range(i-1, -1, -1): jline, jlevel = stats[j] if jlevel >= 0: - want = have + getlspace(after[jline-1]) - \ - getlspace(lines[jline]) + want = (have + getlspace(after[jline-1]) - + getlspace(lines[jline])) break if want < 0: # Still no luck -- leave it alone. @@ -301,6 +307,7 @@ def tokeneater(self, type, token, position, end, line, if line: # not endmarker self.stats.append((position[0], self.level)) + # Count number of leading blanks. def getlspace(line): i, n = 0, len(line) @@ -308,5 +315,6 @@ def getlspace(line): i += 1 return i + if __name__ == '__main__': main() diff --git a/utils/release-checklist b/utils/release-checklist index b53fc44fc1a..78e9323b210 100644 --- a/utils/release-checklist +++ b/utils/release-checklist @@ -1,19 +1,28 @@ Release checklist ================= -* Check git status -* Make check +* Open https://travis-ci.org/sphinx-doc/sphinx/branches and check stable branch is green +* Check `git status` +* Run `make style-check` +* Run `tx pull -a -f` in sphinx/locale if final major release +* Run `python setup.py compile_catalog` in project root after 'tx pull' * Update version info in sphinx/__init__.py * Update release date in CHANGES -* git commit -* make clean -* python setup.py release bdist_wheel sdist upload +* `git commit -am 'Bump to x.y.z final'` +* `make clean` +* `python setup.py compile_grammar` +* `python setup.py release bdist_wheel sdist upload --identity=[your key]` * Check PyPI release page for obvious errors -* git tag +* `git tag` with version number * Merge default into stable if final major release -* Update homepage (release info), regenerate docs (+printable!) +* `git push origin stable --tags` +* Open https://readthedocs.org/dashboard/sphinx/versions/ and enable the released version * Add new version/milestone to tracker categories -* Write announcement and send to mailing list/python-announce +* Write announcement and send to sphinx-dev, sphinx-users and python-announce * Update version info, add new CHANGES entry for next version -* git commit -* git push +* `git commit -am 'Bump version'` +* `git push origin stable` +* `git checkout master` +* `git merge stable` +* `git push origin master` +* Update `sphinx-doc-translations `_