From 8eb6e4d2421e90abfa15ab95f466eb7f4e8e17b6 Mon Sep 17 00:00:00 2001 From: Tilly Woodfield <22456167+tillywoodfield@users.noreply.github.com> Date: Wed, 17 Apr 2024 11:14:01 +0300 Subject: [PATCH 1/7] Init theme --- .gitignore | 3 +++ README.md | 2 +- iati_sphinx_theme/__init__.py | 9 +++++++++ iati_sphinx_theme/theme.conf | 2 ++ pyproject.toml | 11 +++++++++++ 5 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 iati_sphinx_theme/__init__.py create mode 100644 iati_sphinx_theme/theme.conf create mode 100644 pyproject.toml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b4fe3f4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Python +.ve +__pycache__ diff --git a/README.md b/README.md index 1de8727..d67a4f0 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# sphinx-theme +# IATI Sphinx Theme diff --git a/iati_sphinx_theme/__init__.py b/iati_sphinx_theme/__init__.py new file mode 100644 index 0000000..5e85328 --- /dev/null +++ b/iati_sphinx_theme/__init__.py @@ -0,0 +1,9 @@ +"""A sphinx theme for IATI documentation sites.""" + +__version__ = "0.0.0" + +from os import path + + +def setup(app): + app.add_html_theme('iati_sphinx_theme', path.abspath(path.dirname(__file__))) diff --git a/iati_sphinx_theme/theme.conf b/iati_sphinx_theme/theme.conf new file mode 100644 index 0000000..89e03bb --- /dev/null +++ b/iati_sphinx_theme/theme.conf @@ -0,0 +1,2 @@ +[theme] +inherit = basic diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..1ef6869 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,11 @@ +[build-system] +requires = ["flit_core >=3.2,<4"] +build-backend = "flit_core.buildapi" + +[project] +name = "iati_sphinx_theme" +readme = "README.md" +dynamic = ["version", "description"] + +[project.entry-points."sphinx.html_themes"] +iati_sphinx_theme = "iati_sphinx_theme" From d7ab7e0e647efc175404702af2de8e4225fdf541 Mon Sep 17 00:00:00 2001 From: Tilly Woodfield <22456167+tillywoodfield@users.noreply.github.com> Date: Wed, 17 Apr 2024 12:30:35 +0300 Subject: [PATCH 2/7] Add black, isort, flake8 --- README.md | 20 ++++++++++++++++++ iati_sphinx_theme/__init__.py | 6 +++--- pyproject.toml | 10 +++++++++ requirements_dev.txt | 38 +++++++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 requirements_dev.txt diff --git a/README.md b/README.md index d67a4f0..061e3cb 100644 --- a/README.md +++ b/README.md @@ -1 +1,21 @@ # IATI Sphinx Theme + +## Development + +### Install dependencies +``` +pip install -r requirements_dev.txt +``` + +### Update dependencies +``` +python -m piptools compile --extra=dev -o requirements_dev.txt pyproject.toml +``` + +### Run linting + +``` +black iati_sphinx_theme +isort iati_sphinx_theme +flake8 iati_sphinx_theme +``` diff --git a/iati_sphinx_theme/__init__.py b/iati_sphinx_theme/__init__.py index 5e85328..cfdcaa4 100644 --- a/iati_sphinx_theme/__init__.py +++ b/iati_sphinx_theme/__init__.py @@ -1,9 +1,9 @@ """A sphinx theme for IATI documentation sites.""" -__version__ = "0.0.0" - from os import path +__version__ = "0.0.0" + def setup(app): - app.add_html_theme('iati_sphinx_theme', path.abspath(path.dirname(__file__))) + app.add_html_theme("iati_sphinx_theme", path.abspath(path.dirname(__file__))) diff --git a/pyproject.toml b/pyproject.toml index 1ef6869..55590de 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,6 +6,16 @@ build-backend = "flit_core.buildapi" name = "iati_sphinx_theme" readme = "README.md" dynamic = ["version", "description"] +dependencies = [] + +[project.optional-dependencies] +dev = ["black", "isort", "flake8", "Flake8-pyproject"] [project.entry-points."sphinx.html_themes"] iati_sphinx_theme = "iati_sphinx_theme" + +[tool.isort] +profile = "black" + +[tool.flake8] +max-line-length = 88 diff --git a/requirements_dev.txt b/requirements_dev.txt new file mode 100644 index 0000000..13526a6 --- /dev/null +++ b/requirements_dev.txt @@ -0,0 +1,38 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --extra=dev --output-file=requirements_dev.txt pyproject.toml +# +black==24.4.0 + # via iati_sphinx_theme (pyproject.toml) +click==8.1.7 + # via black +flake8==7.0.0 + # via + # flake8-pyproject + # iati_sphinx_theme (pyproject.toml) +flake8-pyproject==1.2.3 + # via iati_sphinx_theme (pyproject.toml) +isort==5.13.2 + # via iati_sphinx_theme (pyproject.toml) +mccabe==0.7.0 + # via flake8 +mypy-extensions==1.0.0 + # via black +packaging==24.0 + # via black +pathspec==0.12.1 + # via black +platformdirs==4.2.0 + # via black +pycodestyle==2.11.1 + # via flake8 +pyflakes==3.2.0 + # via flake8 +tomli==2.0.1 + # via + # black + # flake8-pyproject +typing-extensions==4.11.0 + # via black From 9b3a2689e32a973462ef8d6cdfe9c9779fd06043 Mon Sep 17 00:00:00 2001 From: Tilly Woodfield <22456167+tillywoodfield@users.noreply.github.com> Date: Wed, 17 Apr 2024 12:31:59 +0300 Subject: [PATCH 3/7] Add CI linting steps --- .github/workflows/ci.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..8582934 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,19 @@ +name: CI +on: [push] + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.10' + - name: Install dev requirements + run: pip install -r requirements_dev.txt + - name: Check black + run: black --check iati_sphinx_theme + - name: Check isort + run: isort --check-only iati_sphinx_theme + - name: Check flake8 + run: flake8 iati_sphinx_theme From 1dbe338152df632c477f9f36562b218a475661b6 Mon Sep 17 00:00:00 2001 From: Tilly Woodfield <22456167+tillywoodfield@users.noreply.github.com> Date: Wed, 17 Apr 2024 12:55:55 +0300 Subject: [PATCH 4/7] Run sphinx-quickstart --- README.md | 13 ++++++++ docs/.gitignore | 1 + docs/Makefile | 20 ++++++++++++ docs/conf.py | 26 +++++++++++++++ docs/index.rst | 4 +++ docs/make.bat | 35 ++++++++++++++++++++ pyproject.toml | 8 ++++- requirements_dev.txt | 78 ++++++++++++++++++++++++++++++++++++++++++-- 8 files changed, 181 insertions(+), 4 deletions(-) create mode 100644 docs/.gitignore create mode 100644 docs/Makefile create mode 100644 docs/conf.py create mode 100644 docs/index.rst create mode 100644 docs/make.bat diff --git a/README.md b/README.md index 061e3cb..c747523 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ pip install -r requirements_dev.txt ### Update dependencies ``` python -m piptools compile --extra=dev -o requirements_dev.txt pyproject.toml +pip install -r requirements_dev.txt ``` ### Run linting @@ -19,3 +20,15 @@ black iati_sphinx_theme isort iati_sphinx_theme flake8 iati_sphinx_theme ``` + +### Documentation with live preview + +1. Install the theme locally: + ``` + pip install -e . + ``` + +2. Start the docs development server: + ``` + sphinx-autobuild docs docs/_build/html + ``` diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..e35d885 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1 @@ +_build diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..d4bb2cb --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +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) diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..5072c34 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,26 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +project = "IATI Sphinx Theme" +copyright = "2024 IATI Secretariat" +author = "IATI Secretariat" + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = [] + +templates_path = ["_templates"] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme = "iati_sphinx_theme" +html_static_path = ["_static"] diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..ccc07bb --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,4 @@ +================= +IATI Sphinx Theme +================= + diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000..32bb245 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/pyproject.toml b/pyproject.toml index 55590de..5b670e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,13 @@ dynamic = ["version", "description"] dependencies = [] [project.optional-dependencies] -dev = ["black", "isort", "flake8", "Flake8-pyproject"] +dev = [ + "black", + "isort", + "flake8", + "Flake8-pyproject", + "sphinx-autobuild" +] [project.entry-points."sphinx.html_themes"] iati_sphinx_theme = "iati_sphinx_theme" diff --git a/requirements_dev.txt b/requirements_dev.txt index 13526a6..9902a5b 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -4,24 +4,58 @@ # # pip-compile --extra=dev --output-file=requirements_dev.txt pyproject.toml # +alabaster==0.7.16 + # via sphinx +anyio==4.3.0 + # via + # starlette + # watchfiles +babel==2.14.0 + # via sphinx black==24.4.0 # via iati_sphinx_theme (pyproject.toml) +certifi==2024.2.2 + # via requests +charset-normalizer==3.3.2 + # via requests click==8.1.7 - # via black + # via + # black + # uvicorn +colorama==0.4.6 + # via sphinx-autobuild +docutils==0.21.1 + # via sphinx +exceptiongroup==1.2.0 + # via anyio flake8==7.0.0 # via # flake8-pyproject # iati_sphinx_theme (pyproject.toml) flake8-pyproject==1.2.3 # via iati_sphinx_theme (pyproject.toml) +h11==0.14.0 + # via uvicorn +idna==3.7 + # via + # anyio + # requests +imagesize==1.4.1 + # via sphinx isort==5.13.2 # via iati_sphinx_theme (pyproject.toml) +jinja2==3.1.3 + # via sphinx +markupsafe==2.1.5 + # via jinja2 mccabe==0.7.0 # via flake8 mypy-extensions==1.0.0 # via black packaging==24.0 - # via black + # via + # black + # sphinx pathspec==0.12.1 # via black platformdirs==4.2.0 @@ -30,9 +64,47 @@ pycodestyle==2.11.1 # via flake8 pyflakes==3.2.0 # via flake8 +pygments==2.17.2 + # via sphinx +requests==2.31.0 + # via sphinx +sniffio==1.3.1 + # via anyio +snowballstemmer==2.2.0 + # via sphinx +sphinx==7.3.5 + # via sphinx-autobuild +sphinx-autobuild==2024.4.16 + # via iati_sphinx_theme (pyproject.toml) +sphinxcontrib-applehelp==1.0.8 + # via sphinx +sphinxcontrib-devhelp==1.0.6 + # via sphinx +sphinxcontrib-htmlhelp==2.0.5 + # via sphinx +sphinxcontrib-jsmath==1.0.1 + # via sphinx +sphinxcontrib-qthelp==1.0.7 + # via sphinx +sphinxcontrib-serializinghtml==1.1.10 + # via sphinx +starlette==0.37.2 + # via sphinx-autobuild tomli==2.0.1 # via # black # flake8-pyproject + # sphinx typing-extensions==4.11.0 - # via black + # via + # anyio + # black + # uvicorn +urllib3==2.2.1 + # via requests +uvicorn==0.29.0 + # via sphinx-autobuild +watchfiles==0.21.0 + # via sphinx-autobuild +websockets==12.0 + # via sphinx-autobuild From 215109c27aaccc411d280eb3a8b90e46f202477d Mon Sep 17 00:00:00 2001 From: Tilly Woodfield <22456167+tillywoodfield@users.noreply.github.com> Date: Wed, 17 Apr 2024 16:20:15 +0300 Subject: [PATCH 5/7] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b4fe3f4..3fbf062 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ # Python .ve __pycache__ +dist From af251f15ca9debb2d36f5e1b4325641ac96315db Mon Sep 17 00:00:00 2001 From: Tilly Woodfield <22456167+tillywoodfield@users.noreply.github.com> Date: Wed, 17 Apr 2024 16:43:33 +0300 Subject: [PATCH 6/7] Add kitchen sink --- docs/conf.py | 5 +- docs/index.rst | 6 + docs/kitchen-sink/admonitions.rst | 123 ++++++++++++ docs/kitchen-sink/api.rst | 29 +++ docs/kitchen-sink/blocks.rst | 266 +++++++++++++++++++++++++ docs/kitchen-sink/generic.rst | 281 +++++++++++++++++++++++++++ docs/kitchen-sink/images.rst | 89 +++++++++ docs/kitchen-sink/index.rst | 28 +++ docs/kitchen-sink/lists.rst | 257 ++++++++++++++++++++++++ docs/kitchen-sink/really-long.rst | 256 ++++++++++++++++++++++++ docs/kitchen-sink/structure.rst | 107 ++++++++++ docs/kitchen-sink/tables.rst | 107 ++++++++++ docs/kitchen-sink/thingtoinclude.rst | 3 + docs/kitchen-sink/typography.rst | 66 +++++++ 14 files changed, 1622 insertions(+), 1 deletion(-) create mode 100644 docs/kitchen-sink/admonitions.rst create mode 100644 docs/kitchen-sink/api.rst create mode 100644 docs/kitchen-sink/blocks.rst create mode 100644 docs/kitchen-sink/generic.rst create mode 100644 docs/kitchen-sink/images.rst create mode 100644 docs/kitchen-sink/index.rst create mode 100644 docs/kitchen-sink/lists.rst create mode 100644 docs/kitchen-sink/really-long.rst create mode 100644 docs/kitchen-sink/structure.rst create mode 100644 docs/kitchen-sink/tables.rst create mode 100644 docs/kitchen-sink/thingtoinclude.rst create mode 100644 docs/kitchen-sink/typography.rst diff --git a/docs/conf.py b/docs/conf.py index 5072c34..fea1a42 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -13,7 +13,10 @@ # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration -extensions = [] +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.todo", +] templates_path = ["_templates"] exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] diff --git a/docs/index.rst b/docs/index.rst index ccc07bb..8dc5927 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -2,3 +2,9 @@ IATI Sphinx Theme ================= +.. toctree:: + :titlesonly: + :maxdepth: 2 + :caption: Table of Contents + + kitchen-sink/index diff --git a/docs/kitchen-sink/admonitions.rst b/docs/kitchen-sink/admonitions.rst new file mode 100644 index 0000000..8789c0d --- /dev/null +++ b/docs/kitchen-sink/admonitions.rst @@ -0,0 +1,123 @@ +.. + Copyright (c) 2021 Pradyun Gedam + Licensed under Creative Commons Attribution-ShareAlike 4.0 International License + SPDX-License-Identifier: CC-BY-SA-4.0 + +=========== +Admonitions +=========== + +Sphinx provides several different types of admonitions. + +``topic`` +========= + +.. topic:: This is a topic. + + This is what admonitions are a special case of, according to the docutils + documentation. + +``admonition`` +============== + +.. admonition:: The one with the custom titles + + It's got a certain charm to it. + +``attention`` +============= + +.. attention:: + + Climate change is real. + +``caution`` +=========== + +.. caution:: + + Cliff ahead: Don't drive off it. + +``danger`` +========== + +.. danger:: + + Mad scientist at work! + +``error`` +========= + +.. error:: + + Does not compute. + +``hint`` +======== + +.. hint:: + + Insulators insulate, until they are subject to ______ voltage. + +``important`` +============= + +.. important:: + + Tech is not neutral, nor is it apolitical. + +``note`` +======== + +.. note:: + + This is a note. + +``seealso`` +=========== + +.. seealso:: + + Other relevant information. + +``tip`` +======= + +.. tip:: + + 25% if the service is good. + +``todo`` +======== + +.. todo:: + + This needs the ``sphinx.ext.todo`` extension. + +``warning`` +=========== + +.. warning:: + + Reader discretion is strongly advised. + +``versionadded`` +================ + +.. versionadded:: v0.1.1 + + Here's a version added message. + +``versionchanged`` +================== + +.. versionchanged:: v0.1.1 + + Here's a version changed message. + +``deprecated`` +============== + +.. deprecated:: v0.1.1 + + Here's a deprecation message. diff --git a/docs/kitchen-sink/api.rst b/docs/kitchen-sink/api.rst new file mode 100644 index 0000000..dc280a0 --- /dev/null +++ b/docs/kitchen-sink/api.rst @@ -0,0 +1,29 @@ +.. + Copyright (c) 2021 Pradyun Gedam + Licensed under Creative Commons Attribution-ShareAlike 4.0 International License + SPDX-License-Identifier: CC-BY-SA-4.0 + +***************** +API documentation +***************** + +Using Sphinx's :ref:`sphinx.ext.autodoc` plugin, it is possible to auto-generate documentation of a Python module. + +.. tip:: + Avoid having in-function-signature type annotations with autodoc, + by setting the following options: + + .. code-block:: python + + # -- Options for autodoc ---------------------------------------------------- + # https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#configuration + + # Automatically extract typehints when specified and place them in + # descriptions of the relevant function/method. + autodoc_typehints = "description" + + # Don't show class signature with the class' name. + autodoc_class_signature = "separated" + +.. automodule:: urllib.request + :members: diff --git a/docs/kitchen-sink/blocks.rst b/docs/kitchen-sink/blocks.rst new file mode 100644 index 0000000..3ff7b5c --- /dev/null +++ b/docs/kitchen-sink/blocks.rst @@ -0,0 +1,266 @@ +.. + Copyright (c) 2021 Pradyun Gedam + Licensed under Creative Commons Attribution-ShareAlike 4.0 International License + SPDX-License-Identifier: CC-BY-SA-4.0 + +====== +Blocks +====== + +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) + +Epigraph +-------- + +https://docutils.sourceforge.io/docs/ref/rst/directives.html#epigraph + +.. epigraph:: + + 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) + +Pull quotes +----------- + +https://docutils.sourceforge.io/docs/ref/rst/directives.html#pull-quote + +.. pull-quote:: + + 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) + +Highlights +---------- + +https://docutils.sourceforge.io/docs/ref/rst/directives.html#highlights + +.. highlights:: + + 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) + +Line Blocks +=========== + +https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#line-blocks + +This is a normal text paragraph. + +| 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 "|". + +This is a normal text paragraph again. + +Monospace Blocks +================ + +Sphinx supports many kinds of monospace blocks. This section is meant to +showcase *all* of them that as known to the author of this page, at the time of +writing. + +Production List +--------------- + +https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#directive-productionlist + + This directive is used to enclose a group of productions. Each production is given on a single line and consists of a name, separated by a colon from the following definition. + +This just shows up as a vanilla ``
``, which is... both nice and a bit
+annoying.
+
+.. productionlist::
+    try_stmt: try1_stmt | try2_stmt
+    try1_stmt: "try" ":" `suite`
+             : ("except" [`expression` ["," `target`]] ":" `suite`)+
+             : ["else" ":" `suite`]
+             : ["finally" ":" `suite`]
+    try2_stmt: "try" ":" `suite`
+             : "finally" ":" `suite`
+             : "this-is-intentionally-very-stupidly-long-to-make-sure-that-this-has-a-proper-scrollbar"
+
+Literal Blocks
+--------------
+
+https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#literal-blocks
+
+    contains a block of text where line breaks and whitespace are significant and must be preserved
+
+This is a normal text paragraph. The next paragraph is a code sample::
+
+    It is not processed in any way, except
+    that the indentation is removed.
+
+    It can span multiple lines.
+
+This is a normal text paragraph again.
+
+They can be quoted without indentation::
+
+>> Great idea!
+>
+> Why didn't I think of that?
+
+.. literalinclude:: ../conf.py
+    :language: python
+    :caption: Literal includes can also have captions.
+    :linenos:
+    :lines: 10-20
+
+Doctest Blocks
+--------------
+
+https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#doctest-blocks
+
+    Doctest blocks are interactive Python sessions cut-and-pasted into docstrings. They are meant to illustrate usage by example, and provide an elegant and powerful testing environment via the doctest module in the Python standard library.
+
+.. note::
+
+    This is fine.
+
+>>> 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)
+>>> print("This is an intentionally very long line because I want to make sure that we are handling scrollable code blocks correctly.")
+This is an intentionally very long line because I want to make sure that we are handling scrollable code blocks correctly.
+
+Parsed Literals
+---------------
+
+https://docutils.sourceforge.io/docs/ref/rst/directives.html#parsed-literal-block
+
+    It is equivalent to a line block with different rendering: typically in a typewriter/monospaced typeface, like an ordinary literal block. Parsed literal blocks are useful for adding hyperlinks to code examples.
+
+.. parsed-literal::
+
+    # parsed-literal test
+    curl -O http://someurl/release-0.1.0.tar-gz
+    echo "This is an intentionally very long line because I want to make sure that we are handling scrollable code blocks correctly."
+
+Code Block
+----------
+
+https://docutils.sourceforge.io/docs/ref/rst/directives.html#code
+
+    The "code" directive constructs a literal block [containing code].
+
+This has an alias of ``code-block``.
+
+
+.. code-block:: python
+    :linenos:
+
+    from typing import Iterator
+
+    # This is an example
+    class Math:
+        @staticmethod
+        def fib(n: int) -> Iterator[int]:
+            """Fibonacci series up to n"""
+            a, b = 0, 1
+            while a < n:
+                yield a
+                a, b = b, a + b
+
+
+    result = sum(Math.fib(42))
+    print("The answer is {}".format(result))
+
+
+With caption
+~~~~~~~~~~~~
+
+.. code-block:: json
+    :caption: Code Blocks can have captions, which also adds a link to it.
+
+    {
+      "session_name": "shorthands",
+      "windows": [
+        {
+          "panes": [
+            {
+              "shell_command": "echo 'This is an intentionally very long line because I want to make sure that we are handling scrollable code blocks correctly.'"
+            }
+          ],
+          "window_name": "long form"
+        }
+      ]
+    }
+
+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.")
+        print(
+            "This is an intentionally very long line because I want to make sure that we are handling scrollable code blocks correctly."
+        )
+
+With ``none`` highlighting
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. code-block:: none
+
+    # Taken from https://en.wikipedia.org/wiki/Pseudocode#Example
+    algorithm ford-fulkerson is
+        input: Graph G with flow capacity c,
+            source node s,
+            sink node t
+        output: Flow f such that f is maximal from s to t
+
+        (Note that f(u,v) is the flow from node u to node v, and c(u,v) is the flow capacity from node u to node v)
+
+        for each edge (u, v) in GE do
+            f(u, v) ← 0
+            f(v, u) ← 0
+
+        while there exists a path p from s to t in the residual network Gf do
+            let cf be the flow capacity of the residual network Gf
+            cf(p) ← min{cf(u, v) | (u, v) in p}
+            for each edge (u, v) in p do
+                f(u, v) ←  f(u, v) + cf(p)
+                f(v, u) ← -f(u, v)
+
+        return f
diff --git a/docs/kitchen-sink/generic.rst b/docs/kitchen-sink/generic.rst
new file mode 100644
index 0000000..971df50
--- /dev/null
+++ b/docs/kitchen-sink/generic.rst
@@ -0,0 +1,281 @@
+..
+   Copyright (c) 2021 Pradyun Gedam
+   Licensed under Creative Commons Attribution-ShareAlike 4.0 International License
+   SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. |EXAMPLE| image:: https://source.unsplash.com/32x32/daily?icon
+    :width: 1em
+
+=============
+Generic items
+=============
+
+These are the things that don't quite fit into other groupings.
+
+Inline Markup
+=============
+
+One of the nice things about markup languages is the ability to have inline
+markup. This makes the presentation *much* nicer. The **bold** text shouldn't
+be too overbearing. It is very common to have ``inline code`` as well. It is
+important to ensure that the inline code doesn't have a line height that is
+greater than the regular prose; otherwise the spacing looks weird.
+
+It is also possible to use explicit roles to do things like a :sub:`subscript`,
+a :sup:`superscript`, :emphasis:`emphasis`, :strong:`strong`, and
+:literal:`literal`.
+
+Hyperlinks
+----------
+
+It is a website, so it'll have hyperlinks like http://www.python.org (inline),
+or Python_ (external reference), example_ (internal reference),
+`Python web site `__ (external hyperlinks with embedded
+URI), 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).
+
+reStructuredText has character-level inline markup too. It's ugly to write, but
+someone might be using it, so here's an example: **re**\ ``Structured``\ *Text*.
+
+It is also possible to link to documented items, such as
+:class:`api_sample.RandomNumberGenerator`.
+
+Interpreted text
+----------------
+
+The default role for "interpreted text" (AKA single backticks) is
+`Title Reference`. There are other reference syntaxes as well: :PEP:`287` and
+:RFC:`2822`.
+
+If the ``--pep-references`` option was supplied, there should be a live link to
+PEP 258 here.
+
+GUI labels
+^^^^^^^^^^
+
+According to the RST demo, GUI labels (like :guilabel:`this label`) are a way to
+indicate that some action is to be taken by the user. Like inline code literals,
+GUI labels should not run over line height.
+
+Keys / Menu labels
+^^^^^^^^^^^^^^^^^^
+
+Key-bindings indicate that the read is to press a button on the keyboard or
+mouse, for example :kbd:`MMB`, :kbd:`C-x C-f` and :kbd:`Shift-MMB`. Another
+useful way is ``menuselection`` to show menus:
+:menuselection:`My --> Software --> Some menu --> Some sub menu 1 --> Some sub menu 2 --> Some sub menu 3`
+
+For example, ``menuselection`` should break when it is too long to fit on a
+single line.
+
+Long inline code wrapping
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. 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).``
+
+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:``.
+
+
+Sidebar
+=======
+
+.. sidebar:: Ch'ien / The Creative
+
+    Lorem ipsum dolor sit amet consectetur adipisicing elit.
+
+    .. image:: https://source.unsplash.com/200x200/daily?cute+puppy
+
+    Lorem ipsum dolor sit amet consectetur adipisicing elit.
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Accusamus, sunt
+voluptatum tenetur libero nulla esse veritatis accusantium earum commodi hic
+voluptatem officia culpa optio atque. Quaerat sed quibusdam ratione nam.
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Accusamus, sunt
+voluptatum tenetur libero nulla esse veritatis accusantium earum commodi hic
+voluptatem officia culpa optio atque. Quaerat sed quibusdam ratione nam.
+
+Code with Sidebar
+-----------------
+
+.. sidebar:: A code example
+
+    With a sidebar on the right.
+
+.. code-block:: python
+    :caption: Code blocks can also have captions.
+    :linenos:
+
+    print("one")
+    print("two")
+    print("three")
+    print("four")
+    print("five")
+    print("six")
+    print("seven")
+    print("eight")
+    print("nine")
+    print("ten")
+    print("eleven")
+    print("twelve")
+    print("thirteen")
+    print("fourteen")
+
+References
+==========
+
+Footnotes
+~~~~~~~~~~~
+
+Here we have a footnote. [#doubleColon]_
+
+Automatically numbered footnotes have a marking in place in 
+the source paragraph text like ::
+
+   [#doubleColon]_
+   
+and at the end of the section set off footnote text like  ::
+
+    .. [#doubleColon]
+       If you look at the source, you see that we are using a 
+       double colon :: before the set off text to make it literal.
+   
+
+The original footnote reference inside the paragraph is bracketed by ``[#`` 
+and ``]_``.  This follow the basic pattern in restructured text to use concise
+symbol combinations inside a paragraph that are unlikely to appear in normal text.
+
+There is also simple markup to do hyperlinks, both to web URL's and as
+cross references within a Sphinx document, like to :ref:`transformation`.
+
+More elaborate documents by some of the authors are
+http://introcs.cs.luc.edu and
+`Dr. Harrington's Python Tutorial `_.
+
+.. [#doubleColon]
+   If you look at the source, you see that we are using a 
+   double colon ::  before the set off text to make it literal.
+
+Citations
+---------
+
+.. [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 one backlink.
+
+Here's a reference to the above, [12]_ citation.
+
+Here is another type of citation: `citation`
+
+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_.
+
+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_
+
+Target Footnotes
+----------------
+
+.. target-notes::
+
+Centered text
+=============
+
+You can create a statement with centered text with ``.. centered::``
+
+.. centered:: This is centered text!
+
+Rubric
+======
+
+  A rubric is like an informal heading that doesn't correspond to the document's structure.
+
+  -- https://docutils.sourceforge.io/docs/ref/rst/directives.html#rubric
+
+Wikipedia says it is something different:
+
+  A rubric is a word or section of text that is traditionally written or printed in red ink for emphasis.
+
+  -- https://en.wikipedia.org/wiki/Rubric
+
+This is stylized as docutils tells us to stylize it, since it is used for footnote headers (see end of https://docs.python.org/3/reference/lexical_analysis.html)
+
+.. rubric:: This is a rubric
+
+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.
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Accusamus, sunt
+voluptatum tenetur libero nulla esse veritatis accusantium earum commodi hic
+voluptatem officia culpa optio atque. Quaerat sed quibusdam ratione nam.
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Accusamus, sunt
+voluptatum tenetur libero nulla esse veritatis accusantium earum commodi hic
+voluptatem officia culpa optio atque. Quaerat sed quibusdam ratione nam.
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Accusamus, sunt
+voluptatum tenetur libero nulla esse veritatis accusantium earum commodi hic
+voluptatem officia culpa optio atque. Quaerat sed quibusdam ratione nam.
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Accusamus, sunt
+voluptatum tenetur libero nulla esse veritatis accusantium earum commodi hic
+voluptatem officia culpa optio atque. Quaerat sed quibusdam ratione nam.
+
+Download Links
+==============
+
+:download:`This long long long long long long long long long long long long long long long download link should wrap white-spaces `
diff --git a/docs/kitchen-sink/images.rst b/docs/kitchen-sink/images.rst
new file mode 100644
index 0000000..ecb7164
--- /dev/null
+++ b/docs/kitchen-sink/images.rst
@@ -0,0 +1,89 @@
+..
+   Copyright (c) 2021 Pradyun Gedam
+   Licensed under Creative Commons Attribution-ShareAlike 4.0 International License
+   SPDX-License-Identifier: CC-BY-SA-4.0
+
+================
+Images & Figures
+================
+
+Images
+------
+
+An image:
+
+.. image:: https://source.unsplash.com/200x200/daily?cute+puppy
+   :height: 200
+   :width: 200
+
+A clickable image:
+
+.. image:: https://source.unsplash.com/200x200/daily?cute+puppy
+   :target: https://unsplash.com/
+   :height: 200
+   :width: 200
+
+.. image:: https://source.unsplash.com/200x200/daily?cute+puppy
+   :align: right
+   :height: 200
+   :width: 200
+
+This is a lot of text to go along with a right-aligned image, that is
+helping make this content feel less linear. It is important to have such
+a body of text, since the image is meant to be "floated" to the right,
+which would interfere with the rest of the document otherwise.
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Blanditiis
+sapiente veritatis doloribus accusantium molestiae modi recusandae
+excepturi facere, corrupti expedita sit nihil temporibus eius sequi
+animi, illo libero labore fuga.
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Blanditiis
+sapiente veritatis doloribus accusantium molestiae modi recusandae
+excepturi facere, corrupti expedita sit nihil temporibus eius sequi
+animi, illo libero labore fuga.
+
+.. image:: https://source.unsplash.com/200x200/daily?cute+puppy
+   :align: left
+   :height: 200
+   :width: 200
+
+This is a lot of text to go along with a left-aligned image, that is
+helping make this content feel less linear. It is important to have such
+a body of text, since the image is meant to be "floated" to the right,
+which would interfere with the rest of the document otherwise.
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Blanditiis
+sapiente veritatis doloribus accusantium molestiae modi recusandae
+excepturi facere, corrupti expedita sit nihil temporibus eius sequi
+animi, illo libero labore fuga.
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Blanditiis
+sapiente veritatis doloribus accusantium molestiae modi recusandae
+excepturi facere, corrupti expedita sit nihil temporibus eius sequi
+animi, illo libero labore fuga.
+
+Figures
+-------
+
+.. figure:: https://source.unsplash.com/200x200/daily?cute+puppy
+   :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:: https://source.unsplash.com/200x200/daily?cute+puppy
+   :align: center
+
+   This caption should be centered.
diff --git a/docs/kitchen-sink/index.rst b/docs/kitchen-sink/index.rst
new file mode 100644
index 0000000..ab5c009
--- /dev/null
+++ b/docs/kitchen-sink/index.rst
@@ -0,0 +1,28 @@
+..
+   Copyright (c) 2021 Pradyun Gedam
+   Licensed under Creative Commons Attribution-ShareAlike 4.0 International License
+   SPDX-License-Identifier: CC-BY-SA-4.0
+
+Kitchen Sink
+============
+
+This section exists as a dump of all the things that Sphinx has.
+
+It has exactly one goal: to be a good checklist of things to stylise within Sphinx. This also means that it is a complete showcase of *everything* that vanilla Sphinx provides and includes all sorts of edge cases.
+
+(from )
+
+.. toctree::
+   :titlesonly:
+   :glob:
+
+   admonitions
+   api
+   blocks
+   generic
+   images
+   lists
+   really-long
+   structure
+   tables
+   typography
diff --git a/docs/kitchen-sink/lists.rst b/docs/kitchen-sink/lists.rst
new file mode 100644
index 0000000..7e698d6
--- /dev/null
+++ b/docs/kitchen-sink/lists.rst
@@ -0,0 +1,257 @@
+..
+   Copyright (c) 2021 Pradyun Gedam
+   Licensed under Creative Commons Attribution-ShareAlike 4.0 International License
+   SPDX-License-Identifier: CC-BY-SA-4.0
+
+=====
+Lists
+=====
+
+Enumerated Lists
+----------------
+
+1. Start each line with a number and period
+2. Can begin on any number
+3. Must have a blank line before and after
+4. Can have nested sub-lists
+
+   a. nested lists are numbered separately
+   b. nested lists need a blank line before and after
+
+5. Roman numerals can also be used
+
+   i. nested lists are numbered separately
+   ii. nested lists need a blank line before and after
+
+#. Can have automatic number with the ``#`` character.
+
+Definition Lists
+----------------
+
+Term
+    Definition
+Term : classifier
+    Definition paragraph 1.
+
+    Definition paragraph 2.
+Term
+    Definition
+
+I have no clue why the definition list below is classified as a different style
+of definition list than the one above.
+
+Is it the spaces in the term?
+    Maybe it was the multiple line paragraph
+    in the line below that caused this?
+
+Is it the paragraph above the list maybe?
+    I guess a lot of these lists don't have leading paragraphs?
+
+Is it everything all at once?
+    Who knows?!
+
+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
+----------
+
+:Address: 123 Example Street
+          Example, EX  Canada
+          A1B 2C3
+:Organization: humankind
+:Status: This is a "work in progress"
+:Version: 1
+:Field name: This is a generic bibliographic field.
+:Field name 2:
+    Generic bibliographic fields may contain multiple body elements.
+
+    Like this.
+
+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 `.
+
+Here's another glossary, with more detail. The important bit here is that the contents of the definition are multi-paragraph.
+
+.. glossary::
+
+    Import Package
+
+        A Python module which can contain other modules or recursively, other packages.
+
+        An import package is more commonly referred to with the single word “package”, but this guide will use the expanded term when more clarity is needed to prevent confusion with a Distribution Package which is also commonly called a “package”.
+
+    Package Index
+
+        A repository of distributions with a web interface to automate package discovery and consumption.
+
+Bullet Lists
+------------
+
+..
+    Docutils supports two types of lists, "simple" and "complex". Complex lists
+    have item margins, simple lists do not.
+    https://docutils.sourceforge.io/sandbox/html4strict/data/simple-lists.html
+
+Simple
+^^^^^^
+
+- A simple list.
+- There are no margins between list items.
+- Simple lists do not contain multiple paragraphs. That's a complex list.
+- In the case of a nested list
+
+  - There are no margins between elements
+
+    - Still no margins
+
+      - Still no margins
+
+Complex
+^^^^^^^
+
+- 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``
+- This item has multiple paragraphs.
+
+  This item has multiple paragraphs.
+- This item has multiple paragraphs.
+
+  This item has multiple paragraphs.
+
+
+Second list level
+^^^^^^^^^^^^^^^^^
+
+- here is a list in a second-level section.
+- `yahoo `_
+- `yahoo `_
+
+  - `yahoo `_
+  - here is an inner bullet ``oh``
+
+    - one more ``with an inline literally``. `yahoo `_
+
+      heh heh. child. try to beat this embed:
+
+      .. literalinclude:: ../conf.py
+          :language: python
+          :linenos:
+          :lines: 10-20
+
+  - and another. `yahoo `_
+  - `yahoo `_
+  - ``hi``
+- how about an admonition?
+
+  .. note::
+      This is a note nested in a list.
+
+- and hehe
+
+But deeper down the rabbit hole
+"""""""""""""""""""""""""""""""
+
+- I kept saying that, "deeper down the rabbit hole". `yahoo `_
+
+  - I cackle at night `yahoo `_.
+- I'm so lonely here in GZ ``guangzhou``
+- A man of python destiny, hopes and dreams. `yahoo `_
+
+  - `yahoo `_
+
+    - `yahoo `_ ``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:: https://source.unsplash.com/200x200/daily?cute+puppy
+
+         This is a short caption for a figure.
+
+    - .. figure:: https://source.unsplash.com/200x200/daily?cute+puppy
+
+         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)
diff --git a/docs/kitchen-sink/really-long.rst b/docs/kitchen-sink/really-long.rst
new file mode 100644
index 0000000..c214ae5
--- /dev/null
+++ b/docs/kitchen-sink/really-long.rst
@@ -0,0 +1,256 @@
+..
+   Copyright (c) 2021 Pradyun Gedam
+   Licensed under Creative Commons Attribution-ShareAlike 4.0 International License
+   SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. admonition:: Mimicking ReadTheDocs' PR previews
+    :class: warning
+
+    This is simulating how ReadTheDocs puts admonitions on top of previews.
+
+==============================================================
+Really Long Page Title because we should test sidebar wrapping
+==============================================================
+
+This page basically exists to show-off the cool table of contents sidebar.
+
+Heading 1
+=========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+.. _`second-heading`:
+.. _`second-heading-again`:
+.. _`second-heading-yet-again`:
+
+Heading 2
+=========
+
+Let's make sure multiple permalinks work: :ref:`one `, :ref:`two `, :ref:`three `.
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 3
+=========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 4
+=========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 5
+=========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 6
+=========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 7
+=========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 7.1
+-----------
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 7.2
+-----------
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 7.3
+-----------
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 7.4
+-----------
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 8
+=========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 9
+=========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 10
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 11
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 12
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 13
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 14
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 15 -- this one is intentionally really long
+===================================================
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 16 -- this one is also lots of words that would wrap content
+====================================================================
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 17
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 18
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 19
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 20
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 21
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 22
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 23
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 24
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 25
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 26
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 27
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 28
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 29
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 30
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 31
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 32
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 33
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 34
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 35
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 36
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 37
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 38
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 39
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 40
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 41
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 42
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
+
+Heading 43
+==========
+
+Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque sit temporibus cupiditate in ducimus illum assumenda dolor, dignissimos laboriosam voluptate dolorem dolore eum repellendus minima, nisi sequi? Eveniet, dignissimos asperiores!
diff --git a/docs/kitchen-sink/structure.rst b/docs/kitchen-sink/structure.rst
new file mode 100644
index 0000000..145ebe9
--- /dev/null
+++ b/docs/kitchen-sink/structure.rst
@@ -0,0 +1,107 @@
+..
+   Copyright (c) 2021 Pradyun Gedam
+   Licensed under Creative Commons Attribution-ShareAlike 4.0 International License
+   SPDX-License-Identifier: CC-BY-SA-4.0
+
+*******************
+Structural Elements
+*******************
+
+.. include:: thingtoinclude.rst
+
+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
+*********************
+
+.. include:: thingtoinclude.rst
+
+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:: https://source.unsplash.com/200x200/daily?cute+puppy
+    :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.
diff --git a/docs/kitchen-sink/tables.rst b/docs/kitchen-sink/tables.rst
new file mode 100644
index 0000000..6c2b91b
--- /dev/null
+++ b/docs/kitchen-sink/tables.rst
@@ -0,0 +1,107 @@
+..
+   Copyright (c) 2021 Pradyun Gedam
+   Licensed under Creative Commons Attribution-ShareAlike 4.0 International License
+   SPDX-License-Identifier: CC-BY-SA-4.0
+
+======
+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  |
++------------+------------+-----------+------------+------------+-----------+------------+------------+-----------+------------+------------+-----------+
+
+Table containing code
+---------------------
+
+==================================== ===========================================
+Version                              Installing
+==================================== ===========================================
+Pradyun's pip fork and installer     .. code-block:: bash
+
+                                        pip install "pip @ git+https://github.com/pradyunsg/pip#20.3.3" "installer @ git+https://github.com/pradyunsg/installer"
+
+PyPI                                 .. code-block:: bash
+
+                                        pip install pip installer
+
+==================================== ===========================================
+
+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:: https://source.unsplash.com/200x200/daily?cute+puppy
+
+           This is a short caption for a figure.
+
+      - .. figure:: https://source.unsplash.com/200x200/daily?cute+puppy
+
+           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.
diff --git a/docs/kitchen-sink/thingtoinclude.rst b/docs/kitchen-sink/thingtoinclude.rst
new file mode 100644
index 0000000..e6d2906
--- /dev/null
+++ b/docs/kitchen-sink/thingtoinclude.rst
@@ -0,0 +1,3 @@
+.. attention:: 
+   
+   This warning box is repeated across several pages. It is maintained in a single dedicated file 'thingtoinclude.rst' and embedded where needed using the directive '.. include:: thingtoinclude.rst'
diff --git a/docs/kitchen-sink/typography.rst b/docs/kitchen-sink/typography.rst
new file mode 100644
index 0000000..ae9492c
--- /dev/null
+++ b/docs/kitchen-sink/typography.rst
@@ -0,0 +1,66 @@
+..
+   Copyright (c) 2021 Pradyun Gedam
+   Licensed under Creative Commons Attribution-ShareAlike 4.0 International License
+   SPDX-License-Identifier: CC-BY-SA-4.0
+
+==========
+Typography
+==========
+
+This is quite important, for a website where the majority of the content is going to be prose.
+
+Notice the font family being used for the prose, as well as the font family being used for the heading. Think about the spacing between the lines, as well as the spacing between various paragraphs. Also keep the font weight in mind, and consider if/how you want antialiasing and font-smoothing to work.
+
+Multiple paragraphs are a common occurance, because you often need more than a single paragraph to describe a thing. The rest of this paragraph is gonna be the famous lorem-ipsum: Lorem ipsum **dolor** sit amet consectetur adipisicing elit. Accusamus, sunt voluptatum tenetur libero nulla esse veritatis accusantium earum commodi hic voluptatem officia culpa optio atque. Quaerat sed quibusdam ratione nam.
+
+Headings
+========
+
+This next bit will explore how the various headings look. Think about how the content separation should work, and how the various headings should interact with the main content.
+
+Heading 3
+---------
+
+Heading 4
+^^^^^^^^^
+
+Heading 5
+~~~~~~~~~
+
+Heading 6
+*********
+
+Heading 2 with content
+======================
+
+Lorem ipsum **dolor** sit amet consectetur adipisicing elit.
+
+Accusamus, sunt voluptatum tenetur libero nulla esse veritatis accusantium earum commodi hic voluptatem officia culpa optio atque. Quaerat sed quibusdam ratione nam.
+
+Heading 3 with content
+----------------------
+
+Lorem ipsum **dolor** sit amet consectetur adipisicing elit.
+
+Accusamus, sunt voluptatum tenetur libero nulla esse veritatis accusantium earum commodi hic voluptatem officia culpa optio atque. Quaerat sed quibusdam ratione nam.
+
+Heading 4 with content
+^^^^^^^^^^^^^^^^^^^^^^
+
+Lorem ipsum **dolor** sit amet consectetur adipisicing elit.
+
+Accusamus, sunt voluptatum tenetur libero nulla esse veritatis accusantium earum commodi hic voluptatem officia culpa optio atque. Quaerat sed quibusdam ratione nam.
+
+Heading 5 with content
+~~~~~~~~~~~~~~~~~~~~~~
+
+Lorem ipsum **dolor** sit amet consectetur adipisicing elit.
+
+Accusamus, sunt voluptatum tenetur libero nulla esse veritatis accusantium earum commodi hic voluptatem officia culpa optio atque. Quaerat sed quibusdam ratione nam.
+
+Heading 6 with content
+**********************
+
+Lorem ipsum **dolor** sit amet consectetur adipisicing elit.
+
+Accusamus, sunt voluptatum tenetur libero nulla esse veritatis accusantium earum commodi hic voluptatem officia culpa optio atque. Quaerat sed quibusdam ratione nam.

From 81f84ad40f2e6f6743ca4295338bb2cf3801553f Mon Sep 17 00:00:00 2001
From: Tilly Woodfield <22456167+tillywoodfield@users.noreply.github.com>
Date: Tue, 14 May 2024 14:38:26 +0300
Subject: [PATCH 7/7] docs: Add .readthedocs.yaml

---
 .readthedocs.yaml | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
 create mode 100644 .readthedocs.yaml

diff --git a/.readthedocs.yaml b/.readthedocs.yaml
new file mode 100644
index 0000000..a35a1fe
--- /dev/null
+++ b/.readthedocs.yaml
@@ -0,0 +1,18 @@
+# Read the Docs configuration file
+# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
+
+version: 2
+
+build:
+  os: ubuntu-22.04
+  tools:
+    python: "3.10"
+
+sphinx:
+  configuration: docs/conf.py
+  builder: dirhtml
+
+python:
+  install:
+    - method: pip
+      path: .