Import Upstream version 0.4.3+dfsg

This commit is contained in:
zhouganqing 2022-11-08 10:19:46 +08:00
commit 4ea00248ed
68 changed files with 5118 additions and 0 deletions

16
.gitattributes vendored Normal file
View File

@ -0,0 +1,16 @@
# Document global line endings settings
# https://help.github.com/articles/dealing-with-line-endings/
* text eol=lf
*.bat text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.ai binary
*.jpg binary
*.otf binary
*.png binary
*.eot binary
*.ttf binary
*.whl binary
*.woff binary
*.woff2 binary

5
.github/CODE_OF_CONDUCT.md vendored Normal file
View File

@ -0,0 +1,5 @@
# Code of Conduct
A copy of our code of conduct can be found on Read the Docs as seen below.
http://docs.readthedocs.io/en/latest/code-of-conduct.html

26
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,26 @@
### Problem
Give details on your issue.
### Reproducible Project
Please give a link to a public reproducible project or provide an example of the Restructured Text that gives an issue.
```rst
Place RST code here (if any).
```
#### Error Logs/Results
Place any images or error logs that might be able to help solve the issue here.
#### Expected Results
Please describe how this should work properly.
### Environment Info
- Python Version:
- Sphinx Version:
- RTD Theme Version:

18
.gitignore vendored Normal file
View File

@ -0,0 +1,18 @@
*.pyc
*.egg-info
*.egg
*build/
.tox
.coverage
*.DS_Store
*.sass-cache
*.map
.ropeproject/
.ruby-version
dist/
bower_components/
node_modules
npm-debug.log
package-lock.json
sphinx_rtd_theme/static/fonts/Lato/
sphinx_rtd_theme/static/fonts/RobotoSlab/

5
.readthedocs.yml Normal file
View File

@ -0,0 +1,5 @@
build:
image: latest
python:
version: 3.6
requirements_file: docs/requirements.txt

18
.travis.yml Normal file
View File

@ -0,0 +1,18 @@
language: python
python:
- 2.7
- 3.4
- 3.5
- 3.6
matrix:
include:
- python: 2.7
env: TOXENV=docs
install:
- pip install tox-travis
script:
- tox
branches:
only:
- master

204
Apache-License-2.0.txt Normal file
View File

@ -0,0 +1,204 @@
/fonts/RobotoSlab/*
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

189
Gruntfile.js Normal file
View File

@ -0,0 +1,189 @@
module.exports = function(grunt) {
// load all grunt tasks
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
grunt.initConfig({
// Read package.json
pkg: grunt.file.readJSON("package.json"),
open : {
dev: {
path: 'http://localhost:1919'
}
},
connect: {
server: {
options: {
port: 1919,
base: 'docs/build',
livereload: true
}
}
},
copy: {
fonts: {
files: [
{
expand: true,
flatten: true,
src: ['bower_components/font-awesome/fonts/*'],
dest: 'sphinx_rtd_theme/static/fonts/',
filter: 'isFile'
},
{
expand: true,
flatten: true,
src: ['fonts/Lato/*'],
dest: 'sphinx_rtd_theme/static/fonts/Lato',
filter: 'isFile'
},
{
expand: true,
flatten: true,
src: ['fonts/RobotoSlab/*'],
dest: 'sphinx_rtd_theme/static/fonts/RobotoSlab/',
filter: 'isFile'
}
]
}
},
sass: {
dev: {
options: {
style: 'expanded',
loadPath: ['bower_components/bourbon/dist', 'bower_components/neat/app/assets/stylesheets', 'bower_components/font-awesome/scss', 'bower_components/wyrm/sass']
},
files: [{
expand: true,
cwd: 'sass',
src: ['*.sass'],
dest: 'sphinx_rtd_theme/static/css',
ext: '.css'
}]
},
build: {
options: {
style: 'compressed',
sourcemap: 'none',
loadPath: ['bower_components/bourbon/dist', 'bower_components/neat/app/assets/stylesheets', 'bower_components/font-awesome/scss', 'bower_components/wyrm/sass']
},
files: [{
expand: true,
cwd: 'sass',
src: ['*.sass'],
dest: 'sphinx_rtd_theme/static/css',
ext: '.css'
}]
}
},
browserify: {
dev: {
options: {
external: ['jquery'],
alias: {
'sphinx-rtd-theme': './js/theme.js'
}
},
src: ['js/*.js'],
dest: 'sphinx_rtd_theme/static/js/theme.js'
},
build: {
options: {
external: ['jquery'],
alias: {
'sphinx-rtd-theme': './js/theme.js'
}
},
src: ['js/*.js'],
dest: 'sphinx_rtd_theme/static/js/theme.js'
}
},
uglify: {
dist: {
options: {
sourceMap: false,
mangle: {
reserved: ['jQuery'] // Leave 'jQuery' identifier unchanged
},
ie8: true // compliance with IE 6-8 quirks
},
files: [{
expand: true,
src: ['sphinx_rtd_theme/static/js/*.js', '!sphinx_rtd_theme/static/js/*.min.js'],
dest: 'sphinx_rtd_theme/static/js/',
rename: function (dst, src) {
// Use unminified file name for minified file
return src;
}
}]
}
},
usebanner: {
dist: {
options: {
position: 'top',
banner: '/* <%= pkg.name %> version <%= pkg.version %> | MIT license */\n' +
'/* Built <%= grunt.template.today("yyyymmdd HH:mm") %> */',
linebreak: true
},
files: {
src: [ 'sphinx_rtd_theme/static/js/theme.js', 'sphinx_rtd_theme/static/css/theme.css' ]
}
}
},
exec: {
bower_update: {
cmd: 'bower update'
},
build_sphinx: {
cmd: 'sphinx-build docs/ docs/build'
}
},
clean: {
build: ["docs/build"],
fonts: ["sphinx_rtd_theme/static/fonts"],
css: ["sphinx_rtd_theme/static/css"],
js: ["sphinx_rtd_theme/static/js/*", "!sphinx_rtd_theme/static/js/modernizr.min.js"]
},
watch: {
/* Compile sass changes into theme directory */
sass: {
files: ['sass/*.sass', 'bower_components/**/*.sass'],
tasks: ['sass:dev']
},
/* Changes in theme dir rebuild sphinx */
sphinx: {
files: ['sphinx_rtd_theme/**/*', 'README.rst', 'docs/**/*.rst', 'docs/**/*.py'],
tasks: ['clean:build','exec:build_sphinx']
},
/* JavaScript */
browserify: {
files: ['js/*.js'],
tasks: ['browserify:dev']
},
/* live-reload the docs if sphinx re-builds */
livereload: {
files: ['docs/build/**/*'],
options: { livereload: true }
}
}
});
grunt.loadNpmTasks('grunt-exec');
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-sass');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-open');
grunt.loadNpmTasks('grunt-browserify');
grunt.registerTask('default', ['exec:bower_update','clean','copy:fonts','sass:dev','browserify:dev','usebanner','exec:build_sphinx','connect','open','watch']);
grunt.registerTask('build', ['exec:bower_update','clean','copy:fonts','sass:build','browserify:build','uglify','usebanner','exec:build_sphinx']);
}

20
LICENSE Normal file
View File

@ -0,0 +1,20 @@
The MIT License (MIT)
Copyright (c) 2013-2018 Dave Snider, Read the Docs, Inc. & contributors
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

13
MANIFEST.in Normal file
View File

@ -0,0 +1,13 @@
include *.txt
include LICENSE
recursive-include sphinx_rtd_theme *.conf
recursive-include sphinx_rtd_theme *.css
recursive-include sphinx_rtd_theme *.eot
recursive-include sphinx_rtd_theme *.html
recursive-include sphinx_rtd_theme *.js
recursive-include sphinx_rtd_theme *.svg
recursive-include sphinx_rtd_theme *.ttf
recursive-include sphinx_rtd_theme *.woff
recursive-include sphinx_rtd_theme *.woff2
recursive-include tests *.py
recursive-include tests *.rst

96
OFL-License.txt Normal file
View File

