aboutsummaryrefslogtreecommitdiff
path: root/v2/src/development/getconf.sh
blob: 4b615a86f832784dbb0500059be627243b07d99f (about) (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/bin/sh
set -eu


usage() {
	cat <<-'EOF'
		Usage:
		  src/development/getconf.sh FILENAME
		  src/development/getconf.sh -h
	EOF
}

help() {
	cat <<-'EOF'

		Options:
		  -h, --help    show this message

		  FILENAME      the name of the input file, also to be used as
		                URL.


		Separate the content from the "frontmatter", and emit the
		selected one, given the FILENAME.


		Examples:

		  Get the "frontmatter" of src/f.conf:

		    $ src/development/getconf.sh src/f.md > src/f.conf
	EOF
}


for flag in "$@"; do
	case "$flag" in
		--)
			break
			;;
		--help)
			usage
			help
			exit
			;;
		*)
			;;
	esac
done

while getopts 'h' flag; do
	case "$flag" in
		h)
			usage
			help
			exit
			;;
		*)
			usage >&2
			exit 2
			;;
	esac
done
shift $((OPTIND - 1))

. src/development/lib.sh

FILENAME="${1:-}"
eval "$(assert_arg "$FILENAME" 'FILENAME')"


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

	title="${title:-"$site_name"}"
	url_part="$(printf '%s' "${FILENAME%.md}.html" | sed 's|^src/content/||')"

	printf 'title="%s"\n' "$(printf '%s' "$title" | escape)"
	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 'date_formatted="%s"\n' "$(LANG="$lang" date -d "${date:?}" +"${date_fmt:?}" | escape)"
	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"

	printf 'lang_url="%s"\n' "$(url-for "$lang"/)"

	printf 'style_url="%s"\n' "$(url-for 'style.css')"
	printf 'favicon_url="%s"\n' "$(url-for 'favicon.svg')"

	rm -f "$FILENAME".tmp
} | grep . | sed 's|^|export |'