From ec7e9e3183492bcd18d06c02b90930f6a837c6b5 Mon Sep 17 00:00:00 2001 From: Cem Keylan Date: Mon, 27 Jul 2020 01:21:06 +0300 Subject: site update --- build | 195 +++++++++++++++++++++++++++--------------------------------------- 1 file changed, 78 insertions(+), 117 deletions(-) (limited to 'build') diff --git a/build b/build index 04fad81..05b2322 100755 --- a/build +++ b/build @@ -1,137 +1,96 @@ #!/bin/sh -e -header() { - cat < - - -$1 | Carbs Linux - - - - - -

Carbs Linux - a simple busybox linux distribution

-
-EOF -} +ROOT=$PWD -footer() { - [ -z "$1" ] || printf 'View Page Source' "$1" - cat < - - - - -EOF +txt2html() { + printf '
\n'
+
+    # Convert [0-9] to links
+    sed -E 's|(.*[a-z].*)\[([0-9].*)\]|\1[\2]|g' "$1" |
+
+    # Add span id to sections
+    sed -E 's|^\[([0-9].*)\]|[\1]|' |
+
+    # Make links clickable
+    sed -E "s|(http[s]?://[^[:space:]\)]*)|\1|g"
+
+    printf '
\n' } gettitle() { - case "$(sed 1q "$1")" in - Title:*) sed 's/^[Tt]itle: //;1q' "$1" ;; - *) - title=$( - grep -n '=*=' -- "$1" | - - while IFS=: read -r num _; do - sed "$(( num - 1 ))q;d" "$1" - return 0 - done - ) - - file=${1##*/} file=${file%.md} - printf '%s\n' "${title:-$file}" - esac + unset title + case "$(sed -n 2p "$1")" in =*=|-*-) title="$(sed -n 1p "$1")"; esac + file=${1##*/} file=${file%.*} + printf '%s\n' "${title:-$file}${2:+ | Carbs Linux}" } -genpages() { - # Create directories in docs - find src -type d | while read -r dir ; do mkdir -p "docs${dir#src}" ; done - # Generate html and txt files - for page in $(cd src || return 1 ; find . \( -name '*.md' -o -name '*.txt' \) ) ; do - tohtml "src/$page" > "docs/${page%.*}.html" - sed '/^Title:/d' "src/$page" > "docs/${page%.*}.txt" +genpages() ( + cd src || return 1 + find . ! -name .git | while read -r file; do + + # If this is a directory, create the directory on the destination and + # return. + [ -d "$file" ] && { + mkdir -p "../docs/${file#./}" + continue + } + + # We are treating markdown/plaintext files differently. + case "$file" in + *.md|*.txt) + tohtml "$file" > "../docs/${file%.*}.html" + cp "$file" "../docs/${file%.*}.txt" + ;; + + # If this is not a markdown/txt file copy as-is. + *) cp "$file" "../docs/$file" + esac done - # Copy rest of the files - (cd src || return 1 ; find . -type f ! -name '*.md' -exec cp -u \{\} ../docs/\{\} \; ) - -} +) tohtml() { - header "$(gettitle "$1")" + srcfile=${1#.} srcfile=${srcfile%.*}.txt case "${1##*.}" in - md) sed '/^[Tt]itle:/d' "$1" | markdown ;; - txt) printf '
'; cat "$1"; printf '
' ;; - esac - srcfile=${1#src/.} srcfile=${srcfile%.*}.txt - footer "$srcfile" -} + md) markdown "$1" ;; + txt) txt2html "$1" ;; + esac | -wiki_index() { - cat templates/wiki-index > src/wiki/index.md - for page in $(find src/wiki -type f | grep -v 'src/wiki/index.md' | sort) ; do - printf '* [%s](%s)\n' "$(gettitle "$page")" "$(printf "$page" | sed 's#src/wiki/##;s/.md/.html/')" >> src/wiki/index.md - done -} + sed '/{{ CONTENT }}/r /dev/stdin' "$ROOT/templates/template.html" | -blog_index() { - cat < src/blog/index.md -Blog Index -================================================================================ + sed "s#{{ TITLE }}#$(gettitle "$1" html)#" | -This is the Carbs Linux Blog Index. You can find every post here. [RSS Feed] + sed '/{{ CONTENT }}/d' | -[RSS Feed]: /rss.xml + sed "s|{{ SRC }}|$srcfile|" +} -EOF +blog_index() { + cat templates/blog-index > src/blog/index.md find src/blog -type f ! -name index.md | sort -r | while read -r post ; do postdate="${post##*/}"; postdate="${postdate%%.*}" - printf '* %s - [%s](%s)\n' "$(date --date="$postdate" +%b\ %d\ %Y)" "$(gettitle "$post")" "$(printf "$post" | sed 's#src/blog/##;s/.md/.html/')" >> src/blog/index.md - done + printf '* %s - [%s](%s)\n' \ + "$(date --date="$postdate" +%b\ %d\ %Y)" \ + "$(gettitle "$post")" \ + "$(printf "$post" | sed 's#src/blog/##;s/.md/.html/')" + done >> src/blog/index.md } site_index() { cp index/index.md src/index.md :> src/news.md - # find index -name '*.news' | sort -r | sed 3q | while read -r news ; do - # shellcheck disable=2046 - set -- $(find index -name '*.news' | sort -r) - for news in "$1" "$2" "$3" "$4" "$5" ; do - newsdate="${news##*/}" ; newsdate="${newsdate%.news}" - printf '\n### %s\n\n' "$(date --date="$newsdate" +%b\ %d\ %Y)" >> src/index.md - cat "$news" >> src/index.md - done - for news; do - newsdate="${news##*/}" ; newsdate="${newsdate%.news}" - printf '\n%s\n-----------\n\n' "$(date --date="$newsdate" +%b\ %d\ %Y)" >> src/news.md + i=0 + find index -name '*.news' | sort -r | while read -r news; do + [ "$(( i += 1 ))" -lt 6 ] && { + printf '\n' + cat "$news" + } >> src/index.md + [ "$i" -eq 1 ] || printf '\n' >> src/news.md cat "$news" >> src/news.md done } genrss() { - cat < - - -Carbs Linux -a simple busybox linux distribution -https://carbslinux.org - -$(date -u +%b\ %a\ %Y\ %H):00 -EOF find "$1" -type f ! -name index.md | sort -r | while read -r post ; do postdate="${post##*/}" ; postdate="${postdate%.*}" cat <$(date --date="$postdate" +%a,\ %d\ %b\ %Y) Cem Keylan https://carbslinux.org/${3:-blog/$(printf "${post##*/}" | sed 's/.md/.html/')} -$(grep -v '^Title:' "$post" | markdown -f cdata) +$(grep -v '^Title: ' "$post" | markdown -f cdata) EOF - done -cat < - -EOF + done | + + sed '/{{ CONTENT }}/r /dev/stdin' "$ROOT/templates/rss.xml" | + + sed '/{{ CONTENT }}/d' | + + sed "s|{{ SRC }}|${2:-rss}.xml|" | + + sed "s|{{ DATE }}|$(date -u "+%a %b %d %Y %H:00")|" } main() { - # Create docs directory if it doesn't exist - mkdir -p docs - - # Remove all html, txt, and rss files - find docs \( -name '*.html' -o -name '*.txt' -o -name '*.xml' \) -delete + # Recreate docs directory + rm -rf docs; mkdir -p docs # Generate the indexes for blog and the wiki - site_index; wiki_index; blog_index + site_index; blog_index # Generate rss feeds - genrss index news index.html > docs/news.xml ; genrss src/blog > docs/rss.xml + genrss index news index.html > src/news.xml + genrss src/blog > src/rss.xml # Generate pages genpages -- cgit v1.2.3