diff --git a/.gitignore b/.gitignore index 69da481..0201865 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ build/ -assets/ -content/ -layouts/ -settings.toml +#assets/ +#content/ +#layouts/ +#settings.toml diff --git a/assets/css/custom.css b/assets/css/custom.css new file mode 100644 index 0000000..3737b10 --- /dev/null +++ b/assets/css/custom.css @@ -0,0 +1,33 @@ +body { + padding: 2rem; + max-width: 70ch; + font-family: 'Source Code Pro', monospace; + font-size: 18px; + line-height: 1.3; +} + +ul#posts li { + list-style: none; + padding: 0; + margin: .5rem 0; +} + +ul#posts { + padding: 0; +} + +span.meta { + font-size: 80%; +} + +header { + margin: 2rem 0; +} + +footer { + margin-top: 2rem; +} + +p { + text-align: justify; +} diff --git a/assets/css/html5_polyglot/README.txt b/assets/css/html5_polyglot/README.txt new file mode 100644 index 0000000..bd0e5f3 --- /dev/null +++ b/assets/css/html5_polyglot/README.txt @@ -0,0 +1,2 @@ +Source URL: +https://docutils.sourceforge.io/docutils/writers/html5_polyglot/ diff --git a/assets/css/html5_polyglot/math.css b/assets/css/html5_polyglot/math.css new file mode 100644 index 0000000..1891a79 --- /dev/null +++ b/assets/css/html5_polyglot/math.css @@ -0,0 +1,332 @@ +/* +* math2html: convert LaTeX equations to HTML output. +* +* Copyright (C) 2009,2010 Alex Fernández +* 2021 Günter Milde +* +* Released under the terms of the `2-Clause BSD license'_, in short: +* Copying and distribution of this file, with or without modification, +* are permitted in any medium without royalty provided the copyright +* notice and this notice are preserved. +* This file is offered as-is, without any warranty. +* +* .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause +* +* Based on eLyXer: convert LyX source files to HTML output. +* http://elyxer.nongnu.org/ +* +* +* CSS file for LaTeX formulas. +* +* References: http://www.zipcon.net/~swhite/docs/math/math.html +* http://www.cs.tut.fi/~jkorpela/math/ +*/ + +/* Formulas */ +.formula { + text-align: center; + margin: 1.2em 0; + line-height: 1.4; +} +span.formula { + white-space: nowrap; +} +div.formula { + padding: 0.5ex; + margin-left: auto; + margin-right: auto; +} + +/* Basic features */ +a.eqnumber { + display: inline-block; + float: right; + clear: right; + font-weight: bold; +} +span.unknown { + color: #800000; +} +span.ignored, span.arraydef { + display: none; +} +.phantom { + visibility: hidden; +} +.formula i { + letter-spacing: 0.1ex; +} + +/* Alignment */ +.align-left, .align-l { + text-align: left; +} +.align-right, .align-r { + text-align: right; +} +.align-center, .align-c { + text-align: center; +} + +/* Structures */ +span.hspace { + display: inline-block; +} +span.overline, span.bar { + text-decoration: overline; +} +.fraction, .fullfraction, .textfraction { + display: inline-block; + vertical-align: middle; + text-align: center; +} +span.formula .fraction, +.textfraction, +span.smallmatrix { + font-size: 80%; + line-height: 1; +} +span.numerator { + display: block; + line-height: 1; +} +span.denominator { + display: block; + line-height: 1; + padding: 0ex; + border-top: thin solid; +} +.formula sub, .formula sup { + font-size: 80%; +} +sup.numerator, sup.unit { + vertical-align: 80%; +} +sub.denominator, sub.unit { + vertical-align: -20%; +} +span.smallsymbol { + font-size: 75%; + line-height: 75%; +} +span.boldsymbol { + font-weight: bold; +} +span.sqrt { + display: inline-block; + vertical-align: middle; + padding: 0.1ex; +} +sup.root { + position: relative; + left: 1.4ex; +} +span.radical { + display: inline-block; + padding: 0ex; + /* font-size: 160%; for DejaVu, not required with STIX */ + line-height: 100%; + vertical-align: top; + vertical-align: middle; +} + +span.root { + display: inline-block; + border-top: thin solid; + padding: 0ex; + vertical-align: middle; +} +div.formula .bigoperator, +.displaystyle .bigoperator, +.displaystyle .bigoperator { + line-height: 120%; + font-size: 140%; + padding-right: 0.2ex; +} +span.fraction .bigoperator, +span.scriptstyle .bigoperator { + line-height: inherit; + font-size: inherit; + padding-right: 0; +} +span.bigdelimiter { + display: inline-block; +} +span.bigdelimiter.size1 { + transform: scale(1, 1.2); + line-height: 1.2; +} +span.bigdelimiter.size2 { + transform: scale(1, 1.62); + line-height: 1.62%; + +} +span.bigdelimiter.size3 { + transform: scale(1, 2.05); + line-height: 2.05%; +} +span.bigdelimiter.size4 { + transform: scale(1, 2.47); + line-height: 2.47%; +} +/* vertically stacked sub and superscript */ +span.scripts { + display: inline-table; + vertical-align: middle; + padding-right: 0.2ex; +} +.script { + display: table-row; + text-align: left; + line-height: 150%; +} +span.limits { + display: inline-table; + vertical-align: middle; +} +.limit { + display: table-row; + line-height: 99%; +} +sup.limit, sub.limit { + line-height: 100%; +} +span.embellished, +span.embellished > .base { + display: inline-block; +} +span.embellished > sup, +span.embellished > sub { + display: inline-block; + font-size: 100%; + position: relative; + bottom: 0.3em; + width: 0px; +} +span.embellished > sub { + top: 0.4em; +} + +/* Environments */ +span.array, span.bracketcases, span.binomial, span.environment { + display: inline-table; + text-align: center; + vertical-align: middle; +} +span.arrayrow, span.binomrow { + display: table-row; + padding: 0; + border: 0; +} +span.arraycell, span.bracket, span.case, span.binomcell, span.environmentcell { + display: table-cell; + padding: 0ex 0.2ex; + line-height: 1; /* 99%; */ + border: 0ex; +} +.environment.align > .arrayrow > .arraycell.align-l { + padding-right: 2em; +} + +/* Inline binomials */ +span.binom { + display: inline-block; + vertical-align: middle; + text-align: center; + font-size: 80%; +} +span.binomstack { + display: block; + padding: 0em; +} + +/* Over- and underbraces */ +span.overbrace { + border-top: 2pt solid; +} +span.underbrace { + border-bottom: 2pt solid; +} + +/* Stackrel */ +span.stackrel { + display: inline-block; + text-align: center; +} +span.upstackrel { + display: block; + padding: 0em; + font-size: 80%; + line-height: 64%; + position: relative; + top: 0.15em; + +} +span.downstackrel { + display: block; + vertical-align: bottom; + padding: 0em; +} + +/* Fonts */ +.formula { + font-family: STIX, "DejaVu Serif", "DejaVu Math TeX Gyre", serif; +} +span.radical, /* ensure correct size of square-root sign */ +span.integral { /* upright integral signs for better alignment of indices */ + font-family: "STIXIntegralsUp", STIX; + /* font-size: 115%; match apparent size with DejaVu */ +} +span.bracket { + /* some "STIX" and "DejaVu Math TeX Gyre" bracket pieces don't fit */ + font-family: "DejaVu Serif", serif; +} +span.mathsf, span.textsf { + font-family: sans-serif; +} +span.mathrm, span.textrm { + font-family: STIX, "DejaVu Serif", "DejaVu Math TeX Gyre", serif; +} +span.mathtt, span.texttt { + font-family: monospace; +} +span.text, span.textnormal, +span.mathsf, span.mathtt, span.mathrm { + font-style: normal; +} +span.fraktur { + font-family: "Lucida Blackletter", eufm10, blackletter; +} +span.blackboard { + font-family: Blackboard, msbm10, serif; +} +span.scriptfont { + font-family: "Monotype Corsiva", "Apple Chancery", "URW Chancery L", cursive; + font-style: italic; +} +span.mathscr { + font-family: MathJax_Script, rsfs10, cursive; + font-style: italic; +} +span.textsc { + font-variant: small-caps; +} +span.textsl { + font-style: oblique; +} + +/* Colors */ +span.colorbox { + display: inline-block; + padding: 5px; +} +span.fbox { + display: inline-block; + border: thin solid black; + padding: 2px; +} +span.boxed, span.framebox { + display: inline-block; + border: thin solid black; + padding: 5px; +} diff --git a/assets/css/html5_polyglot/minimal.css b/assets/css/html5_polyglot/minimal.css new file mode 100644 index 0000000..5f11426 --- /dev/null +++ b/assets/css/html5_polyglot/minimal.css @@ -0,0 +1,276 @@ +/* Minimal style sheet for the HTML output of Docutils. */ +/* */ +/* :Author: Günter Milde, based on html4css1.css by David Goodger */ +/* :Id: $Id: minimal.css 9079 2022-06-19 14:00:56Z milde $ */ +/* :Copyright: © 2015, 2021 Günter Milde. */ +/* :License: Released under the terms of the `2-Clause BSD license`_, */ +/* in short: */ +/* */ +/* Copying and distribution of this file, with or without modification, */ +/* are permitted in any medium without royalty provided the copyright */ +/* notice and this notice are preserved. */ +/* */ +/* This file is offered as-is, without any warranty. */ +/* */ +/* .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause */ + +/* This CSS3 stylesheet defines rules for Docutils elements without */ +/* HTML equivalent. It is required to make the document semantics visible. */ +/* */ +/* .. _validates: http://jigsaw.w3.org/css-validator/validator$link */ + +/* titles */ +p.topic-title, +p.admonition-title, +p.system-message-title { + font-weight: bold; +} +p.sidebar-title, +p.rubric { + font-weight: bold; + font-size: larger; +} +p.rubric { + color: maroon; +} +p.subtitle, +p.section-subtitle, +p.sidebar-subtitle { + font-weight: bold; + margin-top: -0.5em; +} +h1 + p.subtitle { + font-size: 1.6em; +} +a.toc-backref { + color: inherit; + text-decoration: none; +} + +/* Warnings, Errors */ +.system-messages h2, +.system-message-title, +span.problematic { + color: red; +} + +/* Inline Literals */ +.docutils.literal { + font-family: monospace; + white-space: pre-wrap; +} +/* do not wrap at hyphens and similar: */ +.literal > span.pre { white-space: nowrap; } + +/* Lists */ + +/* compact and simple lists: no margin between items */ +.simple li, .simple ul, .simple ol, +.compact li, .compact ul, .compact ol, +.simple > li p, dl.simple > dd, +.compact > li p, dl.compact > dd { + margin-top: 0; + margin-bottom: 0; +} +/* Nested Paragraphs */ +p:first-child { margin-top: 0; } +p:last-child { margin-bottom: 0; } +details > p:last-child { margin-bottom: 1em; } + +/* Table of Contents */ +.contents ul.auto-toc { /* section numbers present */ + list-style-type: none; +} + +/* Enumerated Lists */ +ol.arabic { list-style: decimal } +ol.loweralpha { list-style: lower-alpha } +ol.upperalpha { list-style: upper-alpha } +ol.lowerroman { list-style: lower-roman } +ol.upperroman { list-style: upper-roman } + +/* Definition Lists and Derivatives */ +dt .classifier { font-style: italic } +dt .classifier:before { + font-style: normal; + margin: 0.5em; + content: ":"; +} +/* Field Lists and similar */ +/* bold field name, content starts on the same line */ +dl.field-list, +dl.option-list, +dl.docinfo { + display: flow-root; +} +dl.field-list > dt, +dl.option-list > dt, +dl.docinfo > dt { + font-weight: bold; + clear: left; + float: left; + margin: 0; + padding: 0; + padding-right: 0.2em; +} +/* Offset for field content (corresponds to the --field-name-limit option) */ +dl.field-list > dd, +dl.option-list > dd, +dl.docinfo > dd { + margin-left: 9em; /* ca. 14 chars in the test examples, fit all Docinfo fields */ +} +/* start nested lists on new line */ +dd > dl:first-child, +dd > ul:first-child, +dd > ol:first-child { + clear: left; +} +/* start field-body on a new line after long field names */ +dl.field-list > dd > *:first-child, +dl.option-list > dd > *:first-child +{ + display: inline-block; + width: 100%; + margin: 0; +} + +/* Bibliographic Fields (docinfo) */ +dl.docinfo pre.address { + font: inherit; + margin: 0.5em 0; +} +dl.docinfo > dd.authors > p { margin: 0; } + +/* Option Lists */ +dl.option-list > dt { font-weight: normal; } +span.option { white-space: nowrap; } + +/* Footnotes and Citations */ + +.footnote, .citation { margin: 1em 0; } /* default paragraph skip (Firefox) */ +/* hanging indent */ +.citation { padding-left: 2em; } +.footnote { padding-left: 1.7em; } +.footnote.superscript { padding-left: 1.0em; } +.citation > .label { margin-left: -2em; } +.footnote > .label { margin-left: -1.7em; } +.footnote.superscript > .label { margin-left: -1.0em; } + +.footnote > .label + *, +.citation > .label + * { + display: inline-block; + margin-top: 0; + vertical-align: top; +} +.footnote > .backrefs + *, +.citation > .backrefs + * { + margin-top: 0; +} +.footnote > .label + p, .footnote > .backrefs + p, +.citation > .label + p, .citation > .backrefs + p { + display: inline; + vertical-align: inherit; +} + +.backrefs { user-select: none; } +.backrefs > a { font-style: italic; } + +/* superscript footnotes */ +a[role="doc-noteref"].superscript, +.footnote.superscript > .label, +.footnote.superscript > .backrefs { + vertical-align: super; + font-size: smaller; + line-height: 1; +} +a[role="doc-noteref"].superscript > .fn-bracket, +.footnote.superscript > .label > .fn-bracket { + /* hide brackets in display but leave for copy/paste */ + display: inline-block; + width: 0; + overflow: hidden; +} +[role="doc-noteref"].superscript + [role="doc-noteref"].superscript { + padding-left: 0.15em; /* separate consecutive footnote references */ + /* TODO: unfortunately, "+" also selects with text between the references. */ +} + +/* Alignment */ +.align-left { + text-align: left; + margin-right: auto; +} +.align-center { + text-align: center; + margin-left: auto; + margin-right: auto; +} +.align-right { + text-align: right; + margin-left: auto; +} +.align-top { vertical-align: top; } +.align-middle { vertical-align: middle; } +.align-bottom { vertical-align: bottom; } + +/* reset inner alignment in figures and tables */ +figure.align-left, figure.align-right, +table.align-left, table.align-center, table.align-right { + text-align: inherit; +} + +/* Text Blocks */ +.topic { margin: 1em 2em; } +.sidebar, +.admonition, +.system-message { + margin: 1em 2em; + border: thin solid; + padding: 0.5em 1em; +} +div.line-block { display: block; } +div.line-block div.line-block, pre { margin-left: 2em; } + +/* Code line numbers: dropped when copying text from the page */ +pre.code .ln { display: none; } +pre.code code:before { + content: attr(data-lineno); /* …, none) fallback not supported by any browser */ + color: gray; +} + +/* Tables */ +table { + border-collapse: collapse; +} +td, th { + border: thin solid silver; + padding: 0 1ex; +} +.borderless td, .borderless th { + border: 0; + padding: 0; + padding-right: 0.5em /* separate table cells */ +} + +table > caption { + text-align: left; + margin-top: 0.2em; + margin-bottom: 0.2em; +} +table.captionbelow { + caption-side: bottom; +} + +/* Document Header and Footer */ +header { border-bottom: 1px solid black; } +footer { border-top: 1px solid black; } + +/* Images are block-level by default in Docutils */ +/* New HTML5 block elements: set display for older browsers */ +img, header, footer, main, aside, nav, section, figure, video, details { + display: block; +} +/* inline images */ +p img, p video, figure img, figure video { + display: inline; +} diff --git a/assets/css/html5_polyglot/plain.css b/assets/css/html5_polyglot/plain.css new file mode 100644 index 0000000..70f1641 --- /dev/null +++ b/assets/css/html5_polyglot/plain.css @@ -0,0 +1,312 @@ +/* CSS31_ style sheet for the output of Docutils HTML writers. */ +/* Rules for easy reading and pre-defined style variants. */ +/* */ +/* :Author: Günter Milde, based on html4css1.css by David Goodger */ +/* :Id: $Id: plain.css 9081 2022-06-19 20:23:12Z milde $ */ +/* :Copyright: © 2015 Günter Milde. */ +/* :License: Released under the terms of the `2-Clause BSD license`_, */ +/* in short: */ +/* */ +/* Copying and distribution of this file, with or without modification, */ +/* are permitted in any medium without royalty provided the copyright */ +/* notice and this notice are preserved. */ +/* */ +/* This file is offered as-is, without any warranty. */ +/* */ +/* .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause */ +/* .. _CSS3: https://www.w3.org/Style/CSS/ */ + + +/* Document Structure */ +/* ****************** */ + +/* "page layout" */ +body { + margin: 0; + background-color: #dbdbdb; + --field-indent: 9em; /* default indent of fields in field lists */ +} +main, footer, header { + line-height:1.6; + /* avoid long lines --> better reading */ + /* optimum is 45…75 characters/line */ + /* OTOH: lines should not be too short because of missing hyphenation, */ + max-width: 50rem; + padding: 1px 2%; /* 1px on top avoids grey bar above title (mozilla) */ + margin: auto; +} +main { + counter-reset: table figure; + background-color: white; +} +footer, header { + font-size: smaller; + padding: 0.5em 2%; + border: none; +} + +/* Table of Contents */ +ul.auto-toc > li > p { + padding-left: 1em; + text-indent: -1em; +} +nav.contents ul { + padding-left: 1em; +} +main > nav.contents ul ul ul ul:not(.auto-toc) { + list-style-type: '\2B29\ '; +} +main > nav.contents ul ul ul ul ul:not(.auto-toc) { + list-style-type: '\2B1D\ '; +} + +/* Transitions */ +hr.docutils { + width: 80%; + margin-top: 1em; + margin-bottom: 1em; + clear: both; +} + +/* Paragraphs */ + +/* vertical space (parskip) */ +p, ol, ul, dl, li, +div.line-block, +.footnote, .citation, +div > math, +table { + margin-top: 0.5em; + margin-bottom: 0.5em; +} + +h1, h2, h3, h4, h5, h6, +dd, details > p:last-child { + margin-bottom: 0.5em; +} + +/* Lists */ +/* ===== */ + +/* Definition Lists */ +/* Indent lists nested in definition lists */ +dd > ul:only-child, dd > ol:only-child { padding-left: 1em; } + +/* Description Lists */ +/* styled like in most dictionaries, encyclopedias etc. */ +dl.description { + display: flow-root; +} +dl.description > dt { + font-weight: bold; + clear: left; + float: left; + margin: 0; + padding: 0; + padding-right: 0.3em; +} +dl.description > dd:after { + display: table; + content: ""; + clear: left; /* clearfix for empty descriptions */ +} + +/* Field Lists */ + +dl.field-list > dd, +dl.docinfo > dd { + margin-left: var(--field-indent); /* adapted in media queries or HTML */ +} + +/* example for custom field-name width */ +dl.field-list.narrow > dd { + --field-indent: 5em; +} +/* run-in: start field-body on same line after long field names */ +dl.field-list.run-in > dd p { + display: block; +} + +/* Bibliographic Fields */ + +/* generally, bibliographic fields use dl.docinfo */ +/* but dedication and abstract are placed into divs */ +div.abstract p.topic-title { + text-align: center; +} +div.dedication { + margin: 2em 5em; + text-align: center; + font-style: italic; +} +div.dedication p.topic-title { + font-style: normal; +} + +/* disclosures */ +details { padding-left: 1em; } +summary { margin-left: -1em; } + +/* Text Blocks */ +/* =========== */ + +/* Literal Blocks */ +pre.literal-block, pre.doctest-block, +pre.math, pre.code { + font-family: monospace; +} + +/* Block Quotes and Topics */ +bockquote { margin: 1em 2em; } +blockquote p.attribution, +.topic p.attribution { + text-align: right; + margin-left: 20%; +} + +/* Tables */ +/* ====== */ + +/* th { vertical-align: bottom; } */ + +table tr { text-align: left; } + +/* "booktabs" style (no vertical lines) */ +table.booktabs { + border: 0; + border-top: 2px solid; + border-bottom: 2px solid; + border-collapse: collapse; +} +table.booktabs * { + border: 0; +} +table.booktabs th { + border-bottom: thin solid; +} + +/* numbered tables (counter defined in div.document) */ +table.numbered > caption:before { + counter-increment: table; + content: "Table " counter(table) ": "; + font-weight: bold; +} + +/* Explicit Markup Blocks */ +/* ====================== */ + +/* Footnotes and Citations */ +/* ----------------------- */ + +/* line on the left */ +.footnote-list { + border-left: solid thin; + padding-left: 0.25em; +} + +/* Directives */ +/* ---------- */ + +/* Body Elements */ +/* ~~~~~~~~~~~~~ */ + +/* Images and Figures */ + +/* let content flow to the side of aligned images and figures */ +figure.align-left, +img.align-left, +video.align-left, +object.align-left { + clear: left; + float: left; + margin-right: 1em; +} +figure.align-right, +img.align-right, +video.align-right, +object.align-right { + clear: right; + float: right; + margin-left: 1em; +} +/* Stop floating sidebars, images and figures */ +h1, h2, h3, h4, footer, header { clear: both; } + +/* Numbered figures */ +figure.numbered > figcaption > p:before { + counter-increment: figure; + content: "Figure " counter(figure) ": "; + font-weight: bold; +} + +/* Admonitions and System Messages */ +.caution p.admonition-title, +.attention p.admonition-title, +.danger p.admonition-title, +.error p.admonition-title, +.warning p.admonition-title, +div.error { + color: red; +} + +/* Sidebar */ +/* Move right. In a layout with fixed margins, */ +/* it can be moved into the margin. */ +aside.sidebar { + width: 30%; + max-width: 26em; + float: right; + clear: right; + margin-left: 1em; + margin-right: -1%; + background-color: #fffffa; +} + + +/* Code */ +pre.code { padding: 0.7ex } +pre.code, code { background-color: #eeeeee } +/* basic highlighting: for a complete scheme, see */ +/* https://docutils.sourceforge.io/sandbox/stylesheets/ */ +pre.code .comment, code .comment { color: #5C6576 } +pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } +pre.code .literal.string, code .literal.string { color: #0C5404 } +pre.code .name.builtin, code .name.builtin { color: #352B84 } +pre.code .deleted, code .deleted { background-color: #DEB0A1} +pre.code .inserted, code .inserted { background-color: #A3D289} + +/* Math */ +/* for math-output=MathML (for math-output=HTML, see math.css) */ +math .boldsymbol { + font-weight: bold; +} +mstyle.mathscr, mi.mathscr { + font-family: STIX; +} + +/* Epigraph */ +/* Highlights */ +/* Pull-Quote */ +/* Compound Paragraph */ +/* Container */ + +/* Inline Markup */ +/* ============= */ + +sup, sub { line-height: 0.8; } /* do not add leading for lines with sup/sub */ + +/* Inline Literals */ +/* possible values: normal, nowrap, pre, pre-wrap, pre-line */ +/* span.docutils.literal { white-space: pre-wrap; } */ + +/* Hyperlink References */ +a { text-decoration: none; } + +/* External Targets */ +/* span.target.external */ +/* Internal Targets */ +/* span.target.internal */ +/* Footnote References */ +/* a[role="doc-noteref"] */ +/* Citation References */ +/* a.citation-reference */ diff --git a/assets/css/html5_polyglot/responsive.css b/assets/css/html5_polyglot/responsive.css new file mode 100644 index 0000000..86062d4 --- /dev/null +++ b/assets/css/html5_polyglot/responsive.css @@ -0,0 +1,495 @@ +/* CSS3_ style sheet for the output of Docutils HTML5 writer. */ +/* Generic responsive design for all screen sizes. */ +/* */ +/* :Author: Günter Milde */ +/* */ +/* :Id: $Id: responsive.css 9079 2022-06-19 14:00:56Z milde $ */ +/* :Copyright: © 2021 Günter Milde. */ +/* :License: Released under the terms of the `2-Clause BSD license`_, */ +/* in short: */ +/* */ +/* Copying and distribution of this file, with or without modification, */ +/* are permitted in any medium without royalty provided the copyright */ +/* notice and this notice are preserved. */ +/* */ +/* This file is offered as-is, without any warranty. */ +/* */ +/* .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause */ +/* .. _CSS3: https://www.w3.org/Style/CSS/ */ + +/* Note: */ +/* This style sheet is provisional: */ +/* the API is not settled and may change with any minor Docutils version. */ + + + +/* General Settings */ +/* ================ */ + + +* { box-sizing: border-box; } + +body { + background-color: #fafaf6; + margin: auto; + --field-indent: 6.6em; /* indent of fields in field lists */ + --sidebar-margin-right: 0; /* adapted in media queries below */ +} +main { + counter-reset: figure table; +} +body > * { + background-color: white; + line-height: 1.6; + padding: 0.5rem calc(29% - 7.2rem); /* go from 5% to 15% (8.15em/54em) */ + margin: auto; + max-width: 100rem; +} +sup, sub { /* avoid additional inter-line space for lines with sup/sub */ + line-height: 1; +} + +/* Vertical Space (Parskip) */ +p, ol, ul, dl, li, +div.line-block, +.topic, +.footnote, .citation, +div > math, +table { + margin-top: 0.5em; + margin-bottom: 0.5em; +} +h1, h2, h3, h4, h5, h6, +dl > dd, details > p:last-child { + margin-bottom: 0.5em; +} + +/* Indented Blocks */ +blockquote, figure, .topic { + margin: 1em 2%; + padding-left: 1em; +} +div.line-block div.line-block, +pre, dd, dl.option-list { + margin-left: calc(2% + 1em); +} + +/* Object styling */ +/* ============== */ + +footer, header { + font-size: small; +} + +/* Frontmatter */ +div.dedication { + padding: 0; + margin: 1.4em 0; + font-style: italic; + font-size: large; +} +.dedication p.topic-title { + display: none; +} + +blockquote p.attribution, +.topic p.attribution { + text-align: right; +} + +/* Table of Contents */ +nav.contents ul { + padding-left: 1em; +} +ul.auto-toc > li > p { /* hanging indent */ + padding-left: 1em; + text-indent: -1em; +} +main > nav.contents ul:not(.auto-toc) { + list-style-type: square; +} +main > nav.contents ul ul:not(.auto-toc) { + list-style-type: disc; +} +main > nav.contents ul ul ul:not(.auto-toc) { + list-style-type: '\2B29\ '; +} +main > nav.contents ul ul ul ul:not(.auto-toc) { + list-style-type: '\2B1D\ '; +} +main > nav.contents ul ul ul ul ul:not(.auto-toc) { + list-style-type: '\2B2A\ '; +} +nav.contents ul > li::marker { + color: grey; +} + +/* Transitions */ +hr { + margin: 1em 10%; +} + +/* Lists */ + +ul, ol { + padding-left: 1.1em; /* indent by bullet width (Firefox, DejaVu fonts) */ +} +dl.field-list > dd, +dl.docinfo > dd { + margin-left: var(--field-indent); /* adapted in media queries or HTML */ +} +dl.option-list > dd { + margin-left: 20%; +} +/* run-in: start field-body on same line after long field names */ +dl.field-list.run-in > dd p { + display: block; +} +/* "description style" like in most dictionaries, encyclopedias etc. */ +dl.description { + display: flow-root; +} +dl.description > dt { + clear: left; + float: left; + margin: 0; + padding: 0; + padding-right: 0.3em; + font-weight: bold; +} +dl.description > dd:after { + display: table; + content: ""; + clear: left; /* clearfix for empty descriptions */ +} +/* start lists nested in description/field lists on new line */ +dd > dl:first-child, +dd > ul:first-child, +dd > ol:first-child { + clear: left; +} + +/* disclosures */ +details { padding-left: 1em; } +summary { margin-left: -1em; } + +/* Footnotes and Citations */ +.footnote { + font-size: small; +} + +/* Images, Figures, and Tables */ +img { + display: block; +} +p > img, p > a > img, +figure > img, figure > a > img { + display: inline; +} + +figcaption, +table > caption { + /* font-size: small; */ + font-style: italic; +} +figcaption > .legend { + font-size: small; + font-style: initial; +} +figure.numbered > figcaption > p:before { + counter-increment: figure; + content: "Figure " counter(figure) ": "; + font-weight: bold; + font-style: initial; +} + +table tr { + text-align: left; + vertical-align: baseline; +} +table.booktabs { /* "booktabs" style (no vertical lines) */ + border-top: 2px solid; + border-bottom: 2px solid; +} +table.booktabs * { + border: 0; +} +table.booktabs th { + border-bottom: thin solid; +} +table.numbered > caption:before { + counter-increment: table; + content: "Table " counter(table) ": "; + font-weight: bold; + font-style: initial; +} + +/* Admonitions and System Messages */ +.admonition, +div.system-message { + border: thin solid silver; + margin: 1em 2%; + padding: 0.5em 1em; +} +.caution p.admonition-title, +.attention p.admonition-title, +.danger p.admonition-title, +.warning p.admonition-title, +div.error { + color: maroon; +} +div.system-message > p > span.literal { + overflow-wrap: break-word; +} + +/* Literal and Code */ +pre.literal-block, pre.doctest{ + padding: 0.2em; + overflow-x: auto; +} +.literal-block, .doctest, span.literal { + background-color: #f6f9f8; +} +.system-message span.literal { + background-color: inherit; +} + +/* basic highlighting: for a complete scheme, see */ +/* https://docutils.sourceforge.io/sandbox/stylesheets/ */ +pre.code .comment, code .comment { color: #5C6576 } +pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } +pre.code .literal.string, code .literal.string { color: #0C5404 } +pre.code .name.builtin, code .name.builtin { color: #352B84 } +pre.code .deleted, code .deleted { background-color: #DEB0A1} +pre.code .inserted, code .inserted { background-color: #A3D289} + +/* Hyperlink References */ +a { + text-decoration: none; /* for chromium */ + /* Wrap links at any place, if this is the only way to prevent overflow */ + overflow-wrap: break-word; +} +.contents a, a.toc-backref, a.citation-reference { + overflow-wrap: inherit; +} +/* Undecorated Links (see also minimal.css) */ +/* a.citation-reference, */ +.citation a.fn-backref { + color: inherit; +} +a:hover { + text-decoration: underline; +} +*:hover > a.toc-backref:after { + content: " \2191"; /* ↑ UPWARDS ARROW */ + color: grey; +} +*:hover > a.self-link:after { + content: "\1F517"; /* LINK SYMBOL */ + color: grey; + font-size: smaller; + margin-left: 0.2em; +} +/* highlight the target of the current URL */ +section:target > h2, section:target > h3, section:target > h4, +section:target > h5, section:target > h6, +.contents :target, +.contents:target > .topic-title, +[role="doc-biblioentry"]:target > .label, +[role="doc-biblioref"]:target, +[role="note"]:target, /* Docutils 0.18 ... 0.19 */ +[role="doc-footnote"]:target, /* Docutils >= 0.20 */ +[role="doc-noteref"]:target { + background-color: #d2e6ec; +} + +/* Block Alignment */ +/* Let content flow to the side of aligned images and figures */ + +/* no floats around this elements */ +footer, header, hr, +h1, h2, h3 { + clear: both; +} + +img.align-left, +video.align-left, +figure.align-left, +table.align-left { + margin-left: 0; + padding-left: 0; + margin-right: 0.5em; + clear: left; + float: left; +} +img.align-right, +video.align-right, +figure.align-right, +table.align-right { + margin-left: 0.5em; + margin-right: 0; + clear: right; + float: right; +} + +/* Margin Elements */ +/* see below for screen size dependent rules */ +.sidebar, +.marginal, +.admonition.marginal { + max-width: 40%; + border: none; + background-color: #efefea; + margin: 0.5em var(--sidebar-margin-right) 0.5em 1em; + padding: 0.5em; + padding-left: 0.7em; + clear: right; + float: right; + font-size: small; +} +.sidebar { + width: 40%; +} + +/* Math */ +/* for math-output=MathML (for math-output=HTML, see math.css) */ +math .boldsymbol { + font-weight: bold; +} +mstyle.mathscr, mi.mathscr { + font-family: STIX; +} + +/* Adaptive page layout */ +/* ==================== */ + +@media (max-width: 30em) { + /* Smaller margins and no floating elements for small screens */ + /* (main text less than 40 characters/line) */ + body > * { + padding: 0.5rem 5%; + line-height: 1.4 + } + .sidebar, + .marginal, + .admonition.marginal { + width: auto; + max-width: 100%; + float: none; + } + dl.option-list, + pre { + margin-left: 0; + } + body { + --field-indent: 4em; + } + dl.field-list.narrow, dl.docinfo, dl.option-list { + --field-indent: 2.4em; + } + pre, pre * { + font-size: 0.9em; + /* overflow: auto; */ + } +} + +@media (min-width: 54em) { + /* Move ToC to the left */ + /* Main text width before: 70% ≙ 35em ≙ 75…95 chrs (Dejavu/Times) */ + /* after: ≳ 30em ≙ 54…70 chrs (Dejavu/Times) */ + body.with-toc { + padding-left: 8%; + } + body.with-toc > * { + margin-left: 0; + padding-left: 22rem; /* fallback for webkit */ + padding-left: min(22%, 22rem); + padding-right: 7%; + } + main > nav.contents { /* global ToC */ + position: fixed; + top: 0; + left: 0; + width: min(25%, 25em); + height: 100vh; + margin: 0; + background-color: #fafaf6; + padding: 1em 2% 0 2%; + overflow: auto; + } + main > nav.contents > * { + padding-left: 0; + line-height: 1.4; + } + main > nav.contents a { + color: inherit; + } +} + +@media (min-width: 70em) { + body { + --field-indent: 9em; + } +} + +@media (min-width: 77em) { + /* Move marginalia to 6rem from right border */ + /* .sidebar, */ + /* .marginal, */ + /* .admonition.marginal { */ + /* margin-right: calc(6rem - 15%); */ + /* } */ + /* BUG: margin is calculated for break point width */ + /* workaround: variable + many breakpoints */ + body > * { + padding-left: 18%; + padding-right: 28%; /* fallback for webkit */ + padding-right: min(28%, 28rem); + --sidebar-margin-right: -20rem; + } + /* limit main text to ~ 50em ≙ 85…100 characters DejaVu rsp. …120 Times */ + body.with-toc > * { + padding-left: min(22%, 22rem); + padding-right: calc(78% - 50rem); /* fallback for webkit */ + padding-right: min(78% - 50rem, 28rem); + --sidebar-margin-right: 0; + } +} + +@media (min-width: 85em) { + body.with-toc > * { + --sidebar-margin-right: -9rem; + } +} + +@media (min-width: 90em) { + /* move marginalia into the margin */ + body > * { + padding-left: min(22%, 22rem); + --sidebar-margin-right: -23rem; + } + body.with-toc > * { + --sidebar-margin-right: -14rem; + } +} + +@media (min-width: 99em) { + /* move marginalia out of main text area */ + body.with-toc > * { + --sidebar-margin-right: -20rem; + } + body > *, body.with-toc > * { /* for webkit */ + padding-left: 22rem; + padding-right: 28rem; + } + .admonition.marginal, + .marginal { + width: 40%; /* make marginal figures, ... "full width" */ + } +} + +@media (min-width: 104em) { + body.with-toc > * { + --sidebar-margin-right: -23rem; + } +} diff --git a/assets/css/html5_polyglot/tuftig.css b/assets/css/html5_polyglot/tuftig.css new file mode 100644 index 0000000..ac50be3 --- /dev/null +++ b/assets/css/html5_polyglot/tuftig.css @@ -0,0 +1,568 @@ +/* CSS3_ style sheet for the output of Docutils HTML writers. */ +/* Rules inspired by Edward Tufte's layout design. */ +/* */ +/* :Author: Günter Milde */ +/* based on tufte.css_ by Dave Liepmann */ +/* and the tufte-latex_ package. */ +/* */ +/* :Id: $Id: tuftig.css 9081 2022-06-19 20:23:12Z milde $ */ +/* :Copyright: © 2020 Günter Milde. */ +/* :License: Released under the terms of the `2-Clause BSD license`_, */ +/* in short: */ +/* */ +/* Copying and distribution of this file, with or without modification, */ +/* are permitted in any medium without royalty provided the copyright */ +/* notice and this notice are preserved. */ +/* */ +/* This file is offered as-is, without any warranty. */ +/* */ +/* .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause */ +/* .. _CSS3: https://www.w3.org/Style/CSS/ */ +/* .. _tufte.css: https://edwardtufte.github.io/tufte-css/ */ +/* .. _tufte-latex_: https://www.ctan.org/pkg/tufte-latex */ + + +/* General Settings */ +/* ================ */ + +body { + font-family: et-book, Palatino, Georgia, serif; + background-color: #fafaf6; + font-size: 1.2em; + line-height: 1.4; + margin: auto; +} +main { + counter-reset: figure table; +} +main, header, footer { + padding: 0.5em 5%; + background-color: #fefef8; + max-width: 100rem; +} + +/* Spacing */ + +/* vertical space (parskip) */ +p, ol, ul, dl, li, +h1, h2, h3, h4, h5, h6, +div.line-block, +.topic, +.footnote, .citation, +table { + margin-top: 0.5em; + margin-bottom: 0.5em; +} +dl > dd { + margin-bottom: 0.5em; +} +/* exceptions */ +p:first-child { + margin-top: 0; +} +p:last-child { + margin-bottom: 0; +} + +/* Indented Blocks */ +blockquote, +.topic { + /* background-color: Honeydew; */ + margin: 0.5em 2%; + padding-left: 1em; +} +div.line-block div.line-block, +dl.option-list, +figure > img, +pre.literal-block, pre.math, +pre.doctest-block, pre.code { + /* background-color: LightCyan; */ + margin-left: calc(2% + 1em); +} + +/* Object styling */ +/* ============== */ + +footer, header { + font-size: smaller; +} + +/* Titles and Headings */ + +h2, h3, h4, p.subtitle, p.section-subtitle, +p.topic-title, p.sidebar-title, p.sidebar-subtitle { + font-weight: normal; + font-style: italic; + text-align: left; +} +.sectnum { + font-style: normal; +} + +h1.title { + text-align: left; + margin-top: 2.4em; + margin-bottom: 2em; + font-size: 2.4em; +} +h1 + p.subtitle { + margin-top: -2em; + margin-bottom: 2em; + font-size: 2.0em; +} +section { + margin-top: 2em; +} +h2, .contents > p.topic-title { + font-size: 2.2em; +} +h2 + p.section-subtitle { + font-size: 1.6em; +} +h3 { + font-size: 1.2em; +} +h3 + p.section-subtitle { + font-size: 1.1em; +} +h4 { + font-size: 1em; +} +p.section-subtitle { + font-size: 1em; +} + +/* Dedication and Abstract */ +div.dedication { + padding: 0; + margin-left: 0; + font-style: italic; + font-size: 1.2em; +} +/* div.abstract p.topic-title, */ +div.dedication p.topic-title { + display: none; +} + +/* Attribution */ +blockquote p.attribution, +.topic p.attribution { + text-align: right; +} + +/* Table of Contents */ +nav.contents { + padding: 0; + font-style: italic; +} +ul.auto-toc > li > p { + padding-left: 1em; + text-indent: -1em; +} +nav.contents ul { + padding-left: 1em; +} + + +/* Transitions */ +hr { + border: 0; + border-top: 1px solid #ccc; + margin: 1em 10%; +} + +/* Lists */ +/* Less indent per level */ +ul, ol { + padding-left: 1.1em; +} +dd { + margin-left: 1.5em; +} +dd > dl:first-child, +dd > ul:first-child, +dd > ol:first-child { + /* lists nested in definition/description/field lists */ + clear: left; +} + +dl.field-list > dd, +dl.docinfo > dd, +dl.option-list > dd { + margin-left: 4em; +} +/* example for custom field-name width */ +dl.field-list.narrow > dd { + margin-left: 3em; +} +/* run-in: start field-body on same line after long field names */ +dl.field-list.run-in > dd p { + display: block; +} +/* italic field name */ +dl.description > dt, +dl.field-list > dt, +dl.docinfo > dt { + font-weight: normal; + font-style: italic; +} + +/* "description style" like in most dictionaries, encyclopedias etc. */ +dl.description > dt { + clear: left; + float: left; + margin: 0; + padding: 0; + padding-right: 0.5em; +} +dl.description > dd:after { + display: block; + content: ""; + clear: both; +} + +/* Citation list (style as description list) */ +.citation-list, +.footnote-list { + display: contents; +} +.citation { + padding-left: 1.5em; +} +.citation .label { + margin-left: -1.5em; +} + +/* Images and Figures */ +img { + display: block; +} +p > img, p > a > img, +figure > img, figure > a > img { + display: inline; +} +/* Caption to the left (if there is space) or below: */ +figure { + display: flex; + flex-wrap: wrap; + align-items: flex-start; + margin: 0.5em 2%; + padding-left: 1em; +} +figure > img, +figure.fullwidth > img { + margin: 0 0.5em 0.5em 0; + padding: 0; +} +figcaption { + font-size: 0.8em; +} +.fullwidth > figcaption { + font-size: inherit; +} +figure.numbered > figcaption > p:before { + counter-increment: figure; + content: "Figure " counter(figure) ": "; +} + +/* Tables */ +table tr { + text-align: left; +} +/* th { vertical-align: bottom; } */ +/* "booktabs" style (no vertical lines) */ +table.booktabs { + border-top: 2px solid; + border-bottom: 2px solid; +} +table.booktabs * { + border: 0; +} +table.booktabs th { + border-bottom: thin solid; +} +table.numbered > caption:before { + counter-increment: table; + content: "Table " counter(table) ": "; +} + +/* Admonitions and System Messages */ +.admonition, .system-message { + border-style: solid; + border-color: silver; + border-width: thin; + margin: 1em 0; + padding: 0.5em; +} +.caution p.admonition-title, +.attention p.admonition-title, +.danger p.admonition-title, +.warning p.admonition-title, +div.error { + color: maroon; +} + +/* Literal and Code */ +pre.literal-block, pre.doctest-block, +pre.math, pre.code { + /* font-family: Consolas, "Liberation Mono", Menlo, monospace; */ + /* font-size: 0.9em; */ + overflow: auto; +} +/* basic highlighting: for a complete scheme, see */ +/* https://docutils.sourceforge.io/sandbox/stylesheets/ */ +pre.code .comment, code .comment { color: #5C6576 } +pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } +pre.code .literal.string, code .literal.string { color: #0C5404 } +pre.code .name.builtin, code .name.builtin { color: #352B84 } +pre.code .deleted, code .deleted { background-color: #DEB0A1} +pre.code .inserted, code .inserted { background-color: #A3D289} + +.sans { + font-family: "Gill Sans", "Gill Sans MT", Calibri, "Lucida Sans", "Noto Sans", sans-serif; + letter-spacing: .02em; +} + +/* Hyperlink References */ +/* underline that clears descenders */ +a { + color: inherit; +} +a:link { + text-decoration: underline; + /* text-decoration-skip-ink: auto; nonstandard selector */ +} +/* undecorated links */ +.contents a:link, a.toc-backref:link, a.image-reference:link, +a[role="doc-noteref"]:link, a[role="doc-backlink"]:link, .backrefs a:link, +a.citation-reference:link, +a[href^="#system-message"] { + text-decoration: none; +} +a:link:hover { + text-decoration: underline; +} + +/* Block Alignment */ +/* Let content flow to the side of aligned images and figures */ +/* (does not work if the image/figure is a grid element). */ + +/* no floats around this elements */ +footer, header, +hr.docutils, +h1, h2, h3, .contents > p.topic-title, +.fullwidth { + clear: both; +} + +img.align-left, +figure.align-left, +table.align-left { + margin-left: 0; + padding-left: 0; + padding-right: 0.5em; + clear: left; + float: left; +} +figure.align-left > img { + margin-left: 0; + padding-left: 0; +} + + +img.align-right { + padding-left: 0.5em; + clear: right; + float: right; +} +figure.align-right { + clear: right; + float: right; +} +figure.align-right > img { + justify-self: right; + padding: 0; +} +table.align-right { + margin-right: 2.5%; +} + +figure.align-center { + align-content: center; + justify-content: center; +} +figure.align-center > img { + padding-left: 0; + justify-self: center; +} + +/* Margin Elements */ +/* see below for screen size dependent rules */ +aside.sidebar, +.marginal, +.admonition.marginal, +.topic.marginal { + background-color: #efefea; + box-sizing: border-box; + margin-left: 2%; + margin-right: 0; + padding: 0.5em; + font-size: 0.8em; +} +aside.sidebar { + background-color: inherit; +} +figure.marginal > figcaption { + font-size: 1em; +} +.footnote { + font-size: smaller; + overflow: auto; +} + +/* Adaptive page layout */ + +/* no floating for very small Screens */ +/* (main text up to ca. 40 characters/line) */ +@media (min-width: 35em) { + main, header, footer { + padding: 0.5em calc(15% - 3rem); + line-height: 1.6 + } + aside.sidebar, + .marginal, + .admonition.marginal, + .topic.marginal { + max-width: 45%; + float: right; + clear: right; + } + dl.field-list > dd, + dl.docinfo > dd { + margin-left: 6em; + } + dl.option-list > dd { + margin-left: 6em; + } +} + +/* 2 column layout with wide margin */ +@media (min-width: 65em) { + /* use the same grid for main, all sections, and figures */ + main, section { + display: grid; + grid-template-columns: [content] minmax(0, 6fr) + [margin] 3fr [end]; + grid-column-gap: calc(3em + 1%); + } + main > section, section > section { + grid-column: 1 / end; + } + main, header, footer { + padding-right: 5%; /* less padding right of margin-column */ + } + section > figure { + display: contents; /* to place caption in the margin */ + } + /* Main text elements */ + main > *, section > *, + figure > img, + .footnote.align-left, /* override the placement in the margin */ + .citation.align-left { + grid-column: content; + } + .citation.align-left { + font-size: 1em; + padding-left: 1.5em; + } + .citation.align-left .label { + margin-left: -1.5em; + } + figure > img { /* indent */ + margin: 0.5em 2%; + padding-left: 1em; + } + + /* Margin Elements */ + /* Sidebar, Footnotes, Citations, Captions */ + aside.sidebar, + .citation, + .footnote, + figcaption, + /* table > caption, does not work :(*/ + .marginal, + .admonition.marginal, + .topic.marginal { + /* color: red; */ + grid-column: margin; + width: auto; + max-width: 55em; + margin: 0.5em 0; + border: none; + padding: 0; + font-size: 0.8em; + text-align: initial; /* overwrite align-* */ + background-color: inherit; + } + .admonition.marginal { + padding: 0.5em; + } + figure.marginal { + display: block; + margin: 0.5em 0; + } + .citation, + .footnote { + padding-left: 0; + } + .citation .label, + .footnote .label { + margin-left: 0; + } + + /* Fullwidth Elements */ + h1.title, p.subtitle, + dl.docinfo, + div.abstract, + div.dedication, + nav.contents, + aside.system-message, + pre, + .fullwidth, + .fullwidth img, + .fullwidth figcaption { + /* background-color: Linen; */ + grid-column: content / end; + margin-right: calc(10% - 3rem); + max-width: 55em; + } +} + +/* 3 column layout */ + +@media (min-width: 100em) { + main, header, footer { + padding-left: 30%; + } + main > nav.contents { + position: fixed; + top: 0; + left: 0; + box-sizing: border-box; + width: 25%; + height: 100vh; + margin: 0; + background-color: #fafaf6; + padding: 5.5em 2%; + overflow: auto; + } + main > nav.contents > * { + padding-left: 0; + } +} + +/* wrap URLs */ +/* a:link { */ +/* white-space: normal; */ +/* hyphens: none; */ +/* } */ diff --git a/assets/css/normalize-8.0.1.css b/assets/css/normalize-8.0.1.css new file mode 100644 index 0000000..192eb9c --- /dev/null +++ b/assets/css/normalize-8.0.1.css @@ -0,0 +1,349 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} diff --git a/assets/css/old.css b/assets/css/old.css new file mode 100644 index 0000000..756bacc --- /dev/null +++ b/assets/css/old.css @@ -0,0 +1,73 @@ +/* С Bludit версии Nixhacks. + * + * Надо позаимствовать отсюда переключение тем день/ночь */ + +:root { + --b: #000; + --g: #888; + --w: #fff +} + +body { + font: 400 18px/1.6 sans-serif; + padding: 2rem; + background: var(--w); + color: var(--b) +} + +.container { max-width: 70ch } +.mbh { margin: 0 0 .5rem } +.mb1 { margin: 0 0 1rem } +.mb2 { margin: 0 0 2rem } +.g, pre { color: var(--g); overflow: auto; } + +img { width: 100%; image-rendering: -moz-crisp-edges; image-rendering: pixelated } +a, a:visited { color: var(--b); text-decoration-color: var(--g) } +a:hover { text-decoration-color: var(--b) } +pre, ul, ol, blockquote { margin: 0; padding: 0 1rem } +/*pre { white-space: pre-wrap }*/ + +@media (prefers-color-scheme: dark) { + :root { + --b: #fff; + --g: #888; + --w: #000 + } +} + +.links-content { + margin: 18px 0 28px 16px; + display: inline-block; +} + +.links-content ul { + padding: 0; +} + +.links-content ul li { + margin: 0; + padding: 0; + padding-right: 8px; + display: inline-block; + list-style: none; +} + +.links-content ul li::before { + content: '|'; + position: relative; + left: -6px; +} + +.links-content ul li:first-child::before { + content: none; +} + +.links-label {display: inline-block;} + +.separator::after { + content: '- - -'; +} + +.copyright { + margin-top: 28px; +} diff --git a/assets/css/pygments/default.css b/assets/css/pygments/default.css new file mode 100644 index 0000000..4bf0582 --- /dev/null +++ b/assets/css/pygments/default.css @@ -0,0 +1,74 @@ +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: #f8f8f8; } +.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #008000; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #9C6500 } /* Comment.Preproc */ +.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #E40000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #008400 } /* Generic.Inserted */ +.highlight .go { color: #717171 } /* Generic.Output */ +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #008000 } /* Keyword.Pseudo */ +.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #B00040 } /* Keyword.Type */ +.highlight .m { color: #666666 } /* Literal.Number */ +.highlight .s { color: #BA2121 } /* Literal.String */ +.highlight .na { color: #687822 } /* Name.Attribute */ +.highlight .nb { color: #008000 } /* Name.Builtin */ +.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +.highlight .no { color: #880000 } /* Name.Constant */ +.highlight .nd { color: #AA22FF } /* Name.Decorator */ +.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0000FF } /* Name.Function */ +.highlight .nl { color: #767600 } /* Name.Label */ +.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #19177C } /* Name.Variable */ +.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #666666 } /* Literal.Number.Bin */ +.highlight .mf { color: #666666 } /* Literal.Number.Float */ +.highlight .mh { color: #666666 } /* Literal.Number.Hex */ +.highlight .mi { color: #666666 } /* Literal.Number.Integer */ +.highlight .mo { color: #666666 } /* Literal.Number.Oct */ +.highlight .sa { color: #BA2121 } /* Literal.String.Affix */ +.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ +.highlight .sc { color: #BA2121 } /* Literal.String.Char */ +.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ +.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ +.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ +.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ +.highlight .sx { color: #008000 } /* Literal.String.Other */ +.highlight .sr { color: #A45A77 } /* Literal.String.Regex */ +.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ +.highlight .ss { color: #19177C } /* Literal.String.Symbol */ +.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0000FF } /* Name.Function.Magic */ +.highlight .vc { color: #19177C } /* Name.Variable.Class */ +.highlight .vg { color: #19177C } /* Name.Variable.Global */ +.highlight .vi { color: #19177C } /* Name.Variable.Instance */ +.highlight .vm { color: #19177C } /* Name.Variable.Magic */ +.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ diff --git a/assets/css/pygments/monokai.css b/assets/css/pygments/monokai.css new file mode 100644 index 0000000..bced4a6 --- /dev/null +++ b/assets/css/pygments/monokai.css @@ -0,0 +1,83 @@ +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: #49483e } +.highlight { background: #272822; color: #f8f8f2 } +.highlight .c { color: #75715e } /* Comment */ +.highlight .err { color: #960050; background-color: #1e0010 } /* Error */ +.highlight .esc { color: #f8f8f2 } /* Escape */ +.highlight .g { color: #f8f8f2 } /* Generic */ +.highlight .k { color: #66d9ef } /* Keyword */ +.highlight .l { color: #ae81ff } /* Literal */ +.highlight .n { color: #f8f8f2 } /* Name */ +.highlight .o { color: #f92672 } /* Operator */ +.highlight .x { color: #f8f8f2 } /* Other */ +.highlight .p { color: #f8f8f2 } /* Punctuation */ +.highlight .ch { color: #75715e } /* Comment.Hashbang */ +.highlight .cm { color: #75715e } /* Comment.Multiline */ +.highlight .cp { color: #75715e } /* Comment.Preproc */ +.highlight .cpf { color: #75715e } /* Comment.PreprocFile */ +.highlight .c1 { color: #75715e } /* Comment.Single */ +.highlight .cs { color: #75715e } /* Comment.Special */ +.highlight .gd { color: #f92672 } /* Generic.Deleted */ +.highlight .ge { color: #f8f8f2; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #f8f8f2 } /* Generic.Error */ +.highlight .gh { color: #f8f8f2 } /* Generic.Heading */ +.highlight .gi { color: #a6e22e } /* Generic.Inserted */ +.highlight .go { color: #66d9ef } /* Generic.Output */ +.highlight .gp { color: #f92672; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { color: #f8f8f2; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #75715e } /* Generic.Subheading */ +.highlight .gt { color: #f8f8f2 } /* Generic.Traceback */ +.highlight .kc { color: #66d9ef } /* Keyword.Constant */ +.highlight .kd { color: #66d9ef } /* Keyword.Declaration */ +.highlight .kn { color: #f92672 } /* Keyword.Namespace */ +.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */ +.highlight .kr { color: #66d9ef } /* Keyword.Reserved */ +.highlight .kt { color: #66d9ef } /* Keyword.Type */ +.highlight .ld { color: #e6db74 } /* Literal.Date */ +.highlight .m { color: #ae81ff } /* Literal.Number */ +.highlight .s { color: #e6db74 } /* Literal.String */ +.highlight .na { color: #a6e22e } /* Name.Attribute */ +.highlight .nb { color: #f8f8f2 } /* Name.Builtin */ +.highlight .nc { color: #a6e22e } /* Name.Class */ +.highlight .no { color: #66d9ef } /* Name.Constant */ +.highlight .nd { color: #a6e22e } /* Name.Decorator */ +.highlight .ni { color: #f8f8f2 } /* Name.Entity */ +.highlight .ne { color: #a6e22e } /* Name.Exception */ +.highlight .nf { color: #a6e22e } /* Name.Function */ +.highlight .nl { color: #f8f8f2 } /* Name.Label */ +.highlight .nn { color: #f8f8f2 } /* Name.Namespace */ +.highlight .nx { color: #a6e22e } /* Name.Other */ +.highlight .py { color: #f8f8f2 } /* Name.Property */ +.highlight .nt { color: #f92672 } /* Name.Tag */ +.highlight .nv { color: #f8f8f2 } /* Name.Variable */ +.highlight .ow { color: #f92672 } /* Operator.Word */ +.highlight .w { color: #f8f8f2 } /* Text.Whitespace */ +.highlight .mb { color: #ae81ff } /* Literal.Number.Bin */ +.highlight .mf { color: #ae81ff } /* Literal.Number.Float */ +.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */ +.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */ +.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */ +.highlight .sa { color: #e6db74 } /* Literal.String.Affix */ +.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */ +.highlight .sc { color: #e6db74 } /* Literal.String.Char */ +.highlight .dl { color: #e6db74 } /* Literal.String.Delimiter */ +.highlight .sd { color: #e6db74 } /* Literal.String.Doc */ +.highlight .s2 { color: #e6db74 } /* Literal.String.Double */ +.highlight .se { color: #ae81ff } /* Literal.String.Escape */ +.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */ +.highlight .si { color: #e6db74 } /* Literal.String.Interpol */ +.highlight .sx { color: #e6db74 } /* Literal.String.Other */ +.highlight .sr { color: #e6db74 } /* Literal.String.Regex */ +.highlight .s1 { color: #e6db74 } /* Literal.String.Single */ +.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */ +.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #a6e22e } /* Name.Function.Magic */ +.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */ +.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */ +.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */ +.highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */ +.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ diff --git a/assets/css/pygments/native.css b/assets/css/pygments/native.css new file mode 100644 index 0000000..bb3cac4 --- /dev/null +++ b/assets/css/pygments/native.css @@ -0,0 +1,83 @@ +pre { line-height: 125%; } +td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: #aaaaaa; 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: #404040 } +.highlight { background: #202020; color: #d0d0d0 } +.highlight .c { color: #ababab; font-style: italic } /* Comment */ +.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +.highlight .esc { color: #d0d0d0 } /* Escape */ +.highlight .g { color: #d0d0d0 } /* Generic */ +.highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ +.highlight .l { color: #d0d0d0 } /* Literal */ +.highlight .n { color: #d0d0d0 } /* Name */ +.highlight .o { color: #d0d0d0 } /* Operator */ +.highlight .x { color: #d0d0d0 } /* Other */ +.highlight .p { color: #d0d0d0 } /* Punctuation */ +.highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */ +.highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ +.highlight .gd { color: #d22323 } /* Generic.Deleted */ +.highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #d22323 } /* Generic.Error */ +.highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #589819 } /* Generic.Inserted */ +.highlight .go { color: #cccccc } /* Generic.Output */ +.highlight .gp { color: #aaaaaa } /* Generic.Prompt */ +.highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ +.highlight .gt { color: #d22323 } /* Generic.Traceback */ +.highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ +.highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #d0d0d0 } /* Literal.Date */ +.highlight .m { color: #51b2fd } /* Literal.Number */ +.highlight .s { color: #ed9d13 } /* Literal.String */ +.highlight .na { color: #bbbbbb } /* Name.Attribute */ +.highlight .nb { color: #2fbccd } /* Name.Builtin */ +.highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ +.highlight .no { color: #40ffff } /* Name.Constant */ +.highlight .nd { color: #ffa500 } /* Name.Decorator */ +.highlight .ni { color: #d0d0d0 } /* Name.Entity */ +.highlight .ne { color: #bbbbbb } /* Name.Exception */ +.highlight .nf { color: #71adff } /* Name.Function */ +.highlight .nl { color: #d0d0d0 } /* Name.Label */ +.highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ +.highlight .nx { color: #d0d0d0 } /* Name.Other */ +.highlight .py { color: #d0d0d0 } /* Name.Property */ +.highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #40ffff } /* Name.Variable */ +.highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #666666 } /* Text.Whitespace */ +.highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ +.highlight .mf { color: #51b2fd } /* Literal.Number.Float */ +.highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ +.highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ +.highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ +.highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ +.highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ +.highlight .sc { color: #ed9d13 } /* Literal.String.Char */ +.highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ +.highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ +.highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ +.highlight .se { color: #ed9d13 } /* Literal.String.Escape */ +.highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ +.highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ +.highlight .sx { color: #ffa500 } /* Literal.String.Other */ +.highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ +.highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ +.highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ +.highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #71adff } /* Name.Function.Magic */ +.highlight .vc { color: #40ffff } /* Name.Variable.Class */ +.highlight .vg { color: #40ffff } /* Name.Variable.Global */ +.highlight .vi { color: #40ffff } /* Name.Variable.Instance */ +.highlight .vm { color: #40ffff } /* Name.Variable.Magic */ +.highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ diff --git a/assets/css/pygments/pastie.css b/assets/css/pygments/pastie.css new file mode 100644 index 0000000..50034ce --- /dev/null +++ b/assets/css/pygments/pastie.css @@ -0,0 +1,73 @@ +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: #888888 } /* Comment */ +.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +.highlight .k { color: #008800; font-weight: bold } /* Keyword */ +.highlight .ch { color: #888888 } /* Comment.Hashbang */ +.highlight .cm { color: #888888 } /* Comment.Multiline */ +.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ +.highlight .cpf { color: #888888 } /* Comment.PreprocFile */ +.highlight .c1 { color: #888888 } /* Comment.Single */ +.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #aa0000 } /* Generic.Error */ +.highlight .gh { color: #333333 } /* Generic.Heading */ +.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #555555 } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #666666 } /* Generic.Subheading */ +.highlight .gt { color: #aa0000 } /* Generic.Traceback */ +.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #008800 } /* Keyword.Pseudo */ +.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ +.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ +.highlight .na { color: #336699 } /* Name.Attribute */ +.highlight .nb { color: #003388 } /* Name.Builtin */ +.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ +.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ +.highlight .nd { color: #555555 } /* Name.Decorator */ +.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ +.highlight .nl { color: #336699; font-style: italic } /* Name.Label */ +.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ +.highlight .py { color: #336699; font-weight: bold } /* Name.Property */ +.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #336699 } /* Name.Variable */ +.highlight .ow { color: #008800 } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ +.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ +.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ +.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ +.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ +.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ +.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ +.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ +.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ +.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ +.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ +.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ +.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ +.highlight .vc { color: #336699 } /* Name.Variable.Class */ +.highlight .vg { color: #dd7700 } /* Name.Variable.Global */ +.highlight .vi { color: #3333bb } /* Name.Variable.Instance */ +.highlight .vm { color: #336699 } /* Name.Variable.Magic */ +.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ diff --git a/assets/css/pygments/rrt.css b/assets/css/pygments/rrt.css new file mode 100644 index 0000000..a542cfd --- /dev/null +++ b/assets/css/pygments/rrt.css @@ -0,0 +1,83 @@ +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: #0000ff } +.highlight { background: #000000; color: #dddddd } +.highlight .c { color: #00ff00 } /* Comment */ +.highlight .err { color: #dddddd } /* Error */ +.highlight .esc { color: #dddddd } /* Escape */ +.highlight .g { color: #dddddd } /* Generic */ +.highlight .k { color: #ff0000 } /* Keyword */ +.highlight .l { color: #dddddd } /* Literal */ +.highlight .n { color: #dddddd } /* Name */ +.highlight .o { color: #dddddd } /* Operator */ +.highlight .x { color: #dddddd } /* Other */ +.highlight .p { color: #dddddd } /* Punctuation */ +.highlight .ch { color: #00ff00 } /* Comment.Hashbang */ +.highlight .cm { color: #00ff00 } /* Comment.Multiline */ +.highlight .cp { color: #e5e5e5 } /* Comment.Preproc */ +.highlight .cpf { color: #00ff00 } /* Comment.PreprocFile */ +.highlight .c1 { color: #00ff00 } /* Comment.Single */ +.highlight .cs { color: #00ff00 } /* Comment.Special */ +.highlight .gd { color: #dddddd } /* Generic.Deleted */ +.highlight .ge { color: #dddddd } /* Generic.Emph */ +.highlight .gr { color: #dddddd } /* Generic.Error */ +.highlight .gh { color: #dddddd } /* Generic.Heading */ +.highlight .gi { color: #dddddd } /* Generic.Inserted */ +.highlight .go { color: #dddddd } /* Generic.Output */ +.highlight .gp { color: #dddddd } /* Generic.Prompt */ +.highlight .gs { color: #dddddd } /* Generic.Strong */ +.highlight .gu { color: #dddddd } /* Generic.Subheading */ +.highlight .gt { color: #dddddd } /* Generic.Traceback */ +.highlight .kc { color: #ff0000 } /* Keyword.Constant */ +.highlight .kd { color: #ff0000 } /* Keyword.Declaration */ +.highlight .kn { color: #ff0000 } /* Keyword.Namespace */ +.highlight .kp { color: #ff0000 } /* Keyword.Pseudo */ +.highlight .kr { color: #ff0000 } /* Keyword.Reserved */ +.highlight .kt { color: #ee82ee } /* Keyword.Type */ +.highlight .ld { color: #dddddd } /* Literal.Date */ +.highlight .m { color: #dddddd } /* Literal.Number */ +.highlight .s { color: #87ceeb } /* Literal.String */ +.highlight .na { color: #dddddd } /* Name.Attribute */ +.highlight .nb { color: #dddddd } /* Name.Builtin */ +.highlight .nc { color: #dddddd } /* Name.Class */ +.highlight .no { color: #7fffd4 } /* Name.Constant */ +.highlight .nd { color: #dddddd } /* Name.Decorator */ +.highlight .ni { color: #dddddd } /* Name.Entity */ +.highlight .ne { color: #dddddd } /* Name.Exception */ +.highlight .nf { color: #ffff00 } /* Name.Function */ +.highlight .nl { color: #dddddd } /* Name.Label */ +.highlight .nn { color: #dddddd } /* Name.Namespace */ +.highlight .nx { color: #dddddd } /* Name.Other */ +.highlight .py { color: #dddddd } /* Name.Property */ +.highlight .nt { color: #dddddd } /* Name.Tag */ +.highlight .nv { color: #eedd82 } /* Name.Variable */ +.highlight .ow { color: #dddddd } /* Operator.Word */ +.highlight .w { color: #dddddd } /* Text.Whitespace */ +.highlight .mb { color: #dddddd } /* Literal.Number.Bin */ +.highlight .mf { color: #dddddd } /* Literal.Number.Float */ +.highlight .mh { color: #dddddd } /* Literal.Number.Hex */ +.highlight .mi { color: #dddddd } /* Literal.Number.Integer */ +.highlight .mo { color: #dddddd } /* Literal.Number.Oct */ +.highlight .sa { color: #87ceeb } /* Literal.String.Affix */ +.highlight .sb { color: #87ceeb } /* Literal.String.Backtick */ +.highlight .sc { color: #87ceeb } /* Literal.String.Char */ +.highlight .dl { color: #87ceeb } /* Literal.String.Delimiter */ +.highlight .sd { color: #87ceeb } /* Literal.String.Doc */ +.highlight .s2 { color: #87ceeb } /* Literal.String.Double */ +.highlight .se { color: #87ceeb } /* Literal.String.Escape */ +.highlight .sh { color: #87ceeb } /* Literal.String.Heredoc */ +.highlight .si { color: #87ceeb } /* Literal.String.Interpol */ +.highlight .sx { color: #87ceeb } /* Literal.String.Other */ +.highlight .sr { color: #87ceeb } /* Literal.String.Regex */ +.highlight .s1 { color: #87ceeb } /* Literal.String.Single */ +.highlight .ss { color: #87ceeb } /* Literal.String.Symbol */ +.highlight .bp { color: #dddddd } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #ffff00 } /* Name.Function.Magic */ +.highlight .vc { color: #eedd82 } /* Name.Variable.Class */ +.highlight .vg { color: #eedd82 } /* Name.Variable.Global */ +.highlight .vi { color: #eedd82 } /* Name.Variable.Instance */ +.highlight .vm { color: #eedd82 } /* Name.Variable.Magic */ +.highlight .il { color: #dddddd } /* Literal.Number.Integer.Long */ diff --git a/assets/css/pygments/solarized-light.css b/assets/css/pygments/solarized-light.css new file mode 100644 index 0000000..ddb31eb --- /dev/null +++ b/assets/css/pygments/solarized-light.css @@ -0,0 +1,83 @@ +pre { line-height: 125%; } +td.linenos .normal { color: #93a1a1; background-color: #eee8d5; padding-left: 5px; padding-right: 5px; } +span.linenos { color: #93a1a1; background-color: #eee8d5; 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: #eee8d5 } +.highlight { background: #fdf6e3; color: #657b83 } +.highlight .c { color: #93a1a1; font-style: italic } /* Comment */ +.highlight .err { color: #657b83; background-color: #dc322f } /* Error */ +.highlight .esc { color: #657b83 } /* Escape */ +.highlight .g { color: #657b83 } /* Generic */ +.highlight .k { color: #859900 } /* Keyword */ +.highlight .l { color: #657b83 } /* Literal */ +.highlight .n { color: #657b83 } /* Name */ +.highlight .o { color: #93a1a1 } /* Operator */ +.highlight .x { color: #657b83 } /* Other */ +.highlight .p { color: #657b83 } /* Punctuation */ +.highlight .ch { color: #93a1a1; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #93a1a1; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #d33682 } /* Comment.Preproc */ +.highlight .cpf { color: #93a1a1 } /* Comment.PreprocFile */ +.highlight .c1 { color: #93a1a1; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #93a1a1; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #dc322f } /* Generic.Deleted */ +.highlight .ge { color: #657b83; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #dc322f } /* Generic.Error */ +.highlight .gh { color: #657b83; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #859900 } /* Generic.Inserted */ +.highlight .go { color: #657b83 } /* Generic.Output */ +.highlight .gp { color: #268bd2; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { color: #657b83; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #657b83; text-decoration: underline } /* Generic.Subheading */ +.highlight .gt { color: #268bd2 } /* Generic.Traceback */ +.highlight .kc { color: #2aa198 } /* Keyword.Constant */ +.highlight .kd { color: #2aa198 } /* Keyword.Declaration */ +.highlight .kn { color: #cb4b16 } /* Keyword.Namespace */ +.highlight .kp { color: #859900 } /* Keyword.Pseudo */ +.highlight .kr { color: #859900 } /* Keyword.Reserved */ +.highlight .kt { color: #b58900 } /* Keyword.Type */ +.highlight .ld { color: #657b83 } /* Literal.Date */ +.highlight .m { color: #2aa198 } /* Literal.Number */ +.highlight .s { color: #2aa198 } /* Literal.String */ +.highlight .na { color: #657b83 } /* Name.Attribute */ +.highlight .nb { color: #268bd2 } /* Name.Builtin */ +.highlight .nc { color: #268bd2 } /* Name.Class */ +.highlight .no { color: #268bd2 } /* Name.Constant */ +.highlight .nd { color: #268bd2 } /* Name.Decorator */ +.highlight .ni { color: #268bd2 } /* Name.Entity */ +.highlight .ne { color: #268bd2 } /* Name.Exception */ +.highlight .nf { color: #268bd2 } /* Name.Function */ +.highlight .nl { color: #268bd2 } /* Name.Label */ +.highlight .nn { color: #268bd2 } /* Name.Namespace */ +.highlight .nx { color: #657b83 } /* Name.Other */ +.highlight .py { color: #657b83 } /* Name.Property */ +.highlight .nt { color: #268bd2 } /* Name.Tag */ +.highlight .nv { color: #268bd2 } /* Name.Variable */ +.highlight .ow { color: #859900 } /* Operator.Word */ +.highlight .w { color: #657b83 } /* Text.Whitespace */ +.highlight .mb { color: #2aa198 } /* Literal.Number.Bin */ +.highlight .mf { color: #2aa198 } /* Literal.Number.Float */ +.highlight .mh { color: #2aa198 } /* Literal.Number.Hex */ +.highlight .mi { color: #2aa198 } /* Literal.Number.Integer */ +.highlight .mo { color: #2aa198 } /* Literal.Number.Oct */ +.highlight .sa { color: #2aa198 } /* Literal.String.Affix */ +.highlight .sb { color: #2aa198 } /* Literal.String.Backtick */ +.highlight .sc { color: #2aa198 } /* Literal.String.Char */ +.highlight .dl { color: #2aa198 } /* Literal.String.Delimiter */ +.highlight .sd { color: #93a1a1 } /* Literal.String.Doc */ +.highlight .s2 { color: #2aa198 } /* Literal.String.Double */ +.highlight .se { color: #2aa198 } /* Literal.String.Escape */ +.highlight .sh { color: #2aa198 } /* Literal.String.Heredoc */ +.highlight .si { color: #2aa198 } /* Literal.String.Interpol */ +.highlight .sx { color: #2aa198 } /* Literal.String.Other */ +.highlight .sr { color: #cb4b16 } /* Literal.String.Regex */ +.highlight .s1 { color: #2aa198 } /* Literal.String.Single */ +.highlight .ss { color: #2aa198 } /* Literal.String.Symbol */ +.highlight .bp { color: #268bd2 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #268bd2 } /* Name.Function.Magic */ +.highlight .vc { color: #268bd2 } /* Name.Variable.Class */ +.highlight .vg { color: #268bd2 } /* Name.Variable.Global */ +.highlight .vi { color: #268bd2 } /* Name.Variable.Instance */ +.highlight .vm { color: #268bd2 } /* Name.Variable.Magic */ +.highlight .il { color: #2aa198 } /* Literal.Number.Integer.Long */ diff --git a/assets/css/restructuredtext.css b/assets/css/restructuredtext.css new file mode 100644 index 0000000..b56038a --- /dev/null +++ b/assets/css/restructuredtext.css @@ -0,0 +1,134 @@ +/* Typography +–––––––––––––––––––––––––––––––––––––––––––––––––– */ + +h1, h2, h3, h4, h5, h6 { + margin-top: 1rem; + margin-bottom: 1.2rem; + font-weight: 500; +} + +h1 { font-size: 3.6rem; line-height: 1.2; letter-spacing: -.1rem;} +h2 { font-size: 3.0rem; line-height: 1.25; letter-spacing: -.1rem; } +h3 { font-size: 2.6rem; line-height: 1.3; letter-spacing: -.1rem; } +h4 { font-size: 2.0rem; line-height: 1.35; letter-spacing: -.08rem; } +h5 { font-size: 1.6rem; line-height: 1.5; letter-spacing: -.05rem; } +h6 { font-size: 1.2rem; line-height: 1.6; letter-spacing: 0; } +p { margin: 1rem 0; } + +/* Links +–––––––––––––––––––––––––––––––––––––––––––––––––– */ + +a { + color: #0b6adc; + text-decoration: none; +} + +a:hover { + color: #0b6adc; + text-decoration: underline; +} + +/* Code +–––––––––––––––––––––––––––––––––––––––––––––––––– */ + +pre { + font-size: 85%; +} + +code { + padding: .2rem .5rem; + margin: 0 .2rem; + white-space: nowrap; + background: #f1f1f1; + border: 1px solid #e1e1e1; +} + +pre > code { + display: block; + padding: 1rem; + white-space: pre; +} + +.highlight { + border-radius: 8px; +} + +.highlight pre { + padding: 1rem; + overflow-x: auto; +} + +span.docutils.literal { /* Inline literal */ + background-color: #d0d7de; + border-radius: 4px; + padding: 0 4px 2px 4px; + font-family: monospace; + font-size: 80%; +} + +/* Lists +–––––––––––––––––––––––––––––––––––––––––––––––––– */ + +dt { /* Defenition list title */ + font-weight: bold; +} + +ol, ul { + margin: 0; +} + +/* Blockquotes +–––––––––––––––––––––––––––––––––––––––––––––––––– */ + +blockquote { + padding: 0 1em; + border-left: .25em solid #d0d7de; +} + +/* Tables +–––––––––––––––––––––––––––––––––––––––––––––––––– */ + +table, th, td { + border: 1px solid; + border-collapse: collapse; + border-color: #afb4b9; + padding: 0 8px; +} + +th { + font-weight: 600; + background-color: #d0d7de; +} + +td p { + margin: .5rem 0; +} + +hr { + color: #d0d7de; +} + +/* Admonitions +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +.admonition { + padding: .5rem 1rem; +} +.admonition-title { + font-weight: bold; +} +.attention {} +.caution {} +.danger {} +.error {} +.hint {} +.important {} +.note { + color: #3171b5; + background-color: #e5f1fb; +} +.tip {} +.warning {} +.topic {} +.topic-title { + font-weight: bold; +} diff --git a/content/bash_prompt.rst b/content/bash_prompt.rst new file mode 100644 index 0000000..377ad5f --- /dev/null +++ b/content/bash_prompt.rst @@ -0,0 +1,49 @@ +:title: Функциональный и простой Bash prompt +:date: 10 Jul 2022 + +==================================== +Функциональный и простой Bash prompt +==================================== + +О промптинге в Bash написано очень много, в этой заметке я просто покажу +лаконичный и функциональный вариант приглашения командной строки. + +Вот фрагмент из моего **~/.bashrc**: + +.. code-block:: shell + + # Command line prompt + # Print a non-zero exit code + __exit_code_ps1() { + if [ "$1" -ne 0 ]; then + echo "$1 " + fi + } + + PS1='\[\033[0;92m\]\w \[\033[0;31m\]$(__exit_code_ps1 $?)\[\033[0;15m\]\$ ' + + # Git prompt + # See /usr/share/git/completion/git-prompt.sh or download from: + # https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh + if [ -f /usr/share/git/completion/git-prompt.sh ]; then + . /usr/share/git/completion/git-prompt.sh + GIT_PS1_SHOWDIRTYSTATE=1 + PS1='\[\033[0;96m\]$(__git_ps1 "(%s) ")\[\033[0;92m\]\w \[\033[0;31m\]$(__exit_code_ps1 $?)\[\033[0;15m\]\$ ' + fi + +На GitHub можно найти много всяких скриптов или даже целых "фремворков" типа `этого`_ +или `отдельные скрипты`_ для Git. А вы знали, что скрипт для PS1 и так `поставляется`_ +в пакете Git? Не вижу смысла не использовать его, если только вам не надо +как-то иначе работать с PS1. + +.. _этого: https://github.com/ohmybash/oh-my-bash +.. _отдельные скрипты: https://github.com/magicmonty/bash-git-prompt +.. _поставляется: https://github.com/git/git/tree/master/contrib/completion> + +Помимо **git-prompt.sh** я использую функцию ``__exit_code_ps1()``, которая просто +печатает число, если оно не равно нулю. Это очень удобно — всегда видишь код выхода +предыдущей запущенной команды, порой очень помогает при отладке скриптов. + +В итоге всё это дело у меня выглядит вот так: + +.. image:: https://i.nxhs.cloud/ovD.png diff --git a/content/python_oop.rst b/content/python_oop.rst new file mode 100644 index 0000000..6121bf3 --- /dev/null +++ b/content/python_oop.rst @@ -0,0 +1,54 @@ +:title: Питонячье ООП на уточках +:date: 24 Jul 2021 + +======================== +Питонячье ООП на уточках +======================== + +Это весьма скупая на информацию напоминалка о работе с классами. Более подробно написали на `proglib.io`_ и в `документации`_. + +.. _proglib.io: https://proglib.io/p/python-oop/ +.. _документации: https://docs.python.org/3/reference/compound_stmts.html#class-definitions + +Создал файл ``duck.py``: + +.. code-block:: python + + # Объявляем класс "птица". От него в последствии будет унаследован + # класс "уточка". Здесь задаются общие характеристики для всех птиц + # и метод "летать". Аргумент `self` – это ссылка на объект, в контексте + # которого вызывается метод. Она обязательна для методов классов. + + class Bird(object): + can_fly = True + wings = 2 + def fly(self): + print('I\'m flying!') + + # Уточка это уже конкретный биологический вид (опускам породы и + # виды уточек). + # У неё есть имя и цвет (хотя цвет мог быть и у абстрактной птицы). + # Также уточка обладает уникальным методом "сказать кря". + + class Duck(Bird): + name = 'Duck' + color = 'Yellow' + def say_quack(self): + print('quack!') + +Как этим пользоваться: + +.. code-block:: text + + >>> import duck + >>> bird = duck.Bird() + >>> duck = duck.Duck() + >>> bird.fly() + I'm flying! + >>> duck.fly() + I'm flying! + >>> duck.say_quack() + quack! + >>> duck.name = 'Cool Duck' + >>> duck.name + 'Cool Duck' diff --git a/content/rst.rst b/content/rst.rst new file mode 100644 index 0000000..990b70b --- /dev/null +++ b/content/rst.rst @@ -0,0 +1,192 @@ +:title: Превью reStructuredText +:date: 5 Aug 2022 +:not_a_post: + +=================================== +Превью *re*\ **Structured**\ *Text* +=================================== + +This document is the theme preview. + +Sphinx provides several different types of admonitions. + +.. topic:: This is a topic. + + This is what admonitions are a special case of, according to the docutils + documentation. + +.. admonition:: The one with the custom titles + + It's got a certain charm to it. + +.. attention:: + + Climate change is real. + +.. caution:: + + Cliff ahead: Don't drive off it. + +.. danger:: + + Mad scientist at work! + +.. error:: + + Does not compute. + +.. hint:: + + Insulators insulate, until they are subject to ______ voltage. + +.. important:: + + Tech is not neutral, nor is it apolitical. + +.. note:: + + This is a note. + +.. tip:: + + 25% if the service is good. + +.. warning:: + + Reader discretion is strongly advised. + +Subheading +========== + +.. Press :kbd:`Ctrl+Alt+Del`. + +Subsubheading +------------- + +Subsububheading +``````````````` + +Subsubsubsubheading +''''''''''''''''''' + +Subsubsubsubsubheading +~~~~~~~~~~~~~~~~~~~~~~ + +`Python Docs`_. + +.. _Python Docs: https://docs.python.org/ + +The area of a circle is :math:`A_\text{c} = (\pi/4) d^2`. + +.. math:: + + \frac{ \sum_{t=0}^{N}f(t,k) }{N} + +Python code block: + +.. code:: python + + @app.get('/api/hello/{name}') + async def get_user_info(name: str) -> str: + return 'Hello, {}!'.format(name) + +There is an ``inline literal`` and `interpreted text` + +``code-block`` properties supported by Sphinx: + +:: + + :linenos: Show line numbers + :emphasize-lines: 3,5 Highlight specific lines + +------------ + +Bullet lists: + +- This is item 1 + + - Sub item + + - 3rd level sub item + + - 4nd level + +- This is item 2 + +- Bullets are "-", "*" or "+". + Continuing text must be aligned + after the bullet and whitespace. + +Note that a blank line is required +before the first item and after the +last, but is optional between items. + +Enumerated lists: + +3. This is the first item +4. This is the second item +5. Enumerators are arabic numbers, + single letters, or roman numerals +6. List items should be sequentially + numbered, but need not start at 1 + (although not all formatters will + honour the first index). +#. This item is auto-enumerated + +Definition lists: + +what + Definition lists associate a term with + a definition. + +how + The term is a one-line phrase, and the + definition is one or more paragraphs or + body elements, indented relative to the + term. Blank lines are not allowed + between term and definition. + +Field Lists: + +:Authors: + Tony J. (Tibs) Ibbs, + David Goodger + + (and sundry other good-natured folks) + +:Version: 1.0 of 2001/08/08 +:Dedication: To my father. + +Block quotes are just: + + Indented paragraphs, + + and they may nest. + +Grid table: + ++------------+------------+-----------+ +| Header 1 | Header 2 | Header 3 | ++============+============+===========+ +| body row 1 | column 2 | column 3 | ++------------+------------+-----------+ +| body row 2 | Cells may span columns.| ++------------+------------+-----------+ +| body row 3 | Cells may | - Cells | ++------------+ span rows. | - contain | +| body row 4 | | - blocks. | ++------------+------------+-----------+ + +Simple table: + +===== ===== ====== + Inputs Output +------------ ------ + A B A or B +===== ===== ====== +False False False +True False True +False True True +True True True +===== ===== ====== + diff --git a/content/this_blog.rst b/content/this_blog.rst new file mode 100644 index 0000000..4231ab1 --- /dev/null +++ b/content/this_blog.rst @@ -0,0 +1,335 @@ +:title: Как я написал этот блог +:date: 5 Aug 2022 + +======================= +Как я написал этот блог +======================= + +Предыстория +=========== + +Я очень давно планировал написать блог. Именно что написать CMS для ведения +блога. Если погуглить, то CMS для этих целей сотни на разных языках с разным +позиционированием и фичами. Но мне хотелось своего. + +Первые попытки создать сайт были на `Flask`_, особым успехом не увенчались, +но это была хорошая практика и я немного прокачал свой уровень программирования. + +Для блога я не хотел использовать базу данных. Вместо этого я хранил статьи в +исходном Markdown, а метаданные по каждой статье писал в отдельный JSON, который +заменял мне БД. С тем же успехом я мог бы использовать SQLite, но мне нужно было +хранить контент в text/plain. + +Блог даже работал, но мне хотелось сделать админку, чтобы можно было писать +прямо в браузере. На этой части разработка заглохла и я окончательно запутался в +импортах в Python) + +Прошло ещё много времени, я вернулся к идее, но решил сделать ставку на простоту +и начал писать на `Bottle`_. Здесь разработка остановилась не дойдя даже до +варианта хоть как-то работающей системы. Причины скорее всего надо искать в +лени. + +Устав я взял `CMS Bludit`_ и стал вести свои редкие заметки в нём. Решение не +самое плохое, но и не супер отличное. Для простой кастомизации футера пришлось +городить костыли. + +.. _Flask: https://flask.palletsprojects.com/ +.. _Bottle: https://bottlepy.org/ +.. _CMS Bludit: https://www.bludit.com/ru/ + +Статика VS динамика +=================== + +Преимуществ у статических сайтов много. Об этом уже много написано. Мне больше +всего в статических сайтах нравится то, что: + +* роутингом запросов не управляет какой-либо скрипт, я могу свободно + распоряжаться тем, что у меня есть в DocumentRoot; +* не нужно настраивать application-сервер и реверс-прокси на него. + +С редактированием сайта чуть сложнее, так как сперва надо внести изменения +локально, а затем заменить изменившиеся файлы на сервере. Но и тут есть +какие-то решения. + +Я рассматривал уже готовые генераторы статических сайтов, но у них всех были +фатальные недостатки: + +* они сложные и требуют изучения документации чтобы начать писать; +* написать собственную тему задача весьма непростая; +* они написаны не мной. + +Здесь и рождается мой велосипед, которому я не придумал названия. Буду называть +его `генератором`. + +*re*\ **Structured**\ *Text* +============================ + +Я очень долго писал на Markdown, но в один момент понял, что возможностей языка +стало нехватать. Тут пришёлся очень кстати `Python-Markdown`_ к которому можно +было прикручивать `расширения`_. Одно даже сам `написал`_. + +Постепенно я пришёл к `reStructuredText`_. Все приколюхи, которые в нём есть +существуют не за счёт расширения синтаксиса плагинами, а заложены в спецификации. +Функциональности из коробки хватает чтобы писать даже `формулы`_. + +Такие вещи делаются через `роли` и `директивы`. Некоторые готовые директивы есть +в системе документации `Sphinx`_. Их я собираюсь потихоньку скопировать к себе. + +Ещё одно большое преимущество перед Markdown состоит в том, что reStructuredText +поддерживает атрибуты. Вот как это выглядит: + +.. code-block:: rst + + :title: Как я написал этот блог + :date: 5 Aug 2022 + +Это нативная фича, которую можно использовать в статьях для добавления метаданных. + +По сути это место, где можно сделать настройки, касающиеся отдельно взятой статьи. + +Большинство генераторов статических сайтов колхозят нечно подобное в Markdown, делая +исходник статьи непригодным для парсинга другими инструментами. Это причина по +которой в старой реализации блога мне пришлось использовать JSON для метаданных. + +.. _Sphinx: https://www.sphinx-doc.org/en/master/index.html +.. _Python-Markdown: https://python-markdown.github.io/ +.. _расширения: https://python-markdown.github.io/extensions/ +.. _написал: https://pypi.org/project/markdown-alerts/ +.. _rST: https://docutils.sourceforge.io/rst.html +.. _формулы: https://docutils.sourceforge.io/docs/ref/rst/mathematics.html + +Обзор +===== + +Сайт состоит из следующих частей. + +rst_blg.py + Непосредственно код генератора. Сейчас там всего около 200 строк без учёта + комментариев. + +requirements.txt + Список зависимостей. Стараюсь держать минимум. Пока что там: `docutils`, + `jinja2`, `toml` и `pygments`. + +settings.toml + Файл с настройками. Здесь можно переопределить практически всё. + +Makefile + Через него запускаются команды для сборки сайта и некоторые другие. Не + является обязательным, но с ним удобнее. + +layouts + Директория для шаблонов Jinja2. + +assets + Директория для хранения статических файлов, будь то CSS, JS или изображения. + Всё что нужно для визуального оформления страниц. Внутренняя структура + каталога может быть произвольной. + +content + Директория с исходниками статей в reStructuredText. Сюда можно также + положить любые файлы и директории. + +build + В эту директорию копируются ассеты, файлы и сгенерированный HTML. + +Статьи, шаблоны и ассеты могут быть оформлены абсолютно любым образом. Скрипту +безразлично что собирать. Пути и имена всех директорий можно переопределить в +settings.toml. + +Написание постов +================ + +Тут всё предельно просто. Пишем файл и кладём в директорию `content`. В файле +должны быть указаны обязательные атрибуты ``:title:`` и ``:date:``. + +Блог пока не умеет работать с вложенной структурой статей. Поэтому всё будет +свалено в кучу в корневую директорию сайта. + +Все статьи добавляются в список постов и отображаются на главной странице. + +Для того, чтобы сделать "отдельную" страницу, надо добавить атрибут +``:not_a_post:``. + +================= ======= =========== ==================================== +Атрибут Тип Умолчание Описание +================= ======= =========== ==================================== +``:title:`` Строка Заголовок статьи +``:date:`` Дата Дата публикации, формат задаётся в + settings.toml +``:not_a_post:`` Флаг для одиночных страниц +================= ======= =========== ==================================== + +Темы оформления +=============== + +Никаких готовых тем. Пишем CSS вручную. Генератору сайтов всё равно что там +будет. От уровеня представления он никак не зависит. Так что можно писать любые +шаблоны и стили для них. + +Отдельно можно задать тему для блоков кода. Список тем для Pygments с превью +есть на странице https://pygments.org/styles/ + +Чтобы поменять тему, например, на `default` надо выполнить команду: + +.. code-block:: shell + + make css default + # или + pygmentize -f html -S default -a .highlight > assets/css/pygments/default.css + +Затем поменять значение ``theme`` в секции ``pygments`` settings.toml. + +.. code-block:: toml + + [pygments] + theme = 'default' + +Шаблоны +======== + +Шаблоны можно писать какие угодно. Для этогой сайта я написал три файла. +Приведу их без лишних строк. + +**base.j2** + +.. code-block:: html+jinja + + + + + + + + + + + {{ page_title }} | {{ site_title }} + + + +
+

