aboutsummaryrefslogtreecommitdiffstats
path: root/bin/func
diff options
context:
space:
mode:
authorRomain Gonçalves <me@rgoncalves.se>2024-05-15 12:51:14 +0200
committerRomain Gonçalves <me@rgoncalves.se>2024-05-15 12:51:14 +0200
commit361ab306fbc8beb1732e1059ed0c093a2a03fb67 (patch)
treeda152d15c0bdd29bf8153452a00f9ddfe4123bb5 /bin/func
parent6fa675b60cc15350bb5cca3e29e7023b5100f86d (diff)
downloadrgoncalves.se-361ab306fbc8beb1732e1059ed0c093a2a03fb67.tar.gz
refactor: move static site generator out of the repo
Diffstat (limited to 'bin/func')
-rw-r--r--bin/func257
1 files changed, 0 insertions, 257 deletions
diff --git a/bin/func b/bin/func
deleted file mode 100644
index 0468b29..0000000
--- a/bin/func
+++ /dev/null
@@ -1,257 +0,0 @@
-#!/bin/sh
-
-media_dir="media"
-src_dir="src"
-tmp_dir="tmp"
-out_dir="out"
-
-tmp_file="${tmp_dir}/tmp"
-rss_dir="${src_dir}/b"
-rss_out_file="${out_dir}/rss.xml"
-
-website_domain="rgoncalves.se"
-website_title="${website_domain}"
-website_link="https://${website_domain}"
-website_email="contact@${website_domain}"
-website_generator="${website_domain}'s ssg"
-website_description="devops and hacker D:"
-website_language="en"
-
-date_default_hour="17:00:00"
-date_default_timezone="+0200"
-
-uname=$(uname)
-
-__sha256="sha256"
-
-if [ "${uname}" = "Linux" ]; then
- __sha256="sha256sum"
-fi
-
-__to_html_id() {
- cat /dev/stdin | sed 's/ /%20/g'
-}
-
-__get_value() {
- # 1: filename
- # 2: Attribute name
- # Retrieve and return the key/value of a lowdown source file.
- lowdown -T ms -X "${2}" "${1}" 2>/dev/null
-}
-
-__get_value_title() {
- # 1: filename
- # Get the title of a file and return a safe string.
- local _title
-
- _title="$(__get_value ${1} title || true)"
- if [ "${_title}" = "" ]; then
- _title="$(basename ${1} |
- rev |
- cut -d "." -f 2 |
- rev |
- sed 's/-/ /g')"
- fi
-
- echo "${_title}"
-}
-
-__get_value_date() {
- # 1: filename
- # Get the date of a file and return a safe string.
- local _date
-
- _date="$(__get_value ${1} date || true)"
- if [ "${_date}" = "" ]; then
- _date="1970-01-01"
- fi
-
- echo "${_date}"
-}
-
-__get_value_date_human() {
- # 1: filename
- # Get a human readable date from a file and return a safe string.
- if [ "${uname}" = "Linux" ]; then
- __get_value_date "${1}" | xargs date +"%d %b %Y" -d
- else
- __get_value_date "${1}" | xargs date -j -f "%Y-%m-%d" +"%d %b %Y"
- fi
-}
-
-__get_value_date_publication() {
- # 1: filename
- # Get publication date according to rfc 2822 and return a safe string.
- local _date
-
- _date="$(__get_value_date ${1})"
- _date="${_date} ${date_default_hour} ${date_default_timezone}"
-
- if [ "${uname}" = "Linux" ]; then
- date -d "${_date}" +"%a, %d %b %Y %H:%M:%S %z"
- else
- date -j -f "%Y-%m-%d %H:%M:%S %z" +"%a, %d %b %Y %H:%M:%S %z" "${_date}"
- fi
-}
-
-__get_out_filename() {
- # 1: filename
- # Convert the source filename to its output destination.
- local _filename
-
- _filename="${1}"
-
- if $(__get_value "${1}" draft || false); then
- _filename="$(dirname ${1})/$(basename ${1} | "${__sha256}").html"
- fi
-
- echo "${_filename}" |
- sed 's/.md$/.html/g' |
- sed "s/${src_dir}/${out_dir}/g"
-}
-
-__get_final_filename() {
- # 1: filename
- # Convert the source filename to its final filename for a webserver.
- __get_out_filename "${1}" | cut -d "/" -f 2-
-}
-
-__list_files() {
- # 1: directory
- # List all regular files in a directory and its subdirectories.
- find "${1}" -type f
-}
-
-__list_files_date() {
- # 1: directory
- local _files
- local _file
- local _tmp_file
-
- _files=$(__list_files "${1}")
- _tmp_file="${tmp_file}.list_files_date"
-
- cp /dev/null "${_tmp_file}"
-
- for _file in ${_files}; do
- echo "$(__get_value_date ${_file})" "${_file}" >> "${_tmp_file}"
- done
-
- sort -r "${_tmp_file}" | cut -d " " -f 2-
-}
-
-__install() {
- # 1: filename
- # Copy a file to the output directory.
- install -D -m 0644 "${1}" "${2}"
-}
-
-__lowdown() {
- # Output a file to html
- lowdown --html-no-skiphtml --html-no-escapehtml "${1}"
-}
-
-__generate_rss_body() {
- lowdown -tgemini "${1}" | sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/g'
-}
-
-__apply_template() {
- # 1: template name or default
- m4 "templates/${1:-default}"
-}
-
-__generate_index_line() {
- # 1: filename where index will be displayed
- # 2: filename contained in line
- local _show_date
-
- _show_date="$(__get_value ${1} index_date || echo false)"
-
- if "${_show_date}"; then
- cat <<-EOF
- <span>
- $(__get_value_date_human ${2})
- </span>
- EOF
- fi
-
- cat <<-EOF
- <a href="/$(__get_final_filename ${2})">
- $(__get_value_title ${2})
- </a>
- EOF
-}
-
-__generate_index() {
- # 1: filename
- # Generate and output to stdout the index of a file.
- local _file
- local _index_dir
-
- _index_dir="${src_dir}/$(__get_value "${1}" index)"
- [ -f "${_index_dir}" ] && _index_dir=$(dirname "${_index_dir}")
- [ ! -d "${_index_dir}" ] && return
-
- echo "<ul class=\"index\">"
-
- for _file in $(__list_files_date "${_index_dir}"); do
- [ "${1}" = "${_file}" ] && continue
- __get_value "${_file}" "draft" >/dev/null && continue
-
- echo "<li>"
- __generate_index_line "${1}" "${_file}"
- echo "</li>"
- done
-
- echo "</ul>"
-}
-
-__generate_metadata() {
- # 1: filename
- # Generate metadata with title
- local _title
- local _show_title
-
- _show_title=$(__get_value "${1}" show_title || true)
-
- if [ "${_show_title}" = "" ]; then
- _title=$(__get_value_title "${1}")
- _title_id=$(echo ${_title} | __to_html_id)
-
- cat <<-EOF
- <h1 id="${_title_id}">
- ${_title}
- </h1>
- EOF
- fi
-}
-
-__handle_md() {
- # 1: filename
- # Handle markdown files.
- __lowdown "${1}" > "${tmp_file}.body"
-
- __generate_metadata "${1}" > "${tmp_file}.metadata"
-
- if [ ! "$(__get_value "${1}" index)" = "" ]; then
- __generate_index "${1}" > "${tmp_file}.index"
- else
- [ -f "${tmp_file}.index" ] && rm "${tmp_file}.index"
- fi
-
- __apply_template "$(__get_value "${1}" template)" > "${tmp_file}"
- __install "${tmp_file}" "$(__get_out_filename "${1}")"
-}
-
-__handle() {
- # 1: filename
- # Handle file depending on its filename and filetype.
- case "${1}" in
- *.md)
- __handle_md "${1}"
- ;;
- *)
- __install "${1}" "$(__get_out_filename ${1})"
- ;;
- esac
-}
remember that computers suck.