cloud_sptheme-1.10.1.post20200504175005/0000775000175000017500000000000013654052716020051 5ustar biscuitbiscuit00000000000000cloud_sptheme-1.10.1.post20200504175005/CHANGES0000664000175000017500000003110213654052601021032 0ustar biscuitbiscuit00000000000000.. -*- restructuredtext -*- .. _whats-new: =============== Release History =============== **1.10.1** (2020-05-04) ======================= Administration -------------- * **This project has moved to Heptapod!** Due to BitBucket deprecating Mercurial support, this project's public repository and issue tracker has been relocated. It's now located at ``_, and is powered by `Heptapod `_. Hosting for this and other open-source projects graciously provided by the people at `Octobus `_ and `CleverCloud `_! The mailing list and documentation urls remain the same. Other Changes ------------- * theme css: changed default font to "Roboto Mono", old one ("Droid Sans Mono") is no longer on google fonts. * theme config: "codevarfont" option now defaults to same as "codeblockfont" **1.10.0** (2019-11-22) ======================= .. note:: This package now requires Sphinx >= 1.6, and should be compatible with Sphinx 2.x New Features ------------- * :mod:`~cloud_sptheme.ext.table_styling`: Now supports ``table_styling_default_align`` config option, for setting the default table alignment (Sphinx 2 switched from ``"left"`` to ``"center"``, this allows projects to change it back). Other Changes ------------- * theme css: Minor style adjustments Bugfixes -------- * :mod:`~cloud_sptheme.ext.role_index`: fix AttributeError under Sphinx 1.7+ (:issue:`38`) * **setup.py**: updated entrypoints to work with Sphinx 1.7+ (:issue:`39`) * theme css: layout fix for "sphinx.ext.viewcode" (:issue:`37`) * theme css & js: fixes Sphinx 1.6 - 2.2 compatibility (:issue:`42` and other corrections). * :mod:`~cloud_sptheme.ext.table_styling`: now plays nicely with docutils table ``:align:`` directive. **1.9.4** (2017-04-05) ====================== * :mod:`~cloud_sptheme.ext.auto_redirect`: - simplified markup - skip popup if referrer is within document - bugfix: correctly handle source document that's not at root of url * bugfix: :mod:`~cloud_sptheme.ext.docfield_markup`: sphinx 1.5 compat fix * bugfix: :mod:`~cloud_sptheme.ext.table_styling`: header-alignment not being parsed correctly **1.9** (2017-04-02) ==================== New Features ------------ * Added :mod:`~cloud_sptheme.ext.auto_redirect` extension, to help alert users when documentation location has changed. * :mod:`~cloud_sptheme.ext.table_styling` now handles colspans correctly, and supports new ``:header-alignment:`` directive for setting separate alignment on header columns (:issue:`28`, :issue:`29`, and :issue:`33`). Other Changes ------------- * The documentation is now located at ``_. The old location (``_) will be kept up to date for a while longer, but any links should be replaced. * :mod:`~cloud_sptheme.ext.issue_tracker`: removed google code preset format Bugfixes -------- * bugfix: js code updated to be compatible with jquery 3 * bugfix: :mod:`~cloud_sptheme.ext.page_only` no longer chokes on non-ascii chars in page * bugfix: :mod:`~cloud_sptheme.ext.table_styling` should no longer cause "directive already exists" warning under sphinx 1.5 (:issue:`32`). **1.8.3** (2017-2-8) ==================== *Bugfix release* * bugfix: :mod:`~cloud_sptheme.ext.relbar_links`: fixed potential label/title mixup, added some unittests. * bugfix: Setup script should no longer append timestamp when building from sdist; which should fix some reproducible-build issues downstream. * Added tox.ini script, with some *very minimal* tests. * Updated documentation. **1.8.2** (2017-1-30) ===================== *Bugfix release* * bugfix: :mod:`~cloud_sptheme.ext.relbar_links`: resolve translation proxies to prevent hash() error **1.8.1** (2017-1-30) ===================== *Bugfixes*, and new "relbar_links" extension added: * :mod:`~cloud_sptheme.ext.relbar_toc` extension deprecreated, replaced with more flexible :mod:`~cloud_sptheme.ext.relbar_links` extension. This should also fix issues with broken links under 'dirhtml' and other builders. * Assorted internal fixes to CSS template. * Documentation layout updated. **1.8** (2016-11-20) ==================== .. note:: This theme now requires Sphinx >= 1.4 New Features ------------ * Admonitions now support "without-title" class to hide title prefix ("Note", "See also", etc) * Added :mod:`~cloud_sptheme.ext.role_index` extension * Added :mod:`~cloud_sptheme.ext.page_only` extension Other Changes ------------- * Sticky sidebar code now allows sidebar to be scrolled independently of main document -- just scroll mouse while overing over sidebar. * Sidebar can now be viewed from mobile mode; hidden state is stored independently of large screen menu. * A large amount of the sidebar css & js was rewritten, many of the DOM classes have changed. Deprecations ------------ * ``collapsablesidebar`` flag is now ignored, sidebar is always collapsable. flag will be removed in 1.9. Bugfixes -------- * Fixed :mod:`~cloud_sptheme.ext.index_styling` extension to be compatible with Sphinx 1.4 **1.7.1** (2015-12-12) ====================== *Bugfix release* * Fixed divide-by-zero error under python 3 (:issue:`23`). * JS url comparison code now handles ``file://`` urls (:issue:`24`). * Now requires Sphinx >= 1.3. **1.7** (2015-07-25) ==================== .. note:: This theme now requires Sphinx >= 1.2 (some of the javascript code won't work with the jquery version bundled in Sphinx 1.1 and earlier). New Features ------------ * Function, class, and other object declaration now have colored backgrounds (controlled by ``colored_objects`` flag). * All python code blocks now have button to hide prompts & output text, for easier copying (Adapted from python's copybutton.js) (:issue:`17`). * Added :ref:`font sizing options `. * Added :ref:`document options ` to customize look and feel. * Added :mod:`cloud_sptheme.ext.autoattribute_search_bases` extension. * Added :mod:`cloud_sptheme.ext.docfield_markup` extension. Other Changes ------------- * :mod:`~cloud_sptheme.ext.autodoc_sections` has been completely rewritten. now utilitizes docutil's native RST parser, creates real section elements rather than hacked up definition lists; should now handle *any* valid rest directive that can be put at module-level. * Added styling for 2nd-level section headers, and the nested section headers generated by :mod:`!autodoc_sections`. * Default font size adjusted for compactness. * The ``popuptoc`` feature has been removed. It was just too awkward to maintain the required styling. May revisit in the future using a JS-based approach. * Unified button hover look & color through relbar, sidebar, and body. * Completely rewrote TOC highlighter code, now indicates active section, and collapses inactive TOC entries that are too large. * Makes use of Sphinx 1.2's egg entry point, so :func:`~cloud_sptheme.get_theme_dir` no longer needs to be used directly. Bugfixes -------- * :mod:`~cloud_sptheme.ext.autodoc_sections` now monkeypatches sphinx so that `:param foo:` and other fields get formatted correctly when they're embedded in a nested section (:issue:`21`). * now compatibile with Sphinx 1.3's switch from ```` to ```` for literals. * :mod:`!autodoc_sections` now monkeypatches sphinx so that ``:param foo:`` and other fields get formatted correctly when they're embedded in a nested section (:issue:`21`). * :mod:`!autodoc_sections` now handles method descriptors correctly (:issue:`16`). * the sidebar collapse state is now consistent across subfolders of document (:issue:`9`). * jumping to method or attribute permalink will now highlight the object. **1.6** (2013-12-28) ==================== New Features ------------ * Added ``rightsidebar`` option to base theme, ala the Sphinx default theme. * TOC entries which overflow sidebar now popup when hovered over (can be disabled via ``popuptoc = false``). * Added ``sidebar_localtoc_title`` and a number of other options for changing the titles of various links in the sidebar. * Added a sidebar called ``quicklinks.html``, which mirrors the navbar at the top and bottom of the page. * Various other small styling changes. .. undocumented features: * :mod:`!cloud_sptheme.ext.perpage` extension. Bugfixes -------- * Web font url now works with HTTPS * TOC highlighter now works with global toc (:issue:`7`) **1.5** (2012-10-01) ==================== New Features ------------ * Added ``plain``, ``centered``, and ``fullwidth`` css classes for positioning tables (see the :ref:`theme options `). * Added new extension :mod:`cloud_sptheme.ext.table_styling`, which adds some per-column styling options to the ``.. table::`` directive. Other Changes ------------- * Changed default font to Open Sans, for readability. * Removed all hardcoded ``pt`` or ``px`` font sizes, all sizes now specified as % of browser default. * Various improvements to mobile layout, including use of "viewport" metatag. Bugfixes -------- * Now compatible with jquery 1.8 (and thus sphinx 1.2) * Sticky sidebar code now more intelligent about various border cases. * Sticky sidebar now works when logo not present (:issue:`5`) * Sidebar toggle and headers now displayed correctly when printed (:issue:`4`) **1.4** (2012-08-02) ==================== * Sidebar now collapsible by default (:issue:`3`). * Sidebar now "sticks" to window when scrolling. * Sidebar TOC now highlights sections currently being shown in window. * Numerous documentation updates. * Various minor bugfixes. * Now natively compatible with Python 3, the **2to3** command is no longer required. **1.3** (2012-05-01) ==================== * Cleaned up documentation. * Redid css layouts. Cloud now has three layouts, controlled by css media queries: - "Normal" mode displays the document as a center-aligned box within the browser window. It will not grow to be larger than ``max_width`` (default 11 inches) in size. (This theme parameter was previously named ``docwidth``). - "Compact" mode strips the body padding to fill the whole window, but otherwise looks "Normal" mode. It will be used when the browser is less than ``compact_width`` (default 960 pixels) in size. This layout is new in 1.3. - "Minimal" mode strips excess padding, hides the sidebar, and does other things to reduce it's footprint as much as possible. This mode will be used if the browser is less than ``minimal_width`` in size (currently 700px), or if it uses the ``"handheld"`` css media type. (This theme parameter was previously named ``smallwidth``). * Added :mod:`~cloud_sptheme.ext.issue_tracker` extension, for auto-creating links to a project's issue tracker. * Added :mod:`~cloud_sptheme.ext.escaped_samp_literals` extension, which patches Sphinx to allow literal ``{`` characters in *samp* roles. * Added optional Google Analytics integration. * Added ``collapsiblesidebar`` option, as well as ``defaultcollapsed`` option. Though sidebar is still always hidden under minimal mode. * Added a number of other ``rst-class`` styling directives. **1.2** (2011-07-11) ==================== Minor stylistic changes to theme: * Changed section headers have colored background. * Added icons to admonitions. * Changed default font. * Other minor changes. **1.1** (2011-05-04) ==================== New features: * CSS media query automatically hides sidebar & trim for small displays (e.g. mobile devices) * Toggleable sections javascript code rewritten, now auto-expands based on url hash. * The parser used by the :mod:`~cloud_sptheme.ext.autodoc_sections` extension is now much more robust, and relies on fewer assumptions about the source. * Fixed header margin glitch that was occurring under Chrome. * Various minor layout enhancements. **1.0** (2011-03-25) ==================== First public release. cloud_sptheme-1.10.1.post20200504175005/LICENSE0000664000175000017500000000411513562544741021061 0ustar biscuitbiscuit00000000000000.. -*- restructuredtext -*- =================== Copyright & License =================== Cloud Sphinx Theme ================== cloud_sptheme is released under the BSD license, and is (c) `Assurance Technologies `_:: The "cloud_sptheme" python package and artwork is Copyright (c) 2010-2017 by Assurance Technologies, LLC. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Assurance Technologies, nor the names of the contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Other Content ============= Most of the icons in ``cloud_sptheme:themes/cloud/static`` are from the `Tango Icon Project `_, which has released them into the Public Domain. cloud_sptheme-1.10.1.post20200504175005/MANIFEST.in0000644000175000017500000000027312444410521021573 0ustar biscuitbiscuit00000000000000recursive-include docs * recursive-include cloud_sptheme/themes * recursive-include cloud_sptheme/ext * include LICENSE CHANGES README prune docs/_build exclude .hgignore *.komodoproject cloud_sptheme-1.10.1.post20200504175005/PKG-INFO0000664000175000017500000000271413654052716021152 0ustar biscuitbiscuit00000000000000Metadata-Version: 1.1 Name: cloud_sptheme Version: 1.10.1.post20200504175005 Summary: a nice sphinx theme named 'Cloud', and some related extensions Home-page: https://cloud-sptheme.readthedocs.io Author: Eli Collins Author-email: elic@assurancetechnologies.com License: BSD Download-URL: https://pypi.python.org/pypi/cloud_sptheme Description: This is a small package containing a Sphinx theme named "Cloud", along with some related Sphinx extensions. To see an example of the theme in action, check out it's documentation at ``_. Keywords: sphinx extension theme Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Framework :: Sphinx :: Extension Classifier: Framework :: Sphinx :: Theme Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: BSD License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Topic :: Documentation Classifier: Topic :: Software Development :: Documentation cloud_sptheme-1.10.1.post20200504175005/README0000664000175000017500000000223113654034337020726 0ustar biscuitbiscuit00000000000000.. -*- restructuredtext -*- ==================== "Cloud" Sphinx Theme ==================== About ===== This is a small package containing a Sphinx theme named "Cloud", along with some related Sphinx extensions. For more details (and to see the theme in action), check out it's documentation at ``_. Requirements ------------ * Sphinx 1.4 or newer Installation ------------ To install from pypi:: pip install cloud_sptheme To install from the source:: python setup.py install For more detailed installation & testing instructions, see "docs/install.rst", Online Resources ---------------- * **Homepage & Source:** ``_ * **Docs:** ``_ * **Download & PyPI:** ``_ Hosting ------- Thanks to the people at `Octobus `_ and `CleverCloud `_ for providing the repository / issue tracker hosting, as well as the development of `Heptapod `_! Thanks to `ReadTheDocs `_ for providing documentation hosting! cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/0000775000175000017500000000000013654052716022704 5ustar biscuitbiscuit00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/__init__.py0000664000175000017500000001035313654052716025017 0ustar biscuitbiscuit00000000000000""" This module contains a few small sphinx extensions. They are mainly used to help with the generation of BPS's own documentation, but some other projects use them as well, so they are kept here. """ #============================================================================= # imports #============================================================================= # core import re import os.path from warnings import warn # site # WARNING: since this is imported by setup.py, it's critical the toplevel # not depend on any imports outside of stdlib & setuptools # local __all__ = [ # constants "__version__", "std_exts", "all_exts", # theme setup "get_theme_dir", # deprecated # "_iter_theme_sources()", # used by setup.py # "setup", # used by sphinx.html_theme entrypoint # public helpers "get_version", # internal helpers "is_cloud_theme", ] #============================================================================= # constants #============================================================================= #: canonical version string __version__ = '1.10.1.post20200504175005' #: names of standard cloud extensions used by most cloud themes std_exts = [ 'cloud_sptheme.ext.autodoc_sections', 'cloud_sptheme.ext.autoattribute_search_bases', 'cloud_sptheme.ext.docfield_markup', 'cloud_sptheme.ext.escaped_samp_literals', 'cloud_sptheme.ext.index_styling', 'cloud_sptheme.ext.relbar_links', 'cloud_sptheme.ext.table_styling', ] #: names of all cloud extensions all_exts = std_exts + [ 'cloud_sptheme.ext.issue_tracker', ] #============================================================================= # theme setup #============================================================================= #: root of this package _root_dir = os.path.abspath(os.path.dirname(__file__)) #: root of themes subdir _theme_dir = os.path.join(_root_dir, "themes") def get_theme_dir(): """Returns path to directory containing this package's Sphinx themes. .. deprecated:: 1.7 As of Sphinx 1.2, this is passed to Sphinx via a ``setup.py`` entry point, and no longer needs to be included in your documentation's ``conf.py``. """ warn("get_theme_dir() is deprecated, and will be removed in version 2.0", DeprecationWarning, stacklevel=1) return _theme_dir def _iter_theme_sources(): """ setup helper -- iterates over ``(theme name, theme path)`` pairs for all HTML themes in this package. """ base = _theme_dir assert os.path.isabs(base) for name in os.listdir(base): path = os.path.join(base, name) if os.path.exists(os.path.join(path, "theme.conf")): yield name, path def setup(app): """ sphinx 1.6 entrypoint for registring HTML themes; required by "sphinx.html_themes" entrypoint. """ for name, path in _iter_theme_sources(): app.add_html_theme(name, path) #============================================================================= # misc public helpers #============================================================================= def get_version(release): """ Derive short version string from longer 'release' string. This is quick helper which takes a project's ``release`` string, and generates the shortened ``version`` string required by ``conf.py``. Usage example for ``conf.py``:: import cloud_sptheme as csp ... # The version info for the project you're documenting from myapp import __version__ as release version = csp.get_version(release) """ return re.match("(\d+\.\d+)", release).group(1) #============================================================================= # misc internal helpers #============================================================================= def is_cloud_theme(name): """ [hack] internal helper to check if named theme belongs to this package """ # TODO: find way to detect if an external theme *derives* from this package return os.path.isfile(os.path.join(_theme_dir, name, "theme.conf")) #============================================================================= # eof #============================================================================= cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/0000775000175000017500000000000013654052716023504 5ustar biscuitbiscuit00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__init__.py0000644000175000017500000000033212214647250025603 0ustar biscuitbiscuit00000000000000"package containing various sphinx extensions" #legacy aliases from __future__ import absolute_import from . import (autodoc_sections as nested_sections, index_styling as index_styles, ) cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__init__.pyc0000644000175000017500000000063513014220543025743 0ustar biscuitbiscuit00000000000000 N3Rc@@s0dZddlmZddlmZmZdS(s,package containing various sphinx extensionsi(tabsolute_importi(tautodoc_sectionst index_stylingN(t__doc__t __future__RtRtnested_sectionsRt index_styles(((sB/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/__init__.pytscloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/0000775000175000017500000000000013654052716025714 5ustar biscuitbiscuit00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/__init__.cpython-34.pyc0000644000175000017500000000056513047000756032074 0ustar biscuitbiscuit00000000000000 N3R@s0dZddlmZddlmZmZdS)z,package containing various sphinx extensions)absolute_import)autodoc_sections index_stylingN)__doc__ __future__rrZnested_sectionsrZ index_stylesr r B/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/__init__.pyscloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/__init__.cpython-35.pyc0000644000175000017500000000056513044130413032064 0ustar biscuitbiscuit00000000000000 N3R@s0dZddlmZddlmZmZdS)z,package containing various sphinx extensions)absolute_import)autodoc_sections index_stylingN)__doc__ __future__rrZnested_sectionsrZ index_stylesr r B/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/__init__.pyscloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/__init__.cpython-36.pyc0000644000175000017500000000055113044243001032056 0ustar biscuitbiscuit000000000000003 N3R@s$dZddlmZddlmZmZdS)z,package containing various sphinx extensions)absolute_import)autodoc_sections index_stylingN)__doc__ __future__rrZnested_sectionsrZ index_stylesr r B/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/__init__.pys cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/__init__.cpython-37.pyc0000644000175000017500000000055513503035257032077 0ustar biscuitbiscuit00000000000000B N3R@s$dZddlmZddlmZmZdS)z,package containing various sphinx extensions)absolute_import)autodoc_sections index_stylingN)__doc__ __future__rrZnested_sectionsrZ index_stylesr r B/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/__init__.pys cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/__init__.cpython-38.pyc0000644000175000017500000000056113565037021032074 0ustar biscuitbiscuit00000000000000U N3R@s$dZddlmZddlmZmZdS)z,package containing various sphinx extensions)absolute_import)autodoc_sections index_stylingN)__doc__ __future__rrZnested_sectionsrZ index_stylesr r B/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/__init__.pys ././@LongLink0000000000000000000000000000016200000000000011214 Lustar 00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/allow_unreferenced_footnotes.cpython-37.pyccloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/allow_unreferenced_footnotes.c0000644000175000017500000000133613566043446034026 0ustar biscuitbiscuit00000000000000B =]e@s6dZddlZddlmZddlmZdgZddZdS)z cloud_sptheme.ext.allow_unreferenced_footnotes -- hack that silences "Footnote XXX is not referenced" warnings in Sphinx. TODO: include this in documentation. N)UnreferencedFootnotesDetector) __version__setupcCs6|j}y|tWntk r,YnXdtiS)Nversion)registryget_transformsremover ValueErrorr)app transformsr V/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/allow_unreferenced_footnotes.pyrs  )__doc__ossphinx.transformsr cloud_spthemer__all__rr r r r s   ././@LongLink0000000000000000000000000000016200000000000011214 Lustar 00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/allow_unreferenced_footnotes.cpython-38.pyccloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/allow_unreferenced_footnotes.c0000644000175000017500000000135013565037021034011 0ustar biscuitbiscuit00000000000000U =]e@s6dZddlZddlmZddlmZdgZddZdS)z cloud_sptheme.ext.allow_unreferenced_footnotes -- hack that silences "Footnote XXX is not referenced" warnings in Sphinx. TODO: include this in documentation. N)UnreferencedFootnotesDetector) __version__setupcCs6|j}z|tWntk r,YnXdtiS)Nversion)registryget_transformsremover ValueErrorr)app transformsr V/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/allow_unreferenced_footnotes.pyrs  )__doc__ossphinx.transformsr cloud_spthemer__all__rr r r r s    cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/auto_redirect.cpython-35.pyc0000644000175000017500000001154513070320225033157 0ustar biscuitbiscuit00000000000000 X9@sdZddlZddlmZddlmZddlmZmZm Z ddl m Z dgZ ej jedd Zej jed d d d ZGd ddeZddZddZddZdS)a] ================================================================== :mod:`cloud_sptheme.ext.auto_redirect` -- Redirect Deprecated URLs ================================================================== .. versionadded:: 1.9 Overview ======== This extension is helpful for when html documentation has been relocated to a new host; e.g. moving from ``pythonhosted.org`` to ``readthedocs.io``. Once enabled, it adds a helpful "Documentation has moved" message to the top of every page, and automatically redirects the user as well. Configuration ============= This extension looks for the following config options: ``auto_redirect_subject`` subject to insert into message. defaults to ``The {project name} documentation``. ``auto_redirect_domain_url`` url to redirect user to. no message or redirect will happen if this isn't set. ``auto_redirect_domain_footer`` optional footer text to append to message Internals ========= This should work with other sphinx themes, the js & css is (mostly) generic. .. todo:: the "redirect to exact page" part of JS code currently only works with this theme; would like to fix that. .. todo:: support configuring redirects to other pages within same documentation. .. todo:: if user has dismissed "auto redirect", remember via cookie? N)raw)StandaloneHTMLBuilder) __version__ _root_diris_cloud_theme)add_static_filesetupextstaticthemescloudz cloud_base.jsc@seZdZejjedZejjedZddZ e ddZ e ddZ e d d Z e d d Ze d dZe ddZdS)RedirectHelperzauto_redirect.html_tzauto_redirect.csscCs ||_dS)N)app)selfrrG/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/auto_redirect.py__init__OszRedirectHelper.__init__cCst|jjtS)N) isinstancerbuilderr)rrrrfor_htmlRszRedirectHelper.for_htmlcCs#|jj}|jp"d|jfS)NzThe %s documentation)rconfigauto_redirect_domain_subjectproject)rrrrrdomain_subjectVs  zRedirectHelper.domain_subjectcCs |jjjS)N)rrauto_redirect_domain_url)rrrr domain_url[szRedirectHelper.domain_urlcCsW|jjj}|s|jS|dddkrS|dddkrS|j|S|S)N/z//)rrauto_redirect_domain_rootr)rrootrrr domain_root_s , zRedirectHelper.domain_rootcCs |jjjS)N)rrauto_redirect_domain_footer)rrrr domain_footeriszRedirectHelper.domain_footercCs|jjjpdS)N )rrauto_redirect_timeout)rrrrtimeoutmszRedirectHelper.timeoutN)__name__ __module__ __qualname__ospathjoinext_static_dir template_pathcss_pathrpropertyrrrr!r#r&rrrrr Js   r c Cst|}|j s |j r$dS|j}|j}td|d|}t|j}|j|j |}WdQRXt ||dd}|j d|dS)zW called after doctree has been read; inserted "Raw" node with our content. NrZ redirectorformathtmlr) r rrr templatesdictopenr. render_stringreadrinsert) rdoctreehelperrrendererctxfhcontentnoderrrprepend_redirectrs   r@cCsit|}|j s |j r$dSt|jjsLt|jtddt|j|j dddS)N javascriptT stylesheet) r rrrr html_themerrcloud_base_js_pathr/)rr:rrrinstall_static_assetss  rEcCs|jddd|jddd|jddd|jddd|jddd|jdt|jd td tiS) Nrr2rrr"r%r$z doctree-readzbuilder-initedversion)add_config_valueconnectr@rEr)rrrrrs)__doc__r*docutils.nodesrsphinx.builders.htmlr cloud_spthemerrrcloud_sptheme.utilsr__all__r+r,r-rDobjectr r@rErrrrr1s  (  cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/auto_redirect.cpython-37.pyc0000664000175000017500000001203613562544744033203 0ustar biscuitbiscuit00000000000000B ]@sdZddlZddlmZddlmZddlmZddlm Z m Z m Z ddl m Z dgZeje d d Zeje d d d d ZGdddeZddZddZddZddZdS)a] ================================================================== :mod:`cloud_sptheme.ext.auto_redirect` -- Redirect Deprecated URLs ================================================================== .. versionadded:: 1.9 Overview ======== This extension is helpful for when html documentation has been relocated to a new host; e.g. moving from ``pythonhosted.org`` to ``readthedocs.io``. Once enabled, it adds a helpful "Documentation has moved" message to the top of every page, and automatically redirects the user as well. Configuration ============= This extension looks for the following config options: ``auto_redirect_subject`` subject to insert into message. defaults to ``The {project name} documentation``. ``auto_redirect_domain_url`` url to redirect user to. no message or redirect will happen if this isn't set. ``auto_redirect_domain_footer`` optional footer text to append to message Internals ========= This should work with other sphinx themes, the js & css is (mostly) generic. .. todo:: the "redirect to exact page" part of JS code currently only works with this theme; would like to fix that. .. todo:: support configuring redirects to other pages within same documentation. .. todo:: if user has dismissed "auto redirect", remember via cookie? N)raw)StandaloneHTMLBuilder) htmlescape) __version__ _root_diris_cloud_theme)add_static_filesetupextstaticthemescloudz cloud_base.jsc@sxeZdZejedZejedZddZ e ddZ e ddZ e d d Z e d d Ze d dZe ddZdS)RedirectHelperzauto_redirect.html_tzauto_redirect.csscCs ||_dS)N)app)selfrrG/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/auto_redirect.py__init__PszRedirectHelper.__init__cCst|jjtS)N) isinstancerbuilderr)rrrrfor_htmlSszRedirectHelper.for_htmlcCs|jj}|jpd|jfS)NzThe %s documentation)rconfigauto_redirect_domain_subjectproject)rrrrrdomain_subjectWszRedirectHelper.domain_subjectcCs |jjjS)N)rrauto_redirect_domain_url)rrrr domain_url\szRedirectHelper.domain_urlcCsB|jjj}|s|jS|dddkr>|dddkr>|j|S|S)N/z//)rrauto_redirect_domain_rootr)rrootrrr domain_root`s    zRedirectHelper.domain_rootcCs |jjjS)N)rrauto_redirect_domain_footer)rrrr domain_footerjszRedirectHelper.domain_footercCs|jjjp dS)N )rrauto_redirect_timeout)rrrrtimeoutnszRedirectHelper.timeoutN)__name__ __module__ __qualname__ospathjoinext_static_dir template_pathcss_pathrpropertyrrrr"r$r'rrrrrKs    rcCsJt|}|jr|jsdSt|jjs4t|jtddt|j|j dddS)NT) javascript) stylesheet) rrrrr html_themerrcloud_base_js_pathr0)rhelperrrrinstall_static_assetsss   r7c Cstt|}|jr|jsdS|j}|j}t||d}t|j}|| |}WdQRXt ||dd}| d|dS)zW called after doctree has been read; inserted "Raw" node with our content. N)rZ redirectorhtml)formatr) rrrr templatesdictopenr/ render_stringreadrinsert) rdoctreer6rrendererctxfhcontentnoderrrprepend_redirects   rFc CsTt|}|j}|jr|sdSd|d|f}|dd}|dt|d|d<dS)Nz %s/%s.htmlrmetatagsz# T)rr"rrstripgetr) rpagename templatenamecontextr@r6Zroot_urlurlmetarrrinsert_canonical_links  rPcCsr|ddd|ddd|ddd|ddd|ddd|dt|d t|d td tiS) Nrr8rr r#r&r%zbuilder-initedz doctree-readzhtml-page-contextversion)add_config_valueconnectr7rFrPr)rrrrr s   )__doc__r+docutils.nodesrsphinx.builders.htmlrsphinx.util.pycompatr cloud_spthemerrrcloud_sptheme.utilsr__all__r,r-r.r5objectrr7rFrPr rrrr1s    (././@LongLink0000000000000000000000000000016000000000000011212 Lustar 00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autoattribute_search_bases.cpython-35.pyccloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autoattribute_search_bases.cpy0000644000175000017500000000314113337052240034012 0ustar biscuitbiscuit00000000000000 #X @srdZddlZejeZddlmZddlmZm Z dgZ eddZ ddZ dS) z cloud_sptheme.ext.autoattribute_search_bases -- monkeypatches autodoc so ``autoattribute`` searches base classes for attr doc. N) __version__) patchapplier monkeypatchsetupcsAddlm}mmt|fdd}dS)Nr)AttributeDocumenterModuleAnalyzer PycodeErrorc s!|j r|jr|jr|jj}dj|jdd|jdf}||krt|jdrx|jjddD]}y"j|j }|j}Wn(k r} zwWYdd} ~ XnX|j |jdf} | |kr|| ||.add_content)sphinx.ext.autodocrrrr)rr!r)rrr _patch_autoattributesr#cCstdtiS)Nversion)r#r)apprrr r5s) __doc__logging getLoggerrlog cloud_spthemercloud_sptheme.utilsrr__all__r#rrrrr s   ././@LongLink0000000000000000000000000000016000000000000011212 Lustar 00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autoattribute_search_bases.cpython-37.pyccloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autoattribute_search_bases.cpy0000664000175000017500000000273613562562111034030 0ustar biscuitbiscuit00000000000000B ] @sPdZddlZeeZddlmZddlmZm Z dgZ eddZ ddZ dS) z cloud_sptheme.ext.autoattribute_search_bases -- monkeypatches autodoc so ``autoattribute`` searches base classes for attr doc. N) __version__) patchapplier monkeypatchsetupcs.ddlm}mmt|fdd}dS)Nr)AttributeDocumenterModuleAnalyzer PycodeErrorc s|js|jr|jr|j}d|jdd|jdf}||krt|jdrx||jjddD]h}y|j }|}Wn$k r} zw`Wdd} ~ XYnX|j |jdf} | |kr`|| ||<Pq`W||f||S)N.__mro__) _datadescriptoranalyzerobjpathfind_attr_docsjoinhasattrparentr for_module __module____name__) _wrappedselfargskwds attr_docskeybaseclsrZbase_attr_docserrZbase_key)rrT/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autoattribute_search_bases.py add_contents      z)_patch_autoattribute..add_content)sphinx.ext.autodocrrrr)rr!r)rrr _patch_autoattributesr#cCstdtiS)Nversion)r#r)apprrr r5s) __doc__logging getLoggerrlog cloud_spthemercloud_sptheme.utilsrr__all__r#rrrrr s   ././@LongLink0000000000000000000000000000016000000000000011212 Lustar 00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autoattribute_search_bases.cpython-38.pyccloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autoattribute_search_bases.cpy0000644000175000017500000000276113565037021034024 0ustar biscuitbiscuit00000000000000U ] @sPdZddlZeeZddlmZddlmZm Z dgZ eddZ ddZ dS) z cloud_sptheme.ext.autoattribute_search_bases -- monkeypatches autodoc so ``autoattribute`` searches base classes for attr doc. N) __version__) patchapplier monkeypatchsetupcs.ddlm}mmt|fdd}dS)Nr)AttributeDocumenterModuleAnalyzer PycodeErrorc s|js|jr|jr|j}d|jdd|jdf}||krt|jdr|jjddD]p}z|j }|}Wn*k r} z WYq^W5d} ~ XYnX|j |jdf} | |kr^|| ||<qq^||f||S)N.__mro__) _datadescriptoranalyzerobjpathfind_attr_docsjoinhasattrparentr for_module __module____name__) _wrappedselfargskwds attr_docskeybaseclsrZbase_attr_docserrZbase_keyrrT/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autoattribute_search_bases.py add_contents      z)_patch_autoattribute..add_content)sphinx.ext.autodocrrrr)rr"r rr!_patch_autoattributesr$cCstdtiS)Nversion)r$r)appr r r!r5s) __doc__logging getLoggerrlog cloud_spthemercloud_sptheme.utilsrr__all__r$rr r r r!s   ././@LongLink0000000000000000000000000000014600000000000011216 Lustar 00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autodoc_sections.cpython-34.pyccloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autodoc_sections.cpython-34.py0000644000175000017500000001433413047000756033536 0ustar biscuitbiscuit00000000000000 #X;@sdZddlZddlZddlZejeZddlmZddl m Z m Z m Z dgZ ddddZe dd Zd d Zd dZd dZdS)zHcloud_sptheme.ext.autodoc_sections - support ReST sections in docstringsN) __version__)u patchapplier monkeypatchsetupc Csd}ztjj}xg|jjd|krP| sL|jj|krPPn|j}|std||pqdfqqW|j|}|rt || rt d|||fn|SWdd}XdS)a helper which looks for nearest ancestor in call stack which occurred in module, and return specified local variable. :param module: name of module to look for on stack :param var: name of local variable to return :param rtype: do optional type-check to ensure **name** has expected type. :param code: optionally match based on function name (``frame.f_code.co_name``) as well as module. N__name__z.couldn't find module=%r, code=%r in call stackzz%s: expected a %r instance: %r) inspect currentframef_back f_globalsgetf_codeco_name RuntimeErrorf_locals isinstance TypeError)modulevarrtypecodeframevaluerJ/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyget_caller_values   rc sddlm}m}t|dd}d|_ddlm}t|dd}dd lm}dd l m t|fd d }dd l m }d|_ ddlm}ddlmt|fdd} dS)zI helper which monkeypatches sphinx to install some of our hooks. r)documentmake_idc _s|j}|s"|||||Sd|_|djd|djd|d|ddjd|j}|j}zZ|dr|rtd|j|df|_q|d|_n|||||SWd||_XdS) Nclassesz desc-sectionzdesc-section-%dlevelrzsection-headerprefixz%s-%s)_modify_new_desc_sectionappendsettings id_prefixr)_wrappedselftargetargskwdsentryr#origrrrnote_implicit_targetLs      #z+_patch_sphinx..note_implicit_targetN)RSTStatec_sXt|jdd}|rH|d}|jjd|d<||j_n||||S)N desc_stackr)getattrmemo section_levelrr!)r%r&r(r)r.r*rrrnew_subsections  z%_patch_sphinx..new_subsection)ObjectDescription)desccsItfdd}tfdd}|S)Nc s5|tddddd}|jd}|jdrO|dd}n,|jdro|dd}n |j}tjd d |jd d }jj}t |d sg|_ n|j j t d |d d|ddjt ds(t fdd}nd_dS)Nzsphinx.directivesnoderrrunridsnamesz[^a-zA-Z0-9_.]+-r.r ownersignoder_set_next_match_titles_flagcs,jrd|d)Z_wrapped_parser(r))staterr nested_parses   zH_patch_sphinx..run..before_content..nested_parseT)rchildrenr astextresubstripr@r2hasattrr.r"dictrr>)Z_wrapped_beforer7r=baser r2rA) DescNodeTyper&)r@rbefore_contents,   "   !z2_patch_sphinx..run..before_contentcs8jjjj}|dks1td|S)Nr<zsanity check failed)r@r2r.popAssertionError)Z_wrapped_afterr6)r&rr after_contentsz1_patch_sphinx..run..after_content)r)Z _wrapped_runr&rKrN)rJ)r&rr8s !8z_patch_sphinx..run) DocumenterT)DocFieldTransformer)sectioncsD|||x0|D](}t|r|||jqqWdS)N)rrB)r%r&r7child)rQrr transform_all s  z$_patch_sphinx..transform_all)Zdocutils.nodesrrrr!Zdocutils.parsers.rst.statesr-sphinx.directivesr5Zsphinx.addnodesr6Zsphinx.ext.autodocrOtitles_allowedsphinx.util.docfieldsrPrQ) rrr,r-r4r5r8rOrPrSr)rJrQr _patch_sphinx<s% W rWcCs|dkrdStjdjtj|tjtjB}t|dkr|j|dr|djdkr|dd=ndS)zO helper to remove one-line description from top of module (if preset). rNzP ^ \s* ( {0} \s* -- \s* )? [a-z0-9 _."']* $ r/r) rDcompileformatescapeXIlenmatchrF)appwhatnameobjoptionslinesZ _title_rerrrtrim_module_headers  (;rgcCs"t|jdtitd6S)Nzautodoc-process-docstringversion)rWconnectrgr)rarrrr/scCsdS)a The :mod:`~cloud_sptheme.ext.autodoc_sections` extension should generate nested sections as found within object docstrings. Nested Section ============== :param arg: xxx .. attribute:: foo bar These sections can in turn contain others: Child Section ------------- Which allows breaking long class docstrings up in meaningful ways. Child Section 2 --------------- And more content Nested Section 2 ================ end of class Nrrrrr _doctestfunc?srj)__doc__rrDlogging getLoggerrlog cloud_spthemerZcloud_sptheme.utilsrrr__all__rrWrgrrjrrrrs    '  ././@LongLink0000000000000000000000000000014600000000000011216 Lustar 00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autodoc_sections.cpython-35.pyccloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autodoc_sections.cpython-35.py0000644000175000017500000001427513044130413033532 0ustar biscuitbiscuit00000000000000 #X;@sdZddlZddlZddlZejeZddlmZddl m Z m Z m Z dgZ ddddZe dd Zd d Zd dZd dZdS)zHcloud_sptheme.ext.autodoc_sections - support ReST sections in docstringsN) __version__)u patchapplier monkeypatchsetupc Csd}ztjj}xa|jjd|krM| sL|jj|krMP|j}|std||pndfqW|j|}|rt || rt d|||f|SWdd}XdS)a helper which looks for nearest ancestor in call stack which occurred in module, and return specified local variable. :param module: name of module to look for on stack :param var: name of local variable to return :param rtype: do optional type-check to ensure **name** has expected type. :param code: optionally match based on function name (``frame.f_code.co_name``) as well as module. N__name__z.couldn't find module=%r, code=%r in call stackzz%s: expected a %r instance: %r) inspect currentframef_back f_globalsgetf_codeco_name RuntimeErrorf_locals isinstance TypeError)modulevarrtypecodeframevaluerJ/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyget_caller_values   rc sddlm}m}t|dd}d|_ddlm}t|dd}dd lm}dd l m t|fd d }dd l m }d|_ ddlm}ddlmt|fdd} dS)zI helper which monkeypatches sphinx to install some of our hooks. r)documentmake_idc _s|j}|s"|||||Sd|_|djd|djd|d|ddjd|j}|j}zW|dr|rtd|j|df|_n |d|_|||||SWd||_XdS) Nclassesz desc-sectionzdesc-section-%dlevelrzsection-headerprefixz%s-%s)_modify_new_desc_sectionappendsettingsZ id_prefixr)_wrappedselftargetargskwdsentryr#origrrrnote_implicit_targetLs      # z+_patch_sphinx..note_implicit_targetN)RSTStatec_sUt|jdd}|rE|d}|jjd|d<||j_||||S)N desc_stackr)getattrmemoZ section_levelrr!)r$r%r'r(r-r)rrrnew_subsections   z%_patch_sphinx..new_subsection)ObjectDescription)desccsItfdd}tfdd}|S)Nc s/|tddddd}|jd}|jdrO|dd}n,|jdro|dd}n |j}tjd d |jd d }jj}t |d sg|_ |j j t d |d d|ddjt ds"t fdd}d_dS)Nzsphinx.directivesnoderrrunridsnamesz[^a-zA-Z0-9_.]+-r-r ownersignoder_set_next_match_titles_flagcs)jrd|d.run..before_content..nested_parseT)rchildrenr Zastextresubstripr=r1hasattrr-r"dictrr<)Z_wrapped_beforer5r;baser r1r>) DescNodeTyper%)r=rbefore_contents,   "   z2_patch_sphinx..run..before_contentcs8jjjj}|dks1td|S)Nr:zsanity check failed)r=r1r-popAssertionError)Z_wrapped_afterr4)r%rr after_contentsz1_patch_sphinx..run..after_content)r)Z _wrapped_runr%rGrJ)rF)r%rr6s !8z_patch_sphinx..run) DocumenterT)DocFieldTransformer)sectioncsA|||x-|D]%}t|r|||jqWdS)N)rr?)r$r%r5child)rMrr transform_all s  z$_patch_sphinx..transform_all)Zdocutils.nodesrrrr!Zdocutils.parsers.rst.statesr,Zsphinx.directivesr3Zsphinx.addnodesr4Zsphinx.ext.autodocrKZtitles_allowedZsphinx.util.docfieldsrLrM) rrr+r,r2r3r6rKrLrOr)rFrMr _patch_sphinx<s% W rPcCs|dkrdStjdjtj|tjtjB}t|dkr|j|dr|djdkr|dd=dS)zO helper to remove one-line description from top of module (if preset). rNzP ^ \s* ( {0} \s* -- \s* )? [a-z0-9 _."']* $ r.r) r@compileformatescapeXIlenmatchrB)appwhatnameobjoptionslinesZ _title_rerrrtrim_module_headers  (;r`cCs!t|jdtdtiS)Nzautodoc-process-docstringversion)rPconnectr`r)rZrrrr/scCsdS)a The :mod:`~cloud_sptheme.ext.autodoc_sections` extension should generate nested sections as found within object docstrings. Nested Section ============== :param arg: xxx .. attribute:: foo bar These sections can in turn contain others: Child Section ------------- Which allows breaking long class docstrings up in meaningful ways. Child Section 2 --------------- And more content Nested Section 2 ================ end of class Nrrrrr _doctestfunc?src)__doc__rr@logging getLoggerrlogZ cloud_spthemerZcloud_sptheme.utilsrrr__all__rrPr`rrcrrrrs    '  ././@LongLink0000000000000000000000000000014600000000000011216 Lustar 00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autodoc_sections.cpython-36.pyccloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autodoc_sections.cpython-36.py0000644000175000017500000001337013044243001033524 0ustar biscuitbiscuit000000000000003 #X;@s~dZddlZddlZddlZejeZddlmZddl m Z m Z m Z dgZ dddZe dd Zd d Zd dZd dZdS)zHcloud_sptheme.ext.autodoc_sections - support ReST sections in docstringsN) __version__)u patchapplier monkeypatchsetupc Csd}ztjj}xF|jjd|kr6| s4|jj|kr6P|j}|std||pLdfqW|j|}|rt || rt d|||f|Sd}XdS)a helper which looks for nearest ancestor in call stack which occurred in module, and return specified local variable. :param module: name of module to look for on stack :param var: name of local variable to return :param rtype: do optional type-check to ensure **name** has expected type. :param code: optionally match based on function name (``frame.f_code.co_name``) as well as module. N__name__z.couldn't find module=%r, code=%r in call stackzz%s: expected a %r instance: %r) inspect currentframef_back f_globalsgetf_codeco_name RuntimeErrorf_locals isinstance TypeError)modulevarrtypecodeframevaluerJ/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyget_caller_values   rc sddlm}m}t|dd}d|_ddlm}t|dd}dd lm}dd l m t|fd d }dd l m }d|_ ddlm}ddlmt|fdd} dS)zI helper which monkeypatches sphinx to install some of our hooks. r)documentmake_idc _s|j}|s|||f||Sd|_|djd|djd|d|ddjd|j}|j}zB|dr|rtd|j|df|_n |d|_|||f||S||_XdS) Nclassesz desc-sectionzdesc-section-%dlevelrzsection-headerprefixz%s-%s)_modify_new_desc_sectionappendsettingsZ id_prefixr)_wrappedselftargetargskwdsentryr#origrrrnote_implicit_targetLs   z+_patch_sphinx..note_implicit_targetN)RSTStatec_sBt|jdd}|r2|d}|jjd|d<||j_||f||S)N desc_stackr)getattrmemoZ section_levelrr!)r$r%r'r(r-r)rrrnew_subsections z%_patch_sphinx..new_subsection)ObjectDescription)desccs2tfdd}tfdd}|S)Ncs|tdddd}|jd}|jdr8|dd}n |jdrP|dd}n|j}tjdd |jd d }jj}t |d sg|_ |j j t ||dd jt d st fd d}d_dS)Nzsphinx.directivesnoderun)rrridsnamesz[^a-zA-Z0-9_.]+-r-)r ownersignoder_set_next_match_titles_flagcsjrd|d<d_|||S)NTZ match_titlesF)r<)Z_wrapped_parser'r()staterr nested_parseszH_patch_sphinx..run..before_content..nested_parseT)rchildrenr Zastextresubstripr=r1hasattrr-r"dictrr<)Z_wrapped_beforer5r;baser r1r>) DescNodeTyper%)r=rbefore_contents,        z2_patch_sphinx..run..before_contentcs(jjjj}|dks"td|S)Nr:zsanity check failed)r=r1r-popAssertionError)Z_wrapped_afterr4)r%rr after_contentsz1_patch_sphinx..run..after_content)r)Z _wrapped_runr%rGrJ)rF)r%rr6s 8z_patch_sphinx..run) DocumenterT)DocFieldTransformer)sectioncs2|||x"|D]}t|r|||jqWdS)N)rr?)r$r%r5child)rMrr transform_all s   z$_patch_sphinx..transform_all)Zdocutils.nodesrrrr!Zdocutils.parsers.rst.statesr,Zsphinx.directivesr3Zsphinx.addnodesr4Zsphinx.ext.autodocrKZtitles_allowedZsphinx.util.docfieldsrLrM) rrr+r,r2r3r6rKrLrOr)rFrMr _patch_sphinx<s%   W   rPcCsd|dkr dStjdjtj|tjtjB}t|dkr`|j|dr`|djdkr`|dd=dS)zO helper to remove one-line description from top of module (if preset). rNzP ^ \s* ( {0} \s* -- \s* )? [a-z0-9 _."']* $ r.r) r@compileformatescapeXIlenmatchrB)appwhatnameobjoptionslinesZ _title_rerrrtrim_module_headers *r`cCst|jdtdtiS)Nzautodoc-process-docstringversion)rPconnectr`r)rZrrrr/s cCsdS)a The :mod:`~cloud_sptheme.ext.autodoc_sections` extension should generate nested sections as found within object docstrings. Nested Section ============== :param arg: xxx .. attribute:: foo bar These sections can in turn contain others: Child Section ------------- Which allows breaking long class docstrings up in meaningful ways. Child Section 2 --------------- And more content Nested Section 2 ================ end of class Nrrrrr _doctestfunc?src)NN)__doc__rr@logging getLoggerrlogZ cloud_spthemerZcloud_sptheme.utilsrrr__all__rrPr`rrcrrrrs   ' b././@LongLink0000000000000000000000000000014600000000000011216 Lustar 00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autodoc_sections.cpython-37.pyccloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autodoc_sections.cpython-37.py0000664000175000017500000001341213562544744033553 0ustar biscuitbiscuit00000000000000B ];@s~dZddlZddlZddlZeeZddlmZddl m Z m Z m Z dgZ dddZe dd Zd d Zd dZd dZdS)zHcloud_sptheme.ext.autodoc_sections - support ReST sections in docstringsN) __version__)u patchapplier monkeypatchsetupcCsd}z~tj}xD|jd|kr4|r2|jj|kr4P|j}|std||pJdfqW|j|}|rt ||st d|||f|Sd}XdS)a helper which looks for nearest ancestor in call stack which occurred in module, and return specified local variable. :param module: name of module to look for on stack :param var: name of local variable to return :param rtype: do optional type-check to ensure **name** has expected type. :param code: optionally match based on function name (``frame.f_code.co_name``) as well as module. N__name__z.couldn't find module=%r, code=%r in call stackzz%s: expected a %r instance: %r) inspect currentframef_back f_globalsgetf_codeco_name RuntimeErrorf_locals isinstance TypeError)modulevarrtypecodeframevaluerJ/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyget_caller_values   rc sddlm}m}t|dd}d|_ddlm}t|dd}dd lm}dd l m t|fd d }dd l m }d|_ ddlm}ddlmt|fdd} dS)zI helper which monkeypatches sphinx to install some of our hooks. r)documentmake_idc_s|j}|s|||f||Sd|_|dd|dd|d|ddd|j}|j}zB|dr|rtd|j|df|_n |d|_|||f||S||_XdS) Nclassesz desc-sectionzdesc-section-%dlevelrzsection-headerprefixz%s-%s)_modify_new_desc_sectionappendsettings id_prefixr)_wrappedselftargetargskwdsentryr#origrrrnote_implicit_targetLs   z+_patch_sphinx..note_implicit_targetN)RSTStatec_sBt|jdd}|r2|d}|jjd|d<||j_||f||S)N desc_stackr)getattrmemo section_levelrr!)r%r&r(r)r.r*rrrnew_subsections z%_patch_sphinx..new_subsection)ObjectDescription)desccs2tfdd}tfdd}|S)Ncs|tdddd}|jd}|dr8|dd}n |drP|dd}n|}tdd |d d }jj}t |d sg|_ |j t ||dd jt d st fd d}d_dS)Nzsphinx.directivesnoderun)rrridsnamesz[^a-zA-Z0-9_.]+-r.)r ownersignoder_set_next_match_titles_flagcsjrd|d<d_|||S)NT match_titlesF)r>)Z_wrapped_parser(r))staterr nested_parseszH_patch_sphinx..run..before_content..nested_parseT)rchildrenr astextresubstripr@r2hasattrr.r"dictrr>)Z_wrapped_beforer7r=baser r2rA) DescNodeTyper&)r@rbefore_contents,        z2_patch_sphinx..run..before_contentcs(jjj}|dks"td|S)Nr<zsanity check failed)r@r2r.popAssertionError)Z_wrapped_afterr6)r&rr after_contentsz1_patch_sphinx..run..after_content)r)Z _wrapped_runr&rKrN)rJ)r&rr8s 8z_patch_sphinx..run) DocumenterT)DocFieldTransformer)sectioncs2|||x"|D]}t|r|||jqWdS)N)rrB)r%r&r7child)rQrr transform_all s   z$_patch_sphinx..transform_all)Zdocutils.nodesrrrr!Zdocutils.parsers.rst.statesr-sphinx.directivesr5Zsphinx.addnodesr6sphinx.ext.autodocrOtitles_allowedsphinx.util.docfieldsrPrQ) rrr,r-r4r5r8rOrPrSr)rJrQr _patch_sphinx<s%   W   rXcCsd|dkr dStdt|tjtjB}t|dkr`||dr`|ddkr`|dd=dS)zO helper to remove one-line description from top of module (if preset). rNzP ^ \s* ( {0} \s* -- \s* )? [a-z0-9 _."']* $ r0r) rDcompileformatescapeXIlenmatchrF)appwhatnameobjoptionslinesZ _title_rerrrtrim_module_headers *rhcCst|dtdtiS)Nzautodoc-process-docstringversion)rXconnectrhr)rbrrrr/s cCsdS)a The :mod:`~cloud_sptheme.ext.autodoc_sections` extension should generate nested sections as found within object docstrings. Nested Section ============== :param arg: xxx .. attribute:: foo :noindex: bar These sections can in turn contain others: Child Section ------------- Which allows breaking long class docstrings up in meaningful ways. Child Section 2 --------------- And more content Nested Section 2 ================ end of class Nrrrrr _doctestfunc?s rk)NN)__doc__rrDlogging getLoggerrlog cloud_spthemerZcloud_sptheme.utilsrrr__all__rrXrhrrkrrrrs   ' b././@LongLink0000000000000000000000000000014600000000000011216 Lustar 00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autodoc_sections.cpython-38.pyccloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/autodoc_sections.cpython-38.py0000644000175000017500000001353413565037021033543 0ustar biscuitbiscuit00000000000000U ];@s~dZddlZddlZddlZeeZddlmZddl m Z m Z m Z dgZ dddZe dd Zd d Zd dZd dZdS)zHcloud_sptheme.ext.autodoc_sections - support ReST sections in docstringsN) __version__)u patchapplier monkeypatchsetupcCsd}z~tj}|jd|kr2|rR|jj|kr2qR|j}|std||pHdfq|j|}|r|t ||s|t d|||f|WSd}XdS)a helper which looks for nearest ancestor in call stack which occurred in module, and return specified local variable. :param module: name of module to look for on stack :param var: name of local variable to return :param rtype: do optional type-check to ensure **name** has expected type. :param code: optionally match based on function name (``frame.f_code.co_name``) as well as module. N__name__z.couldn't find module=%r, code=%r in call stackzz%s: expected a %r instance: %r) inspect currentframef_back f_globalsgetf_codeco_name RuntimeErrorf_locals isinstance TypeError)modulevarrtypecodeframevaluerJ/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyget_caller_values&    rc sddlm}m}t|dd}d|_ddlm}t|dd}dd lm}dd l m t|fd d }dd l m }d|_ ddlm}ddlmt|fdd} dS)zI helper which monkeypatches sphinx to install some of our hooks. r)documentmake_idc_s|j}|s|||f||Sd|_|dd|dd|d|ddd|j}|j}zF|dr|rtd|j|df|_n |d|_|||f||WS||_XdS) Nclassesz desc-sectionzdesc-section-%dlevelrzsection-headerprefixz%s-%s)_modify_new_desc_sectionappendsettings id_prefixr)_wrappedselftargetargskwdsentryr#origrrrnote_implicit_targetLs   z+_patch_sphinx..note_implicit_targetN)RSTStatec_sBt|jdd}|r2|d}|jjd|d<||j_||f||S)N desc_stackr)getattrmemo section_levelrr!)r%r&r(r)r.r*rrrnew_subsections z%_patch_sphinx..new_subsection)ObjectDescription)desccs2tfdd}tfdd}|S)Ncs|tdddd}|jd}|dr8|dd}n |drP|dd}n|}tdd |d d }jj}t |d sg|_ |j t ||dd jt d st fd d}d_dS)Nzsphinx.directivesnoderun)rrridsnamesz[^a-zA-Z0-9_.]+-r.)r ownersignoder_set_next_match_titles_flagcsjrd|d<d_|||S)NT match_titlesF)r>)Z_wrapped_parser(r)staterr nested_parseszH_patch_sphinx..run..before_content..nested_parseT)rchildrenr astextresubstriprAr2hasattrr.r"dictrr>)Z_wrapped_beforer7r=baser r2rB) DescNodeTyper&r@rbefore_contents4       z2_patch_sphinx..run..before_contentcs(jjj}|dks"td|S)Nr<zsanity check failed)rAr2r.popAssertionError)Z_wrapped_afterr6r&rr after_contentsz1_patch_sphinx..run..after_content)r)Z _wrapped_runr&rLrP)rKrOrr8s 7 z_patch_sphinx..run) DocumenterT)DocFieldTransformersectioncs.||||D]}t|r|||jqdS)N)rrC)r%r&r7childrSrr transform_all s  z$_patch_sphinx..transform_all)Zdocutils.nodesrrrr!Zdocutils.parsers.rst.statesr-sphinx.directivesr5Zsphinx.addnodesr6sphinx.ext.autodocrQtitles_allowedsphinx.util.docfieldsrRrT) rrr,r-r4r5r8rQrRrVr)rKrTr _patch_sphinx<s" $    V   r[cCsd|dkr dStdt|tjtjB}t|dkr`||dr`|ddkr`|dd=dS)zO helper to remove one-line description from top of module (if preset). rNzP ^ \s* ( {0} \s* -- \s* )? [a-z0-9 _."']* $ r0r) rEcompileformatescapeXIlenmatchrG)appwhatnameobjoptionslinesZ _title_rerrrtrim_module_headers *rkcCst|dtdtiS)Nzautodoc-process-docstringversion)r[connectrkr)rerrrr/s cCsdS)a The :mod:`~cloud_sptheme.ext.autodoc_sections` extension should generate nested sections as found within object docstrings. Nested Section ============== :param arg: xxx .. attribute:: foo :noindex: bar These sections can in turn contain others: Child Section ------------- Which allows breaking long class docstrings up in meaningful ways. Child Section 2 --------------- And more content Nested Section 2 ================ end of class Nrrrrr _doctestfunc?s rn)NN)__doc__rrElogging getLoggerrlog cloud_spthemerZcloud_sptheme.utilsrrr__all__rr[rkrrnrrrrs   ' acloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/docfield_markup.cpython-35.pyc0000644000175000017500000000326213337052240033460 0ustar biscuitbiscuit00000000000000 2X @srdZddlZejeZddlmZddlmZm Z dgZ eddZ ddZ dS) zX cloud_sptheme.ext.docfield_markup -- monkeypatches sphinx to allow ``~`` in docfields. N) __version__) patchapplier monkeypatchsetupcsMddlm}mmt|jddfdd}dS)Nr)Fieldnodesaddnodesc s|jdr;|jd}|jdd|fdd}|su|pt|||Sjd|ddd |d |}||p|||7}|r|j|j||S) N~.cs0tjrSSdS)N) issubclassText)ignored) node_typerrawtexttitleI/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/docfield_markup.py innernode1s z5_patch_docfield..make_xref..innernode refdomain refexplicitFreftype reftarget) startswithlstrip rpartition pending_xrefdomainsprocess_field_xref) _wrappedselfrolenamedomaintargetrcontnodeenvrefnode)rr)rrrr make_xrefs  z"_patch_docfield..make_xref)sphinx.util.docfieldsrrrrliteral_emphasis)rr'r)rrr_patch_docfields r*cCstdtiS)Nversion)r*r)apprrrrIs) __doc__logging getLogger__name__log cloud_spthemercloud_sptheme.utilsrr__all__r*rrrrrs  4cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/docfield_markup.cpython-37.pyc0000664000175000017500000000305713562562111033471 0ustar biscuitbiscuit00000000000000B ] @sPdZddlZeeZddlmZddlmZm Z dgZ eddZ ddZ dS) zX cloud_sptheme.ext.docfield_markup -- monkeypatches sphinx to allow ``~`` in docfields. N) __version__) patchapplier monkeypatchsetupcs8ddlm}mmt|jddffdd }dS)Nr)Fieldnodesaddnodesc s|dr*|d}|dd|fdd}|sR|pP|||Sj|d||d}||pt|||7}|r|j|||S)N~.cs$tjrSSdS)N) issubclassText)ignored) node_typerrawtexttitleI/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/docfield_markup.py innernode1s  z5_patch_docfield..make_xref..innernodeF) refdomain refexplicitreftype reftarget) startswithlstrip rpartition pending_xrefdomainsprocess_field_xref) _wrappedselfrolenamedomaintargetrcontnodeenvrefnode)rr)rrrr make_xrefs      z"_patch_docfield..make_xref)sphinx.util.docfieldsrrrrliteral_emphasis)rr'r)rrr_patch_docfieldsr*cCstdtiS)Nversion)r*r)apprrrrIs) __doc__logging getLogger__name__log cloud_spthemercloud_sptheme.utilsrr__all__r*rrrrrs   4cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/docfield_markup.cpython-38.pyc0000644000175000017500000000311013565037021033456 0ustar biscuitbiscuit00000000000000U ] @sPdZddlZeeZddlmZddlmZm Z dgZ eddZ ddZ dS) zX cloud_sptheme.ext.docfield_markup -- monkeypatches sphinx to allow ``~`` in docfields. N) __version__) patchapplier monkeypatchsetupcs8ddlm}mmt|jddffdd }dS)Nr)Fieldnodesaddnodesc s|dr*|d}|dd|fdd}|sR|pP|||Sj|d||d}||pt|||7}|r|j|||S)N~.cs$tjrSSdS)N) issubclassText)ignored) node_typerrawtexttitleI/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/docfield_markup.py innernode1s  z5_patch_docfield..make_xref..innernodeF) refdomain refexplicitreftype reftarget) startswithlstrip rpartition pending_xrefdomainsprocess_field_xref) _wrappedselfrolenamedomaintargetrcontnodeenvrefnoderr)rrrr make_xrefs     z"_patch_docfield..make_xref)sphinx.util.docfieldsrrrrliteral_emphasis)rr(rr'r_patch_docfields r+cCstdtiS)Nversion)r+r)apprrrrIs) __doc__logging getLogger__name__log cloud_spthemercloud_sptheme.utilsrr__all__r+rrrrrs   3././@LongLink0000000000000000000000000000015300000000000011214 Lustar 00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/escaped_samp_literals.cpython-34.pyccloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/escaped_samp_literals.cpython-0000644000175000017500000000501613047000756033713 0ustar biscuitbiscuit00000000000000 #Xk@smdZddlmZmZddlmZddlmZmZdgZ igddZ ddZ d S) zIcloud_sptheme.ext.escaped_samp_literals - allow escaping { and } in samp.)nodesutils) __version__)urusetupcs?fdd}tj|}tjd|jd|g}td} d} d} d} d} x~|D]v}| d 7} | r|td kr| |7} d} q|| d d |fSqs|td krd} | d 7} qs| rt|tdkr|| dS|tdkrg| s<|| d dS|tj| | 7}td} d} q| |7} qs|tdkr| r|tj| | 7}ntd} d} | } qs|tdkr|| dS| |7} qsW| r|| dS| r|| dS| r2|tj| | 7}n|ggfS)zreplacement for sphinx's ``:samp:`` role handler. this is a bit stricter in it's parsing, and allows escaping of literal ``{`` and ``}`` characters. csPd||f}jj|d}j|}|g|gfS)Nz%s at char %d of %sline)reportererror problematic)posvaluemsgprb)inlinerlinenorawtextO/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/escaped_samp_literals.py make_errorsz%emph_literal_role..make_errorroleclassesFNrz{}\zunknown samp-escape '\\%s'\T{z unescaped '{'}zempty variable sectionz unescaped '}'z!unterminated samp-escape sequencezunterminated variable section) runescaperliterallowerrremphasisText)typrtextrroptionscontentrretnodebufferZ in_escapeZin_varZ var_starticr)rrrremph_literal_rolesX!               r+csmddlm}ddljfddjjD}x|D]}|j|tqHWitd6S)Nr)rolescs+g|]!\}}|jkr|qSr)r+).0keyr )modrr [s zsetup..version)docutils.parsers.rstr, sphinx.rolesspecific_docrolesitemsregister_local_roler+r)appr,namesnamer)r/rrVs " N) __doc__docutilsrr cloud_spthemercloud_sptheme.utilsrr__all__r+rrrrrs  C././@LongLink0000000000000000000000000000015300000000000011214 Lustar 00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/escaped_samp_literals.cpython-35.pyccloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/escaped_samp_literals.cpython-0000644000175000017500000000500713070215254033710 0ustar biscuitbiscuit00000000000000 #Xk@smdZddlmZmZddlmZddlmZmZdgZ igddZ ddZ d S) zIcloud_sptheme.ext.escaped_samp_literals - allow escaping { and } in samp.)nodesutils) __version__)urusetupcs9fdd}tj|}tjd|jd|g}td} d} d} d} d} x{|D]s}| d 7} | r|td kr| |7} d} q|| d d |fSqs|td krd} | d 7} qs| rt|tdkr|| dS|tdkrg| s<|| d dS|tj| | 7}td} d} q| |7} qs|tdkr| r|tj| | 7}td} d} | } qs|tdkr|| dS| |7} qsW| r|| dS| r|| dS| r,|tj| | 7}|ggfS)zreplacement for sphinx's ``:samp:`` role handler. this is a bit stricter in it's parsing, and allows escaping of literal ``{`` and ``}`` characters. csPd||f}jj|d}j|}|g|gfS)Nz%s at char %d of %sline)reportererror problematic)posvaluemsgprb)inlinerlinenorawtextO/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/escaped_samp_literals.py make_errorsz%emph_literal_role..make_errorroleclassesFNrz{}\zunknown samp-escape '\\%s'\T{z unescaped '{'}zempty variable sectionz unescaped '}'z!unterminated samp-escape sequencezunterminated variable section) runescaperliterallowerrremphasisText)typrtextrroptionscontentrretnodebufferZ in_escapeZin_varZ var_starticr)rrrremph_literal_rolesX!               r+cslddlm}ddljfddjjD}x|D]}|j|tqHWdtiS)Nr)rolescs+g|]!\}}|jkr|qSr)r+).0keyr )modrr [s zsetup..version)docutils.parsers.rstr, sphinx.rolesspecific_docrolesitemsregister_local_roler+r)appr,namesnamer)r/rrVs " N) __doc__docutilsrr cloud_spthemercloud_sptheme.utilsrr__all__r+rrrrrs  C././@LongLink0000000000000000000000000000015300000000000011214 Lustar 00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/escaped_samp_literals.cpython-37.pyccloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/escaped_samp_literals.cpython-0000664000175000017500000000444213562544744033733 0ustar biscuitbiscuit00000000000000B ]k@sPdZddlmZmZddlmZddlmZmZdgZ igfddZ ddZ d S) zIcloud_sptheme.ext.escaped_samp_literals - allow escaping { and } in samp.)nodesutils) __version__)urusetupcsfdd}t|}tj||gd}td} d} d} d} d} x|D]}| d7} | r|td krz| |7} d} n|| d d |fSqN|td krd } | d7} qN| r|tdkr|| dS|tdkr| s|| ddS|t| | 7}td} d} n| |7} qN|tdkrD| r2|t| | 7}td} d } | } qN|tdkr\|| dS| |7} qNW| rx|| dS| r|| dS| r|t| | 7}|ggfS)zreplacement for sphinx's ``:samp:`` role handler. this is a bit stricter in it's parsing, and allows escaping of literal ``{`` and ``}`` characters. cs8d||f}jj|d}|}|g|gfS)Nz%s at char %d of %s)line)reportererror problematic)posvaluemsgprb)inlinerlinenorawtextO/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/escaped_samp_literals.py make_errorsz%emph_literal_role..make_error)roleclassesFNrz{}\zunknown samp-escape '\\%s'\T{z unescaped '{'}zempty variable sectionz unescaped '}'z!unterminated samp-escape sequencezunterminated variable section) runescaperliterallowerrremphasisText)typrtextrroptionscontentrretnodebufferZ in_escapeZin_varZ var_starticr)rrrremph_literal_rolesX           r+csRddlm}ddlmfddjD}x|D]}||tq6WdtiS)Nr)rolescsg|]\}}|jkr|qSr)r+).0keyr )modrr [szsetup..version)docutils.parsers.rstr, sphinx.rolesspecific_docrolesitemsregister_local_roler+r)appr,namesnamer)r/rrVs    N) __doc__docutilsrr cloud_spthemercloud_sptheme.utilsrr__all__r+rrrrrs  C././@LongLink0000000000000000000000000000015300000000000011214 Lustar 00000000000000cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/escaped_samp_literals.cpython-38.pyccloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/escaped_samp_literals.cpython-0000644000175000017500000000447213565037021033720 0ustar biscuitbiscuit00000000000000U ]k@sPdZddlmZmZddlmZddlmZmZdgZ igfddZ ddZ d S) zIcloud_sptheme.ext.escaped_samp_literals - allow escaping { and } in samp.)nodesutils) __version__)urusetupcsfdd}t|}tj||gd}td} d} d} d} d} |D]$}| d7} | r|td krv| |7} d} n|| d d |fSqJ|td krd } | d7} qJ| r|tdkr|| dS|tdkr | s|| ddS|t| | 7}td} d} n| |7} qJ|tdkrL| r:|t| | 7}td} d } | } qJ|tdkrh|| dS| |7} qJ| r|| dS| r|| dS| r|t| | 7}|ggfS)zreplacement for sphinx's ``:samp:`` role handler. this is a bit stricter in it's parsing, and allows escaping of literal ``{`` and ``}`` characters. cs8d||f}jj|d}|}|g|gfS)Nz%s at char %d of %s)line)reportererror problematic)posvaluemsgprbinlinerlinenorawtextO/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/escaped_samp_literals.py make_errorsz%emph_literal_role..make_error)roleclassesFNrz{}\zunknown samp-escape '\\%s'\T{z unescaped '{'}zempty variable sectionz unescaped '}'z!unterminated samp-escape sequencezunterminated variable section) runescaperliterallowerrremphasisText)typrtextrroptionscontentrretnodebufferZ in_escapeZin_varZ var_starticrrremph_literal_rolesX          r,csNddlm}ddlmfddjD}|D]}||tq4dtiS)Nr)rolescsg|]\}}|jkr|qSr)r,).0keyr modrr Zs zsetup..version)docutils.parsers.rstr- sphinx.rolesspecific_docrolesitemsregister_local_roler,r)appr-namesnamerr0rrVs   N) __doc__docutilsrr cloud_spthemercloud_sptheme.utilsrr__all__r,rrrrrs  Dcloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/index_styling.cpython-34.pyc0000644000175000017500000000422713047000756033214 0ustar biscuitbiscuit00000000000000 #Xv @sdZddlZejeZddlZddlmZm Z ddl m Z dZ dZ eje de Zeje de Zeje d e Zeje d e Zd d Zd dZddZdS)zCcloud_sptheme.ext.index_styling - improves css styling for genindexN)Markupescape) __version__z^(?P.*)\(z\)$z*(?P)(?P.*)(?P attribute)z'(?P)(?P.*)(?P method)z4(?Pclass in |in module )(?P.*)(?P)modulecCsx$tj|}|rF|jdddd\}}}}d}Pntj|}|r|jdddd\}}}}d}Pntj|}|r|jdddd\}}}}|jdrd}nd}Pntj|}|r"|jd}d }d }}d }Pn|SW|rPtd t|td }n|||}t|td |dt|td S)Nnameleftlocright attributemethodclassfunctionrzzz) _attr_rematchgroup_meth_re_fc_re startswith_mod_reliteralr)rmrrr typecatrG/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/index_styling.pyformat_index_names<$$$  #rcCs|dkrdSt}x|dD]\}}xt|D]w\}} | \} } || | f||<| d} x<t| D].\}} | \} } || | f| |sr1)__doc__logging getLogger__name__logrejinja2rrr cloud_spthemerprefixsuffixcompilerrrrrr.r1rrrrs   ! cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/index_styling.cpython-35.pyc0000644000175000017500000000420713044130413033202 0ustar biscuitbiscuit00000000000000 #Xv @sdZddlZejeZddlZddlmZm Z ddl m Z dZ dZ eje de Zeje de Zeje d e Zeje d e Zd d Zd dZddZdS)zCcloud_sptheme.ext.index_styling - improves css styling for genindexN)Markupescape) __version__z^(?P.*)\(z\)$z*(?P)(?P.*)(?P attribute)z'(?P)(?P.*)(?P method)z4(?Pclass in |in module )(?P.*)(?P)modulecCsxtj|}|rC|jdddd\}}}}d}Ptj|}|r|jdddd\}}}}d}Ptj|}|r|jdddd\}}}}|jdrd}nd}Ptj|}|r|jd}d }d }}d }P|SW|rAtd t|td }|||}t|td |dt|td S)Nnameleftlocright attributemethodclassfunctionrzzz) _attr_rematchgroup_meth_re_fc_re startswith_mod_reliteralr)rmrrr typecatrG/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/index_styling.pyformat_index_names<$$$   rcCs|dkrdSt}x|dD]\}}xt|D]w\}} | \} } || | f||<| d} x<t| D].\}} | \} } || | f| |sr,)__doc__logging getLogger__name__logreZjinja2rrrZ cloud_spthemerprefixsuffixcompilerrrrrr)r,rrrrs   ! cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/index_styling.cpython-36.pyc0000644000175000017500000000365213044243001033204 0ustar biscuitbiscuit000000000000003 #Xv @sdZddlZejeZddlZddlmZm Z ddl m Z dZ dZ eje de Zeje de Zeje d e Zeje d e Zd d Zd dZddZdS)zCcloud_sptheme.ext.index_styling - improves css styling for genindexN)Markupescape) __version__z^(?P.*)\(z\)$z*(?P)(?P.*)(?P attribute)z'(?P)(?P.*)(?P method)z4(?Pclass in |in module )(?P.*)(?P)modulecCsxtj|}|r.|jdddd\}}}}d}Ptj|}|rZ|jdddd\}}}}d}Ptj|}|r|jdddd\}}}}|jdrd}nd}Ptj|}|r|jd}d }d }}d }P|S|rtd t|td }|||}t|td |dt|td S)Nnameleftlocright attributemethodclassfunctionrzzz) _attr_rematchgroup_meth_re_fc_re startswith_mod_reliteralr)rmrrr typecatrG/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/index_styling.pyformat_index_names<       rcCs|dkr dSt}xx|dD]l\}}xbt|D]V\}} | \} } || | f||<| d} x,t| D] \}} | \} } || | f| |<q^Wq,WqWdS)NgenindexZgenindexentries)r enumerate)appZpagenameZ templatenamectxZ event_argfmtkeyentriesidxentryrdataZsubitemslinksrrr mangle_index/sr)cCs|jdtdtiS)Nzhtml-page-contextversion)connectr)r)r rrrsetup>s r,)__doc__logging getLogger__name__logreZjinja2rrrZ cloud_spthemerprefixsuffixcompilerrrrrr)r,rrrrs  !cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/index_styling.cpython-37.pyc0000664000175000017500000000365613562544744033242 0ustar biscuitbiscuit00000000000000B ]v @sdZddlZeeZddlZddlmZm Z ddl m Z dZ dZ ee de Zee de Zee d e Zee d e Zd d Zd dZddZdS)zCcloud_sptheme.ext.index_styling - improves css styling for genindexN)Markupescape) __version__z^(?P.*)\(z\)$z*(?P)(?P.*)(?P attribute)z'(?P)(?P.*)(?P method)z4(?Pclass in |in module )(?P.*)(?P)modulecCsxt|}|r.|dddd\}}}}d}Pt|}|rZ|dddd\}}}}d}Pt|}|r|dddd\}}}}|drd}nd}Pt|}|r|d}d }d }}d }P|S|rtd t|td }|||}t|td |dt|td S)Nnameleftlocright attributemethodclassfunctionrzzz) _attr_rematchgroup_meth_re_fc_re startswith_mod_reliteralr)rmrrr typecatrG/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/index_styling.pyformat_index_names<       rcCs|dkr dSt}xx|dD]l\}}xbt|D]V\}} | \} } || | f||<| d} x,t| D] \}} | \} } || | f| |<q^Wq,WqWdS)Ngenindexgenindexentries)r enumerate)apppagename templatenamectx event_argfmtkeyentriesidxentryrdatasubitemslinksrrr mangle_index/sr.cCs|dtdtiS)Nzhtml-page-contextversion)connectr.r)r!rrrsetup>s r1)__doc__logging getLogger__name__logrejinja2rrr cloud_spthemerprefixsuffixcompilerrrrrr.r1rrrrs  !cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/index_styling.cpython-38.pyc0000644000175000017500000000365613565037021033225 0ustar biscuitbiscuit00000000000000U ]v @sdZddlZeeZddlZddlmZm Z ddl m Z dZ dZ ee de Zee de Zee d e Zee d e Zd d Zd dZddZdS)zCcloud_sptheme.ext.index_styling - improves css styling for genindexN)Markupescape) __version__z^(?P.*)\(z\)$z*(?P)(?P.*)(?P attribute)z'(?P)(?P.*)(?P method)z4(?Pclass in |in module )(?P.*)(?P)modulecCst|}|r,|dddd\}}}}d}qt|}|rX|dddd\}}}}d}qt|}|r|dddd\}}}}|drd}qd}qt|}|r|d}d }d }}d }q|S|rtd t|td }|||}t|td |dt|td S)Nnameleftlocright attributemethodclassfunctionrzzz) _attr_rematchgroup_meth_re_fc_re startswith_mod_reliteralr)rmrrr typecatrG/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/index_styling.pyformat_index_names:       rcCs|dkr dSt}|dD]d\}}t|D]R\}} | \} } || | f||<| d} t| D] \}} | \} } || | f| |<qXq(qdS)Ngenindexgenindexentries)r enumerate)apppagename templatenamectx event_argfmtkeyentriesidxentryrdatasubitemslinksrrr mangle_index/sr.cCs|dtdtiS)Nzhtml-page-contextversion)connectr.r)r!rrrsetup>s r1)__doc__logging getLogger__name__logrejinja2rrr cloud_spthemerprefixsuffixcompilerrrrrr.r1rrrrs  !cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/issue_tracker.cpython-35.pyc0000644000175000017500000000507113070215254033173 0ustar biscuitbiscuit00000000000000 X@sdZddlZddlmZddlmZddlmZddZdd Z d d Z ej d ej Z igd dZddZdS)zTcloud_sptheme.ext.issue_tracker - added ":issue:" text role to link to issue trackerN)nodes) set_classes) __version__cCs=|jj|d|}|j|||}|g|gfS)zgenerate error node and msgline)reportererror problematic)inlinerrawtextrvaluemsgnoderG/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/issue_tracker.py make_errorsrcCst|ddpdS)z%retrieve issue_tracker_title templateissue_tracker_titleNz issue {issue})getattr)configrrrget_issue_tracker_titlesrcCst|dd}|sdS|jdrP|ddjd}d|dS|jdr|ddjd}d |dS|SdS) z6retrieve issue_tracker_url template, replacing aliasesissue_tracker_urlNzbb:/zhttps://bitbucket.org/z/issues/{issue}zgh:zhttps://github.com/)r startswithstrip)rtemplateprojectrrrget_issue_tracker_urls  rz ^ (?: (?P[^<]+) \s* < (?P<issue1>\d+) > | (?P<issue2>\d+) ) $ c�������������C���s1��t��j�|��}�|�rK�t�|�j�d��p3�|�j�d���}�|�j�d��} �n�t�|�|�|�d�|�f��S|�j�j�j�j�j �} �t �| ��} �t �| ��} �| �s�| �j �d�|��} �t �|��|�j�d�g���} �| �j�d��| �r| �j �d�|�d�| ��}�t�j�|�| �d�|�|�}�n�t�j�|�| �|��}�|�g�g��f�S)zgenerate link to an issueZissue1Zissue2titlezInvalid issue identifier: %rissueclassesrefuri)issue_rematchintgroupr���documentsettingsenvappr���r���r���formatr��� setdefaultappendr��� referenceemphasis)namer ���textr���r ���optionscontentmr���r���r���Z url_templateZtitle_templateclisturlr ���r���r���r��� issue_role@���s&���� $     r5���c�������������C���s@���|��j��d�d�d��|��j��d�d�d��|��j�d�t��d�t�i�S)zinstall pluginr���Nr'���r���r���version)add_config_valueadd_roler5���r���)r(���r���r���r���setupk���s����r9���)__doc__redocutilsr���Zdocutils.parsers.rst.rolesr��� cloud_spthemer���r���r���r���compileXr!���r5���r9���r���r���r���r���<module>���s���     +�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/issue_tracker.cpython-37.pyc��0000664�0001750�0001750�00000004603�13562544744�033216� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������B ����]�����������������@���sp���d�Z�ddlZddlmZ�ddlmZ�ddlmZ�dd�Zdd �Z d d �Z e d ej Z i�g�fd dZdd�ZdS�)zTcloud_sptheme.ext.issue_tracker - added ":issue:" text role to link to issue tracker����N)nodes) set_classes) __version__c�������������C���s*���|�j�j||d}|�|||}|g|gfS�)zgenerate error node and msg)line)reportererror problematic)inlinerrawtextr���valuemsgnode�r���G/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/issue_tracker.py make_error���s����r���c�������������C���s���t�|�ddpdS�)z%retrieve issue_tracker_title templateissue_tracker_titleNz issue {issue})getattr)configr���r���r���get_issue_tracker_title���s����r���c�������������C���sl���t�|�dd}|sdS�|dr<|dd�d}d|�d�S�|drd|dd�d}d |�d�S�|S�dS�) z6retrieve issue_tracker_url template, replacing aliasesissue_tracker_urlNzbb:���/zhttps://bitbucket.org/z/issues/{issue}zgh:zhttps://github.com/)r��� startswithstrip)r���templateprojectr���r���r���get_issue_tracker_url���s����     r���z ^ (?: (?P<title>[^<]+) \s* < (?P<issue1>\d+) > | (?P<issue2>\d+) ) $ c�������������C���s���t�|}|r2t|dp"|d}|d} nt|||d|f�S�|jjjjj } t | } t | } | st| j |d} t |�|dg�} | d�| r| j || d}tj|| fd |i|}ntj|| f|}|gg�fS�) zgenerate link to an issueZissue1Zissue2titlezInvalid issue identifier: %r)issueclassesr���)r���r���refuri)issue_rematchintgroupr���documentsettingsenvappr���r���r���formatr��� setdefaultappendr��� referenceemphasis)namer ���textr���r ���optionscontentmr���r���r���Z url_templateZtitle_templateclisturlr ���r���r���r��� issue_role@���s&����      r5���c�������������C���s0���|��ddd�|��ddd�|�dt�dtiS�)zinstall pluginr���Nr'���r���r���version)add_config_valueadd_roler5���r���)r(���r���r���r���setupk���s���� r9���)__doc__redocutilsr���Zdocutils.parsers.rst.rolesr��� cloud_spthemer���r���r���r���compileXr!���r5���r9���r���r���r���r���<module>���s���    +�����������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/issue_tracker.cpython-38.pyc��0000644�0001750�0001750�00000004637�13565037021�033210� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������U ����]���������������������@���sp���d�Z�ddlZddlmZ�ddlmZ�ddlmZ�dd�Zdd �Z d d �Z e d ej Z i�g�fd dZdd�ZdS�)zTcloud_sptheme.ext.issue_tracker - added ":issue:" text role to link to issue tracker����N)nodes) set_classes) __version__c�����������������C���s*���|�j�j||d}|�|||}|g|gfS�)zgenerate error node and msg)line)reportererror problematic)inlinerrawtextr���valuemsgnode�r���G/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/issue_tracker.py make_error���s����r���c�����������������C���s���t�|�ddpdS�)z%retrieve issue_tracker_title templateissue_tracker_titleNz issue {issue})getattr)configr���r���r���get_issue_tracker_title���s����r���c�����������������C���sl���t�|�dd}|sdS�|dr<|dd�d}d|�d�S�|drd|dd�d}d |�d�S�|S�dS�) z6retrieve issue_tracker_url template, replacing aliasesissue_tracker_urlNzbb:���/zhttps://bitbucket.org/z/issues/{issue}zgh:zhttps://github.com/)r��� startswithstrip)r���templateprojectr���r���r���get_issue_tracker_url���s����     r���z ^ (?: (?P<title>[^<]+) \s* < (?P<issue1>\d+) > | (?P<issue2>\d+) ) $ c�����������������C���s���t�|}|r2t|dp"|d}|d} nt|||d|f�S�|jjjjj } t | } t | } | st| j |d} t |�|dg�} | d�| r| j || d}tj|| fd |i|}ntj|| f|}|gg�fS�) zgenerate link to an issueZissue1Zissue2titlezInvalid issue identifier: %r)issueclassesr���)r���r���refuri)issue_rematchintgroupr���documentsettingsenvappr���r���r���formatr��� setdefaultappendr��� referenceemphasis)namer ���textr���r ���optionscontentmr���r���r���Z url_templateZtitle_templateZclisturlr ���r���r���r��� issue_role@���s(����     r4���c�����������������C���s0���|��ddd�|��ddd�|�dt�dtiS�)zinstall pluginr���Nr'���r���r���version)add_config_valueadd_roler4���r���)r(���r���r���r���setupk���s���� r8���)__doc__redocutilsr���Zdocutils.parsers.rst.rolesr��� cloud_spthemer���r���r���r���compileXr!���r4���r8���r���r���r���r���<module>���s���    +�������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/page_only.cpython-34.pyc������0000644�0001750�0001750�00000011210�13047000756�032277� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ LΏX7�����������������@���s��d��Z��d�d�l�m�Z�m�Z�m�Z�d�d�l�Z�e�j�e��Z�d�d�l �Z �d�d�l �m �Z �d�d�l �m �Z �d�d�l�Z�d�d�l�m�Z�d�d�l�m�Z�m�Z�d�g�Z�e�d �d ����Z�e �j�d ��Z�e ���Z�d �d ���Z�d�d���Z�Gd�d���d�e ��Z�d�d���Z�d�d���Z�d�S)a�� ============================================================== :mod:`cloud_sptheme.ext.page_only` -- Exclude Pages from Build ============================================================== .. versionadded:: 1.8 Overview ======== This extension provides a ``.. page-only::`` directive, which allows conditionally omitting entire pages from the document based on build tags. The first line of a page should be a ``.. page-only:: <expr>`` directive; where ``<expr>`` is a tag, or simple tag expression, just like ``.. only::``. If the expression evaluates to False, the page won't be included in the final build (and should be silently omitted from any TOC lists). E.g. ``.. page-only:: draft and html`` ����)absolute_importdivisionprint_functionN)WeakKeyDictionary) Directive) __version__) patchapplier monkeypatchsetupc��������������C���sT���d�d�l��m�}��t�|���d�d����}�d�d�l�m�}�t�|��d�d����}�d��S)Nr���)BuildEnvironmentc�������������S���s���t��|��|��|�|��S)N)strip_omitted_docs) __wrapped__envconfig_changed�r���C/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/page_only.pyget_outdated_files3���s���� z)_patch_sphinx.<locals>.get_outdated_files)TocTreec���������� ���S���sP���|�j��j�j�j�}�|�j�}�|�j�}�z�|�|�B|�_�|��|��SWd��|�|�_�Xd��S)N)statedocumentsettingsr���omitted_by_pageonly found_docs)r ���selfr��� omitted_docsr���r���r���r���run@���s����   z_patch_sphinx.<locals>.run)sphinx.environmentr ���r ���sphinx.directives.otherr���)r ���r���r���r���r���r���r��� _patch_sphinx+���s���� r���z&^\.\.\s+page-only::\s+(?P<expr>.+)\s*$c�������������C���s���|��t��|��j�<d�S)zm hack to get app ref w/in env.get_outdated_files() monkeypatch, called on 'builder-inited' event N) _env_to_appr���)appr���r���r���install_app_refZ���s����r!���c���������� ���C���s���t��|��}�|��j�}�t���}�x�|�D]�}�t�|��j�|��d��.�}�d�}�x�|�D]�}�|�j���rQ�PqQ�qQ�WWd�QXt�j�|��}�|�s�q#�n��|�j�j �|�j �d���s#�|�j �|��q#�q#�W|�r�|�j �d�t �|���n��|�|��_�|�j�|��d�S)a�� helper invoked right before env.get_outdated_files() is called, scans for omitted files and modifies document set accordingly. called via monkeypatch before .get_outdated_files() is run, which happens during env.update(), shortly before 'env-get-outdated' event. r�Nexprz%s pages omitted by page-only)r���r���setopendoc2pathstrip _header_rematchtagseval_conditiongroupaddinfolenr���difference_update)r���r ���r���r���docfhlinemr���r���r���r ���b���s$����       r ���c���������������@���s@���e��Z�d��Z�d�Z�d�Z�d�Z�d�Z�d�Z�i��Z�d�d���Z �d�S) PageOnlyz Directive used to capture info. Notes that this doesn't actually do anything, job has already been done by find_omitted_docs(). This is just here to prevent parse errors. F���r���Tc�������������C���s���g��S)Nr���)r���r���r���r���r������s����z PageOnly.runN) __name__ __module__ __qualname____doc__ has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespace option_specr���r���r���r���r���r6������s��� r6���c�������������C���s���|��j��j�}�xz�|�j�t�j�j��D]c�}�|�d�}�d�}�xJ�|�t�|��k��r�|�|�}�t�|�d��|�k�rw�|�|�=q;�|�d�7}�q;�Wq"�Wd�S)zs remove omitted pages from TOC, let through by TocTree.run() monkeypatch called on doctree-read event. entriesr���r7���N)r���r���traversesphinxaddnodestoctreer0���str)r ���doctreer��� toctreenoderA���idxentryr���r���r���remove_from_toc���s����    rK���c�������������C���sB���t����|��j�d�t��|��j�d�t��|��j�d�t��i�t�d�6S)Nz page-onlyzbuilder-initedz doctree-readversion)r��� add_directiver6���connectr!���rK���r���)r ���r���r���r���r ������s ����)r;��� __future__r���r���r���logging getLoggerr8���logreweakrefr���docutils.parsers.rstr���sphinx.addnodesrC��� cloud_spthemer���cloud_sptheme.utilsr���r ���__all__r���compiler)���r���r!���r ���r6���rK���r ���r���r���r���r���<module>���s$���    (   ' ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/page_only.cpython-35.pyc������0000644�0001750�0001750�00000011251�13070215254�032302� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ 57XS�����������������@���s$��d��Z��d�d�l�m�Z�m�Z�m�Z�d�d�l�Z�d�d�l�Z�e�j�e��Z �d�d�l �Z �d�d�l �m �Z �d�d�l �m�Z�d�d�l�Z�d�d�l�m�Z�d�d�l�m�Z�m�Z�d�g�Z�e�d �d ����Z�e �j�d ��Z�e ���Z�d �d ���Z�d�d���Z�Gd�d���d�e��Z�d�d���Z�d�d���Z�d�S)a�� ============================================================== :mod:`cloud_sptheme.ext.page_only` -- Exclude Pages from Build ============================================================== .. versionadded:: 1.8 Overview ======== This extension provides a ``.. page-only::`` directive, which allows conditionally omitting entire pages from the document based on build tags. The first line of a page should be a ``.. page-only:: <expr>`` directive; where ``<expr>`` is a tag, or simple tag expression, just like ``.. only::``. If the expression evaluates to False, the page won't be included in the final build (and should be silently omitted from any TOC lists). E.g. ``.. page-only:: draft and html`` ����)absolute_importdivisionprint_functionN)WeakKeyDictionary) Directive) __version__) patchapplier monkeypatchsetupc��������������C���sT���d�d�l��m�}��t�|���d�d����}�d�d�l�m�}�t�|��d�d����}�d��S)Nr���)BuildEnvironmentc�������������S���s���t��|��|��|�|��S)N)strip_omitted_docs) __wrapped__envconfig_changed�r���C/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/page_only.pyget_outdated_files4���s���� z)_patch_sphinx.<locals>.get_outdated_files)TocTreec���������� ���S���sP���|�j��j�j�j�}�|�j�}�|�j�}�z�|�|�B|�_�|��|��SWd��|�|�_�Xd��S)N)statedocumentsettingsr���omitted_by_pageonly found_docs)r ���selfr��� omitted_docsr���r���r���r���runA���s����   z_patch_sphinx.<locals>.run)sphinx.environmentr ���r ���sphinx.directives.otherr���)r ���r���r���r���r���r���r��� _patch_sphinx,���s���� r���z&^\.\.\s+page-only::\s+(?P<expr>.+)\s*$c�������������C���s���|��t��|��j�<d�S)zm hack to get app ref w/in env.get_outdated_files() monkeypatch, called on 'builder-inited' event N) _env_to_appr���)appr���r���r���install_app_ref[���s����r!���c���������� ���C���s���t��|��}�|��j�}�t���}�x�|�D]�}�t�j�|��j�|��d�d�+�}�d�}�x�|�D]�}�|�j���rW�PqW�WWd�QRXt�j�|��}�|�s�q#�|�j �j �|�j �d���s#�|�j �|��q#�W|�r�|�j �d�t�|���|�|��_�|�j�|��d�S)a�� helper invoked right before env.get_outdated_files() is called, scans for omitted files and modifies document set accordingly. called via monkeypatch before .get_outdated_files() is run, which happens during env.update(), shortly before 'env-get-outdated' event. encodingzlatin-1�Nexprz%s pages omitted by page-only)r���r���setioopendoc2pathstrip _header_rematchtagseval_conditiongroupaddinfolenr���difference_update)r���r ���r���r���docfhlinemr���r���r���r ���c���s$����    !    r ���c���������������@���s@���e��Z�d��Z�d�Z�d�Z�d�Z�d�Z�d�Z�i��Z�d�d���Z �d�S) PageOnlyz Directive used to capture info. Notes that this doesn't actually do anything, job has already been done by find_omitted_docs(). This is just here to prevent parse errors. F���r���Tc�������������C���s���g��S)Nr���)r���r���r���r���r������s����z PageOnly.runN) __name__ __module__ __qualname____doc__ has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespace option_specr���r���r���r���r���r7������s��� r7���c�������������C���s���|��j��j�}�xz�|�j�t�j�j��D]c�}�|�d�}�d�}�xJ�|�t�|��k��r�|�|�}�t�|�d��|�k�rw�|�|�=q;�|�d�7}�q;�Wq"�Wd�S)zs remove omitted pages from TOC, let through by TocTree.run() monkeypatch called on doctree-read event. entriesr���r8���N)r���r���traversesphinxaddnodestoctreer1���str)r ���doctreer��� toctreenoderB���idxentryr���r���r���remove_from_toc���s����    rL���c�������������C���sA���t����|��j�d�t��|��j�d�t��|��j�d�t��d�t�i�S)Nz page-onlyzbuilder-initedz doctree-readversion)r��� add_directiver7���connectr!���rL���r���)r ���r���r���r���r ������s ����) r<��� __future__r���r���r���r&���logging getLoggerr9���logreweakrefr���docutils.parsers.rstr���sphinx.addnodesrD��� cloud_spthemer���cloud_sptheme.utilsr���r ���__all__r���compiler*���r���r!���r ���r7���rL���r ���r���r���r���r���<module>���s&���     (   ' �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/page_only.cpython-37.pyc������0000664�0001750�0001750�00000011321�13562616034�032313� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������B ����]j�����������������@���s���d�Z�ddlmZmZmZ�ddlZddlZddlmZ�ddl m Z �ddl Z ddl Z ddl mZ�ddlmZ�ddlmZmZ�eeZd gZed d �Zd d �ZedZe�Zdd�Zdd�ZG�dd�de Zdd�Z dd �Z!dS�)a�� ============================================================== :mod:`cloud_sptheme.ext.page_only` -- Exclude Pages from Build ============================================================== .. versionadded:: 1.8 Overview ======== This extension provides a ``.. page-only::`` directive, which allows conditionally omitting entire pages from the document based on build tags. The first line of a page should be a ``.. page-only:: <expr>`` directive; where ``<expr>`` is a tag, or simple tag expression, just like ``.. only::``. If the expression evaluates to False, the page won't be included in the final build (and should be silently omitted from any TOC lists). E.g. ``.. page-only:: draft and html`` ����)absolute_importdivisionprint_functionN)WeakKeyDictionary) Directive)logging) __version__) patchapplier monkeypatchsetupc��������������C���s<���ddl�m}��t|�dd�}ddlm}�t|dd�}d�S�)Nr���)BuildEnvironmentc�������������S���s���t�|�|�||S�)N)strip_omitted_docs) __wrapped__envconfig_changed�r���C/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/page_only.pyget_outdated_files5���s����z)_patch_sphinx.<locals>.get_outdated_files)TocTreec���������� ���S���s@���|j�jjj}|j}|j}zt|||B��|�|S�t||�X�d�S�)N)statedocumentsettingsr���omitted_by_pageonly found_docs_set_found_docs)r���selfr��� omitted_docsr���r���r���r���runB���s���� z_patch_sphinx.<locals>.run)sphinx.environmentr ���r ���sphinx.directives.otherr���)r ���r���r���r���r���r���r��� _patch_sphinx-���s����  r ���c�������������C���s���t�jdk�r||�_n||�j_dS�)z8 compat helper for writing found_docs attribute )���r���N)sphinx version_infor���projectdocnames)r���r���r���r���r���r���Q���s���� r���z&^\.\.\s+page-only::\s+(?P<expr>.+)\s*$c�������������C���s���|�t�|�j<�dS�)zm hack to get app ref w/in env.get_outdated_files() monkeypatch, called on 'builder-inited' event N) _env_to_appr���)appr���r���r���install_app_reff���s����r(���c���������� ���C���s���t�|��}|�j}t�}xt|D�]l}tj|�|dd"}d}x|D�]}|�r>P�q>W�W�dQ�R�X�t|}|sjq|j | ds| |�qW�|rt dt|��||�_||�dS�)a�� helper invoked right before env.get_outdated_files() is called, scans for omitted files and modifies document set accordingly. called via monkeypatch before .get_outdated_files() is run, which happens during env.update(), shortly before 'env-get-outdated' event. zlatin-1)encoding�Nexprz%s pages omitted by page-only)r&���r���setioopendoc2pathstrip _header_rematchtagseval_conditiongroupaddloggerinfolenr���difference_update)r���r'���r���r���docfhlinemr���r���r���r ���n���s$����    r ���c���������������@���s,���e�Zd�ZdZdZdZdZdZi�Zdd�Z dS�) PageOnlyz Directive used to capture info. Notes that this doesn't actually do anything, job has already been done by find_omitted_docs(). This is just here to prevent parse errors. F���r���Tc�������������C���s���g�S�)Nr���)r���r���r���r���r������s����z PageOnly.runN) __name__ __module__ __qualname____doc__ has_contentrequired_argumentsoptional_argumentsfinal_argument_whitespace option_specr���r���r���r���r���r?������s���r?���c�������������C���sj���|�j�j}x\|tjjD�]J}|d�}d}x8|t|k�r`||�}t|d�|krV||=�q*|d7�}q*W�qW�dS�)zs remove omitted pages from TOC, let through by TocTree.run() monkeypatch called on doctree-read event. entriesr���r@���N)r���r���traverser"���addnodestoctreer9���str)r'���doctreer��� toctreenoderJ���idxentryr���r���r���remove_from_toc���s����rS���c�������������C���s2���t���|�dt�|�dt�|�dt�dtiS�)Nz page-onlyzbuilder-initedz doctree-readversion)r ��� add_directiver?���connectr(���rS���r���)r'���r���r���r���r ������s ����   )"rD��� __future__r���r���r���r-���reweakrefr���docutils.parsers.rstr���r"���sphinx.addnodes sphinx.utilr���Z cloud_spthemer���cloud_sptheme.utilsr ���r ��� getLoggerrA���r7���__all__r ���r���compiler1���r&���r(���r ���r?���rS���r ���r���r���r���r���<module>���s*���      $ '���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/relbar_links.cpython-34.pyc���0000644�0001750�0001750�00000011203�13047427464�033004� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ XQ�����������������@���s���d��Z��d�d�l�m�Z�m�Z�m�Z�d�d�l�Z�e�j�e��Z�d�d�l �m �Z �d�d�l �m �Z �d�d�l �m�Z�d�g�Z�d�Z�d�Z�d �Z�d �Z�d �d ���Z�d �d���Z�d�d���Z�d�S)a�� ================================================================= :mod:`cloud_sptheme.ext.relbar_links` - adds TOC entry to relbar ================================================================= .. module:: cloud_sptheme.ext.relbar_toc :synopsis: adds TOC entry to right side of relbar .. versionadded:: 1.8.1 Overview ======== This Sphinx extension allows you to insert links into the navigation bar ("relbar") at the top of bottom of all pages. While it can be configured with arbitrary links, by default it automatically inserts a Table Of Contents entry, similar to the old python documentation format. This is mainly useful when the title link in the navigation bar has been redirected to page other than Table Of Contents (such as allowed by the ``roottarget`` option of the :doc:`/cloud_theme`). Configuration ============= By default, this inserts a "TOC" link to the right of any "Next" or "Previous" buttons, which points to your sphinx master document. It can be customized using the following options in ``conf.py``: ``relbar_links`` Optional list of links to insert, defaults to ``["toc"]``. Each list item can have one of four formats: * A dictionary containing the keys ``"page"`` and ``"label"``, as well as optional ``"key"`` and ``"title"`` keywords. "page" should be the an absolute path to your page (e.g. "contents", or "lib/mypage"). "label" is the text that will be displayed on the link, "title" is the tooltip set for the link, and "key" is the accesskey for selecting the link. * A 2-element tuple of ``(page, label)`` * A 4-element tuple of ``(page, title, key, label)`` * The predefined string ``"toc"``, which is replaced with a table of contents link to your master document. ``relbar_links_after`` When inserting the links, this extension will place them as far left as possible, so long as they are to the right of any links that are included in this list. Defaults to ``["next", "previous"]``. ����)absolute_importdivisionprint_functionN)_) __version__)unicodesetup���������c�������������C���s*��|�d�k�r4�|��j��j�}�|�t�d��d�t�d��f�St�|�t�t�f��r�t�|��d�k�r_�|�St�|��d�k�r|�\�}�}�|�|�d�|�f�Sn�t�|�t��r|�j�d��}�|�j�d��}�|�o�|�s�t �d �|�f���n��|�j�d ��p�|�}�|�j�d ��}�|�|�|�|�f�St �d �|�f���d�S) z4 normalize entry representation from config toczTable Of ContentsC���r ���Npagelabelz0dict must define at least 'page' and 'label': %rtitlekeyz)expected dict or 2/4-element sequence: %r) config master_docr��� isinstancelisttuplelendictget ValueError)appentryr���r���r���r���r����r���F/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_links.py parse_entryT���s&����    r ���c������� ���������s��d�|�k�r�d��S|�d�}���f�d�d�����j��j�D�}�t�d�d���|�D��}�d�}�xD�|�t�|��k��r�t�|�|�t��|�k�r�|�|�=q[�|�d�7}�q[�Wt�d�d�����j��j�D��} �x@�t�|��D]&�\�} �} �t�| �t��| �k�r�Pq�q�Wt�|��} �|�|�| �| ��<d��S) Nrellinksc����������������s���g��|��]�}�t����|���q�Sr���)r ���).0r���)r���r���r��� <listcomp>y���s��� z'insert_relbar_links.<locals>.<listcomp>c�������������s���s���|��]�}�t��|�t��Vq�d��S)N)r���LABEL)r"���r���r���r���r��� <genexpr>~���s����z&insert_relbar_links.<locals>.<genexpr>r���r ���c�������������s���s!���|��]�}�t��t�|���Vq�d��S)N)r���r���)r"���r���r���r���r���r%������s����)r��� relbar_linkssetr���r���r$���relbar_links_after enumerate) r���pagename templatenamectx event_arglinksZ custom_linksZ custom_labelsidxZ after_labelsposr���r���)r���r���insert_relbar_linksp���s"����    r1���c�������������C���sJ���|��j��d�d�g�d��|��j��d�d�d�g�d��|��j�d�t��i�t�d�6S) z( setup extension for sphinx run r&���r ���envr(���nextpreviouszhtml-page-contextversion)add_config_valueconnectr1���r���)r���r���r���r���r������s����)__doc__ __future__r���r���r���logging getLogger__name__logZ sphinx.localer��� cloud_spthemer���cloud_sptheme.utilsr���__all__NAMEZTITLEZ ACCESS_KEYr$���r ���r1���r���r���r���r���r���<module>6���s���    %���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/relbar_links.cpython-35.pyc���0000644�0001750�0001750�00000011174�13070215254�033000� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ XQ�����������������@���s���d��Z��d�d�l�m�Z�m�Z�m�Z�d�d�l�Z�e�j�e��Z�d�d�l �m �Z �d�d�l �m �Z �d�d�l �m�Z�d�g�Z�d�Z�d�Z�d �Z�d �Z�d �d ���Z�d �d���Z�d�d���Z�d�S)a�� ================================================================= :mod:`cloud_sptheme.ext.relbar_links` - adds TOC entry to relbar ================================================================= .. module:: cloud_sptheme.ext.relbar_toc :synopsis: adds TOC entry to right side of relbar .. versionadded:: 1.8.1 Overview ======== This Sphinx extension allows you to insert links into the navigation bar ("relbar") at the top of bottom of all pages. While it can be configured with arbitrary links, by default it automatically inserts a Table Of Contents entry, similar to the old python documentation format. This is mainly useful when the title link in the navigation bar has been redirected to page other than Table Of Contents (such as allowed by the ``roottarget`` option of the :doc:`/cloud_theme`). Configuration ============= By default, this inserts a "TOC" link to the right of any "Next" or "Previous" buttons, which points to your sphinx master document. It can be customized using the following options in ``conf.py``: ``relbar_links`` Optional list of links to insert, defaults to ``["toc"]``. Each list item can have one of four formats: * A dictionary containing the keys ``"page"`` and ``"label"``, as well as optional ``"key"`` and ``"title"`` keywords. "page" should be the an absolute path to your page (e.g. "contents", or "lib/mypage"). "label" is the text that will be displayed on the link, "title" is the tooltip set for the link, and "key" is the accesskey for selecting the link. * A 2-element tuple of ``(page, label)`` * A 4-element tuple of ``(page, title, key, label)`` * The predefined string ``"toc"``, which is replaced with a table of contents link to your master document. ``relbar_links_after`` When inserting the links, this extension will place them as far left as possible, so long as they are to the right of any links that are included in this list. Defaults to ``["next", "previous"]``. ����)absolute_importdivisionprint_functionN)_) __version__)unicodesetup���������c�������������C���s'��|�d�k�r4�|��j��j�}�|�t�d��d�t�d��f�St�|�t�t�f��r�t�|��d�k�r_�|�St�|��d�k�r|�\�}�}�|�|�d�|�f�Sn�t�|�t��r|�j�d��}�|�j�d��}�|�o�|�s�t �d �|�f���|�j�d ��p�|�}�|�j�d ��}�|�|�|�|�f�St �d �|�f���d�S) z4 normalize entry representation from config toczTable Of ContentsC���r ���Npagelabelz0dict must define at least 'page' and 'label': %rtitlekeyz)expected dict or 2/4-element sequence: %r) config master_docr��� isinstancelisttuplelendictget ValueError)appentryr���r���r���r���r����r���F/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_links.py parse_entryT���s&����     r ���c������� ���������s��d�|�k�r�d��S|�d�}���f�d�d�����j��j�D�}�t�d�d���|�D��}�d�}�xD�|�t�|��k��r�t�|�|�t��|�k�r�|�|�=q[�|�d�7}�q[�Wt�d�d�����j��j�D��} �x=�t�|��D]#�\�} �} �t�| �t��| �k�r�Pq�Wt�|��} �|�|�| �| ��<d��S) Nrellinksc����������������s���g��|��]�}�t����|���q�Sr���)r ���).0r���)r���r���r��� <listcomp>y���s��� z'insert_relbar_links.<locals>.<listcomp>c�������������s���s���|��]�}�t��|�t��Vq�d��S)N)r���LABEL)r"���r���r���r���r��� <genexpr>~���s����z&insert_relbar_links.<locals>.<genexpr>r���r ���c�������������s���s!���|��]�}�t��t�|���Vq�d��S)N)r���r���)r"���r���r���r���r���r%������s����)r��� relbar_linkssetr���r���r$���relbar_links_after enumerate) r���pagename templatenamectx event_arglinksZ custom_linksZ custom_labelsidxZ after_labelsposr���r���)r���r���insert_relbar_linksp���s"����    r1���c�������������C���sI���|��j��d�d�g�d��|��j��d�d�d�g�d��|��j�d�t��d�t�i�S) z( setup extension for sphinx run r&���r ���envr(���nextpreviouszhtml-page-contextversion)add_config_valueconnectr1���r���)r���r���r���r���r������s����)__doc__ __future__r���r���r���logging getLogger__name__logZ sphinx.localer��� cloud_spthemer���cloud_sptheme.utilsr���__all__NAMEZTITLEZ ACCESS_KEYr$���r ���r1���r���r���r���r���r���<module>6���s���    %����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/relbar_links.cpython-36.pyc���0000644�0001750�0001750�00000010573�13044243001�032773� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������3 XM�����������������@���s���d�Z�ddlmZmZmZ�ddlZejeZddl m Z �ddl m Z �ddl mZ�dgZdZdZd Zd Zd d �Zd d�Zdd�ZdS�)a�� ================================================================= :mod:`cloud_sptheme.ext.relbar_links` - adds TOC entry to relbar ================================================================= .. module:: cloud_sptheme.ext.relbar_toc :synopsis: adds TOC entry to right side of relbar .. versionadded:: 1.8.1 Overview ======== This Sphinx extension allows you to insert links into the navigation bar ("relbar") at the top of bottom of all pages. While it can be configured with arbitrary links, by default it automatically inserts a Table Of Contents entry, similar to the old python documentation format. This is mainly useful when the title link in the navigation bar has been redirected to page other than Table Of Contents (such as allowed by the ``roottarget`` option of the :doc:`/cloud_theme`). Configuration ============= By default, this inserts a "TOC" link to the right of any "Next" or "Previous" buttons, which points to your sphinx master document. It can be customized using the following options in ``conf.py``: ``relbar_links`` Optional list of links to insert, defaults to ``["toc"]``. They can have one of four formats: * A dictionary containing the keys ``"page"`` and ``"label"``, as well as optional ``"key"`` and ``"title"`` keywords. "page" should be the an absolute path to your page (e.g. "contents", or "lib/mypage"). "label" is the text that will be displayed on the link, "title" is the tooltip set for the link, and "key" is the accesskey for selecting the link. * A 2-element tuple of ``(page, label)`` * A 4-element tuple of ``(page, title, key, label)`` * The predefined string ``"toc"``, which is replaced with a table of contents link to your master document. ``relbar_links_after`` When inserting the links, this extension will place them as far left as possible, so long as they are to the right of any links (whose labels) included in this list. Defaults to ``["next", "previous"]``. ����)absolute_importdivisionprint_functionN)_) __version__)unicodesetup���������c�������������C���s���|dkr$|�j�j}|tddtdfS�t|ttfrdt|dkrB|S�t|dkr|\}}||d|fS�nXt|tr|jd}|jd}|o|st d |f�|jd p|}|jd }||||fS�t d |f�dS�) z4 normalize entry representation from config toczTable Of ContentsC���r ���Npagelabelz0dict must define at least 'page' and 'label': %rtitlekeyz)expected dict or 2/4-element sequence: %r) config master_docr��� isinstancelisttuplelendictget ValueError)appentryr���r���r���r���r����r���F/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_links.py parse_entryT���s&����        r ���c������� ���������s���d|kr d�S�|d�}�fdd�j�jD�}tdd�|D�}d}x4|t|k�rtt||�t�|krj||=�qB|d7�}qBW�tdd��j�jD�} x.t|D�]\} } t| t�| krP�qW�t|} ||| | <�d�S�) Nrellinksc����������������s���g�|�]}t��|qS�r���)r ���).0r���)r���r���r��� <listcomp>y���s���z'insert_relbar_links.<locals>.<listcomp>c�������������s���s���|�]}t�|t�V��qd�S�)N)r���LABEL)r"���r���r���r���r��� <genexpr>~���s����z&insert_relbar_links.<locals>.<genexpr>r���r ���c�������������s���s���|�]}t�t|V��qd�S�)N)r���r���)r"���r���r���r���r���r%������s����)r��� relbar_linkssetr���r���r$���relbar_links_after enumerate) r���pagename templatenamectx event_arglinksZ custom_linksZ custom_labelsidxZ after_labelsposr���r���)r���r���insert_relbar_linksp���s"����   r1���c�������������C���s6���|�j�ddgd�|�j�dddgd�|�jdt�dtiS�) z( setup extension for sphinx run r&���r ���envr(���nextpreviouszhtml-page-contextversion)Zadd_config_valueconnectr1���r���)r���r���r���r���r������s���� )__doc__ __future__r���r���r���logging getLogger__name__logZ sphinx.localer���Z cloud_spthemer���cloud_sptheme.utilsr���__all__NAMEZTITLEZ ACCESS_KEYr$���r ���r1���r���r���r���r���r���<module>6���s���     %�������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/relbar_links.cpython-37.pyc���0000664�0001750�0001750�00000010605�13562544744�033021� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������B ����]S�����������������@���s���d�Z�ddlmZmZmZ�ddlZeeZddl m Z �ddl m Z �ddl mZ�dgZdZdZd Zd Zd d �Zd d�Zdd�ZdS�)a�� ================================================================= :mod:`cloud_sptheme.ext.relbar_links` - adds TOC entry to relbar ================================================================= .. module:: cloud_sptheme.ext.relbar_links :synopsis: adds TOC entry to right side of relbar .. versionadded:: 1.8.1 Overview ======== This Sphinx extension allows you to insert links into the navigation bar ("relbar") at the top of bottom of all pages. While it can be configured with arbitrary links, by default it automatically inserts a Table Of Contents entry, similar to the old python documentation format. This is mainly useful when the title link in the navigation bar has been redirected to page other than Table Of Contents (such as allowed by the ``roottarget`` option of the :doc:`/cloud_theme`). Configuration ============= By default, this inserts a "TOC" link to the right of any "Next" or "Previous" buttons, which points to your sphinx master document. It can be customized using the following options in ``conf.py``: ``relbar_links`` Optional list of links to insert, defaults to ``["toc"]``. Each list item can have one of four formats: * A dictionary containing the keys ``"page"`` and ``"label"``, as well as optional ``"key"`` and ``"title"`` keywords. "page" should be the an absolute path to your page (e.g. "contents", or "lib/mypage"). "label" is the text that will be displayed on the link, "title" is the tooltip set for the link, and "key" is the accesskey for selecting the link. * A 2-element tuple of ``(page, label)`` * A 4-element tuple of ``(page, title, key, label)`` * The predefined string ``"toc"``, which is replaced with a table of contents link to your master document. ``relbar_links_after`` When inserting the links, this extension will place them as far left as possible, so long as they are to the right of any links that are included in this list. Defaults to ``["next", "previous"]``. ����)absolute_importdivisionprint_functionN)_) __version__)unicodesetup���������c�������������C���s���|dkr$|�j�j}|tddtdfS�t|ttfrdt|dkrB|S�t|dkr|\}}||d|fS�nXt|tr|d}|d}|r|st d |f�|d p|}|d }||||fS�t d |f�dS�) z4 normalize entry representation from config toczTable Of ContentsC���r ���Npagelabelz0dict must define at least 'page' and 'label': %rtitlekeyz)expected dict or 2/4-element sequence: %r) config master_docr��� isinstancelisttuplelendictget ValueError)appentryr���r���r���r���r����r���F/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_links.py parse_entryT���s&����        r ���c������� ���������s���d|kr d�S�|d�}�fdd�j�jD�}tdd�|D�}d}x4|t|k�rtt||�t�|krj||=�qB|d7�}qBW�tdd��j�jD�} x.t|D�]\} } t| t�| krP�qW�t|} ||| | <�d�S�) Nrellinksc����������������s���g�|�]}t��|qS�r���)r ���).0r���)r���r���r��� <listcomp>y���s���z'insert_relbar_links.<locals>.<listcomp>c�������������s���s���|�]}t�|t�V��qd�S�)N)r���LABEL)r"���r���r���r���r��� <genexpr>~���s����z&insert_relbar_links.<locals>.<genexpr>r���r ���c�������������s���s���|�]}t�t|V��qd�S�)N)r���r���)r"���r���r���r���r���r%������s����)r��� relbar_linkssetr���r���r$���relbar_links_after enumerate) r���pagename templatenamectx event_arglinksZ custom_linksZ custom_labelsidxZ after_labelsposr���r���)r���r���insert_relbar_linksp���s"����   r1���c�������������C���s6���|��ddgd�|��dddgd�|�dt�dtiS�) z( setup extension for sphinx run r&���r ���envr(���nextpreviouszhtml-page-contextversion)add_config_valueconnectr1���r���)r���r���r���r���r������s���� )__doc__ __future__r���r���r���logging getLogger__name__logZ sphinx.localer��� cloud_spthemer���cloud_sptheme.utilsr���__all__NAMETITLEZ ACCESS_KEYr$���r ���r1���r���r���r���r���r���<module>6���s���     %���������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/relbar_links.cpython-38.pyc���0000644�0001750�0001750�00000010636�13565037021�033010� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������U ����]S���������������������@���s���d�Z�ddlmZmZmZ�ddlZeeZddl m Z �ddl m Z �ddl mZ�dgZdZdZd Zd Zd d �Zd d�Zdd�ZdS�)a�� ================================================================= :mod:`cloud_sptheme.ext.relbar_links` - adds TOC entry to relbar ================================================================= .. module:: cloud_sptheme.ext.relbar_links :synopsis: adds TOC entry to right side of relbar .. versionadded:: 1.8.1 Overview ======== This Sphinx extension allows you to insert links into the navigation bar ("relbar") at the top of bottom of all pages. While it can be configured with arbitrary links, by default it automatically inserts a Table Of Contents entry, similar to the old python documentation format. This is mainly useful when the title link in the navigation bar has been redirected to page other than Table Of Contents (such as allowed by the ``roottarget`` option of the :doc:`/cloud_theme`). Configuration ============= By default, this inserts a "TOC" link to the right of any "Next" or "Previous" buttons, which points to your sphinx master document. It can be customized using the following options in ``conf.py``: ``relbar_links`` Optional list of links to insert, defaults to ``["toc"]``. Each list item can have one of four formats: * A dictionary containing the keys ``"page"`` and ``"label"``, as well as optional ``"key"`` and ``"title"`` keywords. "page" should be the an absolute path to your page (e.g. "contents", or "lib/mypage"). "label" is the text that will be displayed on the link, "title" is the tooltip set for the link, and "key" is the accesskey for selecting the link. * A 2-element tuple of ``(page, label)`` * A 4-element tuple of ``(page, title, key, label)`` * The predefined string ``"toc"``, which is replaced with a table of contents link to your master document. ``relbar_links_after`` When inserting the links, this extension will place them as far left as possible, so long as they are to the right of any links that are included in this list. Defaults to ``["next", "previous"]``. ����)absolute_importdivisionprint_functionN)_) __version__)unicodesetup���������c�����������������C���s���|dkr$|�j�j}|tddtdfS�t|ttfrdt|dkrB|S�t|dkr|\}}||d|fS�nXt|tr|d}|d}|r|st d |f�|d p|}|d }||||fS�t d |f�dS�) z4 normalize entry representation from config toczTable Of ContentsC���r ���Npagelabelz0dict must define at least 'page' and 'label': %rtitlekeyz)expected dict or 2/4-element sequence: %r) config master_docr��� isinstancelisttuplelendictget ValueError)appentryr���r���r���r���r����r���F/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_links.py parse_entryT���s(����       r ���c����������� ���������s���d|kr d�S�|d�}�fdd�j�jD�}tdd�|D�}d}|t|k�rrt||�t�|krh||=�q@|d7�}q@tdd��j�jD�} t|D�]\} } t| t�| kr�qqt|} ||| | <�d�S�) Nrellinksc��������������������s���g�|�]}t��|qS�r���)r ���.0r���r���r���r��� <listcomp>y���s���z'insert_relbar_links.<locals>.<listcomp>c�����������������s���s���|�]}t�|t�V��qd�S�N)r���LABELr"���r���r���r��� <genexpr>~���s�����z&insert_relbar_links.<locals>.<genexpr>r���r ���c�����������������s���s���|�]}t�t|V��qd�S�r&���)r���r���)r#���r���r���r���r���r(������s�����)r��� relbar_linkssetr���r���r'���relbar_links_after enumerate) r���pagename templatenamectx event_arglinksZ custom_linksZ custom_labelsidxZ after_labelsposr���r���r$���r���insert_relbar_linksp���s$����   r4���c�����������������C���s6���|��ddgd�|��dddgd�|�dt�dtiS�) z( setup extension for sphinx run r)���r ���envr+���nextpreviouszhtml-page-contextversion)add_config_valueconnectr4���r���r$���r���r���r���r������s���� )__doc__ __future__r���r���r���logging getLogger__name__logZ sphinx.localer��� cloud_spthemer���cloud_sptheme.utilsr���__all__NAMEZTITLEZ ACCESS_KEYr'���r ���r4���r���r���r���r���r���<module>���s���:     %��������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/relbar_toc.cpython-34.pyc�����0000644�0001750�0001750�00000001502�13047000756�032441� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ FX1�����������������@���sW���d��Z��d�d�l�m�Z�m�Z�m�Z�d�d�l�Z�d�d�l�m�Z�d�g�Z�d�d���Z �d�S)z cloud_sptheme.ext.relbar_toc -- adds TOC entry (and other links) to relbar. NOTE: this has been renamed to 'relbar_links'. this module is left as a legacy alias. ����)absolute_importdivisionprint_functionN���) relbar_linkssetupc�������������C���s���t��j�d�t��t�j�|���S)z( setup extension for sphinx run zZ'cloud_sptheme.ext.relbar_toc' is deprecated, use 'cloud_sptheme.ext.relbar_links' instead)warningswarnPendingDeprecationWarningr���r���)app�r ���D/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_toc.pyr������s���� ) __doc__ __future__r���r���r���r����r���__all__r���r ���r ���r ���r ���<module>���s ���  ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/relbar_toc.cpython-35.pyc�����0000644�0001750�0001750�00000001502�13075664026�032451� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ FX1�����������������@���sW���d��Z��d�d�l�m�Z�m�Z�m�Z�d�d�l�Z�d�d�l�m�Z�d�g�Z�d�d���Z �d�S)z cloud_sptheme.ext.relbar_toc -- adds TOC entry (and other links) to relbar. NOTE: this has been renamed to 'relbar_links'. this module is left as a legacy alias. ����)absolute_importdivisionprint_functionN���) relbar_linkssetupc�������������C���s���t��j�d�t��t�j�|���S)z( setup extension for sphinx run zZ'cloud_sptheme.ext.relbar_toc' is deprecated, use 'cloud_sptheme.ext.relbar_links' instead)warningswarnPendingDeprecationWarningr���r���)app�r ���D/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_toc.pyr������s���� ) __doc__ __future__r���r���r���r����r���__all__r���r ���r ���r ���r ���<module>���s ���  ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/relbar_toc.cpython-37.pyc�����0000664�0001750�0001750�00000001446�13562575744�032475� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������B ����]1�����������������@���s>���d�Z�ddlmZmZmZ�ddlZddlmZ�dgZdd�Z dS�)z cloud_sptheme.ext.relbar_toc -- adds TOC entry (and other links) to relbar. NOTE: this has been renamed to 'relbar_links'. this module is left as a legacy alias. ����)absolute_importdivisionprint_functionN���) relbar_linkssetupc�������������C���s���t�dt�t|�S�)z( setup extension for sphinx run zZ'cloud_sptheme.ext.relbar_toc' is deprecated, use 'cloud_sptheme.ext.relbar_links' instead)warningswarnPendingDeprecationWarningr���r���)app�r ���D/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_toc.pyr������s����) __doc__ __future__r���r���r���r����r���__all__r���r ���r ���r ���r ���<module>���s ��� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/role_index.cpython-34.pyc�����0000644�0001750�0001750�00000007106�13047427464�032474� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ X������������������@���s���d��Z��d�d�l�m�Z�m�Z�m�Z�d�d�l�Z�d�d�l�Z�e�j�e��Z �d�d�l �Z �d�d�l �Z �d�d�l �m �Z �d�d�l�m�Z�d�g�Z�d�d���Z�d �d���Z�d�S) a�� ====================================================== :mod:`cloud_sptheme.ext.role_index` -- JSON Role Index ====================================================== .. versionadded:: 1.8 Overview ======== This sphinx extension for the HTML builder places a file called ``roleindex.json`` in the output directory along with the documentation. This file contains a dictionary which mapping all reference ids (made via ``:ref:`` or ``:doc:``) to a 3-element list of ``(page, anchor, title)`` This is useful for integrating a Sphinx manual into the online help of web application -- context-specific help can be provided by looking up a predefined ``:ref:`` tag within the json file, and redirecting the user to the appropriate page and anchor location. As an example, see the `roleindex.json <../roleindex.json>`_ for this documentation. .. warning:: This extension should be considered "beta" quality. It was recently written, may have unknown issues, and may need to be revised. Configuration ============= This extension reads the following ``conf.py`` options: ``role_index_style`` style of json output -- can be ``"compact"`` (the default), or ``"pretty"`` (for debugging). ����)absolute_importdivisionprint_functionN)_TranslationProxy) __version__setupc���������� ���C���sl��|��j��d�k�r�d�S|��j�j�p"�d�}�i��}�t�d�d���|��j�j�d�d�j���D��|�d�<t�d �d���|��j�j�j���D��|�d �<|�d �j���|�d �<|�d �j �|�d��d �d ���}�t �j �j �|��j �j�d��}�t�d�d�d�d�d�|��}�|�d�k�r�n5�|�d�k�r$|�j �d�d�d�d��n�t�d�|���t�j�|�d�d�d��}�t�j�|�|�|��Wd�QXd�S)zC helper which generates ``"roleindex.json"`` for document. htmlNcompactc�������������s���s3���|��])�\�}�\�}�}�}�|�|�|�|�f�f�Vq�d��S)N�).0keypageanchorlabelr ���r ���D/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/role_index.py <genexpr>D���s���z#write_role_index.<locals>.<genexpr>stdlabelsrefc�������������s���s6���|��],�\�}�}�|�j����|�d��|�j���f�f�Vq�d�S)�N)lowerastext)r ���doctitler ���r ���r���r���K���s���r���anyc�������������S���s9���t��|��t��r�t�|���St�d�|��t�|���f���d��S)Nz#can't serialize value: %r (type=%r)) isinstancer���str TypeErrortype)valuer ���r ���r���encodeT���s���� z write_role_index.<locals>.encodezroleindex.json sort_keysT separators,:defaultpretty, : indentzunknown role_index_style: %rwencodingzutf-8)r#���r$���)r'���r(���) buildernameconfigrole_index_styledictenv domaindataitemstitlescopyupdateospathjoinbuilderoutdir ValueErrorcodecsopenjsondump)appstyleindexr ���targetkwdsfhr ���r ���r���write_role_index7���s,���� %    rF���c�������������C���s:���|��j��d�d��d��d�d���}�|��j�d�|��i�t�d�6S)Nr.���r���c�������������S���s���t��|���g��S)N)rF���)r@���r ���r ���r���wrappern���s���� zsetup.<locals>.wrapperzhtml-collect-pagesversion)add_config_valueconnectr���)r@���rG���r ���r ���r���r���g���s���� )__doc__ __future__r���r���r���r<���logging getLogger__name__logr>���r6���Z sphinx.localer��� cloud_spthemer���__all__rF���r���r ���r ���r ���r���<module>!���s���      0����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/role_index.cpython-35.pyc�����0000644�0001750�0001750�00000007102�13275310066�032461� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ $Z�����������������@���s���d��Z��d�d�l�m�Z�m�Z�m�Z�d�d�l�Z�d�d�l�Z�e�j�e��Z �d�d�l �Z �d�d�l �Z �d�d�l �m �Z �d�d�l�m�Z�d�g�Z�d�d���Z�d �d���Z�d�S) a�� ====================================================== :mod:`cloud_sptheme.ext.role_index` -- JSON Role Index ====================================================== .. versionadded:: 1.8 Overview ======== This sphinx extension for the HTML builder places a file called ``roleindex.json`` in the output directory along with the documentation. This file contains a dictionary which mapping all reference ids (made via ``:ref:`` or ``:doc:``) to a 3-element list of ``(page, anchor, title)`` This is useful for integrating a Sphinx manual into the online help of web application -- context-specific help can be provided by looking up a predefined ``:ref:`` tag within the json file, and redirecting the user to the appropriate page and anchor location. As an example, see the `roleindex.json <../roleindex.json>`_ for this documentation. .. warning:: This extension should be considered "beta" quality. It was recently written, may have unknown issues, and may need to be revised. Configuration ============= This extension reads the following ``conf.py`` options: ``role_index_style`` style of json output -- can be ``"compact"`` (the default), or ``"pretty"`` (for debugging). ����)absolute_importdivisionprint_functionN)_TranslationProxy) __version__setupc���������� ���C���sp��|��j��j�d�k�r�d�S|��j�j�p%�d�}�i��}�t�d�d���|��j�j�d�d�j���D��|�d�<t�d �d���|��j�j�j���D��|�d �<|�d �j ���|�d �<|�d �j �|�d��d �d ���}�t �j �j �|��j��j�d��}�t�d�d�d�d�d�|��}�|�d�k�rn5�|�d�k�r'|�j �d�d�d�d��n�t�d�|���t�j�|�d�d�d��}�t�j�|�|�|��Wd�QRXd�S)zC helper which generates ``"roleindex.json"`` for document. htmlNcompactc�������������s���s3���|��])�\�}�\�}�}�}�|�|�|�|�f�f�Vq�d��S)N�).0keypageanchorlabelr ���r ���D/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/role_index.py <genexpr>D���s���z#write_role_index.<locals>.<genexpr>stdlabelsrefc�������������s���s6���|��],�\�}�}�|�j����|�d��|�j���f�f�Vq�d�S)�N)lowerastext)r ���doctitler ���r ���r���r���K���s���r���anyc�������������S���s9���t��|��t��r�t�|���St�d�|��t�|���f���d��S)Nz#can't serialize value: %r (type=%r)) isinstancer���str TypeErrortype)valuer ���r ���r���encodeT���s���� z write_role_index.<locals>.encodezroleindex.json sort_keysT separators,:defaultpretty, : indentzunknown role_index_style: %rwencodingzutf-8)r#���r$���)r'���r(���)buildernameconfigrole_index_styledictenv domaindataitemstitlescopyupdateospathjoinoutdir ValueErrorcodecsopenjsondump)appstyleindexr ���targetkwdsfhr ���r ���r���write_role_index7���s,���� %    rF���c�������������C���s9���|��j��d�d��d��d�d���}�|��j�d�|��d�t�i�S)Nr/���r���c�������������S���s���t��|���g��S)N)rF���)r@���r ���r ���r���wrappern���s���� zsetup.<locals>.wrapperzhtml-collect-pagesversion)add_config_valueconnectr���)r@���rG���r ���r ���r���r���g���s���� )__doc__ __future__r���r���r���r<���logging getLogger__name__logr>���r7���Z sphinx.localer���Z cloud_spthemer���__all__rF���r���r ���r ���r ���r���<module>!���s���      0��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/role_index.cpython-37.pyc�����0000664�0001750�0001750�00000006554�13562544744�032512� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������B ����]�����������������@���st���d�Z�ddlmZmZmZ�ddlZddlZeeZ ddl Z ddl Z ddl m Z �ddlmZ�dgZdd�Zd d�ZdS�) a�� ====================================================== :mod:`cloud_sptheme.ext.role_index` -- JSON Role Index ====================================================== .. versionadded:: 1.8 Overview ======== This sphinx extension for the HTML builder places a file called ``roleindex.json`` in the output directory along with the documentation. This file contains a dictionary which mapping all reference ids (made via ``:ref:`` or ``:doc:``) to a 3-element list of ``(page, anchor, title)`` This is useful for integrating a Sphinx manual into the online help of web application -- context-specific help can be provided by looking up a predefined ``:ref:`` tag within the json file, and redirecting the user to the appropriate page and anchor location. As an example, see the `roleindex.json <../roleindex.json>`_ for this documentation. .. warning:: This extension should be considered "beta" quality. It was recently written, may have unknown issues, and may need to be revised. Configuration ============= This extension reads the following ``conf.py`` options: ``role_index_style`` style of json output -- can be ``"compact"`` (the default), or ``"pretty"`` (for debugging). ����)absolute_importdivisionprint_functionN)_TranslationProxy) __version__setupc���������� ���C���s ��|�j�jdkrdS�|�jjpd}i�}tdd�|�jjd�d��D�|d<�td d�|�jj�D�|d <�|d � �|d <�|d � |d��d d �}t j |�j�jd}tdd|d}|dkrn$|dkr|j ddd�n td|�tj|ddd}tj||f|�W�dQ�R�X�dS�)zC helper which generates ``"roleindex.json"`` for document. htmlNcompactc�������������s���s&���|�]\}\}}}||||ffV��qd�S�)N�).0keypageanchorlabelr ���r ���D/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/role_index.py <genexpr>D���s���z#write_role_index.<locals>.<genexpr>stdlabelsrefc�������������s���s(���|�] \}}|��|d�|�ffV��qdS�)�N)lowerastext)r ���doctitler ���r ���r���r���K���s���r���anyc�������������S���s*���t�|�trt|�S�td|�t|�f�d�S�)Nz#can't serialize value: %r (type=%r)) isinstancer���str TypeErrortype)valuer ���r ���r���encodeT���s���� z write_role_index.<locals>.encodezroleindex.jsonT),:) sort_keys separatorsdefaultpretty)z, z: )r$���indentzunknown role_index_style: %rwzutf-8)encoding)buildernameconfigrole_index_styledictenv domaindataitemstitlescopyupdateospathjoinoutdir ValueErrorcodecsopenjsondump)appstyleindexr ���targetkwdsfhr ���r ���r���write_role_index7���s,����   rD���c�������������C���s*���|��dd�d�dd�}|�d|�dtiS�)Nr-���r���c�������������S���s ���t�|��g�S�)N)rD���)r>���r ���r ���r���wrappern���s����zsetup.<locals>.wrapperzhtml-collect-pagesversion)add_config_valueconnectr���)r>���rE���r ���r ���r���r���g���s���� )__doc__ __future__r���r���r���r:���logging getLogger__name__logr<���r5���Z sphinx.localer��� cloud_spthemer���__all__rD���r���r ���r ���r ���r���<module>!���s���   0����������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/table_styling.cpython-34.pyc��0000644�0001750�0001750�00000015242�13047000756�033173� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ #X#�����������������@���s��d��Z��d�d�l�m�Z�e�r/�d�d�l�m�Z�n�d�d�l�m�Z�d�d�l�Z�d�d�l�m�Z�d�d�l �m �Z �d�d�l �m �Z �d�d �l �m�Z�d�d �l�m�Z�d�d �l�m�Z�d�d �l�m�Z�m�Z�d �g�Z�d�Z�d�Z�d�d���Z�d�d���Z�e�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�� Z�d�d���Z�i�d �d!�6d �d"�6d �d#�6d �d$�6d%�d&�6d%�d'�6d%�d(�6d%�d)�6Z�d*�d+���Z�d,�d-���Z�i�d(�d.�6d/�d0�6d1�d2�6d(�d3�6d/�d/�6d1�d1�6Z �d4�d5���Z!�Gd6�d7���d7�e��Z"�d8�d9���Z#�d:�d ���Z$�d�S);zDcloud_sptheme.ext.table_styling -- add directives for styling tables����)PY3) zip_longest) izip_longestN)copyfile)nodes) directives)RSTTable)StandaloneHTMLBuilder) __version__) _root_diris_cloud_themesetupZtable_styling_embed_cssZtable_styling_classc�������������C���s'���d�|��k�r�|��j��d��S|��j����Sd��S)N,)split)argument�r���G/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.py_split_argument_list(���s����  r���c����������������sz���t��|���}�t�|��d�k�rN�t���f�d�d���|�d�D��rN�|�d�}�n�����f�d�d�����f�d�d���|�D�S) N���c�������������3���s���|��]�}�|���k�Vq�d��S)Nr���).0c)argmapr���r��� <genexpr>0���s����z&_parse_argument_map.<locals>.<genexpr>r���c���������� ������s;���y ���|��SWn(�t��k �r6�t�d��|��f���Yn�Xd��S)Nzinvalid %s: %r)KeyError ValueError)arg)r���paramr���r���norm2���s����  z!_parse_argument_map.<locals>.normc����������������s���g��|��]�}���|���q�Sr���r���)r���r���)r���r���r��� <listcomp>7���s��� �z'_parse_argument_map.<locals>.<listcomp>)r���lenall)r���r���r���argsr���)r���r���r���r���_parse_argument_map.���s ���� 5 r"���lleftrrightr���centerjjustifycentered justifiedc�������������C���s���t��|��t�d��S)zkconvert into list of alignment options. raise ``ValueError`` if no args found, or invalid strings. alignment)r"���_alignment_map)r���r���r���r���alignment_listF���s����r.���TtruetyesyFfalsefnonc�������������C���s���t��|��t�d��S)z$convert to list of true/false valuesz boolean value)r"��� _bool_map)r���r���r���r��� bool_listR���s����r8���c�������������C���s���t��|���}�d�d���|�D�S)z"convert to list of list of classesc�������������S���s���g��|��]�}�t��j�|���q�Sr���)r��� class_option)r���r���r���r���r���r���Y���s��� �z%class_option_list.<locals>.<listcomp>)r���)r���r!���r���r���r���class_option_listV���s���� r:���0single1double2nonec�������������C���s���t��|��t�d��S)Nz divider style)r"��� _divider_map)r���r���r���r��� divider_listd���s����rB���c���������������@���st���e��Z�d��Z�e�j�j���Z�e�j�i�e�j�d�6e�j �d�6e �d�6e �d�6e �d�6e �d�6�d�d���Z�d �d ���Z�d �S) ExtendedRSTTablezheader-columnswidthszcolumn-alignmentzcolumn-wrappingzcolumn-classeszcolumn-dividersc�������������C���sC���t��j�|���}�|�r?�t�|�d�t�j��r?�|��j�|�d��n��|�S)Nr���)r���run isinstancer���table_update_table_classes)selfresultr���r���r���rE������s����zExtendedRSTTable.runc����������������s��t���t�j��s�t��|��j�j�j�j�j�}�t �|�t ��}�|�rm�x(�|�j ���D]�}��d�j �|��qO�Wn��|��j �j�d��p�d�}�|��j �j�d��}�|��j �j�d������d��k�r�d��}�n���f�d�d���}�f��}�|��j �j�d�|��|��j �j�d �|��|��j �j�d �|��f�} ��f�d �d ���} �| �t�j��} �| �s=d��Sd�} �x| �D]} �t��| �t�j��r|�r| �t�|��k��r|�| �| �d �<n��| �|�k��rd�| �d�<n��| �d�7} �qJn��t��| �t�j�t�j�f��st��x| �j�D]}�t��|�t�j��st��x�t�t�|�| ���D]�\�}�\�}�}�}�}�|�d��k�rFt�d���n��t��|�t�j��s^t��|�d�}�|�r|�j �|�d��n��|�d�k�r|�j �d��n��|�r|�j�|��n��|�r|�j �|�|��d��|�j �|�|�d��d��qqWqWqJWd��S)Nclasseszheader-columnsr���rD���zcolumn-dividersc���������� ������s)���y ���|��SWn�t��k �r$�d�SYn�Xd��S)Nr5���) IndexError)idx)dividersr���r��� get_divider���s����  z;ExtendedRSTTable._update_table_classes.<locals>.get_dividerzcolumn-alignmentzcolumn-wrappingzcolumn-classesc����������������s+���x$���j��D]�}�t�|�|���r �|�Sq �Wd��S)N)childrenrF���)clschild)rG���r���r���locate���s����z6ExtendedRSTTable._update_table_classes.<locals>.locatecolwidthr���stubz$not enough columns for field optionsz-alignFnowrapz -left-dividerz-right-divider)rF���r���rG���AssertionErrorstatedocumentsettingsenvconfiggetattr CLASS_KEYr���appendoptionsgettgroupcolspecr���theadtbodyrP���row enumerater���r���entryextend)rI���rG���r\���rK���rQ���Z header_colsrD���rO���EMPTYoptsrS���rb���colrR���rf���rM���rh���alignwrapclistr���)rN���rG���r���rH������s^����      !+   z&ExtendedRSTTable._update_table_classesN)__name__ __module__ __qualname__r��� option_speccopyupdater���nonnegative_intpositive_int_listr.���r8���r:���rB���rE���rH���r���r���r���r���rC���j���s���      rC���c����������������s���|��j����t���t��s�d��St�|��j�t��}�|�d��k�rP�t�|��j�j�� }�n��|�sZ�d��Sd��|��j�����j ������f�d�d���}�|���_ �d��S)Nztable_styling.cssc�����������������sK������t��j�j�t�d���}��t��j�j���j�d���}�t�|��|��d��S)Next_static)ospathjoinr ���outdirr���)sourcetarget)buildernameorigr���r���wrapper���s����z prepare_builder.<locals>.wrapper) r���rF���r ���r]���r\��� EMBED_KEYr ��� html_themeadd_stylesheetcopy_static_files)appvaluer���r���)r���r���r���r���prepare_builder���s����    r���c�������������C���sQ���|��j��t�d��d��|��j��t�d�d��|��j�d�t��|��j�d�t��i�t�d�6S)Nhtmlz styled-tablerG���zbuilder-initedversion)add_config_valuer���r^��� add_directiverC���connectr���r ���)r���r���r���r���r ������s ����)%__doc__cloud_sptheme.utilsr��� itertoolsr���r���rz���shutilr���docutilsr���docutils.parsers.rstr���Z&docutils.parsers.rst.directives.tablesr���sphinx.builders.htmlr ��� cloud_spthemer ���r ���r ���__all__r���r^���r���r"���dictr-���r.���r7���r8���r:���rA���rB���rC���r���r ���r���r���r���r���<module>���s\���          h ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/table_styling.cpython-35.pyc��0000644�0001750�0001750�00000015211�13275347334�033201� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ߑZ,�����������������@���s9��d��Z��d�d�l�m�Z�e�r/�d�d�l�m�Z�n�d�d�l�m�Z�d�d�l�Z�d�d�l�m�Z�d�d�l �m �Z �d�d�l �m �Z �d�d �l �m�Z�y�d�d�l�m �Z �Wn�e�k �r�Yn�Xd�d �l�m�Z�d�d �l�m�Z�m�Z�d�d �l�m�Z�d �g�Z�d�Z�d�Z�d�d���Z�d�d���Z�e�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�� Z�d�d���Z�d �d!�d"�d!�d#�d!�d$�d!�d%�d&�d'�d&�d(�d&�d)�d&�i�Z�d*�d+���Z�d,�d-���Z �d.�d(�d/�d0�d1�d2�d3�d(�d0�d0�d2�d2�i�Z!�d4�d5���Z"�Gd6�d7���d7�e ��Z#�e�j$�j%�e�d8�d9�d:��Z&�d;�d<���Z'�d=�d ���Z(�d�S)>zDcloud_sptheme.ext.table_styling -- add directives for styling tables����)PY3) zip_longest) izip_longestN)nodes) directives)RSTTable)StandaloneHTMLBuilder) __version__) _root_diris_cloud_theme)add_static_filesetupZtable_styling_embed_cssZtable_styling_classc�������������C���s'���d�|��k�r�|��j��d��S|��j����Sd��S)N,)split)argument�r���G/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.py_split_argument_list-���s����  r���c����������������sw���t��|���}�t�|��d�k�rK�t���f�d�d���|�d�D��rK�|�d�}����f�d�d�����f�d�d���|�D�S) N���c�������������3���s���|��]�}�|���k�Vq�d��S)Nr���).0c)argmapr���r��� <genexpr>5���s����z&_parse_argument_map.<locals>.<genexpr>r���c���������� ������s;���y ���|��SWn(�t��k �r6�t�d��|��f���Yn�Xd��S)Nzinvalid %s: %r)KeyError ValueError)arg)r���paramr���r���norm7���s����  z!_parse_argument_map.<locals>.normc����������������s���g��|��]�}���|���q�Sr���r���)r���r���)r���r���r��� <listcomp><���s��� �z'_parse_argument_map.<locals>.<listcomp>)r���lenall)r���r���r���argsr���)r���r���r���r���_parse_argument_map3���s ���� 5 r"���lleftrrightr���centerjjustifycenteredZ justifiedc�������������C���s���t��|��t�d��S)zkconvert into list of alignment options. raise ``ValueError`` if no args found, or invalid strings. alignment)r"���_alignment_map)r���r���r���r���alignment_listK���s����r-���trueTtyesyfalseFfnonc�������������C���s���t��|��t�d��S)z$convert to list of true/false valuesz boolean value)r"��� _bool_map)r���r���r���r��� bool_listW���s����r7���c�������������C���s���t��|���}�d�d���|�D�S)z"convert to list of list of classesc�������������S���s���g��|��]�}�t��j�|���q�Sr���)r��� class_option)r���r���r���r���r���r���^���s��� �z%class_option_list.<locals>.<listcomp>)r���)r���r!���r���r���r���class_option_list[���s���� r9���01single2doublenonec�������������C���s���t��|��t�d��S)Nz divider style)r"��� _divider_map)r���r���r���r��� divider_listi���s����rA���c���������������@���st���e��Z�d��Z�e�j�j���Z�e�j�d�e�j�d�e�j �d�e �d�e �d�e �d�e �d�e �i��d�d ���Z�d �d ���Z�d �S) ExtendedRSTTablezheader-columnswidthszcolumn-alignmentzheader-alignmentzcolumn-wrappingzcolumn-classeszcolumn-dividersc�������������C���s@���t��j�|���}�|�r<�t�|�d�t�j��r<�|��j�|�d��|�S)Nr���)r���run isinstancer���table_update_table_classes)selfresultr���r���r���rD������s����zExtendedRSTTable.runc����������������s��t����t�j��s�t��|��j�j�j�j�j�}�t �|�t ��}�|�rj�x%�|�j ���D]�}���d�j �|��qO�W|��j �}�|�j�d��p�d�}�|�j�d��}�f��}�t�t�|�j�d�|��|�j�d�|��|�j�d�|��|�j�d�|��|�j�d �|����} �d��g�d �} ���f�d �d ���} �| �t�j��} �| �s/d��Sd�} �xN| �D]F}�t��|�t�j��r|�rz| �t�|��k��rz|�| �|�d �<| �|�k��rd�|�d�<| �d�7} �q<t��|�t�j�t�j�f��st��x|�j�D]}�t��|�t�j��}�t��|�t�j��st��d�}�d��}�x/t�|��D]!\�}�}�y�| �|�}�Wn�t�k �rE| �}�Yn�X|�\�}�}�}�}�}�|�rg|�}�|�d��k�ryd�}�t��|�t�j��st��|�d�}�|�r|�j �|�d��|�d�k�r|�j �d��|�r|�j�|��|�r|�j �|�d��|�d��k �r|�j �|�d��|�}�|�d�|�j�d�d��7}�qW|�r|�t�| ��k��r| �|�\�}�}�}�}�}�|�r|�j �|�d��qWq<Wd��S)Nclasseszheader-columnsr���rC���zcolumn-alignmentzheader-alignmentzcolumn-wrappingzcolumn-classeszcolumn-dividers���c����������������s+���x$���j��D]�}�t�|�|���r �|�Sq �Wd��S)N)childrenrE���)clschild)rF���r���r���locate���s����z6ExtendedRSTTable._update_table_classes.<locals>.locatecolwidthr���stubr$���z-alignFnowrapz -left-dividerz-right-dividermorecols)rE���r���rF���AssertionErrorstatedocumentsettingsenvconfiggetattr CLASS_KEYr���appendoptionsgettupler���tgroupcolspecr���theadtbodyrL���row enumerate IndexErrorentryextend)rH���rF���rY���rJ���rM���r]���Z header_colsrC���EMPTYoptsZ NULL_OPTIONSrO���r`���Z cgroup_idxrN���rd���Z is_header_rowZcolidxZprev_col_classesidxcolZcol_optsalignZ header_alignwrapclistZdividerr���)rF���r���rG������s����      !        z&ExtendedRSTTable._update_table_classesN)__name__ __module__ __qualname__r��� option_speccopyupdater���nonnegative_intpositive_int_listr-���r7���r9���rA���rD���rG���r���r���r���r���rB���p���s���     rB���extstaticztable_styling.cssc�������������C���sn���|��j��}�t�|�t��s�d��St�|��j�t��}�|�d��k�rM�t�|��j�j�� }�|�sW�d��St�|�t �d�d�d��S)N stylesheetT) builderrE���r���rZ���rY��� EMBED_KEYr ��� html_themer ���css_path)appr{���valuer���r���r���prepare_builder��s����  r���c�������������C���s{���|��j��t�d��d��|��j��t�d�d��t�j�}�|�j�d��t�k�rQ�|�j�d��|��j�d�t ��|��j �d�t ��d�t �i�S)Nhtmlz styled-tablerF���zbuilder-initedversion) add_config_valuer|���r[���r��� _directivesr^���r���pop add_directiverB���connectr���r ���)r���Z directive_mapr���r���r���r �����s����  ))__doc__cloud_sptheme.utilsr��� itertoolsr���r���osdocutilsr���docutils.parsers.rstr���Z&docutils.parsers.rst.directives.tablesr���sphinx.builders.htmlr���sphinx.directives.patches ImportErrorZ cloud_spthemer ���r ���r ���r ���__all__r|���r[���r���r"���dictr,���r-���r6���r7���r9���r@���rA���rB���pathjoinr~���r���r ���r���r���r���r���<module>���sd���               ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/table_styling.cpython-37.pyc��0000664�0001750�0001750�00000015543�13562561130�033204� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������B ����G]2�������������� ���@���sz��d�Z�ddlmZ�er"ddlmZ�n ddlmZ�ddlZddlmZ�ddl m Z �ddl m Z �dd l mZ�yddlm Z �W�n�ek r���Y�nX�dd lmZ�dd lmZmZ�dd lmZ�d gZdZdZdZdd�Zdd�ZedgZeddddddddddd Zdd�Z dddddddddZ!d d!�Z"d"d#�Z#d$d%d&d$d%d&d'Z$d(d)�Z%G�d*d+�d+e Z&ej'(ed,d-d.Z)d/d0�Z*d1d �Z+dS�)2zDcloud_sptheme.ext.table_styling -- add directives for styling tables����)PY3) zip_longest) izip_longestN)nodes) directives)RSTTable)StandaloneHTMLBuilder) __version__) _root_diris_cloud_theme)add_static_filesetupZtable_styling_embed_cssZtable_styling_classZtable_styling_default_alignc�������������C���s���d|�kr|��dS�|���S�d�S�)N,)split)argument�r���G/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.py_split_argument_list0���s���� r���c����������������sV���t�|�}t|dkr6t�fdd|d�D�r6|d�}�fddfdd|D�S�) N���c�������������3���s���|�]}|�kV��qd�S�)Nr���).0c)argmapr���r��� <genexpr>8���s����z&_parse_argument_map.<locals>.<genexpr>r���c����������������s2���y�|��S��t�k r,���td|�f�Y�nX�d�S�)Nzinvalid %s: %r)KeyError ValueError)arg)r���paramr���r���norm:���s����z!_parse_argument_map.<locals>.normc����������������s���g�|�] }�|qS�r���r���)r���r���)r���r���r��� <listcomp>?���s����z'_parse_argument_map.<locals>.<listcomp>)r���lenall)r���r���r���argsr���)r���r���r���r���_parse_argument_map6���s ����&r"���centeredleftrightcenterjustify) lrr���jr$���r%���r&���r#���r'���Z justifiedc�������������C���s ���t�|�tdS�)zkconvert into list of alignment options. raise ``ValueError`` if no args found, or invalid strings. alignment)r"���_alignment_map)r���r���r���r���alignment_listS���s����r-���TF)truetyesyfalsefnonc�������������C���s ���t�|�tdS�)z$convert to list of true/false valuesz boolean value)r"��� _bool_map)r���r���r���r��� bool_list_���s����r7���c�������������C���s���t�|�}dd�|D�S�)z"convert to list of list of classesc�������������S���s���g�|�]}t�|qS�r���)r��� class_option)r���r���r���r���r���r���f���s����z%class_option_list.<locals>.<listcomp>)r���)r���r!���r���r���r���class_option_listc���s����r9���r4���singledouble)012noner:���r;���c�������������C���s ���t�|�tdS�)Nz divider style)r"��� _divider_map)r���r���r���r��� divider_listq���s����rA���c������������ ���@���sX���e�Zd�Zej�Zeejej e e e e e d�edd�Zdd�Zdd�Zdd �Zd S�) ExtendedRSTTable)zheader-columnswidthszcolumn-alignmentzheader-alignmentzcolumn-wrappingzcolumn-classeszcolumn-dividersc�������������C���s���|�j�jjjjS�)z9 custom hack to get config object easily )statedocumentsettingsenvconfig)selfr���r���r���rH������s����zExtendedRSTTable.configc�������������C���s0���t�|�}|r,t|d�tjr,|�|d��|S�)Nr���)r���run isinstancer���table_update_table_classes)rI���resultr���r���r���rJ������s���� zExtendedRSTTable.runc���������� ������s��t��tjst|�j}t|t}|rDx|�D�]}�d�|�q.W�|� ��|�j }| dp`d}| d}d}t t | d|| d|| d|| d || d |} d�gd �} �fd d } | tj} | sd�S�d} x| D�]}t�|tjr0|r| t|k�r|| �|d<�| |k�r&d|d<�| d7�} qt�|tjtjfsHtxn|jD�]b}t�|tj}t�|tjsvtd}d�}xt|D�]\}}y | |�}W�n�tk r���| }Y�nX�|\}}}}}|r|}|d�krd}t�|tjst|d�}|r ||d��|dkr |d�|r0||�|r\||d��|d�k r\||d��|}|d| dd�7�}qW�|rR|t| k�rR| |�\}}}}}|rR||d��qRW�qW�d�S�)Nclasseszheader-columnsr���rC���r���zcolumn-alignmentzheader-alignmentzcolumn-wrappingzcolumn-classeszcolumn-dividers���c����������������s"���x�j�D�]}t||�r|S�qW�d�S�)N)childrenrK���)clschild)rL���r���r���locate���s����  z6ExtendedRSTTable._update_table_classes.<locals>.locatecolwidthr���stubr$���z-alignFnowrapz -left-dividerz-right-dividermorecols)rK���r���rL���AssertionErrorrH���getattr CLASS_KEYr���append_update_table_alignmentoptionsgettupler���tgroupcolspecr���theadtbodyrQ���row enumerate IndexErrorentryextend)rI���rL���rH���rO���rR���r^���Z header_colsrC���EMPTYoptsZ NULL_OPTIONSrT���ra���Z cgroup_idxrS���re���Z is_header_rowZcolidxZprev_col_classesidxcolZcol_optsalignZ header_alignwrapclistZdividerr���)rL���r���rM������s����                    z&ExtendedRSTTable._update_table_classesc�������������C���sV���|�j�}|jd}|rdS�t|j}|r:t|d�r:dS�t|t}|rR||jd<�dS�)z custom method to help with table alignment -- add default alignment, UNLESS one of cloud's table alignment directives is present rn���NrO���) rH��� attributesr_���r ��� html_theme_cloud_table_align_classes intersectionrZ���TABLE_DEFAULT_ALIGN_KEY)rI���rL���rH���rn���Z for_cloudr���r���r���r]�����s����   z(ExtendedRSTTable._update_table_alignmentN)__name__ __module__ __qualname__r��� option_speccopyupdater���nonnegative_intpositive_int_listr-���r7���r9���rA���propertyrH���rJ���rM���r]���r���r���r���r���rB���x���s���   wrB���extstaticztable_styling.cssc�������������C���s6���|�j�}t|tsd�S�t|�jts$d�S�t|tdd�d�S�)NT) stylesheet)builderrK���r���rZ���rH��� EMBED_KEYr ���css_path)appr���r���r���r���prepare_builder2��s ����  r���c�������������C���sh���|��tdd�|��tdd�|��tdd�tj}|dtkrH|d�|� dt �|� dt �dt iS�)NThtmlz styled-table�rL���zbuilder-initedversion)add_config_valuer���r[���ru���r��� _directivesr_���r���pop add_directiverB���connectr���r ���)r���Z directive_mapr���r���r���r ���@��s����   ),__doc__cloud_sptheme.utilsr��� itertoolsr���r���osdocutilsr���docutils.parsers.rstr���Z&docutils.parsers.rst.directives.tablesr���sphinx.builders.htmlr���sphinx.directives.patches ImportError cloud_spthemer ���r ���r ���r ���__all__r���r[���ru���r���r"���setrs���dictr,���r-���r6���r7���r9���r@���rA���rB���pathjoinr���r���r ���r���r���r���r���<module>���sj���          �9�������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/__pycache__/table_styling.cpython-38.pyc��0000644�0001750�0001750�00000015542�13565037021�033202� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������U ����G]2������������������ ���@���sz��d�Z�ddlmZ�er"ddlmZ�n ddlmZ�ddlZddlmZ�ddl m Z �ddl m Z �dd l mZ�zddlm Z �W�n�ek r���Y�nX�dd lmZ�dd lmZmZ�dd lmZ�d gZdZdZdZdd�Zdd�ZedgZeddddddddddd Zdd�Z dddddddddZ!d d!�Z"d"d#�Z#d$d%d&d$d%d&d'Z$d(d)�Z%G�d*d+�d+e Z&ej'(ed,d-d.Z)d/d0�Z*d1d �Z+dS�)2zDcloud_sptheme.ext.table_styling -- add directives for styling tables����)PY3) zip_longest) izip_longestN)nodes) directives)RSTTable)StandaloneHTMLBuilder) __version__) _root_diris_cloud_theme)add_static_filesetupZtable_styling_embed_cssZtable_styling_classZtable_styling_default_alignc�����������������C���s���d|�kr|��dS�|���S�d�S�)N,)splitargument�r���G/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.py_split_argument_list0���s���� r���c��������������������sV���t�|�}t|dkr6t�fdd|d�D�r6|d�}�fddfdd|D�S�) N���c�����������������3���s���|�]}|�kV��qd�S�Nr���).0c)argmapr���r��� <genexpr>8���s�����z&_parse_argument_map.<locals>.<genexpr>r���c��������������������s4���z �|��W�S��t�k r.���td|�f�Y�nX�d�S�)Nzinvalid %s: %r)KeyError ValueError)arg)r���paramr���r���norm:���s���� z!_parse_argument_map.<locals>.normc��������������������s���g�|�] }�|qS�r���r���r���r���)r���r���r��� <listcomp>?���s�����z'_parse_argument_map.<locals>.<listcomp>)r���lenall)r���r���r���argsr���)r���r���r���r���_parse_argument_map6���s ����&r%���centeredleftrightcenterjustify) lrr���jr'���r(���r)���r&���r*���Z justifiedc�����������������C���s ���t�|�tdS�)zkconvert into list of alignment options. raise ``ValueError`` if no args found, or invalid strings. alignment)r%���_alignment_mapr���r���r���r���alignment_listS���s����r0���TF)truetyesyfalsefnonc�����������������C���s ���t�|�tdS�)z$convert to list of true/false valuesz boolean value)r%��� _bool_mapr���r���r���r��� bool_list_���s����r:���c�����������������C���s���t�|�}dd�|D�S�)z"convert to list of list of classesc�����������������S���s���g�|�]}t�|qS�r���)r��� class_optionr ���r���r���r���r!���f���s�����z%class_option_list.<locals>.<listcomp>)r���)r���r$���r���r���r���class_option_listc���s����r<���r7���singledouble)012noner=���r>���c�����������������C���s ���t�|�tdS�)Nz divider style)r%��� _divider_mapr���r���r���r��� divider_listq���s����rD���c���������������� ���@���sX���e�Zd�Zej�Zeejej e e e e e d�edd�Zdd�Zdd�Zdd �Zd S�) ExtendedRSTTable)header-columnswidthscolumn-alignmentheader-alignmentcolumn-wrappingcolumn-classescolumn-dividersc�����������������C���s���|�j�jjjjS�)z9 custom hack to get config object easily )statedocumentsettingsenvconfig)selfr���r���r���rQ������s����zExtendedRSTTable.configc�����������������C���s0���t�|�}|r,t|d�tjr,|�|d��|S�)Nr���)r���run isinstancer���table_update_table_classes)rR���resultr���r���r���rS������s���� zExtendedRSTTable.runc�������������� ������s��t��tjst|�j}t|t}|r@|�D�]}�d�|�q,|� ��|�j }| dp\d}| d}d}t t | d|| d|| d|| d || d |} d�gd �} �fd d } | tj} | sd�S�d} | D�]}t�|tjr(|r | t|k�r || �|d<�| |k�rd|d<�| d7�} qt�|tjtjfs@t|jD�]^}t�|tj}t�|tjsjtd}d�}t|D�]\}}z | |�}W�n�tk r���| }Y�nX�|\}}}}}|r|}|d�krd}t�|tjst|d�}|r||d��|dkr|d�|r"||�|rN||d��|d�k rN||d��|}|d| dd�7�}qz|rF|t| k�rF| |�\}}}}}|rF||d��qFqd�S�)NclassesrF���r���rG���r���rH���rI���rJ���rK���rL������c��������������������s"����j�D�]}t||�r|��S�qd�S�r���)childrenrT���)clschildrU���r���r���locate���s����   z6ExtendedRSTTable._update_table_classes.<locals>.locatecolwidthr���stubr'���z-alignFnowrapz -left-dividerz-right-dividermorecols)rT���r���rU���AssertionErrorrQ���getattr CLASS_KEYr���append_update_table_alignmentoptionsgettupler���tgroupcolspecr"���theadtbodyrZ���row enumerate IndexErrorentryextend)rR���rU���rQ���rX���r[���rh���Z header_colsrG���EMPTYoptsZ NULL_OPTIONSr^���rk���Z cgroup_idxr\���ro���Z is_header_rowZcolidxZprev_col_classesidxcolZcol_optsalignZ header_alignwrapclistZdividerr���r]���r���rV������s����                        z&ExtendedRSTTable._update_table_classesc�����������������C���sV���|�j�}|jd}|rdS�t|j}|r:t|d�r:dS�t|t}|rR||jd<�dS�)z custom method to help with table alignment -- add default alignment, UNLESS one of cloud's table alignment directives is present rx���NrX���) rQ��� attributesri���r ��� html_theme_cloud_table_align_classes intersectionrd���TABLE_DEFAULT_ALIGN_KEY)rR���rU���rQ���rx���Z for_cloudr���r���r���rg�����s����   z(ExtendedRSTTable._update_table_alignmentN)__name__ __module__ __qualname__r��� option_speccopyupdater���nonnegative_intpositive_int_listr0���r:���r<���rD���propertyrQ���rS���rV���rg���r���r���r���r���rE���x���s���   wrE���extstaticztable_styling.cssc�����������������C���s6���|�j�}t|tsd�S�t|�jts$d�S�t|tdd�d�S�)NT) stylesheet)builderrT���r���rd���rQ��� EMBED_KEYr ���css_path)appr���r���r���r���prepare_builder2��s ����  r���c�����������������C���sh���|��tdd�|��tdd�|��tdd�tj}|dtkrH|d�|� dt �|� dt �dt iS�)NThtmlz styled-table�rU���zbuilder-initedversion)add_config_valuer���re���r���r��� _directivesri���r���pop add_directiverE���connectr���r ���)r���Z directive_mapr���r���r���r ���@��s����   ),__doc__cloud_sptheme.utilsr��� itertoolsr���r���osdocutilsr���docutils.parsers.rstr���Z&docutils.parsers.rst.directives.tablesr���sphinx.builders.htmlr���sphinx.directives.patches ImportError cloud_spthemer ���r ���r ���r ���__all__r���re���r���r���r%���setr}���dictr/���r0���r9���r:���r<���rC���rD���rE���pathjoinr���r���r ���r���r���r���r���<module>���sx���           ��� �9��������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/allow_unreferenced_footnotes.py�����������0000644�0001750�0001750�00000002145�13565036637�032026� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������""" cloud_sptheme.ext.allow_unreferenced_footnotes -- hack that silences "Footnote XXX is not referenced" warnings in Sphinx. TODO: include this in documentation. """ #============================================================================= # imports #============================================================================= # core import os # site from sphinx.transforms import UnreferencedFootnotesDetector # pkg from cloud_sptheme import __version__ # local __all__ = [ "setup", ] #============================================================================= # register extension #============================================================================= def setup(app): # remove transform from list transforms = app.registry.get_transforms() try: transforms.remove(UnreferencedFootnotesDetector) except ValueError: pass # identifies the version of our extension return {'version': __version__} #============================================================================= # eof #============================================================================= ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/auto_redirect.py��������������������������0000664�0001750�0001750�00000015410�13562544741�026712� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������""" ================================================================== :mod:`cloud_sptheme.ext.auto_redirect` -- Redirect Deprecated URLs ================================================================== .. versionadded:: 1.9 Overview ======== This extension is helpful for when html documentation has been relocated to a new host; e.g. moving from ``pythonhosted.org`` to ``readthedocs.io``. Once enabled, it adds a helpful "Documentation has moved" message to the top of every page, and automatically redirects the user as well. Configuration ============= This extension looks for the following config options: ``auto_redirect_subject`` subject to insert into message. defaults to ``The {project name} documentation``. ``auto_redirect_domain_url`` url to redirect user to. no message or redirect will happen if this isn't set. ``auto_redirect_domain_footer`` optional footer text to append to message Internals ========= This should work with other sphinx themes, the js & css is (mostly) generic. .. todo:: the "redirect to exact page" part of JS code currently only works with this theme; would like to fix that. .. todo:: support configuring redirects to other pages within same documentation. .. todo:: if user has dismissed "auto redirect", remember via cookie? """ #============================================================================= # imports #============================================================================= # core import os # site from docutils.nodes import raw from sphinx.builders.html import StandaloneHTMLBuilder from sphinx.util.pycompat import htmlescape # pkg from cloud_sptheme import __version__, _root_dir, is_cloud_theme from cloud_sptheme.utils import add_static_file # local __all__ = [ "setup", ] #============================================================================= # patch builder to copy css file (if needed) #============================================================================= ext_static_dir = os.path.join(_root_dir, "ext", "static") cloud_base_js_path = os.path.join(_root_dir, "themes", "cloud", "static", "cloud_base.js") class RedirectHelper(object): template_path = os.path.join(ext_static_dir, "auto_redirect.html_t") css_path = os.path.join(ext_static_dir, "auto_redirect.css") def __init__(self, app): self.app = app @property def for_html(self): return isinstance(self.app.builder, StandaloneHTMLBuilder) @property def domain_subject(self): config = self.app.config return config.auto_redirect_domain_subject or \ "The %s documentation" % (config.project,) @property def domain_url(self): return self.app.config.auto_redirect_domain_url @property def domain_root(self): root = self.app.config.auto_redirect_domain_root # XXX: use urljoin here? if not root: return self.domain_url if root[:1] == "/" and root[:2] != "//": return self.domain_url + root return root @property def domain_footer(self): return self.app.config.auto_redirect_domain_footer @property def timeout(self): return self.app.config.auto_redirect_timeout or 10 def install_static_assets(app): # skip unless html builder & redirect configured helper = RedirectHelper(app) if not helper.for_html or not helper.domain_url: return # make sure JS is added if not is_cloud_theme(app.config.html_theme): add_static_file(app.builder, cloud_base_js_path, javascript=True) # make sure needed css styling gets included when building html add_static_file(app.builder, helper.css_path, stylesheet=True) # FIXME: This doesn't get called for auto-generated pages, e.g. search page & genindex. # Need to modify this code to get run as part of builder.handle_page() call, # such as via event that insert_canonical_link() is using below. def prepend_redirect(app, doctree): """ called after doctree has been read; inserted "Raw" node with our content. """ # skip unless configured, and using html builder helper = RedirectHelper(app) if not helper.for_html or not helper.domain_url: return # render fragment into insert builder = app.builder renderer = builder.templates ctx = dict(app=app, redirector=helper) with open(helper.template_path) as fh: content = renderer.render_string(fh.read(), ctx) # insert raw node w/ content node = raw(content, content, format="html") doctree.insert(0, node) def insert_canonical_link(app, pagename, templatename, context, doctree): # skip unless html builder & redirect configured helper = RedirectHelper(app) root_url = helper.domain_root if not helper.for_html or not root_url: return # XXX: any gotchas w/ generating url from pagename this way? url = "%s/%s.html" % (root_url.rstrip("/"), pagename) # insert "canonical" link to help search engines # XXX: skipping this if another ext sets this? # XXX: split this out under separate name / extension? meta = context.get("metatags", "") context['metatags'] = meta + '<link rel="canonical" href="%s" />\n' % htmlescape(url, True) #============================================================================= # register extension #============================================================================= def setup(app): # # register config vars # # title to use when referring to project. # defaults to "The {project} documentation" app.add_config_value("auto_redirect_domain_subject", None, "html") # base url to redirect to -- if not set, extension does nothing. app.add_config_value("auto_redirect_domain_url", None, "html") # optional url suffix to add before adding per-page redirects. app.add_config_value("auto_redirect_domain_root", None, "html") # optional html to append to message app.add_config_value("auto_redirect_domain_footer", None, "html") # seconds before redirecting via JS app.add_config_value("auto_redirect_timeout", 10, "html") # # connect events # XXX: can we connect events on the fly? could do single check when builder init'd, # and attach events there as needed. could then make everything a method # of the redirect helper. # app.connect("builder-inited", install_static_assets) app.connect("doctree-read", prepend_redirect) app.connect("html-page-context", insert_canonical_link) # # identifies the version of our extension # return {'version': __version__} #============================================================================= # eof #============================================================================= ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/autoattribute_search_bases.py�������������0000664�0001750�0001750�00000005263�13562544741�031464� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������""" cloud_sptheme.ext.autoattribute_search_bases -- monkeypatches autodoc so ``autoattribute`` searches base classes for attr doc. """ #============================================================================= # imports #============================================================================= # core import logging; log = logging.getLogger(__name__) # site # pkg from cloud_sptheme import __version__ from cloud_sptheme.utils import patchapplier, monkeypatch # local __all__ = [ "setup", ] #============================================================================= # patch #============================================================================= @patchapplier def _patch_autoattribute(): from sphinx.ext.autodoc import AttributeDocumenter, ModuleAnalyzer, PycodeError @monkeypatch(AttributeDocumenter) def add_content(_wrapped, self, *args, **kwds): if not self._datadescriptor and self.analyzer and self.objpath: attr_docs = self.analyzer.find_attr_docs() key = ('.'.join(self.objpath[:-1]), self.objpath[-1]) if key not in attr_docs: # look for parent class w/ correct attr if hasattr(self.parent, "__mro__"): for basecls in self.parent.__mro__[1:]: try: analyzer = ModuleAnalyzer.for_module(basecls.__module__) base_attr_docs = analyzer.find_attr_docs() except PycodeError as err: continue # FIXME: need qualname or equivalent for basecls base_key = (basecls.__name__, self.objpath[-1]) if base_key in base_attr_docs: # insert data into existing analyzer # XXX: might be prettier way to handle this, # (esp so actual source file was reported) # but would have to duplicate much of add_content() attr_docs[key] = base_attr_docs[base_key] break return _wrapped(self, *args, **kwds) #============================================================================= # sphinx entry point #============================================================================= def setup(app): # don't apply our patch unless actually loaded by sphinx _patch_autoattribute() # identifies the version of our extension return {'version': __version__} #============================================================================= # eoc #============================================================================= ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/autoattribute_search_bases.pyc������������0000644�0001750�0001750�00000003654�13014220543�031606� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ #Xc�����������@���sl���d��Z��d�d�l�Z�e�j�e��Z�d�d�l�m�Z�d�d�l�m�Z�m �Z �d�g�Z �e�d����Z �d���Z �d�S(���s��� cloud_sptheme.ext.autoattribute_search_bases -- monkeypatches autodoc so ``autoattribute`` searches base classes for attr doc. iN(���t ���__version__(���t ���patchappliert ���monkeypatcht���setupc�������������s>���d�d�l��m�}��m���m��t�|������f�d����}�d��S(���Ni(���t���AttributeDocumentert���ModuleAnalyzert ���PycodeErrorc��� ���������s��|�j�� r�|�j�r�|�j�r�|�j�j���}�d�j�|�j�d� �|�j�d�f�}�|�|�k�r�t�|�j�d��r�x�|�j�j�d�D]u�}�y"���j�|�j ��}�|�j���}�Wn��k �r�} �q}�n�X|�j �|�j�d�f�} �| �|�k�r}�|�| �|�|�<Pq}�q}�Wq�q�n��|��|�|�|��S(���Nt���.it���__mro__i���( ���t���_datadescriptort���analyzert���objpatht���find_attr_docst���joint���hasattrt���parentR���t ���for_modulet ���__module__t���__name__( ���t���_wrappedt���selft���argst���kwdst ���attr_docst���keyt���baseclsR ���t���base_attr_docst���errt���base_key(���R���R���(����sT���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autoattribute_search_bases.pyt ���add_content���s ����#  (���t���sphinx.ext.autodocR���R���R���R���(���R���R���(����(���R���R���sT���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autoattribute_search_bases.pyt���_patch_autoattribute���s����c���������C���s���t����i�t�d�6S(���Nt���version(���R���R����(���t���app(����(����sT���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autoattribute_search_bases.pyR���5���s����( ���t���__doc__t���loggingt ���getLoggerR���t���logt ���cloud_spthemeR����t���cloud_sptheme.utilsR���R���t���__all__R���R���(����(����(����sT���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autoattribute_search_bases.pyt���<module>���s��� �  ������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/autodoc_sections.py�����������������������0000664�0001750�0001750�00000035741�13562544741�027437� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""cloud_sptheme.ext.autodoc_sections - support ReST sections in docstrings""" #============================================================================= # imports #============================================================================= # core import inspect import re import logging; log = logging.getLogger(__name__) # site # pkg from cloud_sptheme import __version__ from cloud_sptheme.utils import u, patchapplier, monkeypatch # local __all__ = [ "setup", ] #============================================================================= # internal helpers used for hacking up sphinx. almost ashamed to be doing this. #============================================================================= def get_caller_value(module, var, rtype=None, code=None): """ helper which looks for nearest ancestor in call stack which occurred in module, and return specified local variable. :param module: name of module to look for on stack :param var: name of local variable to return :param rtype: do optional type-check to ensure **name** has expected type. :param code: optionally match based on function name (``frame.f_code.co_name``) as well as module. """ frame = None try: frame = inspect.currentframe().f_back while True: if ((frame.f_globals.get("__name__") == module) and (not code or frame.f_code.co_name == code)): break frame = frame.f_back if not frame: raise RuntimeError("couldn't find module=%r, code=%r in call stack" % (module, code or '<any>')) value = frame.f_locals[var] if rtype and not isinstance(value, rtype): raise TypeError("%s: expected a %r instance: %r" % (var, rtype, value)) return value finally: frame = None #============================================================================= # autodoc monkeypatches / hacks #============================================================================= @patchapplier def _patch_sphinx(): """ helper which monkeypatches sphinx to install some of our hooks. """ #---------------------------------------------------------------------- # patch document.note_implicit_target() to look for _modify_new_desc_section # attribute, as signal that it should munge up node that's passed to it, # to represent new description-level section, rather than document-level section. # this flag is then set by RSTState.new_subsection() patch, below. # NOTE: ideally, all this action could be done by a hook w/in # RSTState.new_subsection(), but would have to modify source. #---------------------------------------------------------------------- from docutils.nodes import document, make_id @monkeypatch(document) def note_implicit_target(_wrapped, self, target, *args, **kwds): # use default behavior unless signal flag is set entry = self._modify_new_desc_section if not entry: return _wrapped(self, target, *args, **kwds) self._modify_new_desc_section = None # NOTE: target should be section() node we're modifying, # as we just got called from RSTState.new_subsection(), # which is what sets modify_new_desc_section flag. # 'entry' should be last item in memo.desc_stack # (see below). # add our custom css classes for styling # NOTE: adding 'section-header' class to H<N> node, # so that our css rules don't have to be duplicated for every H<N> value. target['classes'].append("desc-section") target['classes'].append("desc-section-%d" % entry['level']) target[0]['classes'].append("section-header") # for duration of call, modify settings.id_prefix to include # decription prefix in any auto-generated ids. this helpers # section names remaining unique even if used between classes # (e.g. common names such as 'Constructor Options') settings = self.settings orig = settings.id_prefix try: if entry['prefix']: if orig: settings.id_prefix = u("%s-%s") % (settings.id_prefix, entry['prefix']) else: settings.id_prefix = entry['prefix'] return _wrapped(self, target, *args, **kwds) finally: settings.id_prefix = orig document._modify_new_desc_section = None #---------------------------------------------------------------------- # patch RSTState.new_subsection() to generate sections nested within # a description. It reads ``memo.desc_stack`` to determine if it's within # a description. If set, this attr should be a list of dicts, # each entry representing a nested description (e.g. an ObjectDescription) # whose content is being parsed, most recent should be last. # Each entry should be a dict containing: # # If there are no description entries active, the normal behavior is used. # # Each dict should contain the following keys: # * prefix -- None, or string to use as prefix for section identifiers. # helps keep links unique w/in document. # * signode -- signature node used to generate prefix (for debugging) # * owner -- arbitary object (ObjectDescription in our case) # which added this entry to list. intended as sanity check # when popping entries back off stack. # * level -- section level w/in declaration (autoset by code below) #---------------------------------------------------------------------- from docutils.parsers.rst.states import RSTState @monkeypatch(RSTState) def new_subsection(_wrapped, self, *args, **kwds): desc_stack = getattr(self.memo, "desc_stack", None) if desc_stack: # after new_subsection() creates section node, # it will invoke document.note_implicit_target(). # setting this attr signals our monkeypatch of that method (above) # to make changes to that node based on desc_stack entry. # NOTE: ideally, the note_implicit_target() monkeypatch, # as well as this code, would be placed inside RSTState.new_subsection(), # but that would require modifying sphinx's source :( entry = desc_stack[-1] entry['level'] = self.memo.section_level+1 # set level w/in description self.document._modify_new_desc_section = entry # enable note hack # hand off to real method return _wrapped(self, *args, **kwds) #---------------------------------------------------------------------- # monkeypatch ObjectDescription.run() so that: # 1. before calling state.nested_parse(), we push a desc context # onto state_machine.desc_context_stack (see above). # 2. when it does call state.nested_parse() the first time, # ``match_titles=True`` gets set. # FIXME: using a really awkward way to accomplish this :| # 3. pop our context off desc_context_stack when done. #---------------------------------------------------------------------- from sphinx.directives import ObjectDescription from sphinx.addnodes import desc as DescNodeType @monkeypatch(ObjectDescription) def run(_wrapped_run, self): # ObjectDescription.before_content() will be invoked right before # run calls ``self.state.nested_parse()``. We take advantage of that # by wrapping the instance's before_content() call so that the last # thing is does is set up ``self.state`` the way we want. # NOTE: have to patch per-instance, since subclasses that override this # don't tend to invoke super() @monkeypatch(self) def before_content(_wrapped_before): # let real method do all the setup it wants. _wrapped_before() #---------------------------------------------------------------------- # need to figure out prefix to prepend to our description sections, # so their IDs are unique. for now, using signature node # ObjectDescription.run() has finished generating right before before_content() # was called. Unfortunately, it's not available via self, # so we have to reach into call stack to grab it... # NOTE: ideally we would do this in ObjectDescription.run(). #---------------------------------------------------------------------- node = get_caller_value("sphinx.directives", "node", rtype=DescNodeType, code="run") # FIXME: would like a more bullet-proof way of deriving our id prefix... signode = node.children[0] if signode.get("ids"): base = signode['ids'][0] elif signode.get("names"): base = signode['names'][0] else: base = signode.astext() prefix = re.sub("[^a-zA-Z0-9_.]+", "-", base).strip("-") + "-" # now that we've got that info, add our description context entry # to the stack memo = self.state.memo if not hasattr(memo, "desc_stack"): memo.desc_stack = [] memo.desc_stack.append(dict( # see new_subsection() above for dict format prefix=prefix, owner=self, signode=signode, level=0, )) #---------------------------------------------------------------------- # hack up ``state.nested_parse()`` so that the next time it's called, # 'match_titles=True' is set. that call should happen as soon as this # function returns back to ObjectDescription.run() # NOTE: ideally, we would just set match_titles=True within ObjectDescription.run() #---------------------------------------------------------------------- state = self.state if not hasattr(state, "_set_next_match_titles_flag"): # state is persistent object, only want to patch it once. @monkeypatch(state) def nested_parse(_wrapped_parse, *args, **kwds): if state._set_next_match_titles_flag: kwds['match_titles'] = True state._set_next_match_titles_flag = False return _wrapped_parse(*args, **kwds) # signal our hack to set match_titles state._set_next_match_titles_flag = True @monkeypatch(self) def after_content(_wrapped_after): # remove our description context entry # NOTE: ideally would do this in ObjectDescription.run() desc = self.state.memo.desc_stack.pop() assert desc['owner'] is self, "sanity check failed" # let real method do it's work return _wrapped_after() # now invoke the real run() method. # as soon as it calls before_content(), our hack above will patch self.state. # after before_content() returns, real run method will call self.state.nested_parse(), # and invoke our patched version instead. return _wrapped_run(self) #---------------------------------------------------------------------- # make autodoc invoke parse_nested_section_with_titles() for ALL objects # if this isn't done, autodoc generates paragraphs instead of sections. # this causes all nested content to be omitted # FIXME: why is the lack of this causing a problem? should track it down. #---------------------------------------------------------------------- from sphinx.ext.autodoc import Documenter Documenter.titles_allowed = True #---------------------------------------------------------------------- # finally, monkeypatch DocFieldTransformer.transform_all() # so that it transforms doc fields within one of our nested sections # (default code only looks at top-level nodes) # # FIXME: find a cleaner way to do this :| #---------------------------------------------------------------------- from sphinx.util.docfields import DocFieldTransformer from docutils.nodes import section @monkeypatch(DocFieldTransformer) def transform_all(_wrapped, self, node): # transform immediate node contents like normal _wrapped(self, node) # our nested sections show up as definition lists, # so make sure transform_all is also invoked for the contents # of any definition list for child in node: if isinstance(child, section): _wrapped(self, child.children) #---------------------------------------------------------------------- # sigh. done monkeypatching. #---------------------------------------------------------------------- #============================================================================= # docstring mangling #============================================================================= def trim_module_header(app, what, name, obj, options, lines): """ helper to remove one-line description from top of module (if preset). """ if what != "module": return _title_re = re.compile(r""" ^ \s* ( {0} \s* -- \s* )? [a-z0-9 _."']* $ """.format(re.escape(name)), re.X|re.I) if len(lines) > 1 and _title_re.match(lines[0]) and lines[1].strip() == '': del lines[:2] #============================================================================= # sphinx extension entrypoint #============================================================================= def setup(app): # don't patch sphinx unless this extension is actually in use _patch_sphinx() # clean up leading bit of module docstring app.connect('autodoc-process-docstring', trim_module_header) # identifies the version of our extension return {'version': __version__} #============================================================================= # documentation helper # # NOTE: this function doesn't actually do anything, # it exists to test this extension's behavior as part of docs/cloud_theme_test #============================================================================= def _doctestfunc(): """ The :mod:`~cloud_sptheme.ext.autodoc_sections` extension should generate nested sections as found within object docstrings. Nested Section ============== :param arg: xxx .. attribute:: foo :noindex: bar These sections can in turn contain others: Child Section ------------- Which allows breaking long class docstrings up in meaningful ways. Child Section 2 --------------- And more content Nested Section 2 ================ end of class """ pass #============================================================================= # eof #============================================================================= �������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/autodoc_sections.pyc����������������������0000644�0001750�0001750�00000016411�13014220543�027550� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ #Xc�����������@���s���d��Z��d�d�l�Z�d�d�l�Z�d�d�l�Z�e�j�e��Z�d�d�l�m�Z�d�d�l �m �Z �m �Z �m �Z �d�g�Z �d�d�d��Z�e �d����Z�d���Z�d ���Z�d ���Z�d�S( ���sH���cloud_sptheme.ext.autodoc_sections - support ReST sections in docstringsiN(���t ���__version__(���t���ut ���patchappliert ���monkeypatcht���setupc���������C���s���d�}�z�t�j���j�}�xm�t�r�|�j�j�d��|��k�rV�|� sR�|�j�j�|�k�rV�Pn��|�j�}�|�s�t �d�|��|�pw�d�f���q�q�W|�j �|�}�|�r�t �|�|�� r�t �d�|�|�|�f���n��|�SWd�d�}�Xd�S(���s�� helper which looks for nearest ancestor in call stack which occurred in module, and return specified local variable. :param module: name of module to look for on stack :param var: name of local variable to return :param rtype: do optional type-check to ensure **name** has expected type. :param code: optionally match based on function name (``frame.f_code.co_name``) as well as module. t���__name__s.���couldn't find module=%r, code=%r in call stacks���<any>s���%s: expected a %r instance: %rN( ���t���Nonet���inspectt ���currentframet���f_backt���Truet ���f_globalst���gett���f_codet���co_namet ���RuntimeErrort���f_localst ���isinstancet ���TypeError(���t���modulet���vart���rtypet���codet���framet���value(����(����sJ���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyt���get_caller_value���s ����   c���� ���������s���d�d�l��m�}��m�}�t�|���d����}�d �|��_�d�d�l�m�}�t�|��d����}�d�d�l�m �}�d�d�l �m ���t�|����f�d����}�d�d �l �m �}�t�|�_�d�d �l�m�}�d�d �l��m��t�|���f�d ����} �d �S(���sI��� helper which monkeypatches sphinx to install some of our hooks. i(���t���documentt���make_idc���������_���s���|�j��}�|�s"�|��|�|�|�|��Sd��|�_��|�d�j�d��|�d�j�d�|�d��|�d�d�j�d��|�j�}�|�j�}�zZ�|�d�r�|�r�t�d��|�j�|�d�f�|�_�q�|�d�|�_�n��|��|�|�|�|��SWd��|�|�_�Xd��S( ���Nt���classess ���desc-sections���desc-section-%dt���leveli����s���section-headert���prefixs���%s-%s(���t���_modify_new_desc_sectionR���t���appendt���settingst ���id_prefixR���(���t���_wrappedt���selft���targett���argst���kwdst���entryR!���t���orig(����(����sJ���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyt���note_implicit_targetL���s ����     #(���t���RSTStatec���������_���sX���t��|�j�d�d���}�|�rH�|�d�}�|�j�j�d�|�d�<|�|�j�_�n��|��|�|�|��S(���Nt ���desc_stackii���R���(���t���getattrt���memoR���t ���section_levelR���R���(���R#���R$���R&���R'���R,���R(���(����(����sJ���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyt���new_subsection���s ���� (���t���ObjectDescription(���t���descc������������sC���t��������f�d����}�t�������f�d����}�|�����S(���Nc������ ������s2��|����t��d�d�d��d�d�}�|�j�d�}�|�j�d��rO�|�d�d�}�n,�|�j�d��ro�|�d�d�}�n �|�j���}�t�j�d �d �|��j�d ��d �}��j�j�}�t �|�d ��s�g��|�_ �n��|�j �j �t �d �|�d ��d�|�d�d����j���t ���d��s%t ������f�d����}�n��t���_�d��S(���Ns���sphinx.directivest���nodeR���R���t���runi����t���idst���namess���[^a-zA-Z0-9_.]+t���-R,���R���t���ownert���signodeR���t���_set_next_match_titles_flagc������������s,�����j��r�t�|�d�<t���_��n��|��|�|���S(���Nt ���match_titles(���R:���R ���t���False(���t���_wrapped_parseR&���R'���(���t���state(����sJ���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyt ���nested_parse���s����   (���R���t���childrenR ���t���astextt���ret���subt���stripR>���R.���t���hasattrR,���R ���t���dictR���R ���R:���(���t���_wrapped_beforeR3���R9���t���baseR���R.���R?���(���t ���DescNodeTypeR$���(���R>���sJ���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyt���before_content���s,����   "   c������������s8�����j��j�j�j���}�|�d���k�s1�t�d���|����S(���NR8���s���sanity check failed(���R>���R.���R,���t���popt���AssertionError(���t���_wrapped_afterR2���(���R$���(����sJ���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyt ���after_content���s����(���R���(���t ���_wrapped_runR$���RJ���RN���(���RI���(���R$���sJ���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyR4������s���� 8(���t ���Documenter(���t���DocFieldTransformer(���t���sectionc������������sD���|��|�|��x0�|�D](�}�t��|����r�|��|�|�j��q�q�Wd��S(���N(���R���R@���(���R#���R$���R3���t���child(���RR���(����sJ���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyt ���transform_all ��s����  N(���t���docutils.nodesR���R���R���R���R���t���docutils.parsers.rst.statesR+���t���sphinx.directivesR1���t���sphinx.addnodesR2���t���sphinx.ext.autodocRP���R ���t���titles_allowedt���sphinx.util.docfieldsRQ���RR���( ���R���R���R*���R+���R0���R1���R4���RP���RQ���RT���(����(���RI���RR���sJ���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyt ���_patch_sphinx<���s����% W c���������C���s���|�d�k�r�d�St��j�d�j�t��j�|���t��j�t��j�B�}�t�|��d�k�r�|�j�|�d��r�|�d�j���d�k�r�|�d�4n��d�S(���sO��� helper to remove one-line description from top of module (if preset). R���NsP��� ^ \s* ( {0} \s* -- \s* )? [a-z0-9 _."']* $ i���i����t����i���( ���RB���t���compilet���formatt���escapet���Xt���It���lent���matchRD���(���t���appt���whatt���namet���objt���optionst���linest ���_title_re(����(����sJ���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyt���trim_module_header��s ���� (;c���������C���s"���t����|��j�d�t��i�t�d�6S(���Ns���autodoc-process-docstringt���version(���R\���t���connectRl���R����(���Re���(����(����sJ���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyR���/��s����c�����������C���s���d�S(���s�� The :mod:`~cloud_sptheme.ext.autodoc_sections` extension should generate nested sections as found within object docstrings. Nested Section ============== :param arg: xxx .. attribute:: foo bar These sections can in turn contain others: Child Section ------------- Which allows breaking long class docstrings up in meaningful ways. Child Section 2 --------------- And more content Nested Section 2 ================ end of class N(����(����(����(����sJ���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyt ���_doctestfunc?��s����(���t���__doc__R���RB���t���loggingt ���getLoggerR���t���logt ���cloud_spthemeR����t���cloud_sptheme.utilsR���R���R���t���__all__R���R���R\���Rl���R���Ro���(����(����(����sJ���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/autodoc_sections.pyt���<module>���s���   � '  �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/docfield_markup.py������������������������0000664�0001750�0001750�00000006727�13562544741�027224� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������""" cloud_sptheme.ext.docfield_markup -- monkeypatches sphinx to allow ``~`` in docfields. """ #============================================================================= # imports #============================================================================= # core import logging; log = logging.getLogger(__name__) # site # pkg from cloud_sptheme import __version__ from cloud_sptheme.utils import patchapplier, monkeypatch # local __all__ = [ "setup", ] #============================================================================= # patch #============================================================================= @patchapplier def _patch_docfield(): from sphinx.util.docfields import Field, nodes, addnodes # NOTE: would like to just wrap make_xref(), but have to override first arg (rawsource) of # pending_xref() call, so have to replicate the code. @monkeypatch(Field) def make_xref(_wrapped, self, rolename, domain, target, innernode=addnodes.literal_emphasis, contnode=None, env=None): #------------------------------------------------------------------------ # custom prep work before real sphinx code. #------------------------------------------------------------------------ # given raw text in 'target', parse into 'title' and effective 'target' # NOTE: this tries to replicate the markup convention used in PyXRefRole.process_link() rawtext = title = target if rawtext.startswith("~"): # if the first character is a tilde, don't display the module/class # parts of the content target = target.lstrip("~") title = target.rpartition(".")[2] # create wrapper for innernode(title,title) calls, which honors custom title. # NOTE: doing as wrapper so code below will match sphinx as closely as possible. # could instead just plug this in as contnode (if not already set) node_type = innernode def innernode(*ignored): if issubclass(node_type, nodes.Text): # Text classes want rawtext second return node_type(title, rawtext) else: # Element classes want rawtext first return node_type(rawtext, title) #------------------------------------------------------------------------ # remainder of this should match sphinx code exactly, except where noted. #------------------------------------------------------------------------ if not rolename: return contnode or innernode(target, target) # NOTE: passing <title> as first arg, sphinx passes '' refnode = addnodes.pending_xref(title, refdomain=domain, refexplicit=False, reftype=rolename, reftarget=target) refnode += contnode or innernode(target, target) if env: env.domains[domain].process_field_xref(refnode) return refnode #============================================================================= # sphinx entrypoint #============================================================================= def setup(app): # don't apply our patch unless actually loaded by sphinx _patch_docfield() # identifies the version of our extension return {'version': __version__} #============================================================================= # eoc #============================================================================= �����������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/docfield_markup.pyc�����������������������0000644�0001750�0001750�00000003461�13014230147�027335� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ $01Xc�����������@���sl���d��Z��d�d�l�Z�e�j�e��Z�d�d�l�m�Z�d�d�l�m�Z�m �Z �d�g�Z �e�d����Z �d���Z �d�S(���sX��� cloud_sptheme.ext.docfield_markup -- monkeypatches sphinx to allow ``~`` in docfields. iN(���t ���__version__(���t ���patchappliert ���monkeypatcht���setupc�������������sG���d�d�l��m�}��m��m���t�|����j�d�����f�d���}�d��S(���Ni(���t���Fieldt���nodest���addnodesc��� ��� ������s���|�r%�|��|�|�|�|�d�|�d�|�S|�}�}�|�j��d��rc�|�j�d��}�|�j�d��d�}�n��t�|��j��r�|�|�|��} �n�|�|�|��} �|�s�| �S��j�|�d�|�d�t�d�|�d �|�} �| �| �7} �| �S( ���Nt ���innernodet���contnodet���~t���.i���t ���refdomaint ���refexplicitt���reftypet ���reftarget(���t ���startswitht���lstript ���rpartitiont ���issubclasst���Textt ���pending_xreft���True( ���t���_wrappedt���selft���rolenamet���domaint���targetR���R���t���rawtextt���titlet���nodet���refnode(���R���R���(����sI���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/docfield_markup.pyt ���make_xref���s����  (���t���sphinx.util.docfieldsR���R���R���R���t���emphasist���None(���R���R���(����(���R���R���sI���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/docfield_markup.pyt���_patch_docfield���s���� c���������C���s���t����i�t�d�6S(���Nt���version(���R#���R����(���t���app(����(����sI���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/docfield_markup.pyR���:���s����( ���t���__doc__t���loggingt ���getLoggert���__name__t���logt ���cloud_spthemeR����t���cloud_sptheme.utilsR���R���t���__all__R#���R���(����(����(����sI���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/docfield_markup.pyt���<module>���s��� � %���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/escaped_samp_literals.py������������������0000664�0001750�0001750�00000007553�13562544741�030415� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""cloud_sptheme.ext.escaped_samp_literals - allow escaping { and } in samp.""" #============================================================================= # imports #============================================================================= # core # site from docutils import nodes, utils # pkg from cloud_sptheme import __version__ from cloud_sptheme.utils import u, ru # local __all__ = [ "setup", ] #============================================================================= # replacement samp role parser #============================================================================= def emph_literal_role(typ, rawtext, text, lineno, inliner, options={}, content=[]): """replacement for sphinx's ``:samp:`` role handler. this is a bit stricter in it's parsing, and allows escaping of literal ``{`` and ``}`` characters. """ def make_error(pos, value): value = "%s at char %d of %s" % (value, pos, rawtext) msg = inliner.reporter.error(value, line=lineno) prb = inliner.problematic(rawtext, rawtext, msg) return [prb], [msg] text = utils.unescape(text) retnode = nodes.literal(role=typ.lower(), classes=[typ]) buffer = u("") # contains text being accumulated for next node in_escape = False # True if next char is part of escape sequence in_var = False # True if parsing variable section instead of plain text var_start = None # marks start of var section if in_var is True i = 0 for c in text: i += 1 if in_escape: # parse escape sequence if c in ru("{}\\"): buffer += c in_escape = False else: return make_error(i-2, "unknown samp-escape '\\\\%s'" % (c,)) elif c == ru("\\"): # begin escape sequence in_escape = True i += 1 # account for extra escape char in rawtext elif in_var: # parsing variable section if c == u("{"): return make_error(i, "unescaped '{'") elif c == u("}"): # finalize variable section, return to plaintext if not buffer: return make_error(i-1, "empty variable section") retnode += nodes.emphasis(buffer, buffer) buffer = u("") in_var = False else: buffer += c else: # parsing plaintext section if c == u("{"): # finalize plaintext section, start variable section if buffer: retnode += nodes.Text(buffer, buffer) buffer = u("") in_var = True var_start = i elif c == u("}"): return make_error(i, "unescaped '}'") else: buffer += c if in_escape: return make_error(i, "unterminated samp-escape sequence") elif in_var: return make_error(var_start, "unterminated variable section") elif buffer: retnode += nodes.Text(buffer, buffer) return [retnode], [] #============================================================================= # sphinx entry point #============================================================================= def setup(app): # register our handler to overrride sphinx.roles.emph_literal_role from docutils.parsers.rst import roles import sphinx.roles as mod names = [ key for key,value in mod.specific_docroles.items() if value is mod.emph_literal_role ] for name in names: roles.register_local_role(name, emph_literal_role) # identifies the version of our extension return {'version': __version__} #============================================================================= # eof #============================================================================= �����������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/escaped_samp_literals.pyc�����������������0000644�0001750�0001750�00000005522�13014220562�030530� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ #Xc�����������@���sg���d��Z��d�d�l�m�Z�m�Z�d�d�l�m�Z�d�d�l�m�Z�m�Z�d�g�Z �i��g��d��Z �d���Z �d�S( ���sI���cloud_sptheme.ext.escaped_samp_literals - allow escaping { and } in samp.i(���t���nodest���utils(���t ���__version__(���t���ut���rut���setupc������������s<������f�d���}�t��j�|��}�t�j�d�|��j���d�|��g��}�t�d��} �t�} �t�} �d�} �d�} �x~|�D]v}�| �d�7} �| �r�|�t�d��k�r�| �|�7} �t�} �q|�| �d�d �|�f��Sqp�|�t�d ��k�r�t �} �| �d�7} �qp�| �rq|�t�d ��k�r|�| �d ��S|�t�d ��k�rd| �s9|�| �d�d��S|�t�j �| �| ��7}�t�d��} �t�} �q| �|�7} �qp�|�t�d ��k�r| �r|�t�j �| �| ��7}�n��t�d��} �t �} �| �} �qp�|�t�d ��k�r|�| �d��S| �|�7} �qp�W| �r|�| �d��S| �r|�| �d��S| �r/|�t�j �| �| ��7}�n��|�g�g��f�S(���s���replacement for sphinx's ``:samp:`` role handler. this is a bit stricter in it's parsing, and allows escaping of literal ``{`` and ``}`` characters. c������������sP���d�|�|���f�}���j��j�|�d��}���j���|��}�|�g�|�g�f�S(���Ns���%s at char %d of %st���line(���t���reportert���errort ���problematic(���t���post���valuet���msgt���prb(���t���inlinert���linenot���rawtext(����sO���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/escaped_samp_literals.pyt ���make_error���s����t���rolet���classest����i����i���s���{}\i���s���unknown samp-escape '\\%s's���\t���{s ���unescaped '{'t���}s���empty variable sections ���unescaped '}'s!���unterminated samp-escape sequences���unterminated variable sectionN( ���R���t���unescapeR����t���literalt���lowerR���t���Falset���NoneR���t���Truet���emphasist���Text(���t���typR���t���textR���R���t���optionst���contentR���t���retnodet���buffert ���in_escapet���in_vart ���var_startt���it���c(����(���R���R���R���sO���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/escaped_samp_literals.pyt���emph_literal_role���sX����!               c���������C���s���d�d�l��m�}�d�d��l�j�}�g��|�j�j���D]!�\�}�}�|�|�j�k�r/�|�^�q/�}�x�|�D]�}�|�j�|�t��q]�Wi�t�d�6S(���Ni(���t���rolest���version(���t���docutils.parsers.rstR+���t ���sphinx.rolest���specific_docrolest���itemsR*���t���register_local_roleR���(���t���appR+���t���modt���keyR ���t���namest���name(����(����sO���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/escaped_samp_literals.pyR���V���s���� N( ���t���__doc__t���docutilsR����R���t ���cloud_spthemeR���t���cloud_sptheme.utilsR���R���t���__all__R*���R���(����(����(����sO���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/escaped_samp_literals.pyt���<module>���s ��� C������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/index_styling.py��������������������������0000664�0001750�0001750�00000004566�13562544741�026753� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""cloud_sptheme.ext.index_styling - improves css styling for genindex""" import logging; log = logging.getLogger(__name__) import re from jinja2 import Markup as literal, escape from cloud_sptheme import __version__ prefix = r"^(?P<name>.*)\(" suffix = r"\)$" _attr_re = re.compile(prefix + r"(?P<left>)(?P<loc>.*)(?P<right> attribute)" + suffix) _meth_re = re.compile(prefix + r"(?P<left>)(?P<loc>.*)(?P<right> method)" + suffix) _fc_re = re.compile(prefix + r"(?P<left>class in |in module )(?P<loc>.*)(?P<right>)" + suffix) _mod_re = re.compile(prefix + r"module" + suffix) def format_index_name(name): while True: m = _attr_re.match(name) if m: name, left, loc, right = m.group("name","left", "loc", "right") type = "attribute" break m = _meth_re.match(name) if m: name, left, loc, right = m.group("name","left", "loc", "right") type = "method" break m = _fc_re.match(name) if m: name, left, loc, right = m.group("name","left", "loc", "right") if left.startswith("class"): type = "class" else: type = "function" break m = _mod_re.match(name) if m: name = m.group("name") left = "module" loc = right = '' type = "module" break return name if loc: loc = literal('<span class="location">') + escape(loc) + literal("</span>") cat = left + loc + right return escape(name) + literal('<span class="category ' + type + '">') + escape(cat) + literal("</span>") def mangle_index(app, pagename, templatename, ctx, event_arg): if pagename != "genindex": return fmt = format_index_name for key, entries in ctx['genindexentries']: for idx, entry in enumerate(entries): name, data = entry entries[idx] = fmt(name), data # NOTE: data is list of [links, subitems, some_key], # though 'key' not added until sphinx 1.4 (1.3?) subitems = data[1] for idx, entry in enumerate(subitems): name, links = entry subitems[idx] = fmt(name), links def setup(app): app.connect('html-page-context', mangle_index) # identifies the version of our extension return {'version': __version__} ������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/index_styling.pyc�������������������������0000644�0001750�0001750�00000005110�13014220543�027055� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ #Xc�����������@���s���d��Z��d�d�l�Z�e�j�e��Z�d�d�l�Z�d�d�l�m�Z�m �Z �d�d�l �m �Z �d�Z �d�Z �e�j�e �d�e ��Z�e�j�e �d�e ��Z�e�j�e �d �e ��Z�e�j�e �d �e ��Z�d ���Z�d ���Z�d ���Z�d�S(���sC���cloud_sptheme.ext.index_styling - improves css styling for genindexiN(���t���Markupt���escape(���t ���__version__s���^(?P<name>.*)\(s���\)$s*���(?P<left>)(?P<loc>.*)(?P<right> attribute)s'���(?P<left>)(?P<loc>.*)(?P<right> method)s4���(?P<left>class in |in module )(?P<loc>.*)(?P<right>)t���modulec���������C���s��x*t��r,t�j�|���}�|�rL�|�j�d�d�d�d��\�}��}�}�}�d�}�Pn��t�j�|���}�|�r�|�j�d�d�d�d��\�}��}�}�}�d�}�Pn��t�j�|���}�|�r�|�j�d�d�d�d��\�}��}�}�}�|�j�d��r�d�}�n�d�}�Pn��t�j�|���}�|�r(|�j�d��}��d �}�d �}�}�d �}�Pn��|��SW|�rVt�d ��t �|��t�d ��}�n��|�|�|�}�t �|���t�d �|�d��t �|��t�d ��S(���Nt���namet���leftt���loct���rightt ���attributet���methodt���classt���functionR���t����s���<span class="location">s���</span>s���<span class="category s���">( ���t���Truet���_attr_ret���matcht���groupt���_meth_ret���_fc_ret ���startswitht���_mod_ret���literalR���(���R���t���mR���R���R���t���typet���cat(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/index_styling.pyt���format_index_name���s<���� $$$  #c���������C���s���|�d�k�r�d��St��}�x�|�d�D]�\�}�}�x�t�|��D]w�\�}�} �| �\�} �} �|�| ��| �f�|�|�<| �d�} �x<�t�| ��D].�\�}�} �| �\�} �} �|�| ��| �f�| �|�<q�Wq:�Wq!�Wd��S(���Nt���genindext���genindexentriesi���(���R���t ���enumerate(���t���appt���pagenamet ���templatenamet���ctxt ���event_argt���fmtt���keyt���entriest���idxt���entryR���t���datat���subitemst���links(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/index_styling.pyt ���mangle_index/���s����    c���������C���s���|��j��d�t��i�t�d�6S(���Ns���html-page-contextt���version(���t���connectR*���R���(���R���(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/index_styling.pyt���setup>���s����(���t���__doc__t���loggingt ���getLoggert���__name__t���logt���ret���jinja2R����R���R���t ���cloud_spthemeR���t���prefixt���suffixt���compileR���R���R���R���R���R*���R-���(����(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/index_styling.pyt���<module>���s��� �  ! ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/issue_tracker.py��������������������������0000664�0001750�0001750�00000007416�13562544741�026733� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""cloud_sptheme.ext.issue_tracker - added ":issue:" text role to link to issue tracker""" #=========================================================================== # imports #=========================================================================== #core import re #site from docutils import nodes from docutils.parsers.rst.roles import set_classes #pkg from cloud_sptheme import __version__ #local #=========================================================================== # issue role #=========================================================================== def make_error(inliner, rawtext, line, value): "generate error node and msg" msg = inliner.reporter.error(value, line=line) node = inliner.problematic(rawtext, rawtext, msg) return [node], [msg] def get_issue_tracker_title(config): "retrieve issue_tracker_title template" return getattr(config, "issue_tracker_title", None) or "issue {issue}" def get_issue_tracker_url(config): "retrieve issue_tracker_url template, replacing aliases" template = getattr(config, "issue_tracker_url", None) if not template: # causes :issue:`xx` to be replaced with label instead of url. return None elif template.startswith("bb:"): # parse "bb:<project>", and replace with bitbucket url project = template[3:].strip("/") return "https://bitbucket.org/" + project + "/issues/{issue}" elif template.startswith("gh:"): # parse "gh:<project>", and replace with github url project = template[3:].strip("/") return "https://github.com/" + project + "/issues/{issue}" else: # assume it contains {issue} and possibly {title} return template # pattern allows inside :issue: text roles issue_re = re.compile(""" ^ (?: (?P<title>[^<]+) \s* < (?P<issue1>\d+) > | (?P<issue2>\d+) ) $ """, re.X) def issue_role(name, rawtext, text, line, inliner, options={}, content=[]): "generate link to an issue" #NOTE: # name - role name in doc, should be 'issue' # rawtext - text of entire node # text - contents of role # lineno # inliner - ??? # options - ??? # content - ??? # returns (nodes, messages) # extract title & issue number from text m = issue_re.match(text) if m: issue = int(m.group("issue1") or m.group("issue2")) title = m.group("title") else: return make_error(inliner, rawtext, line, "Invalid issue identifier: %r" % (text,)) # get url template from config, resolve aliases config = inliner.document.settings.env.app.config url_template = get_issue_tracker_url(config) title_template = get_issue_tracker_title(config) # generate replacement node if not title: title = title_template.format(issue=issue) set_classes(options) clist = options.setdefault('classes',[]) clist.append("issue") if url_template: url = url_template.format(issue=issue, title=title) node = nodes.reference(rawtext, title, refuri=url, **options) else: node = nodes.emphasis(rawtext, title, **options) return [node], [] #=========================================================================== # init #=========================================================================== def setup(app): "install plugin" app.add_config_value('issue_tracker_url', None, 'env') app.add_config_value('issue_tracker_title', None, 'env') app.add_role('issue', issue_role) # identifies the version of our extension return {'version': __version__} #=========================================================================== # eof #=========================================================================== ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/issue_tracker.pyc�������������������������0000644�0001750�0001750�00000006222�13047077577�027074� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ~Xc�����������@���s���d��Z��d�d�l�Z�d�d�l�m�Z�d�d�l�m�Z�d�d�l�m�Z�d���Z�d���Z �d���Z �e�j �d �e�j ��Z �i��g��d ��Z�d ���Z�d�S( ���sT���cloud_sptheme.ext.issue_tracker - added ":issue:" text role to link to issue trackeriN(���t���nodes(���t ���set_classes(���t ���__version__c���������C���s=���|��j��j�|�d�|�}�|��j�|�|�|��}�|�g�|�g�f�S(���s���generate error node and msgt���line(���t���reportert���errort ���problematic(���t���inlinert���rawtextR���t���valuet���msgt���node(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/issue_tracker.pyt ���make_error���s����c���������C���s���t��|��d�d��p�d�S(���s%���retrieve issue_tracker_title templatet���issue_tracker_titles ���issue {issue}N(���t���getattrt���None(���t���config(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/issue_tracker.pyt���get_issue_tracker_title���s����c���������C���s���t��|��d�d ��}�|�s�d �S|�j�d��rJ�|�d�j�d��}�d�|�d�S|�j�d��rx�|�d�j�d��}�d�|�d�S|�Sd �S( ���s6���retrieve issue_tracker_url template, replacing aliasest���issue_tracker_urls���bb:i���t���/s���https://bitbucket.org/s���/issues/{issue}s���gh:s���https://github.com/N(���R���R���t ���startswitht���strip(���R���t���templatet���project(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/issue_tracker.pyt���get_issue_tracker_url���s����  s��� ^ (?: (?P<title>[^<]+) \s* < (?P<issue1>\d+) > | (?P<issue2>\d+) ) $ c���������C���s4��t��j�|��}�|�rK�t�|�j�d��p3�|�j�d���}�|�j�d��} �n�t�|�|�|�d�|�f��S|�j�j�j�j�j �} �t �| ��} �t �| ��} �| �s�| �j �d�|��} �n��t �|��|�j�d�g���} �| �j�d��| �r| �j �d�|�d�| ��}�t�j�|�| �d�|�|�}�n�t�j�|�| �|��}�|�g�g��f�S(���s���generate link to an issuet���issue1t���issue2t���titles���Invalid issue identifier: %rt���issuet���classest���refuri(���t���issue_ret���matcht���intt���groupR ���t���documentt���settingst���envt���appR���R���R���t���formatR���t ���setdefaultt���appendR����t ���referencet���emphasis(���t���nameR���t���textR���R���t���optionst���contentt���mR���R���R���t ���url_templatet���title_templatet���clistt���urlR ���(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/issue_tracker.pyt ���issue_role@���s&���� $     c���������C���sA���|��j��d�d�d��|��j��d�d�d��|��j�d�t��i�t�d�6S(���s���install pluginR���R%���R ���R���t���versionN(���t���add_config_valueR���t���add_roleR5���R���(���R&���(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/issue_tracker.pyt���setupk���s����(���t���__doc__t���ret���docutilsR����t���docutils.parsers.rst.rolesR���t ���cloud_spthemeR���R ���R���R���t���compilet���XR���R5���R9���(����(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/issue_tracker.pyt���<module>���s���     +������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/page_only.py������������������������������0000664�0001750�0001750�00000015152�13562614602�026033� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������""" ============================================================== :mod:`cloud_sptheme.ext.page_only` -- Exclude Pages from Build ============================================================== .. versionadded:: 1.8 Overview ======== This extension provides a ``.. page-only::`` directive, which allows conditionally omitting entire pages from the document based on build tags. The first line of a page should be a ``.. page-only:: <expr>`` directive; where ``<expr>`` is a tag, or simple tag expression, just like ``.. only::``. If the expression evaluates to False, the page won't be included in the final build (and should be silently omitted from any TOC lists). E.g. ``.. page-only:: draft and html`` """ #============================================================================= # imports #============================================================================= # core from __future__ import absolute_import, division, print_function import io import re from weakref import WeakKeyDictionary # site from docutils.parsers.rst import Directive import sphinx import sphinx.addnodes from sphinx.util import logging # pkg from cloud_sptheme import __version__ from cloud_sptheme.utils import patchapplier, monkeypatch # local logger = logging.getLogger(__name__) __all__ = [ "setup", ] #============================================================================= # patching #============================================================================= @patchapplier def _patch_sphinx(): # # to get files list right, best to modify found_files before env.get_outdated_files() # gets a hold of them, and starts looking for changes. # from sphinx.environment import BuildEnvironment @monkeypatch(BuildEnvironment) def get_outdated_files(__wrapped__, env, config_changed): # call out hook to modify found_docs to remove omitted entries, # and store them in env.omitted_by_page_only strip_omitted_docs(env) # hand off to orig function return __wrapped__(env, config_changed) # # patch TocTree.run() so it doesn't warning about broken toc entries. # from sphinx.directives.other import TocTree @monkeypatch(TocTree) def run(__wrapped__, self): env = self.state.document.settings.env omitted_docs = env.omitted_by_pageonly found_docs = env.found_docs try: # temporarily restore found_docs so TocTree doesn't throw warning. # NOTE: this causes broken toc entries to be generated (rather than warnings). # these are cleaned up by remove_toc_entries() below _set_found_docs(env, found_docs | omitted_docs) return __wrapped__(self) finally: _set_found_docs(env, found_docs) def _set_found_docs(env, found_docs): """ compat helper for writing found_docs attribute """ if sphinx.version_info < (2, 0): env.found_docs = found_docs else: env.project.docnames = found_docs #============================================================================= # hooks #============================================================================= #: regex used to detect page-only directive _header_re = re.compile(r"^\.\.\s+page-only::\s+(?P<expr>.+)\s*$") #: as hack, using this to store reference to app so we can resolve it w/in env monkeypatch _env_to_app = WeakKeyDictionary() def install_app_ref(app): """ hack to get app ref w/in env.get_outdated_files() monkeypatch, called on 'builder-inited' event """ _env_to_app[app.env] = app def strip_omitted_docs(env): """ helper invoked right before env.get_outdated_files() is called, scans for omitted files and modifies document set accordingly. called via monkeypatch before .get_outdated_files() is run, which happens during env.update(), shortly before 'env-get-outdated' event. """ # scan through found docs, removing any that should be omitted app = _env_to_app[env] found_docs = env.found_docs omitted_docs = set() for doc in found_docs: # find first non-empty line with io.open(env.doc2path(doc), encoding="latin-1") as fh: line = '' for line in fh: if line.strip(): break # check if it's a PageOnly directive m = _header_re.match(line) if not m: continue # add page to omitted list if expression doesn't validate if not app.tags.eval_condition(m.group("expr")): omitted_docs.add(doc) if omitted_docs: logger.info("%s pages omitted by page-only" % len(omitted_docs)) # persist omitted list for TocTree.run() wrapper and remove_from_toc() env.omitted_by_pageonly = omitted_docs # remove omitted from 'found_docs', so get_outdated_files() doesn't see them found_docs.difference_update(omitted_docs) class PageOnly(Directive): """ Directive used to capture info. Notes that this doesn't actually do anything, job has already been done by find_omitted_docs(). This is just here to prevent parse errors. """ # NOTE: cloned from Author directive, should be ok... has_content = False required_arguments = 1 optional_arguments = 0 final_argument_whitespace = True option_spec = {} def run(self): # XXX: could issue warning if this is encountered anywhere but top of document. return [] def remove_from_toc(app, doctree): """ remove omitted pages from TOC, let through by TocTree.run() monkeypatch called on doctree-read event. """ omitted_docs = app.env.omitted_by_pageonly for toctreenode in doctree.traverse(sphinx.addnodes.toctree): entries = toctreenode['entries'] # print("%r %r %r" % (doctree, toctreenode, entries)) # dbgcon() idx = 0 while idx < len(entries): entry = entries[idx] # entry is (label|None, doc) tuple... if str(entry[1]) in omitted_docs: del entries[idx] else: idx += 1 #============================================================================= # sphinx entrypoint #============================================================================= def setup(app): _patch_sphinx() app.add_directive('page-only', PageOnly) app.connect('builder-inited', install_app_ref) app.connect('doctree-read', remove_from_toc) # identifies the version of our extension return {'version': __version__} #============================================================================= # eoc #============================================================================= ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/page_only.pyc�����������������������������0000644�0001750�0001750�00000012744�13051626453�026200� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ 57Xc�����������@`�s��d��Z��d�d�l�m�Z�m�Z�m�Z�d�d�l�Z�d�d�l�Z�e�j�e��Z �d�d�l �Z �d�d�l �m �Z �d�d�l �m�Z�d�d�l�Z�d�d�l�m�Z�d�d�l�m�Z�m�Z�d�g�Z�e�d ����Z�e �j�d ��Z�e ���Z�d ���Z�d ���Z�d �e�f�d�����YZ�d���Z�d���Z�d�S(���s�� ============================================================== :mod:`cloud_sptheme.ext.page_only` -- Exclude Pages from Build ============================================================== .. versionadded:: 1.8 Overview ======== This extension provides a ``.. page-only::`` directive, which allows conditionally omitting entire pages from the document based on build tags. The first line of a page should be a ``.. page-only:: <expr>`` directive; where ``<expr>`` is a tag, or simple tag expression, just like ``.. only::``. If the expression evaluates to False, the page won't be included in the final build (and should be silently omitted from any TOC lists). E.g. ``.. page-only:: draft and html`` i����(���t���absolute_importt���divisiont���print_functionN(���t���WeakKeyDictionary(���t ���Directive(���t ���__version__(���t ���patchappliert ���monkeypatcht���setupc����������C`�sN���d�d�l��m�}��t�|���d����}�d�d�l�m�}�t�|��d����}�d��S(���Ni����(���t���BuildEnvironmentc���������S`�s���t��|��|��|�|��S(���N(���t���strip_omitted_docs(���t ���__wrapped__t���envt���config_changed(����(����sC���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/page_only.pyt���get_outdated_files4���s���� (���t���TocTreec���������S`�sP���|�j��j�j�j�}�|�j�}�|�j�}�z�|�|�B|�_�|��|��SWd��|�|�_�Xd��S(���N(���t���statet���documentt���settingsR ���t���omitted_by_pageonlyt ���found_docs(���R ���t���selfR ���t ���omitted_docsR���(����(����sC���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/page_only.pyt���runA���s����   (���t���sphinx.environmentR ���R���t���sphinx.directives.otherR���(���R ���R���R���R���(����(����sC���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/page_only.pyt ���_patch_sphinx,���s���� s&���^\.\.\s+page-only::\s+(?P<expr>.+)\s*$c���������C`�s���|��t��|��j�<d�S(���sm��� hack to get app ref w/in env.get_outdated_files() monkeypatch, called on 'builder-inited' event N(���t ���_env_to_appR ���(���t���app(����(����sC���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/page_only.pyt���install_app_ref[���s����c���������C`�s���t��|��}�|��j�}�t���}�x�|�D]�}�t�j�|��j�|��d�d�.�}�d�}�x�|�D]�}�|�j���rW�PqW�qW�WWd�QXt�j�|��}�|�s�q#�n��|�j �j �|�j �d���s#�|�j �|��q#�q#�W|�r�|�j �d�t�|���n��|�|��_�|�j�|��d�S(���s�� helper invoked right before env.get_outdated_files() is called, scans for omitted files and modifies document set accordingly. called via monkeypatch before .get_outdated_files() is run, which happens during env.update(), shortly before 'env-get-outdated' event. t���encodings���latin-1t����Nt���exprs���%s pages omitted by page-only(���R���R���t���sett���iot���opent���doc2patht���stript ���_header_ret���matcht���tagst���eval_conditiont���groupt���addt���infot���lenR���t���difference_update(���R ���R���R���R���t���doct���fht���linet���m(����(����sC���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/page_only.pyR ���c���s$����    !   t���PageOnlyc�����������B`�s5���e��Z�d��Z�e�Z�d�Z�d�Z�e�Z�i��Z �d���Z �RS(���s��� Directive used to capture info. Notes that this doesn't actually do anything, job has already been done by find_omitted_docs(). This is just here to prevent parse errors. i���i����c���������C`�s���g��S(���N(����(���R���(����(����sC���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/page_only.pyR������s����( ���t���__name__t ���__module__t���__doc__t���Falset ���has_contentt���required_argumentst���optional_argumentst���Truet���final_argument_whitespacet ���option_specR���(����(����(����sC���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/page_only.pyR3������s���c���������C`�s���|��j��j�}�xz�|�j�t�j�j��D]c�}�|�d�}�d�}�xJ�|�t�|��k��r�|�|�}�t�|�d��|�k�rw�|�|�=q;�|�d�7}�q;�Wq"�Wd�S(���ss��� remove omitted pages from TOC, let through by TocTree.run() monkeypatch called on doctree-read event. t���entriesi����i���N(���R ���R���t���traverset���sphinxt���addnodest���toctreeR-���t���str(���R���t���doctreeR���t ���toctreenodeR>���t���idxt���entry(����(����sC���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/page_only.pyt���remove_from_toc���s����    c���������C`�sB���t����|��j�d�t��|��j�d�t��|��j�d�t��i�t�d�6S(���Ns ���page-onlys���builder-initeds ���doctree-readt���version(���R���t ���add_directiveR3���t���connectR���RH���R���(���R���(����(����sC���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/page_only.pyR������s ����( ���R6���t ���__future__R����R���R���R"���t���loggingt ���getLoggerR4���t���logt���ret���weakrefR���t���docutils.parsers.rstR���t���sphinx.addnodesR@���t ���cloud_spthemeR���t���cloud_sptheme.utilsR���R���t���__all__R���t���compileR&���R���R���R ���R3���RH���R���(����(����(����sC���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/page_only.pyt���<module>���s&���     (   ' ����������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/perpage.py��������������������������������0000664�0001750�0001750�00000006326�13562544741�025512� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""cloud_sptheme.ext.perpage -- override sphinx config per-page * perpage_html_logo -- glob map (ala html_sidebars), used to change sidebar logo per-page .. todo:: document this extension """ #============================================================================= # imports #============================================================================= # core import os.path import re import logging; log = logging.getLogger(__name__) # site from sphinx.util.matching import patmatch #pkg from cloud_sptheme import __version__ # local #============================================================================= # helpers #============================================================================= def _rank_pattern(pattern): """return sorting key for prioritizing which glob pattern should match""" # TODO: add more ways to distinguish patterns if both have wildcards return not any(char in pattern for char in '*?[') def bestmatch(patmap, source, default=None, param="source"): """return best match given a dictionary mapping glob pattersn -> values""" best = None best_rank = None for pattern in patmap: if not patmatch(pattern, source): continue cur_rank = _rank_pattern(pattern) if best is None or cur_rank < best_rank: best = pattern best_rank = cur_rank elif cur_rank == best_rank: raise KeyError("%s %r matches too many patterns: %r and %r" % (param, source, best, pattern)) if best is None: return default else: return patmap[best] #============================================================================= # sphinx hooks #============================================================================= def perpage_html_logo(app, pagename, templatename, ctx, event_arg): """helper to override sidebar logo per-page""" patmap = getattr(app.config, "perpage_html_logo", {}) logo = bestmatch(patmap, pagename, ctx.get("logo"), param="pagename") if logo is None: ctx.pop("logo", None) else: ctx['logo'] = logo # NOTE: this works, just don't have a use for it yet ##def perpage_html_theme_options(app, pagename, templatename, ctx, event_arg): ## patmap = getattr(app.config, "perpage_html_theme_options") ## if not patmap: ## return ## values = bestmatch(patmap, pagename, None, param="pagename") ## if values: ## for key, value in values.items(): ## # TODO: validate 'key' is valid theme option ## ctx['theme_' + key] = value #============================================================================= # sphinx init #============================================================================= def setup(app): app.add_config_value('perpage_html_logo', None, 'env') ##app.add_config_value('perpage_html_theme_options', None, 'env') app.connect('html-page-context', perpage_html_logo) ##app.connect('html-page-context', perpage_html_theme_options) # identifies the version of our extension return {'version': __version__} #============================================================================= # eof #============================================================================= ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/relbar_links.py���������������������������0000664�0001750�0001750�00000013123�13562544741�026527� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������""" ================================================================= :mod:`cloud_sptheme.ext.relbar_links` - adds TOC entry to relbar ================================================================= .. module:: cloud_sptheme.ext.relbar_links :synopsis: adds TOC entry to right side of relbar .. versionadded:: 1.8.1 Overview ======== This Sphinx extension allows you to insert links into the navigation bar ("relbar") at the top of bottom of all pages. While it can be configured with arbitrary links, by default it automatically inserts a Table Of Contents entry, similar to the old python documentation format. This is mainly useful when the title link in the navigation bar has been redirected to page other than Table Of Contents (such as allowed by the ``roottarget`` option of the :doc:`/cloud_theme`). Configuration ============= By default, this inserts a "TOC" link to the right of any "Next" or "Previous" buttons, which points to your sphinx master document. It can be customized using the following options in ``conf.py``: ``relbar_links`` Optional list of links to insert, defaults to ``["toc"]``. Each list item can have one of four formats: * A dictionary containing the keys ``"page"`` and ``"label"``, as well as optional ``"key"`` and ``"title"`` keywords. "page" should be the an absolute path to your page (e.g. "contents", or "lib/mypage"). "label" is the text that will be displayed on the link, "title" is the tooltip set for the link, and "key" is the accesskey for selecting the link. * A 2-element tuple of ``(page, label)`` * A 4-element tuple of ``(page, title, key, label)`` * The predefined string ``"toc"``, which is replaced with a table of contents link to your master document. ``relbar_links_after`` When inserting the links, this extension will place them as far left as possible, so long as they are to the right of any links that are included in this list. Defaults to ``["next", "previous"]``. """ #========================================================= # imports #========================================================= # core from __future__ import absolute_import, division, print_function import logging log = logging.getLogger(__name__) # site from sphinx.locale import _ # pkg from cloud_sptheme import __version__ from cloud_sptheme.utils import unicode # local __all__ = [ "setup" ] #========================================================= # helpers #========================================================= # indices for looking up link-row elements in relbar entry # TODO: find authoriative source for this info. NAME = 0 # name of document TITLE = 1 # used for [title] attribute ACCESS_KEY = 2 # used for [accesskey] attribute LABEL = 3 # used for link content (NOTE: has already been run through translation) def parse_entry(app, entry): """ normalize entry representation from config """ if entry == "toc": master_doc = app.config.master_doc return master_doc, _("Table Of Contents"), "C", _("toc") if isinstance(entry, (list, tuple)): if len(entry) == 4: return entry if len(entry) == 2: page, label = entry return page, label, None, label elif isinstance(entry, dict): page = entry.get("page") label = entry.get("label") if not (page and label): raise ValueError("dict must define at least 'page' and " "'label': %r" % (entry,)) title = entry.get("title") or label key = entry.get("key") return page, title, key, label raise ValueError("expected dict or 2/4-element sequence: %r" % (entry,)) #========================================================= # hooks #========================================================= def insert_relbar_links(app, pagename, templatename, ctx, event_arg): # check for relbar link list # NOTE: not defined for some pages of some builders, # e.g. json builder's "genindex" page. if "rellinks" not in ctx: return links = ctx['rellinks'] # get list of links to insert custom_links = [parse_entry(app, entry) for entry in app.config.relbar_links] # remove existing links with same label # NOTE: unicode() wrapper is to resolve any _TranslationProxy() instances custom_labels = set(unicode(entry[LABEL]) for entry in custom_links) idx = 0 while idx < len(links): if unicode(links[idx][LABEL]) in custom_labels: del links[idx] else: idx += 1 # insert custom links to right of any "next" / "previous" links # NOTE: 'links' is in right to left order! after_labels = set(unicode(_(label)) for label in app.config.relbar_links_after) for pos, entry in enumerate(links): if unicode(entry[LABEL]) in after_labels: break else: pos = len(links) # insert links links[pos:pos] = custom_links #========================================================= # sphinx entrypoint #========================================================= def setup(app): """ setup extension for sphinx run """ # let user customize list of links app.add_config_value('relbar_links', ["toc"], 'env') app.add_config_value('relbar_links_after', ["next", "previous"], 'env') # attach rewrite-hook app.connect('html-page-context', insert_relbar_links) # identifies the version of our extension return {'version': __version__} #========================================================= # eof #========================================================= ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/relbar_links.pyc��������������������������0000644�0001750�0001750�00000012024�13047214744�026662� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Xc�����������@`�s���d��Z��d�d�l�m�Z�m�Z�m�Z�d�d�l�Z�e�j�e��Z�d�d�l �m �Z �d�d�l �m �Z �d�d�l �m�Z�d�g�Z�d�Z�d�Z�d �Z�d �Z�d ���Z�d ���Z�d ���Z�d�S(���s�� ================================================================= :mod:`cloud_sptheme.ext.relbar_links` - adds TOC entry to relbar ================================================================= .. module:: cloud_sptheme.ext.relbar_toc :synopsis: adds TOC entry to right side of relbar .. versionadded:: 1.8.1 Overview ======== This Sphinx extension allows you to insert links into the navigation bar ("relbar") at the top of bottom of all pages. While it can be configured with arbitrary links, by default it automatically inserts a Table Of Contents entry, similar to the old python documentation format. This is mainly useful when the title link in the navigation bar has been redirected to page other than Table Of Contents (such as allowed by the ``roottarget`` option of the :doc:`/cloud_theme`). Configuration ============= By default, this inserts a "TOC" link to the right of any "Next" or "Previous" buttons, which points to your sphinx master document. It can be customized using the following options in ``conf.py``: ``relbar_links`` Optional list of links to insert, defaults to ``["toc"]``. Each list item can have one of four formats: * A dictionary containing the keys ``"page"`` and ``"label"``, as well as optional ``"key"`` and ``"title"`` keywords. "page" should be the an absolute path to your page (e.g. "contents", or "lib/mypage"). "label" is the text that will be displayed on the link, "title" is the tooltip set for the link, and "key" is the accesskey for selecting the link. * A 2-element tuple of ``(page, label)`` * A 4-element tuple of ``(page, title, key, label)`` * The predefined string ``"toc"``, which is replaced with a table of contents link to your master document. ``relbar_links_after`` When inserting the links, this extension will place them as far left as possible, so long as they are to the right of any links that are included in this list. Defaults to ``["next", "previous"]``. i����(���t���absolute_importt���divisiont���print_functionN(���t���_(���t ���__version__(���t���unicodet���setupi���i���i���c���������C`�s*��|�d�k�r4�|��j��j�}�|�t�d��d�t�d��f�St�|�t�t�f��r�t�|��d�k�r_�|�St�|��d�k�r|�\�}�}�|�|�d �|�f�Sn�t�|�t��r|�j �d��}�|�j �d��}�|�o�|�s�t �d�|�f���n��|�j �d ��p�|�}�|�j �d ��}�|�|�|�|�f�St �d �|�f���d �S( ���s4��� normalize entry representation from config t���tocs���Table Of Contentst���Ci���i���t���paget���labels0���dict must define at least 'page' and 'label': %rt���titlet���keys)���expected dict or 2/4-element sequence: %rN( ���t���configt ���master_docR���t ���isinstancet���listt���tuplet���lent���Nonet���dictt���gett ���ValueError(���t���appt���entryR���R ���R ���R ���R ���(����(����sF���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_links.pyt ���parse_entryT���s&����    c��� ������C`�s��d�|�k�r�d��S|�d�}�g��|��j��j�D]�}�t�|��|��^�q'�}�t�d���|�D��}�d�} �xD�| �t�|��k��r�t�|�| �t��|�k�r�|�| �=qa�| �d�7} �qa�Wt�d���|��j��j�D��} �x@�t�|��D]&�\�} �}�t�|�t��| �k�r�Pq�q�Wt�|��} �|�|�| �| �+d��S(���Nt���rellinksc���������s`�s���|��]�}�t��|�t��Vq�d��S(���N(���R���t���LABEL(���t���.0R���(����(����sF���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_links.pys ���<genexpr>~���s����i����i���c���������s`�s!���|��]�}�t��t�|���Vq�d��S(���N(���R���R���(���R���R ���(����(����sF���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_links.pys ���<genexpr>���s����( ���R ���t ���relbar_linksR���t���setR���R���R���t���relbar_links_aftert ���enumerate( ���R���t���pagenamet ���templatenamet���ctxt ���event_argt���linksR���t ���custom_linkst ���custom_labelst���idxt ���after_labelst���pos(����(����sF���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_links.pyt���insert_relbar_linksp���s"����  %  c���������C`�sJ���|��j��d�d�g�d��|��j��d�d�d�g�d��|��j�d�t��i�t�d�6S( ���s(��� setup extension for sphinx run R���R���t���envR���t���nextt���previouss���html-page-contextt���version(���t���add_config_valuet���connectR+���R���(���R���(����(����sF���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_links.pyR������s����(���t���__doc__t ���__future__R����R���R���t���loggingt ���getLoggert���__name__t���logt ���sphinx.localeR���t ���cloud_spthemeR���t���cloud_sptheme.utilsR���t���__all__t���NAMEt���TITLEt ���ACCESS_KEYR���R���R+���R���(����(����(����sF���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_links.pyt���<module>6���s���    %������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/relbar_toc.py�����������������������������0000664�0001750�0001750�00000002061�13562544741�026173� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������""" cloud_sptheme.ext.relbar_toc -- adds TOC entry (and other links) to relbar. NOTE: this has been renamed to 'relbar_links'. this module is left as a legacy alias. """ #========================================================= # imports #========================================================= # core from __future__ import absolute_import, division, print_function import warnings # pkg from . import relbar_links # local __all__ = [ "setup" ] #========================================================= # sphinx entrypoint #========================================================= def setup(app): """ setup extension for sphinx run """ # TODO: decide when to remove this, and promote to "DeprecationWarning" warnings.warn("'cloud_sptheme.ext.relbar_toc' is deprecated, " "use 'cloud_sptheme.ext.relbar_links' instead", PendingDeprecationWarning) return relbar_links.setup(app) #========================================================= # eof #========================================================= �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/relbar_toc.pyc����������������������������0000644�0001750�0001750�00000001705�13044375667�026344� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ FXc�����������@`�sT���d��Z��d�d�l�m�Z�m�Z�m�Z�d�d�l�Z�d�d�l�m�Z�d�g�Z�d���Z �d�S(���s��� cloud_sptheme.ext.relbar_toc -- adds TOC entry (and other links) to relbar. NOTE: this has been renamed to 'relbar_links'. this module is left as a legacy alias. i����(���t���absolute_importt���divisiont���print_functionNi���(���t ���relbar_linkst���setupc���������C`�s���t��j�d�t��t�j�|���S(���s(��� setup extension for sphinx run sZ���'cloud_sptheme.ext.relbar_toc' is deprecated, use 'cloud_sptheme.ext.relbar_links' instead(���t���warningst���warnt���PendingDeprecationWarningR���R���(���t���app(����(����sD���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_toc.pyR������s���� ( ���t���__doc__t ���__future__R����R���R���R���t����R���t���__all__R���(����(����(����sD���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/relbar_toc.pyt���<module>���s ���  �����������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/role_index.py�����������������������������0000664�0001750�0001750�00000007401�13562544741�026212� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������""" ====================================================== :mod:`cloud_sptheme.ext.role_index` -- JSON Role Index ====================================================== .. versionadded:: 1.8 Overview ======== This sphinx extension for the HTML builder places a file called ``roleindex.json`` in the output directory along with the documentation. This file contains a dictionary which mapping all reference ids (made via ``:ref:`` or ``:doc:``) to a 3-element list of ``(page, anchor, title)`` This is useful for integrating a Sphinx manual into the online help of web application -- context-specific help can be provided by looking up a predefined ``:ref:`` tag within the json file, and redirecting the user to the appropriate page and anchor location. As an example, see the `roleindex.json <../roleindex.json>`_ for this documentation. .. warning:: This extension should be considered "beta" quality. It was recently written, may have unknown issues, and may need to be revised. Configuration ============= This extension reads the following ``conf.py`` options: ``role_index_style`` style of json output -- can be ``"compact"`` (the default), or ``"pretty"`` (for debugging). """ #========================================================= # imports #========================================================= # core from __future__ import absolute_import, division, print_function import codecs import logging log = logging.getLogger(__name__) import json import os # site from sphinx.locale import _TranslationProxy # pkg from cloud_sptheme import __version__ # local __all__ = [ "setup", ] #========================================================= # hooks #========================================================= def write_role_index(app): """ helper which generates ``"roleindex.json"`` for document. """ if app.builder.name != "html": return style = app.config.role_index_style or "compact" index = {} # add 'ref' role mappings index['ref'] = dict( (key, (page, anchor, label)) for key, (page, anchor, label) in app.env.domaindata['std']['labels'].items() ) # add 'doc' role mappings index['doc'] = dict( (doc.lower(), (doc, "", title.astext())) for doc, title in app.env.titles.items() ) # create composite 'all' mapping index['any'] = index['doc'].copy() index['any'].update(index['ref']) # write to file def encode(value): if isinstance(value, _TranslationProxy): return str(value) raise TypeError("can't serialize value: %r (type=%r)" % (value, type(value))) target = os.path.join(app.builder.outdir, "roleindex.json") kwds = dict(sort_keys=True, separators=(",", ":"), default=encode) if style == "compact": pass elif style == "pretty": kwds.update(separators=(", ", ": "), indent=True) else: raise ValueError("unknown role_index_style: %r" % style) with codecs.open(target, "w", encoding="utf-8") as fh: json.dump(index, fh, **kwds) #========================================================= # sphinx entrypoint #========================================================= def setup(app): app.add_config_value('role_index_style', None, 'html') # XXX: this probably isn't right event to attach to... # but want to run during writing phase, after all pages have been scanned into tree, # and this seems like close to the right place. def wrapper(app): write_role_index(app) return [] app.connect('html-collect-pages', wrapper) # identifies the version of our extension return {'version': __version__} #========================================================= # eof #========================================================= ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/role_index.pyc����������������������������0000644�0001750�0001750�00000010271�13051626453�026344� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Xc�����������@`�s���d��Z��d�d�l�m�Z�m�Z�m�Z�d�d�l�Z�d�d�l�Z�e�j�e��Z �d�d�l �Z �d�d�l �Z �d�d�l �m �Z �d�d�l�m�Z�d�g�Z�d���Z�d���Z�d�S( ���s�� ====================================================== :mod:`cloud_sptheme.ext.role_index` -- JSON Role Index ====================================================== .. versionadded:: 1.8 Overview ======== This sphinx extension for the HTML builder places a file called ``roleindex.json`` in the output directory along with the documentation. This file contains a dictionary which mapping all reference ids (made via ``:ref:`` or ``:doc:``) to a 3-element list of ``(page, anchor, title)`` This is useful for integrating a Sphinx manual into the online help of web application -- context-specific help can be provided by looking up a predefined ``:ref:`` tag within the json file, and redirecting the user to the appropriate page and anchor location. As an example, see the `roleindex.json <../roleindex.json>`_ for this documentation. .. warning:: This extension should be considered "beta" quality. It was recently written, may have unknown issues, and may need to be revised. Configuration ============= This extension reads the following ``conf.py`` options: ``role_index_style`` style of json output -- can be ``"compact"`` (the default), or ``"pretty"`` (for debugging). i����(���t���absolute_importt���divisiont���print_functionN(���t���_TranslationProxy(���t ���__version__t���setupc���������C`�sc��|��j��d�k�r�d�S|��j�j�p"�d�}�i��}�t�d���|��j�j�d�d�j���D��|�d�<t�d���|��j�j�j���D��|�d �<|�d �j���|�d �<|�d �j �|�d��d ���}�t �j �j �|��j �j�d ��}�t�d �t�d�d�d�|��}�|�d�k�r�n5�|�d�k�r|�j �d�d�d�t��n�t�d�|���t�j�|�d�d�d��}�t�j�|�|�|��Wd�QXd�S(���sC��� helper which generates ``"roleindex.json"`` for document. t���htmlNt���compactc���������s`�s3���|��])�\�}�\�}�}�}�|�|�|�|�f�f�Vq�d��S(���N(����(���t���.0t���keyt���paget���anchort���label(����(����sD���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/role_index.pys ���<genexpr>D���s���t���stdt���labelst���refc���������s`�s6���|��],�\�}�}�|�j����|�d��|�j���f�f�Vq�d�S(���t����N(���t���lowert���astext(���R���t���doct���title(����(����sD���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/role_index.pys ���<genexpr>K���s���R���t���anyc���������S`�s9���t��|��t��r�t�|���St�d�|��t�|���f���d��S(���Ns#���can't serialize value: %r (type=%r)(���t ���isinstanceR���t���strt ���TypeErrort���type(���t���value(����(����sD���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/role_index.pyt���encodeT���s���� s���roleindex.jsont ���sort_keyst ���separatorst���,t���:t���defaultt���prettys���, s���: t���indents���unknown role_index_style: %rt���wt���encodings���utf-8(���R���R���(���s���, s���: (���t ���buildernamet���configt���role_index_stylet���dictt���envt ���domaindatat���itemst���titlest���copyt���updatet���ost���patht���joint���buildert���outdirt���Truet ���ValueErrort���codecst���opent���jsont���dump(���t���appt���stylet���indexR���t���targett���kwdst���fh(����(����sD���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/role_index.pyt���write_role_index7���s,����%   c���������C`�s7���|��j��d�d��d��d���}�|��j�d�|��i�t�d�6S(���NR'���R���c���������S`�s���t��|���g��S(���N(���R@���(���R:���(����(����sD���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/role_index.pyt���wrappern���s���� s���html-collect-pagest���version(���t���add_config_valuet���Nonet���connectR���(���R:���RA���(����(����sD���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/role_index.pyR���g���s���� (���t���__doc__t ���__future__R����R���R���R6���t���loggingt ���getLoggert���__name__t���logR8���R/���t ���sphinx.localeR���t ���cloud_spthemeR���t���__all__R@���R���(����(����(����sD���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/role_index.pyt���<module>!���s���      0���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/static/�����������������������������������0000775�0001750�0001750�00000000000�13654052716�024773� 5����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/static/auto_redirect.css������������������0000664�0001750�0001750�00000002566�13562544741�030351� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* css fragment used by cloud_sptheme.ext.auto_redirect */ .c-redirect-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(255,255,255,0.8); z-index: 1000; } .c-redirect-warning { text-align: center; box-shadow: 0 2px 4px -1px rgba(0,0,0,0.5); } /* hack to override docutils */ div.admonition.c-redirect-warning { background-position: 1em 50%; padding: 2em 4em 1.5em; border-width: 1em 1px; } .c-redirect-warning.is-clickable { cursor: pointer; } .c-redirect-overlay .c-redirect-warning { position: fixed; top: 1em; left: 2em; right: 2em; box-shadow: 0 4px 8px -1px rgba(0,0,0,0.5); } html.medium-up-screen .c-redirect-overlay .c-redirect-warning { width: max-content; width: -moz-max-content; left: 50%; right: auto; transform: translateX(-50%); } div.body p.c-redirect-warning__header { display: block; font-weight: bold; text-align: center; } .c-redirect-warning__link { display: block; text-align: center; font-weight: bold; font-size: 1.1em; padding: 0.5em; } .c-redirect-warning__link:before { content: "↪ "; } div.body p.c-redirect-warning__auto, div.body p.c-redirect-warning__footer { text-align: center; } ������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/static/auto_redirect.html_t���������������0000664�0001750�0001750�00000006457�13562544741�031053� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{# template for html fragment injected by auto_redirect extension args ---- redirector -- RedirectSettings instance .subject .domain_url .domain_root .timeout NOTE: the html fragment is designed to layout properly, and provide a minimally functional redirect, even if the JS fails. #} <div class="admonition warning without-title c-redirect-warning"> <p class="c-redirect-warning__header"> {{ redirector.domain_subject }} has moved to <a class="c-redirect-warning__link" href="{{ redirector.domain_url }}">{{ redirector.domain_url }}</a> </p> <p class="c-redirect-warning__auto" style="display: none"> You will be redirected to the new location in <span class="c-redirect-warning__count">{{ redirector.timeout }}</span> seconds. </p> {% if redirector.domain_footer %} <p class="c-redirect-warning__footer"> {{ redirector.domain_footer|safe }} </p> {% endif %} </div> <script type="text/javascript"> $(function (){ // locate components & init state var $overlay = $('<div class="c-redirect-overlay" />'), $warning = $(".c-redirect-warning"), $link = $(".c-redirect-warning__link"), $auto = $(".c-redirect-warning__auto"), $count = $(".c-redirect-warning__count"), timeout = +new Date + {{ redirector.timeout }} * 1000, pending = null, target = $link.attr("href"), domain_root = "{{ redirector.domain_root }}", url = document.location.href, root_url = CST.hosturl + CST.rootpath, getSubUrl = CST.utils.getSubUrl; // make redirect target point to equivalent page, not just document root // XXX: could just pull from link[rel=canonical] instead... var sub_url = getSubUrl(url, root_url); if(domain_root && sub_url !== undefined){ target = domain_root + sub_url; $link.attr("href", target); } // make warning clicks act like they clicked link $warning.click(function (evt){ if(evt.which == 1) { window.location = target; } evt.stopPropagation(); }).addClass("is-clickable"); // if came from within document, dont' show overlay or do auto redirect if(getSubUrl(document.referrer || '', root_url) !== undefined){ return; } // mute everything but warning $overlay.appendTo("body").append($warning); // helper update counter & redirect after timeout function update(){ var delta = timeout - new Date; if(delta < 0){ window.location = target; setTimeout(function (){ $auto.hide(); }, 250); } else { $count.html(Math.ceil(delta / 1000)); pending = setTimeout(update, 250); } } // start counter {% if redirector.timeout > 0 %} update(); $auto.show(); {% endif %} // stop auto-redirect if they click outside of warning $(window).one("click", function (evt){ $auto.hide(); clearTimeout(pending); $warning.prependTo(".body"); $overlay.remove(); }); }); </script> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/static/table_styling.css������������������0000664�0001750�0001750�00000002465�13562561107�030351� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* css fragment used by cloud_sptheme.ext.table_styling * for themes which don't derive from base cloud theme */ /* TODO: could replace most of these with sphinx 2.x's ".align-xxx" utility classes, as well as switch to their :align: directive */ table.docutils .left-align { text-align: left; } table.docutils .center-align { text-align: center; } table.docutils .right-align { text-align: right; } table.docutils .justify-align { text-align: justify; } table.docutils .nowrap { white-space: nowrap; } table.docutils .no-left-divider { border-left-width: 0; } table.docutils .single-left-divider { border-left-width: 2px; border-left-style: solid; } table.docutils .double-left-divider { border-left-width: 6px; border-left-style: double; } table.docutils .no-right-divider, table.docutils .single-right-divider, table.docutils .double-right-divider { border-right-width: 0; } table.docutils .single-right-divider:last-child { border-right-width: 2px; border-right-style: solid; } table.docutils .double-right-divider:last-child { border-right-width: 6px; border-right-style: double; } /* make paragraphs inherit alignment from TD/TH; needed for sphinx 2.0 */ /* XXX: would it be good to replicate "text-align: justify" to table.docutils td/th? */ table.docutils th > p, table.docutils td > p { text-align: inherit; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/table_styling.py��������������������������0000664�0001750�0001750�00000031237�13562561107�026721� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""cloud_sptheme.ext.table_styling -- add directives for styling tables""" #============================================================================= # imports #============================================================================= # core from cloud_sptheme.utils import PY3 if PY3: from itertools import zip_longest as izip_longest else: # FIXME: not present in py25 from itertools import izip_longest import os # site from docutils import nodes from docutils.parsers.rst import directives from docutils.parsers.rst.directives.tables import RSTTable from sphinx.builders.html import StandaloneHTMLBuilder try: # sphinx 1.5 has it's own RSTTable, inherit from that if available. from sphinx.directives.patches import RSTTable except ImportError: pass # pkg from cloud_sptheme import __version__ from cloud_sptheme import _root_dir, is_cloud_theme from cloud_sptheme.utils import add_static_file # local __all__ = [ "setup", ] #============================================================================= # constants #============================================================================= # name of key controlling whether css file is included EMBED_KEY = "table_styling_embed_css" # name of key controlling css class name CLASS_KEY = "table_styling_class" # name of key controlling css class name TABLE_DEFAULT_ALIGN_KEY = "table_styling_default_align" #============================================================================= # field option parsers #============================================================================= def _split_argument_list(argument): if "," in argument: return argument.split(",") else: return argument.split() def _parse_argument_map(argument, argmap, param): args = _split_argument_list(argument) if len(args) == 1 and all(c in argmap for c in args[0]): args = args[0] def norm(arg): try: return argmap[arg] except KeyError: raise ValueError("invalid %s: %r" % (param, arg)) return [norm(arg) for arg in args] #: list of css classes from cloud.css_t which affect table alignment. #: if any of these are present, TABLE_DEFAULT_ALIGN_KEY will be suppressed. _cloud_table_align_classes = set(["centered"]) _alignment_map = dict( l="left", r="right", c="center", j="justify", left="left", right="right", center="center", centered="center", # compat alias justify="justify", justified="justify", # compat alias ) def alignment_list(argument): """convert into list of alignment options. raise ``ValueError`` if no args found, or invalid strings. """ return _parse_argument_map(argument, _alignment_map, "alignment") _bool_map = {"true": True, "t": True, "yes": True, "y": True, "false": False, "f": False, "no": False, "n": False, } def bool_list(argument): """convert to list of true/false values""" return _parse_argument_map(argument, _bool_map, "boolean value") def class_option_list(argument): """convert to list of list of classes""" args = _split_argument_list(argument) return [directives.class_option(arg) for arg in args] _divider_map = { "0": "no", "1": "single", "2": "double", "none": "no", "single": "single", "double": "double", } def divider_list(argument): return _parse_argument_map(argument, _divider_map, "divider style") #============================================================================= # replacement for table directive #============================================================================= class ExtendedRSTTable(RSTTable): # TODO: could have this auto-generate tabularcolumns directive for latex, # based on alignment, dividers, and wrapping settings: # |,|| for dividers # l,c,r - align, nowrap # L,C,R,J - align, wrap # XXX: how to handle widths for tabularcolumns? option_spec = RSTTable.option_spec.copy() option_spec.update({ # class, name already present 'header-columns': directives.nonnegative_int, # TODO: column-widths: support limited set of units (em/in/%) # expressable under both css & latex 'widths': directives.positive_int_list, 'column-alignment': alignment_list, 'header-alignment': alignment_list, 'column-wrapping': bool_list, 'column-classes': class_option_list, 'column-dividers': divider_list, }) @property def config(self): """ custom hack to get config object easily """ return self.state.document.settings.env.config def run(self): result = RSTTable.run(self) if result and isinstance(result[0], nodes.table): self._update_table_classes(result[0]) return result def _update_table_classes(self, table): # add global "table_styling_class" assert isinstance(table, nodes.table) config = self.config classes = getattr(config, CLASS_KEY) if classes: for cls in classes.split(): table['classes'].append(cls) self._update_table_alignment(table) # figure out how many header rows & columns options = self.options header_cols = options.get("header-columns") or 0 widths = options.get("widths") # Parse column options into list of ColumnOptions records. # If any option is short, it will be padded with ``None`` values # to match the longest list. EMPTY = () opts = tuple(izip_longest( options.get("column-alignment", EMPTY), options.get("header-alignment", EMPTY), options.get("column-wrapping", EMPTY), options.get("column-classes", EMPTY), options.get("column-dividers", EMPTY), )) NULL_OPTIONS = [None] * 5 # try to find "tgroup" node holding thead/tbody etc def locate(cls): for child in table.children: if isinstance(child, cls): return child return None tgroup = locate(nodes.tgroup) if not tgroup: return # loop through content of 'tgroup' node -- # should be 0+ 'colspec' nodes, 0-1 thead node, and 0-1 tbody nodes. # NOTE: using 'cgroup_idx' as hack to track colgroup index cgroup_idx = 0 for child in tgroup: # handle colspec entry (corresponding to COLGROUP) # set group width & mark "header" columns if isinstance(child, nodes.colspec): if widths and cgroup_idx < len(widths): child['colwidth'] = widths[cgroup_idx] if cgroup_idx < header_cols: child['stub'] = 1 cgroup_idx += 1 continue # otherwise have thead / tbody -- # loop through each row in child, adding classes as appropriate assert isinstance(child, (nodes.thead, nodes.tbody)) for row in child.children: # check if we're in a header is_header_row = isinstance(child, nodes.thead) # Add alignment and wrap classes to each column (would add to # colspec instead, but html doesn't inherit much from colgroup) # We iterate trough the list of table cells in the row while # maintaining the column format index in parallel assert isinstance(row, nodes.row) colidx = 0 # visible idx, to account for colspans prev_col_classes = None for idx, col in enumerate(row): # get align/wrap options for column try: col_opts = opts[colidx] except IndexError: col_opts = NULL_OPTIONS align, header_align, wrap, clist, divider = col_opts # let header values override defaults if is_header_row: align = header_align if align is None: align = "left" # add alignment / wrapping classes for column assert isinstance(col, nodes.entry) classes = col['classes'] if align: classes.append(align + "-align") if wrap is False: classes.append("nowrap") if clist: classes.extend(clist) if divider: # add divider class for left side of this column, classes.append(divider + "-left-divider") # same divider type to right side of previous column, # so that css can bind to either. if prev_col_classes is not None: prev_col_classes.append(divider + "-right-divider") # update prev_col_classes for next pass prev_col_classes = classes # Now it's the time to advance the column format index. # If we have a cell spans across the columns, we add the # value of 'morecols', so we get the proper right divider # for the current cell and the proper format index for the # next loop iteration colidx += 1 + col.get("morecols", 0) # add divider to right side of last column if prev_col_classes and colidx < len(opts): align, header_align, wrap, clist, divider = opts[colidx] if divider: prev_col_classes.append(divider + "-right-divider") def _update_table_alignment(self, table): """ custom method to help with table alignment -- add default alignment, UNLESS one of cloud's table alignment directives is present """ config = self.config # debug hack # print("table: classes=%r attrs=%r default=%r" % (table["classes"], table.attributes, getattr(config, TABLE_DEFAULT_ALIGN_KEY))) # don't do anything if :align: directive present align = table.attributes.get("align") if align: # TODO: would like to patch things so could pass in "fullwidth" here. return # don't do anything if cloud.css alignment-related rst-class is present for_cloud = is_cloud_theme(config.html_theme) if for_cloud and _cloud_table_align_classes.intersection(table["classes"]): return # apply default alignment align = getattr(config, TABLE_DEFAULT_ALIGN_KEY) if align: table.attributes["align"] = align #============================================================================= # patch builder to copy css file (if needed) #============================================================================= css_path = os.path.join(_root_dir, "ext", "static", "table_styling.css") def prepare_builder(app): # make sure needed css styling gets included when building html builder = app.builder if not isinstance(builder, StandaloneHTMLBuilder): return if not getattr(app.config, EMBED_KEY): return # add custom css stylesheet add_static_file(builder, css_path, stylesheet=True) #============================================================================= # register extension #============================================================================= def setup(app): # whether it will embed raw css app.add_config_value(EMBED_KEY, True, "html") # default class to add to all styled tables app.add_config_value(CLASS_KEY, "styled-table", "html") # set default value for :align: directive # (sphinx 2.0 forces "center" as the default) app.add_config_value(TABLE_DEFAULT_ALIGN_KEY, "", "html") # HACK: sphinx (>= 1.5) issues warning about replacing RSTTable. # we know that's happening, so pop it out of registry first. # (but ONLY if what's there wasn't already patched) directive_map = directives._directives if directive_map.get("table") is RSTTable: directive_map.pop("table") # replace existing table directive with custom one app.add_directive("table", ExtendedRSTTable) # add extra resources app.connect("builder-inited", prepare_builder) # identifies the version of our extension return {'version': __version__} #============================================================================= # eof #============================================================================= �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/ext/table_styling.pyc�������������������������0000644�0001750�0001750�00000017535�13140723354�027063� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ !hXc�����������@���s.��d��Z��d�d�l�m�Z�e�r/�d�d�l�m�Z�n�d�d�l�m�Z�d�d�l�Z�d�d�l�m�Z�d�d�l �m �Z �d�d�l �m �Z �d�d �l �m�Z�y�d�d�l�m �Z �Wn�e�k �r�n�Xd�d �l�m�Z�d�d �l�m�Z�m�Z�d�d �l�m�Z�d �g�Z�d�Z�d�Z�d���Z�d���Z�e�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�� Z�d���Z�i�e�d�6e�d�6e�d�6e�d �6e�d!�6e�d"�6e�d#�6e�d$�6Z �d%���Z!�d&���Z"�i�d#�d'�6d(�d)�6d*�d+�6d#�d,�6d(�d(�6d*�d*�6Z#�d-���Z$�d.�e �f�d/�����YZ%�e�j&�j'�e�d0�d1�d2��Z(�d3���Z)�d4���Z*�d�S(5���sD���cloud_sptheme.ext.table_styling -- add directives for styling tablesi(���t���PY3(���t ���zip_longest(���t ���izip_longestN(���t���nodes(���t ���directives(���t���RSTTable(���t���StandaloneHTMLBuilder(���t ���__version__(���t ���_root_dirt���is_cloud_theme(���t���add_static_filet���setupt���table_styling_embed_csst���table_styling_classc���������C���s'���d�|��k�r�|��j��d��S|��j����Sd��S(���Nt���,(���t���split(���t���argument(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.pyt���_split_argument_list-���s����  c������������sz���t��|���}�t�|��d�k�rK�t���f�d���|�d�D��rK�|�d�}�n�����f�d���}�g��|�D]�}�|�|��^�qd�S(���Ni���c���������3���s���|��]�}�|���k�Vq�d��S(���N(����(���t���.0t���c(���t���argmap(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.pys ���<genexpr>5���s����i����c������������s:���y ���|��SWn'�t��k �r5�t�d��|��f���n�Xd��S(���Ns���invalid %s: %r(���t���KeyErrort ���ValueError(���t���arg(���R���t���param(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.pyt���norm7���s����  (���R���t���lent���all(���R���R���R���t���argsR���R���(����(���R���R���sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.pyt���_parse_argument_map3���s ���� 2 t���lt���leftt���rt���rightR���t���centert���jt���justifyt���centeredt ���justifiedc���������C���s���t��|��t�d��S(���sk���convert into list of alignment options. raise ``ValueError`` if no args found, or invalid strings. t ���alignment(���R���t���_alignment_map(���R���(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.pyt���alignment_listK���s����t���truet���tt���yest���yt���falset���ft���not���nc���������C���s���t��|��t�d��S(���s$���convert to list of true/false valuess ���boolean value(���R���t ���_bool_map(���R���(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.pyt ���bool_listW���s����c���������C���s,���t��|���}�g��|�D]�}�t�j�|��^�q�S(���s"���convert to list of list of classes(���R���R���t ���class_option(���R���R���R���(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.pyt���class_option_list[���s���� t���0t���singlet���1t���doublet���2t���nonec���������C���s���t��|��t�d��S(���Ns ���divider style(���R���t ���_divider_map(���R���(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.pyt ���divider_listi���s����t���ExtendedRSTTablec�����������B���sm���e��Z�e�j�j���Z�e�j�i�e�j�d��6e�j�d�6e �d�6e �d�6e �d�6e �d�6e �d�6�d���Z �d���Z�RS( ���s���header-columnst���widthss���column-alignments���header-alignments���column-wrappings���column-classess���column-dividersc���������C���sC���t��j�|���}�|�r?�t�|�d�t�j��r?�|��j�|�d��n��|�S(���Ni����(���R���t���runt ���isinstanceR���t���tablet���_update_table_classes(���t���selft���result(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.pyR@������s����c������ ������s��t����t�j��s�t��|��j�j�j�j�j�}�t �|�t ��}�|�rm�x(�|�j ���D]�}���d�j �|��qO�Wn��|��j �}�|�j�d��p�d�}�|�j�d��}�d�}�t�t�|�j�d�|��|�j�d�|��|�j�d�|��|�j�d�|��|�j�d �|����} �d��g�d �} ���f�d ���} �| �t�j��} �| �s/d��Sd�} �xq| �D]i}�t��|�t�j��r|�r}| �t�|��k��r}|�| �|�d �<n��| �|�k��rd �|�d�<n��| �d �7} �q<n��t��|�t�j�t�j�f��st��x|�j�D]}�t��|�t�j��}�t��|�t�j��st��d�}�d��}�xCt�|��D]5\�}�}�y�| �|�}�Wn�t�k �rM| �}�n�X|�\�}�}�}�}�}�|�rr|�}�n��|�d��k�rd�}�n��t��|�t�j��st��|�d�}�|�r|�j �|�d��n��|�t�k�r|�j �d��n��|�r|�j�|��n��|�r/|�j �|�d��|�d��k �r/|�j �|�d��q/n��|�}�|�d �|�j�d�d��7}�qW|�r|�t�| ��k��r| �|�\�}�}�}�}�}�|�r|�j �|�d��qqqWq<Wd��S(���Nt���classess���header-columnsi����R?���s���column-alignments���header-alignments���column-wrappings���column-classess���column-dividersi���c������������s+���x$���j��D]�}�t�|�|���r �|�Sq �Wd��S(���N(���t���childrenRA���t���None(���t���clst���child(���RB���(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.pyt���locate���s����t���colwidthi���t���stubR���s���-alignt���nowraps ���-left-dividers���-right-dividert���morecols(����(���RA���R���RB���t���AssertionErrort���statet���documentt���settingst���envt���configt���getattrt ���CLASS_KEYR���t���appendt���optionst���gett���tupleR���RH���t���tgroupt���colspecR���t���theadt���tbodyRG���t���rowt ���enumeratet ���IndexErrort���entryt���Falset���extend(���RD���RB���RU���RF���RI���RY���t ���header_colsR?���t���EMPTYt���optst ���NULL_OPTIONSRK���R\���t ���cgroup_idxRJ���R`���t ���is_header_rowt���colidxt���prev_col_classest���idxt���colt���col_optst���alignt ���header_alignt���wrapt���clistt���divider(����(���RB���sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.pyRC������s����      !        (���t���__name__t ���__module__R���t ���option_spect���copyt���updateR���t���nonnegative_intt���positive_int_listR)���R3���R5���R=���R@���RC���(����(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.pyR>���p���s���     t���extt���statics���table_styling.cssc���������C���sq���|��j��}�t�|�t��s�d��St�|��j�t��}�|�d��k�rP�t�|��j�j�� }�n��|�sZ�d��St �|�t �d�t �d��S(���Nt ���stylesheet( ���t���builderRA���R���RV���RU���t ���EMBED_KEYRH���R ���t ���html_themeR ���t���css_patht���True(���t���appR���t���value(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.pyt���prepare_builder��s����  c���������C���s���|��j��t�d��d��|��j��t�d�d��t�j�}�|�j�d��}�|�t�k�rZ�|�j�d��n��|��j �d�t ��|��j �d�t ��i�t �d�6S(���Nt���htmls ���styled-tableRB���s���builder-initedt���version(���t���add_config_valueR���RH���RW���R���t ���_directivesRZ���R���t���popt ���add_directiveR>���t���connectR���R���(���R���t ���directive_mapt���existing(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.pyR �����s����  (+���t���__doc__t���cloud_sptheme.utilsR����t ���itertoolsR���R���t���ost���docutilsR���t���docutils.parsers.rstR���t&���docutils.parsers.rst.directives.tablesR���t���sphinx.builders.htmlR���t���sphinx.directives.patchest ���ImportErrort ���cloud_spthemeR���R���R ���R ���t���__all__R���RW���R���R���t���dictR(���R)���R���Rd���R2���R3���R5���R<���R=���R>���t���patht���joinR���R���R ���(����(����(����sG���/home/biscuit/dev/libs/cloud/default/cloud_sptheme/ext/table_styling.pyt���<module>���sf���            �������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/make_helper.py��������������������������������0000644�0001750�0001750�00000021077�12444410521�025523� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������"""helper for quick cross-platform makefile for sphinx TODO: this was hacked up really quickly, could use lots of work. """ #=============================================================== #imports #=============================================================== #core from __future__ import print_function import logging; log = logging.getLogger(__name__) import os,sys from string import Template import subprocess #pkg #local __all__ = [ "SphinxMaker", ] #=============================================================== #misc helpers #=============================================================== def sub(fmt, **kwds): if not kwds: kwds = globals() return Template(fmt).substitute(**kwds) #=============================================================== #fs helpers #=============================================================== joinpath = os.path.join def abspath(*args): return os.path.abspath(joinpath(*args)) if hasattr(os.path, "realpath"): def realpath(*args): return os.path.realpath(joinpath(*args)) else: #probably windows - fake it best we can def realpath(*args): return os.path.normcase(os.path.abspath(joinpath(*args))) def pathdir(path): return os.path.split(path)[0] def clearpath(path): "recursively remove all contents of dir, but leave dir" for root, dirs, files in os.walk(path, topdown=False): for name in files: os.remove(joinpath(root, name)) for name in dirs: os.rmdir(joinpath(root, name)) def rmpath(path): "drecursively delete path" if os.path.exists(path): if os.path.isdir(path): clearpath(path) os.rmdir(path) else: os.remove(path) def ensuredirs(path): "ensure specified directory & all parents exist" if not os.path.isdir(path): os.makedirs(path) #=============================================================== #main class #=============================================================== class SphinxMaker(object): #=============================================================== #class attrs #=============================================================== # You can subclass these variables SPHINXOPTS = [] SPHINXBUILD = "sphinx-build" PAPER = "letter" SERVEHTML_PORT = 8000 # Paths BUILD = "_build" SOURCE = "." #internal opts PAPEROPT_a4 = ["-D","latex_paper_size=a4"] PAPEROPT_letter = ["-D","latex_paper_size=letter"] #: list of attrs to check os.environ for overriddes. env_vars = [ "SPHINXOPTS", "SPHINXBUILD", "PAPER", "SERVEHTML_PORT", "BUILD", "SOURCE" ] #=============================================================== #instance attrs #=============================================================== root_dir = None conf_file = None conf = None #=============================================================== #frontend #=============================================================== def __init__(self, root_dir=None, **kwds): #FIXME: this may not be properly flexible. if root_dir is None: root_dir = joinpath(sys.modules["__main__"].__file__, os.pardir) self.root_dir = abspath(root_dir) self.conf_file = joinpath(self.root_dir, "conf.py") if not os.path.exists(self.conf_file): raise RuntimeError("conf file not found in root: %r" % (self.root_dir)) #check environment for overrides, as well as constructor for key in self.env_vars: value = kwds.pop(key, None) value = os.environ.get(key, value) if value is not None: t = type(getattr(self,key)) #FIXME: this is *real* hacked way to do type conversion if isinstance(t, str): if isinstance(t, int): #for ints, eg SERVEHTML_PORT value = int(t) elif isinstance(t, list): #for list of arguments, eg SPHINXOPTS #FIXME: should use proper quote escaping logic when we split :( value = " ".split(value) setattr(self, key, value) # make all relative paths relative to root dir for name in ("BUILD", "SOURCE"): value = getattr(self, name) if not os.path.isabs(value): value = abspath(self.root_dir, value) setattr(self, name, value) if kwds: raise TypeError("unknown keywords: %r" % (kwds,)) @classmethod def execute(cls, args=None, **kwds): return cls(**kwds).run(args) def run(self, args=None): if args is None: args = sys.argv[1:] os.chdir(self.root_dir) #due to relative paths like self.BUILD for arg in args: getattr(self,"target_"+arg)() #=============================================================== #targets #=============================================================== def target_help(self): print("Please use \`make <target>' where <target> is one of") print(" clean remove all compiled files") print(" html to make standalone HTML files") print(" servehtml to serve standalone HTML files on port 8000") # print(" pickle to make pickle files") # print(" json to make JSON files") print(" htmlhelp to make HTML files and a HTML help project") # print(" latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter") # print(" changes to make an overview over all changed/added/deprecated items") # print(" linkcheck to check all external links for integrity") def target_clean(self): rmpath(self.BUILD) def target_html(self): self.build("html") def target_htmlhelp(self): self.build("htmlhelp") def target_servehtml(self): path = realpath(self.BUILD, "html") port = self.SERVEHTML_PORT # try to use paste try: from paste.httpserver import serve from paste.urlparser import StaticURLParser except ImportError: # fall back to stdlib server if sys.version_info[0] >= 3: import http.server as s HTTPServer = s.HTTPServer else: import SimpleHTTPServer as s HTTPServer = s.BaseHTTPServer.HTTPServer os.chdir(path) print("Serving files from %r on port %r" % (path, port)) HTTPServer(('',port), s.SimpleHTTPRequestHandler).serve_forever() else: serve(StaticURLParser(path), host="0.0.0.0", port=port) #TODO: support latex, pdf, etc... ##def target_latex(self): ## build("latex") ## print("Run \`make all-pdf' or \`make all-ps' in that directory to" \ ## "run these through (pdf)latex.") ## ##def target_pdf(): ## assert os.name == "posix", "pdf build support not automated for your os" ## build("latex") ## target = BUILD / "latex" ## target.chdir() ## subprocess.call(['make', 'all-pdf']) ## print("pdf built") #=============================================================== #helpers #=============================================================== def build(self, name): BUILD = self.BUILD ALLSPHINXOPTS = self.get_sphinx_opts() dt = joinpath(BUILD, "doctrees") ensuredirs(dt) target = joinpath(BUILD, name) ensuredirs(target) rc = subprocess.call([self.SPHINXBUILD, "-b", name] + ALLSPHINXOPTS + [ target ]) if rc: print("Sphinx-Build returned error, exiting.") sys.exit(rc) print("Build finished. The %s pages are in %r." % (name, target,)) return target def get_paper_opts(self): return getattr(self,"PAPER_" + self.PAPER, []) def get_sphinx_opts(self): return ["-d", joinpath(self.BUILD, "doctrees")] + self.get_paper_opts() + self.SPHINXOPTS + [ self.SOURCE ] #=============================================================== #eoc #=============================================================== class ProjectSphinxMaker(SphinxMaker): "SphinxMaker variant which more usefully integrates into setup.py of a python project" #TODO: make this read setup.cfg etc to see where build_sphinx *actually* puts things BUILD = os.path.join(os.pardir, "build", "sphinx") #=============================================================== #eof #=============================================================== �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/tests/����������������������������������������0000775�0001750�0001750�00000000000�13654052716�024046� 5����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/tests/__init__.py�����������������������������0000664�0001750�0001750�00000000062�13562544741�026157� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������""" cloud_sptheme.tests.utils -- test helpers """ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/tests/test_ext_relbar_toc.py������������������0000664�0001750�0001750�00000012537�13562544741�030465� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������""" cloud_sptheme.tests -- test relbar_toc extension """ #============================================================================= # imports #============================================================================= # core from __future__ import absolute_import, division, print_function import logging log = logging.getLogger(__name__) import os # site import mock # pkg from .utils import TestCase, unittest # subject from cloud_sptheme.ext import relbar_links # local __all__ = [ ] #============================================================================= # extension test #============================================================================= # root_dir = os.path.abspath(os.path.join(__file__, *[".."]*3)) # docs_dir = os.path.join(root_dir, "docs") # TODO: would like to test extensions *actual* behavior with sphinx, # and/or test our assumptions about format of ctx & ctx['rellinks']. # Have idea of running integration test by running sphinx, # and building either our docs, or some "test" docs; # and then examining the output. not sure best way to approach # that though. # from sphinx import main # target_dir = self.makeTempDir() # self.assertFalse(main(["sphinx", "-b", "html", "-E", docs_dir, target_dir])) #============================================================================= # utils tests #============================================================================= class UtilsTestCase(TestCase): def setUp(self): super(UtilsTestCase, self).setUp() # patch sphinx's _() to be noop patch = mock.patch.object(relbar_links, "_", side_effect=lambda s: s) self.addCleanup(patch.__exit__) patch.__enter__() def test_insert_no_links(self): """ test insert hooks -- with no links present (e.g. json builder) """ from cloud_sptheme.ext.relbar_links import insert_relbar_links app = mock.Mock() insert_relbar_links(app, None, None, {}, None) def test_insert_default(self): """ test insert hooks -- with default links """ from cloud_sptheme.ext.relbar_links import insert_relbar_links app = mock.Mock() app.config.master_doc = "test-contents" app.config.relbar_links = ["toc"] app.config.relbar_links_after = ["next", "previous"] links = [ ("genindex", "General Index", "I", "genidx"), ("next-test-page", "Next Page", "N", "next"), ("previous-test-page", "Previous Page", "P", "previous"), ] insert_relbar_links(app, None, None, dict(rellinks=links), None) self.assertEqual(links, [ ("genindex", "General Index", "I", "genidx"), ("test-contents", "Table Of Contents", "C", "toc"), ("next-test-page", "Next Page", "N", "next"), ("previous-test-page", "Previous Page", "P", "previous"), ]) def test_insert_custom(self): """ test insert hooks -- with custom links """ from cloud_sptheme.ext.relbar_links import insert_relbar_links app = mock.Mock() app.config.relbar_links = [dict(page="my-page", label="my page")] app.config.relbar_links_after = ["previous"] links = [ ("genindex", "General Index", "I", "genidx"), ("next-test-page", "Next Page", "N", "next"), ("previous-test-page", "Previous Page", "P", "previous"), ] insert_relbar_links(app, None, None, dict(rellinks=links), None) self.assertEqual(links, [ ("genindex", "General Index", "I", "genidx"), ("next-test-page", "Next Page", "N", "next"), ("my-page", "my page", None, "my page"), ("previous-test-page", "Previous Page", "P", "previous"), ]) def test_parse_entry(self): """ test parse_entry() helper """ from cloud_sptheme.ext.relbar_links import parse_entry app = mock.Mock() app.config.master_doc = "test-master-doc" # # dicts # self.assertRaises(ValueError, parse_entry, app, dict()) self.assertRaises(ValueError, parse_entry, app, dict(page="page")) self.assertRaises(ValueError, parse_entry, app, dict(label="label")) self.assertEqual(parse_entry(app, dict(page="page", label="label")), ("page", "label", None, "label")) self.assertEqual(parse_entry(app, dict(page="page", title="title", key="key", label="label")), ("page", "title", "key", "label")) # # tuples # self.assertRaises(ValueError, parse_entry, app, ()) self.assertRaises(ValueError, parse_entry, app, ("a",)) self.assertEqual(parse_entry(app, ("page", "label")), ("page", "label", None, "label")) self.assertRaises(ValueError, parse_entry, app, ("a", "b", "c")) self.assertEqual(parse_entry(app, ("page", "title", "key", "label")), ("page", "title", "key", "label")) # # other # self.assertEqual(parse_entry(app, "toc"), ("test-master-doc", "Table Of Contents", "C", "toc")) #============================================================================= # eof #============================================================================= �����������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/tests/utils.py��������������������������������0000664�0001750�0001750�00000001551�13562544741�025564� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������""" cloud_sptheme.tests.utils -- test helpers """ #============================================================================= # imports #============================================================================= # core from __future__ import absolute_import, division, print_function import logging log = logging.getLogger(__name__) try: import unittest2 as unittest except ImportError: import unittest # site # pkg # local __all__ = [ "TestCase", "unittest", ] #============================================================================= # custom test case #============================================================================= class TestCase(unittest.TestCase): pass #============================================================================= # eof #============================================================================= �������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/���������������������������������������0000775�0001750�0001750�00000000000�13654052715�024170� 5����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/���������������������������������0000775�0001750�0001750�00000000000�13654052716�025277� 5����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/globaltoc.html�������������������0000644�0001750�0001750�00000000420�12744461316�030124� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{# cloud/globaltoc.html ~~~~~~~~~~~~~~~~~~~ Wraps <basic/globaltoc.html> with an identifiable div, so the page highlight code has a reliable selector to lock onto. #} <div class="sphinx-toc sphinxglobaltoc"> {%- include "basic/globaltoc.html" -%} </div> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/layout.html����������������������0000664�0001750�0001750�00000012206�13562605030�027472� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{# cloud/layout.html ~~~~~~~~~~~~~~~~~ Sphinx layout template for the cloud theme. :copyright: Copyright 2009-2011 Assurance Technologies LLC :license: BSD roottarget - optional target for root link (default to toc) logotarget - optional target for logo link (defaults to root target) googleanalytics_id - if set, enabled google analytics snippet & footer googleanalytics_path - optional subpatch for GA cookie #} {% extends "basic/layout.html" %} {% set reldelim2 = reldim2 is not defined and '    ' or reldelim2 %} {# compat hack for sphinx < 1.8 #} {% macro compat_js_tag(asset) %} {% if js_tag is undefined %} {# sphinx 1.6 / 1.7 #} <script type="text/javascript" src="{{ pathto(asset, 1) }}"></script> {% else %} {# sphinx >= 1.8.0 #} {{ js_tag(asset) }} {% endif %} {% endmacro %} {%- block scripts %} {{ super() }} {# add script file to instrument collapsable sections and other features #} {{ compat_js_tag("_static/jquery.cookie.js") }} {{ compat_js_tag("_static/cloud.base.js") }} {{ compat_js_tag("_static/cloud.js") }} {%- endblock %} {# add font stylesheets #} {% set css_files = css_files + [theme_fontcssurl] %} {# make root link redirectable #} {%- set theme_roottarget = (theme_roottarget == "<toc>" and master_doc or theme_roottarget) %} {% block rootrellink %} <li><a href="{{ pathto(theme_roottarget) }}">{{shorttitle|e}}</a>{{reldelim1}}</li> {% endblock %} {# make logo link redirectable #} {%- set theme_logotarget = (theme_logotarget == "<root>" and theme_roottarget or (theme_logotarget == "<toc>" and master_doc or theme_logotarget)) %} {%- block sidebarlogo %} {%- if logo %} <p class="logo"><a href="{{ pathto(theme_logotarget) }}" title="{{ theme_logotarget }}"> <img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/> </a></p> {%- endif %} {%- endblock %} {# wrap relbars in distinct classes to make themeing easier #} {%- block relbar1 %} <div class="relbar-top"> {{ super() }} </div> {% endblock %} {%- block relbar2 %} <div class="relbar-bottom"> {{ super() }} </div> {% endblock %} {% block extrahead -%} {{ super() }} <meta name="viewport" content="width=device-width, initial-scale=1"> {%- if theme_googleanalytics_id -%} <script type="text/javascript"> var ga_enabled = !$.cookie('disable-ga'); if(ga_enabled){ var _gaq = _gaq || []; _gaq.push(['_setAccount', '{{ theme_googleanalytics_id }}']); _gaq.push(['_setCookiePath', '{{ theme_googleanalytics_path }}']); _gaq.push(['_setDetectFlash', false]); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); } </script> {%- endif %} {%- endblock %} {% block body -%} {# hack to insert lang=en in scope of div.body #} {% if theme_hyphenation_langage %} <div lang="{{ theme_hyphenation_language }}">{{ super() }}</div> {% endif %} {%- endblock %} {% block sidebar2 -%} {{ super() }} {# insert markup for sidebar toggle button #} {% block sidebartoggle %} <div class="sidebar-toggle-group no-js"> {% set right = theme_rightsidebar|tobool %} <button class="sidebar-toggle" id="sidebar-hide" title="Hide the sidebar menu"> {% if not right %} «{% endif %} <span class="show-for-small">hide menu</span> {% if right %} »{% endif %} </button> <button class="sidebar-toggle" id="sidebar-show" title="Show the sidebar menu"> {% if right %} «{% endif %} <span class="show-for-small">menu</span> <span class="hide-for-small">sidebar</span> {% if not right %} »{% endif %} </button> </div> {% endblock %} {%- endblock %} {% block footer -%} {{ super() }} {%- if theme_googleanalytics_id -%} <script type="text/javascript"> if(ga_enabled){ document.write("<div class=\"footer\">This page uses <a href=\"http://analytics.google.com\">Google Analytics</a> to collect statistics. "); document.write("Click <button title=\"set cookie to disable analytics for this site\" class=\"link\" onclick=\"$.cookie('disable-ga', 'true', {expires: 3650, path: '{{ theme_googleanalytics_path }}'}); window.location.reload(); return false; \">here</button> to disable analytics for this site."); document.write("</div>"); }else{ document.write("<div class=\"footer\">Google Analytics has been disabled. "); document.write("Click <button title=\"set cookie to re-enable analytics for this site\" class=\"link\" onclick=\"$.cookie('disable-ga', null, {path: '{{ theme_googleanalytics_path }}'}); window.location.reload(); return false; \">here</button> to re-enable analytics for this site."); }; </script> {%- endif %} <!-- cloud_sptheme 1.4 --> {%- endblock %} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/localtoc.html��������������������0000644�0001750�0001750�00000000744�12744461316�027767� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{# cloud/localtoc.html ~~~~~~~~~~~~~~~~~~~ Overrides <basic/localtoc.html> to add an identifiable div wrapper (so the section highlight code has a reliable selector to lock onto), and allows overriding the title via 'localtoc_title' theme option #} {%- if display_toc -%} <div class="sphinx-toc sphinxlocaltoc"> <h3><a href="{{ pathto(master_doc) }}">{{ _(theme_sidebar_localtoc_title or 'Table Of Contents') }}</a></h3> {{ toc }} </div> {%- endif -%} ����������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/quicklinks.html������������������0000644�0001750�0001750�00000002020�12444572160�030326� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{# cloud/quicklinks.html ~~~~~~~~~~~~~~~~~~~ Provides links mirroring the relbar, for use on pages such as the TOC and searchbox. #} <div class="sphinxquicklinks"> <h3><a href="{{ pathto(master_doc) }}" title="{{ sidebar_master_title|e or master_doc|title|e }}"> {{ theme_sidebar_quicklinks_title or _('Quick Links') }} </a></h3> <ul> {% block quicklinkslist %} {% if theme_roottarget and theme_roottarget != master_doc %} <li><a href="{{ pathto(theme_roottarget) }}" title="{{ theme_sidebar_root_title|e or _("Front Page") }}"> {{ theme_sidebar_root_title|e or _("Front Page") }}</a></li> {% endif %} {%- for entry in rellinks[::-1] %} {# NOTE: entry is [page, title, key, label] #} {% if entry[3] not in ["previous", "next"] %} <li><a href="{{ pathto(entry[0]) }}" title="{{ entry[1]|striptags|e }}">{{ entry[1]|e }}</a></li> {% endif %} {%- endfor %} {% endblock %} </ul> </div> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/relations.html�������������������0000644�0001750�0001750�00000001345�12444611500�030152� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{# cloud/relations.html ~~~~~~~~~~~~~~~~~~~~ Sphinx sidebar template: relation links, modified from sphinx's basic/relations.html #} {%- if prev %} <div class="sphinxprev"> <h4>{{_(theme_sidebar_prev_title or 'Previous topic') }}</h4> <p class="topless"><a href="{{ prev.link|e }}" title="{{_(theme_sidebar_prev_title or 'Previous topic') }}">← {{ prev.title }}</a></p> </div> {%- endif %} {%- if next %} <div class="sphinxnext"> <h4>{{_(theme_sidebar_next_title or 'Next topic') }}</h4> <p class="topless"><a href="{{ next.link|e }}" title="{{_(theme_sidebar_next_title or 'Next topic') }}">→ {{ next.title }}</a></p> </div> {%- endif %} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/static/��������������������������0000775�0001750�0001750�00000000000�13654052716�026566� 5����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/static/cloud.base.js�������������0000664�0001750�0001750�00000013577�13562544741�031162� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ~~~~~~~~~~~~~~ * cloud.base.js *~~~~~~~~~~~~~~ * * Base JS utils needed by cloud js instrumentation. * Split out so they can be used by theme-independant extensions (e.g. auto_redirect) * * This initializes a "window.CSP.utils" object * * :copyright: Copyright 2017 by Assurance Technologies * :license: BSD */ // begin encapsulation (function (window, $, _) { /*========================================================================== * internal helpers *==========================================================================*/ var location = document.location, // hosturl is url to root of host, without trailing '/' // NOTE: regex allows netloc segment to be empty, to support 'file:///' urls hosturl = location.href.match(/^[a-z0-9]+:(?:\/\/)?(?:[^@/]*@)?[^/]*/)[0], docpath = location.pathname, sphinx = window.DOCUMENTATION_OPTIONS; /*========================================================================== * utils *==========================================================================*/ var utils = { /*========================================================================== * url helpers *==========================================================================*/ // helper to generate an absolute url path from a relative one. // absolute paths passed through unchanged. // paths treated as relative to <base>, // if base is omitted, uses directory of current document. abspath: function (path, base) { var parts = path.split("/"), stack = []; if (parts[0]) { // if path is relative, put base on stack stack = (base || location.pathname).split("/"); // remove blank from leading '/' if (!stack[0]) { stack.shift(); } // discard filename & blank from trailing '/' if (stack.length && !(base && stack[stack.length - 1])) { stack.pop(); } } for (var i = 0; i < parts.length; ++i) { if (parts[i] && parts[i] != '.') { if (parts[i] == '..') { stack.pop(); } else { stack.push(parts[i]); } } } return "/" + stack.join("/"); }, // return subpath of url, if it starts with base ("" or non-empty string) // returns undefined if url doesn't start with base. // base url search params & fragments are ignored. getSubUrl: function(url, base){ base = base.replace(/(?:\/|[#?].*)$/, ''); if(url.startsWith(base)) { var suffix = url.slice(base.length); if(suffix == '' || suffix.match(/^[/#?]/)){ return suffix; } } return; }, // helper to normalize urls for comparison // * strips current document's scheme, host, & path from local document links (just fragment will be left) // * strips current document's scheme & host from internal urls (just path + fragment will be left) // * makes all internal url paths absolute // * external urls returned unchanged. shortenUrl: function(url) { if (!url){ return ""; } else if (url.indexOf(hosturl) == 0) { // absolute path to same host url = url.substr(hosturl.length) || '/'; } else if (url[0] == '.') { // relative path url = utils.abspath(url); } else if (!url.match(/^[/#?]|[a-z0-9]+:/)) { // not abs path, or fragment, or query, or uri:// -- // another page in current dir url = utils.abspath('./' + url); } if (url.indexOf(docpath) == 0) { // strip current doc's url; only thing left will be e.g. #anchor url = url.substr(docpath.length); } if (url == "#" || url == "#top") { // normalize to empty string url = ""; } return url; }, // url w/ query params & hash stripped baseUrl: function(url){ return utils.shortenUrl(url).replace(/[#?].*$/, ''); } }; /*========================================================================== * misc es5 polyfills *==========================================================================*/ var StrProto = String.prototype; if (!StrProto.startsWith) { StrProto.startsWith = function(search, pos){ return this.substr(pos || 0, search.length) === search; }; } /*========================================================================== * jquery patches *==========================================================================*/ // custom helper to toggle visibility $.fn.toggleVis = function (state){ if(state) { this.show(); } else { this.hide(); } return this; }; /*========================================================================== * initialize namespace *==========================================================================*/ window.CST = window.CloudSphinxTheme = { // url to root of host, without trailing "/" hosturl: hosturl, // path to root of document dir, without trailing "/" or index.html rootpath: sphinx && utils.abspath(sphinx.URL_ROOT || ""), utils: utils }; /*========================================================================== * eof *==========================================================================*/ // end encapsulation // NOTE: sphinx provides underscore.js as $u }(window, jQuery, $u)); ���������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/static/cloud.css_t���������������0000664�0001750�0001750�00000206454�13634442401�030734� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/***************************************************** * cloud.css_t * ~~~~~~~~~~~ * * stylesheet for "Cloud" theme for Sphinx. * * :copyright: Copyright 2011-2012 by Assurance Technologies * :license: BSD * *****************************************************/ @import url("basic.css"); {#********************************************** # helper for accumulating warnings, which we hack into document via css. # submitting sphinx issue (https://github.com/sphinx-doc/sphinx/issues/2157) # in hopes of having a better way to warn user in the future. #**********************************************#} {% set _warnings = [] %} {% macro css_warning(message) %} {% set _ = _warnings.append(message) %} {% endmacro %} {% macro render_css_warnings() %} {% if _warnings %} {% set text = "cloud_sptheme errors:\n\u00B7 " + "\n\u00B7 ".join(_warnings) %} body:before { content: " {{ text.replace('\\', '\\\\').replace('\n', '\\000A').replace('"', '\\"') }} "; position: absolute; left: 0; right: 0; top: 0; z-index: 1000; display: block; padding: 1em; background: black; border: 2px solid red; font-size: 1.5em; line-height: 1.5; color: red; white-space: pre-wrap; } {% endif %} {% endmacro %} {#********************************************** # variable init #**********************************************#} {# legacy aliases #} {% if theme_lighter_decor|trim %} {% set theme_lighter_header_decor = theme_lighter_decor %} {% endif %} {% if theme_beveled_decor|trim %} {% set theme_shaded_decor = theme_beveled_decor %} {% endif %} {% if theme_sidebar_button_bg_hover|trim %} {% set theme_sidebar_link_hover_bg_color = theme_sidebar_button_bg_hover %} {% endif %} {% if theme_relbar_link_bg|trim %} {% set theme_relbar_link_bg_color = theme_relbar_link_bg %} {% endif %} {# default values #} {% if not theme_sidebar_link_hover_text_color|trim %} {% set theme_sidebar_link_hover_text_color = theme_link_hover_text_color %} {% endif %} {% if not theme_sidebar_link_hover_bg_color|trim %} {% set theme_sidebar_link_hover_bg_color = theme_link_hover_bg_color %} {% endif %} {% if not theme_sidebar_link_hover_trim_color|trim %} {% set theme_sidebar_link_hover_trim_color = theme_link_hover_trim_color %} {% endif %} {% if not theme_large_sidebar_width|trim %} {% set theme_large_sidebar_width = theme_sidebarwidth %} {% endif %} {# NOTE: could make the following configurable via theme, just trying not to multiply the number of configuration vars until needed :) #} {% set theme_relbar_link_hover_text_color = theme_sidebar_link_hover_text_color %} {# NOTE: theme_relbar_link_bg_hover is depcrecated... #} {% set theme_relbar_link_hover_bg_color = (theme_relbar_link_bg_hover|trim) or theme_sidebar_link_hover_bg_color %} {% set theme_relbar_link_hover_trim_color = theme_sidebar_link_hover_trim_color %} {% set theme_toc_hover_text_color = theme_sidebar_link_hover_text_color %} {% set theme_toc_hover_bg_color = theme_sidebar_link_hover_bg_color %} {% set theme_toc_hover_trim_color = theme_sidebar_link_hover_trim_color %} {% if not theme_headlinkcolor|trim %} {% set theme_headlinkcolor = theme_linkcolor %} {% endif %} {% if not theme_headtrimcolor|trim %} {% set theme_headtrimcolor = theme_headtextcolor %} {% endif %} {% if not theme_sectionbgcolor|trim %} {% set theme_sectionbgcolor = theme_headtrimcolor %} {% endif %} {% if not theme_rubricbgcolor|trim %} {% set theme_rubricbgcolor = theme_sectionbgcolor %} {% endif %} {% set default_toc_local_text_color = "" %} {% set default_toc_local_trim_color = theme_toc_hover_trim_color %} {% if theme_toc_local_bg_color|trim == "section" %} {% set theme_toc_local_bg_color = theme_sectionbgcolor %} {% if theme_sectiontextcolor == "inherit" %} {% set default_toc_local_text_color = theme_textcolor %} {% else %} {% set default_toc_local_text_color = theme_sectiontextcolor %} {% endif %} {% set default_toc_local_trim_color = theme_sectiontrimcolor %} {% elif theme_toc_local_bg_color|trim == "default" %} {% set theme_toc_local_bg_color = "" %} {% endif %} {% if theme_toc_local_text_color|trim == "default" %} {% set theme_toc_local_text_color = default_toc_local_text_color %} {% endif %} {% if theme_toc_local_trim_color|trim == "default" %} {% set theme_toc_local_trim_color = default_toc_local_trim_color %} {% endif %} {% if theme_toc_current_text_color|trim == "default" %} {% set theme_toc_current_text_color = theme_toc_hover_text_color %} {% endif %} {# helper based on location of sidebar #} {% if theme_rightsidebar | tobool %} {% set sidebar_side = "right" %} {% set sidebar_opp = "left" %} {% else %} {% set sidebar_side = "left" %} {% set sidebar_opp = "right" %} {% endif %} {#********************************************** # helper macros for accumulating media-specific rules # from throughout the code, and then rendering them under one location at end. #**********************************************#} {% set _media_rules = {} %} {% macro on_media(section, content=None) %} {% if content is none %}{% set content = caller() %}{% endif %} {% set _ = _media_rules.setdefault(section, []).append(content) %} {% endmacro %} {% macro on_xlarge_screen() %} {{ on_media("xlarge_screen", caller()) }} {% endmacro %} {% macro on_large_screen() %} {{ on_media("large_screen", caller()) }} {% endmacro %} {% macro on_medium_or_small_screen() %} {{ on_media("medium_or_small_screen", caller()) }} {% endmacro %} {% macro on_medium_up_screen() %} {{ on_media("medium_up_screen", caller()) }} {% endmacro %} {% macro on_small_screen() %} {{ on_media("small_screen", caller()) }} {% endmacro %} {% macro on_print_media() %} {{ on_media("print", caller()) }} {% endmacro %} {% macro render_media_rules(section) %} {{ "\n".join(_media_rules.get(section, [])) }} {% endmacro %} {#********************************************** # helper macros for rendering semi-standard css3 keywords, # e.g. border-radius #**********************************************#} {# helper to convert various font sizes to float EM value #} {%- macro size_to_em(value, rem_per_em=1) %} {% if value is string %} {% set value = value|trim %} {% if value|float(-999) != -999 %} {{ value }} {% elif value.endswith("px") %} {{ value[:-2]|float / (px_per_rem * rem_per_em) }} {% elif value.endswith("em") %} {{ value[:-2] }} {% elif value.endswith("%") %} {{ value[:-1]|float / 100 }} {% else %} {# XXX: could add 'param' keyword to provide context #} {{ css_warning("cloud.css_t: can't parse float value: %r"|format(value)) }} {% endif %} {% else %} {{ value }} {% endif %} {%- endmacro %} {% set px_per_rem = 16 %} {% set text_size_em = size_to_em(theme_default_layout_text_size)|float %} {% if not text_size_em %} {# detect issue 23 #} {{ css_warning("theme.conf: invalid/null default_layout_text_size: %r"|format(theme_default_layout_text_size)) }} {% set text_size_em = 1 %} {% endif %} {% set px_per_rem = px_per_rem * text_size_em %} {% set bl_height = size_to_em(theme_bodylineheight)|float -%} {# base line height, in rems #} {# hacked attempt to autocalculate margins & line size for various headers, etc #} {%- macro box_typography(font_height, vert_margin=2, align=0.5, set_line=True, set_size=True, horiz_margin=0, vert_padding=0, border_padding=0) -%} {%- set font_height = size_to_em(font_height)|float -%} {# header font size, in rems #} {% if vert_padding is string or vert_padding is not sequence %} {% set vert_padding = [vert_padding, vert_padding] %} {% endif %} {%- set top_padding, bottom_padding = vert_padding %} {%- set top_padding = size_to_em(top_padding, rem_per_em=font_height)|float + size_to_em(border_padding, rem_per_em=font_height)|float /2 -%} {# externally controlled header padding, in header ems #} {%- set bottom_padding = size_to_em(bottom_padding, rem_per_em=font_height)|float + size_to_em(border_padding, rem_per_em=font_height)|float /2 -%} {# externally controlled header padding, in header ems #} {% if horiz_margin is string or not horiz_margin is sequence %} {% set horiz_margin = [horiz_margin, horiz_margin] %} {% endif %} {%- set hl_height = (font_height / bl_height)|round(0, "ceil") * bl_height / font_height -%} {# debug helper -- content: "hl_height {{ hl_height }}; padding {{ vert_padding }}; vert_margin {{ vert_margin }}"; #} {%- if set_line and set_size -%} font-size: {{ font_height }}em; {% endif -%} {%- if set_line -%} line-height: {{ hl_height }}em; {% endif -%} margin: {{ (hl_height * vert_margin * align - top_padding)|round(3) }}em {{ horiz_margin[0] }} {{ (hl_height * vert_margin * (1-align) - bottom_padding)|round(3) }}em {{ horiz_margin[1] }}; {% endmacro -%} {# macro for rendering rule with vendor-specific prefix #} {% macro experimental(keyword, value) %} {% if value %} -moz-{{ keyword }}: {{ value }}; -webkit-{{ keyword }}: {{ value }}; -o-{{ keyword }}: {{ value }}; -ms-{{ keyword }}: {{ value }}; {{ keyword }}: {{ value }}; {% endif %} {% endmacro %} {% macro border_radius(value) -%} {{ experimental("border-radius", value) }} {% endmacro %} {% macro box_shadow(value) -%} {{ experimental("box-shadow", value) }} {% endmacro %} {% macro box_sizing(value) -%} {{ experimental("box-sizing", value) }} {% endmacro %} {% macro opacity(value) -%} filter: progid:DXImageTransform.Microsoft.Alpha(Opacity= {{ (value|float*100)|round|int }}); opacity: {{ value }}; {% endmacro %} {% macro vert_gradient(stops) %} background-image: -moz-linear-gradient({{ stops }}); background-image: -webkit-linear-gradient({{ stops }}); background-image: linear-gradient({{ stops }}); {% endmacro %} {% macro horiz_gradient(stops) %} background-image: -moz-linear-gradient(left, {{ stops }}); background-image: -webkit-linear-gradient(left, {{ stops }}); background-image: linear-gradient(left, {{ stops }}); background-image: linear-gradient(to right, {{ stops }}); {% endmacro %} {% set button_box_shadow = box_shadow("1px 1px 2px -1px rgba(0,0,0,0.5)") %} {% set soft_corner_radius = "3px" %} {% set round_corner_radius = "10px" %} {# hack to parse sphinx version info into tuple could probably do this by registering filter, but wanted to try :) #} {% set sphinx_version_info = [] %} {% set state = dict(buf="", end=false) %} {% for char in (sphinx_version + ".") %} {% if state['end'] %} {% elif char.isdigit() %} {% set _ = state.update(buf=state['buf'] + char) %} {% else %} {% if state['buf'] %} {% set _ = sphinx_version_info.append(state['buf']|int) %} {% set _ = state.update(buf="") %} {% endif %} {% if char != "." %} {% set _ = state.update(end=true) %} {% endif %} {% endif %} {% endfor %} {#**************************************************** # page layout - body #***************************************************#} {% set body_margin = "1em" %} * { box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; } body { padding: 0; color: #000; font-family: {{ theme_bodyfont }}; font-size: {{ theme_default_layout_text_size }}; line-height: {{ theme_bodylineheight }}; {% if theme_borderless_decor | tobool %} margin: 0; background: {{ theme_bgcolor }}; {% else %} margin: {{ body_margin }} {{ body_margin }} 0; background: {{ theme_footerbgcolor }}; background-attachment: fixed; {% endif %} } {% if theme_minimal_layout_text_size %} {% call on_small_screen() %} body { font-size: {{ theme_minimal_layout_text_size }}; } {% endcall %} {% endif %} {% if not theme_borderless_decor | tobool %} {% call on_medium_or_small_screen() %} body { margin: 0; } {% endcall %} {% endif %} {% if theme_large_layout_text_size %} {% call on_xlarge_screen() %} body { font-size: {{ theme_large_layout_text_size }}; } {% endcall %} {% endif %} {#**************************************************** # page layout - relbars (top & bottom) #***************************************************#} {% if theme_borderless_decor | tobool %} div.relbar-top, div.relbar-bottom { background: {{ theme_relbarbgcolor }}; padding: 0 {{ body_margin }}; } {% call on_medium_or_small_screen() %} div.relbar-top, div.relbar-bottom { padding: 0; } {% endcall %} {% endif %} div.related { margin: 0 auto; max-width: {{ theme_max_width }}; background: {{ theme_relbarbgcolor }}; line-height: {{ theme_bodylineheight }}; padding: .75em 0; color: {{ theme_relbartextcolor }}; text-shadow: 1px 1px 1px rgba(0,0,0,.3); {% if theme_borderless_decor | tobool %} background: none; {% endif %} {% if theme_shaded_decor|tobool %} {{ vert_gradient("rgba(255,255,255,.2), rgba(255,255,255,0)") }} border-width: 0 2px 3px 1px; {% endif %} } div.relbar-top div.related { {{ border_radius(".7em .7em 0 0") }} } div.relbar-bottom div.related { {{ border_radius("0 0 .7em .7em") }} {% if theme_shaded_decor|tobool %} {{ vert_gradient("rgba(255,255,255,.2), rgba(255,255,255,0.1)") }} border-width: 1px 2px 0 1px; {% endif %} } {# remove margin & rounded corners on small/medium screens #} {% if not theme_borderless_decor | tobool %} {% call on_medium_or_small_screen() %} div.relbar-top div.related, div.relbar-bottom div.related { {{ border_radius("0") }} } {% endcall %} {% endif %} div.related a { display: inline-block; padding: 0.3em 0.6em; {{ border_radius("0.8em") }} font-weight: bold; color: {{ theme_relbarlinkcolor }}; border: 1px solid transparent; } div.related li.right a { background: {{ theme_relbar_link_bg_color }}; font-weight: normal; } div.related a:hover, div.related li.right a:hover { background: {{ theme_relbar_link_hover_bg_color }}; color: {{ theme_relbar_link_hover_text_color }}; border-color: {{ theme_relbar_link_hover_trim_color }}; text-decoration: none; text-shadow: none; {{ button_box_shadow }} } {% call on_small_screen() %} {# tweak relbar - emphasize title, hide crumbs #} div.related > ul > li.right + li:not(.right) { font-weight: bold; } div.related > ul > li:not(.right) + li { display: none; } {% endcall %} {#**************************************************** # page layout - document #***************************************************#} div.document { {# note: relative used by div.sidebar-toggle-group #} position: relative; margin: 0 auto; max-width: {{ theme_max_width }}; background: {{ theme_sidebarbgcolor }}; {% if theme_borderless_decor | tobool %} background: {{ theme_bgcolor }}; {% endif %} } {% if theme_small_sidebar_bg_color|trim %} {% call on_small_screen() %} div.document { background: {{ theme_small_sidebar_bg_color }}; } {# for borderless mode #} div.sphinxsidebar { background: transparent; border: 0; } {% endcall %} {% endif %} div.documentwrapper { float: left; width: 100%; } div.bodywrapper { {%- if theme_rightsidebar|tobool %} margin: 0 {{ theme_large_sidebar_width }} 0 0; {% else %} margin: 0 0 0 {{ theme_large_sidebar_width }}; {% endif %} } {% call on_small_screen() %} div.bodywrapper { margin-{{ sidebar_side }}: 0; } {% endcall %} {% if theme_large_sidebar_width != theme_sidebarwidth %} {% call on_medium_or_small_screen() %} div.bodywrapper { {%- if theme_rightsidebar|tobool %} margin: 0 {{ theme_sidebarwidth }} 0 0; {% else %} margin: 0 0 0 {{ theme_sidebarwidth }}; {% endif %} } {% endcall %} {% endif %} div.document.sidebar-hidden div.bodywrapper { margin-{{ sidebar_side }}: 0; } div.body { min-height: {{ theme_min_height }}; {# note: this ^ is just a hack to prevent body from being shorter than sidebar #} {# line height debugging -- background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAVCAYAAABsZT8HAAAAFElEQVQImWNgGIKgvLz8PwMDAwMAD3sCZXNDKtkAAAAASUVORK5CYII=") repeat scroll 0 0 transparent; #} background-color: {{ theme_bgcolor }}; border-{{ sidebar_side }}: 1px solid {{ theme_bodytrimcolor }}; {% if not theme_borderless_decor|tobool %} {% if theme_rightsidebar|tobool %} {{ box_shadow("1px 0 2px " + theme_bodytrimcolor) }} {% else %} {{ box_shadow("-1px 0 2px " + theme_bodytrimcolor) }} {% endif %} {% endif %} line-height: {{ theme_bodylineheight }}; color: {{ theme_textcolor }}; padding: 30px 20px; {% if theme_borderless_decor | tobool %} border-width: 0; {% endif %} {# override min/max width from sphinx 1.8 -- blocks our dynamic layout #} {# XXX: maybe allow the min-width:450px back in, or something similar, at least for medium-up layout? #} min-width: 0; max-width: none; } {% call on_print_media() %} div.body { border: 0; {{ box_shadow("none") }} } {% endcall %} {#**************************************************** # page layout - sidebar # # NOTE: sidebar visibility is controlled by two classes, # which are set on div.document by the JS code... # * sidebar-hidden -- hide sidebar on medium-up media # (default is to shown sidebar on medium-up media) # * document-hidden -- show sidebar and hide content on small media # (default is to hide sidebar & show content on small media) #***************************************************#} {% set sidebar_top_margin = "0" %} {% if theme_borderless_decor|tobool and theme_sidebarbgcolor != "transparent" %} {% set sidebar_top_margin = "16px" %} {% endif %} div.sphinxsidebar { margin-top: {{ sidebar_top_margin }}; width: {{ theme_large_sidebar_width }}; {%- if theme_rightsidebar|tobool %} float: right; {%- endif %} font-size: 90%; line-height: 1.25em; {% if theme_borderless_decor|tobool %} margin-bottom: 16px; {{ box_sizing("border-box") }} background: {{ theme_sidebarbgcolor }}; border: 1px solid {{ theme_bodytrimcolor }}; {{ border_radius("0.7em") }} {{ box_shadow("1px 1px 1px " + theme_bodytrimcolor) }} {% if theme_shaded_decor|tobool %} {{ horiz_gradient("rgba(0,0,0,.05), rgba(255,255,255,.04), rgba(0,0,0,.05)") }} border-style: dotted solid solid dotted; {% endif %} {% endif %} } {% if theme_large_sidebar_width != theme_sidebarwidth %} {% call on_medium_or_small_screen() %} div.sphinxsidebar { width: {{ theme_sidebarwidth }}; } {% endcall %} {% endif %} {% call on_small_screen() %} div.document:not(.document-hidden) div.sphinxsidebar, div.document.document-hidden div.documentwrapper { display: none; } div.document.document-hidden div.sphinxsidebar { width: 100%; margin: 0; border: 0; border-radius: 0; } {% endcall %} div.document.sidebar-hidden div.sphinxsidebar { display: none; } div.sphinxsidebarwrapper { padding: 1em 0 0 10px; } div.sphinxsidebar h3, div.sphinxsidebar h4 { padding: 0; margin: 24px 16px 0 0; font-family: {{ theme_headfont }}; font-weight: normal; color: {{ theme_sidebartextcolor }}; } div.sphinxsidebar h3 { font-size: 1.4em; } div.sphinxsidebar h4 { font-size: 1.3em; } div.sphinxsidebar h3 a, div.sphinxsidebar h4 a { color: {{ theme_sidebartextcolor }}; } div.sphinxsidebar p { color: {{ theme_sidebartextcolor }}; } div.sphinxsidebar p.topless { margin: 5px 10px 10px 10px; } div.sphinxsidebar ul { margin: 10px; margin-right: 0; padding: 0; color: {{ theme_sidebartextcolor }}; } div.sphinxsidebar a { color: {{ theme_sidebarlinkcolor }}; border: 1px solid transparent; border-width: 1px 0; } div.sphinxsidebar a:hover { color: {{ theme_link_hover_text_color }}; background: {{ theme_link_hover_bg_color }}; border-color: {{ theme_link_hover_trim_color }}; text-decoration: none; } div.sphinxsidebar ul li a { overflow: hidden; white-space: nowrap; } div.sphinxsidebar ul li a:hover { {# XXX: need something so that overflow bg is on top of document. wanted inline-block, but causes height jumps. #} display: inline-table; min-width: 98%; min-width: calc(100% - 5px); {# outline: 2px solid {{theme_sidebarbgcolor}};#} } div.sphinxsidebar a:active { color: {{ theme_sidebartextcolor }}; } div.sphinxsidebar p.logo { margin: 1em 0 0 -10px; text-align: center; max-width: 100%; } div.sphinxsidebar p.logo a { display: inline-block; {{ border_radius(soft_corner_radius) }} } {# fix margin if h3/h4 is at top of sidebar -- # consequence of sidebar boxes not all being wrapped in divs. #} div.sphinxsidebarwrapper > h3:first-child, div.sphinxsidebarwrapper > h4:first-child, div.sphinxsidebarwrapper > div:first-child > h3:first-child, div.sphinxsidebarwrapper > div:first-child > h4:first-child { margin-top: .2em; } {#**************************************************** # page layout - sidebar TOC sections # # NOTE: classes not marked as "set by sphinx" are autopopulated by js code. # # UL nodes conditionally have the following classes applied: # * current -- if UL contains active page, or is toplevel of active page # [set by sphinx] # # LI nodes conditionally have the following classes applied: # * current -- set for root node down to toplevel of current page. # [set by sphinx] # * local -- if LI > A points to current page # * child -- if LI > A points to child of current page # * active -- if LI is part of current page, and this section # (or child) is marked as the .focus # * focus -- LI is currently focused section (implies .active) # * toc-toggle -- marked by JS code when TOC section will be expanded/collapsed # * closed -- used to mark toc-toggle section that's collapsed # # LIs for other pages contained w/in active page will not have .active-section #***************************************************#} {# sidebar link lists #} div.sphinxsidebar ul, div.sphinxsidebar ul ul, div.sphinxprev p.topless, div.sphinxnext p.topless { list-style: none; margin-left: 0; } div.sphinxsidebar ul ul { margin-left: 1.5em; } {# sidebar links #} div.sphinxsidebar ul a, div.sphinxprev a, div.sphinxnext a { position: relative; display: block; padding: 1px 4px 3px 5px; margin: 0 5px 0 0; border: 1px solid transparent; {{ border_radius(soft_corner_radius) }} } {# hovered sidebar links #} div.sphinxsidebar ul a:hover, div.sphinxprev a:hover, div.sphinxnext a:hover { background: {{ theme_toc_hover_bg_color }}; border-color: {{ theme_toc_hover_trim_color }}; color: {{ theme_toc_hover_text_color }}; text-decoration: none; } {# make links to other page look slightly different #} div.sphinx-toc ul a:not([href^="#"]):hover { position: relative; overflow: visible; {# required for chome #} } div.sphinx-toc ul a:not([href^="#"]):hover:before { content: "⇒"; position: absolute; right: 100%; font-size: 1.5em; margin-right: 4px; opacity: 0.7; } {# global toc -- current page #} {% if theme_toc_local_bg_color %} {# highlight the current page's LI box #} .sphinxglobaltoc li.current.active { background: {{ theme_toc_local_bg_color }}; margin-left: -7px; padding: 6px 0 6px 3px; border: 1px solid {{ theme_toc_local_trim_color or theme_toc_hover_trim_color }}; border-width: 0 0 0 4px; {{ border_radius("6px") }} } {# highlight the current page title link #} .sphinxglobaltoc li.current.active > a { font-weight: bold; } {% call on_small_screen() %} {# merge into left side #} .sphinxglobaltoc li.current.active { border-left-width: 0; margin-left: -10px; padding-left: 10px; } {% endcall %} {# {# remove highlighting from links to child pages #\} .sphinxglobaltoc li.child { {# background: {{ theme_sidebarbgcolor if theme_sidebarbgcolor != "transparent" else theme_bgcolor }};#\} border-top-left-radius: 6px; border: 1px solid {{ theme_toc_local_trim_color }}; border-width: 0 0 0 2px; } .sphinxglobaltoc li.child + li.child { border-top-left-radius: 0; } {# XXX: would like this to be li.child:not(+ li.child) #\} .sphinxglobaltoc li.child:last-child { border-bottom-left-radius: 6px; } #} {% endif %} {# use alt color for local page's links (mainly useful w/ local_bg_color #} {% if theme_toc_local_text_color %} .sphinxglobaltoc li.active a { color: {{ theme_toc_local_text_color }}; } {% endif %} {# style page sections #} div.sphinxglobaltoc ul a[href="#"] { font-style: italic; } div.sphinxglobaltoc ul a:not([href*="#"]) { font-size: 0.95em; font-style: italic; } {# link to active TOC section #} div.sphinx-toc li { position: relative; } div.sphinx-toc li:before { position: absolute; left: -0.8em; color: {{ theme_toc_current_text_color }}; } {# link to top of page #} {% if not theme_toc_local_bg_color %} div.sphinx-toc li.current.active:not(.focus):before { content: "▼"; top: 0.1em; opacity: 0.5; } {% endif %} {# link to focused section #} div.sphinx-toc li.focus.local:before { content: "▶"; opacity: 0.7; {# fix offset to account for extra padding #} {% if theme_toc_local_bg_color %} left: calc(-0.8em + 5px); {% endif %} } {# link to focused link to child page #} div.sphinx-toc > ul:not(:hover) li.focus.child:before { content: "⇒"; opacity: 0.5; font-size: 1.5em; margin-left: -4px; } {# link to focused TOC section #} div.sphinx-toc li.focus.local > a:not(:hover) { color: {{ theme_toc_current_text_color }}; } {# TOC collapsed toc lists #} div.sphinx-toc li.toc-toggle > a:after { content: "[–]"; padding-left: .25em; {{ opacity(0.5) }} } div.sphinx-toc li.toc-toggle.closed > a:after { content: "[+]"; } {% if theme_cleanup_toc | tobool %} a.reference > .objdesc { font-size: 88%; } a.reference:not(:hover) > .objdesc { {{ opacity(0.6) }} } .current ul a > .objdesc.unique { display: none; } {% endif %} {#**************************************************** # page layout - sidebar searchbox & search page #***************************************************#} div#searchbox { margin-right: 10px; /* make this match sphinxsidebarwrapper left margin */ } div#searchbox form > div { display: inline-block; margin-right: -0.4em; } div.sphinxsidebar input, h1#search-documentation ~ form input { border: 1px solid {{ theme_sidebartrimcolor }}; font-family: sans-serif; font-size: 1em; } div#searchbox input[type="submit"], h1#search-documentation ~ form > input[type="submit"] { background: {{ theme_sidebar_button_bg }}; {{ border_radius("0 5px 5px 0") }} } div#searchbox input[type="submit"]:hover, h1#search-documentation ~ form input[type="submit"]:hover, button.sidebar-toggle#sidebar-hide:hover, button.sidebar-toggle#sidebar-show:hover, .highlight .copybutton:hover { background: {{ theme_sidebar_link_hover_bg_color }}; color: {{ theme_sidebar_link_hover_text_color }}; border-color: {{ theme_sidebar_link_hover_trim_color }}; } h1#search-documentation ~ form input[type="text"]:focus, div.sphinxsidebar input[type="text"]:focus { border-color: {{ theme_sidebar_link_hover_trim_color }}; } .highlight .copybutton:hover:not(:active), div.sphinxsidebar button:hover:not(:active), div.sphinxsidebar input[type="submit"]:hover:not(:active), h1#search-documentation ~ form input[type="submit"]:hover, button.sidebar-toggle:hover:not(:active) { {{ button_box_shadow }} } button.sidebar-toggle::-moz-focus-inner, .highlight .copybutton::-moz-focus-inner { border: 0; } div.sphinxsidebar .searchtip { color: {{ theme_sidebardetailcolor }}; } #searchbox .highlight-link a[href$="hideSearchWords()"] { display: block; padding: 0 1em; font-size: 80%; text-align: right; } #searchbox .highlight-link a[href$="hideSearchWords()"]:before { content: "\00D7"; font-weight: bold; padding-right: 0.25em; } {#**************************************************** # page layout - collapsible sidebar buttons #***************************************************#} .sidebar-toggle-group { position: absolute; width: {{ theme_large_sidebar_width }}; top: 0; {{ sidebar_side }}: 0; z-index: 1; } .sidebar-toggle-group.no-js { display: none; } {% if theme_large_sidebar_width != theme_sidebarwidth %} {% call on_medium_or_small_screen() %} .sidebar-toggle-group { width: {{ theme_sidebarwidth }}; } {% endcall %} {% endif %} {% call on_print_media() %} .sidebar-toggle-group { display: none; } {% endcall %} div.document.sidebar-hidden .sidebar-toggle-group { width: auto; } div.document.document-hidden .sidebar-toggle-group { width: 100%; } button.sidebar-toggle { margin: 0; padding: 6px 12px; color: {{ theme_sidebartextcolor }}; font-size: 1em; white-space: nowrap; } button#sidebar-hide { position: absolute; {% if theme_borderless_decor | tobool %} top: {{ sidebar_top_margin }}; {{ sidebar_opp }}: 0; {% else %} top: 0; {{ sidebar_opp }}: -1px; {% endif %} background: transparent; border: 1px solid {{ theme_bodytrimcolor }}; {% if not theme_borderless_decor | tobool %} border-top-width: 0; {% elif theme_shaded_decor|tobool and not theme_rightsidebar|tobool %} border-left-width: 2px; {% endif %} border-bottom-{{ sidebar_side }}-radius: 0.7em; {% if theme_borderless_decor|tobool and theme_sidebar_top_margin %} border-top-{{ sidebar_opp }}-radius: 0.7em; {% endif %} } {% call on_small_screen() %} button#sidebar-hide { left: auto; top: 0; right: 0; background: {{ theme_bgcolor }}; border-color: {{ theme_sidebartrimcolor }}; } {% endcall %} button#sidebar-show { position: absolute; top: 0; {% if theme_borderless_decor|tobool %} {{ sidebar_side }}: 10px; {% else %} {{ sidebar_side }}: 0; {% endif %} background: {{ theme_sidebar_button_bg }}; border: 1px solid {{ theme_sidebartrimcolor }}; {% if not theme_borderless_decor | tobool %} border-top-width: 0; {% elif theme_shaded_decor|tobool and not theme_rightsidebar|tobool %} border-right-width: 2px; {% endif %} border-bottom-{{ sidebar_opp }}-radius: 0.7em; {% if theme_borderless_decor|tobool %} border-bottom-{{ sidebar_side }}-radius: 0.7em; {% endif %} } {% if theme_borderless_decor|tobool %} {% call on_medium_or_small_screen() %} button.sidebar-toggle#sidebar-show { {{ sidebar_side }}: 0; border-bottom-{{ sidebar_side }}-radius: 0; } {% endcall %} {% endif %} {#**************************************************** # page layout - footer #***************************************************#} div.footer { color: {{ theme_footertextcolor }}; width: 100%; padding: 9px 0; text-align: center; font-size: 75%; {% if theme_borderless_decor | tobool %} background: {{ theme_footerbgcolor }}; width: auto; {% if theme_shaded_decor|tobool %} {{ vert_gradient("rgba(255,255,255,0.1), rgba(255,255,255,0.0)") }} border-width: 0 2px 0 0; {% endif %} {# hack so body below footer gets correct color #} box-shadow: 0 50vh 0 50vh {{ theme_footerbgcolor }}; {% endif %} } div.footer button.link { margin: 0 -1px; padding: 0; background: none; border: none; font-size: inherit; font-family: inherit; } div.footer a, div.footer button.link { color: {{ theme_footertextcolor }}; text-decoration: underline; } div.footer a:hover, div.footer button.link:hover { color: white; } div.footer + div.footer, div.footer + script + div.footer { margin-top: -12px; } {% if theme_borderless_decor | tobool %} div.footer, div.footer a:not(:hover) { color: {{ theme_relbartextcolor }}; } {% endif %} {#=================================================== # document body - headers #==================================================#} {% set h1_size = 2.0 %} {% set h2_size = 1.875 %} {% set h3_size = 1.625 %} {% set h4_size = 1.25 %} {% set h5_size = 1.1 %} {% set h6_size = 1.0 %} {#--------------------------------------------------- # common header styling #--------------------------------------------------#} div.body h1, div.body h2, div.body p.rubric, div.body h3, div.body h4, div.body h5, div.body h6 { font-family: {{ theme_headfont }}; font-weight: normal; color: {{ theme_sectionbgcolor if theme_lighter_header_decor|tobool else theme_headtextcolor }}; clear: both; {# for floating admonitions; to take this off, have to explicitly set 'allow-float' class -- or a 'across-section' flag for admonition #} } {% call on_print_media() %} {# remove styling from headers #} div.body h1, div.body h2, div.body p.rubric, div.body h3, div.body h4, div.body h5, div.body h6 { color: {{ theme_headtextcolor }} !important; text-shadow: none !important; border: none !important; padding: 0; } {% endcall %} {#--------------------------------------------------- # h1 #--------------------------------------------------#} div.body h1 { {{ box_typography(h1_size) }} text-align: center; {% if theme_lighter_header_decor|tobool %} color: {{ theme_sectionbgcolor }}; {% endif %} } {# hack to fix toplevel header margin #} div.body > .section > h1 { {{ box_typography(h1_size, set_line=False, vert_padding=("30px",0)) }} } {# page subtitle effect #} div.body h1 + .subtitle { opacity: 0.54; font-style: italic; font-weight: bold; margin-bottom: 2.25rem; margin-top: -2.25rem; text-align: center; } {#--------------------------------------------------- # h2, h3, & rubric #--------------------------------------------------#} div.body h2, div.body p.rubric { {{ box_typography(h2_size, vert_margin=1) }} } div.body h3 { {{ box_typography(h3_size, vert_margin=0.75) }} } {#--------------------------------------------------- # solid-colored header style for h2, h3, & rubric #--------------------------------------------------#} {# h2, h3, rubric - common styling for solid-colored section #} div.body h2, div.body p.rubric, .section.emphasize-children > .section > h3, #table-of-contents > h1, {# hack for toc page #} h1#search-documentation {# hack for search page #} { {% if theme_lighter_header_decor | tobool %} {% set h2_margin = "-12px" %} padding: 0 6px; border: 1px solid {{ theme_sectionbgcolor }}; border-width: 0 0 2px 0; color: {{ theme_sectionbgcolor }}; text-shadow: 1px 1px {{ theme_sectiontrimcolor }}; {% else %} {% set h2_margin = "1px" %} padding: 6px 10px; background-color: {{ theme_sectionbgcolor }}; border: 1px solid {{ theme_sectiontrimcolor }}; border-width: 0 0 0 6px; color: {{ theme_sectiontextcolor }}; text-shadow: 1px 1px {{ theme_sectiontrimcolor }}; {% if theme_shaded_decor|tobool %} {{ vert_gradient("rgba(255,255,255,0.2), rgba(255,255,255,0)") }} {% endif %} {% endif %} {{ border_radius(theme_section_radius) }} } {% call on_small_screen() %} {# remove spacing on headers and reduce body padding #} div.body h2, div.body p.rubric, .section.emphasize-children > .section > h3 { {% if not theme_lighter_header_decor|tobool %} padding-top: 0.25em; padding-bottom: .25em; {% endif %} {{ border_radius(soft_corner_radius) }} } {% endcall %} {% if theme_shaded_decor|tobool and not theme_lighter_header_decor|tobool %} {% call on_print_media() %} div.body h2, div.body p.rubric, .section.emphasize-children > .section > h3 { border-width: 0 0 .2em 0; padding-bottom: 0.1em; } {% endcall %} {% endif %} {# h2, rubric - resize margins to account for padding & border #} div.body h2, div.body p.rubric, #table-of-contents > h1, {# hack for toc page #} h1#search-documentation {# hack for search page #} { {{ box_typography(h2_size, set_line=False, vert_margin=1, horiz_margin=h2_margin) }} } {# h3 - resize margins to account for padding & border #} .section.emphasize-children > .section > h3 { {{ box_typography(h3_size, set_line=False, vert_margin=1, horiz_margin=h2_margin) }} } {# h3, rubric - use alternate color #} div.body p.rubric, .section.emphasize-children > .section > h3 { {% if theme_lighter_header_decor|tobool %} border-color: {{ theme_rubricbgcolor }}; color: {{ theme_rubricbgcolor }}; border-width: 0 0 1px 0; {% else %} background-color: {{ theme_rubricbgcolor }}; {% if theme_rubric_trim_color|trim %} border-color: {{ theme_rubric_trim_color }} {% endif %} {% endif %} } {% if not theme_lighter_header_decor|tobool %} {# permalink styling #} div.body h2:hover a.headerlink:not(:hover), .section.emphasize-children > .section > h3:hover a.headerlink:not(:hover) { {{ opacity(0.4) }} } {# highlighted as permalink #} div.body h2.highlighted, .section.emphasize-children > .section > h3.highlighted { background-color: {{ theme_highlightcolor }}; border-color: {{ theme_link_hover_trim_color }}; color: {{ theme_headtextcolor }}; } {% endif %} {# h2, rubric -- add icon to main headers for decoration (experimental) #} {% if theme_header_icon|trim and (theme_lighter_header_decor|tobool or not theme_shaded_decor|tobool) %} div.body h2, div.body p.rubric { background-image: url("{{ theme_header_icon }}"); background-repeat: no-repeat; background-position: 10px 50%; background-size: 32px auto; padding-left: 48px; } {% endif %} {#--------------------------------------------------- # h4 etc #--------------------------------------------------#} div.body h4 { {{ box_typography(h4_size) }} clear: both; {# for floating admonitions #} } div.body h5 { {{ box_typography(h5_size) }} } div.body h6 { {{ box_typography(h6_size) }} } {#--------------------------------------------------- # fixups #--------------------------------------------------#} #table-of-contents > h1, {# hack for toc page #} h1#search-documentation {# hack for search page #} { margin-top: 0; } {# NOTE: li.page attribute set by js code #} .toctree-wrapper.highlight-pages:not(.hide-sections) li.page > a { font-weight: bold; } .toctree-wrapper.space-pages li.page { margin-top: 1em; } {# 'hide-sections' modifier is toggled by JS code for TOC page #} .toctree-wrapper.hide-sections li:not(.page) { list-style: none; margin-left: -2.5rem; } .toctree-wrapper.hide-sections li:not(.page) > a { display: none; } #hide-page-sections { float: right; opacity: 0.88; } {#--------------------------------------------------- # header permalink styling #--------------------------------------------------#} a.headerlink { color: {{ theme_headlinkcolor }}; font-size: 0.8em; margin: 0 0 0 1px; padding: 0 5px 0 4px; text-decoration: none; border: 1px solid transparent; border-width: 1px 0; {{ border_radius("0.35em") }} } div.body a.headerlink:hover { background-color: {{ theme_link_hover_bg_color }}; border-color: {{ theme_link_hover_trim_color }}; color: {{ theme_link_hover_text_color }}; text-decoration: none; {# {{button_box_shadow}} #} } a.headerlink:hover:active { {{ box_shadow("none") }} } {#--------------------------------------------------- # toggleable sections # # NOTE: .html-toggle-button class added by JS, # so we can trust that section has been instrumented. #--------------------------------------------------#} {# toggle section - common style #} .html-toggle-button { position: relative; cursor: pointer; } {# toggle section - hover style #} .html-toggle-button:hover:after, .section.emphasize-children > .section > h3.html-toggle-button:hover:after {# hack to override higher priority rule #} { background: {{ theme_link_hover_bg_color }}; {# border-color: transparent; {{ border_radius("8px") }} {{ box_shadow("0 0 0 1px " + theme_link_hover_trim_color) }}; #} border-color: {{ theme_link_hover_trim_color }}; {{ border_radius("4px") }} {{ button_box_shadow }} color: {{ theme_link_hover_text_color }}; } {# toggle button - common style #} .html-toggle-button:after { position: relative; top: -0.15em; margin: 0; padding: 0.15em 0.3em; text-shadow: none; font-size: 65%; font-style: italic; font-weight: bold; border: 1px solid transparent; } {# toggle button - content #} {# XXX: move this part to JS? #} .html-toggle.collapsed > .html-toggle-button:after { content: "[+ show section]"; } .html-toggle.expanded > .html-toggle-button:after { content: "[- hide section]"; } {# toggle button label - active style #} .html-toggle-button:active:after, .section.emphasize-children > .section > h3.html-toggle-button:active:after {# hack to override higher priority rule #} { position: relative; top: calc(-0.15em + 1px); left: 1px; } {% call on_print_media() %} {# omit "hide section" label #} .html-toggle.expanded > .html-toggle-button:after { display: none; } {# indicate collapsed sections were omitted TODO: would like to auto-expand them instead, but not sure how to create a reliable CSS rule given the way the JS code currently works. #} .html-toggle.collapsed > .html-toggle-button:after { content: "[not printed]" !important; } {% endcall %} {#**************************************************** # content styling #***************************************************#} {#------------------------------------ # block effects #------------------------------------#} .clear, .clear-both { clear: both; } .clear-left { clear: left; } .clear-right { clear: right; } .clear-none { clear: none; } div.body .clear-none > h3 { clear: none; } .hidden { display: none; } {#------------------------------------ # misc styles #------------------------------------#} div.body p { text-align: justify; {{ box_typography(1.0, set_line=False) }} } {% if theme_hyphenation_langage %} div.body p:not(.admonition-title) { {# NOTE: requires lang="xxx" on body element or parent, which our layout.html sets #} {{ experimental("hyphens", "auto") }} } {% endif %} div.body li, div.body dd { text-align: justify; } div.body hr { margin: 0 10px; background: none; border: 1px dashed {{ theme_sidebartrimcolor }}; border-width: 1px 0 0 0; } .strike { text-decoration: line-through; } {#------------------------------------ # footnotes #------------------------------------#} a.footnote-reference { font-size: 70%; position: relative; top: -.75em; } table.docutils.footnote { margin: 1em 0 0 1em; } {#------------------------------------ # lists (UL, OL, DL) #------------------------------------#} dl { margin-bottom: 1.5em; } li > dl:only-child { margin-bottom: 0; } dd { margin-right: 10px; } {# to match left indent #} dd ol { margin-bottom: 10px; } dl.docutils > dt { font-size: 1.1em; margin-bottom: .5em; } dl.docutils > dd + dt { margin-top: 1.5em; } {# join separate ULs together #} ul + ul, ul + div > ul:only-child, div.toctree-wrapper + ul { margin-top: -1em; } {# override basic.css rule #} dd ul { margin-bottom: {{ theme_bodylineheight }}; } {# add margin after ul if there's a paragraph before it, so margins are even #} li > p ~ ul.simple { margin-bottom: 1.5em; } {#**************************************************** # document - links #***************************************************#} a { color: {{ theme_linkcolor }}; text-decoration: none; } a:visited { {% if theme_visitedlinkcolor %} color: {{ theme_visitedlinkcolor }}; {% endif %} text-decoration: none; } a:hover { color: {{ theme_link_hover_text_color }}; background: {{ theme_link_hover_bg_color }}; text-decoration: underline; } a:hover:active { left: 1px; top: 1px; {{ box_shadow("0") }} } a.biglink { font-size: 130%; } {% if theme_externalrefs|tobool %} a.external:before { content: {{ theme_externalicon }}; padding-right: .1em; } a.external.issue:before { content: {{ theme_issueicon or theme_externalicon }}; } a.external[href^="mailto:"]:before { content: ""; } em.issue:before { content: {{ theme_issueicon or theme_externalicon }}; padding-right: .1em; } {% endif %} {#------------------------------------- # permalink highlighting #------------------------------------#} dt:target, .footnote:target, .highlighted { padding: 4px; margin: -4px; background-color: {{ theme_highlightcolor }}; {{ border_radius(round_corner_radius) }} } {#**************************************************** # document - table styles #***************************************************#} {#------------------------------------ # custom table classes #------------------------------------#} table.fullwidth { width: 100%; } table.centered { margin-left: auto; margin-right: auto; } table.docutils.plain { border: none; } table.docutils.plain tr.row-odd > * { background: none; } {# legacy alias for table.plain #} table.docutils.html-plain-table tr.row-odd > * { background: none; } {# fix for :align:right, doesn't work as of sphinx 2.2 #} table.docutils.align-right { margin-left: auto; } {#------------------------------------ # default table styling #------------------------------------#} {% if sphinx_version_info >= [2,0] %} table.docutils tbody { {# sphinx sets this to "middle" #} vertical-align: top; } {# sphinx adds lots of margin on P elements, which bloat tables (issue 41) #} {# XXX: may want to catch more than this... #} table.docutils th p:first-child, table.docutils td p:first-child { margin-top: 0; } table.docutils th p:last-child, table.docutils td p:last-child { margin-bottom: 0; } {% endif %} table.docutils th { border: 0 solid transparent; padding: .4em; font-family: {{ theme_headfont }}; background: {{ theme_table_header_color }}; } table.docutils th.head:not(.stub) { border-bottom: 1px solid {{ theme_table_trim_color }}; } table.docutils th.stub + td { border-left: 1px solid {{ theme_table_trim_color }}; } table.docutils td { padding: .4em; border: 0 solid {{ theme_table_trim_color }}; } table.docutils tr.row-odd td { background: {{ theme_table_shade_color }}; } h2 + table.docutils { margin-top: 1em; } table > caption { margin: 1em 0 .5em; font-style: italic; } {#------------------------------------ # td/th classes added by .ext.table_styling #------------------------------------#} {# NOTE: this is currently included automatically by table_styling extension... #} {#{% include "../../ext/static/table_styling.css" %}#} {# hide border following a TH, solid color won't show up #} table.docutils th + .single-left-divider, table.docutils th + .double-left-divider { border-left-width: 0; } {#**************************************************** # document - field-list tables & contents #***************************************************#} {% if sphinx_version_info < [2,0] %} {# add margin to field-list table, since cell margins won't collapse, but can't be relied on #} table.field-list { margin: {{ theme_bodylineheight }} 0; } {# clear stying added by table.docutils styling (above) #} table.field-list th { background: none; padding: 0 0.4em 0 0; } {# add margins between field entries, except last one #} table.field-list td { padding: 0 0 {{ theme_bodylineheight }} 0; } table.field-list tr:last-child td { padding-bottom: 0; } {# parameter definition - add margins between entries, except last one #} td.field-body > ul:first-child.simple > li { margin: 0 0 {{ theme_bodylineheight }} 0; } td.field-body > ul:first-child.simple > li:last-child { margin-bottom: 0; } {# parameter definition - add some spacing between () in type declaration #} td.field-body > em, td.field-body > ul.first.simple > li > em { padding: 2px 4px; } {# parameter definition - set margins between paragraphs, except last one #} td.field-body > p, td.field-body > ul > li > p { margin: 0 0 {{ theme_bodylineheight }}; } td.field-body > p:last-child, td.field-body > ul > li > .admonition { margin-bottom: 0; } {# docutils loves to create empty paragraphs - hide them so margin don't muck with things #} td.field-body > p:empty { display: none; } {% else %} {# parameter definition - remove margin above first paragraph in content #} dl.field-list > dd > p:first-child, dl.field-list > dd > p:first-child:empty + ul.simple li > p:first-child, dl.field-list > dd > ul:first-child.simple li > p:first-child { margin-top: 0; } {# hide annoying empty paragraphs #} dl.field-list > dd > p:first-child:empty { display: none; } {% endif %} {#**************************************************** # document - admonitions #***************************************************#} {#--------------------------------------------------- # basic admonition styling - adds bg color & icons #--------------------------------------------------#} {% set icon_size_em = "2.65em" %} div.admonition, p.deprecated { background: {{ theme_admonition_note_color }}; {{ box_typography(theme_admonition_size, vert_padding="1em") }} padding: .5em 1em; border: 1px solid {{ theme_admonition_trim_color }}; border-width: {{ theme_admonition_trim_width }}; {{ border_radius(theme_admonition_radius) }} {# make space for icon #} background-position: .6em .5em; background-size: auto 1.58em; background-repeat: no-repeat; {# set default icon #} background-image: url("icon-note.png"); } {# set icon & color for different types #} {# 'div.note' used as default style #} div.caution, div.important { background-color: {{ theme_admonition_todo_color }}; background-image: url("icon-caution.png"); } div.warning { background-color: {{ theme_admonition_warning_color }}; background-image: url("icon-warning.png"); } div.danger, div.admonition.error { background-color: {{ theme_admonition_warning_color }}; background-image: url("icon-danger.png"); } div.seealso { background-color: {{ theme_admonition_seealso_color }}; background-image: url("icon-seealso.png"); } div.admonition-todo { background-color: {{ theme_admonition_todo_color }}; background-image: url("icon-todo.png"); } p.deprecated { background-color: {{ theme_admonition_deprecated_color }}; background-image: url("icon-deprecated.png"); } {# set margins w/in admonition #} div.admonition p, div.admonition pre, div.admonition ul, div.admonition ol { {{ box_typography(theme_admonition_size, set_size=False, vert_margin=0) }} } {# ident if at toplevel #} h1 ~ div.admonition { margin-left: {{ theme_bodylineheight }}; margin-right: {{ theme_bodylineheight }}; } {#--------------------------------------------------- # 'floating' admonitions #--------------------------------------------------#} div.admonition.float-right, div.admonition.floater {# deprecated alias #} { float: right; max-width: 40%; margin: 0 0 {{ theme_bodylineheight }} {{ theme_bodylineheight }}; } .admonition.float-left { float: left; max-width: 50%; margin: 0 {{ theme_bodylineheight }} {{ theme_bodylineheight }} 0; } .admonition.float-center { clear: both; max-width: 65%; margin: 0 auto 1.5em; } {#--------------------------------------------------- # admonition header styling #--------------------------------------------------#} {% if theme_inline_admonitions == "auto" %} {% set theme_inline_admonitions = false %} {% endif %} {% if theme_inline_admonitions|tobool %} {% set inline_title_selector = "" %} {% set block_title_selector = "div.admonition.block-title" %} {% else %} {% set inline_title_selector = "div.admonition.inline-title" %} {% set block_title_selector = "" %} {% endif %} {# put admontion title in row all it's own #} {{ block_title_selector }} p.admonition-title:first-child { {% if theme_inline_admonitions|tobool %} display: block; {% endif %} margin: -.5em -1em .5em; padding: .5em .5em .5em {{ icon_size_em }}; background: {{ theme_admonition_title_color }}; {{ border_radius(soft_corner_radius + " " + soft_corner_radius + " 0 0") }} {# match admonition #} } {# fix to override basic.css's !important #} {{ block_title_selector }} p.admonition-title:first-child { margin-top: -.5em !important; } {# put admonition title inline with text #} {{ inline_title_selector }} p.admonition-title { display: inline; margin: 0; padding: 0 .25em 0 1.5em; {# make room for icon #} } {{ inline_title_selector }} p.admonition-title:after { content: ":"; } {{ inline_title_selector }} p.admonition-title + p { display: inline; } {{ inline_title_selector }} p.admonition-title + ul { margin-top: 0; } {% if not theme_inline_admonitions|tobool %} {{ inline_title_selector }} p.admonition-title { background: none; } {% endif %} {# flag to hide title #} div.admonition.without-title p.admonition-title { display: none; } div.admonition.without-title { padding-left: {{ icon_size_em }}; } {#--------------------------------------------------- # 'todo' admonition summary list #--------------------------------------------------#} div#todos p.admonition-title { font-weight: normal; color: #AAA; font-size: 70%; } div#todos div.admonition-todo + p { font-size: 70%; text-align: right; margin-top: -.5em; margin-bottom: 1.5em; color: #AAA; } div#todos div.admonition-todo + p a { font-size: 130%; } {#**************************************************** # document - verionchanged/modified/deprecated #***************************************************#} div.deprecated, div.versionchanged, div.versionadded { {{ box_typography(theme_admonition_size) }} {{ opacity("0.6") }}; } {# always contained in one of above sections #} span.versionmodified { font-weight: bold; } {#**************************************************** # document - quoted text (TT & PRE) #***************************************************#} div.highlight { background: none; margin: {{ theme_bodylineheight }} 0; } div.highlight pre, td.linenos pre { padding: 10px; font-family: {{ theme_codeblockfont }}; font-size: 85%; line-height: {{ theme_bodylineheight }}; } div.highlight pre { background-color: {{ theme_codebgcolor }}; border: 1px solid {{ theme_codetrimcolor }}; border-width: 1px 0; border-style: solid dotted dotted solid; {{ border_radius(soft_corner_radius) }} color: {{ theme_codetextcolor }}; } {# remove extra margin from consecutive .highlight-xxx + .highlight-yyy sections #} div[class|="highlight"] + div[class|="highlight"] { margin-top: -{{ bl_height }}em; } {# for source-view pages #} p + [class|=highlight] > table.highlighttable { margin-top: -1em; {# hack fixing extra padding being inserted somewhere in table td #} margin-bottom: -1em; } {# for code blocks w/ linenos added #} table.highlighttable { display: block; } table.highlighttable tbody { display: block; } table.highlighttable tr { display: flex; align-items: flex-start; justify-content: flex-start; } table.highlighttable td { display: block; padding: 0; } table.highlighttable td.code { width: 100%; max-width: calc(100% - 1em); } table.highlighttable div.linenodiv { margin-top: 2.2em; } table.highlighttable div.linenodiv pre { background: none; border: 0; margin: 0; padding: 0; padding-right: .5em; } {# NOTE:: sphinx 1.3 switch to 'code' instead of 'tt' for literals #} {% if sphinx_version_info < [1,3] %} {% set code = "tt" %} {% else %} {% set code = "code" %} {% endif %} {{ code }} { font-family: {{ theme_codeblockfont }}; font-size: 90%; } {{ code }}.literal { background-color: {{ theme_quotebgcolor }}; border: 1px solid {{ theme_quotetrimcolor }}; padding: 0px 4px; margin: 1px; {{ border_radius("4px") }} } p {{ code }}.literal { white-space: nowrap; } {{ code }}.samp.literal > em { font-family: {{ theme_codevarfont or theme_codeblockfont }}; padding: 0 1px; {{ opacity(0.6) }} } {{ code }}.samp.literal > em:before { content: "{"; } {{ code }}.samp.literal > em:after { content: "}"; } h1 {{ code }}.literal { {# background-color: inherit; border: 0; #} font-size: 80%; } h1 {{ code }}.samp.literal > em { font-weight: normal; } div.sphinxsidebar {{ code }}.literal, a.reference {{ code }}.literal, div.related a {{ code }}.literal, {{ code }}.literal.xref { background-color: transparent; border: none; padding: 0; margin: 0; } .viewcode-back { font-family: {{ theme_bodyfont }}; } div.viewcode-block:target { background-color: #f4debf; border-top: 1px solid #ac9; border-bottom: 1px solid #ac9; } {# code block 'copybutton' #} .highlight .copybutton { position: absolute; right: 0; top: 0; margin: 0; padding: 0 6px; background: transparent; border: 1px solid transparent; {{ border_radius(soft_corner_radius) }} font-size: 75%; color: {{ theme_sidebartextcolor }}; white-space: nowrap; cursor: pointer; } .highlight .copybutton.active { text-decoration: line-through; {{ opacity(0.8) }} } .highlight:not(:hover) .copybutton:not(.active) { {{ opacity(0.7) }} } {#**************************************************** # document - object description sections # requires css classes to set by .ext.autodoc_sections # # NOTE: all sections nested w/in an object description will have the form: # <div class="section desc-section desc-section-{LEVEL}"> # <hN class="section-header">{TITLE}</hN> # {CONTENT} # </div> #***************************************************#} {# styling for nested sections #} .desc-section > .section-header { position: relative; } .desc-section-1 > .section-header { {{ box_typography(h2_size, set_line=False, vert_margin=1) }} border-bottom: 1px dotted {{ theme_nestedtextcolor or theme_sectionbgcolor }}; color: {{ theme_nestedtextcolor or theme_sectionbgcolor }}; } .desc-section-2 > .section-header { color: {{ theme_nestedtextcolor or theme_sectionbgcolor }}; } .desc-section > .section-header:before { {# NOTE: data-nested-label is filled in by js code #} content: attr(data-nested-label); font-size: 0.75em; opacity: 0.75; letter-spacing: 1px; font-style: italic; } {# styling for object declarations #} {% if theme_colored_objects in ["true", "row", "prefix"] %} {#**************************************************** # document - object definition styling #***************************************************#} {# XXX: if sphinx just added a common class to all these, e.g. 'object' or 'objdesc', wouldn't need so many rules. #} {% set color_object_row = theme_colored_objects in ["true", "row"] %} {% if color_object_row %} {# color entire declaration #} {% set unmarked_bg_suffix = "> dt" %} {% set marked_bg_suffix = "> dt" %} {% else %} {# just color the prefix #} {% set unmarked_bg_suffix = "> dt:before" %} {% set marked_bg_suffix = "> dt > .property:first-child" %} {% endif %} {# assign common row styling #} dl.object {{ unmarked_bg_suffix }}, {# xxx: was this ever used by sphinx, or just misnamed dl.data? #} dl.data {{ unmarked_bg_suffix }}, dl.function {{ unmarked_bg_suffix }}, dl.method {{ unmarked_bg_suffix }}, dl.attribute {{ unmarked_bg_suffix }}, dl.class {{ marked_bg_suffix }}, dl.exception {{ marked_bg_suffix }}, dl.classmethod {{ marked_bg_suffix }}, {# sphinx2 just renders these as "dl.method" #} dl.staticmethod {{ marked_bg_suffix }} {# ditto ^^^ #} { display: inline-block; {% if color_object_row %} padding: 0.3em 1em 0.3em 0.6em; {% else %} margin-right: 0.5em; padding: 0.3em 0.6em; {% endif %} border: {{ theme_object_trim_color }} solid 1px; border-width: 0 0 0 3px; {{ border_radius(theme_object_radius) }} } {% if color_object_row %} {# added by JS helper -- removed padding on right if there's hidden headerlink #} dl.has-headerlink {{ marked_bg_suffix }}, dl.has-headerlink {{ unmarked_bg_suffix }} { padding-right: 0; } {% endif %} {# assign type-specific row coloring/styling #} dl.object {{ unmarked_bg_suffix }}, {# xxx: was this ever used by sphinx, or just misnamed dl.data? #} dl.data {{ unmarked_bg_suffix }}, dl.attribute {{ unmarked_bg_suffix }} { background-color: {{ theme_object_attribute_color or theme_object_default_color }}; } dl.function {{ unmarked_bg_suffix }}, dl.method {{ unmarked_bg_suffix }}, dl.classmethod {{ marked_bg_suffix }}, {# sphinx2 just renders these as "dl.method" #} dl.staticmethod {{ marked_bg_suffix }} {# ditto ^^^ #} { background-color: {{ theme_object_function_color or theme_object_default_color }}; } dl.class {{ marked_bg_suffix }} { background-color: {{ theme_object_class_color or theme_object_default_color }}; border-width: 0 0 0 6px; } dl.exception {{ marked_bg_suffix }} { background-color: {{ theme_object_exception_color or theme_object_class_color or theme_object_default_color }}; } {# assign common prefix styling #} dl.object > dt:before, {# xxx: was this ever used by sphinx, or just misnamed dl.data? #} dl.data > dt:before, dl.function > dt:before, dl.method > dt:before, dl.attribute > dt:before, dl.class > dt > .property:first-child, dl.exception > dt > .property:first-child, dl.classmethod > dt > .property:first-child, {# sphinx2 renders these as ".method" w/ ".property"; our js adds subtype="classmethod" to tag #} dl.method[subtype] > dt > .property:first-child, {# ... so eventually only support this under sphinx 2 #} dl.staticmethod > dt > .property:first-child {# ditto ^^^ #} { font-size: 0.8em; font-weight: bold; font-style: italic; letter-spacing: 0.1em; color: {{ theme_object_type_color }}; } {# assign type-specific prefix content #} {% if theme_colored_object_prefixes in ["all", "nested"] %} {% set nested_prefix = ".desc-section " if theme_colored_object_prefixes == "nested" else "" %} {{ nested_prefix }} dl.attribute > dt:before { content: "attr"; padding-right: 0.6em; } {{ nested_prefix }} dl.function > dt:before { content: "func"; padding-right: 0.6em; } {{ nested_prefix }} dl.method:not([subtype]) > dt:before { content: "method"; padding-right: 0.6em; } {% elif theme_colored_object_prefixes != "default" %} {{ css_warning("cloud.css_t: unknown 'colored_object_prefixes' value: %r"|format(theme_colored_object_prefixes)) }} {% endif %} {% elif theme_colored_objects not in ["false", "none"] %} {{ css_warning("cloud.css_t: unknown 'colored_objects' value: %r"|format(theme_colored_objects)) }} {% endif %} dl > dt.highlighted { background: {{ theme_highlightcolor }}; } {# fix viewcode link positioning since DT is now inline #} .viewcode-link { position: absolute; right: 0; margin-right: 1.5em; margin-right: calc(1em + 10px); } {#**************************************************** # index page styling # requires classes set by .ext.index_styling #***************************************************#} table.indextable span.category { font-size: 80%; font-style: italic; color: {{ theme_index_category_color }}; } table.indextable a, table.indextable a:hover span.category { color: {{ theme_linkcolor }}; } table.indextable span.category span.location { font-weight: bold; } table.indextable td > dl > dt { margin-bottom: .5em; } table.indextable td > dl > dd > dl { margin-top: -.5em; margin-bottom: .5em; } {#***************************************************** # adapt for various page sizes & media #****************************************************#} {# adapt for xlarge displays #} @media only screen and (min-device-width: {{ theme_large_width }}) { {{ render_media_rules("xlarge_screen") }} } {# adapt for large displays #} @media only screen and (min-width: {{ theme_max_width }}) { {{ render_media_rules("large_screen") }} } {# adapt for medium & up displays #} @media only screen and (min-width: {{ theme_minimal_width }}) { {{ render_media_rules("medium_up_screen") }} {# helper to omit small-only elements #} .show-for-small { display: none !important; } } {# adapt for medium & small displays #} @media only screen and (max-width: {{ theme_max_width }}), only screen and (max-width: {{ theme_minimal_width }}), only screen and (max-device-width: {{ theme_minimal_width }}), handheld { {{ render_media_rules("medium_or_small_screen") }} } {# adapt for small displays #} @media only screen and (max-width: {{ theme_minimal_width }}), only screen and (max-device-width: {{ theme_minimal_width }}), handheld { {{ render_media_rules("small_screen") }} {# helper to omit unimportant elements on small displays #} .hide-for-small { display: none; } } {# adapt for print media #} @media print { {{ render_media_rules("print") }} } {{ render_css_warnings() }} {#**************************************************** # EOF #***************************************************#} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/static/cloud.js_t����������������0000664�0001750�0001750�00000133155�13562614720�030562� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ~~~~~~~~~~~~~~ * cloud.js_t *~~~~~~~~~~~~~~ * * Various bits of javascript driving the moving parts behind various * parts of the cloud theme. Handles things such as toggleable sections, * collapsing the sidebar, etc. * * :copyright: Copyright 2011-2012 by Assurance Technologies * :license: BSD */ {# helper vars based on location of sidebar #} {% if theme_rightsidebar | tobool %} {% set sidebar_side = "right" %} {% set sidebar_opp = "left" %} {% else %} {% set sidebar_side = "left" %} {% set sidebar_opp = "right" %} {% endif %} // begin encapsulation (function (window, $, _, CST) { /*========================================================================== * common helpers *==========================================================================*/ var isUndef = _.isUndefined, TEXT_NODE = 3, // could use Node.TEXT_NODE, but IE doesn't define it :( $window = $(window), utils = CST.utils, shorten_url = utils.shortenUrl, baseUrl = utils.baseUrl; // helper that retrieves css property in pixels function csspx(elem, prop) { return parseInt($(elem).css(prop).replace("px", ""), 10); } // NOTE: would use $().offset(), but it's document-relative, // and we need viewport-relative... which means getBoundingClientRect(). // NOTE: 'window.frameElement' will only work we're embedded in an iframe on same domain. var parentFrame = window.frameElement; if (window.parent && window.parent !== window) { $(window.parent).scroll(function () { $window.scroll(); }); } function leftFrameOffset() { return parentFrame ? parentFrame.getBoundingClientRect().left : 0; } function topFrameOffset() { return parentFrame ? parentFrame.getBoundingClientRect().top : 0; } function leftViewOffset($node) { return ($node && $node.length > 0) ? $node[0].getBoundingClientRect().left + leftFrameOffset() : 0; } function topViewOffset($node) { return ($node && $node.length > 0) ? $node[0].getBoundingClientRect().top + topFrameOffset() : 0; } function bottomViewOffset($node) { return ($node && $node.length > 0) ? $node[0].getBoundingClientRect().bottom + topFrameOffset() : 0; } {# return top offset relative to parent, or to frame/viewport if parent is omitted #} function topOffset($target, $parent) { if (!($target && $target[0])) { return 0; } var offset = $target[0].getBoundingClientRect().top; if ($parent && $parent[0]) { offset -= $parent[0].getBoundingClientRect().top; } else { offset += topFrameOffset(); } return offset; } // return normalized nodename, takes in node or jquery selector // (can't trust nodeName, per http://ejohn.org/blog/nodename-case-sensitivity/) function nodeName(elem) { if (elem && elem.length) { elem = elem[0]; } return elem && elem.nodeName.toUpperCase(); } /*========================================================================== * Sythesize 'cloud-breakpoint' event *========================================================================== * Event emitted when crossing small <-> medium media breakpoint *==========================================================================*/ var smallScreen; $(function (){ var $smallDiv = $('<div class="hide-for-small" />').appendTo("body"), $html = $("html"); function update(){ var test = $smallDiv.css("display") == "none"; if(test !== smallScreen){ smallScreen = test; $html.toggleClass("small-screen", test) .toggleClass("medium-up-screen", !test); $window.trigger("cloud-breakpoint"); } } $window.on("DOMContentLoaded load resize", update); update(); }); /*========================================================================== * Highlighter Assist *========================================================================== * Sphinx's highlighter marks some objects when user follows link, * but doesn't include section names, etc. This catches those. *==========================================================================*/ $(function () { // helper to locate highlight target based on #fragment function locate_target() { // find id referenced by #fragment var hash = document.location.hash; if (!hash) return null; var section = document.getElementById(hash.substr(1)); if (!section) return null; // could be div.section, or hidden span at top of div.section var name = nodeName(section); if (name != "DIV") { if (name == "SPAN" && section.innerHTML == "" && nodeName(section.parentNode) == "DIV") { section = section.parentNode; } else if (name == "DT" && section.children.length && $(section).children("tt.descname, code.descname").length > 0) { // not a section, but an object definition, e.g. a class, func, or attr return $(section); } } // now at section div and either way we have to find title element - h2, h3, etc. var header = $(section).children("h2, h3, h4, h5, h6").first(); return header.length ? header : null; } // init highlight var target = locate_target(); if (target) target.addClass("highlighted"); // update highlight if hash changes $window.on("hashchange", function () { if (target) target.removeClass("highlighted"); target = locate_target(); if (target) target.addClass("highlighted"); }); }); /*========================================================================== * Toggleable Sections *========================================================================== * Added expand/collapse button to any collapsible RST sections. * Looks for sections with CSS class "html-toggle", * along with the optional classes "expanded" or "collapsed". * Button toggles "html-toggle.expanded/collapsed" classes, * and relies on CSS to do the rest of the job displaying them as appropriate. *==========================================================================*/ // given "#hash-name-with.periods", escape so it's usable as CSS selector // (e.g. "#hash-name-with\\.periods") // XXX: replace this with proper CSS.escape polyfill? function escapeHash(hash) { return hash.replace(/\./g, "\\."); } $(function () { function init() { // get header & section, and add static classes var header = $(this); var section = header.parent(); header.addClass("html-toggle-button"); // helper to test if url hash is within this section function contains_hash() { var hash = document.location.hash; return hash && (section[0].id == hash.substr(1) || section.find(escapeHash(hash)).length > 0); } // helper to control toggle state function set_state(expanded) { expanded = !!expanded; // toggleClass et al need actual boolean section.toggleClass("expanded", expanded); section.toggleClass("collapsed", !expanded); section.children().toggle(expanded); if (!expanded) { section.children("span:first-child:empty").show(); /* for :ref: span tag */ header.show(); } } // initialize state set_state(section.hasClass("expanded") || contains_hash()); // bind toggle callback header.click(function (evt) { var state = section.hasClass("expanded") if (state && $(evt.target).is(".headerlink")) { return; } set_state(!state); $window.trigger('cloud-section-toggled', section[0]); }); // open section if user jumps to it from w/in page $window.on("hashchange", function () { if (contains_hash()) set_state(true); }); } $(".html-toggle.section > h2, .html-toggle.section > h3, .html-toggle.section > h4, .html-toggle.section > h5, .html-toggle.section > h6").each(init); }); /*========================================================================== * mobile menu / collapsible sidebar *========================================================================== * Instruments sidebar toggle buttons. Relies on applying classes * to div.document in order to trigger css rules that show/hide sidebar. * Persists sidebar state via session cookie. * Sidebar state for small screens is tracked separately, * and is NOT persisted. *==========================================================================*/ $(function () { // get nodes if (!$(".sphinxsidebar").length) { return; } var $doc = $('div.document'), $hide = $('button#sidebar-hide'), $show = $('button#sidebar-show'), copts = { // expires: 7, path: utils.rootpath }; // set sidebar state for current media size var lastSmall = false, smallState = false, largeState = false; function setState(visible){ $doc.toggleClass("sidebar-hidden", !smallScreen && !visible) .toggleClass("document-hidden", smallScreen && visible); $hide.toggleVis(visible); $show.toggleVis(!visible); lastSmall = smallScreen; if(smallScreen) { smallState = visible; if(visible) { largeState = true; } } else { largeState = visible; if(!visible) { smallState = false; } $.cookie("sidebar", visible ? "expanded" : "collapsed", copts); } $window.trigger("cloud-sidebar-toggled", visible); } // change when buttons clicked $show.click(function () { setState(true); }); $hide.click(function () { setState(false); }); // refresh sidebar state when crossing breakpoints $window.on("cloud-breakpoint", function (){ setState(smallScreen ? smallState : largeState); }); // load initial state if(smallScreen){ setState(false); } else { var value = $.cookie("sidebar"); {% if theme_defaultcollapsed | tobool %} if (!value) value = "collapsed"; {% endif %} setState(value != "collapsed"); } // make buttons visible now that they're instrumented $(".sidebar-toggle-group").removeClass("no-js"); }); {%- if theme_stickysidebar | tobool %} /*========================================================================== * sticky sidebar *========================================================================== * Instrument sidebar so that it sticks in place as page is scrolled. *==========================================================================*/ function resetStickyState($target){ $target.css({ position: "", marginLeft: "", top: "", {{sidebar_side}}: "", bottom: "" }); } // helper to update 'sticky' state of target -- // tried to make this generic, but some bits are specific to sidebar function setStickyState($target, top, start, end, $container){ if (top >= start) { // top of sidebar is above stickyStart -- scroll with document resetStickyState($target); } else if (top > end) { $target.css({ position: "fixed", marginLeft: 0, top: start - topFrameOffset(), {{sidebar_side}}: leftViewOffset($container), bottom: "" }); } else { // bottom of sidebar is below stickyEnd -- scroll with document, // but place at bottom of container $target.css({ position: "absolute", marginLeft: 0, top: "", {{sidebar_side}}: 0, bottom: 0 }); } } $(function () { // initialize references to relevant elements, // and internal state var $bodywrapper = $(".bodywrapper"), // element that contains content $bodytoc = $('.sphinxglobaltoc a[href="#"]').parent(), // element containing toc for page $container = $('.document'), // element to stick within $target = $('.sphinxsidebar'), // element to sticky $toggle = $(".sidebar-toggle-group"), // extra element to sticky targetMargin = 0, // $target top margin windowHeight = 0, // cache of window height disable = false, // whether sticky is disabled for given window size start = 0, // start sticking when top of target goes above this point lastTop = null, // tracks last offset for scroll+hover handling containerOffset = 0, // top margin of target (included) offset = 0, // offset within target offsetMin = Math.max(0, start); // min offset // func to update sidebar position based on scrollbar & container positions function update_sticky(evt) { if (disable) { return; } // calc stats // HACK: using $container for offset so we don't have to reset_sticky() for calc. // then add cached container-relative offset to get topViewOffset($target). var top = topViewOffset($container), targetHeight = $target.outerHeight(true), end = targetHeight - $container.height(); // adjust offset if users scrolls while hovering over sidebar if (evt && evt.type == "scroll" && ($target.first().is(":hover") || // make sure local toc scrolls into view // XXX: will this still work right if window height < bodytoc height? ($bodytoc.length && bottomViewOffset($bodytoc) + 16 >= windowHeight))) { offset -= top - lastTop; } lastTop = top; // see note in top init (above), but doing this here // so it doesn't affect offset adjustment top += containerOffset; // limit offset to container bounds if (offset < offsetMin) { offset = offsetMin; } else { var offsetMax = targetHeight - windowHeight - start; offset = Math.max(offsetMin, Math.min(offset, -top, offsetMax)); } // offset = 0; // console.debug("sticky sidebar: top=%o offset=%o start=%o end=%o", // top, offset, start, end); // set sticky state setStickyState($target, top, start - offset, end - offset, $container); // set button sticky state -- has to stay at top of screen setStickyState($toggle, top, start - Math.min(offset, targetMargin), -1e9, $container); } // func to update sidebar measurements, and then call update_sticky() function update_measurements() { // if body shorter than sidebar, setting sidebar to 'fixed' would cause doc // to shrink below sidebar height, so have to disable sticky mode in this case. resetStickyState($target); resetStickyState($toggle); disable = (smallScreen || $bodywrapper.height() < $target.height()); if (disable) { return; } // calc stats windowHeight = $window.height(); targetMargin = csspx($target, "margin-top"); if($target.css("display") == "none"){ // so toggle positioned correctly on collapsed sidebar containerOffset = 0; } else { // NOTE: this includes margin-top since it's not removed by sticky code above containerOffset = topOffset($target, $container) - targetMargin; } // update state update_sticky(); } // run function now, and every time window scrolls // XXX: would it help to throttle/raf() scroll & resize calls? $window.scroll(update_sticky) .on("resize hashchange cloud-section-toggled cloud-sidebar-toggled", update_measurements); update_measurements(); // hack to fix errant initial-layout issue $window.on("load", update_sticky); }); {% endif %} // flag set by smooth scroller to temporarily disable toc sliding. var scrollingActive = false; {%- if theme_highlighttoc | tobool %} /*========================================================================== * sidebar toc highlighter *========================================================================== * highlights toc entry for current section being viewed; * as well as expands & collapses entries for sections that aren't onscreen. *==========================================================================*/ $(function () { // scan all links, gathering info about their relationships var $sbody = $("div.body"), localDB = [], // entries that are part of local page OR child page toggleDB = []; // subset of localDB which has $ul defined // scan all links w/o TOCs $(".sphinxlocaltoc ul a, .sphinxglobaltoc ul a").each(function (idx, link) { // grab basic info about link var $link = $(link), // NOTE: reading link.attr() so highlight parameter // from current location isn't included... href = shorten_url($link.attr("href")) || "#", isLocal = (href[0] == "#"), isTop = (href == "#"), $li = $link.parent("li"), parent = $li.parent("ul").prev("a").data("toc"), $target; // determine type of link & target element for visibility calc if (isLocal) { // css code relies on all local links starting with "#" // so make sure links use right representation $link.attr("href", href); // needing for styling $li.addClass("local"); // link points to section in current document. // use that section as visibility target if(isTop){ $target = $sbody; // don't bother traversing to parent entry if outside page parent = null; } else { $target = $(document.getElementById(href.slice(1))); // XXX: what about rare border case where there's // multiple toplevel entries? not sure *how* to handle that. // (parent will be null in this case) } } else if (parent) { // needing for styling $li.addClass("child"); // parent (or some ancestor) is part of page, // so this is link for child page. // prefer to use actual link in document as visibility target $target = parent.$target.find("a").filter(function () { return shorten_url(this.href) == href; }); if (!$target.length) { // target link not actually visible in document // XXX: what if target has multiple links, but to subfragments // e.g. (passlib.hash manpage's link to passlib.hash.ldap_std)? return; } if (($target.parent("li").attr("class") || '').search(/(^|\w)toctree-/) == 0) { // it's part of embedded toc tree, use whole LI as target. $target = $target.parent("li"); } // XXX: what if target link is w/in subsection, // even though it belongs at this level in TOC? // *think* active_child code below will prevent spurious highlighting. } else { // this link isn't local, nor is any ancestor, so ignore this one. return; } // add to update list var entry = { // // static vars // $target: $target, // section/object controlling link's visibility $li: $li, // list item we're instrumenting parent: parent, // reference to parent entry children: [], // list of child nodes href: href, // normalized copy of li > a[href] isLocal: isLocal, // whether href points to local page // filled by $ul pass, below $ul: null, // list of child items if we're doing collapse checking, else null openSize: 0, // avg # of child items expecting to be visible at a time. // // state vars modified by updateTOC() // rect: null, // cache of client bounding rect visible: false, // whether target is onscreen active: false, // whether this entry (or child) is marked active justOpened: false // whether toc-toggle was opened during this updateTOC() pass }; localDB.push(entry); if(parent) { parent.children.push(entry); } $link.data("toc", entry); // used to get parent entry (above), and for debugging }); // if no local links found, don't bother w/ update hook //console.debug("localDB: %o", localDB); if (!localDB.length) return; // figure out which nodes should be collapsible. // go in reverse order, so we have count available for parent elements. // fills in $ul & viewCount in entries for(var i=localDB.length - 1; i>=0; --i){ // don't fill in $ul for toplevel, or ones w/ no entries. var entry = localDB[i], $ul = entry.$li.children("ul"); if(!i || !$ul.length){ continue; } // calculate how many children will be visible at a time // when $ul is open. this is # of children, plus number // of descendants always visible in non-collapsing children, // plus the largest visibility count of all collapsing children. var weight = entry.children.length, dynamic = 0; entry.children.forEach(function (child){ if(!child.$ul) { // always open weight += child.openSize; } else if(child.openSize > dynamic){ // largest collapsible child seen so far dynamic = child.openSize; } }); entry.openSize = (weight += dynamic); // determine if this one should actually be collapsible // TODO: this max weight should really depend on how much // room is available; and/or be decided when parent // is comparing all the children. // NOTE: 'toc-always-open' and 'toc-always-toggle' are control // flags that can be applied via rst-class to section header. if((weight > 3 && !entry.$target.hasClass("toc-always-open") || entry.$target.hasClass("toc-always-toggle"))) { entry.$ul = $ul; entry.$li.addClass("toc-toggle"); toggleDB.push(entry); } } // debugging helper // var cutoffPrefix = 'pointer-events: none; position: fixed; left: 0; right: 0; background: ', // $cutoff = $('<div/>', {style: cutoffPrefix + 'rgba(0,0,255,0.3)'}).appendTo("body"), // $cutoff2 = $('<div/>', {style: cutoffPrefix + 'rgba(0,255,0,0.3)'}).appendTo("body"); // function to update cutoff settings var winHeight, // window height lineHeight, // sbody's line height (px) minCutoff, // minimum viewport offset where we assume user is reading curHash; // hash of current highlighted section function updateConfig(_evt, first_run){ // determine viewable range lineHeight = csspx($sbody, "line-height"); winHeight = $window.height(); minCutoff = Math.floor(Math.min(winHeight * 0.2, 7 * lineHeight)); curHash = shorten_url(document.location.hash) || "#"; // update TOC markers updateTOC(_evt, first_run); } // function to update toc markers function updateTOC(_evt, first_run) { // recalc readline -- attempt to estimate where user who's // scanning through docs is "reading". We start w/ minCutoff, // but when at bottom of screen, may have a bunch of sections visible, // and want to have them expand as last bit of document scrolls into view, // so the readline moves down page when document gets to the end. var readline = minCutoff, bodyBottom = $sbody[0].getBoundingClientRect().bottom, useMaxRatio = (2 * winHeight - bodyBottom - minCutoff) / (winHeight - minCutoff); if (useMaxRatio > 0) { var maxCutoff = Math.min(bodyBottom - 3 * lineHeight, winHeight); readline = minCutoff + (maxCutoff - minCutoff) * Math.min(useMaxRatio, 1); } if (winHeight > $sbody.height()) { readline = 0; } // debug stats // console.debug("useMaxRatio=%o", useMaxRatio); // $cutoff.css({height: readline, top: 0}); // $cutoff2.css({height: minCutoff, top: 0}); // reset entries -- recalc .rect & .visible; clear .active flag; // clear active/focus styling classes localDB.forEach(function (entry){ var rect = entry.rect = entry.$target[0].getBoundingClientRect(); entry.visible = (rect.top <= winHeight && rect.bottom >= 0 && (rect.width || rect.height)); entry.active = false; entry.$li.removeClass("active focus"); }); // pick focus at top TOC level, then check if one of it's // children would be better choice, and so on until // there are no children that could hold focus. // NOTE: assumes children are listed in reading order. var focus = localDB[0]; while (true) { var best = null, children = focus.children, cutoff = readline; for(var i = 0, e = children.length; i < e; ++i){ var child = children[i]; // skip hidden children if(!child.visible) { continue; } // pick bottom-most child which starts above readline. else if (child.rect.top <= cutoff) { best = child; // if child is highlighted, keep it open longer, // by raising the readline up to minCutoff. if(child.href == curHash){ cutoff = minCutoff; } } } var $li = focus.$li; focus.active = true; $li.addClass("active"); if (best) { if(!best.isLocal && focus.isLocal){ // set focus on final local section // as well as child link $li.addClass("focus"); } focus = best; } else { $li.addClass("focus"); break; } } // update open/closed status of nested ULs // TODO: would like to do cleaner job tracking // which sections are being animated open/close, // and sync it w/ smooth-scrolling code (below). // for now, only have '.justOpened' hack to detect // if we're currently animating a parent element. toggleDB.forEach(function (entry){ var $li = entry.$li, $ul = entry.$ul, closed = (!entry.visible || !entry.active || entry.$target.hasClass("collapsed")); if(smallScreen) { closed = false; first_run = true; } entry.justOpened = false; if ($li.hasClass("closed") == closed) { return; } if (closed) { if (first_run) { $ul.hide(); // don't animate things on first run } else { $ul.slideUp(); } } else { var parent = entry.parent; if (first_run || (parent && parent.justOpened)) { $ul.show(); // don't animate if parent is animated. } else { $ul.slideDown(); } entry.justOpened = true; } $li.toggleClass("closed", closed); }); } // run function now, and every time window is resized // TODO: disable when sidebar isn't sticky (including when window is too small) // and when sidebar is collapsed / invisible function scrollWrapper(evt){ if(scrollingActive) { return; } return updateTOC(evt); } $window.on("scroll", scrollWrapper) .on('resize hashchange cloud-section-toggled cloud-sidebar-toggled', updateConfig); updateConfig(null, true); }); {% endif %} /* ========================================================================== * header breaker * ========================================================================== * attempts to intelligently insert linebreaks into page titles, where possible. * currently only handles titles such as "module - description", * adding a break after the "-". * ==========================================================================*/ $(function () { // get header's content, insert linebreaks var header = $("h1"); var orig = header[0].innerHTML; var shorter = orig; if ($("h1 > a:first > tt > span.pre").length > 0) { shorter = orig.replace(/(<\/tt><\/a>\s*[-\u2013\u2014:]\s+)/im, "$1<br> "); } else if ($("h1 > tt.literal:first").length > 0) { shorter = orig.replace(/(<\/tt>\s*[-\u2013\u2014:]\s+)/im, "$1<br> "); } if (shorter == orig) { return; } // hack to determine full width of header header.css({whiteSpace: "nowrap", position: "absolute"}); var header_width = header.width(); header.css({whiteSpace: "", position: ""}); // func to insert linebreaks when needed function layout_header() { header[0].innerHTML = (header_width > header.parent().width()) ? shorter : orig; } // run function now, and every time window is resized layout_header(); $window.on('resize cloud-sidebar-toggled', layout_header); }); {% if theme_cleanup_toc|tobool %} /*========================================================================== * toc cleaner *========================================================================== * attempts to remove clutter from toc lists. * mainly, looks for toc entries with format "{module} -- {desc}"", * and reduces them down to just "{module}" to save space. *==========================================================================*/ $(function () { var $toc = $(".sphinxglobaltoc"), candidates = {}; // scan TOC for module entries $toc.find("a.internal.reference:has(.literal:first-child > .pre)").each(function () { var $this = $(this), text = $this.find(".literal").text(); // wrap details in .objdesc class $this.contents().filter(function () { return ((this.nodeType == TEXT_NODE)) }).wrap('<span class="objdesc"></span>'); // work out modules that have exactly 1 toc entry if (isUndef(candidates[text])) { candidates[text] = $this; } else { candidates[text] = null; } }); // for all modules that had unique names, add 'unique' flag $.each(candidates, function (text, $entry) { if ($entry) { $entry.children(".objdesc").addClass("unique"); } }); }); {% endif %} {% if theme_smooth_scroll_links|int %} /*========================================================================== * smooth scrolling * instrument toc links w/in same page to use smooth scrolling *==========================================================================*/ var scrollSpeed = {{ theme_smooth_scroll_links|int }}; $(function () { $('.sphinxsidebar a[href^="#"]').click(function (event) { var hash = this.hash; event.preventDefault(); scrollingActive = true; // disable toc focus calc $('html,body').animate({ // NOTE: hash == "" for top of document scrollTop: hash ? $(escapeHash(hash)).offset().top : 0 }, scrollSpeed).promise().always(function (){ // enable & redraw toc focus // xxx: would really like to update *before* animation starts, // so it's animation happened in parallel to scrolling animation scrollingActive = false; $window.trigger("cloud-sidebar-toggled"); }); if (window.history.pushState) { window.history.pushState(null, "", hash || "#"); } $window.trigger("hashchange"); // for toggle section code }); }); {% endif %} {% if theme_inline_admonitions == "auto" %} /*========================================================================== * auto determine when admonition should have inline / block title * under this mode, the css will default to styling everything like a block, * so we just mark everything that shouldn't be blocked out. *==========================================================================*/ $(function () { $("div.body div.admonition:not(.inline-title):not(.block-title)" + ":not(.danger):not(.error)" + ":has(p:first-child + p:last-child)").addClass("inline-title"); }); {% endif %} /*========================================================================== * patch sphinx search code to try to and prevent rest markup from showing up * in search results *==========================================================================*/ var Search = window.Search; if (Search && Search.makeSearchSummary) { var sphinxSummary = Search.makeSearchSummary; Search.makeSearchSummary = function (text, keywords, hlwords) { /* very primitive regex hack to turn headers into dots */ text = text.replace(/^(\s|\n)*([-#=.])\2{6,}\s*\n/, ''); text = text.replace(/^([-#=.])\1{6,}\s*$/mg, '\u26AB'); text = text.replace(/^\s*#\.\s*/mg, '\u2022 '); //console.debug("makeSearchSummary: text=%o keywords=%o hlwords=%o", text, keywords, hlwords); return sphinxSummary.call(this, text, keywords, hlwords); } } /*========================================================================== * toc page styling *========================================================================== * adds some classes to TOC page so items can be styled. * sets li.page and div.highlight-pages markers *==========================================================================*/ $(function () { $("div.body div.toctree-wrapper").each(function (){ var $div = $(this), highlight = false; $div.find("li").each(function (){ var $li = $(this), url = baseUrl($li.children("a").attr("href")), $parent = $li.parent("ul").prev("a"), parentUrl = baseUrl($parent.attr("href")); if(!$parent.length || parentUrl != url){ $li.addClass("page"); } else { highlight = true; } }); if(highlight) { $div.addClass("highlight-pages"); } }); var $toc = $("#table-of-contents div.toctree-wrapper.highlight-pages"); if($toc.length){ $('<label id="hide-page-sections"><input type="checkbox" /> {{ _("Hide page sections") }}</label>') .insertBefore($toc).find("input") .change(function (evt){ $toc.toggleClass("hide-sections", evt.target.checked); }).change(); $(".sphinxglobaltoc > h3").css("margin-top", "4px").wrap('<ul><li class="current active"></li></ul>'); } }); /* ========================================================================== * codeblock lineno aligner * if document contains multiple codeblocks, and some have different counts * (e.g. 10 lines vs 300 lines), the alignment will look off, since the * 300 line block will be indented 1 extra space to account for the hundreds. * this unifies the widths of all such blocks (issue 19) *==========================================================================*/ $(function () { var $lines = $(".linenodiv pre"); if (!$lines.length) { return; } // NOTE: using ems so this holds under font size changes var largest = Math.max.apply(null, $lines.map(function () { return $(this).innerWidth(); })), em_to_px = csspx($lines, "font-size"); $lines.css("width", (largest / em_to_px) + "em").css("text-align", "right"); }); /*========================================================================== * codeblock copy helper button *========================================================================== * * Add a [>>>] button on the top-right corner of code samples to hide * the '>>>' and '...' prompts and the output and thus make the code * copyable. Also hides linenumbers. * * Adapted from copybutton.js, * Copyright 2014 PSF. Licensed under the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 * File originates from the cpython source found in Doc/tools/sphinxext/static/copybutton.js *==========================================================================*/ $(function () { // TODO: enhance this to hide linenos for ALL highlighted code blocks, // and only perform python-specific hiding as-needed. // static text var hide_text = 'Hide the prompts and output', show_text = 'Show the prompts and output'; // helper which sets button & codeblock state function setButtonState($button, active) { $button.parent().find('.go, .gp, .gt').toggle(!active); $button.next('pre').find('.gt').nextUntil('.gp, .go').css('visibility', active ? 'hidden' : 'visible'); $button.closest(".highlighttable").find(".linenos pre").css('visibility', active ? 'hidden' : 'visible'); $button.attr('title', active ? show_text : hide_text); $button.toggleClass("active", active); } // create and add the button to all the code blocks containing a python prompt var $blocks = $('.highlight-python, .highlight-python3'); $blocks.find(".highlight:has(pre .gp)").each(function () { var $block = $(this); // tracebacks (.gt) contain bare text elements that need to be // wrapped in a span to work with .nextUntil() call in setButtonState() $block.find('pre:has(.gt)').contents().filter(function () { return ((this.nodeType == TEXT_NODE) && (this.data.trim().length > 0)); }).wrap('<span>'); // insert button into block var $button = $('<button class="copybutton">>>></button>'); $block.css("position", "relative").prepend($button); setButtonState($button, false); }); // toggle button state when clicked $('.copybutton').click( function () { var $button = $(this); setButtonState($button, !$button.hasClass("active")); }); }); /*========================================================================== * nested section helper *========================================================================== * fills out 'data-nested-label' for nested sections (e.g. those w/in a class def) * based on name of containing class. this is used to generate a "return to top" * link w/in nested section header. *==========================================================================*/ {% if theme_object_header_prefix %} $(function () { var template = _.template(({{ theme_object_header_prefix }}).replace( /\\(\d{4})/g, function (m, char) { return String.fromCharCode(parseInt(char,16)); } )); $(".desc-section > .section-header").each(function (idx, header) { var $header = $(header), $parent = $header.closest("dd").prev("dt"), name = $parent.find(".descname").text(); if (!name) { return; } $header.attr("data-nested-label", template({name: name, parent: $parent})); }); }); {% endif %} /*========================================================================== * field definition markup * XXX: could try to do this via an extension *==========================================================================*/ $(function () { // sphinx2 doesn't distinguish classmethod/staticmethod, so add helper class for styling. $("dl.method").each(function (){ var $item = $(this), type = $item.find("> dt > em.property:first-child").text().trim(); if(type){ $item.attr("subtype", type); } }); // detect which ones end w/ headerlink, to adjust markup // NOTE: .classmethod & .staticmethod can be removed when sphinx 1.x is dropped. $("dl.object, dl.data, dl.function, dl.method, dl.attribute, dl.class , dl.exception, dl.classmethod, dl.staticmethod") .filter(":has(> dt > a.headerlink:last-child)").addClass("has-headerlink"); }); /*========================================================================== * eof *==========================================================================*/ // end encapsulation // NOTE: sphinx provides underscore.js as $u }(window, jQuery, $u, CST)); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/static/icon-caution.png����������0000644�0001750�0001750�00000002114�10336103541�031643� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;���bKGD������ pHYs�� �� B(x���tIME  ,' F��IDAT8˅]h\Es?3Mn?BmĖT0* F+D)>>Ԃ"} *Z "->hZKZLbӴ4d7w{LJMp93ga?p]Bh’y⩓i^5䶝Ǖ@}0[,P&;1$܂F_7DTKj. Fdt=�=Hn|ͥouqڱ,[/6=E@a'Ӄdz+'Z [uY(-YV0Ԇ5ceS-4y*�(U"h`e-z>%sWG?Iuta]ep}[;B!+'Ѭbڕf_ZFw ԷU[U97`Ŭ &kT#/*U!%-v�W5ŭZs]U@c5ܙAF7EӐUM9daipDfٗE5!")V yą % 9˓3m}>"# x`X溊Ǫ[ gzˁbz}V_(@C7K1%L:㚦} /s fDM0+tN_Z�3c#˻xSM~PVţ?v`3S#7m5w+ Ƃ5t<N:",Lɓ_*gLnfvH3&JZ%шٸEN ߶fo}O`] "߽q?X<ZET"8˶FͿ@Xr�< DfOK(,sֵ9NA+m (}A*! ު$P,4|<E=5՛/ˇ(zQ^jx:k$����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/static/icon-danger.png�����������0000644�0001750�0001750�00000002370�10325033750�031447� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;���bKGD������C��� pHYs�� �� ����tIME +�C+G��IDAT8ˍ[hTGsnl jH[M f R DB)TzЇBPA (ڂsѴIۺI9sD<o.<c%xƖH s-<IB\ 4%Oꆆ65u *m,T3}}K$|`Νx_qm<TJ-b5\9w.3 Wuuo۵# !DnJaaPS_կ;Y@`fOt$BA*˶gf2ɚSXM>߮޾M:!v#Ș&v6[' ]x8#JxwF ; 77{]]dB!rJ,}H|L ieejme޽BV # [lh'�hB OZ3gBRڊm�F8iB.źT*y!@)*lӧYq /?ihJ1p0r9R()IU*Ò*`r pz<8^"/bmc?Gxm=%tvM4FnaIF&i4 JJX|3HI0<^:v gY:EhBPs(Sĥ$C=~0i?*)HIr<V{Fٳ9bc{;yr,^fBJ98" b&lDM_DuJGG)/ӭiԄ+/H.bҙ-Ͷu \$Bnbg"p52g`��Ц޹C.r%U�=7nWR)5:6qΜa цC".SJrdGF(2Noݻz'XE耫i9:>^ﯯwIx*+YY[_mxԭe2h08s ttiWU/dbmxX1|V}ֆ %ee/hy%!R`9< v o�B B䣠os8SUyP,�y@xP(0 (?dy����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/static/icon-deprecated.png�������0000644�0001750�0001750�00000002461�12214647250�032315� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;���bKGD������C��� pHYs�� �� ����tIME b���5tEXtComment�(c) 2004 Jakub Steiner Created with The GIMPًo��}IDAT8˵[lTE3{nv7zJ)/V@ >L x A45& JBb0eCa[.tngwTE}pf2|73?_oςP8N !Pڻgw3v蛧frT:}eյ擾zuݳ߃L&k1sL걱QJ%u29vޟŋ/8_T'}WWڶM: |ȁB^Xxi7~uUNpNPNLT!u]#=�rt'{jEs�-]Akm稨rMv>NJG"2KR(H$p8h Ld2i I47.?ȼHPsXayjjS(f8CYY/_`TVΥ[�u%a,h~&` 0rܾ} 6 d&ɲe�|;v²,8}z�4XdzaɒH)X:R5 X~BqffPJaY~lƍ׉.Fst!`4q]˲PJ!'Ŵƽs_k( χRE ]BJG&3I>S(ضM @kp @hvuB!odtt)%>'4MQJL�,6Ji2 ?S]]ܹUH%J"k8{ C@(Bj|}\n!D (Zuf$ ZZDJ<~cԋ:m�utϻeU*9>>F ܹ|l6KQs9R$+W'co1=ӏnyK5ʁZݻv>vMgID- 9Ry<'>>SgHq`Dx[@ȃW^}+n7M#LӬ4 _cW8~�ƀqQ,W>;,0Lb7e�&PA}%< ZR)z(�9v}$m9kt~g!����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/static/icon-note.png�������������0000644�0001750�0001750�00000002264�12214647250�031163� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;���bKGD������C��� pHYs�� �� ����tIME / ={H��AIDAT8˝]lUw|NgnRU[PJ!i@DjjR#} AM !$1`ԄBb4F%>!Ce�q@;ͽ%EB9a,!$Ι-?E#Na7nZص[4,A/HeEsשFNx]íoتԃD`q\~IÇ7E#낷صi-ejqpsBŌOdϣmZPicHfpkamM)#~mPb6xĒK>TlNyA D9߱p+WoòM)1 !eA %JHRRDР)*M|Pq|xs]gl[CA 1 !VN5N1̙.l8.f_%J yN7尢+D� fEt(�~" GUPGKY:נޮ`C7-F5:=3k8U1"c'y Վu9ʖ&i=ۻCuɹS3/ S}Ŭ^4*X"q}QVs\<GNYgFG߷ی6ṳ̏1*lJSͪlmT:ri98؜9C KAu?\ sm"/L-.c[cшyG*<aɩ ƣgF~xYϝc E=kd,IzZױ_=<|M46l|Øh쳻coZ 7T&.Qv!�ӳU!u=pMǧ3 |J[7 ²e+h hb[PPHCVd<~=1o'~_�@{=Ȑz{Mm��;A�*�u++&Τ5kBݟ1�� �jj�Z�fs_~6�)�s�Ups?z2�ou�֜G����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/static/icon-seealso.png����������0000644�0001750�0001750�00000001667�12214647250�031657� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;���sBIT|d��nIDAT8_hEǿsMz^4XZz, /}7D|+| RLM($`ʥ3%p1;;g3`miG^'0�|6N=;^i}a/p HN-*5*(#axyҡqvαho, � $ket|O,=99>}t䉾q �5ZF ]C6CMM?)<7K'NԂ6LBXA| h U :m&_SOh`JBl{zx�u�sSnu $^Z B84-9%Vo"Dp`w#HH]Hx`PV $J -IBFǭhvy.O3.ہ0&?-m:=DL l;uج"QE oreKWQ ɡ`pbםw4'ە=U�@yy?_pNOZ ;Um I �P`�{ҕ҂;V|!@{$w0*Ip%�ANg  |={YjHį{U��a7t)t8&\EORr =ͭkF+3$ܞwYHdƅCdcXHv7KfBkd)^dm`{2yk=8z#t0{ސ pdYr$Mik '(O#� iu����IENDB`�������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/static/icon-todo.png�������������0000644�0001750�0001750�00000002454�12214647250�031164� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;���bKGD������ pHYs�� �� B(x���tIME ';T��IDAT8˕[k߹͙3dM4D[bAEO"^|S>"J }h"h"e$K4^&ɜ39e0!̃ lf-g~vK"LTJ4t^y}6_=o7W>ҴlI\./0?g=D!Ľ_G}d}$2u/7XQ=|q\9Zpv`lzBr�AT-z4< 7aޝw8 &?_T/H ȡbC"r[ޥ2uíOG?;#_ժr[@;Sk `EC.Q.bŘ96QoQ]ePu|F)'x' >Ad=HylgķkOflfwudr+{xe_l:.6k+ I 0i+n͏>q6Qް-gxUmm~wM]ۓ&.Ibӯp D:M8A?j"bNO1E :TSQM w23ی{YN&]!"8k(zPsM4UOˌ�m�qm!!A n%0>s>} u-?mKY^nq2w XSt+q|/s!OEI"!b)dYA5Аs!^6%7U5pӲ4I/0 U~H34[ `$_QOZ g݅ړ޺MJn0f Xb :/TەZ' F'w+☘E^H-^M/]qh忖S1Eת),h W UhC/n?^Uor$:@+^=}[5·MO"<"5} ٸ(wb?&] Lܾ nزyCȐ! JQ,_DtW>?r䣗nO�@"!`ۙj~9>RlyDq �RN.A_Wy^Z@ N .P2|SݾJo=d9$�vί98P< �8̇SCmץ����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/static/icon-warning.png����������0000644�0001750�0001750�00000001567�12214647250�031670� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������Ĵl;���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<��IDAT8OSYn>@^i*G;#]vAqa&tXs?qal\b2Y`L1a@tM ddD+Ѐ;B#HK➜so5Cwf=EEC4/Z_O]+{ٳ YOϾIf? &E <%0Lɰ4=4^&aDᒓNm~ͻϫQ(}et ȡe]?NCRCqxiu}JWUwh-bJ<aJggqp"ݍmm"Vr9NF'OP<'QVr9".Ot 638\f tzN#  YH:v<Z>?OJ�Z)~f}a&'"!J8r6v\E+UsR.GYf ?(u'؇/ZYZ)##GFjTU--a'> ebyzh(0>N`|vnmz|ӧb1eݘ?JK2yd}~$lw0Q.J잞#A5wDg.PxSǷ+dK=cff3g(mVWU܁Ѕ"}J(U."l ll`'؉ħmvPym @ ]#M?~ۿaA)Zխ` ` x#Zk �`U|�1oz����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/static/jquery.cookie.js����������0000644�0001750�0001750�00000006061�12444623630�031707� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/*! * jQuery Cookie Plugin v1.4.1 * https://github.com/carhartl/jquery-cookie * * Copyright 2013 Klaus Hartl * Released under the MIT license */ (function (factory) { if (typeof define === 'function' && define.amd) { // AMD define(['jquery'], factory); } else if (typeof exports === 'object') { // CommonJS factory(require('jquery')); } else { // Browser globals factory(jQuery); } }(function ($) { var pluses = /\+/g; function encode(s) { return config.raw ? s : encodeURIComponent(s); } function decode(s) { return config.raw ? s : decodeURIComponent(s); } function stringifyCookieValue(value) { return encode(config.json ? JSON.stringify(value) : String(value)); } function parseCookieValue(s) { if (s.indexOf('"') === 0) { // This is a quoted cookie as according to RFC2068, unescape... s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); } try { // Replace server-side written pluses with spaces. // If we can't decode the cookie, ignore it, it's unusable. // If we can't parse the cookie, ignore it, it's unusable. s = decodeURIComponent(s.replace(pluses, ' ')); return config.json ? JSON.parse(s) : s; } catch(e) {} } function read(s, converter) { var value = config.raw ? s : parseCookieValue(s); return $.isFunction(converter) ? converter(value) : value; } var config = $.cookie = function (key, value, options) { // Write if (value !== undefined && !$.isFunction(value)) { options = $.extend({}, config.defaults, options); if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setTime(+t + days * 864e+5); } return (document.cookie = [ encode(key), '=', stringifyCookieValue(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : '' ].join('')); } // Read var result = key ? undefined : {}; // To prevent the for loop in the first place assign an empty array // in case there are no cookies at all. Also prevents odd result when // calling $.cookie(). var cookies = document.cookie ? document.cookie.split('; ') : []; for (var i = 0, l = cookies.length; i < l; i++) { var parts = cookies[i].split('='); var name = decode(parts.shift()); var cookie = parts.join('='); if (key && key === name) { // If second argument (value) is a function it's a converter... result = read(cookie, value); break; } // Prevent storing a cookie that we couldn't decode. if (!key && (cookie = read(cookie)) !== undefined) { result[name] = cookie; } } return result; }; config.defaults = {}; $.removeCookie = function (key, options) { if ($.cookie(key) === undefined) { return false; } // Must not alter options, thus extending a fresh object... $.cookie(key, '', $.extend({}, options, { expires: -1 })); return !$.cookie(key); }; })); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/cloud/theme.conf�����������������������0000664�0001750�0001750�00000013360�13634450764�027256� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[theme] inherit = basic stylesheet = cloud.css pygments_style = sphinx [options] # TODO: would like to rename all options to use underscores instead of running together. # inherited these names from 'default' theme. # TODO: would like to normalize color names to format '<obj>[_<state>]_<attr>_color', # e.g. 'link_text_color' / 'link_hover_text_color' # configuration options ; restyles theme so page background is same as document borderless_decor = false ; adds some slight gradients to headers & menu bars shaded_decor = false ; uses lighter header & section styling lighter_header_decor = false rightsidebar = false ; NOTE: this option is ignored, will remove in 1.9 release collapsiblesidebar = IGNORED defaultcollapsed = false stickysidebar = true highlighttoc = true cleanup_toc = false ; ms to spend scrolling when link to section on current page is clicked. ; 0 to disable. smooth_scroll_links = 500 externalrefs = true externalicon = "\21D7" issueicon = #issueicon = "\2727" # NOTE: would like to use sphinx's language setting, # but doesn't seem to be available in templates. hyphenation_language = # link targets # NOTE: roottarget can be name of document (eg: 'index', or "<toc>") # logotarget is same, or can be "<root>" to reflect root value roottarget = <toc> logotarget = <root> # document dimensions ; max width document will expand to. max_width = 11.5in ; max width of "minimal" mode (hides sidebar and other extras). minimal_width = 700px ; minimum size for large_screen_text_size to be used large_width = 16in ; min height of document min_height = 6in # font sizes ; base font size (% relative to browser default) default_layout_text_size = 100% ; optional base font size for screens larger than <minimal_width> minimal_layout_text_size = 75% ; optional base font size for screens bigger than <large_width> large_layout_text_size = # styling for document body bodyfont = "Open Sans", sans-serif bodytrimcolor = rgba(0,0,0,.05) bgcolor = #ffffff textcolor = #000000 linkcolor = #003469 link_hover_text_color = #d39110 link_hover_bg_color = #fff9e4 link_hover_trim_color = #F8D186 highlightcolor = #fbe54e quotebgcolor = rgba(0,0,0,.075) quotetrimcolor = rgba(0,0,0,.05) codebgcolor = #eeffcc codetextcolor = #111111 codetrimcolor = #AACC99 codeblockfont = "Roboto Mono", monospace ; defaults to codeblockfont -- codevarfont = bodylineheight = 1.5em # styling for document headers headfont = "Noticia Text", serif headtextcolor = #333 headtrimcolor = #d0d0d0 headlinkcolor = header_icon = # styling for section headers sectionbgcolor = #84A6C7 sectiontrimcolor = rgba(0,0,0,.125) sectiontextcolor = #ffffff # TODO: rename this to childsectionbgcolor rubricbgcolor = #92BCDE section_radius = 5px # admonitions inline_admonitions = auto admonition_note_color = #E7F0FE admonition_warning_color = #ffe4e4 admonition_seealso_color = #FFF7E0 admonition_deprecated_color = #fbece0 admonition_todo_color = #FFF7E0 admonition_trim_color = rgba(0,0,0,.05) admonition_trim_width = 1px 0 admonition_title_color = rgba(0,0,0,.05) admonition_size = 88% admonition_radius = 5px # objects ; whether domain objects should get colored header colored_objects = true colored_object_prefixes = nested object_default_color = #deebf5 object_class_color = #eee3ce object_exception_color = object_function_color = object_attribute_color = #e6e6e6 object_trim_color = rgba(0,0,0,0.1) object_type_color = rgba(0,0,0,0.3) object_radius = 3px object_header_prefix = '<%- name %> \\2014\\0020' # tables table_header_color = rgba(0,0,0,.15) table_shade_color = rgba(0,0,0,.06) table_trim_color = rgba(0,0,0,.15) # styling for footer / html background footerbgcolor = #1A4162 footertextcolor = #B0B0B0 # styling for sidebar sidebarwidth = 2.5in ; sidebar width used when document is greater than max width large_sidebar_width = 3in sidebarbgcolor = #F2F2F2 small_sidebar_bg_color = sidebartextcolor= #777777 sidebarlinkcolor= #003469 sidebartrimcolor= rgba(0,0,0,.15) sidebardetailcolor = #999999 sidebarhighcolor= #FFF8E4 sidebar_button_bg = #F2F2F2 sidebar_link_hover_text_color = sidebar_link_hover_bg_color = sidebar_link_hover_trim_color = ; globaltoc: bg color for current page's LI ; can also be set to special "section" value toc_local_bg_color = default ; globaltoc: text color for current page's LI toc_local_text_color = default ; globaltoc: trim color around current page's LI (defaults to toc_hover_trim_color) toc_local_trim_color = default ; color for current section's TOC link (defaults to toc_hover_text_color) toc_current_text_color = default # override names used within sidebars sidebar_master_title = sidebar_root_title = sidebar_quicklinks_title = Quick links sidebar_localtoc_title = Page contents sidebar_prev_title = Previous page sidebar_next_title = Next page # styling for top & bottom relbars relbarbgcolor = #5682AD relbartextcolor = #ffffff relbarlinkcolor = #ffffff relbar_link_bg_color = rgba(0,0,0,.1) # index page index_category_color = #84ADBE # font css url - for loading in fonts (eg google font dir) # should include source for all fonts referenced by "headfont", "bodyfont", and "codeblockfont" fontcssurl = https://fonts.googleapis.com/css?family=Noticia+Text:400,i,b,bi|Open+Sans:400,i,b,bi|Roboto+Mono:400,i,b,bi&display=swap # set google analytics tracker googleanalytics_id = googleanalytics_path = / # legacy aliases, will be removed in 2.0 # legacy alias for lighter_header_decor lighter_decor = # legacy alias for shaded_decor beveled_decor = # legacy alias for sidebar_link_hover_bg_color sidebar_button_bg_hover = # legacy alias for relbar_link_bg_color relbar_link_bg = # legacy option relbar_link_bg_hover = # legacy option (noop) compact_width = # legacy option (noop) popuptoc = ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/greencloud/����������������������������0000775�0001750�0001750�00000000000�13654052716�026320� 5����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/greencloud/theme.conf������������������0000644�0001750�0001750�00000001754�12701741301�030261� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[theme] inherit = cloud stylesheet = cloud.css [options] #styling for document body bgcolor = #f8f8f8 linkcolor = #006906 #styling for document headers headlinkcolor = #327438 #styling for section headers sectiontextcolor = inherit sectionbgcolor = #75c47c sectiontrimcolor = rgba(0,0,0,.1) rubricbgcolor = #d2e7d0 rubric_trim_color = rgba(0,0,0,0.05) #styling for footer / html background footerbgcolor = #565B57 #styling for sidebar sidebarbgcolor = #ededed sidebarlinkcolor= #006906 sidebarhighcolor= #FFF5DD bodytrimcolor = rgba(0,0,0,.15) #styling for top & bottom relbars relbarbgcolor = #57A75E # code blocks codebgcolor = #d6d6d6 codetrimcolor = rgba(0,0,0,.15) # admonitions admonition_note_color = #D9E4F1 admonition_warning_color = #EBC5A7 admonition_seealso_color = #eeeeee admonition_deprecated_color = #ffebab admonition_todo_color = #eeeeee # inline literals quotebgcolor = rgba(0,0,0,.06) quotetrimcolor = transparent # index page index_category_color = #999999 ��������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/redcloud/������������������������������0000775�0001750�0001750�00000000000�13654052716�025772� 5����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/themes/redcloud/theme.conf��������������������0000600�0001750�0001750�00000001706�12454774131�027734� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[theme] inherit = cloud stylesheet = cloud.css [options] #styling for document body linkcolor = #690A00 #codebgcolor = #FFEFCF codebgcolor = #E7F3FF codetrimcolor = rgba(0,0,0,.05) link_hover_text_color = #EB5703 link_hover_trim_color = #EDB08D link_hover_bg_color = #FFF1E4 #styling for document headers headtrimcolor = #DCC4B7 sectionbgcolor = #A96C49 rubricbgcolor = #C1957C #styling for footer / html background footerbgcolor = #41190A footertextcolor = #AD6755 #styling for sidebar sidebarbgcolor = #FFFBF2 sidebarlinkcolor= #690A00 sidebarhighcolor= #FFF5DE bodytrimcolor = #EDDEDA #styling for top & bottom relbars relbarbgcolor = #AD6755 # objects object_default_color = #EEE6D8 object_class_color = # index page index_category_color = #999999 # font configuration #bodyfont = "Noticia Text", serif #headfont = "Noticia Text", serif #fontcssurl = //fonts.googleapis.com/css?family=Noticia+Text|Droid+Sans+Mono ����������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme/utils.py��������������������������������������0000664�0001750�0001750�00000011213�13562544741�024416� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������""" cloud_sptheme.utils -- internal helper utilities """ #============================================================================= # imports #============================================================================= # core from functools import update_wrapper import logging; log = logging.getLogger(__name__) import os import sys # site import sphinx from sphinx.util.fileutil import copyfile # pkg # local __all__ = [ # py2/3 compat 'PY2', 'PY3', 'u', 'ru', 'unicode', 'unicode_or_str', # monkeypatch helpers "patchapplier", "monkeypatch", ] #============================================================================= # internal py2/3 compat helpers #============================================================================= PY2 = sys.version_info < (3,0) PY3 = not PY2 # FIXME: these aren't very rigorous / correct, but they work for current purposes. if PY2: def u(s): return s.decode("unicode_escape") def ru(s): return s.decode("ascii") unicode = unicode unicode_or_str = (unicode, str) else: def u(s): return s ru = u unicode = str unicode_or_str = (str,) #============================================================================= # monkeypatch helpers #============================================================================= def patchapplier(func): """ function decorator to help functions that apply a monkeypatch. makes them only run once. """ def wrapper(): if wrapper.patched: return False func() wrapper.patched = True logging.getLogger(func.__module__).debug("%s: patch applied", func.__name__) return True wrapper.patched = False update_wrapper(wrapper, func) return wrapper def monkeypatch(target, name=None): """ helper to monkeypatch another object. the decorated function is wrapped around the existing function in :samp:`target.{name}`, and used to replace it. **name** defaults to the name of the function being decorated. the original value is passed in as the first positional argument to the function. """ def builder(func): attr = name or func.__name__ wrapped = getattr(target, attr) def wrapper(*args, **kwds): return func(wrapped, *args, **kwds) update_wrapper(wrapper, wrapped) wrapper.__wrapped__ = wrapped # not set by older update_wrapper() versions setattr(target, attr, wrapper) return func # return orig func so we can use it again return builder #============================================================================= # sphinx helpers #============================================================================= def _patch_html_extra_static(builder): """ monkeypatch hook for add_static_file() to use """ config = builder.config if hasattr(config, "html_extra_static"): return @monkeypatch(builder) def copy_static_files(wrapped): wrapped() # NOTE: code modeled after copy_static_files()... ctx = builder.globalcontext.copy() for source, target in config.html_extra_static: # 'source' existence should already be checked by add_static_file(), # 'target' should already be abspath w/in outdir copyfile(source, target) config.html_extra_static = [] def add_static_file(builder, source, name=None, stylesheet=False, javascript=False): """ monkeypatch sphinx's html builder to include specified static file. will copy file to :samp:`{outdir}/_static/{name}`. :param builder: ref to HTMLBuilder :param source: path to source file :param name: name for target file; defaults to base name of source file. :param stylesheet: register file as additional stylesheet """ app = builder.app _patch_html_extra_static(builder) if not os.path.exists(source): builder.warn('static asset %r does not exist' % source) return if not name: name = os.path.basename(source) target = os.path.join(builder.outdir, "_static", name) if stylesheet: if sphinx.version_info < (1, 8): app.add_stylesheet(name) else: app.add_css_file(name) if javascript: if sphinx.version_info < (1, 8): app.add_javascript(name) else: app.add_js_file(name) builder.config.html_extra_static.append((source, target)) #============================================================================= # eof #============================================================================= �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme.egg-info/�������������������������������������0000775�0001750�0001750�00000000000�13654052715�024375� 5����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme.egg-info/PKG-INFO�����������������������������0000644�0001750�0001750�00000002714�13654052715�025474� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Metadata-Version: 1.1 Name: cloud-sptheme Version: 1.10.1.post20200504175005 Summary: a nice sphinx theme named 'Cloud', and some related extensions Home-page: https://cloud-sptheme.readthedocs.io Author: Eli Collins Author-email: elic@assurancetechnologies.com License: BSD Download-URL: https://pypi.python.org/pypi/cloud_sptheme Description: This is a small package containing a Sphinx theme named "Cloud", along with some related Sphinx extensions. To see an example of the theme in action, check out it's documentation at `<https://cloud-sptheme.readthedocs.io>`_. Keywords: sphinx extension theme Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Framework :: Sphinx :: Extension Classifier: Framework :: Sphinx :: Theme Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: BSD License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Topic :: Documentation Classifier: Topic :: Software Development :: Documentation ����������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme.egg-info/SOURCES.txt��������������������������0000644�0001750�0001750�00000014405�13654052715�026263� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������CHANGES LICENSE MANIFEST.in README setup.cfg setup.py cloud_sptheme/__init__.py cloud_sptheme/make_helper.py cloud_sptheme/utils.py cloud_sptheme.egg-info/PKG-INFO cloud_sptheme.egg-info/SOURCES.txt cloud_sptheme.egg-info/dependency_links.txt cloud_sptheme.egg-info/entry_points.txt cloud_sptheme.egg-info/not-zip-safe cloud_sptheme.egg-info/requires.txt cloud_sptheme.egg-info/top_level.txt cloud_sptheme/ext/__init__.py cloud_sptheme/ext/__init__.pyc cloud_sptheme/ext/allow_unreferenced_footnotes.py cloud_sptheme/ext/auto_redirect.py cloud_sptheme/ext/autoattribute_search_bases.py cloud_sptheme/ext/autoattribute_search_bases.pyc cloud_sptheme/ext/autodoc_sections.py cloud_sptheme/ext/autodoc_sections.pyc cloud_sptheme/ext/docfield_markup.py cloud_sptheme/ext/docfield_markup.pyc cloud_sptheme/ext/escaped_samp_literals.py cloud_sptheme/ext/escaped_samp_literals.pyc cloud_sptheme/ext/index_styling.py cloud_sptheme/ext/index_styling.pyc cloud_sptheme/ext/issue_tracker.py cloud_sptheme/ext/issue_tracker.pyc cloud_sptheme/ext/page_only.py cloud_sptheme/ext/page_only.pyc cloud_sptheme/ext/perpage.py cloud_sptheme/ext/relbar_links.py cloud_sptheme/ext/relbar_links.pyc cloud_sptheme/ext/relbar_toc.py cloud_sptheme/ext/relbar_toc.pyc cloud_sptheme/ext/role_index.py cloud_sptheme/ext/role_index.pyc cloud_sptheme/ext/table_styling.py cloud_sptheme/ext/table_styling.pyc cloud_sptheme/ext/__pycache__/__init__.cpython-34.pyc cloud_sptheme/ext/__pycache__/__init__.cpython-35.pyc cloud_sptheme/ext/__pycache__/__init__.cpython-36.pyc cloud_sptheme/ext/__pycache__/__init__.cpython-37.pyc cloud_sptheme/ext/__pycache__/__init__.cpython-38.pyc cloud_sptheme/ext/__pycache__/allow_unreferenced_footnotes.cpython-37.pyc cloud_sptheme/ext/__pycache__/allow_unreferenced_footnotes.cpython-38.pyc cloud_sptheme/ext/__pycache__/auto_redirect.cpython-35.pyc cloud_sptheme/ext/__pycache__/auto_redirect.cpython-37.pyc cloud_sptheme/ext/__pycache__/autoattribute_search_bases.cpython-35.pyc cloud_sptheme/ext/__pycache__/autoattribute_search_bases.cpython-37.pyc cloud_sptheme/ext/__pycache__/autoattribute_search_bases.cpython-38.pyc cloud_sptheme/ext/__pycache__/autodoc_sections.cpython-34.pyc cloud_sptheme/ext/__pycache__/autodoc_sections.cpython-35.pyc cloud_sptheme/ext/__pycache__/autodoc_sections.cpython-36.pyc cloud_sptheme/ext/__pycache__/autodoc_sections.cpython-37.pyc cloud_sptheme/ext/__pycache__/autodoc_sections.cpython-38.pyc cloud_sptheme/ext/__pycache__/docfield_markup.cpython-35.pyc cloud_sptheme/ext/__pycache__/docfield_markup.cpython-37.pyc cloud_sptheme/ext/__pycache__/docfield_markup.cpython-38.pyc cloud_sptheme/ext/__pycache__/escaped_samp_literals.cpython-34.pyc cloud_sptheme/ext/__pycache__/escaped_samp_literals.cpython-35.pyc cloud_sptheme/ext/__pycache__/escaped_samp_literals.cpython-37.pyc cloud_sptheme/ext/__pycache__/escaped_samp_literals.cpython-38.pyc cloud_sptheme/ext/__pycache__/index_styling.cpython-34.pyc cloud_sptheme/ext/__pycache__/index_styling.cpython-35.pyc cloud_sptheme/ext/__pycache__/index_styling.cpython-36.pyc cloud_sptheme/ext/__pycache__/index_styling.cpython-37.pyc cloud_sptheme/ext/__pycache__/index_styling.cpython-38.pyc cloud_sptheme/ext/__pycache__/issue_tracker.cpython-35.pyc cloud_sptheme/ext/__pycache__/issue_tracker.cpython-37.pyc cloud_sptheme/ext/__pycache__/issue_tracker.cpython-38.pyc cloud_sptheme/ext/__pycache__/page_only.cpython-34.pyc cloud_sptheme/ext/__pycache__/page_only.cpython-35.pyc cloud_sptheme/ext/__pycache__/page_only.cpython-37.pyc cloud_sptheme/ext/__pycache__/relbar_links.cpython-34.pyc cloud_sptheme/ext/__pycache__/relbar_links.cpython-35.pyc cloud_sptheme/ext/__pycache__/relbar_links.cpython-36.pyc cloud_sptheme/ext/__pycache__/relbar_links.cpython-37.pyc cloud_sptheme/ext/__pycache__/relbar_links.cpython-38.pyc cloud_sptheme/ext/__pycache__/relbar_toc.cpython-34.pyc cloud_sptheme/ext/__pycache__/relbar_toc.cpython-35.pyc cloud_sptheme/ext/__pycache__/relbar_toc.cpython-37.pyc cloud_sptheme/ext/__pycache__/role_index.cpython-34.pyc cloud_sptheme/ext/__pycache__/role_index.cpython-35.pyc cloud_sptheme/ext/__pycache__/role_index.cpython-37.pyc cloud_sptheme/ext/__pycache__/table_styling.cpython-34.pyc cloud_sptheme/ext/__pycache__/table_styling.cpython-35.pyc cloud_sptheme/ext/__pycache__/table_styling.cpython-37.pyc cloud_sptheme/ext/__pycache__/table_styling.cpython-38.pyc cloud_sptheme/ext/static/auto_redirect.css cloud_sptheme/ext/static/auto_redirect.html_t cloud_sptheme/ext/static/table_styling.css cloud_sptheme/tests/__init__.py cloud_sptheme/tests/test_ext_relbar_toc.py cloud_sptheme/tests/utils.py cloud_sptheme/themes/cloud/globaltoc.html cloud_sptheme/themes/cloud/layout.html cloud_sptheme/themes/cloud/localtoc.html cloud_sptheme/themes/cloud/quicklinks.html cloud_sptheme/themes/cloud/relations.html cloud_sptheme/themes/cloud/theme.conf cloud_sptheme/themes/cloud/static/cloud.base.js cloud_sptheme/themes/cloud/static/cloud.css_t cloud_sptheme/themes/cloud/static/cloud.js_t cloud_sptheme/themes/cloud/static/icon-caution.png cloud_sptheme/themes/cloud/static/icon-danger.png cloud_sptheme/themes/cloud/static/icon-deprecated.png cloud_sptheme/themes/cloud/static/icon-note.png cloud_sptheme/themes/cloud/static/icon-seealso.png cloud_sptheme/themes/cloud/static/icon-todo.png cloud_sptheme/themes/cloud/static/icon-warning.png cloud_sptheme/themes/cloud/static/jquery.cookie.js cloud_sptheme/themes/greencloud/theme.conf cloud_sptheme/themes/redcloud/theme.conf docs/cloud_theme.rst docs/cloud_theme_test.rst docs/conf.py docs/contents.rst docs/copyright.rst docs/history.rst docs/index.rst docs/install.rst docs/requirements.txt docs/_static/logo.svg docs/_static/longline.txt docs/_static/masthead.png docs/_static/masthead.svg docs/lib/cloud_sptheme.ext.auto_redirect.rst docs/lib/cloud_sptheme.ext.autoattribute_search_bases.rst docs/lib/cloud_sptheme.ext.autodoc_sections.rst docs/lib/cloud_sptheme.ext.docfield_markup.rst docs/lib/cloud_sptheme.ext.escaped_samp_literals.rst docs/lib/cloud_sptheme.ext.index_styling.rst docs/lib/cloud_sptheme.ext.issue_tracker.rst docs/lib/cloud_sptheme.ext.page_only.rst docs/lib/cloud_sptheme.ext.relbar_links.rst docs/lib/cloud_sptheme.ext.relbar_toc.rst docs/lib/cloud_sptheme.ext.role_index.rst docs/lib/cloud_sptheme.ext.table_styling.rst docs/lib/cloud_sptheme.make_helper.rst docs/lib/cloud_sptheme.rst docs/lib/index.rst�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme.egg-info/dependency_links.txt�����������������0000644�0001750�0001750�00000000001�13654052715�030441� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme.egg-info/entry_points.txt���������������������0000644�0001750�0001750�00000000140�13654052715�027664� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[sphinx.html_themes] cloud = cloud_sptheme greencloud = cloud_sptheme redcloud = cloud_sptheme ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme.egg-info/not-zip-safe�������������������������0000644�0001750�0001750�00000000001�12444576751�026630� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme.egg-info/requires.txt�������������������������0000644�0001750�0001750�00000000014�13654052715�026766� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������sphinx>=1.6 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/cloud_sptheme.egg-info/top_level.txt������������������������0000644�0001750�0001750�00000000016�13654052715�027122� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/�������������������������������������������������������0000775�0001750�0001750�00000000000�13654052716�021001� 5����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/_static/�����������������������������������������������0000775�0001750�0001750�00000000000�13654052716�022427� 5����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/_static/logo.svg���������������������������������������0000644�0001750�0001750�00000026330�12214647251�024105� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" inkscape:export-ydpi="180" inkscape:export-xdpi="180" inkscape:export-filename="/home/biscuit/dev/libs/cloud/trunk/docs/_static/masthead.png" sodipodi:docname="logo.svg" inkscape:version="0.48.2 r9819" version="1.1" id="svg2" height="48" width="48"> <defs id="defs4"> <linearGradient id="linearGradient12555"> <stop style="stop-color:#000000;stop-opacity:1;" offset="0" id="stop12557" /> <stop style="stop-color:#000000;stop-opacity:0;" offset="1" id="stop12559" /> </linearGradient> <linearGradient id="linearGradient4072"> <stop style="stop-color:#f9fbfc;stop-opacity:1;" offset="0" id="stop4074" /> <stop style="stop-color:#f9fbfc;stop-opacity:0;" offset="1" id="stop4076" /> </linearGradient> <linearGradient id="linearGradient3878"> <stop style="stop-color:#7ca1c4;stop-opacity:1;" offset="0" id="stop3880" /> <stop style="stop-color:#a4d2fe;stop-opacity:1;" offset="1" id="stop3882" /> </linearGradient> <linearGradient id="linearGradient3862"> <stop style="stop-color:#f9fbfc;stop-opacity:0;" offset="0" id="stop3864" /> <stop id="stop3888" offset="0.50674295" style="stop-color:#f9fbfc;stop-opacity:0.36090225;" /> <stop style="stop-color:#fcfdfd;stop-opacity:0;" offset="0.56762487" id="stop3928" /> <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop3866" /> </linearGradient> <linearGradient id="linearGradient3821"> <stop style="stop-color:#d8d3b3;stop-opacity:1;" offset="0" id="stop3823" /> <stop style="stop-color:#d8c41d;stop-opacity:1;" offset="1" id="stop3825" /> </linearGradient> <linearGradient inkscape:collect="always" xlink:href="#linearGradient3821" id="linearGradient3827" x1="-2.5985999" y1="1039.1986" x2="1.1737994" y2="1038.441" gradientUnits="userSpaceOnUse" spreadMethod="reflect" gradientTransform="translate(20,-1004.3622)" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient3878" id="linearGradient3884" x1="-16.296026" y1="26.836283" x2="-19.023472" y2="13.451762" gradientUnits="userSpaceOnUse" gradientTransform="translate(40,0)" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient3878-5" id="linearGradient3884-7" x1="-16.296026" y1="26.836283" x2="-19.023472" y2="13.451762" gradientUnits="userSpaceOnUse" /> <linearGradient id="linearGradient3878-5"> <stop style="stop-color:#83c2fd;stop-opacity:1;" offset="0" id="stop3880-7" /> <stop style="stop-color:#b8dcfe;stop-opacity:1;" offset="1" id="stop3882-7" /> </linearGradient> <radialGradient inkscape:collect="always" xlink:href="#linearGradient3862" id="radialGradient3974" cx="15.982144" cy="5.1168251" fx="15.982144" fy="5.1168251" r="21.578524" gradientTransform="matrix(0.35372619,0.97556899,-1.8083668,0.65568574,19.581938,-9.0717138)" gradientUnits="userSpaceOnUse" /> <filter inkscape:collect="always" id="filter3980"> <feGaussianBlur inkscape:collect="always" stdDeviation="0.82956855" id="feGaussianBlur3982" /> </filter> <linearGradient inkscape:collect="always" xlink:href="#linearGradient3821-0" id="linearGradient3827-8" x1="-2.5985999" y1="1039.1986" x2="1.1737994" y2="1038.441" gradientUnits="userSpaceOnUse" spreadMethod="reflect" gradientTransform="translate(20,-1004.3622)" /> <linearGradient id="linearGradient3821-0"> <stop style="stop-color:#fef5b0;stop-opacity:1;" offset="0" id="stop3823-6" /> <stop style="stop-color:#f1d704;stop-opacity:1;" offset="1" id="stop3825-4" /> </linearGradient> <filter inkscape:collect="always" id="filter4020" x="-0.16069304" width="1.3213861" y="-0.095752224" height="1.1915044"> <feGaussianBlur inkscape:collect="always" stdDeviation="0.8538944" id="feGaussianBlur4022" /> </filter> <linearGradient inkscape:collect="always" xlink:href="#linearGradient3878-1" id="linearGradient3884-9" x1="-16.296026" y1="26.836283" x2="-19.023472" y2="13.451762" gradientUnits="userSpaceOnUse" gradientTransform="translate(40,0)" /> <linearGradient id="linearGradient3878-1"> <stop style="stop-color:#4ea8fc;stop-opacity:1;" offset="0" id="stop3880-79" /> <stop style="stop-color:#a4d2fe;stop-opacity:1;" offset="1" id="stop3882-9" /> </linearGradient> <filter inkscape:collect="always" id="filter4066"> <feGaussianBlur inkscape:collect="always" stdDeviation="0.87460686" id="feGaussianBlur4068" /> </filter> <radialGradient inkscape:collect="always" xlink:href="#linearGradient4072" id="radialGradient4080" cx="16.646008" cy="5.3008194" fx="16.646008" fy="5.3008194" r="23.569487" gradientTransform="matrix(0.33122359,1.0135416,-1.2137748,0.39665938,18.616969,-9.5142997)" gradientUnits="userSpaceOnUse" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient3878-2" id="linearGradient3884-3" x1="-16.296026" y1="26.836283" x2="-19.023472" y2="13.451762" gradientUnits="userSpaceOnUse" gradientTransform="translate(40,0)" /> <linearGradient id="linearGradient3878-2"> <stop style="stop-color:#7ca1c4;stop-opacity:1;" offset="0" id="stop3880-3" /> <stop style="stop-color:#a4d2fe;stop-opacity:1;" offset="1" id="stop3882-4" /> </linearGradient> <radialGradient inkscape:collect="always" xlink:href="#linearGradient12555" id="radialGradient12561" cx="25.262745" cy="17.652683" fx="25.262745" fy="17.652683" r="24.901196" gradientTransform="matrix(0.76664585,-0.03855349,0.01940308,0.38583487,5.55265,9.5312055)" gradientUnits="userSpaceOnUse" /> </defs> <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="7.919596" inkscape:cx="24.144712" inkscape:cy="25.4951" inkscape:document-units="px" inkscape:current-layer="layer5" showgrid="false" borderlayer="true" inkscape:window-width="1920" inkscape:window-height="1032" inkscape:window-x="0" inkscape:window-y="25" inkscape:window-maximized="1" /> <metadata id="metadata7"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> <dc:title></dc:title> </cc:Work> </rdf:RDF> </metadata> <g inkscape:groupmode="layer" id="layer7" inkscape:label="shadow" sodipodi:insensitive="true"> <path style="opacity:0.5;fill:#2e3436;fill-opacity:1;stroke:none;display:inline;filter:url(#filter4020)" d="m 16.754758,47.362014 6.944799,-10.1015 -7.576145,-2.841 5.682108,-8.4601 4.735091,1.7047 -5.366436,5.1139 7.702413,3.4724 z" id="path3051-0" inkscape:connector-curvature="0" /> <path style="opacity:0.5;fill:#2e3436;fill-opacity:1;stroke:none;display:inline;filter:url(#filter4066)" d="m 16.017547,9.9413011 c 1.805756,-7.5965921 13.627461,-10.18638017 17.930208,-0.441942 5.102943,-0.561713 7.065446,1.9637839 8.333758,5.2401669 7.557963,0.805575 7.55172,15.013537 -3.598669,11.111678 -2.399919,2.287883 -5.200074,3.089175 -8.775699,1.010152 -3.07234,2.516571 -6.357854,3.274452 -10.101526,0.252538 C -0.77604848,35.641342 -1.6669795,6.508867 16.017547,9.9413011 z" id="path3832-6-6" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc" /> </g> <g inkscape:groupmode="layer" id="layer3" inkscape:label="thunder" style="display:inline" sodipodi:insensitive="true"> <path style="fill:url(#linearGradient3827);fill-opacity:1;stroke:#a98a00;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" d="m 16.162441,46.4216 6.944799,-10.1015 -7.576145,-2.841 5.682108,-8.4601 4.735091,1.7047 -5.366436,5.1139 7.702413,3.4724 z" id="path3051" inkscape:connector-curvature="0" /> </g> <g inkscape:groupmode="layer" id="layer4" inkscape:label="cloud base" style="display:inline" sodipodi:insensitive="true"> <path style="fill:url(#linearGradient3884);fill-opacity:1;stroke:#204a87;stroke-width:0.30000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" d="m 14.747685,9.2252339 c 1.805756,-7.596592 13.627461,-10.18638002 17.930208,-0.441942 5.102943,-0.561713 7.065446,1.9637841 8.333758,5.2401671 7.557963,0.805575 7.55172,15.013537 -3.598669,11.111678 -2.399919,2.287883 -5.200074,3.089175 -8.775699,1.010152 -3.07234,2.516571 -6.357854,3.274452 -10.101526,0.252538 C -2.04591,34.925275 -2.936841,5.7927999 14.747685,9.2252339 z" id="path3832-6" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc" /> </g> <g inkscape:groupmode="layer" id="layer5" inkscape:label="cloud inner" style="display:inline" sodipodi:insensitive="true"> <path style="fill:url(#radialGradient4080);fill-opacity:1;stroke:none;filter:url(#filter3980)" d="m 14.711695,9.725078 c 1.768939,-6.803649 13.349624,-9.123111 17.564646,-0.395811 4.998904,-0.503081 6.921396,1.758803 8.163849,4.693192 7.403871,0.721488 7.397756,13.446404 -3.525299,9.951826 -2.350989,2.04907 -5.094054,2.766723 -8.59678,0.904711 -3.009701,2.253888 -6.228229,2.932661 -9.895575,0.226178 C -1.739511,32.742515 -2.612278,6.650927 14.711695,9.725078 z" id="path3832-6-1" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc" /> </g> </svg> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/_static/longline.txt�����������������������������������0000644�0001750�0001750�00000001004�12656672337�025000� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/_static/masthead.png�����������������������������������0000644�0001750�0001750�00000033203�12214647251�024715� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR������`���U���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<�� �IDATxyy;a_8")ʒ82ue'I//Ky>~"ϳrD,EGrdkX6K\$( D�$b,e{t}u{  Hs}~} "5&/W\5yY}pB,]+5YCI�8t2yyy177'=kooǏSGG �p lY⡇wpk5=P.U jB ʶR5&۫Ց#GTWW7416Fqs߱! !p";dϧw(RPh۴uۦm۷tGha^kzx\eq''OTu|ga!,jjl_F_3XqÅɔOr]vǷxcEto]C��MBO܉OO3/D<ҒEQxhn-ӎVNco4N\�3 o-$i~qFgy籃 yJApJV��,@Bxz'T'~19G(*7K )îrY:tH)!{َOϾ[5k`bJ�> �;yw~;anwO<B�_К!HCiPA-@ᑇ\8zo9gz}!AX6V=xu`*Bl qO:U/P o/:@%= OK"62cЀ �B+To>A<tyRxwEWS0[]yXFp?O%zǝJ sDKP 0 S\J T"D]ۇL'47Վ`||\ע\M8XmHD �r_}H>w޹#'PCp%H I0 $bĠ"�Z�B#T){(z߮KģYj�}ߧ!X�&UW�k~b c~iW0JB`xxX>|XDS/,{Cw( V[ AdVߎ&[%7ܘ;uG+Vy9_ :Ҽ` !&Bä }`D @ J~^my5r4=-Pll!"5<<,xqȑuxx߽;t{@)gFx( 2>Hn9@.Pp OgזU}SG[[ס;(iyϪUPvTVpe .!+ZzOOi��(�`ttT>|X;wN9<x{(J ]oێ6PrW\)�AQH ٖ,(P^18I�D:/q{1_E;F~;ܾ};yT*4+�G24=_3WM^K$?QO<BALOOBa8V�l�ຮ(˥۷w}; {n[A8EM&U֦8>G %P /3sGwШУ֯_ 0jnnjy=fg[eveN(<vSmܶ0t+y΂^w0S u#ۛ_up>mSwc2'ď1\U))f<"$p;K29G:][:OG Bt}Ez]kåV W,�[XID&z7�LLLQ\-N<3 ҹqMB#]qV <o2mnny7& *Je3-ժk|<�J6V!8zs LebB0rGk[x0Ȑ~-5e)W+pMdDYʦ5vЃ>C[nu>򑏈ZV,~S"߲u ;wvwXt!{},(tr@#NEM�@*[DZ&1'MfPB S^@@ā[;u'ē(VAEťi:woX1l1D++=TY<9><<>gp7ӟ\4gώ-7\< 8R�0ޓQES̹<17Z |QB3$"`̹lp-ZNXZ\ D.Wӏ ܹ0 3g(,K|3 @3l |ck?rrf5>p;r⨻ hD�sE|9 ɴ$NVyڧNQ &.L(M)}/lt 奥QHᾇKIDTo6ihW)�ȓ'y}7:[{{뎁vsyGZĜV$+eFd bvj,G,uRN4a\@FĜ v̅kF\>]WK7gR҇�z^ٱ}wL.~]o(+TJD!hxf`D7JoTR(hmcڑD npMkW}B a$F(luFq?/:qnƧ~m,:("1J>jD=H֖<Rn"جFK~3 $A�13mC@sǶ\o۽RX�<iDVE\I,1V$-n1!;<<߿߽[r]]z`[N&1+I\"E}I9[g>18DlTi9Wr dڀH'dL)oV\&~ƭs 1r]" [J۴iTYt3�όj?B%ײCXd5#0ʑߺM$<Ip:eG6ǮB )iCFb%0B֒Ґ-S@*ns1Jn2֫}Lwm v[tbqM1YNJ ͙ +I/W١b"x=hhhH !wΫ|OC9Li&Cm`+as4AMaޤRҔKxE2OHͣ`imaid'7{ۻE],zzz򃃃 i5d4Ndd/ F%�orrߺ-[ܼCT2=C;I�fCH;81@KLf%5%'%eos+sL&DJ#cã/,/+sٟG*KZ+B6,0r&2V6|v,&WHHyMn獤6CdB1)+Ëuf15dP 10h/&sl wAƞaCC6)E}3s;{.Lo|Zmibb E<όH!#1{@&)ɒĄ]6?=7߰)/8I$wIggQ53ڃMCZFAF>WfP[܋)M7NfR|p4d B_|-ÿpׯc&)eRJ�\"<6"%Ef{ha0S3dqvs.Eo-ET;%|� )OyL:hD#cq.lP ip-CMuϑ9s0imqJ ȴ҆nwg= Wk6??ߴigzeի@*g+& :JV5ib+ɪd8^tz핳y adbn}Ѭhl$o&�4Ye dDԟj*v VL~b*5;0ׯs0۱T o ō7[摆2ƞ2g].. 0@i"IoȈJ9bOrFI9x'@&J^#Zi{M�i:MR`N�uV `bRRI})@Zcb[qFQ٩c;qοmi TY3�OwΖ\=)|:H4fRxmE6^]zSͦXhw74u�xɓأ'3t\,q 8ܑjK�<P*p &(E hC4rc('E 萒gX(;_*H� B>Jtɬ)BFXd=˗w™mtTH)6H6K>&(Ld_)4tQ\'s-b{5NC& 7<<WU9-[=ᔄ-ox'NjB'!/&VCZ< 2qjGi38J `6l*Ӻ9"1E\Nc˶a~MRCGQGG>?}Gsd|1Hrhf)hm.b",S{ (1 "lsZBu65 2IF'liÛ"=LSMD+1O0-�h6b*iDp\T|{v ^wu#eQ֭Ȓe TcaͲØl[ @i޽[b"HGpu΁$Qma ! H#~w 2TUɺITL94ؚ@ĶM5-<&q& MؤiB,ؼ-x뉐˹p;E2/*Rzhį|6laF qSp�*̶2%:xv �1{A>?XWJ+7["8Dfz4/&y/v=R x`f DɁ'?fJ)i ѩ̈́]^&J89'q6a1ҕRHh<hQ;^d`i4_lV2o8KH 4BX?7ô@>|8ڹ=^XPJDR@Xe HfoX"34XWcdZ8 B"L2^\TsYکɴ)W80LIx#uKJ!#AR jGJ92<NJ VWښi/F/ GFժTӡ�C0!cB|]@3\,g?qCS05D[i+$!MEmHlS 8>K5NIğ˧5i7 #!G$�^],ت̥h/ 06&f8; q25k:")G|7FrNg \"NT&9V(x׬_-g�?1⠚26:g XgԴ8eڑ= :m9ABґ$d؀l|.7$ =6\ML-,4=.ll� 賞-<� �9�ɓQ> wқ.>" @RL湂f`�Ddbp*,0eHV �i=J7lyj & &O#L qB3JS#a׵ Np7i;㮉y(-�Eޖ& M0g},eNᛰu �#Gb?9slw@ )BDFdMS G$ xg̍ڊ11gKsF9@blzi:}bn1|BJ%EQkaxCXqUA0=;gEDL #w6̷l|rj z{бj)B( <FTV4cKZ*+OcLT\C)Ĩؕ2e#9?{MuÊLPZqJ!R*#(H)HAȜ=$8,zzy.[.]u544 "Vov\1F[MV SEd"vo 9%<P#O?{ 7l{<G@;,!/;*x3@WJ NbF2J5O_X}Kl ;}e^V_ ~FP5R!곳e566FqZ6xZmUnEyKI#@Po>>AF!>T)Xi֖FamҔSFh4FٟAĚfuXEfk)B0J".k(G8oQſI8"1+gϞX;7p R;\ bK+#ɜ|w!9f<% snFj]X={`JQ=^[{vu\ud@¼"dYqkqL,|,$xS)"\$sIq2jz-4DAvL+kMƏ:R>u{4Pz4iw2tUQ|Vl9ZԼ_˚Hɼ/DqQv7�L�:t(?TӶէ]7וRJ@ e^9 ai`~&r+r�# VM0+$͚-%1֚�˄yl/Ԅ7l!sa@Ŷ|K`^8zvL4&^ kh6bNR6 ~EpHׄD:땣 da+LY -ư XD .v1l|<xxN[o-w_Ja֣L2]䃤!eĮM`@H<{x\HBì@ɇx!!OۉIZ j=ḆR.6 [{}7繎RzQA*O'(Ԏ##kh;'_YXXh9sƷ!P#@Y@{<')h˪D8Кm{Ps Ռdɫ+FFFB˕ž[~mmX3&HV3 6S7hx)r)fU}v^%:pG$k`h\GxJN >{lTu]=Nܧ}?xfrգ$Pap\o!Ё \儂+pIkqDZkBD5-D-rG;5/!LB-&!k:dՓZjY]@=GFFJ#J)lsKo'oq;r^ t< bS4PĔ:q|b8ؑ"ظ}oR>0 R8oYyú`C @a-bnݺ~[:s9XAӧ/4'}EDPq  "@亡#<q("WJE"A詆l\#"hƲ&%ouD!wKU*z=b_qM׭۸W:Cj(<(RT똛Y 8P+/ ' E\{_Wotۺ[ۮ`x'G}{%��IDAT" Xr]7npnG WJ zş>W=PP5ATDeU"k9K퍆 E,T(NRJ EU CEQh4=>>D:^¬xcP`' ߖIy0?S7axg"&;wl7BV+Qg@|G;9nuH~A#zگM'r9wFh땥B4Q.G;z9[k-؆ۙ7!.\.Tjc~^W(sjZE **N^>VQXp=-rR|EU-7UuUPtMM鎎:x`)"X,_ժ׹iS~}}}~ɓ" 1-yp-ſl_ pYټKZ�SGc֥xޗ7h{p`.۶"40:*zʫjmA~B.F:܂GZDt=Oj#* (R0 5t{}R)H)�<K2E ~6aA<�BQ@U?rv;D:,U\yvl.nr�ryus^;saan=\JCZZ7 N{G}Bء gASK&/<^dU8+^x||p+9ik%yD Wef04ǝ򥒒z _Z.#QAk°�\G tO-.,; D"<s؆1i;_NA};MW?͉|;r.(QQusssQ<z4_V |~hv\hӧUr/WU'N)UJ@e@j;"hC MHoL!M9;(-Ik5Pi ,9Zyjn}T^MeZ`gϞue9w BJ3B!R0T\N{^6]?uoPH@,셩`S{6D ZЄ)),KϫEeQ,--E[lQ{�8w\͛g:;;А.GD>Z=. KR"W+T"0:*FERFC6m<P(PGG@R'v?۰}G_.=`SggOsb4 œtiUj8\\1!-`,+ =X˿[)4gbQP_$u{oC7f0rɧ朳Ĭ$ BbeOW( C,k&/2{l9-]̔exfDZpn�u>s@'9@DK|/|z_>횦'KOhǶ|! QZmf(Z*޽{!zsB.4>Ӟ*b^PG:t Tnr(!6hD s7aý575i9pEY6 =I? Iy4^=0boL9?f_uo7|F "9ulG6 A/DJ?թ)[o>EDX�1PϽʂK�Ns^ 1]4}{A D \/DT$\.U] ZGXopcv+>#'9d̬x>1}įPэIGslWWfT$T ζTn_\ը^ZMwa,X��O[0`a i NGax쒿@M=Ve20] ʯȋyk<.ǣɔqw"fy:9|/߾?W.xW9LL/מt! JйsEϗL\eZ?wkWϗ[\IV}mbp- ]eԶ ާ7mw}i?MCJwl|uo~fW -Lڸbۮ>n+_~%Sr^t)`x(@zW^bװhe"O lqK=}Ο?xrvg_zswML{ݻwfF&`j~ _bVoy5.켕n ,0@$˱MgOܱޟ]y {1x�tٳgvwDwo=~ۭm0e|}_F;w8??!05̓ig1 ΍6 R9]#DN iNq.2'oYD8 E`ˤQ LDl["NYu\<&)>LeѢlUGGG@Á7˹=o1[ÿ]~֡ޞNOМpm 0~�g_=T{=_ \\nVf=j��qdq'4L&j"Mx$! `iJ% J.`@3…u't H۞"k$j#4'p]ıAS ]���P(t N:E[{˽ɷͯ۲X r` .%@ 'qS7qVՑzx!-!6 ~�c˓2B<?p/<i ̱F{ 48V�⇮{L�Ɩ5 khkWAZfl53uy* {HY9<]5-Cقu󦼸{kOW>z}QyN!uj[?0M] >וzomkw@#8ޙ5/ߍ7N/MU6ݲe}ط/Ij[ }eO[09@HDad,\K!Ǐ&+0GaϹnAE tvL[>[}BL=ũ~lYSzұcKuL+ɥz<štI��t819tuuաΩ\./|*@g'=crT%g=O1GVDpl-md0,[*yb2w"- iѕ `eEDDq"1WpD7'.bDΙip1^1oؐ[={j|,@QXm|<B}*mӨW񩳳w_ݴs2L?^|dO~%襠^GE2,NjPN>R>fWb@!玺e"ຄH󓭀Ke3d4U2f\ZT\ncOC4hw.t63hVJM8Ɠb]x L\X<bgv``�/+[wwtMe>υy|bgf~nyߝj" M@=gcv@0}j\ɪ X>Nvz(痔i0+]o{z;~r id5{ R6d3;Y%c n{]֗5/w8G=)3!g%jT{.{yav/@N3guu\xAxlSۀ̮,˒lʇ7ˬ�4.qB1<<?z3CR0'ыxѽ_<lߏHEhTUmb'P ڷo_xWhwlu)uZr?y)BMl'%D(keUeƇ^]7RGZK+GW>HZN;BNjҖ-[M\MouG4˪Ւha7x^7rLr-z]\.qs=OnP8H^9@ɡz,bO ccc9cjq>.ҭٸa8bs.:5kmjra VH@sd8 WfʴzE L-)\'4<�g``�7߆?ݶ�rgNL|LȧE8j⢚89ު_�;vNS~g#`9;5s4ѭ49ŕ҆\]ΎMBvR i$;„N51=TGhN;&ƒ9uu=+ <4!?s}}u3[<UKssšu̵uL#=1~xZ۲=FeݷSdZaFĔ'3*f,q?K}oڴ0F4YL+AV٤nDFpeyVl]wV ?\eupߋ}+7|n"xM(iojZUk"=Fcd`e~ֶaZd%LrUh#sϠ咛l}192@ 2joD !}Oo?P=9p TdՑLӁtoomaabOq }و=.*d܊iVdXJ_E(>ÍC+cw~&ِ$KszI/^zVf:du-�/BrDw >gΩ_*>O}}%,e{ͫWӒH%bUx֮Yܒg٬+N1<<\7x[o'g˹ k[ EBbAWz[5"�"͜@m*bV:IRs TGzl>ũ#ϝHJu=[?&k+*jUZ͞Ϟ=h!nnhQ٣c""ۀ"+0.h|M.Q(ɷlڗ}B;})h/D|ɝk$!s,If]ߵqc866E^c#޳Hm{ww݄Kp=EPt\U)^.B/{p0D{us )]�PBNakຂs X<bQP HBtS|y䪚r<7j8AR |Ze fVꎎiT <{C;p \/\p0)�ܔW~n�@WF~�vM^Y&fZ����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/_static/masthead.svg�����������������������������������0000644�0001750�0001750�00000037457�12214647251�024747� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="152" height="96" id="svg12569" version="1.1" inkscape:version="0.48.2 r9819" sodipodi:docname="New document 3" inkscape:export-filename="/home/biscuit/dev/libs/cloud/trunk/docs/_static/masthead.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"> <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="3.959798" inkscape:cx="85.310188" inkscape:cy="21.542942" inkscape:document-units="px" inkscape:current-layer="g12652" showgrid="false" borderlayer="true" inkscape:window-width="1920" inkscape:window-height="1032" inkscape:window-x="0" inkscape:window-y="25" inkscape:window-maximized="1" /> <defs id="defs12571"> <linearGradient id="linearGradient13314"> <stop style="stop-color:#000000;stop-opacity:1;" offset="0" id="stop13316" /> <stop id="stop13334" offset="0.5" style="stop-color:#000000;stop-opacity:0.2631579;" /> <stop style="stop-color:#000000;stop-opacity:0;" offset="1" id="stop13318" /> </linearGradient> <radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.76664585,-0.03855349,0.01940308,0.38583487,5.55265,9.5312055)" r="24.901196" fy="17.652683" fx="25.262745" cy="17.652683" cx="25.262745" id="radialGradient12561" xlink:href="#linearGradient12555" inkscape:collect="always" /> <linearGradient id="linearGradient3878-2"> <stop id="stop3880-3" offset="0" style="stop-color:#7ca1c4;stop-opacity:1;" /> <stop id="stop3882-4" offset="1" style="stop-color:#a4d2fe;stop-opacity:1;" /> </linearGradient> <linearGradient gradientTransform="translate(40,0)" gradientUnits="userSpaceOnUse" y2="13.451762" x2="-19.023472" y1="26.836283" x1="-16.296026" id="linearGradient3884-3" xlink:href="#linearGradient3878-2" inkscape:collect="always" /> <radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.33122359,1.0135416,-1.2137748,0.39665938,18.616969,-9.5142997)" r="23.569487" fy="5.3008194" fx="16.646008" cy="5.3008194" cx="16.646008" id="radialGradient4080" xlink:href="#linearGradient4072" inkscape:collect="always" /> <filter id="filter4066" inkscape:collect="always"> <feGaussianBlur id="feGaussianBlur4068" stdDeviation="0.87460686" inkscape:collect="always" /> </filter> <linearGradient id="linearGradient3878-1"> <stop id="stop3880-79" offset="0" style="stop-color:#4ea8fc;stop-opacity:1;" /> <stop id="stop3882-9" offset="1" style="stop-color:#a4d2fe;stop-opacity:1;" /> </linearGradient> <linearGradient gradientTransform="translate(40,0)" gradientUnits="userSpaceOnUse" y2="13.451762" x2="-19.023472" y1="26.836283" x1="-16.296026" id="linearGradient3884-9" xlink:href="#linearGradient3878-1" inkscape:collect="always" /> <filter height="1.1915044" y="-0.095752224" width="1.3213861" x="-0.16069304" id="filter4020" inkscape:collect="always"> <feGaussianBlur id="feGaussianBlur4022" stdDeviation="0.8538944" inkscape:collect="always" /> </filter> <linearGradient id="linearGradient3821-0"> <stop id="stop3823-6" offset="0" style="stop-color:#fef5b0;stop-opacity:1;" /> <stop id="stop3825-4" offset="1" style="stop-color:#f1d704;stop-opacity:1;" /> </linearGradient> <linearGradient gradientTransform="translate(20,-1004.3622)" spreadMethod="reflect" gradientUnits="userSpaceOnUse" y2="1038.441" x2="1.1737994" y1="1039.1986" x1="-2.5985999" id="linearGradient3827-8" xlink:href="#linearGradient3821-0" inkscape:collect="always" /> <filter id="filter3980" inkscape:collect="always"> <feGaussianBlur id="feGaussianBlur3982" stdDeviation="0.82956855" inkscape:collect="always" /> </filter> <radialGradient gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.35372619,0.97556899,-1.8083668,0.65568574,19.581938,-9.0717138)" r="21.578524" fy="5.1168251" fx="15.982144" cy="5.1168251" cx="15.982144" id="radialGradient3974" xlink:href="#linearGradient3862" inkscape:collect="always" /> <linearGradient id="linearGradient3878-5"> <stop id="stop3880-7" offset="0" style="stop-color:#83c2fd;stop-opacity:1;" /> <stop id="stop3882-7" offset="1" style="stop-color:#b8dcfe;stop-opacity:1;" /> </linearGradient> <linearGradient gradientUnits="userSpaceOnUse" y2="13.451762" x2="-19.023472" y1="26.836283" x1="-16.296026" id="linearGradient3884-7" xlink:href="#linearGradient3878-5" inkscape:collect="always" /> <linearGradient gradientTransform="translate(40,0)" gradientUnits="userSpaceOnUse" y2="13.451762" x2="-19.023472" y1="26.836283" x1="-16.296026" id="linearGradient3884" xlink:href="#linearGradient3878" inkscape:collect="always" /> <linearGradient gradientTransform="translate(20,-1004.3622)" spreadMethod="reflect" gradientUnits="userSpaceOnUse" y2="1038.441" x2="1.1737994" y1="1039.1986" x1="-2.5985999" id="linearGradient3827" xlink:href="#linearGradient3821" inkscape:collect="always" /> <linearGradient id="linearGradient3821"> <stop id="stop3823" offset="0" style="stop-color:#d8d3b3;stop-opacity:1;" /> <stop id="stop3825" offset="1" style="stop-color:#d8c41d;stop-opacity:1;" /> </linearGradient> <linearGradient id="linearGradient3862"> <stop id="stop3864" offset="0" style="stop-color:#f9fbfc;stop-opacity:0;" /> <stop style="stop-color:#f9fbfc;stop-opacity:0.36090225;" offset="0.50674295" id="stop3888" /> <stop id="stop3928" offset="0.56762487" style="stop-color:#fcfdfd;stop-opacity:0;" /> <stop id="stop3866" offset="1" style="stop-color:#ffffff;stop-opacity:0;" /> </linearGradient> <linearGradient id="linearGradient3878"> <stop id="stop3880" offset="0" style="stop-color:#7ca1c4;stop-opacity:1;" /> <stop id="stop3882" offset="1" style="stop-color:#a4d2fe;stop-opacity:1;" /> </linearGradient> <linearGradient id="linearGradient4072"> <stop id="stop4074" offset="0" style="stop-color:#f9fbfc;stop-opacity:1;" /> <stop id="stop4076" offset="1" style="stop-color:#f9fbfc;stop-opacity:0;" /> </linearGradient> <linearGradient id="linearGradient12555"> <stop id="stop12557" offset="0" style="stop-color:#000000;stop-opacity:1;" /> <stop id="stop12559" offset="1" style="stop-color:#000000;stop-opacity:0;" /> </linearGradient> <radialGradient inkscape:collect="always" xlink:href="#linearGradient13314" id="radialGradient13322" cx="76.05957" cy="45.541611" fx="76.05957" fy="45.541611" r="75.94043" gradientTransform="matrix(0.83186018,0,0,0.57015918,12.788643,14.735064)" gradientUnits="userSpaceOnUse" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient13314" id="radialGradient13326" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.83186018,0,0,0.57015918,12.788643,14.735064)" cx="76.05957" cy="45.541611" fx="76.05957" fy="45.541611" r="75.94043" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient13314" id="radialGradient13328" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.83186018,0,0,0.57015918,12.788643,14.735064)" cx="76.05957" cy="45.541611" fx="76.05957" fy="45.541611" r="75.94043" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient13314" id="radialGradient13330" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.83186018,0,0,0.57015918,12.788643,14.735064)" cx="76.05957" cy="45.541611" fx="76.05957" fy="45.541611" r="75.94043" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient13314" id="radialGradient13332" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.83186018,0,0,0.57015918,12.788643,14.735064)" cx="76.05957" cy="45.541611" fx="76.05957" fy="45.541611" r="75.94043" /> </defs> <metadata id="metadata12574"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> <dc:title></dc:title> </cc:Work> </rdf:RDF> </metadata> <g transform="translate(0,-956.36217)" id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1" /> <text sodipodi:linespacing="125%" id="text12606" y="-15.369318" x="15.909903" style="font-size:4px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans" xml:space="preserve"><tspan y="-15.369318" x="15.909903" id="tspan12608" sodipodi:role="line" /></text> <g id="g12652" inkscape:groupmode="layer" inkscape:label="lorem ipsum"> <flowRoot id="flowRoot12654" xml:space="preserve" style="font-size:4px;text-align:justify;text-anchor:start;opacity:0.32793522;fill:url(#radialGradient13322);fill-opacity:1" transform="matrix(1.1529719,0,0,1.1865167,-14.07914,4.776172)"><flowRegion id="flowRegion12656" style="fill:url(#radialGradient13328);fill-opacity:1"><rect id="rect12658" width="152" height="96" x="0" y="0" style="font-size:4px;text-align:justify;text-anchor:start;fill:url(#radialGradient13326);fill-opacity:1" /></flowRegion><flowPara id="flowPara12660" style="fill:url(#radialGradient13330);fill-opacity:1">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas justo. Nam massa turpis, nonummy et, consectetuer id, placerat ac, ante. Sed non ipsum. Pellentesque suscipit accumsan massa. Quisque malesuada nulla sed pede volutpat pulvinar. Nullam venenatis gravida orci. Sed elementum, felis quis porttitor sollicitudin, augue nulla sodales sapien, sit amet posuere quam purus at lacus. Vestibulum non arcu a ante feugiat vestibulum. Mauris urna sem, suscipit vitae, dignissim id, ultrices sed, nunc. Praesent scelerisque. Phasellus lacinia iaculis mi. Praesent a lacus vitae turpis consequat semper. Praesent semper, neque vel condimentum hendrerit, lectus elit pretium ligula, nec consequat nisl velit at dui. Curabitur risus urna, placerat et, luctus pulvinar, auctor vel, orci. Aliquam velit dui, commodo quis, porttitor eget, convallis et, nisi. Morbi urna. Nam rhoncus, lectus vel hendrerit congue, nisl lorem feugiat ante, in fermentum erat nulla tristique arcu. </flowPara><flowPara id="flowPara12662" style="fill:url(#radialGradient13332);fill-opacity:1" /></flowRoot> <g id="g12795" transform="matrix(1.9195076,0,0,1.9195076,27.685776,1.1063842)"> <g inkscape:label="shadow" id="layer7"> <path inkscape:connector-curvature="0" id="path3051-0" d="m 16.754758,47.362014 6.944799,-10.1015 -7.576145,-2.841 5.682108,-8.4601 4.735091,1.7047 -5.366436,5.1139 7.702413,3.4724 z" style="opacity:0.5;fill:#2e3436;fill-opacity:1;stroke:none;display:inline;filter:url(#filter4020)" /> <path sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" id="path3832-6-6" d="m 16.017547,9.9413011 c 1.805756,-7.5965921 13.627461,-10.18638017 17.930208,-0.441942 5.102943,-0.561713 7.065446,1.9637839 8.333758,5.2401669 7.557963,0.805575 7.55172,15.013537 -3.598669,11.111678 -2.399919,2.287883 -5.200074,3.089175 -8.775699,1.010152 -3.07234,2.516571 -6.357854,3.274452 -10.101526,0.252538 C -0.77604848,35.641342 -1.6669795,6.508867 16.017547,9.9413011 z" style="opacity:0.5;fill:#2e3436;fill-opacity:1;stroke:none;display:inline;filter:url(#filter4066)" /> </g> <g style="display:inline" inkscape:label="thunder" id="layer3"> <path inkscape:connector-curvature="0" id="path3051" d="m 16.162441,46.4216 6.944799,-10.1015 -7.576145,-2.841 5.682108,-8.4601 4.735091,1.7047 -5.366436,5.1139 7.702413,3.4724 z" style="fill:url(#linearGradient3827);fill-opacity:1;stroke:#a98a00;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" /> </g> <g style="display:inline" inkscape:label="cloud base" id="layer4"> <path sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" id="path3832-6" d="m 14.747685,9.2252339 c 1.805756,-7.596592 13.627461,-10.18638002 17.930208,-0.441942 5.102943,-0.561713 7.065446,1.9637841 8.333758,5.2401671 7.557963,0.805575 7.55172,15.013537 -3.598669,11.111678 -2.399919,2.287883 -5.200074,3.089175 -8.775699,1.010152 -3.07234,2.516571 -6.357854,3.274452 -10.101526,0.252538 C -2.04591,34.925275 -2.936841,5.7927999 14.747685,9.2252339 z" style="fill:url(#linearGradient3884);fill-opacity:1;stroke:#204a87;stroke-width:0.30000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" /> </g> <g style="display:inline" inkscape:label="cloud inner" id="layer5"> <path sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" id="path3832-6-1" d="m 14.711695,9.725078 c 1.768939,-6.803649 13.349624,-9.123111 17.564646,-0.395811 4.998904,-0.503081 6.921396,1.758803 8.163849,4.693192 7.403871,0.721488 7.397756,13.446404 -3.525299,9.951826 -2.350989,2.04907 -5.094054,2.766723 -8.59678,0.904711 -3.009701,2.253888 -6.228229,2.932661 -9.895575,0.226178 C -1.739511,32.742515 -2.612278,6.650927 14.711695,9.725078 z" style="fill:url(#radialGradient4080);fill-opacity:1;stroke:none;filter:url(#filter3980)" /> </g> </g> </g> </svg> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/cloud_theme.rst����������������������������������������0000664�0001750�0001750�00000017722�13563007602�024025� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. index:: cloud; sphinx theme, sphinx theme; cloud ==================== "Cloud" sphinx theme ==================== Features ======== This package provides a theme called "Cloud", used to generate this documentation. Aside from being just another Sphinx theme, it has a few special features: *Toggleable sections* You can mark sections with ``.. rst-class:: html-toggle``, which will make the section default to being collapsed under html, with a "show section" toggle link to the right of the title. *Additional CSS classes* It provides a couple of simple styling directives for adding variety to long Python library documentation: * You can mark tables with ``.. rst-class:: html-plain-table`` to remove separating lines between rows. * You can mark ``<h2>`` sections with ``.. rst-class:: emphasize-children`` to provide addition visual dividers between large numbers of sub-sub-sections. *Navigation enhancements* It provides options (``roottarget``, ``logotarget``) which allow the table of contents to be a distinct from the front page (``index.html``) of the document. This allows a master table of contents to be maintained, while still allowing the front page to be fully customized to welcome readers. *Additional styling options* It also provides a number of styling options controlling small details such as external links, document sizing, etc. See below. It also uses an adaptive layout to work well on all screen sizes from mobile phones to widescreen desktops. *Google Analytics Integration* By enabling two theme options with ``conf.py``, Cloud will automatically insert a Google Analytics tracker to the bottom of each page, along with a polite link allowing users to set a cookie which opts them out. List of Options =============== Structure --------- ``roottarget`` Sets the page which the title link in the navigation bar should point to (defaults to the special value ``"<toc>"``, which uses the table of contents). ``logotarget`` Sets the page which the sidebar logo (if any) should point to (defaults to the special value ``<root>``, which just mirrors ``roottarget``). Document Layout --------------- ``max_width`` Sets the maximum document width, so the documentation does not stretch too far on wide monitors (defaults to ``11in``). ``minimal_width`` Sets the maximum width where the "mobile" layout will be used. This layout omits the sidebar and everything else that can be trimmed, and is designed to (hopefully) be more usuable on mobile devices. (defaults to ``700px``). ``min_height`` sets the minimum height of the page body (defaults to ``6in``). .. versionchanged:: 1.7 ``compact_width`` option has been removed, and will be ignored. (it previously provided an intermediate level of padding between ``minimal_width`` and ``max_width``). .. _font-options: Font Sizing ----------- ``default_layout_text_size`` Sets the default font size for the whole document (defaults to ``87.5%`` of browser default). ``minimal_layout_text_size`` Sets the default font size for the whole document when the "mobile" layout is being used (defaults to ``75%`` of browser default). Sidebar Layout & Styling ------------------------ ``rightsidebar`` whether the sidebar is on the right side instead of the left (defaults to ``false``). ``defaultcollapsed`` whether the sidebar should start collapsed (defaults to ``false``). ``stickysidebar`` whether the sidebar should "stick" in the current window (defaults to ``true``), otherwise it will scroll along with the page. ``highlighttoc`` whether sidebar should highlight the sections which are currently being viewed (defaults to ``true``). Sidebar Labels -------------- ``sidebar_localtoc_title`` Override title of per-page table of contents (in ``localtoc.html`` sidebar). defaults to ``Page contents``. ``sidebar_prev_title`` Override title of link to previous page (in ``relations.html`` sidebar). defaults to ``Previous page``. ``sidebar_next_title`` Override title of link to next page (in ``relations.html`` sidebar). defaults to ``Next page``. ``sidebar_master_title`` Override title of the front-page document link (in ``quicklinks.html`` sidebar). ``sidebar_root_title`` Override title of the root document link (in ``quicklinks.html`` sidebar). .. _decor-options: Document Styling ---------------- ``lighter_header_decor`` Optional boolean flag which render headers in a lighter underlined style, rather than with a solid background. Also enables other related stylistic changes. ``shaded_decor`` Optional boolean flag which adds a slight amount of shading to sidebar, navbars, and section headers. ``borderless_decor`` Optional boolean flag which makes page background match document background. Also enables other related stylistic changes. Styling ------- ``externalrefs`` Boolean flag that controls whether references should be displayed with an icon. (defaults to ``True``). ``externalicon`` Optional image or string to prefix before any external links (defaults to ``⇗``, ignored if ``externalrefs=False``). ``issueicon`` Optional image or string to prefix before any issue tracker links generated by :mod:`cloud_sptheme.ext.issue_tracker` (defaults to ``✧``, ignored if ``externalrefs=False``). .. note:: There are a number of options for changing the various colors and fonts used by this theme, which are still undocumented. A complete list can be found in the theme's configuration file (``/cloud_sptheme/themes/cloud/theme.conf``). Other ----- ``googleanalytics_id`` Setting this via ``html_theme_options`` to your GA id (e.g. ``UA-XXXXXXXX-X``) will enable a `Google Analytics <http://www.google.com/analytics>`_ tracker for all pages in the document, as well insert a link in the footer allowing users to opt out of tracking. ``googleanalytics_path`` Setting this allows limiting the tracker to a subpath, useful for shared documentation hosting (e.g. PyPI or ReadTheDocs). .. _cloud-theme-usage: Usage ===== Using the theme --------------- To use the cloud theme, make sure this package is installed properly, then open your documentation's Sphinx ``conf.py`` file, and make the following changes:: # set the html theme html_theme = "cloud" # NOTE: there are also alternate versions named "redcloud" and "greencloud" # ... some contents omitted ... # [optional] set some of the options listed above... html_theme_options = { "roottarget": "index" } .. rst-class:: floater .. seealso:: See the next page (:doc:`cloud_theme_test`) for examples of these options in action. Section Styles -------------- Emphasized Children ................... Adding ``.. rst-class:: emphasize-children`` to a 2nd-level section header will cause the headers of all of it's child sections to be emphasized with a solid background. This is mainly useful for very long sections, where there needs to be a visual divide between 3rd-level sections. Toggleable Sections ................... By adding ``.. rst-class:: html-toggle`` before any section header, it can be made toggleable:: .. rst-class:: html-toggle Toggleable Section ------------------ This section is collapsed by default. While toggleable sections start out collapsed by default, you can use ``.. rst-class:: html-toggle expanded`` to override this. Table Styles ------------ * Adding ``.. rst-class:: plain`` can be used to remove the row shading and other styling from a table. * Adding ``.. rst-class:: centered`` can be used to center a table. .. deprecated:: 1.10.0, use docutils' ``:align: center`` directive instead. * Adding ``.. rst-class:: fullwidth`` can be used to expand a table to the full width of the page. .. seealso:: The :mod:`~cloud_sptheme.ext.table_styling` extension for additional table styling abilities, e.g. per-column text alignment. ����������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/cloud_theme_test.rst�����������������������������������0000664�0001750�0001750�00000017707�13562562012�025067� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. index:: cloud; feature test ============ Feature Test ============ This page contains examples of various features of the Cloud theme. It's mainly useful internally, to make sure everything is displaying correctly. Inline Text ============= Inline literal: ``literal text``. Samp literal: :samp:`this is a {variable}, these are literal \\{ and \\}`. External links are prefixed with an arrow: `<http://www.google.com>`_. But email links are not prefixed: bob@example.com. Issue tracker link: :issue:`5`. .. role:: strike :class: strike This text should be :strike:`crossed out` .. rst-class:: hidden This text should not be visible. Admonition Styles ================= .. note:: This is a note. .. caution:: This is a slightly dangerous. .. warning:: This is a warning. .. danger:: This is dangerous. .. seealso:: This is a "see also" message. .. todo:: This is a todo message. With some additional next on another line. .. deprecated:: XXX This is a deprecation warning. .. versionadded:: XXX This was added .. versionchanged:: XXX This was changed .. rst-class:: float-right .. note:: This is note using the ``float-right`` class. .. rst-class:: float-center .. note:: This is note using the ``float-center`` class. .. rst-class:: without-title .. seealso:: This is a "see also" using the ``without-title`` class. Code Styles =========== Python Code Block: .. code-block:: python :linenos: >>> import os >>> os.listdir("/home") ['bread', 'pudding'] >>> os.listdir("/root") Traceback (most recent call last): File "<stdin>", line 1, in <module> OSError: [Errno 13] Permission denied: '/root' INI Code Block: .. code-block:: ini :linenos: [rueben] bread = rye meat = corned beef veg = sauerkraut Long Lines (:issue:`22`): .. literalinclude:: _static/longline.txt :linenos: .. literalinclude:: _static/longline.txt Function styling: .. function:: frobfunc(foo=1, *, bar=False) :noindex: :param foo: foobinate strength :type foo: int :param bar: enabled barring. :type bar: bool :returns: frobbed return :rtype: str :raises TypeError: if *foo* is out of range Class styling: .. class:: FrobClass(foo=1, *, bar=False) :noindex: Class docstring. Saying things. .. attribute:: foo :noindex: foobinate strength .. attribute:: bar :noindex: barring enabled .. method:: run() :noindex: execute action, return result. Table Styles ============ .. table:: Default Table =========== =========== =========== Header1 Header2 Header3 =========== =========== =========== Row 1 Row 1 Row 1 Row 2 Row 2 Row 2 Row 3 Row 3 Row 3 =========== =========== =========== .. rst-class:: plain .. table:: Plain Table (no row shading) =========== =========== =========== Header1 Header2 Header3 =========== =========== =========== Row 1 Row 1 Row 1 Row 2 Row 2 Row 2 Row 3 Row 3 Row 3 =========== =========== =========== .. table:: Left Table :align: left =========== =========== =========== Header1 Header2 Header3 =========== =========== =========== Row 1 Row 1 Row 1 Row 2 Row 2 Row 2 Row 3 Row 3 Row 3 =========== =========== =========== .. table:: Center Table :align: center =========== =========== =========== Header1 Header2 Header3 =========== =========== =========== Row 1 Row 1 Row 1 Row 2 Row 2 Row 2 Row 3 Row 3 Row 3 =========== =========== =========== .. table:: Right Table :align: right =========== =========== =========== Header1 Header2 Header3 =========== =========== =========== Row 1 Row 1 Row 1 Row 2 Row 2 Row 2 Row 3 Row 3 Row 3 =========== =========== =========== .. rst-class:: fullwidth .. table:: Full Width Table =========== =========== =========== Header1 Header2 Header3 =========== =========== =========== Row 1 Row 1 Row 1 Row 2 Row 2 Row 2 Row 3 Row 3 Row 3 =========== =========== =========== :doc:`Table Styling Extension <lib/cloud_sptheme.ext.table_styling>` ==================================================================== .. table:: Column Separators :widths: 1 2 3 :header-columns: 1 :column-alignment: left center right :column-dividers: none single double single :column-wrapping: nnn =========== =========== =========== Width x1 Width x2 Width x3 =========== =========== =========== Header 1 Center 1 Right 1 Header 2 Center 2 Right 2 Header 3 Center 3 Right 3 =========== =========== =========== .. table:: Header Alignment & Body Colspans :widths: 1 1 1 1 2 2 4 4 :header-alignment: lrlrlrlr :column-alignment: lccccccc :column-wrapping: tttttttt :column-dividers: 122222221 ======== ======== ======== ======== ======== ======== ================= ================= Left x1 Right x1 Left x1 Right x1 Left x2 Right x2 Left x4 Right x4 ======== ======== ======== ======== ======== ======== ================= ================= Left Span x1+1 Center Span x1+1+2+2 Center Span x4+4 ----------------- ----------------------------------- ----------------------------------- Left Span xALL ----------------------------------------------------------------------------------------- Left Span xALL ========================================================================================= .. table:: Multi-Row Header & Header Colspans :widths: 1 1 1 1 2 2 4 4 :header-alignment: lrlrlrlr :column-alignment: lccccccc :column-wrapping: tttttttt :column-dividers: 122222221 :header-columns: 1 ======== ======== ======== ======== ======== ======== ================= ================= Left x1 Right x1 Left x1 Right x1 Left x2 Right x2 Left x4 Right x4 -------- -------- -------- -------- -------- -------- ----------------- ----------------- Left Span x1+1 Center Span x1+1+2+2 Center Span x4+4 ================= =================================== =================================== H x1 x1 Center Span x1+1 Center Span x2+2 Center Span x4+4 -------- -------- ----------------- ----------------- ----------------------------------- H x1 Center Span xALL ======== ================================================================================ .. rst-class:: html-toggle .. _toggle-test-link: Toggleable Section ================== This section is collapsed by default. But if a visitor follows a link to this section or something within it (such as :ref:`this <toggle-test-link>`), it will automatically be expanded. .. rst-class:: html-toggle expanded Toggleable Subsection --------------------- Subsections can also be marked as toggleable. This one should be expanded by default. Normal Section ============== Child Section ------------- .. rst-class:: html-toggle Toggleable Subsection --------------------- Test of emphasized + toggleable styles. Should be collapsed by default. .. rst-class:: emphasize-children Section With Emphasized Children ================================ Mainly useful for sections with many long subsections, where a second level of visual dividers would be useful. Child Section ---------------- Should have slightly lighter background, and be indented. .. rst-class:: html-toggle Toggleable Subsection --------------------- Test of emphasized + toggleable styles. Should be collapsed by default. :mod:`~cloud_sptheme.ext.autodoc_sections` Extension ==================================================== .. autofunction:: cloud_sptheme.ext.autodoc_sections._doctestfunc :noindex: ���������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/conf.py������������������������������������������������0000664�0001750�0001750�00000024036�13654034337�022304� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- """ Sphinx configuration file for the cloud_sptheme documentation. 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. This honors the following sphinx tags (passed via -t or $SPHINX_BUILD_TAGS): * for-pypi -- generate special version to upload to pypi """ #============================================================================= # environment setup #============================================================================= import sys, 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('.')) # make sure root of source dir in sys.path sys.path.insert(0, os.path.abspath(os.pardir)) # read env var for tags, needed since "python setup.py build_sphinx" # doesn't support sphinx-build's "-t" option. for _tag in os.environ.get("SPHINX_BUILD_TAGS", "").split(): tags.add(_tag) #============================================================================= # imports #============================================================================= # import cloud_sptheme for themes, etc import cloud_sptheme as csp #============================================================================= # General configuration #============================================================================= # If your documentation needs a minimal Sphinx version, state it here. needs_sphinx = '1.6' # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = [ # standard sphinx extensions 'sphinx.ext.autodoc', 'sphinx.ext.todo', # 3rd party extensions 'sphinxcontrib.fulltoc', 'sphinx.ext.viewcode', # mainly to make sure layout works properly # cloud's extensions 'cloud_sptheme.ext.autodoc_sections', 'cloud_sptheme.ext.relbar_links', 'cloud_sptheme.ext.escaped_samp_literals', 'cloud_sptheme.ext.issue_tracker', 'cloud_sptheme.ext.table_styling', 'cloud_sptheme.ext.role_index', # NOTE: used only to provide example role index ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. source_encoding = 'utf-8' # The master toctree document. master_doc = 'contents' # The frontpage document. index_doc = 'index' # General information about the project. project = "Cloud Sphinx Theme" author = "Assurance Technologies, LLC" copyright = "2010-2019, " + author # 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. # release: The full version, including alpha/beta/rc tags. # version: The short X.Y version. from cloud_sptheme import __version__ as release version = csp.get_version(release) # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. ##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. exclude_patterns = [ # may revise/remove this "lib/cloud_sptheme.make_helper.rst", ] # 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 = [ "cloud_sptheme." ] if tags.has("for-pypi"): extensions.append('cloud_sptheme.ext.auto_redirect') # auto_redirect_subject = "The official cloud_sptheme documentation" auto_redirect_domain_url = "https://cloud-sptheme.readthedocs.io" auto_redirect_domain_root = "/en/latest" #============================================================================= # Options for all output #============================================================================= todo_include_todos = True keep_warnings = True issue_tracker_url = "https://foss.heptapod.net/doc-utils/cloud_sptheme/issues/{issue}" # # for testing table_style ext # table_styling_default_align = "left" #============================================================================= # 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 = os.environ.get("SPHINX_THEME") or 'cloud' # 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 = {} if csp.is_cloud_theme(html_theme): html_theme_options.update( roottarget=index_doc, borderless_decor=True, sidebarwidth="3in", hyphenation_language="en", ) # Add any paths that contain custom themes here, relative to this directory. if csp.is_cloud_theme(html_theme): # so build works even if package isn't installed html_theme_path = [csp._theme_dir] # The name for this set of Sphinx documents. If None, it defaults to # "<project> v<release> documentation". html_title = "%s v%s Documentation" % (project, release) # A shorter title for the navigation bar. Default is the same as html_title. html_short_title = "%s %s Documentation" % (project, version) # The name of an image file (relative to this directory) to place at the top # of the sidebar. html_logo = os.path.join("_static", "masthead.png") # 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 = ['_static'] # 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 = {'**': ['searchbox.html', 'globaltoc.html']} # 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 # Output file base name for HTML help builder. htmlhelp_basename = project + 'Doc' #============================================================================= # Options for LaTeX output #============================================================================= # The paper size ('letter' or 'a4'). ##latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). ##latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ (index_doc, project + '.tex', project + ' Documentation', author, '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 # Additional stuff for the LaTeX preamble. ##latex_preamble = '' # 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 = [ (index_doc, project, project + ' Documentation', [author], 1) ] #============================================================================= # EOF #============================================================================= ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/contents.rst�������������������������������������������0000664�0001750�0001750�00000000336�13562544741�023374� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������================= Table Of Contents ================= .. toctree:: Front Page <index> install cloud_theme lib/index cloud_theme_test history copyright .. lib/cloud_sptheme.make_helper ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/copyright.rst������������������������������������������0000644�0001750�0001750�00000000063�12214647251�023533� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. index:: cloud; license .. include:: ../LICENSE �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/history.rst��������������������������������������������0000644�0001750�0001750�00000000065�12214647251�023226� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. index:: cloud; changelog .. include:: ../CHANGES ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/index.rst����������������������������������������������0000664�0001750�0001750�00000010537�13654034337�022647� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������=============================================== The Cloud Sphinx Theme =============================================== .. rst-class:: without-title .. caution:: **2020-05-01: This project has moved to Heptapod!** Due to BitBucket deprecating Mercurial support, this package's public repository and issue tracker has been relocated. It's now located at `<https://foss.heptapod.net/doc-utils/cloud_sptheme>`_, and is powered by `Heptapod <https://heptapod.net/>`_. Hosting is being graciously provided by the people at `Octobus <https://octobus.net/>`_ and `CleverCloud <https://clever-cloud.com/>`_! This is release |release| of a small Python package named :mod:`!cloud_sptheme`. It contains a `Sphinx <http://sphinx.pocoo.org/>`_ theme named "Cloud", and some related Sphinx extensions. Cloud and its extensions are primarily oriented towards generating html documentation for Python libraries. It provides numerous small enhancements to make the html documentation html more interactive, improve the layout on mobile devices, and other enhancements. Contents ======== .. rst-class:: floater .. seealso:: :ref:`What's new in v1.10 <whats-new>` Themes ------ :doc:`Cloud Sphinx Theme <cloud_theme>` the main Sphinx theme provided by this package, and used by this documentation. Markup Extensions ----------------- The following extensions make some helpful enhancements to sphinx's markup. They should all be theme-independant. :mod:`cloud_sptheme.ext.autodoc_sections` Patches :mod:`sphinx.ext.autodoc` to handle RST section headers inside docstrings. :mod:`cloud_sptheme.ext.autoattribute_search_bases` Patches :mod:`sphinx.ext.autodoc` so that ``.. autoattribute::`` will also search parent classes for attribute docstrings. :mod:`cloud_sptheme.ext.docfield_markup` Patches Sphinx to permit tilde-prefixed markup in directives, such as ``:raises ~myapp.MyException:`` :mod:`cloud_sptheme.ext.escaped_samp_literals` Patches Sphinx to permit backslash-escaped ``{}`` characters within ``:samp:`` roles. :mod:`cloud_sptheme.ext.issue_tracker` Adds a special ``:issue:`` role for quickly linking to your project's issue tracker. :mod:`cloud_sptheme.ext.table_styling` Enhances ``.. table`` directive to support per-column text alignment and other layout features. Meta Extensions --------------- The following extensions add some additional capabilities and features for building sphinx documentation. They should all be theme-independant. :mod:`cloud_sptheme.ext.auto_redirect` Helper to alert users when documentation hosting has moved to a different url. :mod:`cloud_sptheme.ext.page_only` Directive that allows entire pages to be conditionally omitted from a build, similar to ``.. only::``. :mod:`cloud_sptheme.ext.relbar_links` Adds a TOC or other custom links to the top navigation controls. :mod:`cloud_sptheme.ext.role_index` Generates a "roleindex.json" of all document and cross-references, to help integrate sphinx documentation into a web application's context-aware help. Theme-Specific Extensions ------------------------- The following Sphinx extensions provide features used by the Cloud theme, and may prove useful for documentation that needs a specific feature: :mod:`cloud_sptheme.ext.index_styling` Adds additional css styling classes to the index page. Reference --------- :doc:`install` requirements and installations instructions :doc:`history` history of current and past releases Online Resources ================ .. rst-class:: html-plain-table ====================== =================================================== Homepage: `<https://foss.heptapod.net/doc-utils/cloud_sptheme>`_ Online Docs: `<https://cloud-sptheme.readthedocs.io>`_ Download & PyPI: `<https://pypi.python.org/pypi/cloud_sptheme>`_ ====================== =================================================== Hosting ======= Thanks to the people at `Octobus <https://octobus.net/>`_ and `CleverCloud <https://clever-cloud.com/>`_ for providing the repository / issue tracker hosting, as well as the development of `Heptapod <https://heptapod.net/>`_! Thanks to `ReadTheDocs <https://readthedocs.io>`_ for providing documentation hosting! �����������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/install.rst��������������������������������������������0000664�0001750�0001750�00000003251�13562544741�023204� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. index:: cloud; installation ========================= Installation Instructions ========================= Requirements ============ * Python >= 2.6 or Python 3 * `Sphinx <http://sphinx.pocoo.org/>`_ 1.4 or newer. Installing ========== * To install from pypi using pip:: pip install cloud_sptheme * To install from pypi using easy_install:: easy_install cloud_sptheme * To install from source using ``setup.py``:: python setup.py build sudo python setup.py install .. index:: readthedocs.org; installation on ReadTheDocs =========== To use this theme on `<https://readthedocs.org>`_: 1. If it doesn't already exist, add a pip ``requirements.txt`` file to your documentation (e.g. alongside ``conf.py``). It should contain a minimum of the following lines:: sphinx cloud_sptheme ... as well as any other build requirements for your project's documentation. 2. When setting up your project on ReadTheDocs, enter the path to ``requirements.txt`` in the *requirements file* field on the project configuration page. 3. ReadTheDocs will now automatically download the latest version of :mod:`!cloud_sptheme` when building your documentation. Documentation ============= The latest copy of this documentation should always be available at: `<https://cloud-sptheme.readthedocs.io>`_ If you wish to generate your own copy of the documentation, you will need to: 1. Install `Sphinx <http://sphinx.pocoo.org/>`_ (1.4 or better) 2. Download the :mod:`!cloud_sptheme` source. 3. From the source directory, run ``python setup.py build_sphinx -E``. 4. Once Sphinx is finished, point a web browser to the file :samp:`{SOURCE}/build/sphinx/html/index.html`. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/���������������������������������������������������0000775�0001750�0001750�00000000000�13654052716�021547� 5����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/cloud_sptheme.ext.auto_redirect.rst����������������0000664�0001750�0001750�00000000060�13562544741�030561� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. automodule:: cloud_sptheme.ext.auto_redirect ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/cloud_sptheme.ext.autoattribute_search_bases.rst���0000664�0001750�0001750�00000001202�13562544741�033325� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������=================================================== :mod:`cloud_sptheme.ext.autoattribute_search_bases` =================================================== .. module:: cloud_sptheme.ext.autoattribute_search_bases :synopsis: make ``autoattribute`` search for docstrings in parent classes .. versionadded:: 1.7 Overview ======== Currently, :mod:`sphinx.ext.autodoc`'s ``autoattribute`` only checks the current class for an attribute docstring. This extension patches Sphinx so that if one isn't found, autodoc will then search through the parent classes, in case the attribute is defined there, but is being documented in the subclass. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/cloud_sptheme.ext.autodoc_sections.rst�������������0000664�0001750�0001750�00000003406�13562544741�031304� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������=================================================================================== :mod:`cloud_sptheme.ext.autodoc_sections` - support for ReST sections in docstrings =================================================================================== .. module:: cloud_sptheme.ext.autodoc_sections :synopsis: support for ReST sections in docstrings .. versionchanged:: 1.7 Drastically revamped how extension works, as well as the DOM / css styles it generates. Themes relying on the previous output structure may need to be updated (the css classes were changed, to allow simulatenous styling of both old and new versions). Overview ======== This Sphinx extension should be used in conjunction with the Autodoc extension. This extension allows docstrings (module, class, function, etc) to include ReST-style section headers (which normally cause problems if integrated into Sphinx documentation via Autodoc). Internals ========= This extension does an *extensive* amount of monkeypatching within Sphinx and Docutils. While this allows it to leverage Docutil's native RST parser (rather than implement it's own), this does mean it may be more fragile if any of the internals change. Please report any bugs. In order for Sphinx themes (like this one) to distinguish document-level sections from the special object-description sections generated by this extension, it assigns two extra css classes to the sections it generates: ``desc-section`` and :samp:`desc-section-{level}`. Additionally, the header element of each section is assigned the css class ``section-header``. Depending on the theme, these may require additional styling rules. .. todo:: This extension has a few things which could be improved: * Subsections should be included in Sphinx's indexing. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/cloud_sptheme.ext.docfield_markup.rst��������������0000664�0001750�0001750�00000001332�13562544741�031063� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������===================================================================================== :mod:`cloud_sptheme.ext.docfield_markup` - support ``~mod.class`` markup in docfields ===================================================================================== .. module:: cloud_sptheme.ext.docfield_markup :synopsis: support ``~mod.class`` markup in docfields .. versionadded:: 1.7 Overview ======== Currently, Sphinx docfields only allow full type references (e.g. ``:raises myapp.MyException:``). This extension monkeypatches Sphinx so that tilde prefixes can be used (e.g. ``:raises ~myapp.MyException:``), resulting in a proper crosslink with only the final class name being displayed (ala the various reference roles). ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/cloud_sptheme.ext.escaped_samp_literals.rst��������0000664�0001750�0001750�00000002215�13562544741�032257� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������================================================================================================== :mod:`cloud_sptheme.ext.escaped_samp_literals` - permits escaped bracket characters in *samp* role ================================================================================================== .. module:: cloud_sptheme.ext.escaped_samp_literals :synopsis: support escaped bracket characters in SAMP role Overview ======== This extension modifies how ``:samp:`` literals are parsed, replacing the default Sphinx parser with an alternate one that allows embedding literal ``{`` and ``}`` characters within the content, as well providing stricter input validation. To embed a literal ``{``, just use a double-backslash, e.g:: :samp:`this is a {variable}, these are a literal \\{ and \\}` ... and it will be rendered as: :samp:`this is a {variable}, these are a literal \\{ and \\}` Internals ========= .. rst-class:: float-center .. seealso:: This feature has been submitted to Sphinx as `issue 789 <https://github.com/sphinx-doc/sphinx/issues/789>`_. If/when that issue is resolved, this extension will be deprecated and removed. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/cloud_sptheme.ext.index_styling.rst����������������0000644�0001750�0001750�00000002223�12701773040�030577� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������========================================================================== :mod:`cloud_sptheme.ext.index_styling` - improves css styling for genindex ========================================================================== .. module:: cloud_sptheme.ext.index_styling :synopsis: adds additional css styling to general index Overview ======== This Sphinx extension intercepts & modifies the general index data before it is rendered to html, adding some additional css classes to help Sphinx themes (e.g. :doc:`/cloud_theme`) provide additional per-type styling for index entries. Internals ========= This extension adds the following css classes to ``genindex.html``: * For all entries referencing an ``attribute``, ``method``, ``class``, ``function``, or ``module``: - The text containing the type of the entry (e.g. ``attribute`` or ``method``) is wrapped in a :samp:`<span class="category {type}">...</span>` tag. - If the entry contains a location (e.g. ``myclass in module myapp``), the ``myapp`` portion is wrapped in a ``<span class="location">...</span>`` tag. * Entries which don't fit into one of the above categories are not modified. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/cloud_sptheme.ext.issue_tracker.rst����������������0000664�0001750�0001750�00000004050�13562544741�030576� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������=================================================================================== :mod:`cloud_sptheme.ext.issue_tracker` - support for `issue` text role =================================================================================== .. module:: cloud_sptheme.ext.issue_tracker :synopsis: quickly create links to project's issue tracker with ``:issue:`` role Overview ======== This Sphinx extension adds a new text role, ``:issue:``, which will automatically be converted into links to your project's issue tracker. Issue roles should have the format ``:issue:`5``` or ``:issue:`Custom Title <5>```. They will be converted into external references to the appropriate issue number in your project's issue tracker. Configuration ============= This extension reads the following ``conf.py`` options: ``issue_tracker_url`` This should provide a path to the project's issue tracker. It should have one of the following formats: * :samp:`bb:{user}/{project}` -- link to BitBucket issue tracker for specified project * :samp:`gh:{user}/{project}` -- link to GitHub issue tracker for specified project * string containing arbitrary url, the substring ``{issue}`` will be replaced with the relevant issue number, and ``{title}`` with the link title. If this option is not specified, all issue references will be converted into labels instead of links. ``issue_tracker_title`` Template for generating default title for references that only specify the issue number (e.g. ``:issue:`5```). This defaults to ``Issue {issue}``. ``conf.py`` Usage Example:: # add to list of extensions: extensions = [ ... 'cloud_sptheme.ext.issue_tracker', ] ... # set path to issue tracker: issue_tracker_url = "https://example.org/tracker/{issue}" Internals ========= .. note:: For themeing purposes, the generated ``<a>`` tag will have an ``issue`` CSS class added to it. .. versionchanged:: 1.8.4 Removed "Google Code" preset url format. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/cloud_sptheme.ext.page_only.rst��������������������0000644�0001750�0001750�00000000055�12675107441�027703� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. automodule:: cloud_sptheme.ext.page_only �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/cloud_sptheme.ext.relbar_links.rst�����������������0000664�0001750�0001750�00000000075�13562544741�030405� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. automodule:: cloud_sptheme.ext.relbar_links :noindex: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/cloud_sptheme.ext.relbar_toc.rst�������������������0000664�0001750�0001750�00000000705�13562544741�030052� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������================================================================= :mod:`cloud_sptheme.ext.relbar_toc` - adds TOC entry to relbar ================================================================= .. module:: cloud_sptheme.ext.relbar_toc :synopsis: adds TOC entry to right side of relbar .. deprecated:: 1.8.1 This extension is now an alias for :mod:`cloud_sptheme.ext.relbar_links`. This alias will be removed at some point in the future. �����������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/cloud_sptheme.ext.role_index.rst�������������������0000644�0001750�0001750�00000000055�12674256174�030065� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. automodule:: cloud_sptheme.ext.role_index �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/cloud_sptheme.ext.table_styling.rst����������������0000664�0001750�0001750�00000015414�13562561107�030574� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������=========================================================================== :mod:`cloud_sptheme.ext.table_styling` - adds directives for styling tables =========================================================================== .. module:: cloud_sptheme.ext.table_styling :synopsis: adds directives for styling tables .. versionchanged:: 1.9 Added ``:header-alignment:`` directive. Overview ======== This Sphinx extension replaces the default ``.. table::`` directive with a custom one, that supports a number of extra options for controlling table layout on a per-column basis. For example, the following snippet specifies relative widths for the three columns, changes the text alignment for each column, disables text-wrapping for the third column, and inserts dividers between the columns:: .. table:: Optional Caption :widths: 3 2 1 :column-alignment: left center right :column-wrapping: true true false :column-dividers: none single double single =========== =========== =========== Width 50% Width 33% Width 16% =========== =========== =========== Line 1 This text This text should wrap will always onto be one line. multiple lines. Line 2 Centered. Right-Aligned. Line 3 Centered Right-Aligned Again. Again. =========== =========== =========== This will then result in the following table: .. table:: Optional Caption :widths: 3 2 1 :column-alignment: left center right :column-wrapping: yes yes no :column-dividers: none single double single =========== =========== =========== Width 50% Width 33% Width 16% =========== =========== =========== Line 1 This text This text should wrap will always onto be one line. multiple lines. Line 2 Centered. Right-Aligned. Line 3 Centered Right-Aligned Again. Again. =========== =========== =========== Directive Options ================= The enhanced ``.. table::`` directive supports the following options: ``:widths:`` Sets proportional column widths This should be a space-separated list of positive integers, one for every column. The columns widths will be allocated proportionally (e.g. ``1 2 3`` for a 3-column table means the columns will use 16%, 33%, and 50% of the total width, respectively). ``:column-alignment:`` Sets per-column text alignment This should be a comma/space-separated list of the following strings: ``left``, ``right``, ``center``, ``justify``. These are interpreted one per column. Extra values are ignored; if not enough values are provided, the remaining columns will default to ``left``. Alternately this can be a single word containing just the first letters: e.g. ``lrcj`` would be interpreted the same as ``left right center justify``. ``:header-alignment:`` Sets per-column text alignment *for header rows*. This has the same format as ``:column-alignment:``. If specified, all headers rows will use these alignment values instead of the default column alignments. ``:column-wrapping:`` Sets per-column text wrapping This should be a comma/space-separated list of either ``yes``/``true`` or ``no``/``false``. If ``yes`` (the default), words will wrap around if there is not enough horizontal space. If ``no``, whitespace-wrapping will be disabled for that column. Extra values are ignored; if not enough values are provided, the remaining columns will default to ``true``. Alternately this can be a single word containing just the first letters: e.g. ``ttf`` is the same as ``true true false``. ``:column-dividers:`` Add dividers between columns This lets you specify custom vertical dividers between columns (ala what ``.. tabularcolumns::`` allows under latex). This should be a comma/space-separated list of ``none``, ``single``, or ``double``; based on the type of divider you want. There should be one of these for the left side of the table, for between each column, and for the right side of the table (e.g. a 4 entries for a 3-column table). Extra values are ignored; if not enough values are provided, the remaining columns will default to ``none``. Alternately this can be a single word containing just the number: e.g. ``0121`` is the same as ``none single double single``. ``:column-classes:`` Add per-column css classes. This lets you specify css classes that will be assigned to each column, much like ``.. rst-class::``. This should either be a space-separated list containing one class per column, or a comma-separated list containing multiple classes for each column, separated by spaces. Extra values are ignored; if there are not enough values, or there are blank entries, those columns will not be assigned any custom classes. For example, ``a b, c , , d`` would assign the classes ``a b`` to column 1, ``c`` to column 2, no custom classes for column 3, and ``d`` to column 4. ``:header-columns:`` Specify number of "stub" columns Should be a non-negative integer specifying the number of columns (starting with the left side) that should be treated as "stub" or "header" columns, and should be styled accordingly. Configuration ============= This extension reads the following ``conf.py`` options: ``table_style_default_align`` Optionally add default value for ``:align:`` directive. Sphinx 2 changed it's default to "centered" tables, setting this directive to "left" will restore the original behavior. .. versionadded:: 1.10.0 ``table_styling_embed_css`` Controls whether or not the custom css file should be included. Defaults to ``True``, set to ``False`` to disable. ``table_styling_class`` By default, all HTML tables styled by this extension will have the css class ``"styled-table"`` added, to help with themeing support. Use this option to override with your own theme's preferred css class. Internals ========= .. note:: This extension gets the job done by adding custom css classes to every cell in the generated html table. It then inserts a custom css file which provides styling implementing relevant parts of the above directives. While this extension is primarily tested with :mod:`!cloud_sptheme`, it should work with most Sphinx themes, any conflicts that occur are probably bugs. .. todo:: make this autogenerate a matching ``.. tabularcolumns`` directive for latex. .. todo:: allow ``:widths:`` to support ``em``, ``in``, ``%`` ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/cloud_sptheme.make_helper.rst����������������������0000644�0001750�0001750�00000004563�12214647251�027410� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������==================================================================== :mod:`cloud_sptheme.make_helper` - sphinx-build Makefile replacement ==================================================================== .. module:: cloud_sptheme.make_helper :synopsis: sphinx-build Makefile replacement This module was written to solve one specific task: to provide an alternative to the ``Makefile`` and ``make.bat`` scripts found in many Sphinx projects. Most sphinx projects rely on the presence of :command:`make`, do not frequently need documentation built on windows, and don't find the need to update the makefile once set up. However, for the small subset of projects this doesn't include, this class provides an easy pure-python way to make a cross-platform build script. Usage ===== In order to use this script, go to your documentation's source directory, and include the following fragment as the file ``make.py``:: "Makefile for Sphinx documentation, adapted to python" import os from cloud_sptheme.make_helper import SphinxMaker if __name__ == "__main__": SphinxMaker.execute(root_dir=os.path.join(__file__,os.pardir)) Once done, this script can be invoked via :samp:`python docs/make.py {options}`, in the same manner as the Sphinx Makefile and make.bat script. Any new features added to SphinxMaker via cloud_sptheme will automatically become available to all packages using this stub. Interface ========= .. class:: SphinxMaker(root_dir=None) :param root_dir: absolute path pointing to documentation source directory. The following are class attributes, but they may be overridden via subclass, constructor, or environment variable (in increasing order of precedence). .. attribute:: BUILD the build directory. this defaults to ``_build``, .. attribute:: SPHINXBUILD path to sphinx-build script, defaults to ``sphinx-build``. .. attribute:: PAPER paper size for latex, defaults to ``letter``. .. attribute:: SERVEHTML_PORT port for ``servehtml`` to launch a webserver on, defaults to 8000. .. todo:: SphinxMaker does not currently include all the build targets that sphinx-quickstart's Makefile contains, this should be fixed. SphinxMaker may currently contain some assumptions which don't apply to some sphinx project layouts, these should be identified and made configurable. ���������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/cloud_sptheme.rst����������������������������������0000644�0001750�0001750�00000000633�12447601466�025135� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������=================================================================================== :mod:`cloud_sptheme` - helper functions =================================================================================== .. module:: cloud_sptheme :synopsis: helper functions The main :mod:`!cloud_sptheme` module contains the following helper functions: .. autofunction:: get_theme_dir .. autofunction:: get_version �����������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/lib/index.rst������������������������������������������0000664�0001750�0001750�00000001302�13562544741�023406� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������============= API Reference ============= The reference section contains documentation of Cloud's Sphinx extensions and utility functions. **Module list:** .. toctree:: :titlesonly: :maxdepth: 1 cloud_sptheme cloud_sptheme.ext.index_styling cloud_sptheme.ext.relbar_toc cloud_sptheme.ext.relbar_links cloud_sptheme.ext.autodoc_sections cloud_sptheme.ext.autoattribute_search_bases cloud_sptheme.ext.docfield_markup cloud_sptheme.ext.issue_tracker cloud_sptheme.ext.escaped_samp_literals cloud_sptheme.ext.page_only cloud_sptheme.ext.role_index cloud_sptheme.ext.table_styling cloud_sptheme.ext.auto_redirect .. cloud_sptheme.make_helper ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/docs/requirements.txt���������������������������������������0000664�0001750�0001750�00000000305�13562544741�024265� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# NOTE: switched to custom branch until https://github.com/dreamhost/sphinxcontrib-fulltoc/issues/10 is fixed ## sphinxcontrib-fulltoc git+https://github.com/eli-collins/sphinxcontrib-fulltoc.git ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/setup.cfg���������������������������������������������������0000664�0001750�0001750�00000000164�13654052716�021673� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[upload_docs] upload_dir = build/sphinx/html [bdist_wheel] universal = true [egg_info] tag_build = tag_date = 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������cloud_sptheme-1.10.1.post20200504175005/setup.py����������������������������������������������������0000664�0001750�0001750�00000011032�13654052716�021560� 0����������������������������������������������������������������������������������������������������ustar �biscuit�������������������������biscuit�������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������""" cloud_sptheme setup script """ #============================================================================= # init script env -- ensure cwd = root of source dir #============================================================================= import os root_dir = os.path.abspath(os.path.join(__file__, "..")) os.chdir(root_dir) #============================================================================= # imports #============================================================================= # core import setuptools import sys # pkg from cloud_sptheme import _iter_theme_sources from cloud_sptheme import __version__ as version #============================================================================= # init setup options #============================================================================= opts = dict( #================================================================== # sources #================================================================== packages=setuptools.find_packages(root_dir), package_data={ "cloud_sptheme": ["themes/*/*.*", "themes/*/static/*.*", "ext/static/*.*"] }, zip_safe=False, #================================================================== # metadata #================================================================== name="cloud_sptheme", # NOTE: 'version' set below author="Eli Collins", author_email="elic@assurancetechnologies.com", license = "BSD", url = "https://cloud-sptheme.readthedocs.io", download_url = "https://pypi.python.org/pypi/cloud_sptheme", install_requires=[ "sphinx>=1.6" ], entry_points={ # signal to sphinx it should call "cloud_sptheme:setup(app)" to setup these html themes "sphinx.html_themes": ['%s = cloud_sptheme' % name for name, path in _iter_theme_sources()] }, #================================================================== # details #================================================================== description= "a nice sphinx theme named 'Cloud', and some related extensions", long_description="""\ This is a small package containing a Sphinx theme named "Cloud", along with some related Sphinx extensions. To see an example of the theme in action, check out it's documentation at `<https://cloud-sptheme.readthedocs.io>`_. """, keywords="sphinx extension theme", classifiers=""" Development Status :: 5 - Production/Stable Framework :: Sphinx :: Extension Framework :: Sphinx :: Theme Intended Audience :: Developers License :: OSI Approved :: BSD License Operating System :: OS Independent Programming Language :: Python :: 2.6 Programming Language :: Python :: 2.7 Programming Language :: Python :: 3 Programming Language :: Python :: 3.3 Programming Language :: Python :: 3.4 Programming Language :: Python :: 3.5 Programming Language :: Python :: 3.6 Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.8 Topic :: Documentation Topic :: Software Development :: Documentation """.strip().splitlines(), #================================================================== # custom setup #================================================================== script_args=sys.argv[1:], cmdclass={}, ) #============================================================================= # set version string #============================================================================= # append hg revision to builds stamp_build = False if stamp_build: from cloud_sptheme._setup.stamp import ( as_bool, append_hg_revision, stamp_distutils_output, install_build_py_exclude, set_command_options ) # add HG revision to end of version if as_bool(os.environ.get("SETUP_TAG_RELEASE", "yes")): version = append_hg_revision(version) # subclass build_py & sdist to rewrite source version string, # and clears stamp_build flag (above) so this doesn't run again. stamp_distutils_output(opts, version) # exclude '._setup' package from builds, only needed for sdist install_build_py_exclude(opts) set_command_options(opts, "build_py", exclude_packages=["cloud_sptheme._setup"], ) opts['version'] = version #============================================================================= # run setup #============================================================================= setuptools.setup(**opts) #============================================================================= # eof #============================================================================= ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������