+ {% if posts %} + {{ site_title }} + {% else %} + {{ site_title }} / {{ page_title }}

+ {% endif %} +

+
+ + {% block content %}{% endblock %} + + + + + + +**post.j2** + +.. code-block:: html+jinja + + {% extends "base.j2" %} + {% block content %} + +
+ {{ post | safe }} +
+ + {% endblock %} + +**index.j2** + +.. code-block:: html+jinja + + {% extends "base.j2" %} + {% block content %} + +
+
    + {% for post in posts %} +
  • + {{ post['title'] }} + — {{ post['date'] }} +
  • + {% endfor %} +
+
+ + {% endblock %} + +settings.toml +============= + +Сначала я хотел использовать обычный INI, но мне нужно было получать из конфига +словарь. Немного подумал и выбрал TOML. Он отлично сериализируется в словарь, +визуально повторяет INI. + +**settings.toml** разделён на несколько секций. + +site + Данные касающиеся непосредственно сайта. + + title + Название сайта + + index_page_title + Заголовок главной страницы. Для всех остальных страниц заголовок + берётся из атрибута. + + datatime_format + Формат даты для атрибута ``:date:``. + +build + Параметры, используетмые при сборке. + + build_dir + Директория, куда будет сохранён собранный сайт. + + content_dir + Директория с исходниками статей. + + templates_dir + Директория с шаблонами Jinja2. + + assets_dir + Директория с ассетами. + +pygments + Параметры подсветки синтаксиса в блоках кода. + + theme + Стиль Pygments. + +docutils + Конфигурация для docutils. Здесь можно указать любые параметры, которые + есть здесь: https://docutils.sourceforge.io/docs/user/config.html + + Мне достаточно: + + .. code-block:: toml + + [docutils] + initial_header_level = 2 + section_self_link = true + syntax_highlight = 'short' + +Что ещё хочется сделать +======================= + +В перспективе я планирую добавить следующие фичи. + +- RSS +- OpenGraph +- Webmention +- Расширить возможности rST до уровня Sphinx +- Улучшить CSS +- Комментарии +- Кастомный лейаут для отдельных статей +- Поддержка вложенной структуры статей + +.. * https://jinja.palletsprojects.com/en/3.0.x/templates/ + * https://docutils.sourceforge.io/docs/user/config.html + diff --git a/content/todo_text_markup.rst b/content/todo_text_markup.rst new file mode 100644 index 0000000..a502f60 --- /dev/null +++ b/content/todo_text_markup.rst @@ -0,0 +1,43 @@ +:title: Менеджер задач в текстовом файле +:date: 2 Sep 2021 + +================================ +Менеджер задач в текстовом файле +================================ + +Кажется, я нашёл почти идеальную формулу для ведения списка задач. По сути я +придумал новый формат разметки текста, специализированный для списков задач. +Придумать для него название оказалось тяжело. Приложение Todo это второе по +популярности приложение после Hello World и все хорошие названия уже давно +заняты. Поэтому пусть будет просто **.todo**. + +Синтаксис выглядит таким образом + +.. code-block:: text + + - Uncompleted task (light blue) + + Completed task (green) + x Rejected task (red) + # Comment + \Marked text (yellow background)\ + `Code (magenta)` + Plain text + +.. image:: https://i.nxhs.cloud/MQ9.png + +Да, это все элементы синтаксиса. Предельно просто. + +Какие есть возможности (сравниваю с тем, что предлагают обычные +todo-приложения): + +- Не нужно устанавливать никакого дополнительного ПО или каждый раз открывать + громоздкий веб-интерфейс. Всё что надо это текстовый редактор. В моём случае + идеально подошёл **vim**. Написал для него `скрипт для подсветки синтаксиса`_. + При желании можно написать подсветку для других редакторов. +- Текстовая заметка и задача это одна сущность — один файл. +- Всё управление полностью с клавиатуры. +- Полная свобода включать в файл что угодно. Разумеется, текст, это не + специальный формат для встраивания изображений или других файлов, но можно + использовать элементы Markdown. + +.. _скрипт для подсветки синтаксиса: https://git.nxhs.cloud/ge/todolist-syntax diff --git a/layouts/base.j2 b/layouts/base.j2 new file mode 100644 index 0000000..736e35d --- /dev/null +++ b/layouts/base.j2 @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + {{ page_title }} | {{ site_title }} + + + +
+

