add README and docs
This commit is contained in:
1 parent
0279d5f064
commit
2e240aa147
20 files changed
+1198
-3
No files matched your search
@@ -0,0 +1,2 @@
|
||||
build/
|
||||
downloads/
|
||||
@@ -0,0 +1,36 @@
|
||||
# Makefile for reSW
|
||||
|
||||
CONTENTDIR = content
|
||||
STATICDIR = static
|
||||
BUILDDIR = build
|
||||
CONFIG = settings.toml
|
||||
|
||||
all: build
|
||||
|
||||
help:
|
||||
@echo 'Build rSW site'
|
||||
@echo
|
||||
@echo 'Available targets:'
|
||||
@echo
|
||||
@echo ' build build HTML'
|
||||
@echo ' serve run local HTTP server'
|
||||
@echo ' css <theme> generate Pygments stylesheet'
|
||||
@echo
|
||||
@echo 'Run make without target to build html'
|
||||
|
||||
build:
|
||||
test -d "$(BUILDDIR)" && rm -rf "$(BUILDDIR)" || true
|
||||
rsw build -c "$(CONFIG)"
|
||||
|
||||
serve:
|
||||
python -m http.server --directory $(BUILDDIR)/ --bind 0.0.0.0 8080
|
||||
|
||||
css:
|
||||
mkdir -pv "$(STATICDIR)"/css/pygments
|
||||
pygmentize -f html -S $(filter-out $@,$(MAKECMDGOALS)) -a .highlight \
|
||||
> "$(STATICDIR)"/css/pygments/$(filter-out $@,$(MAKECMDGOALS)).css
|
||||
|
||||
%:
|
||||
@:
|
||||
|
||||
.PHONY: all help build serve css
|
||||
@@ -0,0 +1,39 @@
|
||||
:title: Command Line Interface
|
||||
:date: 2022-09-30
|
||||
|
||||
======================
|
||||
Command Line Interface
|
||||
======================
|
||||
|
||||
::
|
||||
|
||||
Usage: rsw init [--no-makefile] [<name>]
|
||||
rsw build [-c <file>]
|
||||
rsw print [-c <file>] [--default] [--json]
|
||||
rsw (-h | --help | -v | --version)
|
||||
|
||||
Commands:
|
||||
init initialise new site.
|
||||
build build site.
|
||||
print print configuration.
|
||||
|
||||
Options:
|
||||
-c <file>, --config <file> configuaration file.
|
||||
-j, --json JSON output.
|
||||
-d, --default print default config.
|
||||
-M, --no-makefile do not create Makefile.
|
||||
-h, --help print this help message and exit.
|
||||
-v, --version print version and exit.
|
||||
|
||||
Makefile usage
|
||||
==============
|
||||
|
||||
::
|
||||
|
||||
Available targets:
|
||||
|
||||
build build HTML
|
||||
serve run local HTTP server
|
||||
css <theme> generate Pygments stylesheet
|
||||
|
||||
Run make without target to build html
|
||||
@@ -0,0 +1,71 @@
|
||||
:title: Configuration
|
||||
:date: 2022-09-22
|
||||
|
||||
=============
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Dirs (``dirs``)
|
||||
===============
|
||||
|
||||
build_dir
|
||||
Default: build
|
||||
|
||||
content_dir
|
||||
Default: content
|
||||
|
||||
templates_dir
|
||||
Default: layouts
|
||||
|
||||
static_dir
|
||||
Default: static
|
||||
|
||||
.. note::
|
||||
|
||||
Content of this diretory will be placed into site root. Use
|
||||
subdirectories for files here, e.g. css/, img/, etc.
|
||||
|
||||
Default settings for pages (``defaults``)
|
||||
=========================================
|
||||
|
||||
template
|
||||
Default: template.jinja2
|
||||
|
||||
Default page template.
|
||||
|
||||
type
|
||||
Default: page
|
||||
|
||||
Default article type.
|
||||
|
||||
Custom site data (``site``)
|
||||
===========================
|
||||
|
||||
datetime_format
|
||||
Default: %Y-%m-%d
|
||||
|
||||
See `Format Codes`_.
|
||||
|
||||
Pygments (``pygments``)
|
||||
=======================
|
||||
|
||||
theme
|
||||
Default: default
|
||||
|
||||
Generate CSS style with following command::
|
||||
|
||||
make css style_name
|
||||
|
||||
See `Pygments Styles`_ and `pygmentize`_.
|
||||
|
||||
Docutils (``docutils``)
|
||||
=======================
|
||||
|
||||
See `Docutils Configuration`_.
|
||||
|
||||
.. Links
|
||||
|
||||
.. _Format Codes: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes
|
||||
.. _Pygments Styles: https://pygments.org/styles/
|
||||
.. _pygmentize: https://pygments.org/docs/cmdline/
|
||||
.. _Docutils Configuration: https://docutils.sourceforge.io/docs/user/config.html
|
||||
@@ -0,0 +1,114 @@
|
||||
:title: Data Sources
|
||||
:date: 2022-09-22
|
||||
|
||||
============
|
||||
Data Sources
|
||||
============
|
||||
|
||||
The diagram below shows the data sources and variables that can be used in
|
||||
templates.
|
||||
|
||||
::
|
||||
|
||||
┌─────────────────┐
|
||||
│ settings.toml ├───► site, pygments_theme ──┐
|
||||
└─────────────────┘ │
|
||||
│
|
||||
┌─────────────────┐ ┌────────▼────────┐
|
||||
│ *.rst ├───► page, html ───► template.jinja2 │
|
||||
└────────┬────────┘ └────────▲────────┘
|
||||
│ │
|
||||
┌────────▼────────┐ │
|
||||
│ Aggregated data ├───► aggr ──────────────────┘
|
||||
└─────────────────┘
|
||||
|
||||
\*.rst Files
|
||||
============
|
||||
|
||||
The \*.rst files contain a part with document attributes called Docinfo (see
|
||||
`field lists`_ and `bibliographic elements`_) and a part with the content of
|
||||
the article.
|
||||
|
||||
You can come up with your own attributes. Attributes can contain only strings.
|
||||
|
||||
There some special attributes used by rSW:
|
||||
|
||||
============ =============== =========================
|
||||
Attribute Required Deafult
|
||||
============ =============== =========================
|
||||
``type`` No page
|
||||
``template`` No template.jinja2
|
||||
``date`` Yes None
|
||||
``title`` No None
|
||||
============ =============== =========================
|
||||
|
||||
type
|
||||
Article type. Can be post for blog posts or ``page`` for standalone
|
||||
pages.
|
||||
|
||||
template
|
||||
The template to be used when rendering the HTML page.
|
||||
|
||||
The attribute value must be the path to the template file relative to the
|
||||
template directory. For example, the templates/index.jinja2 file would be:
|
||||
|
||||
.. code-block:: rst
|
||||
|
||||
:template: index.jinja2
|
||||
|
||||
The path to the templates directory and default template can be overridden
|
||||
in **settings.toml**.
|
||||
|
||||
date
|
||||
Date in ISO format YYYY-MM-DD. This attribute is used to sort the list of
|
||||
posts. The date format can be overridden in **settings.toml**.
|
||||
|
||||
title
|
||||
Title of the article. It is not required and is not processed by rSW in
|
||||
any way, but it is desirable to fill it for use in templates.
|
||||
|
||||
.. note::
|
||||
|
||||
The ``authors`` attribute is `special`_ and is not yet supported by rSW.
|
||||
Using ``authors`` will result in an error when building the site.
|
||||
|
||||
settings.toml
|
||||
=============
|
||||
|
||||
The configuration file has a special ``site`` section, all data from which is
|
||||
passed to the template unchanged.
|
||||
|
||||
The structure and data types can be arbitrary. The file uses the
|
||||
`TOML <https://toml.io/>`_ format.
|
||||
|
||||
For example, in this way you can pass basic information about the site:
|
||||
|
||||
.. code-block:: toml
|
||||
|
||||
[site]
|
||||
title = 'My site'
|
||||
name = 'My awesome site'
|
||||
description = 'Awesome site about awesome things'
|
||||
datetime_format = '%d %b %Y'
|
||||
|
||||
A special variable ``pygments_theme`` is also passed to the template from the
|
||||
configuration file. It contains the value of ``pygments.theme``.
|
||||
|
||||
Aggregated data
|
||||
===============
|
||||
|
||||
A dictionary with aggregated data. This data is collected during site
|
||||
generation before HTML-pages are rendered.
|
||||
|
||||
Aggregated data contains lists of blog posts and standalone pages.
|
||||
|
||||
The list of posts is sorted in descending order by date from the ``date``
|
||||
attribute.
|
||||
|
||||
The next article will describe the use of this data in templates.
|
||||
|
||||
.. Links
|
||||
|
||||
.. _field lists: https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html\#field-lists
|
||||
.. _bibliographic elements: https://docutils.sourceforge.io/docs/ref/doctree.html#bibliographic-elements
|
||||
.. _special: https://docutils.sourceforge.io/docs/ref/doctree.html#authors
|
||||
@@ -0,0 +1,199 @@
|
||||
:title: Examples
|
||||
:date: 2022-09-30
|
||||
|
||||
========
|
||||
Examples
|
||||
========
|
||||
|
||||
Blog site example
|
||||
=================
|
||||
|
||||
For the blog, we will need to create three template files and at least two
|
||||
.rst files.
|
||||
|
||||
Edit your **settings.toml**:
|
||||
|
||||
.. code-block:: toml
|
||||
|
||||
[defaults]
|
||||
template = 'post.jinja2'
|
||||
type = 'post'
|
||||
|
||||
[site]
|
||||
title = 'My Blog'
|
||||
|
||||
Generate Pygments theme:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
make css default
|
||||
|
||||
Create basic template **layouts/base.jinja2**:
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="/css/pygments/{{ pygments_theme }}.css">
|
||||
<link rel="stylesheet" href="/css/style.css">
|
||||
<title>{{ page.title }} | {{ site.title }}</title>
|
||||
</head>
|
||||
<body>
|
||||
{% block content %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Home page template **layouts/index.jinja2**:
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
{% extends "base.jinja2" %}
|
||||
{% block content %}
|
||||
<h1>{{ site.title }}</h1>
|
||||
<ul id="posts">
|
||||
{% for post in aggr.posts %}
|
||||
<li>
|
||||
<a href="{{ post.path }}">{{ post.title }}</a>
|
||||
<span class="meta"> — {{ post.date }}</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{{ html | safe }}
|
||||
{% endblock %}
|
||||
|
||||
Posts tempalte **layouts/post.jinja2**:
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
{% extends "base.jinja2" %}
|
||||
{% block content %}
|
||||
<a href="/">Back to the home page</a>
|
||||
<article>
|
||||
{{ html | safe }}
|
||||
</article>
|
||||
{% endblock %}
|
||||
|
||||
Create dummy home page **content/index.rst** with fields:
|
||||
|
||||
.. code-block:: rst
|
||||
|
||||
:title: Homepage
|
||||
:date: 1970-01-01
|
||||
:type: page
|
||||
:template: index.jinja2
|
||||
|
||||
Create first blog post **content/hello_world.rst**:
|
||||
|
||||
.. code-block:: rst
|
||||
|
||||
:title: Hello, World!
|
||||
:date: 1970-01-01
|
||||
|
||||
=============
|
||||
Hello, World!
|
||||
=============
|
||||
|
||||
Hello, there! This is my first site built with *re*\ **Structured**\ *Web*!
|
||||
|
||||
Now build site:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
make
|
||||
make serve
|
||||
|
||||
Page navigation
|
||||
===============
|
||||
|
||||
This code is used on this site to organize pagination.
|
||||
|
||||
**settings.toml**:
|
||||
|
||||
.. code-block:: toml
|
||||
|
||||
[site]
|
||||
[[site.sidebar]]
|
||||
title = 'First'
|
||||
url = '/first.html'
|
||||
|
||||
[[site.sidebar]]
|
||||
title = 'Second'
|
||||
url = '/second.html'
|
||||
|
||||
[[site.sidebar]]
|
||||
title = 'Third'
|
||||
url = '/third.html'
|
||||
|
||||
**layouts/template.jinja2**:
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
{# Display Sidebar #}
|
||||
<strong>Contents</strong>
|
||||
<ul id="contents">
|
||||
{% for item in site.sidebar %}
|
||||
<li>
|
||||
<a href="{{ item.url }}">{{ item.title }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
{# Page content #}
|
||||
<article>
|
||||
{{ html | safe }}
|
||||
</article>
|
||||
|
||||
{# Pagination #}
|
||||
{% for item in site.sidebar %}
|
||||
{% if item.title == page.title %}
|
||||
{% set current = site.sidebar.index(item) %}
|
||||
{% set last = site.sidebar.index(site.sidebar[-1]) %}
|
||||
{% if current == 0 %}
|
||||
{# If curret page is a first page #}
|
||||
<a href="{{ site.sidebar[current+1].url }}">
|
||||
{{ site.sidebar[current+1].title }} --></a>
|
||||
{% elif current == last %}
|
||||
{# If curret page is a last page #}
|
||||
<a href="{{ site.sidebar[current-1].url }}">
|
||||
<-- {{ site.sidebar[current-1].title }}</a></div>
|
||||
{% else %}
|
||||
<a href="{{ site.sidebar[current-1].url }}">
|
||||
<-- {{ site.sidebar[current-1].title }}</a>
|
||||
<a href="{{ site.sidebar[current+1].url }}">
|
||||
{{ site.sidebar[current+1].title }} --></a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
**content/index.rst**:
|
||||
|
||||
.. code-block:: rst
|
||||
|
||||
:title: Homepage
|
||||
:date: 1907-01-01
|
||||
|
||||
=======
|
||||
Welcome
|
||||
=======
|
||||
|
||||
Hello, there!
|
||||
|
||||
Page example e.g. **content/first.rst**:
|
||||
|
||||
.. code-block:: rst
|
||||
|
||||
:title: First
|
||||
:date: 1907-01-01
|
||||
|
||||
=====
|
||||
First
|
||||
=====
|
||||
|
||||
First page.
|
||||
|
||||
.. note::
|
||||
|
||||
Page ``:title:`` and sidebar's ``title`` in **settings.toml** item must be
|
||||
the same. Otherwise pagination not be displayed.
|
||||
@@ -0,0 +1,52 @@
|
||||
:title: reStructuredWeb
|
||||
:date: 2022-09-22
|
||||
|
||||
|rSW|
|
||||
|
||||
v0.1.2
|
||||
|
||||
reStructuredWeb (rSW, reSW or rstW) — is a highly customizable static site
|
||||
generator for the *re*\ **Structured**\ *Text* markup language.
|
||||
|
||||
Why another site generator?
|
||||
===========================
|
||||
|
||||
Hundreds of static site generators have been written with varying degrees of
|
||||
shittyness. Here are just some of the shortcomings of existing solutions:
|
||||
|
||||
* Bad customization. If the task requires something that is not provided for
|
||||
in regular themes, then you have to strain. Editing a theme is an adventure.
|
||||
* Some of the solutions are extremely primitive and only fit narrow cases.
|
||||
Others, on the contrary, are overcomplicated.
|
||||
* There are very few generators with reStructuredText support.
|
||||
|
||||
Why is reStructuredWeb better?
|
||||
==============================
|
||||
|
||||
* **Small codebase**. About ~300 lines in total.
|
||||
* **Doesn't depend on the presentation layer**. rSW just takes data from
|
||||
files and allows you to insert it into templates.
|
||||
|
||||
That's all. In fact, this is enough for a static site generator.
|
||||
|
||||
**rSW** is built on |Docutils|_ and |Jinja2|_.
|
||||
|
||||
.. |rSW| image::
|
||||
/rsw/img/rsw.svg
|
||||
:alt: [rSW]
|
||||
:align: middle
|
||||
:height: 3em
|
||||
|
||||
.. |Docutils| image::
|
||||
/rsw/img/rst.png
|
||||
:alt: Docutils
|
||||
:align: middle
|
||||
:width: 7em
|
||||
.. _Docutils: https://docutils.sourceforge.io/
|
||||
|
||||
.. |Jinja2| image::
|
||||
/rsw/img/jinja.png
|
||||
:alt: Jinja2
|
||||
:align: middle
|
||||
:width: 3em
|
||||
.. _Jinja2: https://jinja.palletsprojects.com/
|
||||
@@ -0,0 +1,48 @@
|
||||
:title: Installation
|
||||
:date: 2022-09-22
|
||||
|
||||
============
|
||||
Installation
|
||||
============
|
||||
|
||||
From PyPI
|
||||
=========
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
pip install reSW
|
||||
|
||||
From tarball
|
||||
============
|
||||
|
||||
1. `Download`_ tarball (`alterntive link </rsw/downloads/reSW-0.1.2.tar.gz>`_)
|
||||
with prebuilt Python package.
|
||||
2. Install via pip:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
pip install ./reSW-0.1.2.tar.gz
|
||||
|
||||
From Source
|
||||
============
|
||||
|
||||
1. `Download`_ source or clone Git repo:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
git clone https://git.nxhs.cloud/ge/rSW.git && cd rSW
|
||||
|
||||
2. Install build deps:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
pip install --update build
|
||||
|
||||
3. Build and install Python package:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
make
|
||||
make install
|
||||
|
||||
.. _Download: https://git.nxhs.cloud/ge/rSW/releases
|
||||
@@ -0,0 +1,13 @@
|
||||
:title: Overview
|
||||
:date: 2022-09-22
|
||||
|
||||
========
|
||||
Overview
|
||||
========
|
||||
|
||||
On this page, I will list the important features of the application that you
|
||||
may be looking for.
|
||||
|
||||
* You can create two types of pages: blog posts and standalone pages.
|
||||
* Any page can use its own layout (template).
|
||||
* You can pass arbitrary data to templates. See `Data Sources </rsw/data_sources.html>`_
|
||||
@@ -0,0 +1,70 @@
|
||||
:title: Quick Start
|
||||
:date: 2022-09-22
|
||||
|
||||
===========
|
||||
Quick Start
|
||||
===========
|
||||
|
||||
After installation you must have these file structure::
|
||||
|
||||
./
|
||||
├── content/
|
||||
├── layouts/
|
||||
├── Makefile
|
||||
├── settings.toml
|
||||
└── static/
|
||||
|
||||
Articles mst be placed into content/ dir and have .rst extension.
|
||||
|
||||
Also you can place article into subdirectory as following::
|
||||
|
||||
./
|
||||
└── content/
|
||||
└── hello_world/
|
||||
└── index.rst
|
||||
|
||||
You need to create page template first.
|
||||
|
||||
Create **layouts/template.jinja2** with content:
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>{{ page.title }}</title>
|
||||
</head>
|
||||
<body>
|
||||
{{ html | safe }}
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Now create first page **content/index.rst**:
|
||||
|
||||
.. code-block:: rst
|
||||
|
||||
:title: Hello, World!
|
||||
:date: 1970-01-01
|
||||
|
||||
=============
|
||||
Hello, World!
|
||||
=============
|
||||
|
||||
Hello, there! This is my first site built with *re*\ **Structured**\ *Web*!
|
||||
|
||||
Build your site with command:
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
rsw build
|
||||
# OR
|
||||
make
|
||||
|
||||
build/ directory will be created. Run local HTTP-server to view site:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
make serve
|
||||
|
||||
Local server will be started at `http://127.0.0.1:8080/ <http://127.0.0.1:8080/>`_.
|
||||
@@ -0,0 +1,47 @@
|
||||
:title: rST Extensions
|
||||
:date: 2022-09-29
|
||||
|
||||
===========================
|
||||
reStructuredText Extensions
|
||||
===========================
|
||||
|
||||
rSW includes support for a few directives and roles that are not part of
|
||||
Docutils.
|
||||
|
||||
code-block
|
||||
==========
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
if __name__ == "__main__":
|
||||
# [initialize]
|
||||
app.start(":8000")
|
||||
# [initialize]
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
if __name__ == "__main__":
|
||||
# [initialize]
|
||||
app.start(":8000")
|
||||
# [initialize]
|
||||
|
||||
TODO
|
||||
====
|
||||
|
||||
In plan:
|
||||
|
||||
* Fully featured ``code-block`` (as in `Sphinx`_)
|
||||
* Deleted text (`<del>`)
|
||||
* Inserted text (`<ins>`)
|
||||
* Keystrokes mark (``:kbd:``)
|
||||
* Spoilers (`<details>`, `<summary>`)
|
||||
* Table of Contents (``toctree``)
|
||||
* Abbreviations (``:abbr:``)
|
||||
|
||||
.. _Sphinx: https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#directive-code-block
|
||||
@@ -0,0 +1,130 @@
|
||||
:title: Variables
|
||||
:date: 2022-09-22
|
||||
|
||||
=========
|
||||
Variables
|
||||
=========
|
||||
|
||||
The following variables are passed to the template. Еach variable corresponds
|
||||
to a data source, which is described in the previous article.
|
||||
|
||||
``page``: dict
|
||||
Dictonary with article attributes. Data structure example:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
page = {
|
||||
'title': 'Variables',
|
||||
'date': '2022-09-22',
|
||||
}
|
||||
|
||||
Note that the ``type`` and ``template`` keys are missing. These keys are
|
||||
added implicitly. The ``page`` dict will always contain only the data
|
||||
specified directly in the article.
|
||||
|
||||
Here ``type`` and ``template`` fallbacks to defaults:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
'template': `template.jinja2`
|
||||
'type': 'page',
|
||||
|
||||
Usage example:
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
<h1>{{ page.title }}</h1>
|
||||
|
||||
``site``: dict
|
||||
Dict of values from ``site`` section from **settings.toml**. The structure
|
||||
and data types can be arbitrary.
|
||||
|
||||
This data can be used to add custom elements common to the entire site.
|
||||
Below is an example of adding a list of links.
|
||||
|
||||
.. code-block:: toml
|
||||
|
||||
[site]
|
||||
title = 'My awesome site'
|
||||
description = 'Awesome site about awesome things'
|
||||
|
||||
[[site.links]]
|
||||
title = 'GitHub'
|
||||
url = 'https://github.com/username'
|
||||
|
||||
[[site.links]]
|
||||
title = 'Twitter'
|
||||
url = 'https://twitter.com/username'
|
||||
|
||||
This data is serialized into a dictionary with the following structure:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
site = {
|
||||
'title': 'My awesome site',
|
||||
'description': 'Awesome site about awesome things',
|
||||
'links': [
|
||||
{
|
||||
'title': 'GitHub',
|
||||
'url': 'https://github.com/username',
|
||||
},
|
||||
{
|
||||
'title': 'Twitter',
|
||||
'url': 'https://twitter.com/username',
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
In template:
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
{% for link in site.links %}
|
||||
<a href="{{ link.url }}">{{ link.title }} </a>
|
||||
{% endfor %}
|
||||
|
||||
``aggr``: dict
|
||||
This dictonary contains list of posts and list of pages. The elements of
|
||||
each list consist of dictionaries with strings.
|
||||
|
||||
Structure of the ``aggr`` dictonary:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
aggr = {
|
||||
'posts': [
|
||||
{
|
||||
'title': 'Hello, World!',
|
||||
'date': '1970-01-01',
|
||||
'type': 'post'
|
||||
},
|
||||
{
|
||||
'title': 'reStructuredText Example',
|
||||
'date': '1970-01-01',
|
||||
'type': 'post'
|
||||
}
|
||||
],
|
||||
'pages': [
|
||||
{
|
||||
'title': 'Variables',
|
||||
'date': '2022-09-22'
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
These lists are applicable, for example, to display a list of posts on the
|
||||
blog's main page.
|
||||
|
||||
``pygments_theme``: str
|
||||
A string containing the name of the Pygments theme. In **settings.toml**:
|
||||
|
||||
.. code-block:: toml
|
||||
|
||||
[pygments]
|
||||
theme = 'rrt'
|
||||
|
||||
The default theme is ``default``. An example of usage in a template:
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
<link rel="stylesheet" href="/css/pygments/{{ pygments_theme }}.css">
|
||||
@@ -0,0 +1,68 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" dir="ltr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="{{ site.base_url }}/css/pygments/{{ pygments_theme }}.css">
|
||||
<link rel="stylesheet" href="{{ site.base_url }}/css/style.css">
|
||||
<title>{{ page.title }} | {{ site.title }}</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="flex">
|
||||
<div class="col-md-2 sidebar">
|
||||
<p>
|
||||
{% for link in site.links %}
|
||||
<strong><a href="{{ link.url }}" style="text-decoration: none">
|
||||
{{ link.title }} </a></strong>
|
||||
{% endfor %}
|
||||
</p>
|
||||
<strong>Contents</strong>
|
||||
<ul id="contents">
|
||||
{% for item in site.sidebar %}
|
||||
<li>
|
||||
<a href="{{ item.url }}">{{ item.title }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<article>
|
||||
{{ html | safe }}
|
||||
</article>
|
||||
|
||||
<div class="pagination" style="margin: 2rem 0;">
|
||||
{% for item in site.sidebar %}
|
||||
{% if item.title == page.title %}
|
||||
{% set current = site.sidebar.index(item) %}
|
||||
{% set last = site.sidebar.index(site.sidebar[-1]) %}
|
||||
{% if current == 0 %}
|
||||
<div class="flex" style="justify-content: space-between">
|
||||
<div></div>
|
||||
<div><a href="{{ site.sidebar[current+1].url }}">
|
||||
{{ site.sidebar[current+1].title }} --></a></div>
|
||||
</div>
|
||||
{% elif current == last %}
|
||||
<div class="flex" style="justify-content: space-between">
|
||||
<div><a href="{{ site.sidebar[current-1].url }}">
|
||||
<-- {{ site.sidebar[current-1].title }}</a></div>
|
||||
<div></div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="flex" style="justify-content: space-between">
|
||||
<div><a href="{{ site.sidebar[current-1].url }}">
|
||||
<-- {{ site.sidebar[current-1].title }}</a></div>
|
||||
<div><a href="{{ site.sidebar[current+1].url }}">
|
||||
{{ site.sidebar[current+1].title }} --></a></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,58 @@
|
||||
[dirs]
|
||||
build_dir = 'build/rsw'
|
||||
|
||||
[pygments]
|
||||
theme = 'vs'
|
||||
|
||||
[site]
|
||||
base_url = '/rsw'
|
||||
title = 'Highly customizable static site generator for reStructuredText markup'
|
||||
name = '[rSW]'
|
||||
|
||||
[[site.links]]
|
||||
title = '[Home]'
|
||||
url = '/rsw'
|
||||
|
||||
[[site.links]]
|
||||
title = '[Docs]'
|
||||
url = '/rsw/overview.html'
|
||||
|
||||
[[site.links]]
|
||||
title = '[Download]'
|
||||
url = 'https://git.nxhs.cloud/ge/rSW'
|
||||
|
||||
[[site.sidebar]]
|
||||
title = 'Overview'
|
||||
url = '/rsw/overview.html'
|
||||
|
||||
[[site.sidebar]]
|
||||
title = 'Installation'
|
||||
url = '/rsw/install.html'
|
||||
|
||||
[[site.sidebar]]
|
||||
title = 'Quick Start'
|
||||
url = '/rsw/quick_start.html'
|
||||
|
||||
[[site.sidebar]]
|
||||
title = 'Data Sources'
|
||||
url = '/rsw/data_sources.html'
|
||||
|
||||
[[site.sidebar]]
|
||||
title = 'Variables'
|
||||
url = '/rsw/variables.html'
|
||||
|
||||
[[site.sidebar]]
|
||||
title = 'Configuration'
|
||||
url = '/rsw/configuration.html'
|
||||
|
||||
[[site.sidebar]]
|
||||
title = 'Command Line Interface'
|
||||
url = '/rsw/cli.html'
|
||||
|
||||
[[site.sidebar]]
|
||||
title = 'rST Extensions'
|
||||
url = '/rsw/rst_extensions.html'
|
||||
|
||||
[[site.sidebar]]
|
||||
title = 'Examples'
|
||||
url = '/rsw/examples.html'
|
||||
Vendored
+43
@@ -0,0 +1,43 @@
|
||||
pre { line-height: 125%; }
|
||||
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight { background: #ffffff; }
|
||||
.highlight .c { color: #008000 } /* Comment */
|
||||
.highlight .err { border: 1px solid #FF0000 } /* Error */
|
||||
.highlight .k { color: #0000ff } /* Keyword */
|
||||
.highlight .ch { color: #008000 } /* Comment.Hashbang */
|
||||
.highlight .cm { color: #008000 } /* Comment.Multiline */
|
||||
.highlight .cp { color: #0000ff } /* Comment.Preproc */
|
||||
.highlight .cpf { color: #008000 } /* Comment.PreprocFile */
|
||||
.highlight .c1 { color: #008000 } /* Comment.Single */
|
||||
.highlight .cs { color: #008000 } /* Comment.Special */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gh { font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gp { font-weight: bold } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .kc { color: #0000ff } /* Keyword.Constant */
|
||||
.highlight .kd { color: #0000ff } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #0000ff } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #0000ff } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #0000ff } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #2b91af } /* Keyword.Type */
|
||||
.highlight .s { color: #a31515 } /* Literal.String */
|
||||
.highlight .nc { color: #2b91af } /* Name.Class */
|
||||
.highlight .ow { color: #0000ff } /* Operator.Word */
|
||||
.highlight .sa { color: #a31515 } /* Literal.String.Affix */
|
||||
.highlight .sb { color: #a31515 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #a31515 } /* Literal.String.Char */
|
||||
.highlight .dl { color: #a31515 } /* Literal.String.Delimiter */
|
||||
.highlight .sd { color: #a31515 } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #a31515 } /* Literal.String.Double */
|
||||
.highlight .se { color: #a31515 } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #a31515 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #a31515 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #a31515 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #a31515 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #a31515 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #a31515 } /* Literal.String.Symbol */
|
||||
Vendored
+74
@@ -0,0 +1,74 @@
|
||||
body {
|
||||
font-family: 'Source Code Pro', monospace;
|
||||
line-height: 1.3;
|
||||
padding: 1rem;
|
||||
}
|
||||
a, a:visited {
|
||||
color: #2003ee;
|
||||
}
|
||||
.flex {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.col-md-2 {
|
||||
width: 15%;
|
||||
}
|
||||
.col-md-6 {
|
||||
width: 50%;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.flex {
|
||||
flex-direction: column
|
||||
}
|
||||
.col-md-2, .col-md-6 {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
pre {
|
||||
overflow-x: scroll;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
.pre {
|
||||
font-size: 85%;
|
||||
}
|
||||
.highlight pre {
|
||||
padding: 1rem;
|
||||
border: 1px solid #000;
|
||||
}
|
||||
span.docutils.literal {
|
||||
padding: 0 4px 2px 4px;
|
||||
color: #a31515;
|
||||
font-size: 80%;
|
||||
}
|
||||
span.docutils.literal span.pre {
|
||||
font-size: 100%;
|
||||
}
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
table, th, td {
|
||||
border: 1px solid;
|
||||
border-collapse: collapse;
|
||||
border-color: #000;
|
||||
padding: 0 8px;
|
||||
}
|
||||
th {
|
||||
font-weight: 600;
|
||||
}
|
||||
td p {
|
||||
margin: .5rem 0;
|
||||
}
|
||||
hr {
|
||||
color: #d0d7de;
|
||||
}
|
||||
.admonition {
|
||||
padding: 0 1rem;
|
||||
margin: .5rem 0;
|
||||
border-left: 4px solid #000;
|
||||
}
|
||||
.admonition-title {
|
||||
font-weight: bold;
|
||||
}
|
||||
.sidebar {
|
||||
margin-right: 1rem;
|
||||
}
|
||||
Vendored
BIN
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
Vendored
BIN
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
Vendored
+20
@@ -0,0 +1,20 @@
|
||||
<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="441" xmlns="http://www.w3.org/2000/svg" height="62" id="screenshot-7eff6e30-3a05-11ed-9839-b7a28b1817eb" viewBox="0 0 441 62" style="-webkit-print-color-adjust: exact;" fill="none" version="1.1"><style data-loading="false">
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'sourcesanspro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: block;
|
||||
src: url(data:application/font-woff;base64,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 truncated
|
||||
}
|
||||
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Share Tech Mono';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: block;
|
||||
src: url(data:font/woff2;base64,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 truncated
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
</style><g id="shape-7eff6e30-3a05-11ed-9839-b7a28b1817eb"><defs><pattern patternUnits="userSpaceOnUse" x="0" y="0" height="62" width="441" data-loading="false" id="fill-0-ec8666a0-3ff2-11ed-bfc9-7756f990e0dc"><g><rect width="441" height="62" style="fill: rgb(0, 0, 0); fill-opacity: 1;"/></g></pattern></defs><g transform="matrix(1,0,0,1,0,0)" class="text-container" x="0" y="0" width="441" height="62" rx="0" ry="0"><g id="fills-7eff6e30-3a05-11ed-9839-b7a28b1817eb"><text x="0" y="1.7166595458984375" dominant-baseline="text-before-edge" style="text-transform: none; font-family: "Share Tech Mono"; letter-spacing: normal; font-style: normal; font-weight: 400; white-space: pre; font-size: 48px; text-decoration: rgb(0, 0, 0); direction: ltr; fill: rgb(0, 0, 0); fill-opacity: 1;">[reStructuredWeb]</text></g></g></g></svg>
|
||||
|
After Width: | Height: | Size: 58 KiB |
Reference in new issue
Block a user