blob: eacf2aea92f0a102a8b73cf45cabf7e07260762d (
plain) (
tree)
|
|
#!/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>"
}
|