aboutsummaryrefslogblamecommitdiff
path: root/v2/src/bin/extract
blob: 7bbcba704a89cba0851d2e26e502c31862643f0b (plain) (tree)
1
2
3
4
5
6
7
8






                      
                                          










                                                                                      


                                                                              

                                                                         
                                                 





                                  
                                                                             



                                        
                                                               






































                                      

                                           




                                      

                                             


                                               
                             

                  
                                              









                                                      

                                                    




















                                                                                                                 







                                                        
#!/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