@ -0,0 +1,96 @@
sphinx_rtd_theme/static/fonts/Lato/*
Copyright (c) 2010-2015, Łukasz Dziedzic (dziedzic@typoland.com),
with Reserved Font Name Lato.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

54
README.rst Normal file
View File

@ -0,0 +1,54 @@
**************************
Read the Docs Sphinx Theme
**************************
.. image:: https://img.shields.io/pypi/v/sphinx_rtd_theme.svg
:target: https://pypi.python.org/pypi/sphinx_rtd_theme
:alt: Pypi Version
.. image:: https://travis-ci.org/rtfd/sphinx_rtd_theme.svg?branch=master
:target: https://travis-ci.org/rtfd/sphinx_rtd_theme
:alt: Build Status
.. image:: https://img.shields.io/pypi/l/sphinx_rtd_theme.svg
:target: https://pypi.python.org/pypi/sphinx_rtd_theme/
:alt: License
.. image:: https://readthedocs.org/projects/sphinx-rtd-theme/badge/?version=latest
:target: http://sphinx-rtd-theme.readthedocs.io/en/latest/?badge=latest
:alt: Documentation Status
The ``sphinx_rtd_theme`` is a sphinx_ theme designed to look modern and be mobile-friendly.
This theme is primarily focused to be used on readthedocs.org_ but can work with your
own sphinx projects. To read more and see a working demo_ head over to readthedocs.org_.
.. _sphinx: http://www.sphinx-doc.org
.. _readthedocs.org: http://www.readthedocs.org
.. _demo: https://sphinx-rtd-theme.readthedocs.io/en/latest/
Installing
==========
The theme is distributed on PyPI_ and can be installed with pip::
pip install sphinx_rtd_theme
For more information read the full installing docs
`here <https://sphinx-rtd-theme.readthedocs.io/en/latest/installing.html>`__.
.. _PyPI: https://pypi.python.org/pypi/sphinx_rtd_theme
Configuration
=============
The ``sphinx_rtd_theme`` is highly customizable on both the page level and on a global level.
To see all the possible configuration options read the configuring docs
`here <https://sphinx-rtd-theme.readthedocs.io/en/latest/configuring.html>`__.
Contributing
============
If you would like to help improve the theme or have more control
over the theme in case of a fork please read our contributing guide
`here <https://sphinx-rtd-theme.readthedocs.io/en/latest/contributing.html>`__.

37
bower.json Normal file
View File

@ -0,0 +1,37 @@
{
"name": "sphinx-rtd-theme",
"version": "0.4.3",
"homepage": "https://github.com/rtfd/sphinx_rtd_theme",
"authors": [
"Dave Snider, Read the Docs, Inc. & contributors <dev@readthedocs.org>"
],
"description": "Sphinx theme for readthedocs.org.",
"license": "MIT",
"main": [
"js/theme.js"
],
"ignore": [
"docs",
".gitignore",
".DS_Store",
".sass-cache*",
".bowerrc",
"bower.json",
"package.json",
"Gruntfile.js",
"node_modules",
"bower_components",
"test",
"tests",
"src"
],
"devDependencies": {
"wyrm": "~1.0.x"
},
"dependencies": {
"font-awesome": "~4.7"
},
"resolutions": {
"font-awesome": "~4.7"
}
}

20
docs/Makefile Normal file
View File

@ -0,0 +1,20 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
SPHINXPROJ = ReadtheDocsSphinxTheme
SOURCEDIR = .
BUILDDIR = build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

210
docs/changelog.rst Normal file
View File

@ -0,0 +1,210 @@
*********
Changelog
*********
master
======
New Features
-------------
Fixes
-----
Other Changes
--------------
0.4.3
======
:Date: Feb 12, 2019
New Features
-------------
Fixes
-----
* Fix scrolling to active item in sidebar on load (#214)
* Style caption link for code and literal blocks
* Fix inconsistent font size and line height for autodoc "raises" and "returns" (#267)
* Fix last_updated notice appearing in same line as copyright notice (#704)
Other Changes
--------------
v0.4.2
======
:Date: Oct 5, 2018
New Features
-------------
Fixes
-----
* Set base font size on <html> (#668)
* Fix HTML search not working with Sphinx-1.8 (#672)
Other Changes
--------------
* Upload signed packages to PyPI with twine (#651)
* Do not enforce period at the end of copyright statement (666)
v0.4.1
======
:Date: July 27, 2018
New Features
-------------
Fixes
-----
* Line height adjustments for Liberation Mono (#656)
Other Changes
--------------
* Add Sphinx as a dependency
v0.4.0
======
This version made some changes to how JS and CSS were included
when the theme is used on Read the Docs.
New Features
-------------
Fixes
-----
* Do not rely on readthedocs.org for CSS/JS (#614)
* Color accessibility improvements on the left navigation
Other Changes
--------------
* Write theme version and build date at top of JavaScript and CSS
* Changed code and literals to use a native font stack (#612)
* Fix small styling issues
v0.3.1
======
Fixes
-----
* Revert part of #576 causing display issues with version selector menu
* Backwards compatibility fixes for pre-0.3.0 releases (#623)
* Fix mkdocs version selector (#622)
* Add open list spacing (#591)
* Fix table centering (#599)
v0.3.0
======
**Note**: this version resulted in some JavaScript incompatibilities when used on readthedocs.org
New Features
-------------
* Add html language attribute
* Allow setting 'rel' and 'title' attributes for stylesheets (#551)
* Add option to style external links
* Add github, gitlab, bitbucket page arguments option
* Add pygments support
* Add setuptools entry point allowing to use ``sphinx_rtd_theme`` as
Sphinx ``html_theme`` directly.
* Add language to the JS output variable
Fixes
-----
* Fix some HTML warnings and errors
* Fix many styling issues
* Fix many sidebar glitches
* Fix line number spacing to align with the code lines
* Hide Edit links on auto created pages
* Include missing font files with the theme
Other Changes
--------------
* Significant improvement of our documentation
* Compress our Javascript files
* Updated dependencies
v0.2.4
======
* Yet another patch to deal with extra builders outside Spinx, such as the
singlehtml builders from the Read the Docs Sphinx extension
v0.2.3
======
* Temporarily patch Sphinx issue with ``singlehtml`` builder by inspecting the
builder in template.
v0.2.2
======
* Roll back toctree fix in 0.2.1 (#367). This didn't fix the issue and
introduced another bug with toctrees display.
v0.2.1
======
* Add the ``rel`` HTML attribute to the footer links which point to
the previous and next pages.
* Fix toctree issue caused by Sphinx singlehtml builder (#367)
v0.2.0
======
* Adds the ``comments`` block after the ``body`` block in the template
* Added "Edit on GitLab" support
* Many bug fixes
v0.1.10-alpha
=============
.. note:: This is a pre-release version
* Removes Sphinx dependency
* Fixes hamburger on mobile display
* Adds a ``body_begin`` block to the template
* Added ``prev_next_buttons_location``
v0.1.9
======
* Intermittent scrollbar visibility bug fixed. This change introduces a
backwards incompatible change to the theme's layout HTML. This should only be
a problem for derivative themes that have overridden styling of nav elements
using direct descendant selectors. See `#215`_ for more information.
* Safari overscroll bug fixed
* Version added to the nav header
* Revision id was added to the documentation footer if you are using RTD
* An extra block, ``extrafooter`` was added to allow extra content in the
document footer block
* Fixed modernizr URL
* Small display style changes on code blocks, figure captions, and nav elements
.. _#215: https://github.com/rtfd/sphinx_rtd_theme/pull/215
v0.1.8
======
* Start keeping changelog :)
* Support for third and fourth level headers in the sidebar
* Add support for Sphinx 1.3
* Add sidebar headers for :caption: in Sphinx toctree
* Clean up sidebar scrolling behavior so it never scrolls out of view

92
docs/conf.py Normal file
View File

@ -0,0 +1,92 @@
# -*- coding: utf-8 -*-
import sys
import os
import re
sys.path.append(os.path.abspath('..'))
sys.path.append(os.path.abspath('./demo/'))
from sphinx.locale import _
from sphinx_rtd_theme import __version__
project = u'Read the Docs Sphinx Theme'
slug = re.sub(r'\W+', '-', project.lower())
version = __version__
release = __version__
author = u'Dave Snider, Read the Docs, Inc. & contributors'
copyright = author
language = 'en'
extensions = [
'sphinx.ext.intersphinx',
'sphinx.ext.autodoc',
'sphinx.ext.mathjax',
'sphinx.ext.viewcode',
'sphinxcontrib.httpdomain',
]
templates_path = ['_templates']
source_suffix = '.rst'
exclude_patterns = []
master_doc = 'index'
suppress_warnings = ['image.nonlocal_uri']
pygments_style = 'default'
intersphinx_mapping = {
'rtd': ('https://docs.readthedocs.io/en/latest/', None),
'sphinx': ('http://www.sphinx-doc.org/en/stable/', None),
}
html_theme = 'sphinx_rtd_theme'
html_theme_options = {
'logo_only': True
}
html_theme_path = ["../.."]
html_logo = "demo/static/logo-wordmark-light.svg"
html_show_sourcelink = True
htmlhelp_basename = slug
latex_documents = [
('index', '{0}.tex'.format(slug), project, author, 'manual'),
]
man_pages = [
('index', slug, project, [author], 1)
]
texinfo_documents = [
('index', slug, project, author, slug, project, 'Miscellaneous'),
]
# Extensions to theme docs
def setup(app):
from sphinx.domains.python import PyField
from sphinx.util.docfields import Field
app.add_object_type(
'confval',
'confval',
objname='configuration value',
indextemplate='pair: %s; configuration value',
doc_field_types=[
PyField(
'type',
label=_('Type'),
has_arg=False,
names=('type',),
bodyrolename='class'
),
Field(
'default',
label=_('Default'),
has_arg=False,
names=('default',),
),
]
)

226
docs/configuring.rst Normal file
View File

@ -0,0 +1,226 @@
*************
Configuration
*************
Theme options
=============
The following options can be defined in your project's ``conf.py`` file, using
the :confval:`html_theme_options <sphinx:html_theme_options>` configuration option.
For example:
.. code:: python
html_theme_options = {
'canonical_url': '',
'analytics_id': 'UA-XXXXXXX-1', # Provided by Google in your dashboard
'logo_only': False,
'display_version': True,
'prev_next_buttons_location': 'bottom',
'style_external_links': False,
'vcs_pageview_mode': '',
'style_nav_header_background': 'white',
# Toc options
'collapse_navigation': True,
'sticky_navigation': True,
'navigation_depth': 4,
'includehidden': True,
'titles_only': False
}
Table of contents options
-------------------------
The following options change how :rst:dir:`sphinx:toctree` directives generate
documentation navigation.
.. confval:: collapse_navigation
:type: boolean
:default: ``True``
With this enabled, navigation entries are not expandable -- the ``[+]``
icons next to each entry are removed.
.. confval:: sticky_navigation
:type: boolean
:default: ``True``
Scroll the navigation with the main page content as you scroll the page.
.. confval:: navigation_depth
:type: integer
:default: ``4``
The maximum depth of the table of contents tree. Set
this to ``-1`` to allow unlimited depth.
.. confval:: includehidden
:type: boolean
:default: ``True``
Specifies if the navigation includes hidden table(s) of contents -- that is,
any :rst:dir:`sphinx:toctree` directive that is marked with the ``:hidden:``
option.
.. confval:: titles_only
:type: boolean
:default: False
When enabled, page subheadings are not included in the
navigation.
.. note::
Setting :confval:`collapse_navigation` to ``False`` and using a high value
for :confval:`navigation_depth` on projects with many files and a deep file
structure can cause long compilation times and can result in HTML files that
are significantly larger in file size.
.. _table of contents configuration options: http://www.sphinx-doc.org/en/stable/templating.html#toctree
..
TODO
.
HTML context options
~~~~~~~~~~~~~~~~~~~~
Miscellaneous options
---------------------
.. confval:: analytics_id
:type: string
Change the Google Analytics ID that is included on pages.
.. warning::
This configuration option is not yet used.
.. confval:: canonical_url
:type: URL
This will specify a `canonical URL`_ meta link element to tell search
engines which URL should be ranked as the primary URL for your
documentation. This is important if you have multiple URLs that your
documentation is available through. The URL points to the root path of the
documentation and requires a trailing slash.
.. confval:: display_version
:type: boolean
:default: ``True``
If ``True``, the version number is shown at the top of the sidebar.
.. confval:: logo_only
:type: boolean
:default: ``False``
Only display the logo image, do not display the project name at the top of
the sidebar
.. confval:: prev_next_buttons_location
:type: string
:default: ``bottom``
Location to display :guilabel:`Next` and :guilabel:`Previous` buttons. This
can be either ``bottom``, ``top``, ``both`` , or ``None``.
.. confval:: style_external_links
:type: boolean
:default: ``False``
Add an icon next to external links.
.. confval:: vcs_pageview_mode
:type: string
:default: ``blob`` or ``view``
Changes how to view files when using ``display_github``, ``display_gitlab``,
etc. When using GitHub or GitLab this can be: ``blob`` (default), ``edit``,
or ``raw``. On Bitbucket, this can be either: ``view`` (default) or
``edit``.
.. confval:: style_nav_header_background
:type: string
:default: ``#2980B9``
Changes the background of the search area in the navigation bar. The value
can be anything valid in a CSS `background` property.
.. _canonical URL: https://en.wikipedia.org/wiki/Canonical_link_element
File-wide metadata
==================
The following options can be used as :ref:`file-wide metadata
<sphinx:metadata>`:
.. confval:: github_url
Force the :guilabel:`Edit on GitHub` button to use the configured URL.
.. confval:: bitbucket_url
Force the :guilabel:`Edit on Bitbucket` button to use the configured URL.
.. confval:: gitlab_url
Force the :guilabel:`Edit on GitLab` button to use the configured URL.
Other configuration
===================
Adding a logo
-------------
Using the Sphinx standard option :py:confval:`html_logo <sphinx:html_logo>`,
you can set an image file to be used as a logo at the top of the sidebar. The
theme option :py:confval:`logo_only` also allows for *only* the logo to be shown
at the top of the sidebar.
Adding custom CSS or Javascript
-------------------------------
Adding custom CSS or Javascript can help you alter the look and feel of this
theme without forking the theme for local use.
In order to add custom CSS or Javascript without disrupting the existing theme
files, you can :doc:`add files to be included in your documentation output
<rtd:guides/adding-custom-css>`.
How the table of contents displays
==================================
Currently the left menu will build based upon any ``toctree`` directives defined
in your source files. It outputs 4 levels of depth by default, to allow for
quick navigation through topics. If no TOC trees are defined, Sphinx's default
behavior is to use the page headings instead.
It's important to note that if you don't follow the same styling for your reST
headings across your documents, the TOC tree will build incorrectly, and the
resulting menu might not show the correct depth when it renders.
Also note that by default the table of contents is set with
``includehidden=True``. This allows you to set a hidden TOC in your index file
with the :ref:`:hidden: <sphinx:toctree-directive>` property that will allow you
to build a TOC without it rendering in your index.
By default, the navigation will "stick" to the screen as you scroll. However if
your TOC is not tall enough, it will revert to static positioning. To disable the
sticky navigation altogether, change the :confval:`sticky_navigation` theme option.

89
docs/contributing.rst Normal file
View File

@ -0,0 +1,89 @@
***********************************
Contributing or modifying the theme
***********************************
The sphinx_rtd_theme is primarily a sass_ project that requires a few other sass libraries. I'm
using bower_ to manage these dependencies and sass_ to build the css. The good news is
I have a very nice set of grunt_ operations that will not only load these dependencies, but watch
for changes, rebuild the sphinx demo docs and build a distributable version of the theme.
The bad news is this means you'll need to set up your environment similar to that
of a front-end developer (vs. that of a python developer). That means installing node and ruby.
.. seealso::
If you are unsure of appropriate actions to take while interacting with our
community please read our :doc:`Code of Conduct <rtd:code-of-conduct>`.
Set up your environment
=======================
#. Install sphinx_ into a virtual environment.
.. code:: bash
pip install sphinx sphinxcontrib-httpdomain
#. Install sass.
.. code:: bash
gem install sass
#. Install node, bower, grunt, and theme dependencies.
.. code:: bash
# Install node
brew install node
# Install bower and grunt
npm install -g bower grunt-cli
# Now that everything is installed, let's install the theme dependencies.
npm install
Now that our environment is set up, make sure you're in your virtual environment, go to
this repository in your terminal and run grunt:
.. code::
grunt
This default task will do the following **very cool things that make it worth the trouble**:
#. Install and update any bower dependencies.
#. Run sphinx and build new docs.
#. Watch for changes to the sass files and build css from the changes.
#. Rebuild the sphinx docs anytime it notices a change to ``.rst``, ``.html``, ``.js``
or ``.css`` files.
.. _bower: http://www.bower.io
.. _sass: http://www.sass-lang.com
.. _wyrm: http://www.github.com/snide/wyrm/
.. _grunt: http://www.gruntjs.com
.. _node: http://www.nodejs.com
.. _sphinx: http://www.sphinx-doc.org/en/stable/
Releasing the Theme
===================
When you release a new version,
you should do the following:
#. Bump the version in ``sphinx_rtd_theme/__init__.py``, ``bower.json`` and ``package.json`` --
we try to follow `semver <http://semver.org/>`_, so be careful with breaking changes.
#. Update the changelog (``docs/changelog.rst``) with the version information.
#. Run a ``grunt build`` to rebuild all the theme assets.
#. Commit that change.
#. Tag the release in git: ``git tag $NEW_VERSION``.
#. Push the tag to GitHub: ``git push --tags origin``.
#. Upload the package to PyPI:
.. code:: bash
$ rm -rf dist/
$ python setup.py sdist bdist_wheel
$ twine upload --sign --identity security@readthedocs.org dist/*

53
docs/demo/api.rst Normal file
View File

@ -0,0 +1,53 @@
*********************
:mod:`test_py_module`
*********************
.. contents:: Table of Contents
.. automodule:: test_py_module.test
:members:
:private-members:
:special-members:
Generated Index
===============
Part of the sphinx build process in generate and index file: :ref:`genindex`.
Optional parameter args
=======================
At this point optional parameters `cannot be generated from code`_.
However, some projects will manually do it, like so:
This example comes from `django-payments module docs`_.
.. class:: payments.dotpay.DotpayProvider(seller_id, pin[, channel=0[, lock=False], lang='pl'])
This backend implements payments using a popular Polish gateway, `Dotpay.pl <http://www.dotpay.pl>`_.
Due to API limitations there is no support for transferring purchased items.
:param seller_id: Seller ID assigned by Dotpay
:param pin: PIN assigned by Dotpay
:param channel: Default payment channel (consult reference guide)
:param lang: UI language
:param lock: Whether to disable channels other than the default selected above
.. _cannot be generated from code: https://groups.google.com/forum/#!topic/sphinx-users/_qfsVT5Vxpw
.. _django-payments module docs: http://django-payments.readthedocs.org/en/latest/modules.html#payments.authorizenet.AuthorizeNetProvide
Data
====
.. data:: Data_item_1
Data_item_2
Data_item_3
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce congue elit eu hendrerit mattis.
Some data link :data:`Data_item_1`.

475
docs/demo/demo.rst Normal file
View File

@ -0,0 +1,475 @@
.. This is a comment. Note how any initial comments are moved by
transforms to after the document title, subtitle, and docinfo.
.. demo.rst from: http://docutils.sourceforge.net/docs/user/rst/demo.txt
.. |EXAMPLE| image:: static/yi_jing_01_chien.jpg
:width: 1em
**********************
Paragraph Level Markup
**********************
.. contents:: Table of Contents
Inline Markup
=============
Paragraphs contain text and may contain inline markup: *emphasis*, **strong emphasis**, ``inline literals``,
standalone hyperlinks (http://www.python.org), external hyperlinks (Python_), internal cross-references (example_),
external hyperlinks with embedded URIs (`Python web site <http://www.python.org>`__), footnote references
(manually numbered [1]_, anonymous auto-numbered [#]_, labeled auto-numbered [#label]_, or symbolic [*]_),
citation references ([12]_), substitution references (|example|), and _`inline hyperlink targets`
(see Targets_ below for a reference back to here). Character-level inline markup is also possible
(although exceedingly ugly!) in *re*\ ``Structured``\ *Text*. Problems are indicated by |problematic|
text (generated by processing errors; this one is intentional).
Also with ``sphinx.ext.autodoc``, which I use in the demo, I can link to :class:`test_py_module.test.Foo`.
It will link you right my code documentation for it.
The default role for interpreted text is `Title Reference`. Here are some explicit interpreted text roles:
a PEP reference (:PEP:`287`); an RFC reference (:RFC:`2822`); a :sub:`subscript`; a :sup:`superscript`;
and explicit roles for :emphasis:`standard` :strong:`inline` :literal:`markup`.
GUI labels are a useful way to indicate that :guilabel:`Some action` is to be taken by the user.
The GUI label should not run over ``line-height`` so as not to :guilabel:`interfere` with text from adjacent lines.
Key-bindings indicate that the read is to press a button on the keyboard or mouse,
for example :kbd:`MMB` and :kbd:`Shift-MMB`. Another useful markup to indicate a user action
is to use ``menuselection`` this can be used to show short and long menus in software.
For example, and ``menuselection`` can be seen here that breaks is too long to fit on this line.
:menuselection:`My --> Software --> Some menu --> Some sub menu 1 --> sub menu 2`.
.. DO NOT RE-WRAP THE FOLLOWING PARAGRAPH!
Let's test wrapping and whitespace significance in inline literals:
``This is an example of --inline-literal --text, --including some--
strangely--hyphenated-words. Adjust-the-width-of-your-browser-window
to see how the text is wrapped. -- ---- -------- Now note the
spacing between the words of this sentence (words
should be grouped in pairs).``
If the ``--pep-references`` option was supplied, there should be a live link to PEP 258 here.
Math
====
This is a test. Here is an equation:
:math:`X_{0:5} = (X_0, X_1, X_2, X_3, X_4)`.
Here is another:
.. math::
:label: This is a label
\nabla^2 f =
\frac{1}{r^2} \frac{\partial}{\partial r}
\left( r^2 \frac{\partial f}{\partial r} \right) +
\frac{1}{r^2 \sin \theta} \frac{\partial f}{\partial \theta}
\left( \sin \theta \, \frac{\partial f}{\partial \theta} \right) +
\frac{1}{r^2 \sin^2\theta} \frac{\partial^2 f}{\partial \phi^2}
You can add a link to equations like the one above :eq:`This is a label` by using ``:eq:``.
Meta
====
.. meta::
:keywords: reStructuredText, demonstration, demo, parser
:description lang=en: A demonstration of the reStructuredText
markup language, containing examples of all basic
constructs and many advanced constructs.
Blocks
======
Literal Blocks
--------------
Literal blocks are indicated with a double-colon ("::") at the end of
the preceding paragraph (over there ``-->``). They can be indented::
if literal_block:
text = 'is left as-is'
spaces_and_linebreaks = 'are preserved'
markup_processing = None
Or they can be quoted without indentation::
>> Great idea!
>
> Why didn't I think of that?
Line Blocks
-----------
| This is a line block. It ends with a blank line.
| Each new line begins with a vertical bar ("|").
| Line breaks and initial indents are preserved.
| Continuation lines are wrapped portions of long lines;
they begin with a space in place of the vertical bar.
| The left edge of a continuation line need not be aligned with
the left edge of the text above it.
| This is a second line block.
|
| Blank lines are permitted internally, but they must begin with a "|".
Take it away, Eric the Orchestra Leader!
| A one, two, a one two three four
|
| Half a bee, philosophically,
| must, *ipso facto*, half not be.
| But half the bee has got to be,
| *vis a vis* its entity. D'you see?
|
| But can a bee be said to be
| or not to be an entire bee,
| when half the bee is not a bee,
| due to some ancient injury?
|
| Singing...
Block Quotes
------------
Block quotes consist of indented body elements:
My theory by A. Elk. Brackets Miss, brackets. This theory goes
as follows and begins now. All brontosauruses are thin at one
end, much much thicker in the middle and then thin again at the
far end. That is my theory, it is mine, and belongs to me and I
own it, and what it is too.
-- Anne Elk (Miss)
Doctest Blocks
--------------
>>> print 'Python-specific usage examples; begun with ">>>"'
Python-specific usage examples; begun with ">>>"
>>> print '(cut and pasted from interactive Python sessions)'
(cut and pasted from interactive Python sessions)
Code Blocks
-----------
.. parsed-literal::
# parsed-literal test
curl -O http://someurl/release-|version|.tar-gz
.. code-block:: json
:caption: Code Blocks can have captions.
{
"windows": [
{
"panes": [
{
"shell_command": [
"echo 'did you know'",
"echo 'you can inline'"
]
},
{
"shell_command": "echo 'single commands'"
},
"echo 'for panes'"
],
"window_name": "long form"
}
],
"session_name": "shorthands"
}
Emphasized lines with line numbers
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
:linenos:
:emphasize-lines: 3,5
def some_function():
interesting = False
print 'This line is highlighted.'
print 'This one is not...'
print '...but this one is.'
Sidebar
=======
.. sidebar:: Ch'ien / The Creative
.. image:: static/yi_jing_01_chien.jpg
*Above* CH'IEN THE CREATIVE, HEAVEN
*Below* CH'IEN THE CREATIVE, HEAVEN
The first hexagram is made up of six unbroken lines. These unbroken lines stand for the primal power,
which is light-giving, active, strong, and of the spirit. The hexagram is consistently strong in character,
and since it is without weakness, its essence is power or energy. Its image is heaven.
Its energy is represented as unrestricted by any fixed conditions in space and is therefore conceived of as motion.
Time is regarded as the basis of this motion.
Thus the hexagram includes also the power of time and the power of persisting in time, that is, duration.
The power represented by the hexagram is to be interpreted in a dual sense in terms of its action
on the universe and of its action on the world of men. In relation to the universe, the hexagram expresses the strong,
creative action of the Deity. In relation to the human world, it denotes the creative action of the holy man or sage,
of the ruler or leader of men, who through his power awakens and develops their higher nature.
Code with Sidebar
-----------------
.. sidebar:: A code example
With a sidebar on the right.
.. literalinclude:: test_py_module/test.py
:language: python
:caption: Literal includes can also have captions.
:linenos:
:lines: 1-40
References
==========
Footnotes
---------
.. [1] A footnote contains body elements, consistently indented by at
least 3 spaces.
This is the footnote's second paragraph.
.. [#label] Footnotes may be numbered, either manually (as in [1]_) or
automatically using a "#"-prefixed label. This footnote has a
label so it can be referred to from multiple places, both as a
footnote reference ([#label]_) and as a hyperlink reference
(label_).
.. [#] This footnote is numbered automatically and anonymously using a
label of "#" only.
.. [*] Footnotes may also use symbols, specified with a "*" label.
Here's a reference to the next footnote: [*]_.
.. [*] This footnote shows the next symbol in the sequence.
.. [4] Here's an unreferenced footnote, with a reference to a
nonexistent footnote: [5]_.
Citations
---------
.. [11] This is the citation I made, let's make this extremely long so that we can tell that it doesn't follow the normal responsive table stuff.
.. [12] This citation has some ``code blocks`` in it, maybe some **bold** and
*italics* too. Heck, lets put a link to a meta citation [13]_ too.
.. [13] This citation will have two backlinks.
Here's a reference to the above, [12]_, and a [nonexistent]_ citation.
Here is another type of citation: `citation`
Glossary
--------
This is a glossary with definition terms for thing like :term:`Writing`:
.. glossary::
Documentation
Provides users with the knowledge they need to use something.
Reading
The process of taking information into ones mind through the use of eyes.
Writing
The process of putting thoughts into a medium for other people to :term:`read <Reading>`.
Targets
-------
.. _example:
This paragraph is pointed to by the explicit "example" target.
A reference can be found under `Inline Markup`_, above. `Inline
hyperlink targets`_ are also possible.
Section headers are implicit targets, referred to by name. See
Targets_, which is a subsection of `Body Elements`_.
Explicit external targets are interpolated into references such as "Python_".
.. _Python: http://www.python.org/
Targets may be indirect and anonymous. Thus `this phrase`__ may also
refer to the Targets_ section.
__ Targets_
Here's a `hyperlink reference without a target`_, which generates an error.
Directives
==========
Contents
--------
.. contents:: :local:
These are just a sample of the many reStructuredText Directives. For others, please see:
http://docutils.sourceforge.net/docs/ref/rst/directives.html.
Centered text
-------------
You can create a statement with centered text with ``.. centered::``
.. centered:: This is centered text!
Images & Figures
----------------
Images
^^^^^^
An image directive (also clickable -- a hyperlink reference):
.. image:: static/yi_jing_01_chien.jpg
:target: directives_
Figures
^^^^^^^
.. figure:: static/yi_jing_01_chien.jpg
:alt: reStructuredText, the markup syntax
A figure is an image with a caption and/or a legend:
+------------+-----------------------------------------------+
| re | Revised, revisited, based on 're' module. |
+------------+-----------------------------------------------+
| Structured | Structure-enhanced text, structuredtext. |
+------------+-----------------------------------------------+
| Text | Well it is, isn't it? |
+------------+-----------------------------------------------+
This paragraph is also part of the legend.
A figure directive with center alignment
.. figure:: static/yi_jing_01_chien.jpg
:align: center
This caption should be centered.
Admonitions
-----------
.. Attention:: Directives at large.
.. Caution:: Don't take any wooden nickels.
.. DANGER:: Mad scientist at work!
.. Error:: Does not compute.
.. Hint:: It's bigger than a bread box.
.. Important::
- Wash behind your ears.
- Clean up your room.
- Including the closet.
- The bathroom too.
- Take the trash out of the bathroom.
- Clean the sink.
- Call your mother.
- Back up your data.
.. Note:: This is a note.
Equations within a note:
:math:`G_{\mu\nu} = 8 \pi G (T_{\mu\nu} + \rho_\Lambda g_{\mu\nu})`.
.. Tip:: 15% if the service is good.
+---------+
| Example |
+=========+
| Thing1 |
+---------+
| Thing2 |
+---------+
| Thing3 |
+---------+
.. WARNING:: Strong prose may provoke extreme mental exertion.
Reader discretion is strongly advised.
.. admonition:: And, by the way...
You can make up your own admonition too.
Topics, Sidebars, and Rubrics
-----------------------------
.. sidebar:: Sidebar Title
:subtitle: Optional Subtitle
This is a sidebar. It is for text outside the flow of the main
text.
.. rubric:: This is a rubric inside a sidebar
Sidebars often appears beside the main text with a border and
background color.
.. topic:: Topic Title
This is a topic.
.. rubric:: This is a rubric
Target Footnotes
----------------
.. target-notes::
Replacement Text
----------------
I recommend you try |Python|_.
.. |Python| replace:: Python, *the* best language around
Compound Paragraph
------------------
.. compound::
This paragraph contains a literal block::
Connecting... OK
Transmitting data... OK
Disconnecting... OK
and thus consists of a simple paragraph, a literal block, and
another simple paragraph. Nonetheless it is semantically *one*
paragraph.
This construct is called a *compound paragraph* and can be produced
with the "compound" directive.
Download Links
==============
:download:`This long long long long long long long long long long long long long long long download link should be blue, normal weight text with a leading icon, and should wrap white-spaces <static/yi_jing_01_chien.jpg>`

302
docs/demo/lists_tables.rst Normal file
View File

@ -0,0 +1,302 @@
**************
Lists & Tables
**************
.. contents:: Table of Contents
Lists
=====
Enumerated Lists
----------------
1. Arabic numerals.
a) lower alpha)
(i) (lower roman)
A. upper alpha.
I) upper roman)
2. Lists that don't start at 1:
3. Three
4. Four
C. C
D. D
iii. iii
iv. iv
#. List items may also be auto-enumerated.
Definition Lists
----------------
Term
Definition
Term : classifier
Definition paragraph 1.
Definition paragraph 2.
Term
Definition
Option Lists
------------
For listing command-line options:
-a command-line option "a"
-b file options can have arguments
and long descriptions
--long options can be long also
--input=file long options can also have
arguments
--very-long-option
The description can also start on the next line.
The description may contain multiple body elements,
regardless of where it starts.
-x, -y, -z Multiple options are an "option group".
-v, --verbose Commonly-seen: short & long options.
-1 file, --one=file, --two file
Multiple options with arguments.
/V DOS/VMS-style options too
There must be at least two spaces between the option and the description.
Field list
----------
.. bibliographic fields (which also require a transform):
:Author: David Goodger
:Address: 123 Example Street
Example, EX Canada
A1B 2C3
:Contact: docutils-develop@lists.sourceforge.net
:Authors: Me; Myself; I
:organization: humankind
:date: $Date: 2012-01-03 19:23:53 +0000 (Tue, 03 Jan 2012) $
:status: This is a "work in progress"
:revision: $Revision: 7302 $
:version: 1
:copyright: This document has been placed in the public domain. You
may do with it as you wish. You may copy, modify,
redistribute, reattribute, sell, buy, rent, lease,
destroy, or improve it, quote it at length, excerpt,
incorporate, collate, fold, staple, or mutilate it, or do
anything else to it that your or anyone else's heart
desires.
:field name: This is a generic bibliographic field.
:field name 2:
Generic bibliographic fields may contain multiple body elements.
Like this.
:Dedication:
For Docutils users & co-developers.
:abstract:
This document is a demonstration of the reStructuredText markup
language, containing examples of all basic reStructuredText
constructs and many advanced constructs.
Bullet Lists
------------
- A bullet list
+ Nested bullet list.
+ Nested item 2.
- Item 2.
Paragraph 2 of item 2.
* Nested bullet list.
* Nested item 2.
- Third level.
- Item 2.
* Nested item 3.
- ``inline literall``
- ``inline literall``
- ``inline literall``
Second list level
^^^^^^^^^^^^^^^^^
- here is a list in a second-level section.
- `yahoo <http://www.yahoo.com>`_
- `yahoo <http://www.yahoo.com>`_
- `yahoo <http://www.yahoo.com>`_
- here is an inner bullet ``oh``
- one more ``with an inline literally``. `yahoo <http://www.yahoo.com>`_
heh heh. child. try to beat this embed:
.. literalinclude:: test_py_module/test.py
:language: python
:linenos:
:lines: 1-10
- and another. `yahoo <http://www.yahoo.com>`_
- `yahoo <http://www.yahoo.com>`_
- ``hi``
- and hehe
But deeper down the rabbit hole
"""""""""""""""""""""""""""""""
- I kept saying that, "deeper down the rabbit hole". `yahoo <http://www.yahoo.com>`_
- I cackle at night `yahoo <http://www.yahoo.com>`_.
- I'm so lonely here in GZ ``guangzhou``
- A man of python destiny, hopes and dreams. `yahoo <http://www.yahoo.com>`_
- `yahoo <http://www.yahoo.com>`_
- `yahoo <http://www.yahoo.com>`_ ``hi``
- ``destiny``
Hlists
------
.. hlist::
:columns: 2
- First item
- Second item
- Third item
- Forth item
- Fifth item
- Sixths item
.. rubric:: Hlist with images
.. hlist::
:columns: 2
- .. figure:: static/yi_jing_01_chien.jpg
This is a short caption for a figure.
- .. figure:: static/yi_jing_01_chien.jpg
This is a long caption for a figure. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Donec porttitor dolor in odio posuere, vitae ornare libero mattis. In lobortis justo vestibulum nibh aliquet, non.
Numbered List
-------------
#. One,
#. Two.
#. Three with long text. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Sed feugiat sagittis neque quis eleifend. Duis rutrum lectus sit amet mattis suscipit.
- A) Using bullets and letters. (A)
- B) Using bullets and letters. (B)
- C) Using bullets and letters. (C)
Tables
======
Grid Tables
-----------
Here's a grid table followed by a simple table:
+------------------------+------------+----------+----------+
| Header row, column 1 | Header 2 | Header 3 | Header 4 |
| (header rows optional) | | | |
+========================+============+==========+==========+
| body row 1, column 1 | column 2 | column 3 | column 4 |
+------------------------+------------+----------+----------+
| body row 2 | Cells may span columns. |
+------------------------+------------+---------------------+
| body row 3 | Cells may | - Table cells |
+------------------------+ span rows. | - contain |
| body row 4 | | - body elements. |
+------------------------+------------+----------+----------+
| body row 5 | Cells may also be | |
| | empty: ``-->`` | |
+------------------------+-----------------------+----------+
===== ===== ======
Inputs Output
------------ ------
A B A or B
===== ===== ======
False False False
True False True
False True True
True True True
===== ===== ======
Giant Tables
^^^^^^^^^^^^
+------------+------------+-----------+------------+------------+-----------+------------+------------+-----------+------------+------------+-----------+
| Header 1 | Header 2 | Header 3 | Header 1 | Header 2 | Header 3 | Header 1 | Header 2 | Header 3 | Header 1 | Header 2 | Header 3 |
+============+============+===========+============+============+===========+============+============+===========+============+============+===========+
| body row 1 | column 2 | column 3 | body row 1 | column 2 | column 3 | body row 1 | column 2 | column 3 | body row 1 | column 2 | column 3 |
+------------+------------+-----------+------------+------------+-----------+------------+------------+-----------+------------+------------+-----------+
| body row 1 | column 2 | column 3 | body row 1 | column 2 | column 3 | body row 1 | column 2 | column 3 | body row 1 | column 2 | column 3 |
+------------+------------+-----------+------------+------------+-----------+------------+------------+-----------+------------+------------+-----------+
| body row 1 | column 2 | column 3 | body row 1 | column 2 | column 3 | body row 1 | column 2 | column 3 | body row 1 | column 2 | column 3 |
+------------+------------+-----------+------------+------------+-----------+------------+------------+-----------+------------+------------+-----------+
| body row 1 | column 2 | column 3 | body row 1 | column 2 | column 3 | body row 1 | column 2 | column 3 | body row 1 | column 2 | column 3 |
+------------+------------+-----------+------------+------------+-----------+------------+------------+-----------+------------+------------+-----------+
List Tables
-----------
.. list-table:: List tables can have captions like this one.
:widths: 10 5 10 50
:header-rows: 1
:stub-columns: 1
* - List table
- Header 1
- Header 2
- Header 3 long. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam sit amet mauris arcu.
* - Stub Row 1
- Row 1
- Column 2
- Column 3 long. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam sit amet mauris arcu.
* - Stub Row 2
- Row 2
- Column 2
- Column 3 long. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam sit amet mauris arcu.
* - Stub Row 3
- Row 3
- Column 2
- Column 3 long. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam sit amet mauris arcu.
.. list-table:: This is a list table with images in it.
* - .. figure:: static/yi_jing_01_chien.jpg
This is a short caption for a figure.
- .. figure:: static/yi_jing_01_chien.jpg
This is a long caption for a figure. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Donec porttitor dolor in odio posuere, vitae ornare libero mattis. In lobortis justo vestibulum nibh aliquet, non.

214
docs/demo/long.rst Normal file
View File

@ -0,0 +1,214 @@
***************
Long Sticky Nav
***************
.. contents:: Table of Contents
This section demonstrates how the 'sticky_navigation' setting behaves when the menu is very long.
When this section is selected, it will make the menu and the main area scroll when you are at the top of the page.
Example Menu 1
==============
Just a place holder...
Example Menu 2
==============
Just a place holder...
Example Menu 3
==============
Just a place holder...
Example Menu 4
==============
Just a place holder...
Example Menu 5
==============
Just a place holder...
Example Menu 6
==============
Just a place holder...
Example Menu 7
==============
Just a place holder...
Example Menu 8
==============
Just a place holder...
Example Menu 9
==============
Just a place holder...
Example Menu 10
===============
Just a place holder...
Example Menu 11
===============
Just a place holder...
Example Menu 12
===============
Just a place holder...
Example Menu 13
===============
Just a place holder...
Example Menu 14
===============
Just a place holder...
Example Menu 15
===============
Just a place holder...
Example Menu 16
===============
Just a place holder...
Example Menu 17
===============
Just a place holder...
Example Menu 18
===============
Just a place holder...
Example Menu 19
===============
Just a place holder...
Example Menu 20
===============
Just a place holder...
Example Submenu 1
=================
Just a place holder...
Submenu 1
---------
Just a place holder...
Subsubmenu 1
^^^^^^^^^^^^
Just a place holder...
Subsubmenu 2
^^^^^^^^^^^^
Just a place holder...
Submenu 2
---------
Just a place holder...
Subsubmenu 1
^^^^^^^^^^^^
Just a place holder...
Submenu 3
---------
Just a place holder...
Submenu 4
---------
Just a place holder...
Submenu 5
---------
Just a place holder...
Example Submenu 2
=================
Just a place holder...
Submenu 1
---------
Just a place holder...
Subsubmenu 1
^^^^^^^^^^^^
Just a place holder...
Submenu 2
---------
Just a place holder...
Subsubmenu 1
^^^^^^^^^^^^
Just a place holder...
Submenu 3
---------
Just a place holder...
Submenu 4
---------
Just a place holder...
Submenu 5
---------
Just a place holder...

View File

@ -0,0 +1,134 @@
<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="2000"
height="400"
id="svg5241"
version="1.1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="logo-wordmark-light.svg"
inkscape:export-filename="/Users/anthony/dev/readthedocs/guidelines/assets/logo-wordmark-light.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs5243" />
<sodipodi:namedview
id="base"
pagecolor="#32322a"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="0.70710678"
inkscape:cx="774.9861"
inkscape:cy="86.360425"
inkscape:document-units="px"
inkscape:current-layer="text5298"
showgrid="false"
inkscape:window-width="1366"
inkscape:window-height="723"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:window-maximized="0" />
<metadata
id="metadata5246">
<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:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-652.3622)">
<g
id="g5310"
transform="translate(-7.2877533,-6.3546821e-5)"
style="fill:#fafafa;fill-opacity:1">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/anthony/secure/docs/rtd/assets/rtd-logo-2.png"
transform="matrix(0.55753644,0,0,0.55753644,62.308135,1038.8762)"
id="g3990"
style="fill:#fafafa;fill-opacity:1" />
<g
id="g3878"
transform="matrix(8.4462802,0,0,8.4462802,-93.469267,-7827.1593)"
style="fill:#fafafa;fill-opacity:1">
<g
transform="matrix(0.55753644,0,0,0.55753644,68.308135,1050.1262)"
id="g3857"
style="fill:#fafafa;fill-opacity:1">
<path
id="path3929-8"
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#fafafa;fill-opacity:1;stroke:none;stroke-width:3.22848844999999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
d="M -67.28125,-41.59375 A 1.6144056,1.6144056 0 0 0 -67.5,-38.4375 c 0,0 3.931695,1.301049 10.625,1.84375 5.374689,0.435786 11.46875,-0.375 11.46875,-0.375 a 1.6144056,1.6144056 0 1 0 -0.40625,-3.1875 c 0,0 -5.961605,0.737066 -10.8125,0.34375 C -63.013171,-40.330461 -66.5,-41.5 -66.5,-41.5 a 1.6144056,1.6144056 0 0 0 -0.78125,-0.09375 z m 0,-8 A 1.6144056,1.6144056 0 0 0 -67.5,-46.4375 c 0,0 3.931695,1.301049 10.625,1.84375 5.374689,0.435786 11.46875,-0.375 11.46875,-0.375 a 1.6144056,1.6144056 0 1 0 -0.40625,-3.1875 c 0,0 -5.961605,0.737066 -10.8125,0.34375 C -63.013171,-48.330461 -66.5,-49.5 -66.5,-49.5 a 1.6144056,1.6144056 0 0 0 -0.78125,-0.09375 z m 0,-8 A 1.6144056,1.6144056 0 0 0 -67.5,-54.4375 c 0,0 3.931695,1.301049 10.625,1.84375 5.374689,0.435786 11.46875,-0.375 11.46875,-0.375 a 1.6144056,1.6144056 0 1 0 -0.40625,-3.1875 c 0,0 -5.961605,0.737066 -10.8125,0.34375 C -63.013171,-56.330461 -66.5,-57.5 -66.5,-57.5 a 1.6144056,1.6144056 0 0 0 -0.78125,-0.09375 z m 0,-8 A 1.6144056,1.6144056 0 0 0 -67.5,-62.4375 c 0,0 3.931695,1.301049 10.625,1.84375 5.374689,0.435786 11.46875,-0.375 11.46875,-0.375 a 1.6144056,1.6144056 0 1 0 -0.40625,-3.1875 c 0,0 -5.961605,0.737066 -10.8125,0.34375 C -63.013171,-64.330461 -66.5,-65.5 -66.5,-65.5 a 1.6144056,1.6144056 0 0 0 -0.78125,-0.09375 z m -11.207892,-8.437005 c -8.407221,0.05606 -11.539425,2.645057 -11.539425,2.645057 l 0,62.7837755 c 0,0 3.05858,-2.6415165 12.905554,-2.2381255 9.846974,0.403391 11.878255,3.8552765 23.979914,4.0983855 12.101659,0.243109 15.143679,-1.86026 15.143679,-1.86026 l 0.174399,-64.0045705 c 0,0 -5.446133,1.541392 -16.044742,1.627727 -10.598609,0.08634 -13.146074,-2.696144 -22.875385,-3.022922 -0.608082,-0.02042 -1.183512,-0.0328 -1.743994,-0.02907 z m 7.034109,4.098386 c 0,0 5.094376,1.68402 14.504214,2.150925 7.953019,0.39462 15.928477,-0.784797 15.928477,-0.784797 l 0,56.883263 c 0,0 -4.036665,2.1158549 -14.12635,1.395195 -7.819331,-0.558499 -16.422608,-3.517054 -16.422608,-3.517054 l 0.116267,-56.127532 z m -4.912249,1.482394 a 1.6277275,1.6277275 0 0 1 0,3.255455 c 0,0 -2.634985,0.01353 -4.243719,0.1744 -2.701025,0.270103 -4.534383,1.249862 -4.534383,1.249862 a 1.6251955,1.6251955 0 1 1 -1.511462,-2.87759 c 0,0 2.391605,-1.26521 5.726113,-1.598661 1.926801,-0.192699 4.563451,-0.203466 4.563451,-0.203466 z m -1.569595,8.022372 c 0.899775,-0.02279 1.569595,0 1.569595,0 a 1.625,1.625 0 0 1 0,3.226388 c 0,0 -2.634985,0.01352 -4.243719,0.174399 -2.701025,0.270104 -4.534383,1.249863 -4.534383,1.249863 a 1.6251955,1.6251955 0 0 1 -1.511462,-2.87759 c 0,0 2.391605,-1.26521 5.726113,-1.598661 0.963401,-0.09635 2.094081,-0.151612 2.993856,-0.174399 z m 1.569595,7.993304 a 1.6277275,1.6277275 0 0 1 0,3.255455 c 0,0 -2.634985,-0.01554 -4.243719,0.145333 -2.701025,0.270103 -4.534383,1.249862 -4.534383,1.249862 a 1.6251952,1.6251952 0 0 1 -1.511462,-2.877589 c 0,0 2.391605,-1.265211 5.726113,-1.598661 1.926801,-0.1927 4.563451,-0.1744 4.563451,-0.1744 z"
inkscape:connector-curvature="0" />
</g>
<g
style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:-1.99000001px;word-spacing:0px;fill:#fafafa;stroke:none;font-family:Bitter;-inkscape-font-specification:Bitter"
id="text5298">
<path
d="m 63.380232,1038.8522 0,-2.592 1.056,-0.096 c 0.618664,-0.064 0.927997,-0.3627 0.928,-0.896 l 0,-14.88 -1.824,-0.096 0,-2.72 8.736,0 c 2.474654,0 4.373319,0.4587 5.696,1.376 1.322649,0.9173 1.983982,2.4213 1.984,4.512 -1.8e-5,1.4507 -0.384018,2.6453 -1.152,3.584 -0.746683,0.9387 -1.642682,1.6213 -2.688,2.048 0.767985,0.2773 1.375985,0.928 1.824,1.952 l 2.304,5.024 1.824,0.064 0,2.72 -7.904,0 0,-2.592 0.928,-0.096 c 0.490653,-0.064 0.735986,-0.256 0.736,-0.576 -1.4e-5,-0.128 -0.04268,-0.2774 -0.128,-0.448 l -1.504,-3.2 c -0.234679,-0.5334 -0.501345,-0.9067 -0.8,-1.12 -0.277344,-0.2347 -0.682677,-0.352 -1.216,-0.352 l -2.912,0 0,5.568 2.08,0.096 0,2.72 -7.968,0 m 5.888,-11.424 2.784,0 c 2.623987,0 3.935986,-1.1733 3.936,-3.52 -1.4e-5,-1.344 -0.352014,-2.2187 -1.056,-2.624 -0.682679,-0.4053 -1.792011,-0.608 -3.328,-0.608 l -2.336,0 0,6.752"
style="fill:#fafafa;font-family:Bree Serif;-inkscape-font-specification:Bree Serif Bold"
id="path3068" />
<path
d="m 90.310094,1022.2762 c 1.599989,0 2.869321,0.3947 3.808,1.184 0.938652,0.768 1.407985,1.856 1.408,3.264 -1.5e-5,0.9387 -0.202681,1.7706 -0.608,2.496 -0.405347,0.704 -0.90668,1.2586 -1.504,1.664 -0.597345,0.4053 -1.322678,0.736 -2.176,0.992 -1.429342,0.4266 -3.040007,0.64 -4.832,0.64 0.06399,1.1306 0.415994,2.048 1.056,2.752 0.639993,0.6826 1.621325,1.024 2.944,1.024 1.322656,0 2.645321,-0.4694 3.968,-1.408 l 1.216,2.592 c -0.426681,0.384 -1.152014,0.7786 -2.176,1.184 -1.002678,0.4053 -2.154677,0.608 -3.456,0.608 -2.602673,0 -4.512005,-0.7147 -5.728,-2.144 -1.216002,-1.4507 -1.824002,-3.4347 -1.824,-5.952 -2e-6,-2.5174 0.693331,-4.6293 2.08,-6.336 1.386662,-1.7067 3.327993,-2.56 5.824,-2.56 m -1.472,7.328 c 0.789325,-0.1494 1.514657,-0.4587 2.176,-0.928 0.661322,-0.4907 0.991989,-1.0667 0.992,-1.728 -1.1e-5,-1.3013 -0.640011,-1.952 -1.92,-1.952 -1.194675,0 -2.112007,0.48 -2.752,1.44 -0.640006,0.9387 -0.992006,2.0693 -1.056,3.392 0.93866,-0.021 1.791993,-0.096 2.56,-0.224"
style="fill:#fafafa;font-family:Bree Serif;-inkscape-font-specification:Bree Serif Bold"
id="path3070" />
<path
d="m 110.8632,1023.3962 0,11.904 c -1e-5,0.3413 0.0533,0.576 0.16,0.704 0.12799,0.128 0.34132,0.2026 0.64,0.224 l 1.024,0.064 0,2.56 -5.088,0 0,-1.856 -0.096,-0.032 c -1.06668,1.536 -2.52801,2.304 -4.384,2.304 -2.176,0 -3.786669,-0.6934 -4.831999,-2.08 -1.045335,-1.3867 -1.568001,-3.2854 -1.568,-5.696 -10e-7,-2.9014 0.703998,-5.1627 2.112,-6.784 1.407999,-1.6213 3.519989,-2.432 6.335999,-2.432 1.81332,0 3.71199,0.3733 5.696,1.12 m -3.712,10.368 0,-8.288 c -0.59734,-0.2773 -1.41868,-0.416 -2.464,-0.416 -1.42934,0 -2.46401,0.576 -3.104,1.728 -0.64,1.152 -0.96,2.6773 -0.96,4.576 0,3.456 1.10933,5.184 3.328,5.184 0.93866,0 1.70666,-0.2774 2.304,-0.832 0.59732,-0.576 0.89599,-1.2267 0.896,-1.952"
style="fill:#fafafa;font-family:Bree Serif;-inkscape-font-specification:Bree Serif Bold"
id="path3072" />
<path
d="m 121.12069,1022.2762 c 0.91733,0 1.79199,0.128 2.624,0.384 l 0,-3.232 c -1e-5,-0.4693 -0.27734,-0.7253 -0.832,-0.768 l -1.376,-0.096 0,-2.528 5.952,0 0,19.456 c 0.0213,0.4906 0.28799,0.736 0.8,0.736 l 1.12,0.064 0,2.56 -5.184,0 0,-1.888 -0.096,-0.032 c -0.96001,1.5573 -2.41067,2.336 -4.352,2.336 -2.432,0 -4.13867,-0.8107 -5.12,-2.432 -0.896,-1.472 -1.344,-3.2747 -1.344,-5.408 0,-2.7734 0.68267,-4.992 2.048,-6.656 1.38666,-1.664 3.30666,-2.496 5.76,-2.496 m 2.624,11.584 0,-8.288 c -0.76801,-0.3413 -1.57867,-0.512 -2.432,-0.512 -1.40801,0 -2.44267,0.5653 -3.104,1.696 -0.64,1.1307 -0.96,2.5706 -0.96,4.32 0,3.584 1.152,5.376 3.456,5.376 0.87466,0 1.59999,-0.2454 2.176,-0.736 0.57599,-0.512 0.86399,-1.1307 0.864,-1.856"
style="fill:#fafafa;font-family:Bree Serif;-inkscape-font-specification:Bree Serif Bold"
id="path3074" />
<path
d="m 141.89219,1036.3322 c 0,0 -1.484,0.56 -2.268,0.56 -0.784,0 -1.092,-0.392 -1.092,-1.4 0,-0.448 0.056,-1.036 0.168,-1.764 l 1.204,-7.476 3.864,0 0.336,-2.1 -3.864,0 0.672,-4.088 -2.772,0.56 -0.56,3.528 -2.8,0.28 -0.308,1.82 2.772,0 -1.232,7.756 c -0.112,0.644 -0.168,1.26 -0.168,1.792 0,2.212 0.924,3.332 2.828,3.332 1.568,0 3.668,-1.288 3.668,-1.288 l -0.448,-1.512"
style="font-size:28px;font-style:italic;font-weight:normal;fill:#fafafa;font-family:Bitter;-inkscape-font-specification:Bitter Italic"
id="path3076" />
<path
d="m 150.57225,1017.2922 -5.124,0.14 -0.252,1.54 2.352,0.56 -3.08,19.32 2.66,0 0.924,-5.04 c 0,0 2.212,-7.7 5.852,-7.7 1.11999,0 1.456,0.812 1.456,1.848 0,0.392 -0.056,0.812 -0.112,1.232 l -1.596,9.66 5.124,-0.28 0.252,-1.54 -2.352,-0.42 1.26,-7.84 c 0.084,-0.588 0.14,-1.148 0.14,-1.652 0,-2.016 -0.81201,-3.388 -3.052,-3.388 -4.256,0 -6.496,5.404 -6.608,5.712 l 2.156,-12.152"
style="font-size:28px;font-style:italic;font-weight:normal;fill:#fafafa;font-family:Bitter;-inkscape-font-specification:Bitter Italic"
id="path3078" />
<path
d="m 170.69755,1035.6322 c 0,0 -2.548,1.26 -4.592,1.26 -2.1,0 -3.08,-0.924 -3.08,-2.912 0,-0.364 0.028,-0.784 0.084,-1.204 5.796,0 9.828,-2.184 9.828,-5.404 0,-2.212 -1.792,-3.64 -4.62,-3.64 -4.45199,0 -8.092,4.564 -8.092,10.36 0,3.08 1.96,5.04 5.04,5.04 3.304,0 6.272,-2.072 6.272,-2.072 l -0.84,-1.428 m -7.336,-4.816 c 0.728,-2.94 2.772,-4.984 4.816,-4.984 1.428,0 2.1,0.588 2.1,1.82 0,1.848 -2.94,3.164 -6.916,3.164"
style="font-size:28px;font-style:italic;font-weight:normal;fill:#fafafa;font-family:Bitter;-inkscape-font-specification:Bitter Italic"
id="path3080" />
<path
d="m 177.64305,1038.8522 0,-2.592 1.056,-0.096 c 0.61867,-0.064 0.928,-0.3627 0.928,-0.896 l 0,-14.88 -1.824,-0.096 0,-2.72 8.768,0 c 3.13599,0 5.57865,0.832 7.328,2.496 1.77065,1.664 2.65598,4.128 2.656,7.392 -2e-5,2.0266 -0.26668,3.7973 -0.8,5.312 -0.53335,1.4933 -1.25868,2.6666 -2.176,3.52 -1.83468,1.7066 -4.11734,2.56 -6.848,2.56 l -9.088,0 m 5.888,-18.176 0,15.104 3.264,0 c 1.83466,0 3.26399,-0.6614 4.288,-1.984 1.02399,-1.3227 1.53599,-3.2427 1.536,-5.76 -10e-6,-4.9067 -2.08001,-7.36 -6.24,-7.36 l -2.848,0"
style="fill:#fafafa;font-family:Bree Serif;-inkscape-font-specification:Bree Serif Bold"
id="path3082" />
<path
d="m 205.62659,1036.5162 c 2.32532,0 3.48798,-1.8774 3.488,-5.632 -2e-5,-1.8987 -0.26668,-3.3387 -0.8,-4.32 -0.51201,-0.9813 -1.38668,-1.472 -2.624,-1.472 -1.21601,0 -2.11201,0.4693 -2.688,1.408 -0.57601,0.9387 -0.86401,2.2186 -0.864,3.84 -1e-5,3.008 0.55466,4.896 1.664,5.664 0.49066,0.3413 1.09866,0.512 1.824,0.512 m -7.36,-5.728 c 0,-1.5787 0.23466,-2.944 0.704,-4.096 0.46933,-1.1733 1.09866,-2.0693 1.888,-2.688 1.51466,-1.152 3.18932,-1.728 5.024,-1.728 1.27999,0 2.35732,0.2133 3.232,0.64 0.89598,0.4053 1.58932,0.8853 2.08,1.44 0.51198,0.5333 0.93865,1.3227 1.28,2.368 0.36265,1.024 0.54398,2.24 0.544,3.648 -2e-5,2.944 -0.71469,5.1733 -2.144,6.688 -1.42935,1.5146 -3.26401,2.272 -5.504,2.272 -2.21868,0 -3.95734,-0.7147 -5.216,-2.144 -1.25867,-1.4507 -1.888,-3.584 -1.888,-6.4"
style="fill:#fafafa;font-family:Bree Serif;-inkscape-font-specification:Bree Serif Bold"
id="path3084" />
<path
d="m 218.42846,1030.6282 c -1e-5,1.8133 0.34133,3.2213 1.024,4.224 0.68266,1.0026 1.66399,1.504 2.944,1.504 1.30132,0 2.58132,-0.4587 3.84,-1.376 l 1.376,2.464 c -1.51468,1.2373 -3.41335,1.856 -5.696,1.856 -2.28268,0 -4.08534,-0.7147 -5.408,-2.144 -1.30134,-1.4507 -1.952,-3.584 -1.952,-6.4 0,-2.816 0.74666,-4.928 2.24,-6.336 1.51466,-1.4293 3.21066,-2.144 5.088,-2.144 1.89865,0 3.65865,0.4373 5.28,1.312 l 0,4.16 -2.944,0.224 0,-1.536 c -1e-5,-0.576 -0.21335,-0.928 -0.64,-1.056 -0.40535,-0.1493 -0.83201,-0.224 -1.28,-0.224 -2.58134,0 -3.87201,1.824 -3.872,5.472"
style="fill:#fafafa;font-family:Bree Serif;-inkscape-font-specification:Bree Serif Bold"
id="path3086" />
<path
d="m 236.74521,1025.1882 c -0.51201,-0.192 -1.13068,-0.288 -1.856,-0.288 -0.72534,0 -1.31201,0.1707 -1.76,0.512 -0.42668,0.32 -0.64001,0.7253 -0.64,1.216 -1e-5,0.4693 0.0747,0.8427 0.224,1.12 0.17066,0.256 0.42666,0.48 0.768,0.672 0.53332,0.2773 1.17332,0.5226 1.92,0.736 0.74665,0.192 1.30132,0.352 1.664,0.48 0.36265,0.1066 0.81065,0.2986 1.344,0.576 0.55465,0.2773 0.97065,0.576 1.248,0.896 0.74665,0.7893 1.11998,1.8026 1.12,3.04 -2e-5,1.6 -0.58668,2.8586 -1.76,3.776 -1.15201,0.896 -2.62401,1.344 -4.416,1.344 -2.60268,0 -4.56534,-0.3307 -5.888,-0.992 l 0,-4.448 2.88,-0.224 0,1.536 c -1e-5,0.9386 0.89599,1.408 2.688,1.408 1.79199,0 2.68799,-0.6507 2.688,-1.952 -1e-5,-0.4694 -0.16001,-0.8534 -0.48,-1.152 -0.29868,-0.2987 -0.59735,-0.5014 -0.896,-0.608 -0.29868,-0.1067 -0.66134,-0.2134 -1.088,-0.32 -0.40534,-0.1067 -0.81068,-0.2134 -1.216,-0.32 -0.38401,-0.1067 -0.81068,-0.2454 -1.28,-0.416 -0.44801,-0.192 -0.94934,-0.4587 -1.504,-0.8 -1.08801,-0.704 -1.63201,-1.8774 -1.632,-3.52 -1e-5,-1.664 0.58666,-2.944 1.76,-3.84 1.17333,-0.896 2.64532,-1.344 4.416,-1.344 1.79199,0 3.56265,0.4267 5.312,1.28 l 0,3.84 -2.88,0.224 0,-1.344 c -1e-5,-0.5333 -0.24535,-0.896 -0.736,-1.088"
style="fill:#fafafa;font-family:Bree Serif;-inkscape-font-specification:Bree Serif Bold"
id="path3088" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

101
docs/demo/structure.rst Normal file
View File

@ -0,0 +1,101 @@
*******************
Structural Elements
*******************
.. contents:: Table of Contents
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec lorem neque, interdum in ipsum nec,
finibus dictum velit. Ut eu efficitur arcu, id aliquam erat. In sit amet diam gravida, imperdiet tellus eu,
gravida nisl. Praesent aliquet odio eget libero elementum, quis rhoncus tellus tincidunt.
Suspendisse quis volutpat ipsum. Sed lobortis scelerisque tristique. Aenean condimentum risus tellus,
quis accumsan ipsum laoreet ut. Integer porttitor maximus suscipit. Mauris in posuere sapien.
Aliquam accumsan feugiat ligula, nec fringilla libero commodo sed. Proin et erat pharetra.
---------
Etiam turpis ante, luctus sed velit tristique, finibus volutpat dui. Nam sagittis vel ante nec malesuada.
Praesent dignissim mi nec ornare elementum. Nunc eu augue vel sem dignissim cursus sed et nulla.
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
Pellentesque dictum dui sem, non placerat tortor rhoncus in. Sed placerat nulla at rhoncus iaculis.
Document Section
================
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed condimentum nulla vel neque venenatis,
nec placerat lorem placerat. Cras purus eros, gravida vitae tincidunt id, vehicula nec nulla.
Fusce aliquet auctor cursus. Phasellus ex neque, vestibulum non est vitae, viverra fringilla tortor.
Donec vestibulum convallis justo, a faucibus lorem vulputate vel. Aliquam cursus odio eu felis sodales aliquet.
Aliquam erat volutpat. Maecenas eget dictum mauris. Suspendisse arcu eros, condimentum eget risus sed,
luctus efficitur arcu. Cras ut dictum mi. Nulla congue interdum lorem, semper semper enim commodo nec.
Document Subsection
-------------------
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam efficitur in eros et blandit. Nunc maximus,
nisl at auctor vestibulum, justo ex sollicitudin ligula, id faucibus urna orci tristique nisl.
Duis auctor rutrum orci, in ornare lacus condimentum quis. Quisque arcu velit, facilisis quis interdum ac,
hendrerit auctor mauris. Curabitur urna nibh, porttitor at ante sit amet, vestibulum interdum dolor.
Duis dictum elit orci, tincidunt imperdiet sem pellentesque et. In vehicula pellentesque varius.
Phasellus a turpis sollicitudin, bibendum massa et, imperdiet neque. Integer quis sapien in magna rutrum bibendum.
Integer cursus ex sed magna vehicula finibus. Proin tempus orci quis dolor tempus, nec condimentum odio vestibulum.
Etiam efficitur sollicitudin libero, tincidunt volutpat ligula interdum sed.
Document Subsubsection
^^^^^^^^^^^^^^^^^^^^^^
Donec non rutrum lorem. Aenean sagittis metus at pharetra fringilla. Nunc sapien dolor, cursus sed nisi at,
pretium tristique lectus. Sed pellentesque leo lectus, et convallis ipsum euismod a.
Integer at leo vitae felis pretium aliquam fringilla quis odio. Sed pharetra enim accumsan feugiat pretium.
Maecenas at pharetra tortor. Morbi semper eget mi vel finibus. Cras rutrum nulla eros, id feugiat arcu pellentesque ut.
Sed finibus tortor ac nisi ultrices viverra. Duis feugiat malesuada sapien, at commodo ante porttitor ac.
Curabitur posuere mauris mi, vel ornare orci scelerisque sit amet. Suspendisse nec fringilla dui.
Document Paragraph
""""""""""""""""""
Pellentesque nec est in odio ultrices elementum. Vestibulum et hendrerit sapien, quis vulputate turpis.
Suspendisse potenti. Curabitur tristique sit amet lectus non viverra. Phasellus rutrum dapibus turpis sed imperdiet.
Mauris maximus viverra ante. Donec eu egestas mauris. Morbi vulputate tincidunt euismod. Integer vel porttitor neque.
Donec at lacus suscipit, lacinia lectus vel, sagittis lectus.
*********************
Structural Elements 2
*********************
Etiam turpis ante, luctus sed velit tristique, finibus volutpat dui. Nam sagittis vel ante nec malesuada.
Praesent dignissim mi nec ornare elementum. Nunc eu augue vel sem dignissim cursus sed et nulla.
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
Pellentesque dictum dui sem, non placerat tortor rhoncus in. Sed placerat nulla at rhoncus iaculis.
Document Section
================
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed condimentum nulla vel neque venenatis,
nec placerat lorem placerat. Cras purus eros, gravida vitae tincidunt id, vehicula nec nulla.
Fusce aliquet auctor cursus. Phasellus ex neque, vestibulum non est vitae, viverra fringilla tortor.
Donec vestibulum convallis justo, a faucibus lorem vulputate vel. Aliquam cursus odio eu felis sodales aliquet.
Aliquam erat volutpat. Maecenas eget dictum mauris. Suspendisse arcu eros, condimentum eget risus sed,
luctus efficitur arcu. Cras ut dictum mi. Nulla congue interdum lorem, semper semper enim commodo nec.
Document Subsection
-------------------
.. figure:: static/yi_jing_01_chien.jpg
:align: right
:figwidth: 200px
This is a caption for a figure. Text should wrap around the caption.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam efficitur in eros et blandit. Nunc maximus,
nisl at auctor vestibulum, justo ex sollicitudin ligula, id faucibus urna orci tristique nisl.
Duis auctor rutrum orci, in ornare lacus condimentum quis. Quisque arcu velit, facilisis quis interdum ac,
hendrerit auctor mauris. Curabitur urna nibh, porttitor at ante sit amet, vestibulum interdum dolor.
Duis dictum elit orci, tincidunt imperdiet sem pellentesque et. In vehicula pellentesque varius.
Phasellus a turpis sollicitudin, bibendum massa et, imperdiet neque. Integer quis sapien in magna rutrum bibendum.
Integer cursus ex sed magna vehicula finibus. Proin tempus orci quis dolor tempus, nec condimentum odio vestibulum.
Etiam efficitur sollicitudin libero, tincidunt volutpat ligula interdum sed. Praesent congue sagittis nisl et suscipit.
Vivamus sagittis risus et egestas commodo.Cras venenatis arcu in pharetra interdum.
Donec quis metus porttitor tellus cursus lobortis. Quisque et orci magna. Fusce rhoncus mi mi,
at vehicula massa rhoncus quis. Mauris augue leo, pretium eget molestie vitae, efficitur nec nulla.
In hac habitasse platea dictumst. Sed sit amet imperdiet purus.

View File

View File

@ -0,0 +1,113 @@
# -*- coding: utf-8 -*-
"""Test Module for sphinx_rtd_theme."""
class Foo:
"""Docstring for class Foo.
This text tests for the formatting of docstrings generated from output
``sphinx.ext.autodoc``. Which contain reST, but sphinx nests it in the
``<dl>``, and ``<dt>`` tags. Also, ``<tt>`` is used for class, method names
and etc, but those will *always* have the ``.descname`` or
``.descclassname`` class.
Normal ``<tt>`` (like the <tt> I just wrote here) needs to be shown with
the same style as anything else with ````this type of markup````.
It's common for programmers to give a code example inside of their
docstring::
from test_py_module import Foo
myclass = Foo()
myclass.dothismethod('with this argument')
myclass.flush()
print(myclass)
Here is a link to :py:meth:`capitalize`.
Here is a link to :py:meth:`__init__`.
"""
#: Doc comment for class attribute Foo.bar.
#: It can have multiple lines.
bar = 1
flox = 1.5 #: Doc comment for Foo.flox. One line only.
baz = 2
"""Docstring for class attribute Foo.baz."""
def __init__(self, qux, spam=False):
"""Start the Foo.
:param qux: The first argument to initialize class.
:type qux: string
:param spam: Spam me yes or no...
:type spam: bool
"""
#: Doc comment for instance attribute qux.
self.qux = 3
self.spam = 4
"""Docstring for instance attribute spam."""
def add(self, val1, val2):
"""Return the added values.
:param val1: First number to add.
:type val1: int
:param val2: Second number to add.
:type val2: int
:rtype: int
"""
return val1 + val2
def capitalize(self, myvalue):
"""Return a string as uppercase.
:param myvalue: String to change
:type myvalue: string
:rtype: string
"""
return myvalue.upper()
def another_function(self, a, b, **kwargs):
"""
Here is another function.
:param a: The number of green hats you own.
:type a: int
:param b: The number of non-green hats you own.
:type b: int
:param kwargs: Additional keyword arguments. Each keyword parameter
should specify the name of your favorite cuisine.
The values should be floats, specifying the mean price
of your favorite dish in that cooking style.
:type kwargs: float
:returns: A 2-tuple. The first element is the mean price of all dishes
across cuisines. The second element is the total number of
hats you own: :math:`a + b`.
:rtype: tuple
:raises ValueError: When ``a`` is not an integer.
.. versionadded:: 1.0
This was added in 1.0
.. versionchanged:: 2.0
This was changed in 2.0
.. deprecated:: 3.0
This is deprecated since 3.0
"""
return sum(kwargs.values()) / len(kwargs), a + b

28
docs/index.rst Normal file
View File

@ -0,0 +1,28 @@
.. include:: ../README.rst
.. toctree::
:caption: Theme Documentation
:maxdepth: 2
installing
configuring
changelog
contributing
.. toctree::
:maxdepth: 2
:numbered:
:caption: Demo Documents
demo/structure
demo/demo
demo/lists_tables
demo/api
.. toctree::
:maxdepth: 3
:numbered:
:caption: This is an incredibly long caption for a long menu
demo/long

32
docs/installing.rst Normal file
View File

@ -0,0 +1,32 @@
************
Installation
************
Via Python Package
==================
Install the package (or add it to your ``requirements.txt`` file):
.. code:: bash
pip install sphinx_rtd_theme
In your ``conf.py`` file:
.. code:: python
html_theme = "sphinx_rtd_theme"
Via Git or Download
===================
Symlink or subtree the ``sphinx_rtd_theme/sphinx_rtd_theme`` repository into your documentation at
``docs/_themes/sphinx_rtd_theme`` then add the following two settings to your Sphinx
``conf.py`` file:
.. code:: python
html_theme = "sphinx_rtd_theme"
html_theme_path = ["_themes", ]

38
docs/make.bat Normal file
View File

@ -0,0 +1,38 @@
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=python -msphinx
)
set SPHINXOPTS=
set SPHINXBUILD=sphinx-build
set SOURCEDIR=.
set BUILDDIR=build
set SPHINXPROJ=ReadtheDocsSphinxTheme
if "%1" == "" goto help
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The Sphinx module was not found. Make sure you have Sphinx installed,
echo.then set the SPHINXBUILD environment variable to point to the full
echo.path of the 'sphinx-build' executable. Alternatively you may add the
echo.Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.http://sphinx-doc.org/
exit /b 1
)
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
:end
popd

2
docs/requirements.txt Normal file
View File

@ -0,0 +1,2 @@
sphinxcontrib-httpdomain
sphinx

241
js/theme.js Normal file
View File

@ -0,0 +1,241 @@
var jQuery = (typeof(window) != 'undefined') ? window.jQuery : require('jquery');
// Sphinx theme nav state
function ThemeNav () {
var nav = {
navBar: null,
win: null,
winScroll: false,
winResize: false,
linkScroll: false,
winPosition: 0,
winHeight: null,
docHeight: null,
isRunning: false
};
nav.enable = function (withStickyNav) {
var self = this;
// TODO this can likely be removed once the theme javascript is broken
// out from the RTD assets. This just ensures old projects that are
// calling `enable()` get the sticky menu on by default. All other cals
// to `enable` should include an argument for enabling the sticky menu.
if (typeof(withStickyNav) == 'undefined') {
withStickyNav = true;
}
if (self.isRunning) {
// Only allow enabling nav logic once
return;
}
self.isRunning = true;
jQuery(function ($) {
self.init($);
self.reset();
self.win.on('hashchange', self.reset);
if (withStickyNav) {
// Set scroll monitor
self.win.on('scroll', function () {
if (!self.linkScroll) {
if (!self.winScroll) {
self.winScroll = true;
requestAnimationFrame(function() { self.onScroll(); });
}
}
});
}
// Set resize monitor
self.win.on('resize', function () {
if (!self.winResize) {
self.winResize = true;
requestAnimationFrame(function() { self.onResize(); });
}
});
self.onResize();
});
};
// TODO remove this with a split in theme and Read the Docs JS logic as
// well, it's only here to support 0.3.0 installs of our theme.
nav.enableSticky = function() {
this.enable(true);
};
nav.init = function ($) {
var doc = $(document),
self = this;
this.navBar = $('div.wy-side-scroll:first');
this.win = $(window);
// Set up javascript UX bits
$(document)
// Shift nav in mobile when clicking the menu.
.on('click', "[data-toggle='wy-nav-top']", function() {
$("[data-toggle='wy-nav-shift']").toggleClass("shift");
$("[data-toggle='rst-versions']").toggleClass("shift");
})
// Nav menu link click operations
.on('click', ".wy-menu-vertical .current ul li a", function() {
var target = $(this);
// Close menu when you click a link.
$("[data-toggle='wy-nav-shift']").removeClass("shift");
$("[data-toggle='rst-versions']").toggleClass("shift");
// Handle dynamic display of l3 and l4 nav lists
self.toggleCurrent(target);
self.hashChange();
})
.on('click', "[data-toggle='rst-current-version']", function() {
$("[data-toggle='rst-versions']").toggleClass("shift-up");
})
// Make tables responsive
$("table.docutils:not(.field-list,.footnote,.citation)")
.wrap("<div class='wy-table-responsive'></div>");
// Add extra class to responsive tables that contain
// footnotes or citations so that we can target them for styling
$("table.docutils.footnote")
.wrap("<div class='wy-table-responsive footnote'></div>");
$("table.docutils.citation")
.wrap("<div class='wy-table-responsive citation'></div>");
// Add expand links to all parents of nested ul
$('.wy-menu-vertical ul').not('.simple').siblings('a').each(function () {
var link = $(this);
expand = $('<span class="toctree-expand"></span>');
expand.on('click', function (ev) {
self.toggleCurrent(link);
ev.stopPropagation();
return false;
});
link.prepend(expand);
});
};
nav.reset = function () {
// Get anchor from URL and open up nested nav
var anchor = encodeURI(window.location.hash) || '#';
try {
var vmenu = $('.wy-menu-vertical');
var link = vmenu.find('[href="' + anchor + '"]');
if (link.length === 0) {
// this link was not found in the sidebar.
// Find associated id element, then its closest section
// in the document and try with that one.
var id_elt = $('.document [id="' + anchor.substring(1) + '"]');
var closest_section = id_elt.closest('div.section');
link = vmenu.find('[href="#' + closest_section.attr("id") + '"]');
if (link.length === 0) {
// still not found in the sidebar. fall back to main section
link = vmenu.find('[href="#"]');
}
}
// If we found a matching link then reset current and re-apply
// otherwise retain the existing match
if (link.length > 0) {
$('.wy-menu-vertical .current').removeClass('current');
link.addClass('current');
link.closest('li.toctree-l1').addClass('current');
link.closest('li.toctree-l1').parent().addClass('current');
link.closest('li.toctree-l1').addClass('current');
link.closest('li.toctree-l2').addClass('current');
link.closest('li.toctree-l3').addClass('current');
link.closest('li.toctree-l4').addClass('current');
link[0].scrollIntoView();
}
}
catch (err) {
console.log("Error expanding nav for anchor", err);
}
};
nav.onScroll = function () {
this.winScroll = false;
var newWinPosition = this.win.scrollTop(),
winBottom = newWinPosition + this.winHeight,
navPosition = this.navBar.scrollTop(),
newNavPosition = navPosition + (newWinPosition - this.winPosition);
if (newWinPosition < 0 || winBottom > this.docHeight) {
return;
}
this.navBar.scrollTop(newNavPosition);
this.winPosition = newWinPosition;
};
nav.onResize = function () {
this.winResize = false;
this.winHeight = this.win.height();
this.docHeight = $(document).height();
};
nav.hashChange = function () {
this.linkScroll = true;
this.win.one('hashchange', function () {
this.linkScroll = false;
});
};
nav.toggleCurrent = function (elem) {
var parent_li = elem.closest('li');
parent_li.siblings('li.current').removeClass('current');
parent_li.siblings().find('li.current').removeClass('current');
parent_li.find('> ul li.current').removeClass('current');
parent_li.toggleClass('current');
}
return nav;
};
module.exports.ThemeNav = ThemeNav();
if (typeof(window) != 'undefined') {
window.SphinxRtdTheme = {
Navigation: module.exports.ThemeNav,
// TODO remove this once static assets are split up between the theme
// and Read the Docs. For now, this patches 0.3.0 to be backwards
// compatible with a pre-0.3.0 layout.html
StickyNav: module.exports.ThemeNav,
};
}
// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
// https://gist.github.com/paulirish/1579671
// MIT license
(function() {
var lastTime = 0;
var vendors = ['ms', 'moz', 'webkit', 'o'];
for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame']
|| window[vendors[x]+'CancelRequestAnimationFrame'];
}
if (!window.requestAnimationFrame)
window.requestAnimationFrame = function(callback, element) {
var currTime = new Date().getTime();
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
var id = window.setTimeout(function() { callback(currTime + timeToCall); },
timeToCall);
lastTime = currTime + timeToCall;
return id;
};
if (!window.cancelAnimationFrame)
window.cancelAnimationFrame = function(id) {
clearTimeout(id);
};
}());

23
package.json Normal file
View File

@ -0,0 +1,23 @@
{
"name": "sphinx_rtd_theme",
"main": "js/theme.js",
"version": "0.4.3",
"private": true,
"devDependencies": {
"bower": "^1.8.4",
"browserify": "^13.0.0",
"connect-livereload": "~0.6.0",
"grunt": "~1.0.1",
"grunt-banner": "^0.6.0",
"grunt-browserify": "^5.0.0",
"grunt-contrib-clean": "^1.0.0",
"grunt-contrib-connect": "^1.0.2",
"grunt-contrib-copy": "~1.0.0",
"grunt-contrib-sass": "~1.0.0",
"grunt-contrib-uglify": "~3.3.0",
"grunt-contrib-watch": "~1.0.0",
"grunt-exec": "~1.0.1",
"grunt-open": "0.2.3",
"matchdep": "~1.0.1"
}
}

92
sass/_theme_badge.sass Normal file
View File

@ -0,0 +1,92 @@
.rst-versions
position: fixed
bottom: 0
left: 0
width: $nav-desktop-width
color: $section-background-color
background: darken($menu-background-color, 8%)
font-family: $base-font-family
z-index: $z-index-tray
a
color: $link_color
text-decoration: none
.rst-badge-small
display: none
.rst-current-version
padding: $base-line-height / 2
background-color: darken($menu-background-color, 5%)
display: block
text-align: right
font-size: 90%
cursor: pointer
color: $green
+clearfix
.fa
color: $section-background-color
.fa-book
float: left
.icon-book
float: left
&.rst-out-of-date
background-color: $red
color: $white
&.rst-active-old-version
background-color: $yellow
color: $black
&.shift-up
height: auto
max-height: 100%
overflow-y: scroll
&.shift-up .rst-other-versions
display: block
.rst-other-versions
font-size: 90%
padding: $base-line-height / 2
color: $text-medium
display: none
hr
display: block
height: 1px
border: 0
margin: 20px 0
padding: 0
border-top: solid 1px lighten($menu-background-color, 5%)
dd
display: inline-block
margin: 0
a
display: inline-block
padding: $base-line-height / 4
color: $section-background-color
&.rst-badge
width: auto
bottom: 20px
right: 20px
left: auto
border: none
max-width: $nav-desktop-width
max-height: 90%
.icon-book
float: none
.fa-book
float: none
&.shift-up .rst-current-version
text-align: right
.fa-book
float: left
.icon-book
float: left
.rst-current-version
width: auto
height: 30px
line-height: 30px
padding: 0 $base-line-height / 4
display: block
text-align: center
+media($tablet)
.rst-versions
width: 85%
display: none
&.shift
display: block

68
sass/_theme_badge_fa.sass Normal file
View File

@ -0,0 +1,68 @@
// Slimmer version of FA for use on the badge_only.sass file.
+font-face(FontAwesome, '#{$font-awesome-dir}fontawesome-webfont')
.fa:before
display: inline-block
font-family: FontAwesome
font-style: normal
font-weight: normal
line-height: 1
text-decoration: inherit
+font-smooth
a .fa
display: inline-block
text-decoration: inherit
li
.fa
display: inline-block
.fa-large:before,
.fa-large:before
/* 1.5 increased font size for fa-large * 1.25 width
width: 1.5 * 1.25em
ul.fas
list-style-type: none
margin-left: 2em
text-indent: -0.8em
li
.fa
width: .8em
.fa-large:before,
.fa-large:before
/* 1.5 increased font size for fa-large * 1.25 width
vertical-align: baseline
// width: 1.5*1.25em
.fa-book:before
content: "\f02d"
.icon-book:before
content: "\f02d"
.fa-caret-down:before
content: "\f0d7"
.icon-caret-down:before
content: "\f0d7"
.fa-caret-up:before
content: "\f0d8"
.icon-caret-up:before
content: "\f0d8"
.fa-caret-left:before
content: "\f0d9"
.icon-caret-left:before
content: "\f0d9"
.fa-caret-right:before
content: "\f0da"
.icon-caret-right:before
content: "\f0da"

View File

@ -0,0 +1,34 @@
.wy-breadcrumbs
+clearfix
.wy-breadcrumbs li
display: inline-block
&.wy-breadcrumbs-aside
float: right
a
display: inline-block
padding: 5px
&:first-child
padding-left: 0
code
padding: 5px
border: none
background: none
&.literal
color: $text-color
.wy-breadcrumbs-extra
margin-bottom: 0
color: $text-light
font-size: 80%
display: inline-block
+media($mobile)
.wy-breadcrumbs-extra
display: none
.wy-breadcrumbs li.wy-breadcrumbs-aside
display: none
@media print
.wy-breadcrumbs li.wy-breadcrumbs-aside
display: none

View File

@ -0,0 +1,24 @@
.icon
@extend .fa
.icon-home
@extend .fa-home
.icon-search
@extend .fa-search
.icon-book
@extend .fa-book
.icon-caret-down
@extend .fa-caret-down
.icon-github
@extend .fa-github
.icon-bitbucket
@extend .fa-bitbucket
.icon-gitlab
@extend .fa-gitlab
.icon-fire
@extend .fa-fire
.icon-circle-arrow-right
@extend .fa-arrow-circle-right
.icon-circle-arrow-left
@extend .fa-arrow-circle-left
.icon-link
@extend .fa-link

View File

@ -0,0 +1,42 @@
@font-face
font-family: 'Lato'
src: url('../fonts/Lato/lato-regular.eot')
src: url('../fonts/Lato/lato-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/Lato/lato-regular.woff2') format('woff2'), url('../fonts/Lato/lato-regular.woff') format('woff'), url('../fonts/Lato/lato-regular.ttf') format('truetype')
font-weight: 400
font-style: normal
@font-face
font-family: 'Lato'
src: url('../fonts/Lato/lato-bold.eot')
src: url('../fonts/Lato/lato-bold.eot?#iefix') format('embedded-opentype'), url('../fonts/Lato/lato-bold.woff2') format('woff2'), url('../fonts/Lato/lato-bold.woff') format('woff'), url('../fonts/Lato/lato-bold.ttf') format('truetype')
font-weight: 700
font-style: normal
@font-face
font-family: 'Lato'
src: url('../fonts/Lato/lato-bolditalic.eot')
src: url('../fonts/Lato/lato-bolditalic.eot?#iefix') format('embedded-opentype'), url('../fonts/Lato/lato-bolditalic.woff2') format('woff2'), url('../fonts/Lato/lato-bolditalic.woff') format('woff'), url('../fonts/Lato/lato-bolditalic.ttf') format('truetype')
font-weight: 700
font-style: italic
@font-face
font-family: 'Lato'
src: url('../fonts/Lato/lato-italic.eot')
src: url('../fonts/Lato/lato-italic.eot?#iefix') format('embedded-opentype'), url('../fonts/Lato/lato-italic.woff2') format('woff2'), url('../fonts/Lato/lato-italic.woff') format('woff'), url('../fonts/Lato/lato-italic.ttf') format('truetype')
font-weight: 400
font-style: italic
@font-face
font-family: 'Roboto Slab'
font-style: normal
font-weight: 400
src: url('../fonts/RobotoSlab/roboto-slab.eot')
src: url('../fonts/RobotoSlab/roboto-slab-v7-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/RobotoSlab/roboto-slab-v7-regular.woff2') format('woff2'), url('../fonts/RobotoSlab/roboto-slab-v7-regular.woff') format('woff'), url('../fonts/RobotoSlab/roboto-slab-v7-regular.ttf') format('truetype')
@font-face
font-family: 'Roboto Slab'
font-style: normal
font-weight: 700
src: url('../fonts/RobotoSlab/roboto-slab-v7-bold.eot')
src: url('../fonts/RobotoSlab/roboto-slab-v7-bold.eot?#iefix') format('embedded-opentype'), url('../fonts/RobotoSlab/roboto-slab-v7-bold.woff2') format('woff2'), url('../fonts/RobotoSlab/roboto-slab-v7-bold.woff') format('woff'), url('../fonts/RobotoSlab/roboto-slab-v7-bold.ttf') format('truetype')

411
sass/_theme_layout.sass Normal file
View File

@ -0,0 +1,411 @@
// Set uniform (but not relative) base font size
html
font-size: $base-font-size
.wy-affix
position: fixed
top: $gutter
.wy-menu
a:hover
text-decoration: none
.wy-menu-horiz
+clearfix
ul, li
display: inline-block
li:hover
background: rgba(255,255,255,.1)
li
&.divide-left
border-left: solid 1px hsl(0, 0%, 25%)
&.divide-right
border-right: solid 1px hsl(0, 0%, 25%)
a
height: $base-font-size * 2
display: inline-block
line-height: $base-font-size * 2
padding: 0 $base-font-size
.wy-menu-vertical
width: $nav-desktop-width
header, p.caption
color: $nav-caption
height: $base-font-size * 2
display: inline-block
line-height: $base-font-size * 2
padding: 0 $gutter
margin: $base-line-height / 2 0 0 0
display: block
font-weight: bold
text-transform: uppercase
font-size: 85%
white-space: nowrap
ul
margin-bottom: 0
li
&.divide-top
border-top: solid 1px hsl(0, 0%, 25%)
&.divide-bottom
border-bottom: solid 1px hsl(0, 0%, 25%)
&.current
background: darken($menu-vertical-background-color, 10%)
a
color: $menu-link-medium
border-right: solid 1px darken($menu-vertical-background-color, 20%)
padding: $gutter / 4 $gutter * 1.5
&:hover
background: darken($menu-vertical-background-color, 15%)
code
border: none
background: inherit
color: inherit
padding-left: 0
padding-right: 0
// Expand links
span.toctree-expand
display: block
float: left
margin-left: -1.2em
@extend .fa
@extend .fa-plus-square-o
font-size: .8em
line-height: 1.6em
color: darken($menu-link-medium, 20%)
// On state for the first level
li.on a, li.current > a
color: $menu-link-color
padding: $gutter / 4 $gutter
font-weight: bold
position: relative
background: $menu-vertical-background-color
border: none
padding-left: $gutter -4px
+font-smooth
&:hover
background: $menu-vertical-background-color
span.toctree-expand
color: $menu-link-medium
span.toctree-expand
@extend .fa
@extend .fa-minus-square-o
display: block
font-size: .8em
line-height: 1.6em
color: darken($menu-link-medium, 30%)
li.toctree-l1.current > a
border-bottom: solid 1px darken($menu-vertical-background-color, 20%)
border-top: solid 1px darken($menu-vertical-background-color, 20%)
// This is the on state for pages beyond second level
li.toctree-l2 a, li.toctree-l3 a, li.toctree-l4 a
color: $menu-link-color
li.toctree-l1.current li.toctree-l2, li.toctree-l2.current li.toctree-l3
> ul
display: none
&.current > ul
display: block
li.toctree-l2
&.current
> a
background: darken($menu-vertical-background-color, 20%)
padding: $gutter / 4 $gutter * 1.5
li.toctree-l3 > a
display: block
background: darken($menu-vertical-background-color, 20%)
padding: $gutter / 4 $gutter * 2.5
a:hover span.toctree-expand
color: $menu-link-medium
span.toctree-expand
color: darken($menu-vertical-background-color, 35%)
li.toctree-l3
font-size: .9em
&.current
> a
background: darken($menu-vertical-background-color, 25%)
padding: $gutter / 4 $gutter * 2.5
li.toctree-l4 > a
display: block
background: darken($menu-vertical-background-color, 25%)
padding: $gutter / 4 $gutter * 3.5
a:hover span.toctree-expand
color: $menu-link-medium
span.toctree-expand
color: darken($menu-vertical-background-color, 40%)
li.toctree-l4
font-size: .9em
li.current ul
display: block
li ul
margin-bottom: 0
display: none
li ul li a
margin-bottom: 0
color: $menu-link-light
font-weight: normal
a
display: inline-block
line-height: 18px
padding: $gutter / 4 $gutter
display: block
position: relative
font-size: 90%
color: $menu-link-light
&:hover
background-color: lighten($menu-background-color, 10%)
cursor: pointer
span.toctree-expand
color: $menu-link-light
&:active
background-color: $menu-logo-color
cursor: pointer
color: $menu-link-active
span.toctree-expand
color: $menu-link-active
.wy-side-nav-search
display: block
width: $nav-desktop-width
padding: $gutter / 2
margin-bottom: $gutter / 2
z-index: $z-index-popover
background-color: $nav-search-background-color
text-align: center
padding: $gutter / 2
display: block
color: $nav-search-color
margin-bottom: $gutter / 2
input[type=text]
width: 100%
border-radius: 50px
padding: 6px 12px
border-color: darken($link-color, 5%)
img
display: block
margin: auto auto $gutter / 2 auto
height: 45px
width: 45px
background-color: $menu-logo-color
padding: 5px
border-radius: 100%
> a, .wy-dropdown > a
color: $nav-search-color
font-size: 100%
font-weight: bold
display: inline-block
padding: $base-line-height / 6 $base-line-height / 4
margin-bottom: $gutter / 2
+font-smooth
&:hover
background: rgba(255,255,255,.1)
img.logo
display: block // display on its own line all the time
margin: 0 auto
height: auto // undo badge styling above
width: auto
border-radius: 0
max-width: 100% // shrink on mobile, if appropriate
background: rgba(0,0,0,0) // make hover background of parent show up properly
&.icon
img.logo
margin-top: 0.85em // space it away from the title text
> div.version
margin-top: -1 * ($gutter / 4)
margin-bottom: $gutter / 2
font-weight: normal
color: rgba(255,255,255,.3)
.wy-nav .wy-menu-vertical
header
color: $link-color
a
color: $text-light
&:hover
background-color: $link-color
color: $white
[data-menu-wrap]
+transition(all .2s ease-in)
position: absolute
opacity: 1
width: 100%
opacity: 0
&.move-center
left: 0
right: auto
opacity: 1
&.move-left
right: auto
left: -100%
opacity: 0
&.move-right
right: -100%
left: auto
opacity: 0
.wy-body-for-nav
background: $section-background-color
.wy-grid-for-nav
position: absolute
width: 100%
height: 100%
.wy-nav-side
position: fixed
top: 0
bottom: 0
left: 0
padding-bottom: 2em
width: $nav-desktop-width
overflow-x: hidden
overflow-y: hidden
min-height: 100%
color: $menu-medium
background: $nav-background-color
z-index: $z-index-popover
.wy-side-scroll
width: $nav-desktop-width + 20px
position: relative
overflow-x: hidden
overflow-y: scroll
height: 100%
.wy-nav-top
display: none
background: $link-color
color: $white
padding: $gutter / 4 $gutter / 2
position: relative
line-height: 50px
text-align: center
font-size: 100%
+clearfix
a
color: $white
font-weight: bold
+font-smooth
img
margin-right: $base-line-height / 2
height: 45px
width: 45px
background-color: $menu-logo-color
padding: 5px
border-radius: 100%
i
font-size: 30px
float: left
cursor: pointer
padding-top: inherit
.wy-nav-content-wrap
margin-left: $nav-desktop-width
background: $section-background-color
min-height: 100%
.wy-nav-content
padding: $gutter $gutter * 2
height: 100%
max-width: $nav-content-width
margin: auto
.wy-body-mask
position: fixed
width: 100%
height: 100%
background: rgba(0,0,0,.2)
display: none
z-index: $z-index-modal - 1
&.on
display: block
footer
color: $footer-color
p
margin-bottom: $base-line-height / 2
span.commit code
padding: 0px
font-family: $code-font-family
font-size: 1em
background: none
border: none
color: $footer-color
.rst-footer-buttons
&:before, &:after
width: 100%
+clearfix
.rst-breadcrumbs-buttons
margin-top: 12px
+clearfix
#search-results
.search li
margin-bottom: $base-line-height
border-bottom: solid 1px $table_border_color
padding-bottom: $base-line-height
.search li:first-child
border-top: solid 1px $table_border_color
padding-top: $base-line-height
.search li a
font-size: 120%
margin-bottom: $base-line-height / 2
display: inline-block
.context
color: $text-medium
font-size: 90%
.genindextable li > ul
margin-left: $base-line-height
+media($tablet)
.wy-body-for-nav
background: $section-background-color
.wy-nav-top
display: block
.wy-nav-side
@if $nav-desktop-position == left
left: -$nav-desktop-width
@else
right: -$nav-desktop-width
&.shift
width: 85%
left: 0
.wy-side-scroll
width: auto
.wy-side-nav-search
width: auto
.wy-menu.wy-menu-vertical
width: auto
.wy-nav-content-wrap
margin-left: 0
.wy-nav-content
padding: $gutter
&.shift
position: fixed
min-width: 100%
left: 85%
top: 0
height: 100%
overflow: hidden
@media screen and (min-width: $nav-media-query)
.wy-nav-content-wrap
background: rgba(0,0,0,.05)
.wy-nav-content
margin: 0
background: $section-background-color
@media print
.rst-versions, footer, .wy-nav-side
display: none
.wy-nav-content-wrap
margin-left: 0

5
sass/_theme_mathjax.sass Normal file
View File

@ -0,0 +1,5 @@
span[id*='MathJax-Span']
color: $mathjax-color
.math
text-align: center

415
sass/_theme_rst.sass Normal file
View File

@ -0,0 +1,415 @@
// -------------------------------------------------------------------------------------------------------------------
// CONTRIBUTORS, PLEASE READ THIS!
// -------------------------------------------------------------------------------------------------------------------
// Couple things...
// 1. Lots of this @extends from wyrm_core/_type.sass (http://www.github.com/snide/wyrm/.
// * Try not to replace any @extends code. It's pretty generic stuff meant to work together.
// * That said, know that I'm very unlikely to accept PRs from wyrm just to change style here.
// 2. I plan to remove the !importants in here. Part of it is due to lazyness, part to sphinx's fondness for nesting.
// 3. Try to use variables from wyrm_core/wy_variables.sass. Notable are...
// * $base-line-height // All margins, padding and line-height should use this in .25 increments.
// * $text-color, $text-light, $text-dark...etc
// * $base-font-family, $custom-font-family, $code-font-family
// 4. If you have changes for mobile/tablet, put them at the bottom of the sass file.
// --------------------------------------------------------------------------------------------------------------------
.rst-content
// Sphinx by default applies HxW style attributes to images. This fixes that oversite.
img
max-width: 100%
height: auto
div.figure
margin-bottom: $base-line-height
p.caption
font-style: italic
p:last-child.caption
margin-bottom: 0px
div.figure.align-center
text-align: center
// Usually it's a good idea to give images some space.
.section > img, .section > a > img
margin-bottom: $base-line-height
// normalize browser styling
abbr[title]
text-decoration: none
// Style external links
&.style-external-links a.reference.external:after
font-family: FontAwesome
content: "\f08e"
color: $text-light
vertical-align: super
font-size: 60%
margin: 0 0.2em
// For the most part, its safe to assume that sphinx wants you to use a blockquote as an indent. It gets
// used in many different ways, so don't assume you can apply some fancy style, just leave it be.
blockquote
margin-left: $base-line-height
line-height: $base-line-height
margin-bottom: $base-line-height
pre.literal-block
white-space: pre
margin: 0
padding: $base-line-height / 2 $base-line-height / 2
font-family: $code-font-family
display: block
overflow: auto
pre.literal-block, div[class^='highlight']
border: 1px solid $table-border-color
overflow-x: auto
// 1px hack otherwise border won't show. lame
margin: 1px 0 $base-line-height 0
div[class^='highlight']
padding: 0px
border: none
margin: 0
// Needs 100% width for line highlighting to work properly
div[class^='highlight'] td.code
width: 100%
.linenodiv pre
border-right: solid 1px lighten($table-border-color, 2%)
margin: 0
padding: $base-line-height / 2 $base-line-height / 2
font-family: $code-font-family
user-select: none
pointer-events: none
div[class^='highlight'] pre
white-space: pre
margin: 0
padding: $base-line-height / 2 $base-line-height / 2
display: block
overflow: auto
& .hll
// Line emphasis spans full width
display: block
margin: 0 -1 * $base-line-height / 2
padding: 0 $base-line-height / 2
pre.literal-block, div[class^='highlight'] pre, .linenodiv pre
font-family: $code-font-family
font-size: 12px
line-height: 1.4
.code-block-caption
font-style: italic
font-size: 85%
line-height: 1
padding: 1em 0
text-align: center
@media print
.codeblock, div[class^='highlight'], div[class^='highlight'] pre
white-space: pre-wrap
// These are the various note pullouts that sphinx applies
.note, .attention, .caution, .danger, .error, .hint, .important, .tip, .warning, .seealso, .admonition-todo, .admonition
@extend .wy-alert
.last
margin-bottom: 0
.admonition-title
@extend .wy-alert-title
@extend .fa
@extend .fa-exclamation-circle
&:before
margin-right: 4px
.note, .seealso
@extend .wy-alert.wy-alert-info
.hint, .tip, .important
@extend .wy-alert.wy-alert-success
.error, .danger
@extend .wy-alert.wy-alert-danger
.warning, .caution, .attention, .admonition-todo
@extend .wy-alert.wy-alert-warning
// Some people put tables in notes. Let's give them very basic support.
.admonition table
border-color: rgba(0,0,0,.1)
td, th
background: transparent !important
border-color: rgba(0,0,0,.1) !important
.section ul, .toctree-wrapper ul
@extend .wy-plain-list-disc
.section ol.loweralpha, .section ol.loweralpha li
list-style: lower-alpha
.section ol.upperalpha, .section ol.upperalpha li
list-style: upper-alpha
.section ol, ol.arabic
@extend .wy-plain-list-decimal
.section ol p, .section ul p
margin-bottom: $base-line-height / 2
&:last-child
margin-bottom: $base-line-height
.line-block
margin-left: 0px
margin-bottom: $base-line-height
line-height: $base-line-height
.line-block .line-block
margin-left: $base-line-height
margin-bottom: 0px
// Generics handling of headings and toc stuff.
.topic-title
font-weight: bold
margin-bottom: $base-line-height / 2
.toc-backref
color: $text-color
.align-right
float: right
margin: 0px 0px $base-line-height $base-line-height
.align-left
float: left
margin: 0px $base-line-height $base-line-height 0px
.align-center
margin: auto
// Do not override display:table for tables
&:not(table)
display: block
.toctree-wrapper p.caption
@extend h2
// This is the #href that shows up on hover. Sphinx's is terrible so I hack it away.
h1, h2, h3, h4, h5, h6, dl dt, p.caption, table > caption, .code-block-caption
.headerlink
visibility: hidden
font-size: 14px
@extend .fa
&:after
content: "\f0c1"
font-family: FontAwesome
&:hover .headerlink:after
visibility: visible
table > caption .headerlink:after
font-size: 12px
.centered
text-align: center
// Sidebar content. You'll see at the bottom of this file I change it in mobile.
.sidebar
float: right
width: 40%
display: block
margin: 0 0 $base-line-height $base-line-height
padding: $base-line-height
background: $sidebar-background-color
border: solid 1px $sidebar-border-color
// Sidebar content is usually less relevant, so adjust the margins and sizes.
p, ul, dl
font-size: 90%
.last
margin-bottom: 0
.sidebar-title
display: block
font-family: $custom-font-family
font-weight: bold
background: $table-border-color
padding: $base-line-height / 4 $base-line-height / 2
margin: -$base-line-height
margin-bottom: $base-line-height
font-size: 100%
// Sphinx can highlight searched text with ?highlighted=searchterm
.highlighted
background: $highlight-color
display: inline-block
font-weight: bold
padding: 0 $base-line-height / 4
// These are the little citation links [1] that show up within paragraphs.
.footnote-reference, .citation-reference
vertical-align: baseline
position: relative
top: -0.4em
line-height: 0
font-size: 90%
// Tables! Sphinx LOVES TABLES. Most of wyrm assumes you're only going to use a table as a table
// so I have to write a bunch of unique stuff for Sphinx to style them up differently like it's 2003.
table.docutils.citation, table.docutils.footnote
background: none
border: none
color: $text-medium
td, tr
border: none
background-color: transparent !important
white-space: normal
td.label
padding-left: 0
padding-right: 0
vertical-align: top
code
color: $gray
// Remove the large vertical space between citations and footnotes
.wy-table-responsive.citation, .wy-table-responsive.footnote
margin-bottom: 0
// Re-add vertical space to element directly following citation and footnotes,
// if the following element is of a different type
.wy-table-responsive.citation + :not(.citation),
.wy-table-responsive.footnote + :not(.footnote)
margin-top: $base-line-height
// Re-add vertical space after citation and footnotes if it is the last child of a parent
.wy-table-responsive.citation:last-child, .wy-table-responsive.footnote:last-child
margin-bottom: $base-line-height
table.docutils
@extend .wy-table
@extend .wy-table-bordered-all
th
border-color: $table-border-color
&:not(.field-list)
@extend .wy-table-striped
// Remove bottom margin for the last element (and it's last child)
td .last, td .last :last-child
margin-bottom: 0
// This table is what gets spit out for auto-generated API stuff. I style it smaller bits of padding.
table.field-list
@extend .wy-table
border: none
td
border: none
p
font-size: inherit
line-height: inherit
td > strong
display: inline-block
.field-name
padding-right: 10px
text-align: left
white-space: nowrap
.field-body
text-align: left
// These are the "literals" that get spit out when you mark stuff as ``code`` as your write.
tt, code
@extend code
color: $black
font-family: $code-font-family
padding: 2px 5px
big, em
font-size: 100% !important
line-height: normal
&.literal
color: $text-code-color
&.xref, a &
font-weight: bold
color: $text-codexref-color
pre, kbd, samp
font-family: $code-font-family
// If the literal is inside an a tag, let's color it like a link
a tt, a code
color: $link-color
dl
margin-bottom: $base-line-height
dt
font-weight: bold
margin-bottom: $base-line-height / 2
// Most of the content within these dls are one liners, so I halve the normal margins.
p, table, ul, ol
margin-bottom: $base-line-height / 2 !important
// rST seems to want dds to be treated as the browser would, indented.
dd
margin: 0 0 $base-line-height / 2 $base-line-height
line-height: $base-line-height
// This is what Sphinx spits out for it's autodocs. Depending upon what language the person is referencing
// these things usually have a class of "method" or "class" or something similar, but really who knows.
// Sphinx doesn't give me a generic class on these, so unfortunately I have to apply it to the root dl.
// This makes me terribly unhappy and makes this code very nesty. Unfortunately I've seen hand-written docs
// that output similar, but not quite the same nesting so this is really the best we can do.
dl:not(.docutils)
margin-bottom: $base-line-height
// This would be the equivilant of a .. class::
dt
display: table
margin: $base-line-height / 4 0
font-size: 90%
line-height: normal
background: lighten($class-color, 50%)
color: $class-color
border-top: solid 3px lighten($class-color, 20%)
padding: $base-line-height / 4
position: relative
&:before
color: lighten($class-color, 20%)
.headerlink
color: $text-color
font-size: 100% !important
// And this would be the .. method::
dl dt
margin-bottom: $base-line-height / 4
border: none
border-left: solid 3px hsl(0,0%,80%)
background: hsl(0,0%,94%)
color: $method-color
.headerlink
color: $headerlink-color
font-size: 100% !important
dt:first-child
margin-top: 0
// Since dts get the callout style, we treat this less as callouts.
tt, code
font-weight: bold
&.descname, &.descclassname
background-color: transparent
border: none
padding: 0
font-size: 100% !important
&.descname
font-weight: bold
// This is for more advanced parameter control
.optional
display: inline-block
padding: 0 4px
color: $black
font-weight: bold
.property
display: inline-block
padding-right: 8px
// Doc links to sourcecode
.viewcode-link, .viewcode-back
display: inline-block
color: $text-viewcode-color
font-size: 80%
padding-left: $base-line-height
.viewcode-back
display: block
float: right
p.rubric
margin-bottom: 12px
font-weight: bold
//Download link
code.download
background: inherit
padding: inherit
font-weight: normal
font-family: inherit
font-size: inherit
color: inherit
border: inherit
white-space: inherit
span:first-child
-webkit-font-smoothing: subpixel-antialiased
@extend .fa
@extend .fa-download
&:before
margin-right: 4px
.guilabel
border: 1px solid lighten($guilabel-color, 25%)
background: lighten($guilabel-color, 50%)
font-size: 80%
font-weight: 700
border-radius: $base-line-height / 6
padding: $base-line-height / 10 $base-line-height / 4
margin: auto $base-line-height / 12
.versionmodified
font-style: italic
// Mobile specific
+media($mobile)
.rst-content
.sidebar
width: 100%

View File

@ -0,0 +1,67 @@
// In here are varibles used for sphinx_rtd_theme, they either add to or overwrite the default ones
// that are set in wyrm_core/wy_variables.sass. You'll find wyrm in bower_components if you're looking
// for a reference.
$font-awesome-dir: "../fonts/"
$static-img: "../img/"
$nav-content-width: 800px
$nav-media-query: (($nav-desktop-width) + ($nav-content-width))
$mathjax-color: $text-color
$headerlink-color: $text-color
// Code colors
$text-viewcode-color: $green
$text-codexref-color: $text-color
// Definition list colors
$class-color: $blue
$method-color: $gray
// GUI label color
$guilabel-color: $blue
// Footer colors
$footer-color: $text-medium
// Menu colors
$menu-vertical-background-color: $section-background-color
// Menu text colors
$menu-color: $gray
$menu-dark: lighten($menu-color,10%) !default
$menu-medium: lighten($menu-color,27.5%) !default
$menu-light: lighten($menu-color,45%) !default
$menu-lighter: lighten($menu-color,60%) !default
// Menu link colors
$menu-link-color: $text-color
$menu-link-dark: $text-dark
$menu-link-medium: $text-medium
$menu-link-light: $text-lighter
$menu-link-active: $white
// Navigation colors
$nav-background-color: $menu-background-color
$nav-search-background-color: $blue
$nav-search-color: $section-background-color
$nav-link-color: $blue
$nav-link-color-visited: $purple
$nav-link-color-hover: lighten($nav-link-color, 6%) !default
$nav-link-color-alt: hsl(33, 100%, 51%)
$nav-caption: desaturate($blue, 15%)
// Sidebar colors
$sidebar-background-color: $table-stripe-color
$sidebar-border-color: $table-border-color
$sidebar-title-background-color: $table-border-color
// Sphinx highlight color
$highlight-color: $yellow
$base-font-family: "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif
$custom-font-family: "Roboto Slab", "ff-tisa-web-pro", "Georgia", Arial, sans-serif
$custom-font-family2: Georgia, serif
$code-font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace

16
sass/badge_only.sass Normal file
View File

@ -0,0 +1,16 @@
// ------------------------------------------------------------
// CONTRIBUTORS, PLEASE READ THIS!
// ------------------------------------------------------------
// This generates the RTD sticky badge for non RTD themes. As
// always, only files labeled "theme_*.sass should be edited".
// ------------------------------------------------------------
$border-box-sizing: false !default
@import wyrm_core/wy_variables
@import theme_variables
@import bourbon
@import neat
@import wyrm_core/mixin
@import wyrm_core/grid_settings
@import _theme_badge_fa
@import _theme_badge

50
sass/theme.sass Normal file
View File

@ -0,0 +1,50 @@
// ------------------------------------------------------------
// CONTRIBUTORS, PLEASE READ THIS!
// ------------------------------------------------------------
// This theme pulls from other frontend projects. The only
// things you should edit are the sass files that start with
// "theme_*.sass". All other files are loaded through bower.
// ------------------------------------------------------------
// Variable defaults set by Wyrm
@import wyrm_core/wy_variables
// Variable overrides that change coloring and fonts for this theme.
@import theme_variables
// bourbon.io framework
@import bourbon
// Bourbon.io/neat framework, with some default media queries
@import wyrm_core/grid_settings
@import neat
// Some corrections for neat
@import wyrm_core/neat_extra
// Custom reset
@import wyrm_core/reset
// Wyrm mixins
@import wyrm_core/mixin
// Font Awesome 4.0 with wyrm extras
@import font-awesome
@import wyrm_core/font_icon_defaults
// Wyrm core styles used in this theme
@import wyrm_core/alert
@import wyrm_core/button
@import wyrm_core/dropdown
@import wyrm_core/form
@import wyrm_core/generic
@import wyrm_core/table
@import wyrm_core/type
// Theme specific styles. These are likely the files you want to edit.
@import theme_breadcrumbs
@import theme_layout
@import theme_badge
@import theme_rst
@import theme_mathjax
@import theme_font_awesome_compatibility
@import theme_font_local

2
setup.cfg Normal file
View File

@ -0,0 +1,2 @@
[bdist_wheel]
universal = 1

58
setup.py Normal file
View File

@ -0,0 +1,58 @@
# -*- coding: utf-8 -*-
"""`sphinx_rtd_theme` lives on `Github`_.
.. _github: https://github.com/rtfd/sphinx_rtd_theme
"""
from io import open
from setuptools import setup
from sphinx_rtd_theme import __version__
setup(
name='sphinx_rtd_theme',
version=__version__,
url='https://github.com/rtfd/sphinx_rtd_theme/',
license='MIT',
author='Dave Snider, Read the Docs, Inc. & contributors',
author_email='dev@readthedocs.org',
description='Read the Docs theme for Sphinx',
long_description=open('README.rst', encoding='utf-8').read(),
zip_safe=False,
packages=['sphinx_rtd_theme'],
package_data={'sphinx_rtd_theme': [
'theme.conf',
'*.html',
'static/css/*.css',
'static/js/*.js',
'static/font/*.*'
]},
include_package_data=True,
# See http://www.sphinx-doc.org/en/stable/theming.html#distribute-your-theme-as-a-python-package
entry_points = {
'sphinx.html_themes': [
'sphinx_rtd_theme = sphinx_rtd_theme',
]
},
install_requires=[
'sphinx'
],
classifiers=[
'Framework :: Sphinx',
'Framework :: Sphinx :: Theme',
'Development Status :: 5 - Production/Stable',
'License :: OSI Approved :: MIT License',
'Environment :: Console',
'Environment :: Web Environment',
'Intended Audience :: Developers',
'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',
'Operating System :: OS Independent',
'Topic :: Documentation',
'Topic :: Software Development :: Documentation',
],
)

View File

@ -0,0 +1,20 @@
"""Sphinx ReadTheDocs theme.
From https://github.com/ryan-roemer/sphinx-bootstrap-theme.
"""
from os import path
__version__ = '0.4.3'
__version_full__ = __version__
def get_html_theme_path():
"""Return list of HTML theme paths."""
cur_dir = path.abspath(path.dirname(path.dirname(__file__)))
return cur_dir
# See http://www.sphinx-doc.org/en/stable/theming.html#distribute-your-theme-as-a-python-package
def setup(app):
app.add_html_theme('sphinx_rtd_theme', path.abspath(path.dirname(__file__)))

View File

@ -0,0 +1,82 @@
{# Support for Sphinx 1.3+ page_source_suffix, but don't break old builds. #}
{% if page_source_suffix %}
{% set suffix = page_source_suffix %}
{% else %}
{% set suffix = source_suffix %}
{% endif %}
{% if meta is defined and meta is not none %}
{% set check_meta = True %}
{% else %}
{% set check_meta = False %}
{% endif %}
{% if check_meta and 'github_url' in meta %}
{% set display_github = True %}
{% endif %}
{% if check_meta and 'bitbucket_url' in meta %}
{% set display_bitbucket = True %}
{% endif %}
{% if check_meta and 'gitlab_url' in meta %}
{% set display_gitlab = True %}
{% endif %}
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
{% block breadcrumbs %}
<li><a href="{{ pathto(master_doc) }}">{{ _('Docs') }}</a> &raquo;</li>
{% for doc in parents %}
<li><a href="{{ doc.link|e }}">{{ doc.title }}</a> &raquo;</li>
{% endfor %}
<li>{{ title }}</li>
{% endblock %}
{% block breadcrumbs_aside %}
<li class="wy-breadcrumbs-aside">
{% if hasdoc(pagename) %}
{% if display_github %}
{% if check_meta and 'github_url' in meta %}
<!-- User defined GitHub URL -->
<a href="{{ meta['github_url'] }}" class="fa fa-github"> {{ _('Edit on GitHub') }}</a>
{% else %}
<a href="https://{{ github_host|default("github.com") }}/{{ github_user }}/{{ github_repo }}/{{ theme_vcs_pageview_mode|default("blob") }}/{{ github_version }}{{ conf_py_path }}{{ pagename }}{{ suffix }}" class="fa fa-github"> {{ _('Edit on GitHub') }}</a>
{% endif %}
{% elif display_bitbucket %}
{% if check_meta and 'bitbucket_url' in meta %}
<!-- User defined Bitbucket URL -->
<a href="{{ meta['bitbucket_url'] }}" class="fa fa-bitbucket"> {{ _('Edit on Bitbucket') }}</a>
{% else %}
<a href="https://bitbucket.org/{{ bitbucket_user }}/{{ bitbucket_repo }}/src/{{ bitbucket_version}}{{ conf_py_path }}{{ pagename }}{{ suffix }}?mode={{ theme_vcs_pageview_mode|default("view") }}" class="fa fa-bitbucket"> {{ _('Edit on Bitbucket') }}</a>
{% endif %}
{% elif display_gitlab %}
{% if check_meta and 'gitlab_url' in meta %}
<!-- User defined GitLab URL -->
<a href="{{ meta['gitlab_url'] }}" class="fa fa-gitlab"> {{ _('Edit on GitLab') }}</a>
{% else %}
<a href="https://{{ gitlab_host|default("gitlab.com") }}/{{ gitlab_user }}/{{ gitlab_repo }}/{{ theme_vcs_pageview_mode|default("blob") }}/{{ gitlab_version }}{{ conf_py_path }}{{ pagename }}{{ suffix }}" class="fa fa-gitlab"> {{ _('Edit on GitLab') }}</a>
{% endif %}
{% elif show_source and source_url_prefix %}
<a href="{{ source_url_prefix }}{{ pagename }}{{ suffix }}">{{ _('View page source') }}</a>
{% elif show_source and has_source and sourcename %}
<a href="{{ pathto('_sources/' + sourcename, true)|e }}" rel="nofollow"> {{ _('View page source') }}</a>
{% endif %}
{% endif %}
</li>
{% endblock %}
</ul>
{% if (theme_prev_next_buttons_location == 'top' or theme_prev_next_buttons_location == 'both') and (next or prev) %}
<div class="rst-breadcrumbs-buttons" role="navigation" aria-label="breadcrumb navigation">
{% if next %}
<a href="{{ next.link|e }}" class="btn btn-neutral float-right" title="{{ next.title|striptags|e }}" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
{% endif %}
{% if prev %}
<a href="{{ prev.link|e }}" class="btn btn-neutral float-left" title="{{ prev.title|striptags|e }}" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
{% endif %}
</div>
{% endif %}
<hr/>
</div>

View File

@ -0,0 +1,54 @@
<footer>
{% if (theme_prev_next_buttons_location == 'bottom' or theme_prev_next_buttons_location == 'both') and (next or prev) %}
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
{% if next %}
<a href="{{ next.link|e }}" class="btn btn-neutral float-right" title="{{ next.title|striptags|e }}" accesskey="n" rel="next">{{ _('Next') }} <span class="fa fa-arrow-circle-right"></span></a>
{% endif %}
{% if prev %}
<a href="{{ prev.link|e }}" class="btn btn-neutral float-left" title="{{ prev.title|striptags|e }}" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> {{ _('Previous') }}</a>
{% endif %}
</div>
{% endif %}
<hr/>
<div role="contentinfo">
<p>
{%- if show_copyright %}
{%- if hasdoc('copyright') %}
{% trans path=pathto('copyright'), copyright=copyright|e %}&copy; <a href="{{ path }}">Copyright</a> {{ copyright }}{% endtrans %}
{%- else %}
{% trans copyright=copyright|e %}&copy; Copyright {{ copyright }}{% endtrans %}
{%- endif %}
{%- endif %}
{%- if build_id and build_url %}
{% trans build_url=build_url, build_id=build_id %}
<span class="build">
Build
<a href="{{ build_url }}">{{ build_id }}</a>.
</span>
{% endtrans %}
{%- elif commit %}
{% trans commit=commit %}
<span class="commit">
Revision <code>{{ commit }}</code>.
</span>
{% endtrans %}
{%- elif last_updated %}
<span class="lastupdated">
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
</span>
{%- endif %}
</p>
</div>
{%- if show_sphinx %}
{% trans %}Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>{% endtrans %}.
{%- endif %}
{%- block extrafooter %} {% endblock %}
</footer>

View File

@ -0,0 +1,235 @@
{# TEMPLATE VAR SETTINGS #}
{%- set url_root = pathto('', 1) %}
{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
{%- if not embedded and docstitle %}
{%- set titlesuffix = " &mdash; "|safe + docstitle|e %}
{%- else %}
{%- set titlesuffix = "" %}
{%- endif %}
{%- set lang_attr = 'en' if language == None else (language | replace('_', '-')) %}
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="{{ lang_attr }}" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="{{ lang_attr }}" > <!--<![endif]-->
<head>
<meta charset="utf-8">
{{ metatags }}
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{% block htmltitle %}
<title>{{ title|striptags|e }}{{ titlesuffix }}</title>
{% endblock %}
{# FAVICON #}
{% if favicon %}
<link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
{% endif %}
{# CANONICAL URL #}
{% if theme_canonical_url %}
<link rel="canonical" href="{{ theme_canonical_url }}{{ pagename }}.html"/>
{% endif %}
{# JAVASCRIPTS #}
<script type="text/javascript" src="{{ pathto('_static/js/modernizr.min.js', 1) }}"></script>
{%- if not embedded %}
{# XXX Sphinx 1.8.0 made this an external js-file, quick fix until we refactor the template to inherert more blocks directly from sphinx #}
{% if sphinx_version >= "1.8.0" %}
<script type="text/javascript" id="documentation_options" data-url_root="{{ pathto('', 1) }}" src="{{ pathto('_static/documentation_options.js', 1) }}"></script>
{%- for scriptfile in script_files %}
{{ js_tag(scriptfile) }}
{%- endfor %}
{% else %}
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'{{ url_root }}',
VERSION:'{{ release|e }}',
LANGUAGE:'{{ language }}',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'{{ '' if no_search_suffix else file_suffix }}',
HAS_SOURCE: {{ has_source|lower }},
SOURCELINK_SUFFIX: '{{ sourcelink_suffix }}'
};
</script>
{%- for scriptfile in script_files %}
<script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
{%- endfor %}
{% endif %}
<script type="text/javascript" src="{{ pathto('_static/js/theme.js', 1) }}"></script>
{# OPENSEARCH #}
{%- if use_opensearch %}
<link rel="search" type="application/opensearchdescription+xml"
title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}"
href="{{ pathto('_static/opensearch.xml', 1) }}"/>
{%- endif %}
{%- endif %}
{# CSS #}
<link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
<link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
{%- for css in css_files %}
{%- if css|attr("rel") %}
<link rel="{{ css.rel }}" href="{{ pathto(css.filename, 1) }}" type="text/css"{% if css.title is not none %} title="{{ css.title }}"{% endif %} />
{%- else %}
<link rel="stylesheet" href="{{ pathto(css, 1) }}" type="text/css" />
{%- endif %}
{%- endfor %}
{%- for cssfile in extra_css_files %}
<link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
{%- endfor %}
{%- block linktags %}
{%- if hasdoc('about') %}
<link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
{%- endif %}
{%- if hasdoc('genindex') %}
<link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
{%- endif %}
{%- if hasdoc('search') %}
<link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
{%- endif %}
{%- if hasdoc('copyright') %}
<link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
{%- endif %}
{%- if next %}
<link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" />
{%- endif %}
{%- if prev %}
<link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" />
{%- endif %}
{%- endblock %}
{%- block extrahead %} {% endblock %}
</head>
<body class="wy-body-for-nav">
{% block extrabody %} {% endblock %}
<div class="wy-grid-for-nav">
{# SIDE NAV, TOGGLES ON MOBILE #}
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" {% if theme_style_nav_header_background %} style="background: {{theme_style_nav_header_background}}" {% endif %}>
{% block sidebartitle %}
{% if logo and theme_logo_only %}
<a href="{{ pathto(master_doc) }}">
{% else %}
<a href="{{ pathto(master_doc) }}" class="icon icon-home"> {{ project }}
{% endif %}
{% if logo %}
{# Not strictly valid HTML, but it's the only way to display/scale
it properly, without weird scripting or heaps of work
#}
<img src="{{ pathto('_static/' + logo, 1) }}" class="logo" alt="Logo"/>
{% endif %}
</a>
{% if theme_display_version %}
{%- set nav_version = version %}
{% if READTHEDOCS and current_version %}
{%- set nav_version = current_version %}
{% endif %}
{% if nav_version %}
<div class="version">
{{ nav_version }}
</div>
{% endif %}
{% endif %}
{% include "searchbox.html" %}
{% endblock %}
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
{% block menu %}
{#
The singlehtml builder doesn't handle this toctree call when the
toctree is empty. Skip building this for now.
#}
{% if 'singlehtml' not in builder %}
{% set global_toc = toctree(maxdepth=theme_navigation_depth|int,
collapse=theme_collapse_navigation|tobool,
includehidden=theme_includehidden|tobool,
titles_only=theme_titles_only|tobool) %}
{% endif %}
{% if global_toc %}
{{ global_toc }}
{% else %}
<!-- Local TOC -->
<div class="local-toc">{{ toc }}</div>
{% endif %}
{% endblock %}
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
{# MOBILE NAV, TRIGGLES SIDE NAV ON TOGGLE #}
<nav class="wy-nav-top" aria-label="top navigation">
{% block mobile_nav %}
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="{{ pathto(master_doc) }}">{{ project }}</a>
{% endblock %}
</nav>
<div class="wy-nav-content">
{%- block content %}
{% if theme_style_external_links|tobool %}
<div class="rst-content style-external-links">
{% else %}
<div class="rst-content">
{% endif %}
{% include "breadcrumbs.html" %}
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
{%- block document %}
<div itemprop="articleBody">
{% block body %}{% endblock %}
</div>
{% if self.comments()|trim %}
<div class="articleComments">
{% block comments %}{% endblock %}
</div>
{% endif%}
</div>
{%- endblock %}
{% include "footer.html" %}
</div>
{%- endblock %}
</div>
</section>
</div>
{% include "versions.html" %}
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable({{ 'true' if theme_sticky_navigation|tobool else 'false' }});
});
</script>
{# Do not conflict with RTD insertion of analytics script #}
{% if not READTHEDOCS %}
{% if theme_analytics_id %}
<!-- Theme Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', '{{ theme_analytics_id }}', 'auto');
ga('send', 'pageview');
</script>
{% endif %}
{% endif %}
{%- block footer %} {% endblock %}
</body>
</html>

View File

@ -0,0 +1,50 @@
{#
basic/search.html
~~~~~~~~~~~~~~~~~
Template for the search page.
:copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
#}
{%- extends "layout.html" %}
{% set title = _('Search') %}
{% set script_files = script_files + ['_static/searchtools.js'] %}
{% block footer %}
<script type="text/javascript">
jQuery(function() { Search.loadIndex("{{ pathto('searchindex.js', 1) }}"); });
</script>
{# this is used when loading the search index using $.ajax fails,
such as on Chrome for documents on localhost #}
<script type="text/javascript" id="searchindexloader"></script>
{{ super() }}
{% endblock %}
{% block body %}
<noscript>
<div id="fallback" class="admonition warning">
<p class="last">
{% trans %}Please activate JavaScript to enable the search
functionality.{% endtrans %}
</p>
</div>
</noscript>
{% if search_performed %}
<h2>{{ _('Search Results') }}</h2>
{% if not search_results %}
<p>{{ _('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.') }}</p>
{% endif %}
{% endif %}
<div id="search-results">
{% if search_results %}
<ul>
{% for href, caption, context in search_results %}
<li>
<a href="{{ pathto(item.href) }}">{{ caption }}</a>
<p class="context">{{ context|e }}</p>
</li>
{% endfor %}
</ul>
{% endif %}
</div>
{% endblock %}

View File

@ -0,0 +1,9 @@
{%- if builder != 'singlehtml' %}
<div role="search">
<form id="rtd-search-form" class="wy-form" action="{{ pathto('search') }}" method="get">
<input type="text" name="q" placeholder="{{ _('Search docs') }}" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
{%- endif %}

View File

@ -0,0 +1,18 @@
[theme]
inherit = basic
stylesheet = css/theme.css
pygments_style = default
[options]
canonical_url =
analytics_id =
collapse_navigation = True
sticky_navigation = True
navigation_depth = 4
includehidden = True
titles_only =
logo_only =
display_version = True
prev_next_buttons_location = bottom
style_external_links = False
style_nav_header_background =

View File

@ -0,0 +1,37 @@
{% if READTHEDOCS %}
{# Add rst-badge after rst-versions for small badge style. #}
<div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span class="fa fa-book"> Read the Docs</span>
v: {{ current_version }}
<span class="fa fa-caret-down"></span>
</span>
<div class="rst-other-versions">
<dl>
<dt>{{ _('Versions') }}</dt>
{% for slug, url in versions %}
<dd><a href="{{ url }}">{{ slug }}</a></dd>
{% endfor %}
</dl>
<dl>
<dt>{{ _('Downloads') }}</dt>
{% for type, url in downloads %}
<dd><a href="{{ url }}">{{ type }}</a></dd>
{% endfor %}
</dl>
<dl>
<dt>{{ _('On Read the Docs') }}</dt>
<dd>
<a href="//{{ PRODUCTION_DOMAIN }}/projects/{{ slug }}/?fromdocs={{ slug }}">{{ _('Project Home') }}</a>
</dd>
<dd>
<a href="//{{ PRODUCTION_DOMAIN }}/builds/{{ slug }}/?fromdocs={{ slug }}">{{ _('Builds') }}</a>
</dd>
</dl>
<hr/>
{% trans %}Free document hosting provided by <a href="http://www.readthedocs.org">Read the Docs</a>.{% endtrans %}
</div>
</div>
{% endif %}

0
tests/__init__.py Normal file
View File

View File

@ -0,0 +1,2 @@
bar
===

View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
master_doc = 'index'
exclude_patterns = ['_build']

View File

@ -0,0 +1,6 @@
foo
===
.. toctree::
bar

View File

@ -0,0 +1,12 @@
test-basic
==========
.. toctree::
foo
Heading
-------
Subheading
~~~~~~~~~~

View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
master_doc = 'index'
exclude_patterns = ['_build']

View File

@ -0,0 +1,10 @@
test-empty
==========
.. toctree::
Heading
-------
Subheading
~~~~~~~~~~

View File

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
master_doc = 'index'
exclude_patterns = ['_build']

View File

@ -0,0 +1,2 @@
test-missing-toctree
====================

99
tests/test_builders.py Normal file
View File

@ -0,0 +1,99 @@
import os
import pytest
import sphinx
from sphinx import addnodes
from sphinx.builders.html import SingleFileHTMLBuilder, DirectoryHTMLBuilder
from .util import build_all
def test_basic():
for (app, status, warning) in build_all('test-basic'):
assert app.env.get_doctree('index').traverse(addnodes.toctree)
content = open(os.path.join(app.outdir, 'index.html')).read()
if isinstance(app.builder, DirectoryHTMLBuilder):
search = (
'<div class="toctree-wrapper compound">\n'
'<ul>\n'
'<li class="toctree-l1">'
'<a class="reference internal" href="foo/">foo</a>'
'<ul>\n'
'<li class="toctree-l2">'
'<a class="reference internal" href="bar/">bar</a></li>\n'
'</ul>\n'
'</li>\n'
'</ul>\n'
'</div>'
)
assert search in content
elif isinstance(app.builder, SingleFileHTMLBuilder):
search = (
'<div class="local-toc"><ul>\n'
'<li class="toctree-l1">'
'<a class="reference internal" href="index.html#document-foo">foo</a>'
'<ul>\n'
'<li class="toctree-l2">'
'<a class="reference internal" href="index.html#document-bar">bar</a>'
'</li>\n'
'</ul>'
)
assert search in content
else:
search = (
'<div class="toctree-wrapper compound">\n'
'<ul>\n'
'<li class="toctree-l1">'
'<a class="reference internal" href="foo.html">foo</a>'
'<ul>\n'
'<li class="toctree-l2">'
'<a class="reference internal" href="bar.html">bar</a></li>\n'
'</ul>\n'
'</li>\n'
'</ul>\n'
'</div>'
)
assert search in content, ('Missing search with builder {0}'
.format(app.builder.name))
def test_empty():
"""Local TOC is showing, as toctree was empty"""
for (app, status, warning) in build_all('test-empty'):
assert app.env.get_doctree('index').traverse(addnodes.toctree)
content = open(os.path.join(app.outdir, 'index.html')).read()
if sphinx.version_info < (1, 4):
if isinstance(app.builder, SingleFileHTMLBuilder):
assert '<div class="toctree-wrapper compound">\n</div>' in content
assert '<div class="local-toc">' in content
else:
global_toc = (
'<div class="toctree-wrapper compound">\n'
'<ul class="simple">\n</ul>\n'
'</div>'
)
local_toc = (
'<div class="local-toc"><ul class="simple">'
'</ul>\n</div>'
)
assert global_toc in content
assert local_toc not in content
else:
global_toc = '<div class="toctree-wrapper compound">\n</div>'
local_toc = (
'<div class="local-toc"><ul>\n'
'<li><a class="reference internal" href="#">test-empty</a></li>'
'</ul>\n</div>'
)
assert global_toc in content
assert local_toc not in content
def test_missing_toctree():
"""Local TOC is showing, as toctree was missing"""
for (app, status, warning) in build_all('test-missing-toctree'):
assert app.env.get_doctree('index').traverse(addnodes.toctree) == []
content = open(os.path.join(app.outdir, 'index.html')).read()
assert '<div class="toctree' not in content
assert '<div class="local-toc">' in content

60
tests/util.py Normal file
View File

@ -0,0 +1,60 @@
from __future__ import print_function
import os
import tempfile
import shutil
from contextlib import contextmanager
import pytest
from sphinx.application import Sphinx
try:
from StringIO import StringIO
except ImportError:
from io import StringIO
@contextmanager
def build(root, builder='html', **kwargs):
tmpdir = tempfile.mkdtemp()
srcdir = os.path.join(os.path.dirname(__file__), 'roots', root)
destdir = os.path.join(tmpdir, builder)
doctreedir = os.path.join(tmpdir, 'doctree/')
status = StringIO()
warning = StringIO()
kwargs.update({
'status': status,
'warning': warning,
})
confoverrides = kwargs.pop('confoverrides', {})
confoverrides['html_theme'] = 'sphinx_rtd_theme'
extensions = confoverrides.get('extensions', [])
extensions.append('readthedocs_ext.readthedocs')
confoverrides['extensions'] = extensions
kwargs['confoverrides'] = confoverrides
try:
app = Sphinx(srcdir, srcdir, destdir, doctreedir, builder, **kwargs)
app.builder.build_all()
yield (app, status.getvalue(), warning.getvalue())
except Exception as e:
print('# root:', root)
print('# builder:', builder)
print('# source:', srcdir)
print('# destination:', destdir)
print('# status:', '\n' + status.getvalue())
print('# warning:', '\n' + warning.getvalue())
raise
finally:
shutil.rmtree(tmpdir)
def build_all(root, **kwargs):
for builder in ['html', 'singlehtml', 'readthedocs', 'readthedocsdirhtml',
'readthedocssinglehtml', 'readthedocssinglehtmllocalmedia']:
with build(root, builder, **kwargs) as ret:
yield ret

32
tox.ini Normal file
View File

@ -0,0 +1,32 @@
[tox]
envlist = py{27,34,35,36,37}-sphinx{13,14,15,16,17,18}, docs
[tox:travis]
2.7 = py27-sphinx{13,14,15,16,17,18}
3.4 = py34-sphinx{13,14,15,16,17,18}
3.5 = py35-sphinx{13,14,15,16,17,18}
3.6 = py36-sphinx{13,14,15,16,17,18}
3.7 = py37-sphinx{13,14,15,16,17,18}
[testenv]
setev =
LANG=C
deps =
.
readthedocs-sphinx-ext
pytest
sphinx13: Sphinx < 1.4
sphinx14: Sphinx < 1.5
sphinx15: Sphinx < 1.6
sphinx16: Sphinx < 1.7
sphinx17: Sphinx < 1.8
sphinx18: Sphinx < 1.9
commands =
py.test {posargs}
[testenv:docs]
changedir = {toxinidir}/docs
deps =
-r{toxinidir}/docs/requirements.txt
commands =
sphinx-build -b html -d {envtmpdir}/doctrees . {envtmpdir}/html