annotate README.md @ 51:e054275d0938 draft

Add Markdown extensions to blackfriday
author prologic
date Sat, 23 Oct 2021 03:57:19 +0000
parents 0adadd497d23
children c6785950280e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47
0adadd497d23 Forked project
prologic
parents: 38
diff changeset
1 # zs
12
7119cca186bf added travis button
zaitsev.serge
parents: 8
diff changeset
2
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
3 zs is an extremely minimal static site generator written in Go.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
4
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
5 It's inspired by `zas` generator, but is even more minimal.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
6
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
7 The name stands for 'zen static' as well as it's my initials.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
9 ## Features
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
10
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
11 * Zero configuration (no configuration file needed)
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
12 * Cross-platform
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
13 * Highly extensible
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
14 * Works well for blogs and generic static websites (landing pages etc)
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
15 * Easy to learn
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
16 * Fast
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
17
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
18 ## Installation
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
19
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
20 Download the binaries from Github or build it manually:
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
21
47
0adadd497d23 Forked project
prologic
parents: 38
diff changeset
22 $ go get git.mills.io/prologic/zs
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
23
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
24 ## Ideology
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
25
47
0adadd497d23 Forked project
prologic
parents: 38
diff changeset
26 Keep your texts in markdown, or HTML format right in the main directory
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
27 of your blog/site.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
28
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
29 Keep all service files (extensions, layout pages, deployment scripts etc)
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
30 in the `.zs` subdirectory.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
31
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
32 Define variables in the header of the content files using [YAML]:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
33
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
34 title: My web site
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
35 keywords: best website, hello, world
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
36 ---
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
37
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
38 Markdown text goes after a header *separator*
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
39
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
40 Use placeholders for variables and plugins in your markdown or html
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
41 files, e.g. `{{ title }}` or `{{ command arg1 arg2 }}.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
42
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
43 Write extensions in any language you like and put them into the `.zs`
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
44 subdiretory.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
45
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
46 Everything the extensions prints to stdout becomes the value of the
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
47 placeholder.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
48
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
49 Every variable from the content header will be passed via environment variables like `title` becomes `$ZS_TITLE` and so on. There are some special variables:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
50
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
51 * `$ZS` - a path to the `zs` executable
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
52 * `$ZS_OUTDIR` - a path to the directory with generated files
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
53 * `$ZS_FILE` - a path to the currently processed markdown file
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
54 * `$ZS_URL` - a URL for the currently generated page
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
55
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
56 ## Example of RSS generation
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
57
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
58 Extensions can be written in any language you know (Bash, Python, Lua, JavaScript, Go, even Assembler). Here's an example of how to scan all markdown blog posts and create RSS items:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
59
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
60 ``` bash
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
61 for f in ./blog/*.md ; do
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
62 d=$($ZS var $f date)
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
63 if [ ! -z $d ] ; then
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
64 timestamp=`date --date "$d" +%s`
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
65 url=`$ZS var $f url`
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
66 title=`$ZS var $f title | tr A-Z a-z`
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
67 descr=`$ZS var $f description`
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
68 echo $timestamp \
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
69 "<item>" \
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
70 "<title>$title</title>" \
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
71 "<link>http://zserge.com/$url</link>" \
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
72 "<description>$descr</description>" \
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
73 "<pubDate>$(date --date @$timestamp -R)</pubDate>" \
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
74 "<guid>http://zserge.com/$url</guid>" \
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
75 "</item>"
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
76 fi
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
77 done | sort -r -n | cut -d' ' -f2-
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
78 ```
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
79
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
80 ## Hooks
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
81
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
82 There are two special plugin names that are executed every time the build
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
83 happens - `prehook` and `posthook`. You can define some global actions here like
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
84 content generation, or additional commands, like LESS to CSS conversion:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
85
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
86 # .zs/post
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
87
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
88 #!/bin/sh
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
89 lessc < $ZS_OUTDIR/styles.less > $ZS_OUTDIR/styles.css
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
90 rm -f $ZS_OUTDIR/styles.css
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
91
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
92 ## Command line usage
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
93
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
94 `zs build` re-builds your site.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
95
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
96 `zs build <file>` re-builds one file and prints resulting content to stdout.
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
97
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
98 `zs watch` rebuilds your site every time you modify any file.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
99
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
100 `zs var <filename> [var1 var2...]` prints a list of variables defined in the
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
101 header of a given markdown file, or the values of certain variables (even if
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
102 it's an empty string).
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
103
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
104 ## License
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
105
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
106 The software is distributed under the MIT license.