aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.build.yml16
-rw-r--r--.gitignore1
-rw-r--r--LICENSE.md4
-rw-r--r--README.md2
-rw-r--r--etc/md.yml14
-rw-r--r--etc/pdf.yml18
-rw-r--r--etc/process-md.lua7
-rw-r--r--etc/process-pdf.lua0
-rw-r--r--etc/template.html153
-rw-r--r--index.md2
-rw-r--r--syntax.md2
11 files changed, 193 insertions, 26 deletions
diff --git a/.build.yml b/.build.yml
index 9f036aa..5af08b4 100644
--- a/.build.yml
+++ b/.build.yml
@@ -8,12 +8,22 @@ sources:
tasks:
- page-count: |
cd crowbar-spec
- files="index vs-c tagged-unions types safety errors syntax"
+ files="index vs-c tagged-unions types safety errors syntax LICENSE"
+ html_files=""
+ i=0
for file in $files
do
- pandoc --defaults=etc/md.yml -o $file.html $file.md
+ pandoc --defaults=etc/md.yml --number-offset=$i -o $file.html $file.md
+ html_files="$html_files $file.html"
+ i=$((i+1))
done
- pandoc --defaults=etc/pdf.yml -o ../spec.pdf *.html
+ if git describe --tags --exact-match 2>/dev/null
+ then
+ metadata="subtitle=$(git describe --tags --exact-match)"
+ else
+ metadata="version=$(git log -1 --no-decorate --oneline)"
+ fi
+ pandoc --defaults=etc/pdf.yml -o ../spec.pdf -M $metadata $html_files
cd ..
pdfinfo spec.pdf | grep Pages
tar czvf spec-html.tar.gz crowbar-spec/*.html
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9b61c8c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/*.html
diff --git a/LICENSE.md b/LICENSE.md
index 431007a..1d968be 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,2 +1,6 @@
+---
+title: License
+---
+
[![Creative Commons BY-SA License](https://i.creativecommons.org/l/by-sa/4.0/80x15.png)](http://creativecommons.org/licenses/by-sa/4.0/)
This work is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/").
diff --git a/README.md b/README.md
index 368eaeb..cc8cf90 100644
--- a/README.md
+++ b/README.md
@@ -5,5 +5,3 @@ read the spec: <https://man.sr.ht/~boringcactus/crowbar-spec/>
reference compiler: <https://git.sr.ht/~boringcactus/crowbar-reference-compiler>
play with the reference compiler: <https://crowbar-playground.boringcactus.com/>
-
-[![Creative Commons BY-SA License](https://i.creativecommons.org/l/by-sa/4.0/80x15.png)](http://creativecommons.org/licenses/by-sa/4.0/)
diff --git a/etc/md.yml b/etc/md.yml
index aece004..a918de3 100644
--- a/etc/md.yml
+++ b/etc/md.yml
@@ -1,23 +1,23 @@
from: markdown
to: html5
+template: etc/template.html
standalone: true
-verbosity: INFO
+filters:
+ - etc/process-md.lua
-top-level-division: chapter
+metadata:
+ lang: "en"
-pdf-engine: weasyprint
+verbosity: INFO
table-of-contents: false
number-sections: true
shift-heading-level-by: 1
-title-prefix: "Crowbar Specification: "
+title-prefix: "Crowbar Specification"
eol: lf
# syntax-definition:
fail-if-warnings: true
-dump-args: false
-ignore-args: false
-trace: false
diff --git a/etc/pdf.yml b/etc/pdf.yml
index 5ef3857..a76afca 100644
--- a/etc/pdf.yml
+++ b/etc/pdf.yml
@@ -1,20 +1,18 @@
from: html
to: pdf
-standalone: true
+template: etc/template.html
-metadata:
- title: "Crowbar Specification"
+filters:
+ - etc/process-pdf.lua
-verbosity: INFO
+metadata:
+ title-before-toc: true
+ title: "Crowbar Specification"
-top-level-division: chapter
+verbosity: WARNING
pdf-engine: weasyprint
table-of-contents: true
-
-fail-if-warnings: true
-dump-args: false
-ignore-args: false
-trace: false
+number-sections: false
diff --git a/etc/process-md.lua b/etc/process-md.lua
new file mode 100644
index 0000000..30c85de
--- /dev/null
+++ b/etc/process-md.lua
@@ -0,0 +1,7 @@
+function Pandoc(doc)
+ local title_header = pandoc.Header(1, '')
+ local title = doc.meta.title
+ title_header.content = title
+ doc.blocks:insert(1, title_header)
+ return doc
+end
diff --git a/etc/process-pdf.lua b/etc/process-pdf.lua
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/etc/process-pdf.lua
diff --git a/etc/template.html b/etc/template.html
new file mode 100644
index 0000000..61cefb4
--- /dev/null
+++ b/etc/template.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="$lang$" xml:lang="$lang$"$if(dir)$ dir="$dir$"$endif$>
+<head>
+ <meta charset="utf-8" />
+ <meta name="generator" content="pandoc" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <title>$if(title-prefix)$$title-prefix$ – $endif$$pagetitle$</title>
+ <style>
+ /* "derived" (stolen) from evenbettermotherfucking.website */
+ html {
+ margin: 1rem auto;
+ background: #f2f2f2;
+ color: #444444;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
+ font-size: 16px;
+ line-height: 1.8;
+ text-shadow: 0 1px 0 #ffffff;
+ max-width: 60em;
+ }
+ @media print {
+ html {
+ background: white;
+ }
+ }
+ body {
+ margin: 0 1rem;
+ }
+ code {
+ background: white;
+ }
+ pre {
+ line-height: 1.25;
+ }
+ .highlight code {
+ background: unset;
+ }
+ div.highlighter-rouge {
+ background: white;
+ padding: 1rem;
+ line-height: 1;
+ overflow-x: auto;
+ }
+ div.highlighter-rouge pre {
+ padding: 0;
+ margin: 0;
+ }
+ a {
+ border-bottom: 1px solid #444444;
+ color: #444444;
+ text-decoration: none;
+ }
+ a:hover {
+ border-bottom-style: dashed;
+ }
+ blockquote {
+ margin-left: 1em;
+ border-left: 2px solid #444444;
+ padding-left: 1em;
+ }
+
+ #TOC .header-section-number {
+ display: none;
+ }
+
+ /* https://github.com/richleland/pygments-css/blob/master/friendly.css */
+ .highlight .hll { background-color: #ffffcc }
+ .highlight .c { color: #60a0b0; font-style: italic } /* Comment */
+ .highlight .err { border: 1px solid #FF0000 } /* Error */
+ .highlight .k { color: #007020; font-weight: bold } /* Keyword */
+ .highlight .o { color: #666666 } /* Operator */
+ .highlight .ch { color: #60a0b0; font-style: italic } /* Comment.Hashbang */
+ .highlight .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */
+ .highlight .cp { color: #007020 } /* Comment.Preproc */
+ .highlight .cpf { color: #60a0b0; font-style: italic } /* Comment.PreprocFile */
+ .highlight .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */
+ .highlight .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */
+ .highlight .gd { color: #A00000 } /* Generic.Deleted */
+ .highlight .ge { font-style: italic } /* Generic.Emph */
+ .highlight .gr { color: #FF0000 } /* Generic.Error */
+ .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+ .highlight .gi { color: #00A000 } /* Generic.Inserted */
+ .highlight .go { color: #888888 } /* Generic.Output */
+ .highlight .gp { color: #c65d09; 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: #007020; font-weight: bold } /* Keyword.Constant */
+ .highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
+ .highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
+ .highlight .kp { color: #007020 } /* Keyword.Pseudo */
+ .highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
+ .highlight .kt { color: #902000 } /* Keyword.Type */
+ .highlight .m { color: #40a070 } /* Literal.Number */
+ .highlight .s { color: #4070a0 } /* Literal.String */
+ .highlight .na { color: #4070a0 } /* Name.Attribute */
+ .highlight .nb { color: #007020 } /* Name.Builtin */
+ .highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
+ .highlight .no { color: #60add5 } /* Name.Constant */
+ .highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
+ .highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
+ .highlight .ne { color: #007020 } /* Name.Exception */
+ .highlight .nf { color: #06287e } /* Name.Function */
+ .highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
+ .highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
+ .highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
+ .highlight .nv { color: #bb60d5 } /* Name.Variable */
+ .highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
+ .highlight .w { color: #bbbbbb } /* Text.Whitespace */
+ .highlight .mb { color: #40a070 } /* Literal.Number.Bin */
+ .highlight .mf { color: #40a070 } /* Literal.Number.Float */
+ .highlight .mh { color: #40a070 } /* Literal.Number.Hex */
+ .highlight .mi { color: #40a070 } /* Literal.Number.Integer */
+ .highlight .mo { color: #40a070 } /* Literal.Number.Oct */
+ .highlight .sa { color: #4070a0 } /* Literal.String.Affix */
+ .highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
+ .highlight .sc { color: #4070a0 } /* Literal.String.Char */
+ .highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
+ .highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
+ .highlight .s2 { color: #4070a0 } /* Literal.String.Double */
+ .highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
+ .highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
+ .highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
+ .highlight .sx { color: #c65d09 } /* Literal.String.Other */
+ .highlight .sr { color: #235388 } /* Literal.String.Regex */
+ .highlight .s1 { color: #4070a0 } /* Literal.String.Single */
+ .highlight .ss { color: #517918 } /* Literal.String.Symbol */
+ .highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
+ .highlight .fm { color: #06287e } /* Name.Function.Magic */
+ .highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
+ .highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
+ .highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
+ .highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
+ .highlight .il { color: #40a070 } /* Literal.Number.Integer.Long */
+ </style>
+</head>
+<body>
+$if(title-before-toc)$
+<h1>$title$</h1>
+$if(subtitle)$
+<h2>$subtitle$</h2>
+$endif$
+$if(version)$
+<p>from git: <code>$version$</code></p>
+$endif$
+$endif$
+$if(toc)$
+<nav id="$idprefix$TOC" role="doc-toc">
+$table-of-contents$
+</nav>
+$endif$
+$body$
+</body>
+</html>
diff --git a/index.md b/index.md
index c95a888..f20cb69 100644
--- a/index.md
+++ b/index.md
@@ -37,5 +37,3 @@ TODO
- [announcement mailing list](https://lists.sr.ht/~boringcactus/crowbar-lang-announce)
- [permanent discussion mailing list](https://lists.sr.ht/~boringcactus/crowbar-lang-devel)
- ephemeral discussions via IRC: #crowbar-lang on freenode ([join via irc](ircs://chat.freenode.net/#crowbar-lang), [join via web](https://webchat.freenode.net/#crowbar-lang))
-
-[![Creative Commons BY-SA License](https://i.creativecommons.org/l/by-sa/4.0/80x15.png)](http://creativecommons.org/licenses/by-sa/4.0/)
diff --git a/syntax.md b/syntax.md
index 4641562..12e0b6c 100644
--- a/syntax.md
+++ b/syntax.md
@@ -348,5 +348,3 @@ Expression ← ComparisonExpression ('&&' ComparisonExpression)+
ComparisonExpression ('||' ComparisonExpression)+ /
ComparisonExpression
```
-
-[![Creative Commons BY-SA License](https://i.creativecommons.org/l/by-sa/4.0/80x15.png)](http://creativecommons.org/licenses/by-sa/4.0/)