aboutsummaryrefslogtreecommitdiff
path: root/v2/src/bin/extract
blob: 7bbcba704a89cba0851d2e26e502c31862643f0b (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
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/sh
set -eu


usage() {
	cat <<-'EOF'
		Usage:
		  extract -t TYPE FILENAME
		  extract -h
	EOF
}

help() {
	cat <<-'EOF'

		Options:
		  -t TYPE       the type of extraction to perform ("content" or "env")
		  -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 content:

		    $ extract -t content src/file.md > src/file.entry-content


		  Get the "frontmatter":

		    $ extract -t env src/f.md > src/f.entry-env
	EOF
}


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

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


FILENAME="${1:-}"
eval "$(assert-arg "$FILENAME" 'FILENAME')"
eval "$(assert-arg "$TYPE" '-t TYPE')"


case "$TYPE" in
	content)
		. "${FILENAME%.md}.entry-env"
		printf '%s\n' "$PREAMBLE"
		awk '
			separator >= 2
			/^---$/ { separator++ }
		' "$FILENAME"
		;;
	env)
		cat src/development/config.env
		awk '
			/^---$/ {
				if (++separator > 1) {
					exit
				} else {
					next
				}
			}

			{ print }
		' "$FILENAME"
		printf "FILENAME='%s'\n" "$FILENAME"
		cat <<-'REAL_EOF'
			TITLE="${TITLE:-$SITE_NAME}"

			URI_TITLE="$(printf '%s' "$TITLE" | uri)"

			URL="$(
			  printf '%s' "$FILENAME" |
			    sed \
			      -e 's|^src/content/||' \
			      -e 's|md$|html|'
			)"

			PREAMBLE="$(cat <<EOF
			# $TITLE

			<p class="timestamp">
			  Posted on <time datetime="$DATE">$(LANG="$LANGUAGE" date -d "$DATE" "$DATE_FMT")</time>
			</p>
			EOF
			)"
		REAL_EOF
		;;
	*)
		printf 'Bad value for TYPE: "%s".\n\n' \
			"$TYPE" >&2
		usage >&2
		exit 2
		;;
esac