site-neo/render.sh

142 lines
2.8 KiB
Bash
Raw Normal View History

2022-09-24 18:07:46 -04:00
#!/bin/bash
2022-10-04 17:42:16 -04:00
# render.sh: part of the tape-and-string framework.
# v3.3-p4
2023-02-10 14:02:43 -05:00
#B: Load
2023-02-08 12:17:45 -05:00
enable -f /usr/lib/bash/csv csv
declare -A title
2023-02-10 14:02:43 -05:00
#E: Load
#B: Definition
2023-02-06 23:00:03 -05:00
function inf { echo -e "\x1B[1;32mINF\x1B[0m: $*"; }
function wrn { echo -e "\x1B[1;93mWRN\x1B[0m: $*"; }
function err { echo -e "\x1B[1;31mERR\x1B[0m: $*"; }
2023-02-01 12:59:45 -05:00
function tape {
2023-02-11 17:26:39 -05:00
if test -d "$1"; then
2023-02-11 13:00:31 -05:00
err "tape: Passed directory, $1"
2023-02-11 17:26:39 -05:00
return 1
fi
case $1 in
2023-02-06 23:00:03 -05:00
*.txti) redcloth "$1" ;;
*.org) org-ruby --translate html "$1" ;;
*.md) comrak --gfm "$1" ;;
2023-02-01 12:59:45 -05:00
*.html) cat $1 ;;
2023-02-11 13:00:31 -05:00
*.s[ac]ss) err "Told to render $1, shouldn't happen"; return 1 ;;
2023-02-06 23:00:03 -05:00
*) pandoc --columns 168 -t html "$1" || echo "Skipping $i, unknown format" ;;
2023-02-11 17:26:39 -05:00
esac
2023-02-01 12:59:45 -05:00
}
function dirs {
2023-02-11 17:26:39 -05:00
if test -d out; then
wrn "Directory 'out' already exists."
return 0
fi
local i o dir
dir=(`./pfiles.rb dir`)
inf "Creating directory structure..."
echo ${dir[@]}
for i in ${dir[@]}; do
o="${i/in/out}"
mkdir -pv $o
done
}
function docs {
2023-02-11 17:26:39 -05:00
if ! test -d out; then
err "Cannot render, directory 'out' does not exist, run ./render.sh dir"
return 1
fi
local i o doc
doc=(`./pfiles.rb doc`)
inf "Rendering document files..."
for i in ${doc[@]}; do
o="${i/in/out}"
echo "$i => $o"
if test -z "${title[$i]}"; then
tape $i | m4 -DCSSI=$(awk -f get_sd.awk <<< "$i") m4/main.html.m4 > ${o%.*}.html
else
tape $i | m4 -DCSSI=$(awk -f get_sd.awk <<< "$i") -DTITLE="${title[$i]}" m4/main.html.m4 > ${o%.*}.html
fi
done
}
function sass {
2023-02-11 17:26:39 -05:00
if ! test -d out; then
err "Cannot render, directory 'out' does not exist, run ./render.sh dir"
return 1
fi
local i o sass
sass=(`./pfiles.rb sass`)
inf "Rendering sass files..."
if [ ${#sass[@]} -eq 0 ]; then
inf "No .sass files detected, skipping"
return 0
else
for i in ${sass[@]}; do
o="${i/in/out}"
o="${o/.s[ac]/.c}"
echo "$i => $o"
sassc -t expanded -a $i $o
done
fi
}
function other {
2023-02-11 17:26:39 -05:00
if ! test -d out; then
err "Cannot render, directory 'out' does not exist, run ./render.sh dir"
return 1
fi
inf "Copying other files..."
cp -rv 'in'/* out/
}
function all {
2023-02-11 17:26:39 -05:00
dirs
docs
sass
other
}
2023-02-10 14:02:43 -05:00
function info {
2023-02-11 17:26:39 -05:00
local i
echo "* \$ignore"
if [ ${#ignore[@]} -eq 0 ]; then
echo null
else
for i in ${ignore[@]}; do
echo "- $i"
done
fi
echo "* \$titles"
for i in ${!title[@]}; do
echo " - $i :: ${title[$i]}"
done
2023-02-10 14:02:43 -05:00
}
#E: Definition
#B: Logic
#B: Logic/LoadDefs
#B: Logic/LoadDefs/title
while read -r ii; do
2023-02-11 17:26:39 -05:00
csv -a i "$ii"
title[in/${i[0]}]=${i[1]}
2023-02-10 14:02:43 -05:00
done < title.csv
#E: Logic/LoadDefs/title
unset ii
#B: Logic/LoadDefs/ignore
if test -f ignore.txt; then
2023-02-11 17:26:39 -05:00
while read -r i; do
ignore+=(in/$i)
done < ignore.txt
2023-02-10 14:02:43 -05:00
fi
#E: Logic/LoadDefs/ignore
#E: Logic/LoadDefs
if test -z "$*"; then
2023-02-11 17:26:39 -05:00
all
exit $?
fi
case $1 in
2023-02-10 14:02:43 -05:00
dir) dirs;;
doc) docs;;
s[ac]ss) sass;;
other) other;;
rest) other;;
info) info;;
vall) info; all;;
all) all;;
*) all;;
esac
2023-02-10 14:02:43 -05:00
#E: Logic
exit $?