diff options
author | Romain Gonçalves <me@rgoncalves.se> | 2024-05-15 12:51:14 +0200 |
---|---|---|
committer | Romain Gonçalves <me@rgoncalves.se> | 2024-05-15 12:51:14 +0200 |
commit | 361ab306fbc8beb1732e1059ed0c093a2a03fb67 (patch) | |
tree | da152d15c0bdd29bf8153452a00f9ddfe4123bb5 /bin/func | |
parent | 6fa675b60cc15350bb5cca3e29e7023b5100f86d (diff) | |
download | rgoncalves.se-361ab306fbc8beb1732e1059ed0c093a2a03fb67.tar.gz |
refactor: move static site generator out of the repo
Diffstat (limited to 'bin/func')
-rw-r--r-- | bin/func | 257 |
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/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/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 -} |