Compare commits
11 Commits
8814c12480
...
priority-e
| Author | SHA1 | Date | |
|---|---|---|---|
| 33ba8b19b6 | |||
| 21dc56aa6d | |||
| 7df5daaa6c | |||
| 4f74dd5fe0 | |||
| 0751849492 | |||
| 009877ae76 | |||
| 69bd5832e7 | |||
| b525a5f1c2 | |||
| 2a03859390 | |||
| b65c4c6665 | |||
| 90d8e25b70 |
14
.gitattributes
vendored
Normal file
14
.gitattributes
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
* text=auto eol=lf
|
||||||
|
*.sh text eol=lf
|
||||||
|
*.awk text eol=lf
|
||||||
|
*.css text eol=lf
|
||||||
|
*.html text eol=lf
|
||||||
|
*.js text eol=lf
|
||||||
|
*.md text eol=lf
|
||||||
|
*.conf text eol=lf
|
||||||
|
*.json text eol=lf
|
||||||
|
*.xml text eol=lf
|
||||||
|
*.png binary
|
||||||
|
*.gif binary
|
||||||
|
*.svg text eol=lf
|
||||||
|
*.ico binary
|
||||||
@@ -3,7 +3,11 @@ name: Lint
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [main, master]
|
branches: [main, master]
|
||||||
|
paths:
|
||||||
|
- '**.sh'
|
||||||
pull_request:
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- '**.sh'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
shellcheck:
|
shellcheck:
|
||||||
|
|||||||
@@ -43,8 +43,47 @@ function get_title(path, default_title, full_path, line, title, in_fm) {
|
|||||||
return default_title
|
return default_title
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function get_priority(path, full_path, line, prio, in_fm) {
|
||||||
|
full_path = src "/" path
|
||||||
|
if (path !~ /\.md$/) {
|
||||||
|
full_path = full_path "/index.md"
|
||||||
|
}
|
||||||
|
|
||||||
function compare_paths(p1, p2, parts1, parts2, n1, n2, i, name1, name2, lname1, lname2, w1, w2) {
|
prio = ""
|
||||||
|
in_fm = 0
|
||||||
|
while ((getline line < full_path) > 0) {
|
||||||
|
if (line ~ /^---[[:space:]]*$/) {
|
||||||
|
if (in_fm == 0) {
|
||||||
|
in_fm = 1
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (in_fm) {
|
||||||
|
if (line ~ /^[[:space:]]*priority[[:space:]]*=/) {
|
||||||
|
sub(/^[[:space:]]*priority[[:space:]]*=[[:space:]]*/, "", line)
|
||||||
|
if (line ~ /^".*"$/) {
|
||||||
|
prio = substr(line, 2, length(line) - 2)
|
||||||
|
} else if (line ~ /^'.*'$/) {
|
||||||
|
prio = substr(line, 2, length(line) - 2)
|
||||||
|
} else {
|
||||||
|
prio = line
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(full_path)
|
||||||
|
|
||||||
|
if (prio != "" && prio + 0 == prio) return prio + 0
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function compare_paths(p1, p2, parts1, parts2, n1, n2, i, k, name1, name2, lname1, lname2, pr1, pr2, dir1, dir2, ent1, ent2) {
|
||||||
n1 = split(p1, parts1, "/")
|
n1 = split(p1, parts1, "/")
|
||||||
n2 = split(p2, parts2, "/")
|
n2 = split(p2, parts2, "/")
|
||||||
for (i = 1; i <= n1 && i <= n2; i++) {
|
for (i = 1; i <= n1 && i <= n2; i++) {
|
||||||
@@ -58,15 +97,37 @@ function compare_paths(p1, p2, parts1, parts2, n1, n2, i, name1, name2, lname
|
|||||||
if (lname1 == "index" && i == n1 && lname2 != "index") return -1
|
if (lname1 == "index" && i == n1 && lname2 != "index") return -1
|
||||||
if (lname2 == "index" && i == n2 && lname1 != "index") return 1
|
if (lname2 == "index" && i == n2 && lname1 != "index") return 1
|
||||||
|
|
||||||
w1 = (lname1 in custom_order ? custom_order[lname1] : 999999)
|
if (lname1 != lname2) {
|
||||||
w2 = (lname2 in custom_order ? custom_order[lname2] : 999999)
|
dir1 = ""
|
||||||
|
dir2 = ""
|
||||||
|
for (k = 1; k < i; k++) {
|
||||||
|
dir1 = (dir1 == "" ? parts1[k] : dir1 "/" parts1[k])
|
||||||
|
dir2 = (dir2 == "" ? parts2[k] : dir2 "/" parts2[k])
|
||||||
|
}
|
||||||
|
|
||||||
if (w1 < w2) return -1
|
if (i == n1) {
|
||||||
if (w1 > w2) return 1
|
pr1 = get_priority(p1)
|
||||||
|
} else {
|
||||||
|
ent1 = (dir1 == "" ? name1 : dir1 "/" name1)
|
||||||
|
pr1 = get_priority(ent1)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == n2) {
|
||||||
|
pr2 = get_priority(p2)
|
||||||
|
} else {
|
||||||
|
ent2 = (dir2 == "" ? name2 : dir2 "/" name2)
|
||||||
|
pr2 = get_priority(ent2)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pr1 > 0 || pr2 > 0) {
|
||||||
|
if (pr1 < pr2) return -1
|
||||||
|
if (pr1 > pr2) return 1
|
||||||
|
}
|
||||||
|
|
||||||
if (lname1 < lname2) return -1
|
if (lname1 < lname2) return -1
|
||||||
if (lname1 > lname2) return 1
|
if (lname1 > lname2) return 1
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (n1 < n2) return -1
|
if (n1 < n2) return -1
|
||||||
if (n1 > n2) return 1
|
if (n1 > n2) return 1
|
||||||
return 0
|
return 0
|
||||||
@@ -76,7 +137,6 @@ BEGIN {
|
|||||||
src = ENVIRON["AWK_SRC"]
|
src = ENVIRON["AWK_SRC"]
|
||||||
single_file_index = ENVIRON["AWK_SINGLE_FILE_INDEX"]
|
single_file_index = ENVIRON["AWK_SINGLE_FILE_INDEX"]
|
||||||
flatten = ENVIRON["AWK_FLATTEN"]
|
flatten = ENVIRON["AWK_FLATTEN"]
|
||||||
order = ENVIRON["AWK_ORDER"]
|
|
||||||
home_name = ENVIRON["AWK_HOME_NAME"]
|
home_name = ENVIRON["AWK_HOME_NAME"]
|
||||||
show_home_in_nav = ENVIRON["AWK_SHOW_HOME_IN_NAV"]
|
show_home_in_nav = ENVIRON["AWK_SHOW_HOME_IN_NAV"]
|
||||||
dinfo = ENVIRON["AWK_DINFO"]
|
dinfo = ENVIRON["AWK_DINFO"]
|
||||||
@@ -87,16 +147,6 @@ BEGIN {
|
|||||||
d_dirs[dparts[1]] = dparts[3]
|
d_dirs[dparts[1]] = dparts[3]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
n_order = split(order, oparts, ",")
|
|
||||||
for (i = 1; i <= n_order; i++) {
|
|
||||||
name = oparts[i]
|
|
||||||
sub(/^[[:space:]]*/, "", name)
|
|
||||||
sub(/[[:space:]]*$/, "", name)
|
|
||||||
if (name != "") {
|
|
||||||
custom_order[tolower(name)] = i
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -375,6 +375,13 @@ function rewrite_img_tags(line, out, rest, tag, src, alt, force_inline_tag, e
|
|||||||
} else if (is_image_ext(ext_of(src)) && force_inline_tag == "") {
|
} else if (is_image_ext(ext_of(src)) && force_inline_tag == "") {
|
||||||
# Preserve hand-written <img> attributes (style/class/etc) for normal images.
|
# Preserve hand-written <img> attributes (style/class/etc) for normal images.
|
||||||
repl = tag
|
repl = tag
|
||||||
|
} else if (force_inline_tag != "" && !is_global_url(src) && is_inline_text_ext(ext_of(src))) {
|
||||||
|
repl = render_code_include(src, 1)
|
||||||
|
if (repl != "") {
|
||||||
|
repl = "<pre><code>" repl "</code></pre>"
|
||||||
|
} else {
|
||||||
|
repl = render_embed(src, alt, (alt != ""), 1)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
repl = render_embed(src, alt, (alt != ""), (force_inline_tag != ""))
|
repl = render_embed(src, alt, (alt != ""), (force_inline_tag != ""))
|
||||||
}
|
}
|
||||||
@@ -399,7 +406,12 @@ function rewrite_double_bang_with_parens(line, out, rest, token, inside, src,
|
|||||||
src = substr(inside, sep + 2)
|
src = substr(inside, sep + 2)
|
||||||
sub(/\)$/, "", src)
|
sub(/\)$/, "", src)
|
||||||
|
|
||||||
|
repl = render_code_include(src, 1)
|
||||||
|
if (repl != "") {
|
||||||
|
repl = "<pre><code>" repl "</code></pre>"
|
||||||
|
} else {
|
||||||
repl = render_embed(src, alt, (alt != ""), 1)
|
repl = render_embed(src, alt, (alt != ""), 1)
|
||||||
|
}
|
||||||
out = out pre repl
|
out = out pre repl
|
||||||
rest = post
|
rest = post
|
||||||
}
|
}
|
||||||
@@ -416,7 +428,12 @@ function rewrite_double_bang_bare(line, out, rest, token, src, pre, post, rep
|
|||||||
src = token
|
src = token
|
||||||
sub(/^!!\[/, "", src)
|
sub(/^!!\[/, "", src)
|
||||||
sub(/\]$/, "", src)
|
sub(/\]$/, "", src)
|
||||||
|
repl = render_code_include(src, 1)
|
||||||
|
if (repl != "") {
|
||||||
|
repl = "<pre><code>" repl "</code></pre>"
|
||||||
|
} else {
|
||||||
repl = render_embed(src, "", 0, 1)
|
repl = render_embed(src, "", 0, 1)
|
||||||
|
}
|
||||||
out = out pre repl
|
out = out pre repl
|
||||||
rest = post
|
rest = post
|
||||||
}
|
}
|
||||||
@@ -576,6 +593,75 @@ function restore_plain_markers(line) {
|
|||||||
return line
|
return line
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function break_code_double_bang(line, out, rest, pstart, pend, code_content, token, pre, post, inside, sep, src, alt, repl) {
|
||||||
|
out = ""
|
||||||
|
rest = line
|
||||||
|
while (1) {
|
||||||
|
pstart = index(rest, "<code>")
|
||||||
|
if (pstart == 0) {
|
||||||
|
out = out rest
|
||||||
|
break
|
||||||
|
}
|
||||||
|
out = out substr(rest, 1, pstart - 1)
|
||||||
|
rest = substr(rest, pstart)
|
||||||
|
pend = index(substr(rest, 7), "</code>")
|
||||||
|
if (pend == 0) {
|
||||||
|
out = out rest
|
||||||
|
break
|
||||||
|
}
|
||||||
|
pend = pend + 6
|
||||||
|
code_content = substr(rest, 7, pend - 7)
|
||||||
|
rest = substr(rest, pend + 7)
|
||||||
|
if (match(code_content, /!!\[[^\]]*\]\([^)]*\)/)) {
|
||||||
|
token = substr(code_content, RSTART, RLENGTH)
|
||||||
|
pre = substr(code_content, 1, RSTART - 1)
|
||||||
|
post = substr(code_content, RSTART + RLENGTH)
|
||||||
|
inside = token
|
||||||
|
sub(/^!!\[/, "", inside)
|
||||||
|
sep = index(inside, "](")
|
||||||
|
alt = substr(inside, 1, sep - 1)
|
||||||
|
src = substr(inside, sep + 2)
|
||||||
|
sub(/\)$/, "", src)
|
||||||
|
repl = render_code_include(src, 1)
|
||||||
|
if (repl != "") {
|
||||||
|
repl = "<pre><code>" repl "</code></pre>"
|
||||||
|
} else {
|
||||||
|
repl = render_embed(src, alt, (alt != ""), 1)
|
||||||
|
}
|
||||||
|
if (repl == "") {
|
||||||
|
out = out "<code>" code_content "</code>"
|
||||||
|
} else {
|
||||||
|
if (pre != "") out = out "<code>" pre "</code>"
|
||||||
|
out = out repl
|
||||||
|
if (post != "") out = out "<code>" post "</code>"
|
||||||
|
}
|
||||||
|
} else if (match(code_content, /!!\[[^\]]+\]/)) {
|
||||||
|
token = substr(code_content, RSTART, RLENGTH)
|
||||||
|
pre = substr(code_content, 1, RSTART - 1)
|
||||||
|
post = substr(code_content, RSTART + RLENGTH)
|
||||||
|
src = token
|
||||||
|
sub(/^!!\[/, "", src)
|
||||||
|
sub(/\]$/, "", src)
|
||||||
|
repl = render_code_include(src, 1)
|
||||||
|
if (repl != "") {
|
||||||
|
repl = "<pre><code>" repl "</code></pre>"
|
||||||
|
} else {
|
||||||
|
repl = render_embed(src, "", 0, 1)
|
||||||
|
}
|
||||||
|
if (repl == "") {
|
||||||
|
out = out "<code>" code_content "</code>"
|
||||||
|
} else {
|
||||||
|
if (pre != "") out = out "<code>" pre "</code>"
|
||||||
|
out = out repl
|
||||||
|
if (post != "") out = out "<code>" post "</code>"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out = out "<code>" code_content "</code>"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
BEGIN {
|
BEGIN {
|
||||||
input_dir = dirname_of(input_file)
|
input_dir = dirname_of(input_file)
|
||||||
in_pre_code = 0
|
in_pre_code = 0
|
||||||
@@ -601,6 +687,9 @@ BEGIN {
|
|||||||
|
|
||||||
line = apply_td_vertical_align(line)
|
line = apply_td_vertical_align(line)
|
||||||
line = restore_plain_markers(line)
|
line = restore_plain_markers(line)
|
||||||
|
if (!(in_pre_code || start_pre)) {
|
||||||
|
line = break_code_double_bang(line)
|
||||||
|
}
|
||||||
print line
|
print line
|
||||||
|
|
||||||
if (start_pre && !end_pre) {
|
if (start_pre && !end_pre) {
|
||||||
|
|||||||
@@ -46,14 +46,9 @@ function mask(s, t) {
|
|||||||
while (match(substr(line, p), /`+/)) {
|
while (match(substr(line, p), /`+/)) {
|
||||||
pstart = p + RSTART - 1
|
pstart = p + RSTART - 1
|
||||||
plen = RLENGTH
|
plen = RLENGTH
|
||||||
if (plen >= 3) {
|
|
||||||
out = out substr(line, p, pstart - p + plen)
|
|
||||||
p = pstart + plen
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
# Found 1 or 2 backticks at pstart
|
# Found backtick sequence at pstart
|
||||||
# Search for closing marker
|
# Search for closing marker of same length
|
||||||
marker = substr(line, pstart, plen)
|
marker = substr(line, pstart, plen)
|
||||||
tail = substr(line, pstart + plen)
|
tail = substr(line, pstart + plen)
|
||||||
mpos = index(tail, marker)
|
mpos = index(tail, marker)
|
||||||
@@ -69,9 +64,20 @@ function mask(s, t) {
|
|||||||
# Found match!
|
# Found match!
|
||||||
content = substr(tail, 1, mpos - 1)
|
content = substr(tail, 1, mpos - 1)
|
||||||
out = out substr(line, p, pstart - p)
|
out = out substr(line, p, pstart - p)
|
||||||
if (plen == 2 && substr(content, 1, 1) == " " && substr(content, length(content), 1) == " ") {
|
if (plen >= 2 && substr(content, 1, 1) == " " && substr(content, length(content), 1) == " ") {
|
||||||
content = substr(content, 2, length(content) - 2)
|
content = substr(content, 2, length(content) - 2)
|
||||||
}
|
}
|
||||||
|
if (content ~ /!!\[/) {
|
||||||
|
_rb_test = content
|
||||||
|
gsub(/!!\[[^\]]*\]\([^)]*\)/, "", _rb_test)
|
||||||
|
gsub(/!!\[[^\]]+\]/, "", _rb_test)
|
||||||
|
gsub(/[[:space:]]+/, "", _rb_test)
|
||||||
|
if (_rb_test == "") {
|
||||||
|
out = out content
|
||||||
|
p = pstart + plen + mpos + plen - 1
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
out = out "<code>" mask(content) "</code>"
|
out = out "<code>" mask(content) "</code>"
|
||||||
p = pstart + plen + mpos + plen - 1
|
p = pstart + plen + mpos + plen - 1
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ END {
|
|||||||
in_pre = 0
|
in_pre = 0
|
||||||
i = 1
|
i = 1
|
||||||
while (i <= count) {
|
while (i <= count) {
|
||||||
if (lines[i] ~ /^<pre><code>/) {
|
if (lines[i] ~ /^<pre><code/) {
|
||||||
in_pre = 1
|
in_pre = 1
|
||||||
print lines[i]
|
print lines[i]
|
||||||
i++
|
i++
|
||||||
|
|||||||
BIN
button.gif
BIN
button.gif
Binary file not shown.
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 1.5 KiB |
49
button.svg
Normal file
49
button.svg
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="88"
|
||||||
|
height="31"
|
||||||
|
viewBox="0 0 88 31"
|
||||||
|
>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg-grad" x1="0" y1="0" x2="1" y2="1">
|
||||||
|
<stop offset="0%" stop-color="#4a3b69" />
|
||||||
|
<stop offset="100%" stop-color="#352654" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="88" height="31" fill="#000" />
|
||||||
|
<rect x="1" y="1" width="86" height="29" fill="url(#bg-grad)" />
|
||||||
|
<text
|
||||||
|
x="5"
|
||||||
|
y="12"
|
||||||
|
font-family="Georgia, 'Times New Roman', Times, serif"
|
||||||
|
font-size="10"
|
||||||
|
font-weight="bold"
|
||||||
|
fill="#debfff"
|
||||||
|
style="letter-spacing: -0.5px;"
|
||||||
|
>made</text>
|
||||||
|
<text
|
||||||
|
x="5"
|
||||||
|
y="22"
|
||||||
|
font-family="Georgia, 'Times New Roman', Times, serif"
|
||||||
|
font-size="10"
|
||||||
|
font-weight="bold"
|
||||||
|
fill="#debfff"
|
||||||
|
style="letter-spacing: -0.5px;"
|
||||||
|
>with</text>
|
||||||
|
<text
|
||||||
|
x="80"
|
||||||
|
y="16"
|
||||||
|
text-anchor="end"
|
||||||
|
dominant-baseline="central"
|
||||||
|
font-family="Georgia, 'Times New Roman', Times, serif"
|
||||||
|
font-size="28"
|
||||||
|
font-weight="bold"
|
||||||
|
font-style="italic"
|
||||||
|
fill="#debfff"
|
||||||
|
letter-spacing="-2"
|
||||||
|
>kewt</text>
|
||||||
|
<rect x="1" y="1" width="86" height="1" fill="#ffffff" fill-opacity="0.2" />
|
||||||
|
<rect x="1" y="2" width="1" height="27" fill="#ffffff" fill-opacity="0.2" />
|
||||||
|
<rect x="1" y="29" width="86" height="1" fill="#000000" fill-opacity="0.4" />
|
||||||
|
<rect x="86" y="2" width="1" height="28" fill="#000000" fill-opacity="0.4" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
44
kewt.sh
44
kewt.sh
@@ -21,6 +21,7 @@ src=""
|
|||||||
out=""
|
out=""
|
||||||
new_mode="false"
|
new_mode="false"
|
||||||
new_title=""
|
new_title=""
|
||||||
|
clean_mode="true"
|
||||||
post_mode="false"
|
post_mode="false"
|
||||||
post_title=""
|
post_title=""
|
||||||
positional_count=0
|
positional_count=0
|
||||||
@@ -33,13 +34,19 @@ while [ $# -gt 0 ]; do
|
|||||||
usage
|
usage
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
--new)
|
--new|--init)
|
||||||
new_mode="true"
|
new_mode="true"
|
||||||
if [ $# -gt 1 ] && [ "${2#-}" = "$2" ]; then
|
if [ $# -gt 1 ] && [ "${2#-}" = "$2" ]; then
|
||||||
new_title="$2"
|
new_title="$2"
|
||||||
shift
|
shift
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
--no-clean)
|
||||||
|
clean_mode="false"
|
||||||
|
;;
|
||||||
|
--clean)
|
||||||
|
clean_mode="true"
|
||||||
|
;;
|
||||||
--version|-v)
|
--version|-v)
|
||||||
echo "kewt version git"
|
echo "kewt version git"
|
||||||
exit 0
|
exit 0
|
||||||
@@ -53,6 +60,9 @@ _kewt() {
|
|||||||
'--help[Show help message]'
|
'--help[Show help message]'
|
||||||
'(-h)--help[Show help message]'
|
'(-h)--help[Show help message]'
|
||||||
'(-)--new[Create a new site directory]'
|
'(-)--new[Create a new site directory]'
|
||||||
|
'(-)--init[Create a new site directory (alias for --new)]'
|
||||||
|
'(-)--clean[Clean the output directory before building]'
|
||||||
|
'(-)--no-clean[Do not clean the output directory before building]'
|
||||||
'(-)--update[Update site.conf and template.html with latest defaults]'
|
'(-)--update[Update site.conf and template.html with latest defaults]'
|
||||||
'(-)--post[Create a new empty post file in the configured posts_dir]'
|
'(-)--post[Create a new empty post file in the configured posts_dir]'
|
||||||
'(-)--generate-template[Generate a new template file]'
|
'(-)--generate-template[Generate a new template file]'
|
||||||
@@ -264,7 +274,9 @@ if [ ! -f "$template" ]; then
|
|||||||
printf '%s\n' "$DEFAULT_TMPL" > "$template"
|
printf '%s\n' "$DEFAULT_TMPL" > "$template"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$clean_mode" = "true" ]; then
|
||||||
[ -d "$out" ] && rm -rf "$out"
|
[ -d "$out" ] && rm -rf "$out"
|
||||||
|
fi
|
||||||
mkdir -p "$out"
|
mkdir -p "$out"
|
||||||
|
|
||||||
nav=$(generate_nav "$src")
|
nav=$(generate_nav "$src")
|
||||||
@@ -312,6 +324,36 @@ if [ "$watch_mode" = "true" ]; then
|
|||||||
if [ -n "$changed" ]; then
|
if [ -n "$changed" ]; then
|
||||||
echo ""
|
echo ""
|
||||||
echo "Change detected, rebuilding..."
|
echo "Change detected, rebuilding..."
|
||||||
|
if [ "$clean_mode" = "true" ]; then
|
||||||
|
find "$out" -mindepth 1 -delete 2>/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
load_config "./site.conf"
|
||||||
|
load_config "$src/site.conf"
|
||||||
|
|
||||||
|
asset_version=""
|
||||||
|
if [ "$versioning" = "true" ]; then
|
||||||
|
asset_version="?v=$(date +%s)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
template="$src/template.html"
|
||||||
|
[ -f "$template" ] || template="./template.html"
|
||||||
|
if [ ! -f "$template" ]; then
|
||||||
|
template="$KEWT_TMPDIR/default_template.html"
|
||||||
|
printf '%s\n' "$DEFAULT_TMPL" > "$template"
|
||||||
|
fi
|
||||||
|
|
||||||
|
nav=$(generate_nav "$src")
|
||||||
|
extra_links=$(nav_links_html)
|
||||||
|
if [ -n "$extra_links" ]; then
|
||||||
|
nav="$nav
|
||||||
|
$extra_links"
|
||||||
|
fi
|
||||||
|
if [ -n "$nav_extra" ]; then
|
||||||
|
nav="$nav
|
||||||
|
$nav_extra"
|
||||||
|
fi
|
||||||
|
|
||||||
build_site
|
build_site
|
||||||
touch "$KEWT_TMPDIR/watch_mark"
|
touch "$KEWT_TMPDIR/watch_mark"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ needs_rebuild() {
|
|||||||
[ -f "$src/site.conf" ] && [ "$src/site.conf" -nt "$out_file" ] && return 0
|
[ -f "$src/site.conf" ] && [ "$src/site.conf" -nt "$out_file" ] && return 0
|
||||||
[ -f "$template" ] && [ "$template" -nt "$out_file" ] && return 0
|
[ -f "$template" ] && [ "$template" -nt "$out_file" ] && return 0
|
||||||
[ -f "$script_dir/styles/$style.css" ] && [ "$script_dir/styles/$style.css" -nt "$out_file" ] && return 0
|
[ -f "$script_dir/styles/$style.css" ] && [ "$script_dir/styles/$style.css" -nt "$out_file" ] && return 0
|
||||||
|
[ -f "$script_dir/styles/$style.root.css" ] && [ "$script_dir/styles/$style.root.css" -nt "$out_file" ] && return 0
|
||||||
|
[ -f "$src/styles.root.css" ] && [ "$src/styles.root.css" -nt "$out_file" ] && return 0
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,7 +99,7 @@ eval "find \"$src\" \( $IGNORE_ARGS \) -prune -o -type d -print" | sort | while
|
|||||||
find "$dir" ! -name "$(basename "$dir")" -prune ! -name ".*" -print | while read -r entry; do
|
find "$dir" ! -name "$(basename "$dir")" -prune ! -name ".*" -print | while read -r entry; do
|
||||||
name="${entry##*/}"
|
name="${entry##*/}"
|
||||||
case "$name" in
|
case "$name" in
|
||||||
template.html|site.conf|style.css|index.md) continue ;;
|
template.html|site.conf|style.css|styles.root.css|index.md) continue ;;
|
||||||
esac
|
esac
|
||||||
if [ -d "$entry" ]; then
|
if [ -d "$entry" ]; then
|
||||||
echo "${name}|- [${name}/](${name}/index.html)" >> "$temp_entries"
|
echo "${name}|- [${name}/](${name}/index.html)" >> "$temp_entries"
|
||||||
@@ -168,10 +170,17 @@ eval "find \"$src\" \( $IGNORE_ARGS \) -prune -o -type d -print" | sort | while
|
|||||||
label="$p_date $p_time"
|
label="$p_date $p_time"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [ "$is_post_entry" = "true" ]; then
|
if [ -n "$fm_priority" ]; then
|
||||||
sort_key="${p_date} ${p_time}"
|
prio_val="$fm_priority"
|
||||||
else
|
else
|
||||||
sort_key="$name"
|
prio_val="0"
|
||||||
|
fi
|
||||||
|
if [ "$is_post_entry" = "true" ]; then
|
||||||
|
prio_key=$(printf '%05d' "$prio_val")
|
||||||
|
sort_key="${prio_key} ${p_date} ${p_time}"
|
||||||
|
else
|
||||||
|
prio_key=$(printf '%05d' "$((99999 - prio_val))")
|
||||||
|
sort_key="${prio_key} $name"
|
||||||
fi
|
fi
|
||||||
echo "${sort_key}|- [$label](${name%.md}.html)|$name|${name%.md}.html" >> "$temp_entries"
|
echo "${sort_key}|- [$label](${name%.md}.html)|$name|${name%.md}.html" >> "$temp_entries"
|
||||||
else
|
else
|
||||||
@@ -332,9 +341,24 @@ eval "find \"$src\" \( $IGNORE_ARGS \) -prune -o -type d -print" | sort | while
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -f "$script_dir/styles/$style.css" ] && needs_rebuild "$script_dir/styles/$style.css" "$out/styles.css"; then
|
if [ ! -f "$src/styles.css" ] && [ ! -f "$src/style.css" ]; then
|
||||||
|
if [ -f "$src/styles.root.css" ]; then
|
||||||
|
_base_css="$script_dir/styles/$style.css"
|
||||||
|
[ ! -f "$_base_css" ] && _base_css="$script_dir/styles/kewt.css"
|
||||||
|
if [ ! -f "$out/styles.css" ] || [ "$src/styles.root.css" -nt "$out/styles.css" ] || [ "$_base_css" -nt "$out/styles.css" ]; then
|
||||||
|
merge_root_style "$src/styles.root.css" "$_base_css" "$out/styles.css"
|
||||||
|
fi
|
||||||
|
elif [ -f "$script_dir/styles/$style.css" ]; then
|
||||||
|
if needs_rebuild "$script_dir/styles/$style.css" "$out/styles.css"; then
|
||||||
copy_style_with_resolved_vars "$script_dir/styles/$style.css" "$out/styles.css"
|
copy_style_with_resolved_vars "$script_dir/styles/$style.css" "$out/styles.css"
|
||||||
fi
|
fi
|
||||||
|
elif [ -f "$script_dir/styles/$style.root.css" ]; then
|
||||||
|
_base_css="$script_dir/styles/kewt.css"
|
||||||
|
if [ ! -f "$out/styles.css" ] || [ "$script_dir/styles/$style.root.css" -nt "$out/styles.css" ] || [ "$_base_css" -nt "$out/styles.css" ]; then
|
||||||
|
merge_root_style "$script_dir/styles/$style.root.css" "$_base_css" "$out/styles.css"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
eval "find \"$src\" \( $IGNORE_ARGS \) -prune -o -type f -print" | sort | while IFS= read -r file; do
|
eval "find \"$src\" \( $IGNORE_ARGS \) -prune -o -type f -print" | sort | while IFS= read -r file; do
|
||||||
rel_path="${file#"$src"}"
|
rel_path="${file#"$src"}"
|
||||||
@@ -343,7 +367,7 @@ eval "find \"$src\" \( $IGNORE_ARGS \) -prune -o -type f -print" | sort | while
|
|||||||
out_dir="$out/$dir_rel"
|
out_dir="$out/$dir_rel"
|
||||||
|
|
||||||
case "${file##*/}" in
|
case "${file##*/}" in
|
||||||
template.html|site.conf|style.css|styles.css) continue ;;
|
template.html|site.conf|style.css|styles.css|styles.root.css) continue ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [ "${file##*/}" = "index.md" ] && grep -q '^[[:space:]]*{{LIST}}[[:space:]]*$' "$file" 2>/dev/null; then
|
if [ "${file##*/}" = "index.md" ] && grep -q '^[[:space:]]*{{LIST}}[[:space:]]*$' "$file" 2>/dev/null; then
|
||||||
|
|||||||
@@ -12,7 +12,9 @@ Usage: $invoked_as [--from <src>] [--to <out>]
|
|||||||
|
|
||||||
Options:
|
Options:
|
||||||
--help Show this help message.
|
--help Show this help message.
|
||||||
--new [title] Create a new site directory (default: site)
|
--new, --init [title] Create a new site directory (default: site)
|
||||||
|
--clean Clean the output directory before building (default).
|
||||||
|
--no-clean Do not clean the output directory before building.
|
||||||
--update [dir] Update site.conf and template.html with latest defaults (defaults to current directory)
|
--update [dir] Update site.conf and template.html with latest defaults (defaults to current directory)
|
||||||
--post Create a new empty post file in the configured posts_dir with current date and time as name
|
--post Create a new empty post file in the configured posts_dir with current date and time as name
|
||||||
--generate-template [path] Generate a new template file at <path> (default: template.html)
|
--generate-template [path] Generate a new template file at <path> (default: template.html)
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ draft_by_default = false
|
|||||||
dir_indexes = true
|
dir_indexes = true
|
||||||
single_file_index = true
|
single_file_index = true
|
||||||
flatten = false
|
flatten = false
|
||||||
order = ""
|
|
||||||
home_name = "Home"
|
home_name = "Home"
|
||||||
show_home_in_nav = true
|
show_home_in_nav = true
|
||||||
nav_links = ""
|
nav_links = ""
|
||||||
@@ -67,7 +66,6 @@ footer="made with <a href=\"https://kewt.krzak.org\">kewt</a>"
|
|||||||
dir_indexes="true"
|
dir_indexes="true"
|
||||||
single_file_index="true"
|
single_file_index="true"
|
||||||
flatten="false"
|
flatten="false"
|
||||||
order=""
|
|
||||||
home_name="Home"
|
home_name="Home"
|
||||||
show_home_in_nav="true"
|
show_home_in_nav="true"
|
||||||
nav_links=""
|
nav_links=""
|
||||||
@@ -127,7 +125,6 @@ load_config() {
|
|||||||
dir_indexes) dir_indexes="$val" ;;
|
dir_indexes) dir_indexes="$val" ;;
|
||||||
single_file_index) single_file_index="$val" ;;
|
single_file_index) single_file_index="$val" ;;
|
||||||
flatten) flatten="$val" ;;
|
flatten) flatten="$val" ;;
|
||||||
order) order="$val" ;;
|
|
||||||
home_name) home_name="$val" ;;
|
home_name) home_name="$val" ;;
|
||||||
show_home_in_nav) show_home_in_nav="$val" ;;
|
show_home_in_nav) show_home_in_nav="$val" ;;
|
||||||
nav_links) nav_links="$val" ;;
|
nav_links) nav_links="$val" ;;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ generate_nav() {
|
|||||||
if [ -n "$posts_dir" ] && [ -d "$1/$posts_dir" ]; then
|
if [ -n "$posts_dir" ] && [ -d "$1/$posts_dir" ]; then
|
||||||
find_cmd="$find_cmd && echo \"$1/$posts_dir/index.md\""
|
find_cmd="$find_cmd && echo \"$1/$posts_dir/index.md\""
|
||||||
fi
|
fi
|
||||||
eval "$find_cmd" | sort -u | AWK_SRC="$1" AWK_SINGLE_FILE_INDEX="$single_file_index" AWK_FLATTEN="$flatten" AWK_ORDER="$order" AWK_HOME_NAME="$home_name" AWK_SHOW_HOME_IN_NAV="$show_home_in_nav" AWK_DINFO="$dinfo" awk -f "$awk_dir/generate_sidebar.awk"
|
eval "$find_cmd" | sort -u | AWK_SRC="$1" AWK_SINGLE_FILE_INDEX="$single_file_index" AWK_FLATTEN="$flatten" AWK_HOME_NAME="$home_name" AWK_SHOW_HOME_IN_NAV="$show_home_in_nav" AWK_DINFO="$dinfo" awk -f "$awk_dir/generate_sidebar.awk"
|
||||||
}
|
}
|
||||||
escape_html_text() {
|
escape_html_text() {
|
||||||
printf '%s' "$1" | sed \
|
printf '%s' "$1" | sed \
|
||||||
@@ -34,6 +34,7 @@ parse_frontmatter() {
|
|||||||
fm_description=""
|
fm_description=""
|
||||||
fm_content_warning=""
|
fm_content_warning=""
|
||||||
fm_tags=""
|
fm_tags=""
|
||||||
|
fm_priority=""
|
||||||
while IFS='=' read -r _fk _fv; do
|
while IFS='=' read -r _fk _fv; do
|
||||||
case "$_fk" in
|
case "$_fk" in
|
||||||
title) fm_title="$_fv" ;;
|
title) fm_title="$_fv" ;;
|
||||||
@@ -42,6 +43,7 @@ parse_frontmatter() {
|
|||||||
description) fm_description="$_fv" ;;
|
description) fm_description="$_fv" ;;
|
||||||
content_warning) fm_content_warning="$_fv" ;;
|
content_warning) fm_content_warning="$_fv" ;;
|
||||||
tags) fm_tags="$_fv" ;;
|
tags) fm_tags="$_fv" ;;
|
||||||
|
priority) fm_priority="$_fv" ;;
|
||||||
esac
|
esac
|
||||||
done < "$_fm_out"
|
done < "$_fm_out"
|
||||||
rm -f "$_fm_out"
|
rm -f "$_fm_out"
|
||||||
@@ -109,6 +111,27 @@ copy_style_with_resolved_vars() {
|
|||||||
out_style="$2"
|
out_style="$2"
|
||||||
awk -f "$awk_dir/replace_variables.awk" "$src_style" > "$out_style"
|
awk -f "$awk_dir/replace_variables.awk" "$src_style" > "$out_style"
|
||||||
}
|
}
|
||||||
|
merge_root_style() {
|
||||||
|
root_file="$1"
|
||||||
|
base_css="$2"
|
||||||
|
out_file="$3"
|
||||||
|
{
|
||||||
|
cat "$root_file"
|
||||||
|
awk '
|
||||||
|
BEGIN { in_root = 0; brace_depth = 0 }
|
||||||
|
/^:root[[:space:]]*\{/ { in_root = 1; brace_depth = 1; next }
|
||||||
|
in_root {
|
||||||
|
for (i = 1; i <= length($0); i++) {
|
||||||
|
c = substr($0, i, 1)
|
||||||
|
if (c == "{") brace_depth++
|
||||||
|
if (c == "}") { brace_depth--; if (brace_depth == 0) { in_root = 0; next } }
|
||||||
|
}
|
||||||
|
next
|
||||||
|
}
|
||||||
|
{ print }
|
||||||
|
' "$base_css"
|
||||||
|
} | awk -f "$awk_dir/replace_variables.awk" > "$out_file"
|
||||||
|
}
|
||||||
render_markdown() {
|
render_markdown() {
|
||||||
file="$1"
|
file="$1"
|
||||||
is_home="$2"
|
is_home="$2"
|
||||||
|
|||||||
@@ -1,44 +1,54 @@
|
|||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener("DOMContentLoaded", function () {
|
||||||
var params = new URLSearchParams(window.location.search);
|
var params = new URLSearchParams(window.location.search);
|
||||||
var query = params.get('q');
|
var query = params.get("q");
|
||||||
var box = document.getElementById('search-box');
|
var box = document.getElementById("search-box");
|
||||||
var resultsContainer = document.getElementById('search-results-list');
|
var resultsContainer = document.getElementById("search-results-list");
|
||||||
|
|
||||||
if (box && query) box.value = query;
|
if (box && query) box.value = query;
|
||||||
|
|
||||||
if (!query) {
|
if (!query) {
|
||||||
resultsContainer.innerHTML = '<p>Enter a search term above.</p>';
|
resultsContainer.innerHTML = "<p>Enter a search term above.</p>";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fetch('/search.json')
|
fetch("/search.json")
|
||||||
.then(function(response) { return response.json(); })
|
.then(function (response) {
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
.then(function (data) {
|
.then(function (data) {
|
||||||
var q = query.toLowerCase();
|
var q = query.toLowerCase();
|
||||||
var results = data.filter(function (item) {
|
var results = data.filter(function (item) {
|
||||||
return item.title.toLowerCase().indexOf(q) !== -1 ||
|
return (
|
||||||
item.content.toLowerCase().indexOf(q) !== -1;
|
item.title.toLowerCase().indexOf(q) !== -1 ||
|
||||||
|
item.content.toLowerCase().indexOf(q) !== -1
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
var esc = query.replace(/</g, '<').replace(/>/g, '>');
|
var esc = query.replace(/</g, "<").replace(/>/g, ">");
|
||||||
|
|
||||||
if (results.length === 0) {
|
if (results.length === 0) {
|
||||||
resultsContainer.innerHTML = '<p>No results found for "<strong>' + esc + '</strong>".</p>';
|
resultsContainer.innerHTML =
|
||||||
|
'<p>No results found for "<strong>' + esc + '</strong>".</p>';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var html = '<p>Found ' + results.length + ' result(s) for "<strong>' + esc + '</strong>":</p>';
|
var html =
|
||||||
|
"<p>Found " +
|
||||||
|
results.length +
|
||||||
|
' result(s) for "<strong>' +
|
||||||
|
esc +
|
||||||
|
'</strong>":</p>';
|
||||||
results.forEach(function (result) {
|
results.forEach(function (result) {
|
||||||
var snippet = result.content.substring(0, 200);
|
var snippet = result.content.substring(0, 200);
|
||||||
if (result.content.length > 200) snippet += '...';
|
if (result.content.length > 200) snippet += "...";
|
||||||
html += '<div class="search-result">';
|
html += '<div class="search-result">';
|
||||||
html += '<a href="' + result.url + '">' + result.title + '</a>';
|
html += '<a href="' + result.url + '">' + result.title + "</a>";
|
||||||
if (snippet) html += '<p>' + snippet + '</p>';
|
if (snippet) html += "<p>" + snippet + "</p>";
|
||||||
html += '</div>';
|
html += "</div>";
|
||||||
});
|
});
|
||||||
resultsContainer.innerHTML = html;
|
resultsContainer.innerHTML = html;
|
||||||
})
|
})
|
||||||
.catch(function () {
|
.catch(function () {
|
||||||
resultsContainer.innerHTML = '<p>Error loading search index.</p>';
|
resultsContainer.innerHTML = "<p>Error loading search index.</p>";
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,5 +3,7 @@
|
|||||||
"description": "A minimalist static site generator inspired by werc",
|
"description": "A minimalist static site generator inspired by werc",
|
||||||
"global": "true",
|
"global": "true",
|
||||||
"install": "make install",
|
"install": "make install",
|
||||||
"scripts": ["kewt"]
|
"scripts": [
|
||||||
|
"kewt"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,9 @@ _kewt() {
|
|||||||
'--help[Show help message]'
|
'--help[Show help message]'
|
||||||
'(-h)--help[Show help message]'
|
'(-h)--help[Show help message]'
|
||||||
'(-)--new[Create a new site directory]'
|
'(-)--new[Create a new site directory]'
|
||||||
|
'(-)--init[Create a new site directory (alias for --new)]'
|
||||||
|
'(-)--clean[Clean the output directory before building]'
|
||||||
|
'(-)--no-clean[Do not clean the output directory before building]'
|
||||||
'(-)--update[Update site.conf and template.html with latest defaults]'
|
'(-)--update[Update site.conf and template.html with latest defaults]'
|
||||||
'(-)--post[Create a new empty post file in the configured posts_dir]'
|
'(-)--post[Create a new empty post file in the configured posts_dir]'
|
||||||
'(-)--generate-template[Generate a new template file]'
|
'(-)--generate-template[Generate a new template file]'
|
||||||
|
|||||||
BIN
site/button.gif
BIN
site/button.gif
Binary file not shown.
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 1.5 KiB |
@@ -1,3 +1,6 @@
|
|||||||
|
---
|
||||||
|
priority = 0
|
||||||
|
---
|
||||||
# Hello!
|
# Hello!
|
||||||
|
|
||||||

|

|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
---
|
||||||
|
priority = 2
|
||||||
|
---
|
||||||
# Depths
|
# Depths
|
||||||
|
|
||||||
This is a custom index for a directory
|
This is a custom index for a directory
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
title = "Configuration"
|
title = "Configuration"
|
||||||
|
priority = 2
|
||||||
---
|
---
|
||||||
# Configuration
|
# Configuration
|
||||||
|
|
||||||
@@ -8,10 +9,11 @@ title = "Configuration"
|
|||||||
```conf
|
```conf
|
||||||
title = "kewt"
|
title = "kewt"
|
||||||
style = "kewt"
|
style = "kewt"
|
||||||
|
lang = "en"
|
||||||
|
draft_by_default = false
|
||||||
dir_indexes = true
|
dir_indexes = true
|
||||||
single_file_index = true
|
single_file_index = true
|
||||||
flatten = false
|
flatten = false
|
||||||
order = ""
|
|
||||||
home_name = "Home"
|
home_name = "Home"
|
||||||
show_home_in_nav = true
|
show_home_in_nav = true
|
||||||
nav_links = ""
|
nav_links = ""
|
||||||
@@ -33,13 +35,20 @@ posts_dir = ""
|
|||||||
posts_per_page = 12
|
posts_per_page = 12
|
||||||
custom_admonitions = ""
|
custom_admonitions = ""
|
||||||
cw_hide_url = true
|
cw_hide_url = true
|
||||||
|
generate_tags = false
|
||||||
|
tags_dir = "tags"
|
||||||
|
generate_search = false
|
||||||
|
search_in_footer = false
|
||||||
|
search_in_header = false
|
||||||
|
include_cw_pages_in_search = false
|
||||||
```
|
```
|
||||||
- `title` - site title
|
- `title` - site title
|
||||||
- `style` - style file name from `./styles` (without `.css`)
|
- `style` - style name from the built-in `styles/` directory. See [Theming](theming.md)
|
||||||
|
- `lang` - document language, used for the `<html lang="...">` attribute (default: "en")
|
||||||
|
- `draft_by_default` - default value for the `draft` frontmatter field in new posts created (default: false)
|
||||||
- `dir_indexes` - generate directory index pages when missing `index.md`
|
- `dir_indexes` - generate directory index pages when missing `index.md`
|
||||||
- `single_file_index` - if a directory has one markdown file and no `index.md`, use that file as `index.html`
|
- `single_file_index` - if a directory has one markdown file and no `index.md`, use that file as `index.html`
|
||||||
- `flatten` - flatten sidebar directory levels
|
- `flatten` - flatten sidebar directory levels
|
||||||
- `order` - comma separated file/directory name list to order the sidebar (alphabetical by default)
|
|
||||||
- `home_name` - text for the home link in navigation (default: "Home")
|
- `home_name` - text for the home link in navigation (default: "Home")
|
||||||
- `show_home_in_nav` - show home link in navigation (default: true)
|
- `show_home_in_nav` - show home link in navigation (default: true)
|
||||||
- `nav_links` - comma separated extra nav links, as bare URLs or Markdown links like `[Label](https://example.com)`
|
- `nav_links` - comma separated extra nav links, as bare URLs or Markdown links like `[Label](https://example.com)`
|
||||||
@@ -53,14 +62,20 @@ cw_hide_url = true
|
|||||||
- `generate_page_title` - automatically generate title text from the first markdown heading or filename (default: true)
|
- `generate_page_title` - automatically generate title text from the first markdown heading or filename (default: true)
|
||||||
- `error_page` - filename for the generated 404 error page (default: "not_found.html", empty to disable)
|
- `error_page` - filename for the generated 404 error page (default: "not_found.html", empty to disable)
|
||||||
- `versioning` - append a version query parameter (`?v=timestamp`) to css asset urls to bypass cache (default: false)
|
- `versioning` - append a version query parameter (`?v=timestamp`) to css asset urls to bypass cache (default: false)
|
||||||
|
- `enable_header_links` - turns markdown section headings into clickable anchor links (default: true)
|
||||||
- `base_url` - absolute URL of the site, used for sitemap and RSS feed generation
|
- `base_url` - absolute URL of the site, used for sitemap and RSS feed generation
|
||||||
- `generate_feed` - enable RSS feed generation (requires `base_url`)
|
- `generate_feed` - enable RSS feed generation (requires `base_url`)
|
||||||
- `feed_file` - filename for the generated RSS feed (default: "rss.xml")
|
- `feed_file` - filename for the generated RSS feed (default: "rss.xml")
|
||||||
- `posts_dir` - directory name containing posts (e.g., "posts"). Enables reverse-chronological sorting, title headings in indexes, and automatic backlinks.
|
- `posts_dir` - directory name containing posts (e.g., "posts"). Enables reverse-chronological sorting, title headings in indexes, and automatic backlinks.
|
||||||
- `posts_per_page` - number of posts per page in paginated post indexes (default: 12). Set to 0 to disable pagination.
|
- `posts_per_page` - number of posts per page in paginated post indexes (default: 12). Set to 0 to disable pagination.
|
||||||
- `enable_header_links` - turns markdown section headings into clickable anchor links (default: true)
|
|
||||||
- `custom_admonitions` - comma separated list of custom admonitions
|
- `custom_admonitions` - comma separated list of custom admonitions
|
||||||
- `cw_hide_url` - embeds non-breaking JS to replace the URL in the browser bar on content warning pages (default: true)
|
- `cw_hide_url` - embeds non-breaking JS to replace the URL in the browser bar on content warning pages (default: true)
|
||||||
|
- `generate_tags` - generate tag index pages from post frontmatter (requires `posts_dir`)
|
||||||
|
- `tags_dir` - directory name for generated tag pages (default: "tags")
|
||||||
|
- `generate_search` - generate a `search.json` index for client-side search
|
||||||
|
- `search_in_footer` - include a search box in the page footer (requires `generate_search`)
|
||||||
|
- `search_in_header` - include a search box in the page header (requires `generate_search`)
|
||||||
|
- `include_cw_pages_in_search` - include content warning pages in the search index (default: false)
|
||||||
|
|
||||||
## Dot Files
|
## Dot Files
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
title = "Embeds"
|
title = "Embeds"
|
||||||
|
priority = 5
|
||||||
---
|
---
|
||||||
# Embeds
|
# Embeds
|
||||||
|
|
||||||
@@ -13,6 +14,14 @@ title = "Embeds"
|
|||||||
|
|
||||||
If you want to **force** a file to be inlined, use `\!![]` instead of `\![]`
|
If you want to **force** a file to be inlined, use `\!![]` instead of `\![]`
|
||||||
|
|
||||||
|
## Reality-Breaking Embeds
|
||||||
|
|
||||||
|
`\!![link]` and `\!` work even inside inline code blocks. If the content between backticks consists only of `\!![]` embeds, the embed triggers and the content is inlined instead of being rendered as code.
|
||||||
|
|
||||||
|
```
|
||||||
|
`!![/file.sh]`
|
||||||
|
```
|
||||||
|
|
||||||
## Typed Embeds
|
## Typed Embeds
|
||||||
|
|
||||||
Force specific output regardless of extension:
|
Force specific output regardless of extension:
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
title = "Frontmatter"
|
title = "Frontmatter"
|
||||||
|
priority = 4
|
||||||
---
|
---
|
||||||
# Frontmatter
|
# Frontmatter
|
||||||
|
|
||||||
@@ -11,10 +12,14 @@ title = "Custom Page Title"
|
|||||||
date = "2026-03-23 11:32"
|
date = "2026-03-23 11:32"
|
||||||
draft = false
|
draft = false
|
||||||
description = "A short page summary"
|
description = "A short page summary"
|
||||||
|
tags = "example, tutorial"
|
||||||
|
priority = 10
|
||||||
---
|
---
|
||||||
```
|
```
|
||||||
- `title` - overrides the page title, post name in index links, and RSS `<title>`.
|
- `title` - overrides the page title, post name in index links, and RSS `<title>`.
|
||||||
- `date` - overrides the post date and time. Supports `YYYY-MM-DD` and `YYYY-MM-DD HH:MM` (or `HH-MM`).
|
- `date` - overrides the post date and time. Supports `YYYY-MM-DD` and `YYYY-MM-DD HH:MM` (or `HH-MM`).
|
||||||
- `draft` - if `true`, the file is excluded from HTML generation.
|
- `draft` - if `true`, the file is excluded from HTML generation. If not set, uses the `draft_by_default` config value.
|
||||||
- `description` - page description, used for Open Graph `og:description` meta tag.
|
- `description` - page description, used for Open Graph `og:description` meta tag.
|
||||||
|
- `tags` - comma separated list of tags. Used for tag index generation when `generate_tags` is enabled in `site.conf`.
|
||||||
- `content_warning` - if set, creates an interstitial warning page that the user must click through. If set to `true` uses a generic warning, otherwise uses your string.
|
- `content_warning` - if set, creates an interstitial warning page that the user must click through. If set to `true` uses a generic warning, otherwise uses your string.
|
||||||
|
- `priority` - numeric value for ordering. Lower values sort first in the sidebar and directory indexes. Falls back to alphabetical/date ordering when not set or when items share the same priority.
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
title = "Documentation"
|
title = "Documentation"
|
||||||
|
priority = 0
|
||||||
---
|
---
|
||||||
# Documentation
|
# Documentation
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
title = "Installation"
|
title = "Installation"
|
||||||
|
priority = 0
|
||||||
---
|
---
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
title = "Markdown Extensions"
|
title = "Markdown Extensions"
|
||||||
|
priority = 7
|
||||||
---
|
---
|
||||||
# Markdown Extensions
|
# Markdown Extensions
|
||||||
|
|
||||||
@@ -39,3 +40,82 @@ This renders as `<dl><dt>Term</dt><dd>Definition</dd></dl>`. Multiple definition
|
|||||||
## Emoji Shortcodes
|
## Emoji Shortcodes
|
||||||
|
|
||||||
Standard GitHub/MkDocs emoji shortcodes like `:smile:`, `:fire:`, `:rocket:` are automatically replaced with their Unicode emoji equivalents. Shortcodes inside code blocks are left as-is.
|
Standard GitHub/MkDocs emoji shortcodes like `:smile:`, `:fire:`, `:rocket:` are automatically replaced with their Unicode emoji equivalents. Shortcodes inside code blocks are left as-is.
|
||||||
|
|
||||||
|
## Pipe Tables
|
||||||
|
|
||||||
|
Tables use the GitHub-style syntax:
|
||||||
|
|
||||||
|
```md
|
||||||
|
| Header 1 | Header 2 |
|
||||||
|
|---|---|
|
||||||
|
| cell 1 | cell 2 |
|
||||||
|
| cell 3 | cell 4 |
|
||||||
|
```
|
||||||
|
Column alignment is set with colons in the separator:
|
||||||
|
|
||||||
|
```md
|
||||||
|
| Left | Center | Right |
|
||||||
|
|:---|:---:|---:|
|
||||||
|
| a | b | c |
|
||||||
|
```
|
||||||
|
Tables can drop the header row and with a separator:
|
||||||
|
|
||||||
|
```md
|
||||||
|
|---|---|
|
||||||
|
| a | b |
|
||||||
|
```
|
||||||
|
## Blockquotes
|
||||||
|
|
||||||
|
Standard Markdown blockquote syntax using `>`:
|
||||||
|
|
||||||
|
```md
|
||||||
|
> This is a blockquote.
|
||||||
|
> It can span multiple lines.
|
||||||
|
```
|
||||||
|
### Admonitions
|
||||||
|
|
||||||
|
Blockquotes that start with a type tag become styled admonition blocks. Five built-in types are supported: `NOTE`, `TIP`, `IMPORTANT`, `WARNING`, `CAUTION`.
|
||||||
|
|
||||||
|
```md
|
||||||
|
> [!NOTE]
|
||||||
|
> This is a note admonition.
|
||||||
|
```
|
||||||
|
Custom admonition types can be added via the `custom_admonitions` config option in `site.conf`.
|
||||||
|
|
||||||
|
## Task Lists
|
||||||
|
|
||||||
|
GFM-style task lists are supported inside **both** ordered and unordered lists:
|
||||||
|
|
||||||
|
```md
|
||||||
|
- [ ] Unchecked item
|
||||||
|
- [x] Checked item
|
||||||
|
- Normal item
|
||||||
|
|
||||||
|
1. [ ] Unchecked item
|
||||||
|
2. [x] Checked item
|
||||||
|
3. Normal item
|
||||||
|
```
|
||||||
|
## Reference Links
|
||||||
|
|
||||||
|
Markdown reference-style links and images are supported:
|
||||||
|
|
||||||
|
```md
|
||||||
|
[link text][ref]
|
||||||
|
|
||||||
|
[ref]: https://example.com "Optional title"
|
||||||
|
|
||||||
|
![alt text][img-ref]
|
||||||
|
|
||||||
|
[img-ref]: /image.png "Optional title"
|
||||||
|
```
|
||||||
|
## Plain Text Blocks
|
||||||
|
|
||||||
|
Content inside `<plain>...</plain>` tags is rendered without any Markdown processing
|
||||||
|
|
||||||
|
## MFM Font Syntax
|
||||||
|
|
||||||
|
Misskey-style font syntax is supported for inline font family changes:
|
||||||
|
|
||||||
|
- `$[font.serif text]` - serif font
|
||||||
|
- `$[font.mono text]` - monospace font
|
||||||
|
- `$[font.sans text]` - sans-serif font
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
title = "Quickstart"
|
title = "Quickstart"
|
||||||
|
priority = 1
|
||||||
---
|
---
|
||||||
# Quickstart
|
# Quickstart
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
title = "Templates"
|
title = "Templates"
|
||||||
|
priority = 8
|
||||||
---
|
---
|
||||||
# Templates
|
# Templates
|
||||||
|
|
||||||
@@ -13,3 +14,7 @@ When customizing `template.html`, the placeholders available are:
|
|||||||
- `{{LANG}}` - the configured document language
|
- `{{LANG}}` - the configured document language
|
||||||
- `{{HEAD_EXTRA}}` - meta-tags
|
- `{{HEAD_EXTRA}}` - meta-tags
|
||||||
- `{{HEADER_BRAND}}` - header rendering the name and/or logo
|
- `{{HEADER_BRAND}}` - header rendering the name and/or logo
|
||||||
|
|
||||||
|
## Search
|
||||||
|
|
||||||
|
When `generate_search` is enabled, kewt embeds a search bar into pages based on the `search_in_header` and `search_in_footer` config options. The search uses a `search.json` index generated at build time and a client-side JS script. No external dependencies are required.
|
||||||
|
|||||||
61
site/docs/theming.md
Normal file
61
site/docs/theming.md
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
---
|
||||||
|
title = "Theming"
|
||||||
|
priority = 6
|
||||||
|
---
|
||||||
|
# Theming
|
||||||
|
|
||||||
|
*kewt* has a few colour palettes built-in. Set the `style` option in `site.conf` to a theme name to apply it.
|
||||||
|
|
||||||
|
## Built-in Themes
|
||||||
|
|
||||||
|
| Theme | `style` value | Dark/Light |
|
||||||
|
|---|---|---|
|
||||||
|
| Kewt (default) | `kewt` | Light |
|
||||||
|
| Kewt Light | `kewt-light` | Light |
|
||||||
|
| Nord | `nord` | Dark |
|
||||||
|
| Nord Light | `nord-light` | Light |
|
||||||
|
| Monokai | `mono` | Dark |
|
||||||
|
| Monokai Light | `mono-light` | Light |
|
||||||
|
| One Dark | `onedark` | Dark |
|
||||||
|
| One Light | `onelight` | Light |
|
||||||
|
| Rose Pine | `rosepine` | Dark |
|
||||||
|
| Rose Pine Light | `rosepine-light` | Light |
|
||||||
|
| Solarized | `solarized` | Light |
|
||||||
|
| Solarized Dark | `solarized-dark` | Dark |
|
||||||
|
|
||||||
|
```conf
|
||||||
|
style = "kewt-light"
|
||||||
|
```
|
||||||
|
## How It Works
|
||||||
|
|
||||||
|
Each theme is a `.root.css` file containing a `:root` block with CSS custom properties. At build time, *kewt* merges the theme's variables with the base `kewt.css` stylesheet. The base `:root` block is stripped out and replaced with the theme's variables.
|
||||||
|
|
||||||
|
## Style Resolution
|
||||||
|
|
||||||
|
*kewt* resolves styles in this priority order (highest wins):
|
||||||
|
|
||||||
|
1. `site/styles.css` - a full custom stylesheet in your site directory. Overrides everything.
|
||||||
|
2. `site/styles.root.css` - custom `:root` variables merged with the built-in `kewt.css` base.
|
||||||
|
3. built-in `<style>.css` - a full stylesheet matching the `style` config value.
|
||||||
|
4. built-in `<style>.root.css` - `:root` variables merged with `kewt.css`.
|
||||||
|
|
||||||
|
If none of these exist, the unmodified `kewt.css` is used
|
||||||
|
|
||||||
|
## Custom Themes
|
||||||
|
|
||||||
|
To create a custom colour theme, place a `styles.root.css` file in your site directory. The file should contain only a `:root` block with the CSS variables you want to override:
|
||||||
|
|
||||||
|
```css
|
||||||
|
:root {
|
||||||
|
--bg: #1a1b26;
|
||||||
|
--fg: #c0caf5;
|
||||||
|
--fg-link: #7aa2f7;
|
||||||
|
--fg-heading: #c0caf5;
|
||||||
|
--code-bg: #24283b;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Any variables not overridden will fall back to the defaults in `kewt.css`. The `:root` block in the base stylesheet is automatically removed to prevent conflicts.
|
||||||
|
|
||||||
|
## Per-Directory Styles
|
||||||
|
|
||||||
|
Subdirectories can have their own `styles.css` or `styles.root.css` that apply only to pages in that directory. Per-directory styles follow the same priority.
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
title = "Usage"
|
title = "Usage"
|
||||||
|
priority = 3
|
||||||
---
|
---
|
||||||
# Usage
|
# Usage
|
||||||
|
|
||||||
@@ -20,4 +21,6 @@ kewt --serve [port]
|
|||||||
- `--generate-template [path]` writes the default `template.html` to the given path (defaults to `template.html` in the current directory).
|
- `--generate-template [path]` writes the default `template.html` to the given path (defaults to `template.html` in the current directory).
|
||||||
- `--update [dir]` adds any missing keys to `site.conf` and checks `template.html` against the latest default.
|
- `--update [dir]` adds any missing keys to `site.conf` and checks `template.html` against the latest default.
|
||||||
- `--watch` (`-w`) watches for file changes in the source directory and rebuilds automatically.
|
- `--watch` (`-w`) watches for file changes in the source directory and rebuilds automatically.
|
||||||
|
- `--clean` cleans the output directory before building (default behavior).
|
||||||
|
- `--no-clean` does not clean the output directory before building. Useful with `--watch` to avoid clearing output on every rebuild.
|
||||||
- `--serve` (`-s`) starts a local HTTP server (python3 or busybox) in the output directory after building. Use with the port number to specify the port. Composable with `--watch`.
|
- `--serve` (`-s`) starts a local HTTP server (python3 or busybox) in the output directory after building. Use with the port number to specify the port. Composable with `--watch`.
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
title = "Heaven"
|
title = "Heaven"
|
||||||
|
priority = 3
|
||||||
content_warning = "This page may contain CSS"
|
content_warning = "This page may contain CSS"
|
||||||
---
|
---
|
||||||
# Heaven
|
# Heaven
|
||||||
@@ -9,4 +10,4 @@ Told you
|
|||||||
Probably should've mentioned the catgirl too
|
Probably should've mentioned the catgirl too
|
||||||
|
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| ```![/styles.css]``` | <img style="vertical-align: top;" src="catgirl.jpg"> |
|
| ```!![/styles.css]``` | <img style="vertical-align: top;" src="catgirl.jpg"> |
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
---
|
||||||
|
title = "Home"
|
||||||
|
priority = 0
|
||||||
|
---
|
||||||
# _kewt_
|
# _kewt_
|
||||||
### Pronounced "cute"
|
### Pronounced "cute"
|
||||||
|
|
||||||
@@ -14,7 +18,7 @@ It's meant to be a static site generator, like _[kew](https://github.com/uint23/
|
|||||||
## Features
|
## Features
|
||||||
|
|
||||||
- No dependencies
|
- No dependencies
|
||||||
- Frontmatter support (title, date, draft, description)
|
- Frontmatter support (title, date, draft, description, priority)
|
||||||
- Supports many embed types
|
- Supports many embed types
|
||||||
- Automatic css variable replacement for older browsers
|
- Automatic css variable replacement for older browsers
|
||||||
- Automatic inlining and embedding of many filetypes with `\![link]` or `\`
|
- Automatic inlining and embedding of many filetypes with `\![link]` or `\`
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ display_logo = false
|
|||||||
display_title = true
|
display_title = true
|
||||||
logo_as_favicon = false
|
logo_as_favicon = false
|
||||||
favicon = "favicon.ico"
|
favicon = "favicon.ico"
|
||||||
order = "Home, docs, depths, heaven"
|
|
||||||
home_name = "Home"
|
home_name = "Home"
|
||||||
show_home_in_nav = true
|
show_home_in_nav = true
|
||||||
nav_links = ""
|
nav_links = ""
|
||||||
|
|||||||
27
styles/kewt-light.root.css
Normal file
27
styles/kewt-light.root.css
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
:root {
|
||||||
|
--bg: #f5f0ff;
|
||||||
|
--bg-deep: #e8dffa;
|
||||||
|
--fg: #2d1b4e;
|
||||||
|
--fg-muted: #7a6898;
|
||||||
|
--fg-link: #7b3fba;
|
||||||
|
--fg-heading: #3d2466;
|
||||||
|
--code-bg: #e8dffa;
|
||||||
|
--code-border: #d0c0e8;
|
||||||
|
--code-fg: #2d1b4e;
|
||||||
|
--code-sel: #b8860b;
|
||||||
|
--code-prop: #6f42c1;
|
||||||
|
--code-val: #0366d6;
|
||||||
|
--code-var: #22863a;
|
||||||
|
--code-com: #7a6898;
|
||||||
|
--adm-note-bg: #e0e0f8;
|
||||||
|
--adm-note-border: #5b6fc4;
|
||||||
|
--adm-tip-bg: #ddf0dd;
|
||||||
|
--adm-tip-border: #46a758;
|
||||||
|
--adm-important-bg: #eeddf5;
|
||||||
|
--adm-important-border: #8b5fc7;
|
||||||
|
--adm-warning-bg: #f5f0dd;
|
||||||
|
--adm-warning-border: #b8860b;
|
||||||
|
--adm-caution-bg: #f5dddd;
|
||||||
|
--adm-caution-border: #c44569;
|
||||||
|
--thead-bg: #e8dffa;
|
||||||
|
}
|
||||||
@@ -23,6 +23,7 @@
|
|||||||
--adm-warning-border: #ffe2bd;
|
--adm-warning-border: #ffe2bd;
|
||||||
--adm-caution-bg: #662d43;
|
--adm-caution-bg: #662d43;
|
||||||
--adm-caution-border: #ffc4d5;
|
--adm-caution-border: #ffc4d5;
|
||||||
|
--thead-bg: #3d2d5c;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@@ -271,6 +272,32 @@ hr {
|
|||||||
border-top: 1px solid var(--code-border);
|
border-top: 1px solid var(--code-border);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin: 20px 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
thead {
|
||||||
|
border-bottom: 2px solid var(--code-border);
|
||||||
|
background: var(--thead-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: left;
|
||||||
|
padding: 8px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
padding: 8px 12px;
|
||||||
|
border-top: 1px solid var(--code-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:nth-child(even) {
|
||||||
|
background: var(--bg-deep);
|
||||||
|
}
|
||||||
|
|
||||||
.nav-toggle,
|
.nav-toggle,
|
||||||
.nav-toggle-label {
|
.nav-toggle-label {
|
||||||
display: none;
|
display: none;
|
||||||
|
|||||||
27
styles/mono-light.root.css
Normal file
27
styles/mono-light.root.css
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
:root {
|
||||||
|
--bg: #f5f5f5;
|
||||||
|
--bg-deep: #e8e8e8;
|
||||||
|
--fg: #1a1a1a;
|
||||||
|
--fg-muted: #808080;
|
||||||
|
--fg-link: #333333;
|
||||||
|
--fg-heading: #000000;
|
||||||
|
--code-bg: #e8e8e8;
|
||||||
|
--code-border: #c0c0c0;
|
||||||
|
--code-fg: #1a1a1a;
|
||||||
|
--code-sel: #555555;
|
||||||
|
--code-prop: #333333;
|
||||||
|
--code-val: #666666;
|
||||||
|
--code-var: #444444;
|
||||||
|
--code-com: #999999;
|
||||||
|
--adm-note-bg: #e0e0ee;
|
||||||
|
--adm-note-border: #8888aa;
|
||||||
|
--adm-tip-bg: #e0eee0;
|
||||||
|
--adm-tip-border: #88aa88;
|
||||||
|
--adm-important-bg: #eee0ee;
|
||||||
|
--adm-important-border: #aa88aa;
|
||||||
|
--adm-warning-bg: #eeeed0;
|
||||||
|
--adm-warning-border: #aaaa78;
|
||||||
|
--adm-caution-bg: #eee0e0;
|
||||||
|
--adm-caution-border: #aa8888;
|
||||||
|
--thead-bg: #e8e8e8;
|
||||||
|
}
|
||||||
27
styles/mono.root.css
Normal file
27
styles/mono.root.css
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
:root {
|
||||||
|
--bg: #1a1a1a;
|
||||||
|
--bg-deep: #111111;
|
||||||
|
--fg: #d4d4d4;
|
||||||
|
--fg-muted: #808080;
|
||||||
|
--fg-link: #e0e0e0;
|
||||||
|
--fg-heading: #ffffff;
|
||||||
|
--code-bg: #0d0d0d;
|
||||||
|
--code-border: #404040;
|
||||||
|
--code-fg: #d4d4d4;
|
||||||
|
--code-sel: #b8b8b8;
|
||||||
|
--code-prop: #e0e0e0;
|
||||||
|
--code-val: #a0a0a0;
|
||||||
|
--code-var: #c8c8c8;
|
||||||
|
--code-com: #585858;
|
||||||
|
--adm-note-bg: #1a1a2e;
|
||||||
|
--adm-note-border: #5a5a8a;
|
||||||
|
--adm-tip-bg: #1a2e1a;
|
||||||
|
--adm-tip-border: #5a8a5a;
|
||||||
|
--adm-important-bg: #2e1a2e;
|
||||||
|
--adm-important-border: #8a5a8a;
|
||||||
|
--adm-warning-bg: #2e2e1a;
|
||||||
|
--adm-warning-border: #8a8a5a;
|
||||||
|
--adm-caution-bg: #2e1a1a;
|
||||||
|
--adm-caution-border: #8a5a5a;
|
||||||
|
--thead-bg: #111111;
|
||||||
|
}
|
||||||
27
styles/nord-light.root.css
Normal file
27
styles/nord-light.root.css
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
:root {
|
||||||
|
--bg: #eceff4;
|
||||||
|
--bg-deep: #d8dee9;
|
||||||
|
--fg: #2e3440;
|
||||||
|
--fg-muted: #4c566a;
|
||||||
|
--fg-link: #5e81ac;
|
||||||
|
--fg-heading: #3b4252;
|
||||||
|
--code-bg: #d8dee9;
|
||||||
|
--code-border: #c5cdd9;
|
||||||
|
--code-fg: #2e3440;
|
||||||
|
--code-sel: #d08770;
|
||||||
|
--code-prop: #5e81ac;
|
||||||
|
--code-val: #8fbcbb;
|
||||||
|
--code-var: #a3be8c;
|
||||||
|
--code-com: #4c566a;
|
||||||
|
--adm-note-bg: #d8dee9;
|
||||||
|
--adm-note-border: #5e81ac;
|
||||||
|
--adm-tip-bg: #e0ebd8;
|
||||||
|
--adm-tip-border: #a3be8c;
|
||||||
|
--adm-important-bg: #e5dbe8;
|
||||||
|
--adm-important-border: #b48ead;
|
||||||
|
--adm-warning-bg: #ede5d6;
|
||||||
|
--adm-warning-border: #ebcb8b;
|
||||||
|
--adm-caution-bg: #eddcdc;
|
||||||
|
--adm-caution-border: #bf616a;
|
||||||
|
--thead-bg: #d8dee9;
|
||||||
|
}
|
||||||
27
styles/nord.root.css
Normal file
27
styles/nord.root.css
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
:root {
|
||||||
|
--bg: #2e3440;
|
||||||
|
--bg-deep: #242933;
|
||||||
|
--fg: #d8dee9;
|
||||||
|
--fg-muted: #a5b0c1;
|
||||||
|
--fg-link: #88c0d0;
|
||||||
|
--fg-heading: #eceff4;
|
||||||
|
--code-bg: #3b4252;
|
||||||
|
--code-border: #4c566a;
|
||||||
|
--code-fg: #d8dee9;
|
||||||
|
--code-sel: #ebcb8b;
|
||||||
|
--code-prop: #8fbcbb;
|
||||||
|
--code-val: #81a1c1;
|
||||||
|
--code-var: #a3be8c;
|
||||||
|
--code-com: #616e88;
|
||||||
|
--adm-note-bg: #3b4252;
|
||||||
|
--adm-note-border: #88c0d0;
|
||||||
|
--adm-tip-bg: #3b4340;
|
||||||
|
--adm-tip-border: #a3be8c;
|
||||||
|
--adm-important-bg: #3b4044;
|
||||||
|
--adm-important-border: #b48ead;
|
||||||
|
--adm-warning-bg: #3b4038;
|
||||||
|
--adm-warning-border: #ebcb8b;
|
||||||
|
--adm-caution-bg: #3b3840;
|
||||||
|
--adm-caution-border: #bf616a;
|
||||||
|
--thead-bg: #3b4252;
|
||||||
|
}
|
||||||
27
styles/onedark.root.css
Normal file
27
styles/onedark.root.css
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
:root {
|
||||||
|
--bg: #282c34;
|
||||||
|
--bg-deep: #21252b;
|
||||||
|
--fg: #abb2bf;
|
||||||
|
--fg-muted: #636d83;
|
||||||
|
--fg-link: #61afef;
|
||||||
|
--fg-heading: #c8ccd4;
|
||||||
|
--code-bg: #21252b;
|
||||||
|
--code-border: #3e4451;
|
||||||
|
--code-fg: #abb2bf;
|
||||||
|
--code-sel: #e5c07b;
|
||||||
|
--code-prop: #e06c75;
|
||||||
|
--code-val: #56b6c2;
|
||||||
|
--code-var: #98c379;
|
||||||
|
--code-com: #5c6370;
|
||||||
|
--adm-note-bg: #2c313c;
|
||||||
|
--adm-note-border: #61afef;
|
||||||
|
--adm-tip-bg: #2c3a30;
|
||||||
|
--adm-tip-border: #98c379;
|
||||||
|
--adm-important-bg: #33303c;
|
||||||
|
--adm-important-border: #c678dd;
|
||||||
|
--adm-warning-bg: #3a352c;
|
||||||
|
--adm-warning-border: #e5c07b;
|
||||||
|
--adm-caution-bg: #3a2c2e;
|
||||||
|
--adm-caution-border: #e06c75;
|
||||||
|
--thead-bg: #21252b;
|
||||||
|
}
|
||||||
27
styles/onelight.root.css
Normal file
27
styles/onelight.root.css
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
:root {
|
||||||
|
--bg: #fafafa;
|
||||||
|
--bg-deep: #eaeaeb;
|
||||||
|
--fg: #383a42;
|
||||||
|
--fg-muted: #a0a1a7;
|
||||||
|
--fg-link: #4078f2;
|
||||||
|
--fg-heading: #383a42;
|
||||||
|
--code-bg: #eaeaeb;
|
||||||
|
--code-border: #d4d4d5;
|
||||||
|
--code-fg: #383a42;
|
||||||
|
--code-sel: #986801;
|
||||||
|
--code-prop: #e45649;
|
||||||
|
--code-val: #0184bc;
|
||||||
|
--code-var: #50a14f;
|
||||||
|
--code-com: #a0a1a7;
|
||||||
|
--adm-note-bg: #e8eefa;
|
||||||
|
--adm-note-border: #4078f2;
|
||||||
|
--adm-tip-bg: #e8f5e8;
|
||||||
|
--adm-tip-border: #50a14f;
|
||||||
|
--adm-important-bg: #f2e8f5;
|
||||||
|
--adm-important-border: #a626a4;
|
||||||
|
--adm-warning-bg: #f5f0e0;
|
||||||
|
--adm-warning-border: #986801;
|
||||||
|
--adm-caution-bg: #fae8e8;
|
||||||
|
--adm-caution-border: #e45649;
|
||||||
|
--thead-bg: #eaeaeb;
|
||||||
|
}
|
||||||
27
styles/rosepine-light.root.css
Normal file
27
styles/rosepine-light.root.css
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
:root {
|
||||||
|
--bg: #faf4ed;
|
||||||
|
--bg-deep: #f2e9e1;
|
||||||
|
--fg: #575279;
|
||||||
|
--fg-muted: #9893a5;
|
||||||
|
--fg-link: #907aa9;
|
||||||
|
--fg-heading: #286983;
|
||||||
|
--code-bg: #f2e9e1;
|
||||||
|
--code-border: #dfdad9;
|
||||||
|
--code-fg: #575279;
|
||||||
|
--code-sel: #ea9d34;
|
||||||
|
--code-prop: #b4637a;
|
||||||
|
--code-val: #56949f;
|
||||||
|
--code-var: #286983;
|
||||||
|
--code-com: #9893a5;
|
||||||
|
--adm-note-bg: #f0e8f5;
|
||||||
|
--adm-note-border: #907aa9;
|
||||||
|
--adm-tip-bg: #e8f0ee;
|
||||||
|
--adm-tip-border: #56949f;
|
||||||
|
--adm-important-bg: #f0e8f0;
|
||||||
|
--adm-important-border: #907aa9;
|
||||||
|
--adm-warning-bg: #f5f0e0;
|
||||||
|
--adm-warning-border: #ea9d34;
|
||||||
|
--adm-caution-bg: #f5e5e8;
|
||||||
|
--adm-caution-border: #b4637a;
|
||||||
|
--thead-bg: #f2e9e1;
|
||||||
|
}
|
||||||
27
styles/rosepine.root.css
Normal file
27
styles/rosepine.root.css
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
:root {
|
||||||
|
--bg: #191724;
|
||||||
|
--bg-deep: #13111e;
|
||||||
|
--fg: #e0def4;
|
||||||
|
--fg-muted: #908caa;
|
||||||
|
--fg-link: #c4a7e7;
|
||||||
|
--fg-heading: #ebbcba;
|
||||||
|
--code-bg: #1f1d2e;
|
||||||
|
--code-border: #26233a;
|
||||||
|
--code-fg: #e0def4;
|
||||||
|
--code-sel: #f6c177;
|
||||||
|
--code-prop: #eb6f92;
|
||||||
|
--code-val: #9ccfd8;
|
||||||
|
--code-var: #31748f;
|
||||||
|
--code-com: #6e6a86;
|
||||||
|
--adm-note-bg: #1f1d2e;
|
||||||
|
--adm-note-border: #c4a7e7;
|
||||||
|
--adm-tip-bg: #1a2332;
|
||||||
|
--adm-tip-border: #9ccfd8;
|
||||||
|
--adm-important-bg: #2a1f2e;
|
||||||
|
--adm-important-border: #c4a7e7;
|
||||||
|
--adm-warning-bg: #2a251f;
|
||||||
|
--adm-warning-border: #f6c177;
|
||||||
|
--adm-caution-bg: #2a1f22;
|
||||||
|
--adm-caution-border: #eb6f92;
|
||||||
|
--thead-bg: #1f1d2e;
|
||||||
|
}
|
||||||
27
styles/solarized-dark.root.css
Normal file
27
styles/solarized-dark.root.css
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
:root {
|
||||||
|
--bg: #002b36;
|
||||||
|
--bg-deep: #001e26;
|
||||||
|
--fg: #839496;
|
||||||
|
--fg-muted: #586e75;
|
||||||
|
--fg-link: #268bd2;
|
||||||
|
--fg-heading: #93a1a1;
|
||||||
|
--code-bg: #073642;
|
||||||
|
--code-border: #094959;
|
||||||
|
--code-fg: #839496;
|
||||||
|
--code-sel: #d33682;
|
||||||
|
--code-prop: #268bd2;
|
||||||
|
--code-val: #2aa198;
|
||||||
|
--code-var: #859900;
|
||||||
|
--code-com: #586e75;
|
||||||
|
--adm-note-bg: #073642;
|
||||||
|
--adm-note-border: #268bd2;
|
||||||
|
--adm-tip-bg: #07382e;
|
||||||
|
--adm-tip-border: #2aa198;
|
||||||
|
--adm-important-bg: #2a0736;
|
||||||
|
--adm-important-border: #d33682;
|
||||||
|
--adm-warning-bg: #363007;
|
||||||
|
--adm-warning-border: #b58900;
|
||||||
|
--adm-caution-bg: #360a07;
|
||||||
|
--adm-caution-border: #cb4b16;
|
||||||
|
--thead-bg: #073642;
|
||||||
|
}
|
||||||
27
styles/solarized.root.css
Normal file
27
styles/solarized.root.css
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
:root {
|
||||||
|
--bg: #fdf6e3;
|
||||||
|
--bg-deep: #eee8d5;
|
||||||
|
--fg: #657b83;
|
||||||
|
--fg-muted: #93a1a1;
|
||||||
|
--fg-link: #268bd2;
|
||||||
|
--fg-heading: #586e75;
|
||||||
|
--code-bg: #eee8d5;
|
||||||
|
--code-border: #d3cbb7;
|
||||||
|
--code-fg: #657b83;
|
||||||
|
--code-sel: #d33682;
|
||||||
|
--code-prop: #268bd2;
|
||||||
|
--code-val: #2aa198;
|
||||||
|
--code-var: #859900;
|
||||||
|
--code-com: #93a1a1;
|
||||||
|
--adm-note-bg: #eee8d5;
|
||||||
|
--adm-note-border: #268bd2;
|
||||||
|
--adm-tip-bg: #e8f5e0;
|
||||||
|
--adm-tip-border: #859900;
|
||||||
|
--adm-important-bg: #f0e8f5;
|
||||||
|
--adm-important-border: #6c71c4;
|
||||||
|
--adm-warning-bg: #fdf0e3;
|
||||||
|
--adm-warning-border: #b58900;
|
||||||
|
--adm-caution-bg: #fde8e8;
|
||||||
|
--adm-caution-border: #dc322f;
|
||||||
|
--thead-bg: #eee8d5;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user