diff --git a/.reuse/dep5 b/.reuse/dep5 index 5c3e72a..3d94d06 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -3,7 +3,7 @@ Upstream-Name: notes Upstream-Contact: Heiko Schaefer Source: https://codeberg.org/openpgp/notes -Files: book/assets/* book/source/img/* +Files: book/assets/* book/source/img/* book/source/_static/epub/img/* book/source/_static/html/img/* Copyright: 2023 The "Notes on OpenPGP" project License: CC-BY-SA-4.0 diff --git a/book/.codespellrc b/book/.codespellrc index 0ca6c79..280ba35 100644 --- a/book/.codespellrc +++ b/book/.codespellrc @@ -2,4 +2,4 @@ # SPDX-License-Identifier: CC0-1.0 [codespell] -skip = ./build,./input,./source/diag/*.svg,./source/examples/* +skip = ./build,./input,./assets/*/*,./source/examples/* diff --git a/book/Makefile b/book/Makefile index 2d84c06..d1e55d2 100644 --- a/book/Makefile +++ b/book/Makefile @@ -16,6 +16,7 @@ LYCHEE ?= lychee PRINTF ?= printf RM ?= rm WATCHEXEC ?= watchexec +ASSETSDIR = assets SOURCEDIR = source BUILDDIR = build @@ -25,7 +26,7 @@ clean-all: clean # convert all SVG to plain SVGs without metadata and paths instead of text convert-svg: - for file in $(SOURCEDIR)/../assets/inkscape/*.svg $(SOURCEDIR)/../assets/drawio/*.svg; do if [[ ! -f $(SOURCEDIR)/plain_svg/$$(basename $$file) ]]; then $(INKSCAPE) --export-text-to-path --export-plain-svg --export-filename=$(SOURCEDIR)/plain_svg/$$(basename $$file) $$file; fi; done + for file in $(ASSETSDIR)/inkscape/*.svg $(ASSETSDIR)/drawio/*.svg; do if [[ ! -f $(SOURCEDIR)/plain_svg/$$(basename $$file) ]]; then $(INKSCAPE) --export-text-to-path --export-plain-svg --export-filename=$(SOURCEDIR)/plain_svg/$$(basename $$file) $$file; fi; done epub: convert-svg @$(SPHINXBUILD) -M epub "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) @@ -36,7 +37,7 @@ epub-check: clean epub # use watchexec to rebuild the EPUB whenever a markdown file changes # this target kills *any* open instance of calibre's ebook-viewer, that is currently showing OpenPGPforapplicationdevelopers.epub epub-watch: - @$(WATCHEXEC) --shell bash -e css,md 'make clean epub && ev_pid="$$(pgrep -af "^python3.*ebook-viewer.*OpenPGPforapplicationdevelopers" | cut -f1 -d " ")" && if [[ -n "$$ev_pid" ]]; then kill -9 "$$ev_pid"; fi && $(EBOOK_VIEWER) $(BUILDDIR)/epub/OpenPGPforapplicationdevelopers.epub &' + @$(WATCHEXEC) --shell bash -e css,html,j2,md,py,svg 'make clean epub && ev_pid="$$(pgrep -af "^python3.*ebook-viewer.*OpenPGPforapplicationdevelopers" | cut -f1 -d " ")" && if [[ -n "$$ev_pid" ]]; then kill -9 "$$ev_pid"; fi && $(EBOOK_VIEWER) $(BUILDDIR)/epub/OpenPGPforapplicationdevelopers.epub &' # Put it first so that "make" without argument is like "make help". help: @@ -46,11 +47,11 @@ html: convert-svg @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) html-linkcheck: clean html - @$(LYCHEE) "$(BUILDDIR)/html/"*.html + @$(LYCHEE) --exclude "https://openpgp.dev*" --exclude "https://codeberg.org/openpgp/notes" "$(BUILDDIR)/html/"*.html # use watchexec to rebuild the HTML whenever a markdown file changes html-watch: - @$(WATCHEXEC) --shell bash -e css,md 'make clean html' + @$(WATCHEXEC) --shell bash -e css,html,j2,md,py,svg 'make clean html' # spell check all sources # NOTE: diagrams are not yet spell checked, but we emit the required changes diff --git a/book/source/_static/epub/css/custom.css b/book/source/_static/epub/css/custom.css index 31ee04f..46b31d2 100644 --- a/book/source/_static/epub/css/custom.css +++ b/book/source/_static/epub/css/custom.css @@ -59,4 +59,13 @@ aside.footnote-list { border-top: 1px solid black; margin-top: 2em; padding-top: 2em; -} \ No newline at end of file +} + +/* +Cover +*/ + +div.cover-img { + margin: auto; + width: 50%; +} diff --git a/book/source/_static/epub/img/cover.svg b/book/source/_static/epub/img/cover.svg new file mode 100644 index 0000000..5bc03b0 --- /dev/null +++ b/book/source/_static/epub/img/cover.svg @@ -0,0 +1,263 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/book/source/_static/html/img/favicon.ico b/book/source/_static/html/img/favicon.ico new file mode 100644 index 0000000..27ffc73 Binary files /dev/null and b/book/source/_static/html/img/favicon.ico differ diff --git a/book/source/_static/html/img/favicon.svg b/book/source/_static/html/img/favicon.svg new file mode 100644 index 0000000..c12de0b --- /dev/null +++ b/book/source/_static/html/img/favicon.svg @@ -0,0 +1,158 @@ + + diff --git a/book/source/_static/html/img/logo.svg b/book/source/_static/html/img/logo.svg new file mode 100644 index 0000000..b888225 --- /dev/null +++ b/book/source/_static/html/img/logo.svg @@ -0,0 +1,137 @@ + + diff --git a/book/source/_templates/cover.j2 b/book/source/_templates/cover.j2 new file mode 100644 index 0000000..0c0e9f7 --- /dev/null +++ b/book/source/_templates/cover.j2 @@ -0,0 +1,20 @@ +{# +SPDX-FileCopyrightText: 2023 The "Notes on OpenPGP" project +SPDX-License-Identifier: CC-BY-SA-4.0 +#} +{%- extends "layout.html" %} +{%- block header %}{% endblock %} +{%- block rootrellink %}{% endblock %} +{%- block relbaritems %}{% endblock %} +{%- block sidebarlogo %}{% endblock %} +{%- block linktags %}{% endblock %} +{%- block relbar1 %}{% endblock %} +{%- block sidebar1 %}{% endblock %} +{%- block sidebar2 %}{% endblock %} +{%- block footer %}{% endblock %} + +{% block content %} +
+ Cover image +
+{% endblock %} diff --git a/book/source/conf.py b/book/source/conf.py index 9c10089..48e0bb7 100644 --- a/book/source/conf.py +++ b/book/source/conf.py @@ -6,12 +6,20 @@ # For the full list of built-in configuration values, see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html +from datetime import date + # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information project = 'OpenPGP for application developers' -copyright = '2023, The "Notes on OpenPGP" project, CC-BY-SA-4.0' -version = "0.01" +author = 'The "Notes on OpenPGP" project' +upstream_url = "https://codeberg.org/openpgp/notes" +license_url = "https://creativecommons.org/licenses/by-sa/4.0/" +copyright = f'{date.today().year}, {author}, CC-BY-SA-4.0' +version = "0.1" +suppress_warnings = [ + 'epub.unknown_project_files', +] # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration @@ -29,6 +37,9 @@ numfig = True # number figures in flat hierarchy numfig_secnum_depth = 0 +# format today as YYYY-MM-DD instead of language specific +today_fmt = "%Y-%m-%d" + # -- Options for MyST-parser ------------------------------------------------- # https://myst-parser.readthedocs.io/en/latest/configuration.html @@ -45,9 +56,12 @@ myst_enable_extensions = [ # -- Options for EPUB output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-epub-output +epub_copyright = f'{date.today().year}, {author} ({upstream_url}), CC-BY-SA-4.0' +epub_cover = ('_static/epub/img/cover.svg', 'cover.j2') epub_css_files = [ 'epub/css/custom.css' ] +epub_title = project.replace(" ", "_") # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output @@ -58,13 +72,19 @@ html_css_files = [ ('html/css/custom.css', {'priority': 1000}) ] +html_favicon = '_static/html/img/favicon.ico' +html_logo = '_static/html/img/logo.svg' html_show_sphinx = False -html_show_copyright = False html_show_sourcelink = False +html_title = project # https://github.com/sphinx-doc/alabaster/blob/0.x/alabaster/theme.conf html_theme_options = { 'code_font_size': '9pt', + 'extra_nav_links': { + 'Sources on Codeberg': upstream_url, + 'Download EPUB': f'https://openpgp.dev/epub/{epub_title}.epub', + }, 'show_relbars': 'yes', 'show_powered_by': False, }