aboutsummaryrefslogblamecommitdiffstats
path: root/bin/ssg-template
blob: eacf2aea92f0a102a8b73cf45cabf7e07260762d (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12











                                      





                                                           
                             

                       








                                             








                                                                                   









                                                






                                                                  










































































                                                                         

                   



                                          








                                                               



                                        













                                                                     
                                                                   


                                                                             
                           

                                                                       


                                                       



















                                                                
#!/bin/sh

SRC_FILE="${1}"

_echo_ifset() {
	[ ! -z "${1}" ] && echo "${1}"
}

_get_value() {
	# 1: filename
	# 2: key
	# stdout: value
	local value
	local ret

	value=$(lowdown -T ms -X "${2}" "${1}" 2>/dev/null)
	ret="${?}"

	echo "${value:-${3}}"

	return "${ret}"
}

_get_value_date() {
	_get_value "${1}" "${2}" "1970-01-01"
}

_get_out_path() {
	# 1: filename
	# stdout: filename
	local path

	path=$(echo "${1}" | sed -e 's/^src/out/g' -e 's/.md$/.html/g' -e 's/_//g')

	if _get_value "${1}" "draft" >/dev/null; then
		path="$(dirname ${path})/$(echo ${path} | sha1).html"
	fi

	echo "${path}"
}

_get_final_path() {
	# 1: filename
	# stdout: filename
	_get_out_path "${1}" | sed 's/^out\///g'
}

_get_title() {
	# 1: filename
	local title
	local file_title

	file_title=$(basename "${1}" | sed 's/\..*//g' | tr - " ")
	title=$(_get_value "${1}" "title" "${file_title}")

	echo "${title}"
}

_get_date_human() {
	# 1: filename
	date -j -f "%Y-%m-%d" $(_get_value_date ${1} "date") +"%B %d, %Y"
}

_get_index_files() {
	# 1: filename
	local path

	path=$(_get_value "${1}" index)
	find "src/${path}" -mindepth 1 -maxdepth 1
}

_sort_index_per_date() {
	# 1: filename
	local files
	local file
	local date

	for file in $(_get_index_files "${1}"); do
		date=$(_get_value_date "${file}" "date")
		files="${files} ${date}@${file}"
	done

	echo ${files} | tr " " "\n" | sort -rn | cut -d "@" -f 2
}

_get_filetype() {
	# 1: filename
	local filetype

	filetype=$(ls -ld "${1}" | cut -c 1)

	case "${filetype}" in
		-)
			filetype="file"
			;;
		d)
			filetype="directory"
			;;
	esac

	echo "${filetype}"
}

_get_chapters() {
	# 1: filename
	grep "^#" "${1}" | sed 's/# /#_/g'
}

_get_chapter_title() {
	# 1: chapter
	echo "${1}" | sed -e 's/#_//' -e 's/#//g'
}

_parse_option() {
	# 1: metadata
	# 2: key
	echo "${metadata}" | grep "^${2}"
}

_cleanup_tmp_file() {
	[ -f "${1}" ] && rm "${1}"
}

_parse_metadata() {
	# 1: filename
	sed -n '/^$/q;p' "${file}" | grep "^.*: .*$"
}

_render_metadata() {
	# 1: filename
	# 2: output
	local key
	local value
	local title

	# _ENABLED_METADATA="date author"
	title=$(_get_value "${1}" "title")

	echo "<ul class=\"metadata\">"
	for key in ${_ENABLED_METADATA}; do
		value=$(lowdown -X "${key}" "${1}" 2>/dev/null)
		[ -z "${value}" ] && continue

		echo "<li>${key}: ${value}</li>"
	done
	echo "</ul>"

	if [ "${title}" ]; then
		echo "<h1>${title}</h1>"
	fi
}

_render_index() {
	# 1: filename
	# 2: out
	# 3: path
	local file
	local path
	local title

	echo "<ul class=\"index\">"
	for file in $(_sort_index_per_date "${1}"); do
		path=$(_get_final_path "${file}")
		[ "${path}" = "$(_get_final_path ${1})" ] && continue
		_get_value "${file}" "draft" >/dev/null && continue

		title=$(_get_value "${file}" "title" "$(_get_title ${file})")

		echo "<li>"
		if _get_value "${1}" "index_show_date" >/dev/null; then
			echo "<span>$(_get_date_human ${file})</span>"
		fi
		echo "<a href=\"${path}\">${title}</a>"
		echo "</li>"
	done
	echo "</ul>"
}

_render_toc() {
	local chapter
	local chapter_title

	echo "<ul class=\"toc\">"
	for chapter in $(_get_chapters "${1}"); do
		chapter_title=$(_get_chapter_title "${chapter}")

		cat <<-EOF
		<li>
		<a href=#${chapter_title}>${chapter_title}</a>
		</li>
		EOF
	done
	echo "</ul>"
}
remember that computers suck.