marko 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +47 -0
  3. data/Gemfile.lock +3 -2
  4. data/README.md +16 -13
  5. data/Rakefile +5 -0
  6. data/STORY.md +44 -0
  7. data/_layouts/footer.md +4 -0
  8. data/_layouts/header.md +3 -0
  9. data/_layouts/layout.html +73 -0
  10. data/_layouts/robots.txt.erb +4 -0
  11. data/_layouts/sitemap.xml.erb +20 -0
  12. data/_layouts/styles.css +92 -0
  13. data/docs/changelog.html +74 -0
  14. data/docs/css/styles.css +92 -0
  15. data/docs/index.html +297 -0
  16. data/docs/readme.html +297 -0
  17. data/docs/robots.txt +4 -0
  18. data/docs/sitemap.xml +30 -0
  19. data/docs/story.html +132 -0
  20. data/exe/marko +4 -2
  21. data/lib/assets/demo/README.md +2 -2
  22. data/lib/assets/demo/src/ur/uc.general.flow.md +1 -1
  23. data/lib/assets/init/README.md +1 -1
  24. data/lib/assets/init/Rakefile +2 -2
  25. data/lib/assets/init/tt/custom.md.tt +19 -0
  26. data/lib/assets/init/tt/default.md.tt +4 -0
  27. data/lib/assets/samples/0_index.md +14 -0
  28. data/lib/assets/samples/1_intro.md +55 -0
  29. data/lib/assets/samples/2_stakh.md +21 -0
  30. data/lib/assets/samples/3_actors.md +10 -0
  31. data/lib/assets/samples/4_cases.md +53 -0
  32. data/lib/assets/samples/5_entities.md +18 -0
  33. data/lib/assets/samples/6_concerns.md +60 -0
  34. data/lib/assets/samples/SRS-IEEE-830-1998.md +293 -0
  35. data/lib/assets/samples/SRS-RUP.md +283 -0
  36. data/lib/assets/samples/business-case.md +116 -0
  37. data/lib/assets/samples/ears.md +112 -0
  38. data/lib/assets/samples/gen_punch_domain.rb +183 -0
  39. data/lib/assets/samples/requirements.md +105 -0
  40. data/lib/assets/samples/stakeholders.png +0 -0
  41. data/lib/assets/samples/vision.md +191 -0
  42. data/lib/marko/artifact.rb +3 -1
  43. data/lib/marko/assembler.rb +1 -0
  44. data/lib/marko/cli.rb +10 -2
  45. data/lib/marko/markup/compiler.rb +3 -9
  46. data/lib/marko/markup/decorator.rb +45 -30
  47. data/lib/marko/markup/storage.rb +37 -19
  48. data/lib/marko/tree_node.rb +3 -2
  49. data/lib/marko/version.rb +1 -1
  50. data/lib/marko.rb +8 -0
  51. data/sancho.yml +6 -0
  52. metadata +35 -4
  53. data/lib/assets/init/tt/artifact.md.tt +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f907c502f514d2cd27122f2c2d6acf4e96c066515075c7b8df69b39c3022ee85
4
- data.tar.gz: 075f639071daab8f53d56fec821196514f8c614c58b43b1cbc2306fc616f9f24
3
+ metadata.gz: 2c3511e83282f71094f00c81bd8d926df0b0b9ecd7fa90fe978111e4b2d51afb
4
+ data.tar.gz: 34810477d8a4449873eda8799ccd57f47726d35884c721d46e0c606119ca91c9
5
5
  SHA512:
6
- metadata.gz: fcdf1096aec13270c9a87ed229feda55c81e95de4073b7de264cb8b42dcd66ca2031f643bba63b40c9db2da2e83e945b817866589e4ecb3e2abebb04e2592ad3
7
- data.tar.gz: df5ea3a5f9cdc378aee2bbe8292b3dc3d0e033da11a676a8fcaa5b5c294f614b0e23609ac6a633c79e1725ee9af462be1849a780ff4d1b45f1158ed417601f4e
6
+ metadata.gz: 3f0c0838b0c0f7328d927664e56caf58f787175bd0aa9883700b6a12377c1483e979138f021f8d3588bc287131292e889d6af0cecebfd29780a83588cb2e8291
7
+ data.tar.gz: d7441f513814ad56d4c91cbd09ace4cdd56e5cbaef5598f15f15dbb66b2770eb54fab2fd1580920df1375ee0f1f6ec0427b4df52fb871f432a4fb50a591fc85e
data/CHANGELOG.md CHANGED
@@ -1,5 +1,52 @@
1
+ ---
2
+ title: Marko Changelog
3
+ keywords:
4
+ - ruby
5
+ - markup-compiler
6
+ ...
7
+
1
8
  ## [Unreleased]