+ {% if posts %} + {{ site_title }} + {% else %} + {{ site_title }} / {{ page_title }}

+ {% endif %} +

+
+ + {% block content %}{% endblock %} + +
+

+ - - - +

+

+ home | + projects | + code | + knowledge base | + writing | + my ip +

+

About

+

+ Ещё один сайт про cисадмиство и программирование. + Пишу про софт, GNU/Linux и на смежные айтишные темы. +

+

+ Copyright © 2021-2022 Материалы и исходные коды программ, представленные + на этом сайте, если не указано иное, распространяются по лицензии + CC0 1.0. + Вы можете свободно копировать и использовать их. +

+
+ + + diff --git a/layouts/index.j2 b/layouts/index.j2 new file mode 100644 index 0000000..cc80e60 --- /dev/null +++ b/layouts/index.j2 @@ -0,0 +1,15 @@ +{% extends "base.j2" %} +{% block content %} + +
+
    + {% for post in posts %} +
  • + {{post['title'] }} + — {{ post['date'] }} +
  • + {% endfor %} +
+
+ +{% endblock %} diff --git a/layouts/post.j2 b/layouts/post.j2 new file mode 100644 index 0000000..2eacd81 --- /dev/null +++ b/layouts/post.j2 @@ -0,0 +1,8 @@ +{% extends "base.j2" %} +{% block content %} + +
+ {{ post | safe }} +
+ +{% endblock %}