111 lines
2.6 KiB
Bash
Executable File
111 lines
2.6 KiB
Bash
Executable File
#!/bin/sh -e
|
|
export PATH="$(dirname $(realpath $0)):$PATH"
|
|
export BLOGS="$(realpath blogs)"
|
|
export SRC="$(realpath src)"
|
|
export LAYOUTS="$(realpath share/layouts)"
|
|
|
|
usage()
|
|
{
|
|
>&2 cat << USAGE
|
|
usage: blog -i LOG [-p POSTPROCESS_CMD] [-a EXTRACT_ARGS_CMD] [-l LAYOUT] [-t] [-f FILE_PATTERN]
|
|
|
|
options:
|
|
|
|
-a EXTRACT_ARGS_CMD
|
|
If provided, a shell command to extract arguments to the layout from the
|
|
source files. The shell will be provided with a variable, POST_TITLE.
|
|
|
|
-f FILE
|
|
If provided, a pattern for the files to process. Default: *.
|
|
|
|
-i LOG
|
|
The name of the source directory under \$BLOGS where log posts live.
|
|
|
|
-l LAYOUT
|
|
If provided, the layout under \$LAYOUTS to use for the generated
|
|
upphtml files. If not provided, uses the default layout.
|
|
|
|
-p POSTPROCESS_CMD
|
|
If provided, a shell command to post-process the source files into
|
|
upphtml. The shell will be provided with a variable, POST_TITLE.
|
|
|
|
-t
|
|
If enabled, use filenames as post titles
|
|
USAGE
|
|
}
|
|
|
|
extract_args_cmd="head -n 0 | echo \"POST_TITLE=\\\"\${POST_TITLE}\\\"\""
|
|
file_pattern="*"
|
|
log_name=""
|
|
layout_name="default"
|
|
postprocess_cmd="echo"
|
|
use_filenames_for_titles=0
|
|
|
|
while getopts "a:f:i:l:p:t" opt
|
|
do
|
|
case $opt in
|
|
a)
|
|
extract_args_cmd="$OPTARG"
|
|
;;
|
|
f)
|
|
file_pattern="$OPTARG"
|
|
;;
|
|
i)
|
|
log_name="$OPTARG"
|
|
;;
|
|
l)
|
|
layout_name="$OPTARG"
|
|
;;
|
|
p)
|
|
postprocess_cmd="$OPTARG"
|
|
;;
|
|
t)
|
|
use_filenames_for_titles=1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -z "${log_name}" ]
|
|
then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
if ! [ -d "${BLOGS}/${log_name}" ]
|
|
then
|
|
>&2 echo "there is no directory '${input_log}' under ${BLOGS}. options: $(ls common)"
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
layout="${LAYOUTS}/${layout_name}.layout.upphtml"
|
|
if [ "${layout_name}" = "default" ]
|
|
then
|
|
layout_ext=""
|
|
else
|
|
layout_ext=".${layout_name}"
|
|
fi
|
|
if ! [ -f "${layout}" ]
|
|
then
|
|
echo >&2 "Warning: no layout found at $(basename "${LAYOUTS}")/${layout_name}.layout.upphtml"
|
|
fi
|
|
|
|
mkdir -p "${SRC}/${log_name}"
|
|
|
|
for entry in $(find -L "${BLOGS}/${log_name}" -type f -name "${file_pattern}")
|
|
do
|
|
basename="$(basename "$entry")"
|
|
name="${basename%\.*}"
|
|
dest="${SRC}/${log_name}/${name}${layout_ext}.upphtml"
|
|
if [ $use_filenames_for_titles -eq 1 ]
|
|
then
|
|
export POST_TITLE="$name"
|
|
cat "$entry" | eval "${postprocess_cmd}" > "$dest"
|
|
else
|
|
export POST_TITLE="$(grep -e "^# " -m 1 "$entry" | cut -c3-)"
|
|
cat "$entry" | grep -e "^# " -v | eval "$postprocess_cmd" > "$dest"
|
|
fi
|
|
cat "$entry" | eval "$extract_args_cmd" > "${dest}.args"
|
|
echo "Processed ${entry#$(dirname ${BLOGS})/} to ${dest#$(dirname ${SRC})/}"
|
|
done
|