2
9
 
10
+ - [ ] add order_index to Artifact?
11
+
12
+ ## [0.3.0] - 2023-11-22
13
+
14
+ - changed `Markup::Compiler` for using collection instead of decorated object
15
+ - changed `Markup::Decorator` for providing `#text` than combines header, props, and body
16
+ - changed `default` and `custom` templates
17
+ - fixed `rake marko:toc` for using `abort` instead of `return` for empty query
18
+ - removed unused `id` from `marko.yml`
19
+
20
+ ## [0.2.4] - 2023-11-21
21
+
22
+ - changed compiler for using `trim_mode: '%<>'` for ERB
23
+ - changed decorator
24
+ - removed `?\n` in `#header`, `#body`
25
+ - changed `#meta` for returning original meta without system keys
26
+ - added `#props` for creating `meta` table
27
+ - added `alias :topic :header`
28
+ - changed `tt/artifact.md.tt` for removing extra empty lines
29
+ - added `tt/custom.md.tt` as an example of handling custom meta keys
30
+ - added test for `tt/*.md.tt`
31
+
32
+ ## [0.2.3] - 2023-11-06
33
+
34
+ - upgraded for Ruby 3.2
35
+ - fixed `assets/init/Rakefile` for lost file extension
36
+ - removed extra word from README
37
+
38
+ ## [0.2.2] - 2023-04-14
39
+
40
+ - changed artifact filename into `bin/artifact.md`; fixed `README.md`
41
+ - removed Psych object string from `marko.yml`
42
+ - changed `TreeNode#belongs_to?`
43
+
44
+ ## [0.2.0] - 2023-02-11
45
+
46
+ - added `$ marko samples` that copies samples into `.marko/samples`
47
+ - fixed "Marko v0.1.3" error gem version
48
+ - changed `$ marko demo`, now it copies demo into `.marko/demo`
49
+
3
50
  ## [0.1.0] - 2023-01-02
4
51
 
