From 05903eea532bfd18cfb4a289c9d3c57f62e9d20e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 31 Aug 2024 21:01:44 -0300 Subject: Import code from website repository --- src/html | 174 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100755 src/html (limited to 'src/html') diff --git a/src/html b/src/html new file mode 100755 index 0000000..007fcc2 --- /dev/null +++ b/src/html @@ -0,0 +1,174 @@ +#!/bin/sh +set -eu + +usage() { + echo 'Usage: html FILENAME' +} + +FILENAME="${1:-}" +eval "$(assert-arg -- "$FILENAME" 'FILENAME')" + +. "${FILENAME%.*}.conf" + +# +# Utility functions +# + +INDENT=' ' +markdown_to_html() { + md2html | awk -vINDENT="$INDENT" ' + BEGIN { + in_block = 0 + } + + { + if (in_block == 0) { + printf "%s", INDENT + } + print + } + + /^<\/code><\/pre>$/ { + in_block = 0 + } + + /^
 "$SNIPPETS"
+	F="$(mkstemp)"
+	cat > "$F"
+	IFS=''
+	BLOCK_NUMBER=0
+	IN_BLOCK=
+	while read -r line; do
+		if [ "$line" = '
' ]; then + IN_BLOCK= + fi + + if [ -n "$IN_BLOCK" ]; then + printf '%s\n' "$line" | htmlesc -d >> "$OUT" + fi + + if printf '%s' "$line" | grep -q "^$INDENT
\)\(.*\)$|\2|" |
+				htmlesc -d > "$OUT"
+			printf '%s\n' "$OUT" >> "$SNIPPETS"
+		fi
+	done < "$F"
+
+	BLOCK_NUMBER=0
+	while read -r line; do
+		printf '%s\n' "$line"
+
+		if [ "$line" = '
' ]; then + printf '%s\n' \ + "$INDENT" \ + "$(basename "${url_part:?}").$BLOCK_NUMBER.txt" + BLOCK_NUMBER=$((BLOCK_NUMBER + 1)) + fi + done < "$F" +) + +add_line_numbers() { + awk ' + /^<\/code><\/pre>$/ { + in_block = 0 + printf "%s\n", $0 + next + } + + match($0, /^( +
)(.*)$/, a) {
+			printf "%s", a[1]
+
+			n = 1
+			block_count++
+			printf "\n", block_count, n, block_count, n, n, a[2]
+			in_block = 1
+			next
+		}
+
+		in_block == 1 {
+			n++
+			printf "\n", block_count, n, block_count, n, n, $0
+			next
+		}
+
+		{ print }
+	'
+}
+
+add_headings_anchors() (
+	IFS=''
+	while read -r line; do
+		if ! printf '%s' "$line" | grep -q "^$INDENT"; then
+			printf '%s\n' "$line"
+			continue
+		fi
+		LVL="$(printf '%s' "$line" | sed "s|^$INDENT.*|\1|")"
+		HEADING="$(printf '%s' "$line" | sed "s|^$INDENT\(.*\)$|\1|")"
+		SLUG="$(slugify "$HEADING")"
+		printf '%s%s\n' \
+			"$INDENT"  \
+			"$LVL"     \
+			"$SLUG"    \
+			"$HEADING" \
+			"$SLUG"    \
+			"${icon_link_url:?}" \
+			"$LVL"
+	done
+)
+
+
+warn_duplicate_ids() {
+	F="$(mkstemp)"
+	tee "$F"
+	{
+		grep "^$INDENT.*&2 < "$F"
+	rm "$F"
+}
+
+emit_body() {
+	< "${FILENAME%.*}.content" \
+		markdown_to_html           |
+		extract_plaintext_snippets |
+		add_line_numbers           |
+		add_headings_anchors       |
+		warn_duplicate_ids
+}
+
+if [ -r "$FILENAME".prev ]; then
+	collection_head_prev_html="$(
+		printf '    ' \
+			"$(url-for < "$FILENAME".prev)"
+	)"
+	export collection_head_prev_html
+fi
+
+if [ -r "$FILENAME".next ]; then
+	collection_head_next_html="$(
+		printf '    ' \
+			"$(url-for < "$FILENAME".next)"
+	)"
+	export collection_head_next_html
+fi
+
+envsubst < lib/preamble.html  | sed '/^$/d'
+emit_body | tee "${FILENAME%.*}.htmlbody"
+envsubst < lib/postamble.html | sed '/^$/d'
-- 
cgit v1.2.3

%s%s
%s%s