From 911aa5f6c100d02f4d3c8aaa159d6b1834536ff4 Mon Sep 17 00:00:00 2001 From: historia Date: Fri, 11 Oct 2024 18:21:10 -0400 Subject: change: index uses
tags instead
  • now --- README.md | 2 +- ssg-blog | 263 -------------------------------------------------------------- 2 files changed, 1 insertion(+), 264 deletions(-) delete mode 100755 ssg-blog diff --git a/README.md b/README.md index 09b8656..ea3d2e1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # ssg-blog -This is a modification to the simple static site generator '[ssg](https://romanzolotarev.com/bin/ssg)' by Roman Zolotarev. This generates a minimal blog index page with category headings and posts sorted by date using YAML frontmatter in markdown files. +This is a modification to the simple static site generator '[ssg](https://romanzolotarev.com/bin/ssg)' by Roman Zolotarev. This is a markdown to HTML static site generator that also creates a minimal blog index page with category headings and posts sorted by date using YAML frontmatter in markdown files. ![example](example/example.webp) diff --git a/ssg-blog b/ssg-blog deleted file mode 100755 index cd14405..0000000 --- a/ssg-blog +++ /dev/null @@ -1,263 +0,0 @@ -#!/bin/sh -e -# -# https://rgz.ee/bin/ssg6 -# Copyright 2018-2019 Roman Zolotarev -# -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# - -main() { - test -n "$1" || usage - test -n "$2" || usage - test -n "$3" || usage - test -d "$1" || no_dir "$1" - test -d "$2" || no_dir "$2" - - src=$(readlink_f "$1") - dst=$(readlink_f "$2") - base_url="$3" - - IGNORE=$( - if ! test -f "$src/.ssgignore"; then - printf ' ! -path "*/.*"' - return - fi - while read -r x; do - test -n "$x" || continue - printf ' ! -path "*/%s*"' "$x" - done <"$src/.ssgignore" - ) - - # files - - h_file="$src/_header.html" - f_file="$src/_footer.html" - test -f "$f_file" && FOOTER=$(cat "$f_file") && export FOOTER - test -f "$h_file" && HEADER=$(cat "$h_file") && export HEADER - - list_dirs "$src" | - (cd "$src" && cpio -pdu "$dst") - - fs=$( - if test -f "$dst/.files"; then - list_affected_files "$src" "$dst/.files" - else - list_files "$1" - fi - ) - - if test -n "$fs"; then - echo "$fs" | tee "$dst/.files" - - if echo "$fs" | grep -q '\.md$'; then - if test -x "$(which lowdown 2>/dev/null)"; then - echo "$fs" | grep '\.md$' | - render_md_files_lowdown "$src" "$dst" - else - if test -x "$(which Markdown.pl 2>/dev/null)"; then - echo "$fs" | grep '\.md$' | - render_md_files_Markdown_pl "$src" "$dst" - else - echo "couldn't find lowdown nor Markdown.pl" - exit 3 - fi - fi - fi - - echo "$fs" | grep '\.html$' | - render_html_files "$src" "$dst" - - echo "$fs" | grep -Ev '\.md$|\.html$' | - (cd "$src" && cpio -pu "$dst") - fi - - printf '[ssg] ' >&2 - print_status 'file, ' 'files, ' "$fs" >&2 - - #index - - render_index - - # sitemap - - date=$(date +%Y-%m-%d) - urls=$(list_pages "$src") - - test -n "$urls" && - render_sitemap "$urls" "$base_url" "$date" >"$dst/sitemap.xml" - - print_status 'url' 'urls' "$urls" >&2 - echo >&2 -} - -readlink_f() { - file="$1" - cd "$(dirname "$file")" - file=$(basename "$file") - while test -L "$file"; do - file=$(readlink "$file") - cd "$(dirname "$file")" - file=$(basename "$file") - done - dir=$(pwd -P) - echo "$dir/$file" -} - -print_status() { - test -z "$3" && printf 'no %s' "$2" && return - - echo "$3" | awk -v singular="$1" -v plural="$2" ' - END { - if (NR==1) printf NR " " singular - if (NR>1) printf NR " " plural - }' -} - -usage() { - echo "usage: ${0##*/} src dst base_url" >&2 - exit 1 -} - -no_dir() { - echo "${0##*/}: $1: No such directory" >&2 - exit 2 -} - -list_dirs() { - cd "$1" && eval "find . -type d ! -name '.' ! -path '*/_*' $IGNORE" -} - -list_files() { - cd "$1" && eval "find . -type f ! -name '.' ! -path '*/_*' $IGNORE" -} - -list_dependant_files() { - e="\\( -name '*.html' -o -name '*.md' -o -name '*.css' -o -name '*.js' \\)" - cd "$1" && eval "find . -type f ! -name '.' ! -path '*/_*' $IGNORE $e" -} - -list_newer_files() { - cd "$1" && eval "find . -type f ! -name '.' $IGNORE -newer $2" -} - -has_partials() { - grep -qE '^./_.*\.html$|^./_.*\.js$|^./_.*\.css$' -} - -list_affected_files() { - fs=$(list_newer_files "$1" "$2") - - if echo "$fs" | has_partials; then - list_dependant_files "$1" - else - echo "$fs" - fi -} - -render_html_files() { - while read -r f; do - render_html_file <"$1/$f" >"$2/$f" - done -} - -render_md_files_lowdown() { - while read -r f; do - sed '1 { /^---/ { :a N; /\n---/! ba; d} }' "$1/$f" | - lowdown \ - --html-no-escapehtml \ - --html-no-skiphtml \ - --parse-no-metadata \ - --parse-no-autolink | - render_html_file >"$2/${f%\.md}.html" - done -} - -render_md_files_Markdown_pl() { - while read -r f; do - sed '1 { /^---/ { :a N; /\n---/! ba; d} }' "$1/$f" | - Markdown.pl | - render_html_file >"$2/${f%\.md}.html" - done -} - -render_html_file() { - { - echo "$HEADER" - cat - - echo "$FOOTER" - } -} - -list_pages() { - e="\\( -name '*.html' -o -name '*.md' \\)" - cd "$1" && eval "find . -type f ! -path '*/.*' ! -path '*/_*' $IGNORE $e" | - sed 's#^./##;s#.md$#.html#;s#/index.html$#/#' -} - - -render_index() { - output="$dst/index.html" - echo "$HEADER" > "$output" - - find "$src" -mindepth 1 -maxdepth 1 -type d ! -path "*/.*" | sort | - while read -r category_dir; do - category=$(basename "$category_dir") - - find "$category_dir" -type f \( -name "*.md" -o -name "index.md" \) ! -path "*/.*" | - while read -r article; do - title=$(sed -n '/^title: /s/title: //p' "$article" | head -n 1) - date=$(sed -n '/^date: /s/date: //p' "$article" | head -n 1) - - article_url="${article#"$src"}" - article_url="${article_url%.md}.html" - if [ "${article_url##*/}" = "index.html" ]; then - article_url="${article_url%/index.html}/" - fi - article_url="${article_url#/}" - - echo "$date|$title|$article_url" >> "/tmp/articles_$category.txt" - done - - if [ -f "/tmp/articles_$category.txt" ]; then - echo "

    $(echo "$category" | sed -E 's/(^|[_ ])([a-z])/\1\U\2/g')

    " >> "$output" - echo "
      " >> "$output" - sort -r "/tmp/articles_$category.txt" | - while IFS='|' read -r date title url; do - echo "
    • $date: $title
    • " >> "$output" - done - echo "
    " >> "$output" - rm "/tmp/articles_$category.txt" - fi - done - - echo "$FOOTER" >> "$output" -} - - -render_sitemap() { - urls="$1" - base_url="$2" - date="$3" - - echo '' - echo '' - echo "$urls" | - sed -E 's#^(.*)$#'"$base_url"'/\1'"$date"'1.0#' - echo '' -} - -main "$@" -- cgit v1.2.3