5
52
  - Initial release
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- marko (0.1.0)
4
+ marko (0.3.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -10,6 +10,7 @@ GEM
10
10
  rake (13.0.6)
11
11
 
12
12
  PLATFORMS
13
+ x64-mingw-ucrt
13
14
  x64-mingw32
14
15
  x86_64-linux
15
16
 
@@ -19,4 +20,4 @@ DEPENDENCIES
19
20
  rake (~> 13.0)
20
21
 
21
22
  BUNDLED WITH
22
- 2.4.1
23
+ 2.4.5
data/README.md CHANGED
@@ -1,4 +1,9 @@
1
- # Marko
1
+ ---
2
+ title: Marko Readme
3
+ keywords:
4
+ - ruby
5
+ - markup-compiler
6
+ ...
2
7
 
3
8
  Marko is a markup compiler that builds a tree from separated sources and compiles it into a single deliverable artifact.
4
9
 
@@ -26,12 +31,12 @@ To help you with task automation, Marko provides `Marko.assemble` for assembling
26
31
 
27
32
  ### Structure
28
33
 
29
- `marko new PROJECT` command will create a new marko project inside the `PROJECT` directory with following structure:
34
+ `marko new PROJECT` command will create a new Marko project inside the `PROJECT` directory with following structure:
30
35
 
31
36
  - [bin/](bin/) - output folder for `build`
32
37
  - [bin/assets/](bin/assets/) - assets folder
33
38
  - [src/](src/) - markup sources
34
- - [tt/](tt/) - templates for `build`
39
+ - [tt/](tt/) - compiler templates
35
40
  - [marko.yml](marko.yml) - project configuration
36
41
  - [Rakefile](Rakefile) - Rake automation file
37
42
  - [README.md](README.md) - this file
@@ -110,27 +115,25 @@ The TreeNode.body can include macros. The most helpful one is `[[reference.id]]`
110
115
 
111
116
  - `@@tree` substituted by the tree of references to all descendants of the current node, might be used for the table of contents;
112
117
  - `@@list` substituted by the list of references to node items;
113
- - `@@todo` will will skip text with the macro till the end of the line
118
+ - `@@todo` will skip text with the macro till the end of the line
114
119
  - `@@skip` will skip the text after the macro
115
120
 
116
121
  ### Templates
117
122
 
118
- Marko uses templates placed under the `tt` folder to compile sources into artifacts. You can use and customize the default one or design your own for particular purposes. It's just pure ERB, where Marko enumerates TreeNodes and renders the node output.
123
+ Marko uses templates placed under the `tt` folder to compile sources into artifacts. You can use and customize the default one or design your own for particular purposes. It's just pure ERB, where Marko renders collection of decorated TreeNodes.
119
124
 
120
125
  ```
121
- <%= @node.header %>
122
- <%= @node.meta %>
123
- <%= @node.body %>
126
+ % @model.each do |node|
127
+ <%= node.text %>
128
+ % end
124
129
  ```
125
130
 
126
131
  The `marko.yml` configuration file sets the building process's default template and other default values.
127
132
 
128
133
  ```yml
129
- --- !ruby/struct:Marko::Artifact
130
- id: ed863484-243f-4d46-8012-4b148f8c2910
131
- title: Marko Artifact
132
- template: tt/artifact.md.tt
133
- filename: tt/marko-artifact.md
134
+ title: Artifact
135
+ template: tt/default.md.tt
136
+ filename: bin/artifact.md
134
137
  ```
135
138
 
136
139
  ### Automation
data/Rakefile CHANGED
@@ -1,5 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # require "rake"
4
+ # require "sancho"
5
+ # tasks, folders = Sancho.tasks
6
+ # Rake.application.rake_require tasks, folders
7
+
3
8
  require "bundler/gem_tasks"
4
9
  require "rake/testtask"
5
10
 
data/STORY.md ADDED
@@ -0,0 +1,44 @@
1
+ ---
2
+ title: Marko Story
3
+ date: 2023-01-26
4
+ ...
5
+
6
+ [Marko](https://github.com/nvoynov/marko) is the result of my ten-year journey with Ruby playing the Business Analyst role.
7
+
8
+ ## Childhood, 2012
9
+
10
+ Somewhere in between 2011 and 2014 I was playing Software Engineer role in some BigKnownCo where my first and foremost working tool was Microsoft Word 2007. Requirements specifications and Architecture design documents Artifacts that I was mainly working on often consisted of one and more hundreds of pages and it was such a pain to deal with in MS Word which was the corporate standard.
11
+
12
+ In simple words it just gone crazy on large documents, the program consumed all my RAM, document navigation was slow, the program simply stopped responding, which entailed restarting the process with a loss of changes; or even worse, the loss of style formatting that is invisible to the eye when you simply cannot see it that the formatting was lost somewhere on the 225th page.
13
+
14
+ > So problem was clear "__The problem of__ the lack of simple reliable tools and approaches for writing software artifacts __affects__ technical writers who develop and manage the artifacts __the impact of which is__ they tend to choose.."
15
+
16
+ And I come up with the idea to create something light, simple and reliable to eliminate the MS Word from my work experience once and for all. This time I was curious about using YAML for storing requirements just inside file system. And I regularly done some estimations and prioritization for requirements, so I decided that FPA, PERT, and Risk-Value prioritization will be valuable features here.
17
+
18
+ It was my first serious diving into Ruby for few weeks. I succeeded in reading / writing YAML and even provided estimations algorithms. I fall in love with Ruby. But from user perspective (I was the user) it was complete failure. Writing YAML manually was just unforgivable but that time I was obsessed with the format.
19
+
20
+ > YAML was chosen just because this days I dramatically reduced time for load configuration of my target service provisioning system, that stored its configuration tree in RDBMS that causes ~5 000 000 selects for reading and about the same number insert/update for writing. It just reduced to 20 000 instead of 5 000 000.
21
+
22
+ ## Adolescence, 2014 - 2015
23
+
24
+ It took two years to return to the subject, I left that job in 2014 and got haft year off. This time I discovered Markdown and static site generators, and I decided on Markdown as my primary markup format, where each source is just a plain markdown file with some metadata excerpt.
25
+
26
+ Things were going well and in a few months, I got something quite usable. Estimations algorithms were thrown out; markup sources were assembled in one artifact that was translated into HTML by Kramdown. I named it "Creq" for "console requirements" and since then I assembled all software artifacts in my own tool.
27
+
28
+ ## Youth, since 2015
29
+
30
+ Using my tool daily on a regular basis I discovered Pandoc and then can translate my artifact into any supported format; provided more advanced artifact templates, and provided a few templates for different purposes (draft, customer deliverable, etc.), added macros for tree node body.
31
+
32
+ This time I named my tool Clerq because it just was my regular tool - I started my day from `$ git checkout -b new_feature` and finished with merging the branch, assembling new requirements increment, and pushing into git for my development team.
33
+
34
+ In 2018 I have read The Clean Architecture I took my first clumsy attempts to apply it for Clerq.
35
+
36
+ ## Marko, 2022
37
+
38
+ The last time I used Clerq for two months in July 2022. I noticed that time that I use only "create a new project" and "build the artifact" commands. And I realized that there is nothing about requirements - just about artifact assembling.
39
+
40
+ So I took two weeks and finished 2022 with a git commit on Dec 31, 2022 :)
41
+
42
+ The Marko purpose is assembling markup artifact from separated markup sources. Its interfaces are simple and clear. It could be naturally extended through Rakefile for any specific purpose related to visiting artifacts tree nodes.
43
+
44
+ This is the first time I feel for a product that there are nothing I want to take or change. Just "Right Product, Done Right, Managed Messy"
@@ -0,0 +1,4 @@
1
+ <div id="footer">
2
+ ***
3
+ © 2022-2023 <a href="http://nvoynov.github.io/">nvoynov</a>
4
+ </div>
@@ -0,0 +1,3 @@
1
+ <p class="navbar">
2
+ [ = **"Marko" Markup Compiler** = [Readme](readme.html) ~ [Changelog](changelog.html) ~ [Story](story.html) ~ [Github](https://github.com/nvoynov/sancho)]{.smallcaps}
3
+ </p>
@@ -0,0 +1,73 @@
1
+ <!DOCTYPE html>
2
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="$lang$" xml:lang="$lang$"$if(dir)$ dir="$dir$"$endif$>
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="generator" content="pandoc" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
7
+ $for(author-meta)$
8
+ <meta name="author" content="$author-meta$" />
9
+ $endfor$
10
+ $if(date-meta)$
11
+ <meta name="dcterms.date" content="$date-meta$" />
12
+ $endif$
13
+ $if(keywords)$
14
+ <meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$" />
15
+ $endif$
16
+ $if(description-meta)$
17
+ <meta name="description" content="$description-meta$" />
18
+ $endif$
19
+ <title>$if(title-prefix)$$title-prefix$ – $endif$$pagetitle$</title>
20
+ <style>
21
+ $styles.html()$
22
+ </style>
23
+ $for(css)$
24
+ <link rel="stylesheet" href="$css$" />
25
+ $endfor$
26
+ $for(header-includes)$
27
+ $header-includes$
28
+ $endfor$
29
+ $if(math)$
30
+ $math$
31
+ $endif$
32
+ <!--[if lt IE 9]>
33
+ <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
34
+ <![endif]-->
35
+ </head>
36
+ <body>
37
+ $for(include-before)$
38
+ $include-before$
39
+ $endfor$
40
+ $if(title)$
41
+ <header id="title-block-header">
42
+ <h1 class="title">$title$</h1>
43
+ $if(subtitle)$
44
+ <p class="subtitle">$subtitle$</p>
45
+ $endif$
46
+ $for(author)$
47
+ <p class="author">$author$</p>
48
+ $endfor$
49
+ $if(date)$
50
+ <p class="date">$date$</p>
51
+ $endif$
52
+ $if(abstract)$
53
+ <div class="abstract">
54
+ <div class="abstract-title">$abstract-title$</div>
55
+ $abstract$
56
+ </div>
57
+ $endif$
58
+ </header>
59
+ $endif$
60
+ $if(toc)$
61
+ <nav id="$idprefix$TOC" role="doc-toc">
62
+ $if(toc-title)$
63
+ <h2 id="$idprefix$toc-title">$toc-title$</h2>
64
+ $endif$
65
+ $table-of-contents$
66
+ </nav>
67
+ $endif$
68
+ $body$
69
+ $for(include-after)$
70
+ $include-after$
71
+ $endfor$
72
+ </body>
73
+ </html>
@@ -0,0 +1,4 @@
1
+ User-agent: *
2
+ Allow: /
3
+
4
+ Sitemap: https://<%= @site.domain %>/sitemap.xml
@@ -0,0 +1,20 @@
1
+ <?xml version='1.0' encoding='UTF-8'?>
2
+ <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
4
+ xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
5
+
6
+ <url>
7
+ <loc><%= @site.domain %>/</loc>
8
+ <lastmod><%= @site.pages_by_date.first.date %></lastmod>
9
+ <changefreq>weekly</changefreq>
10
+ <priority>1.0</priority>
11
+ </url>
12
+ <% @site.pages.each do |page| %>
13
+ <url>
14
+ <loc><%= @site.domain %>/<%= page.url %></loc>
15
+ <lastmod><%= page.date %></lastmod>
16
+ <changefreq>weekly</changefreq>
17
+ <priority>0.8</priority>
18
+ </url>
19
+ <% end %>
20
+ </urlset>
@@ -0,0 +1,92 @@
1
+ body {
2
+ margin: auto;
3
+ padding-right: 1em;
4
+ padding-left: 1em;
5
+ max-width: 44em;
6
+ color: black;
7
+ font-family: Verdana, sans-serif;
8
+ font-size: 100%;
9
+ line-height: 140%;
10
+ color: #333;
11
+ }
12
+
13
+ pre {
14
+ border: 1px dotted gray;
15
+ background-color: #ececec;
16
+ color: #1111111;
17
+ padding: 0.5em;
18
+ }
19
+
20
+ code {
21
+ font-family: monospace;
22
+ font-size: 140%;
23
+ color: #b34700;
24
+ }
25
+
26
+ h1 a, h2 a, h3 a, h4 a, h5 a {
27
+ text-decoration: none;
28
+ color: #7a5ada;
29
+ }
30
+
31
+ h1, h2, h3, h4, h5 {
32
+ font-family: verdana;
33
+ font-weight: bold;
34
+ border-bottom: 1px dotted black;
35
+ color: #7a5ada;
36
+ }
37
+
38
+ h1 {
39
+ font-size: 130%;
40
+ }
41
+
42
+ h2 {
43
+ font-size: 110%;
44
+ }
45
+
46
+ h3 {
47
+ font-size: 95%;
48
+ }
49
+
50
+ h4 {
51
+ font-size: 90%;
52
+ font-style: italic;
53
+ }
54
+
55
+ h5 {
56
+ font-size: 90%;
57
+ font-style: italic;
58
+ }
59
+
60
+ h1.title {
61
+ font-size: 200%;
62
+ font-weight: bold;
63
+ padding-top: 0.2em;
64
+ padding-bottom: 0.2em;
65
+ text-align: left;
66
+ border: none;
67
+ }
68
+
69
+ dt code {
70
+ font-weight: bold;
71
+ }
72
+
73
+ dd p {
74
+ margin-top: 0;
75
+ }
76
+
77
+ #footer {
78
+ padding-top: 1em;
79
+ font-size: 70%;
80
+ color: gray;
81
+ text-align: center;
82
+ }
83
+
84
+ .navbar {
85
+ background: #fff;
86
+ border-bottom: 1px solid #000;
87
+ margin: 0 0 1em;
88
+ padding: 1em 0;
89
+ position: sticky;
90
+ top: 0;
91
+ z-index: 100;
92
+ }
@@ -0,0 +1,74 @@
1
+ <!DOCTYPE html>
2
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="generator" content="pandoc" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
7
+ <meta name="keywords" content="ruby, markup-compiler" />
8
+ <title>Marko Changelog</title>
9
+ <style>
10
+ code{white-space: pre-wrap;}
11
+ span.smallcaps{font-variant: small-caps;}
12
+ div.columns{display: flex; gap: min(4vw, 1.5em);}
13
+ div.column{flex: auto; overflow-x: auto;}
14
+ div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
15
+ ul.task-list{list-style: none;}
16
+ ul.task-list li input[type="checkbox"] {
17
+ width: 0.8em;
18
+ margin: 0 0.8em 0.2em -1.6em;
19
+ vertical-align: middle;
20
+ }
21
+ .display.math{display: block; text-align: center; margin: 0.5rem auto;}
22
+ </style>
23
+ <link rel="stylesheet" href="css/styles.css" />
24
+ <!--[if lt IE 9]>
25
+ <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
26
+ <![endif]-->
27
+ </head>
28
+ <body>
29
+ <p class="navbar">
30
+ <span class="smallcaps">= <strong>“Marko” Markup Compiler</strong> = <a
31
+ href="readme.html">Readme</a> ~ <a href="changelog.html">Changelog</a> ~
32
+ <a href="story.html">Story</a> ~ <a
33
+ href="https://github.com/nvoynov/sancho">Github</a></span>
34
+ </p>
35
+ <header id="title-block-header">
36
+ <h1 class="title">Marko Changelog</h1>
37
+ </header>
38
+ <nav id="TOC" role="doc-toc">
39
+ <ul>
40
+ <li><a href="#unreleased" id="toc-unreleased">[Unreleased]</a></li>
41
+ <li><a href="#section" id="toc-section">[0.2.0] - 2023-02-11</a></li>
42
+ <li><a href="#section-1" id="toc-section-1">[0.1.0] -
43
+ 2023-01-02</a></li>
44
+ </ul>
45
+ </nav>
46
+ <h2 id="unreleased">[Unreleased]</h2>
47
+ <p>TODO</p>
48
+ <ul>
49
+ <li>custom code (Rakefile?)
50
+ <ul>
51
+ <li>FPA, PERT estimation sheets based on old gems</li>
52
+ <li>“complexity” based on node incoming/outgoing links</li>
53
+ <li>this might be helpful for estimations, some sort of adapted FPA in
54
+ story points!</li>
55
+ </ul></li>
56
+ </ul>
57
+ <h2 id="section">[0.2.0] - 2023-02-11</h2>
58
+ <ul>
59
+ <li>added <code>$ marko samples</code> that copies samples into
60
+ <code>.marko/samples</code></li>
61
+ <li>fixed “Marko v0.1.3” error gem version</li>
62
+ <li>changed <code>$ marko demo</code>, now it copies demo into
63
+ <code>.marko/demo</code></li>
64
+ </ul>
65
+ <h2 id="section-1">[0.1.0] - 2023-01-02</h2>
66
+ <ul>
67
+ <li>Initial release</li>
68
+ </ul>
69
+ <div id="footer">
70
+ <hr />
71
+ <p>© 2022-2023 <a href="http://nvoynov.github.io/">nvoynov</a></p>
72
+ </div>
73
+ </body>
74
+ </html>
@@ -0,0 +1,92 @@
1
+ body {
2
+ margin: auto;
3
+ padding-right: 1em;
4
+ padding-left: 1em;
5
+ max-width: 44em;
6
+ color: black;
7
+ font-family: Verdana, sans-serif;
8
+ font-size: 100%;
9
+ line-height: 140%;
10
+ color: #333;
11
+ }
12
+
13
+ pre {
14
+ border: 1px dotted gray;
15
+ background-color: #ececec;
16
+ color: #1111111;
17
+ padding: 0.5em;
18
+ }
19
+
20
+ code {
21
+ font-family: monospace;
22
+ font-size: 140%;
23
+ color: #b34700;
24
+ }
25
+
26
+ h1 a, h2 a, h3 a, h4 a, h5 a {
27
+ text-decoration: none;
28
+ color: #7a5ada;
29
+ }
30
+
31
+ h1, h2, h3, h4, h5 {
32
+ font-family: verdana;
33
+ font-weight: bold;
34
+ border-bottom: 1px dotted black;
35
+ color: #7a5ada;
36
+ }
37
+
38
+ h1 {
39
+ font-size: 130%;
40
+ }
41
+
42
+ h2 {
43
+ font-size: 110%;
44
+ }
45
+
46
+ h3 {
47
+ font-size: 95%;
48
+ }
49
+
50
+ h4 {
51
+ font-size: 90%;
52
+ font-style: italic;
53
+ }
54
+
55
+ h5 {
56
+ font-size: 90%;
57
+ font-style: italic;
58
+ }
59
+
60
+ h1.title {
61
+ font-size: 200%;
62
+ font-weight: bold;
63
+ padding-top: 0.2em;
64
+ padding-bottom: 0.2em;
65
+ text-align: left;
66
+ border: none;
67
+ }
68
+
69
+ dt code {
70
+ font-weight: bold;
71
+ }
72
+
73
+ dd p {
74
+ margin-top: 0;
75
+ }
76
+
77
+ #footer {
78
+ padding-top: 1em;
79
+ font-size: 70%;
80
+ color: gray;
81
+ text-align: center;
82
+ }
83
+
84
+ .navbar {
85
+ background: #fff;
86
+ border-bottom: 1px solid #000;
87
+ margin: 0 0 1em;
88
+ padding: 1em 0;
89
+ position: sticky;
90
+ top: 0;
91
+ z-index: 100;
92
+ }