From 419cd721024f5ebc364cdd9014222e0a48221ac7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Apr 2023 17:24:12 -0300 Subject: v2/: HTML! Handle pages, multiple languages, and snippets --- v2/.gitignore | 8 ++ v2/dynamic.mk | 36 ++++--- v2/po/euandre.org.pot | 38 ++++++- v2/po/po4a.cfg | 3 + v2/po/pt.po | 35 ++++++- v2/src/bin/makemake | 13 ++- v2/src/content/about.md | 17 ++++ v2/src/content/img/envelope.svg | 1 + v2/src/content/img/lock.svg | 1 + v2/src/content/tils/lisp-three-way-conditional.md | 2 +- v2/src/development/genhtml.sh | 36 ++++++- v2/src/development/getconf.sh | 116 +++++++++++++--------- v2/src/lib/base-conf.in | 19 ++-- v2/src/lib/base.en.conf | 8 +- v2/src/lib/base.pt.conf | 8 +- v2/src/lib/comment.en.html | 8 ++ v2/src/lib/comment.pt.html | 6 ++ v2/src/lib/date.en.html | 3 + v2/src/lib/date.pt.html | 3 + v2/src/lib/postamble.html | 23 +---- v2/src/lib/preamble.html | 6 +- v2/src/lib/update.en.html | 3 + v2/src/lib/update.pt.html | 3 + 23 files changed, 279 insertions(+), 117 deletions(-) create mode 100644 v2/src/content/about.md create mode 120000 v2/src/content/img/envelope.svg create mode 120000 v2/src/content/img/lock.svg create mode 100644 v2/src/lib/comment.en.html create mode 100644 v2/src/lib/comment.pt.html create mode 100644 v2/src/lib/date.en.html create mode 100644 v2/src/lib/date.pt.html create mode 100644 v2/src/lib/update.en.html create mode 100644 v2/src/lib/update.pt.html diff --git a/v2/.gitignore b/v2/.gitignore index 5dba3e2..0f413a8 100644 --- a/v2/.gitignore +++ b/v2/.gitignore @@ -3,7 +3,15 @@ /src/lib/base-conf /src/development/security-txt.sh /public/ +/src/content/*.conf +/src/content/*.content +/src/content/*.html +/src/content/*.md.tmp +/src/content/*.snippets +/src/content/*.html.*.txt /src/content/*/*.conf /src/content/*/*.content /src/content/*/*.html /src/content/*/*.md.tmp +/src/content/*/*.snippets +/src/content/*/*.html.*.txt diff --git a/v2/dynamic.mk b/v2/dynamic.mk index dc5e64e..238e6e9 100644 --- a/v2/dynamic.mk +++ b/v2/dynamic.mk @@ -55,7 +55,7 @@ clean: public/ $(derived-assets) *.sentinel generated.mk -public: $(favicons) public-copy-content.sentinel +public: $(favicons) public-copy-content.sentinel public-copy-code-snippets.sentinel public-mkdir.sentinel: mkdir -p public @@ -67,18 +67,29 @@ public/favicon.png: public-mkdir.sentinel src/content/favicon.svg public/favicon.ico: public-mkdir.sentinel src/content/favicon.svg convert src/content/favicon.svg $@ -public-copy-content.sentinel: $(all-generated.html) $(static-content) \ - src/content/public.asc.txt src/content/.well-known/security.txt - echo $? | \ - tr ' ' '\n' | \ - sed 's|^src/content/||' | \ - tee $@-tmp | \ - xargs dirname | \ - sort | \ - uniq | \ +content = \ + $(all-generated.html) \ + $(static-content) \ + src/content/public.asc.txt \ + src/content/.well-known/security.txt \ + +public-copy-content.sentinel: $(content) public-content-mkdir.sentinel + echo $? | tr ' ' '\n' | grep '^src/content/' | sed 's|^src/content/||' | \ + xargs -P`nproc` -I% cp src/content/% public/% + touch $@ + +public-copy-code-snippets.sentinel: $(all-generated.snippets) public-content-mkdir.sentinel + echo $? | tr ' ' '\n' | grep '^src/content/' | sed 's|^src/content/||' | \ + awk '{ printf "cp `cat src/content/%s` public/`dirname %s`\n", $$0, $$0 }' | \ + sh + touch $@ + +public-content-mkdir.sentinel: $(content) $(all-generated.snippets) + echo $? | tr ' ' '\n' | grep '^src/content/' | sed 's|^src/content/||' | \ + xargs dirname | \ + sort | \ + uniq | \ xargs -P`nproc` -I% mkdir -p public/% - xargs -P`nproc` -I% cp src/content/% public/% < $@-tmp - rm -f $@-tmp touch $@ src/content/public.asc.txt: @@ -93,6 +104,7 @@ test-files = \ aux/checks/shellcheck.sh \ aux/checks/todos.sh \ +aux/checks/shellcheck.sh: src/lib/base-conf $(test-files): ALWAYS sh $@ diff --git a/v2/po/euandre.org.pot b/v2/po/euandre.org.pot index 626385f..6a9d04f 100644 --- a/v2/po/euandre.org.pot +++ b/v2/po/euandre.org.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2023-04-04 13:10-0300\n" +"POT-Creation-Date: 2023-04-04 17:03-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,20 +18,48 @@ msgstr "" #. type: Plain text #: src/lib/base.en.conf:2 -msgid "date_fmt='%B %-d, %Y'" +msgid "export date_fmt='%B %-d, %Y'" msgstr "" #. type: Plain text #: src/lib/base.en.conf:4 -msgid "site_name=\"EuAndreh's website\"" +msgid "export site_name=\"EuAndreh's website\"" msgstr "" #. type: Plain text #: src/lib/base.en.conf:6 -msgid "about='About'" +msgid "export about='About'" msgstr "" #. type: Plain text #: src/lib/base.en.conf:7 -msgid "about_url_name='about.html'" +msgid "export about_url_name='about.html'" +msgstr "" + +#. type: Content of:

+#: src/lib/comment.en.html:2 +msgid "" +"Comment and see existing discussions | view source" +msgstr "" + +#. type: Content of:

+#: src/lib/date.en.html:2 +msgid "Posted on" +msgstr "" + +#. type: Content of:

+#: src/lib/update.en.html:2 +msgid "Updated on" +msgstr "" + +#. type: Content of:

+#: src/lib/comment.en.html:2 +msgid "" +"Comment and see existing discussions | view source" +msgstr "" + +#. type: Content of:

+#: src/lib/date.en.html:2 +msgid "Posted on" +msgstr "" + +#. type: Content of:

+#: src/lib/update.en.html:2 +msgid "Updated on" +msgstr "" + +#. type: Content of:

 "$F"
 	(
@@ -112,13 +134,14 @@ extract_plaintext_snippets() {
 				printf '%s\n' "$line" | htmlesc -d >> "$OUT"
 			fi
 
-			if printf '%s' "$line" | grep -q '^
'; then
+			if printf '%s' "$line" | grep -q "^$INDENT
\)\(.*\)$|\2|' |
+					sed "s|^\($INDENT
\)\(.*\)$|\2|" |
 					htmlesc -d > "$OUT"
+				printf '%s\n' "$OUT" >> "$SNIPPETS"
 			fi
 		done < "$F"
 
@@ -127,7 +150,9 @@ extract_plaintext_snippets() {
 			printf '%s\n' "$line"
 
 			if [ "$line" = '
' ]; then - printf '\n' "$(url-for "$URL")" "$BLOCK_NUMBER" + printf '%s\n' \ + "$INDENT" \ + "$(basename "${url_part:?}").$BLOCK_NUMBER.txt" BLOCK_NUMBER=$((BLOCK_NUMBER + 1)) fi done < "$F" @@ -143,7 +168,7 @@ add_line_numbers() { next } - match($0, /^(
)(.*)$/, a) {
+		match($0, /^( +
)(.*)$/, a) {
 			printf "%s", a[1]
 
 			n = 1
@@ -194,4 +219,5 @@ emit_body() {
 }
 
 envsubst < src/lib/preamble.html
+emit_body
 envsubst < src/lib/postamble.html
diff --git a/v2/src/development/getconf.sh b/v2/src/development/getconf.sh
index aa90706..3f7ccd2 100755
--- a/v2/src/development/getconf.sh
+++ b/v2/src/development/getconf.sh
@@ -73,58 +73,78 @@ escape() {
 	sed 's|\([`"$]\)|\\\1|g'
 }
 
-{
-	tee "$FILENAME".tmp < src/lib/base-conf
-	DELIMITER=0
-	while read -r line; do
-		if [ "$line" = '---' ]; then
-			DELIMITER=$((DELIMITER + 1))
-			continue
-		fi
-		if [ "$DELIMITER" = 2 ]; then
-			break
-		fi
-		if [ -z "$line" ]; then
-			continue
-		fi
-
-		KEY="$(  printf '%s' "$line" | cut -d: -f1)"
-		VALUE="$(printf '%s' "$line" | cut -d: -f2- | sed 's|^ ||' | escape)"
-		printf '%s="%s"\n' "$KEY" "$VALUE"
-	done < "$FILENAME" | tee -a "$FILENAME".tmp
-	# shellcheck source=/dev/null
-	. "$FILENAME".tmp
-
-	cat src/lib/base."${lang:?}".conf
-	# shellcheck source=/dev/null
-	. src/lib/base."$lang".conf
-
-	if [ -z "${title:-}" ]; then
-		title="${site_name:?}"
-		printf 'title="%s"\n' "$(printf '%s' "$title" | escape)"
+tee "$FILENAME".tmp < src/lib/base-conf
+DELIMITER=0
+while read -r line; do
+	if [ "$line" = '---' ]; then
+		DELIMITER=$((DELIMITER + 1))
+		continue
 	fi
-
-	if [ -z "${date:-}" ]; then
-		printf 'date_formatted="%s"\n' "$(LANG="$lang" date -d "${date:?}" +"${date_fmt:?}" | escape)"
+	if [ "$DELIMITER" = 2 ]; then
+		break
+	fi
+	if [ -z "$line" ]; then
+		continue
 	fi
 
-	url_part="$(printf '%s' "${FILENAME%.md}.html" | sed 's|^src/content/||')"
+	KEY="$(  printf '%s' "$line" | cut -d: -f1)"
+	VALUE="$(printf '%s' "$line" | cut -d: -f2- | sed 's|^ ||' | escape)"
+	printf 'export %s="%s"\n' "$KEY" "$VALUE"
+done < "$FILENAME" | tee -a "$FILENAME".tmp
+# shellcheck source=/dev/null
+. "$FILENAME".tmp
+rm -f "$FILENAME".tmp
+
+cat src/lib/base."${lang:?}".conf
+# shellcheck source=/dev/null
+. src/lib/base."$lang".conf
+if [ -z "${title:-}" ]; then
+	title="${site_name:?}"
+	printf 'export title="%s"\n' "$(printf '%s' "$title" | escape)"
+fi
+
+if [ -n "${date:-}" ]; then
+	formatted_date="$(LANG="$lang" date -d "${date:?}" +"${date_fmt:?}")"
+	export formatted_date
+	printf 'export date_html="%s"\n' "$(envsubst < src/lib/date."$lang".html | escape)"
+fi
+
+if [ -n "${update:-}" ]; then
+	formatted_update="$(LANG="$lang" date -d "${update:?}" +"${date_fmt:?}")"
+	export formatted_update
+	printf 'export update_html="%s"\n' "$(envsubst < src/lib/update."$lang".html | escape)"
+fi
+
+
+url_part="$(printf '%s' "${FILENAME%.md}.html" | sed 's|^src/content/||')"
+title_uri="$(uri "$title")"
+
+printf 'export title_html="%s"\n' "$(printf '%s' "$title" | htmlesc | escape)"
+printf 'export filename="%s"\n' "$FILENAME"
+printf 'export url_part="%s"\n' "$url_part"
+printf 'export url="%s"\n' "$(url-for "$url_part" | absolute)"
+printf 'export mailto_uri="%s%s"\n' "${mailto_uri_prefix:?}" "$title_uri"
+printf 'export discussions_url="%s%s"\n' "${discussions_url_prefix:?}" "$title_uri"
+printf 'export sourcecode_url="%s%s"\n' "${sourcecode_url_prefix:?}" "$FILENAME"
+
+printf 'export style_url="%s"\n'   "$(url-for -g 'style.css')"
+printf 'export favicon_url="%s"\n' "$(url-for -g 'favicon.svg')"
+printf 'export pubkey_url="%s"\n'  "$(url-for -g 'public.asc.txt')"
+
+for f in src/content/img/*.svg; do
+	name="$(basename "$f" .svg | sed 's|-|_|g')"
+	printf 'export icon_%s_url="%s"\n' "$name" "$(url-for -g "img/$(basename "$f")")"
+done
 
-	printf 'title_html="%s"\n' "$(printf '%s' "$title" | htmlesc | escape)"
-	printf 'filename="%s"\n' "$FILENAME"
-	printf 'url_part="%s"\n' "$url_part"
-	printf 'url="%s"\n' "$(url-for "$url_part" | absolute)"
-	printf 'mailto_uri="%s%s"\n' "${mailto_uri_prefix:?}" "$(uri "$title")"
-	printf 'discussions_url="%s%s"\n' "${discussions_url_prefix:?}" "$(uri "$title")"
-	printf 'sourcecode_url="%s%s"\n' "${sourcecode_url_prefix:?}" "$FILENAME"
+# FIXME: special treatment of root
+printf 'export homepage_url="%s"\n' "$(url-for '/')"
 
-	printf 'style_url="%s"\n'   "$(url-for -g 'style.css')"
-	printf 'favicon_url="%s"\n' "$(url-for -g 'favicon.svg')"
+printf 'export about_url="%s"\n' "$(url-for "${about_url_name:?}")"
 
-	# FIXME: special treatment of root
-	printf 'homepage_url="%s"\n' "$(url-for '/')"
-	
-	printf 'about_url="%s"\n' "$(url-for "${about_url_name:?}")"
 
-	rm -f "$FILENAME".tmp
-} | grep . | sed 's|^|export |'
+if [ "${layout:-}" = 'post' ]; then
+	export mailto_uri="$mailto_uri_prefix$title_uri"
+	export discussions_url="$discussions_url_prefix$title_uri"
+	export sourcecode_url="$sourcecode_url_prefix$FILENAME"
+	printf 'export comment_html="%s"\n' "$(envsubst < src/lib/comment."$lang".html | escape)"
+fi
diff --git a/v2/src/lib/base-conf.in b/v2/src/lib/base-conf.in
index c065807..4ec09cb 100644
--- a/v2/src/lib/base-conf.in
+++ b/v2/src/lib/base-conf.in
@@ -1,9 +1,10 @@
-domain='@DOMAIN@'
-email='@EMAIL@'
-base_url=''
-list_addr='~euandreh/public-inbox@lists.sr.ht'
-mailto_uri_prefix="mailto:$list_addr?Subject=Re%3A%20"
-discussions_url_prefix="https://lists.sr.ht/~euandreh/public-inbox?search="
-sourcecode_url_prefix="https://$domain/git/$domain/tree/"
-author='EuAndreh'
-lang='en'
+export domain='@DOMAIN@'
+export email='@EMAIL@'
+export base_url=''
+export list_addr='~euandreh/public-inbox@lists.sr.ht'
+export mailto_uri_prefix="mailto:$list_addr?Subject=Re%3A%20"
+export discussions_url_prefix="https://lists.sr.ht/~euandreh/public-inbox?search="
+export sourcecode_url_prefix="https://$domain/git/$domain/tree/"
+export author='EuAndreh'
+export lang='en'
+export pubkey_id='81F90EC3CD356060' # FIXME
diff --git a/v2/src/lib/base.en.conf b/v2/src/lib/base.en.conf
index 6090d54..52aede3 100644
--- a/v2/src/lib/base.en.conf
+++ b/v2/src/lib/base.en.conf
@@ -1,7 +1,7 @@
-date_fmt='%B %-d, %Y'
+export date_fmt='%B %-d, %Y'
 
-site_name="EuAndreh's website"
+export site_name="EuAndreh's website"
 
-about='About'
+export about='About'
 
-about_url_name='about.html'
+export about_url_name='about.html'
diff --git a/v2/src/lib/base.pt.conf b/v2/src/lib/base.pt.conf
index 6090d54..52aede3 100644
--- a/v2/src/lib/base.pt.conf
+++ b/v2/src/lib/base.pt.conf
@@ -1,7 +1,7 @@
-date_fmt='%B %-d, %Y'
+export date_fmt='%B %-d, %Y'
 
-site_name="EuAndreh's website"
+export site_name="EuAndreh's website"
 
-about='About'
+export about='About'
 
-about_url_name='about.html'
+export about_url_name='about.html'
diff --git a/v2/src/lib/comment.en.html b/v2/src/lib/comment.en.html
new file mode 100644
index 0000000..6646b14
--- /dev/null
+++ b/v2/src/lib/comment.en.html
@@ -0,0 +1,8 @@
+        
+ diff --git a/v2/src/lib/comment.pt.html b/v2/src/lib/comment.pt.html new file mode 100644 index 0000000..c703847 --- /dev/null +++ b/v2/src/lib/comment.pt.html @@ -0,0 +1,6 @@ +
+ diff --git a/v2/src/lib/date.en.html b/v2/src/lib/date.en.html new file mode 100644 index 0000000..0911bac --- /dev/null +++ b/v2/src/lib/date.en.html @@ -0,0 +1,3 @@ +

+ Posted on +

diff --git a/v2/src/lib/date.pt.html b/v2/src/lib/date.pt.html new file mode 100644 index 0000000..0911bac --- /dev/null +++ b/v2/src/lib/date.pt.html @@ -0,0 +1,3 @@ +

+ Posted on +

diff --git a/v2/src/lib/postamble.html b/v2/src/lib/postamble.html index ada5524..00dc1dc 100644 --- a/v2/src/lib/postamble.html +++ b/v2/src/lib/postamble.html @@ -1,31 +1,16 @@ -

- Comment - and see - existing discussions - | - view source -

- - - +$comment_html

diff --git a/v2/src/lib/preamble.html b/v2/src/lib/preamble.html index 3eac6ea..6e0bd30 100644 --- a/v2/src/lib/preamble.html +++ b/v2/src/lib/preamble.html @@ -28,10 +28,8 @@

- dollar emit_body

$title_html

-

- FIXME Posted on -

+$date_html +$update_html diff --git a/v2/src/lib/update.en.html b/v2/src/lib/update.en.html new file mode 100644 index 0000000..99760cb --- /dev/null +++ b/v2/src/lib/update.en.html @@ -0,0 +1,3 @@ +

+ Updated on +

diff --git a/v2/src/lib/update.pt.html b/v2/src/lib/update.pt.html new file mode 100644 index 0000000..99760cb --- /dev/null +++ b/v2/src/lib/update.pt.html @@ -0,0 +1,3 @@ +

+ Updated on +

-- cgit v1.2.3