summary refs log tree commit diff stats
path: root/ll
diff options
context:
space:
mode:
authorCase Duckworth2024-04-19 14:10:59 -0500
committerCase Duckworth2024-04-19 14:10:59 -0500
commitbc5d01c53a97d8cb652f87b16a63e0e258a051ab (patch)
treee25f7b0bda24f94e34434700a2250382f3a15441 /ll
parentUpdate base_url (diff)
downloadll-main.tar.gz
ll-main.zip
2024-04-19 main
Diffstat (limited to 'll')
-rwxr-xr-xll100
1 files changed, 57 insertions, 43 deletions
diff --git a/ll b/ll index 6ce90db..da9da55 100755 --- a/ll +++ b/ll
@@ -7,26 +7,35 @@ SITE_COPYRIGHT="Case Duckworth"
7BACK_LINK=index.html,back 7BACK_LINK=index.html,back
8 8
9wrap() { 9wrap() {
10 title="$(sed 1q "$1")" 10 title="$(sed 1q "$1")"
11 cat <<HEAD 11 cat <<HEAD
12<!DOCTYPE html> 12<!DOCTYPE html>
13<meta charset="utf8">
14<meta name="viewport" content="width=device-width, initial-scale=1">
13<title>$title</title> 15<title>$title</title>
14<style> 16<style>
15body{max-width:48em;font:20px/1.4 serif;margin:auto;padding:1em;} 17body{max-width:48em;font:20px/1.4 serif;margin:auto;padding:1em;
16footer{position:absolute;bottom:0;left:0;padding:1em;background:white;} 18margin-bottom:4em;}
19footer{position:fixed;bottom:0;left:0;padding:1em;background:white;}
17dt{font-weight:bold;} 20dt{font-weight:bold;}
18</style> 21</style>
19<body> 22<body>
20<!-- LIST_START --> 23<!-- LIST_START -->
21<h1>$title</h1> 24<h1>$title</h1>
22HEAD 25HEAD
23 cat 26 cat
24 cat <<FOOT 27 cat <<FOOT
25<!-- LIST_END --> 28<!-- LIST_END -->
26<footer> 29<footer>
27$(test "$2" && printf '<a href="%s">%s</a>' "${2%%,*}" "${2##*,}") 30$(test "$2" && printf '<a href="%s">%s</a>' "${2%%,*}" "${2##*,}")
28$(case "$1" in (*index*) printf '<a href="%s">%s</a>' \ 31$(case "$1" in (*index*)
29 "$BASE_URL/feed.xml" feed ;; esac) 32 echo '<ul style="margin:0;padding:0;">'
33 printf '<li style="list-style:none;margin:0"><a href="%s">%s</a></li>\n' \
34 "$BASE_URL/feed.xml" feed \
35 "https://git.acdw.net/ll" source \
36 "https://www.acdw.net" home
37 echo "</ul>"
38 ;; esac)
30</footer> 39</footer>
31</body></html> 40</body></html>
32FOOT 41FOOT
@@ -44,7 +53,7 @@ al()(list ul -F"\n" -vRS= '{printf "<li><a href=\"%s\">%s</a></li>\n",$1,$2}')
44dl()(list dl -F"\n" -vRS= '{printf "<dt>%s</dt>\n<dd>%s</dd>\n",$1,$2}') 53dl()(list dl -F"\n" -vRS= '{printf "<dt>%s</dt>\n<dd>%s</dd>\n",$1,$2}')
45 54
46rss() { 55rss() {
47 cat <<HEAD 56 cat <<HEAD
48<?xml version="1.0" encoding="utf-8"?> 57<?xml version="1.0" encoding="utf-8"?>
49<feed xmlns="http://www.w3.org/2005/Atom"> 58<feed xmlns="http://www.w3.org/2005/Atom">
50<title>$(sed 1q index.al)</title> 59<title>$(sed 1q index.al)</title>
@@ -54,29 +63,22 @@ rss() {
54<rights>$SITE_COPYRIGHT</rights> 63<rights>$SITE_COPYRIGHT</rights>
55<updated>$(date +%FT%TZ)</updated> 64<updated>$(date +%FT%TZ)</updated>
56HEAD 65HEAD
57 # entries 66 # entries
58 awk -F"\n" -vRS= \ 67 awk -F"\n" -vRS= \
59 -vbase="$BASE_URL" \ 68 -vbase="$BASE_URL" \
60 -vauthor="$SITE_COPYRIGHT" \ 69 -vauthor="$SITE_COPYRIGHT" \
61 'NR==1{next} 70 'NR==1{next}
62{ url=$1; title=$2; 71{ url=$1; title=$2; updated=$3;
63 file=url; sub(base "/", "", file) 72 file=url; sub(base "/", "", file)
64 printf "<entry>\n<id>%s</id>\n", url 73 printf "<entry>\n<id>%s</id>\n", url
65 printf "<link rel=\"alternate\" href=\"%s\" />\n", url 74 printf "<link rel=\"alternate\" href=\"%s\" />\n", url
66 printf "<title>%s</title>\n", title 75 printf "<title>%s</title>\n", title
67 printf "<author><name>%s</name></author>\n", author 76 printf "<author><name>%s</name></author>\n", author
68 printf "<updated>%s</updated>\n", updated(file) 77 printf "<updated>%s</updated>\n", updated
69 printf "<content type=\"html\"><![CDATA[%s]]></content>\n", 78 printf "<content type=\"html\"><![CDATA[%s]]></content>\n",
70 slurp(file) 79 slurp(file)
71 printf "</entry>\n" 80 printf "</entry>\n"
72} 81}
73function updated (file) {
74 cmd = "stat -c %y " file " 2>/dev/null"
75 cmd = cmd " || stat -f %Sm -t %FT%TZ " file " 2>/dev/null"
76 cmd | getline upd
77 close(cmd)
78 return upd
79}
80function slurp (file, out, bodyp) { 82function slurp (file, out, bodyp) {
81 oldRS=RS; RS="\n" 83 oldRS=RS; RS="\n"
82 while ((getline < file) > 0) { 84 while ((getline < file) > 0) {
@@ -87,32 +89,44 @@ function slurp (file, out, bodyp) {
87 RS=oldRS 89 RS=oldRS
88 return out 90 return out
89}' 91}'
90 cat <<FOOT 92 cat <<FOOT
91</feed> 93</feed>
92FOOT 94FOOT
93} 95}
94 96
97modtime() {
98 mtime="$(stat -c%Y "$1" 2>/dev/null ||
99 stat -f%Sm -t%FT%TZ "$1" 2>/dev/null)"
100 if test -n "$mtime"
101 then
102 # busybox date
103 date -u -d "@$mtime" +%FT%TZ
104 fi
105}
106
95# Main 107# Main
96main() { 108main() {
97 printf "%s\n\n" "$SITE_TITLE" > index.al 109 printf "%s\n\n" "$SITE_TITLE" > index.al
98 ls -t *.ul *.dl *.ol *.al 2>/dev/null | 110 ls -t *.ul *.dl *.ol *.al 2>/dev/null |
99 sed '/index.al/d' | 111 sed '/index.al/d' |
100 while read -r lst 112 while read -r lst
101 do 113 do
102 printf >&2 "Processing %s..." "$lst" 114 printf >&2 "Processing %s..." "$lst"
103 "${lst##*.}" < "$lst" | 115 "${lst##*.}" < "$lst" |
104 wrap "$lst" "$BACK_LINK" > "${lst%%.*}.html" 116 wrap "$lst" "$BACK_LINK" > "${lst%%.*}.html"
105 echo "$BASE_URL/${lst%%.*}.html" >> index.al 117 printf '%s\n%s\n%s\n\n' \
106 echo "$(sed 1q "$lst")" >> index.al 118 "$BASE_URL/${lst%%.*}.html" \
107 echo >> index.al 119 "$(sed 1q "$lst")" \
108 echo >&2 ok 120 "$(modtime "$lst")" \
109 done 121 >> index.al
110 printf >&2 "Processing index..." 122 echo >&2 ok
111 al < index.al | wrap index.al > index.html && 123 done
112 echo >&2 ok 124 printf >&2 "Processing index..."
113 printf >&2 "Processing rss..." 125 al < index.al | wrap index.al > index.html &&
114 rss < index.al > feed.xml && 126 echo >&2 ok
115 echo >&2 ok 127 printf >&2 "Processing rss..."
128 rss < index.al > feed.xml &&
129 echo >&2 ok
116} 130}
117 131
118main "$@" 132main "$@"