refactoring

- keep using find-exec (more bin files)
- parse_convert command with spaces works
This commit is contained in:
nuex
2011-10-23 23:15:46 -04:00
parent ad7a86f1c5
commit 7be7041aa2
10 changed files with 148 additions and 129 deletions

View File

@@ -4,103 +4,30 @@
# Copyright (c) 2011 Chase Allen James <nx-zodiac@nu-ex.com>
zod_lib=ZODLIB_PATH
proj="$1"
target="$2"
. zod-internal
_zod_error() {
echo -e ">>> ERROR: $*" >&2
exit 1
}
_zod_config() {
cat - "$cfg" <<!
[parse]
htm,html
[parse_convert]
md awk -f "$zod_lib/markdown.awk"
[ignore]
helpers.awk
*.layout
*.meta
config
!
}
_zod_find_opt_builder() {
phase="$1"
_zod_config |
awk -f "$zod_lib/config.awk" \
-f "$zod_lib/opt_builder.awk" \
-v phase="$phase"
}
_zod_destination() {
file="$1"
# Find the target directory if one must be created
subdir="${file%/*}"
subdir="${subdir#$proj}"
if [ "$subdir" ]; then
destination="$target$subdir"
mkdir -p "$destination"
else
# There is no directory to create in target,
# i.e. file is in the root of the project
destination="$target"
fi
echo $destination;
}
_zod_render() {
file="$1"
ext="${file##*.}"
meta="${file%.$ext}.meta"
set -- -f "$zod_lib/config.awk"
set -- "$@" -f "$zod_lib/render.awk"
[ -f "$proj/helpers.awk" ] && set -- "$@" -f "$proj/helpers.awk"
set -- "$@" -
[ -f "$proj/global.meta" ] && set -- "$@" "$proj/global.meta"
[ -f "$meta" ] && set -- "$@" "$meta"
set -- "$@" "$file"
[ -f "$proj/main.layout" ] && set -- "$@" "$proj/main.layout"
page="${file##*/}"
page="${page%.$ext}.html"
destination=$(_zod_destination "$file")
_zod_config | awk "$@" > "$destination/$page"
}
_zod_copy() {
file="$1"
destination="$(_zod_destination "$file")"
cp "$file" "$destination"
}
_zod_exec() {
phase="$@"
set -- "$proj" -type f
for instruction in $(_zod_find_opt_builder "$phase" "$cfg"); do
inst=$(echo $instruction | sed 's/"//g')
case $inst in
or ) set -- "$@" -o;;
not ) set -- "$@" !;;
* ) set -- "$@" -name "$inst";;
esac
done
find "$@" | while read -r file; do
case "$phase" in
render ) _zod_render "$file";;
copy ) _zod_copy "$file";;
esac
done
phase="$1"; shift
__zod_config |
awk -f "$zod_lib/config.awk" \
-f "$zod_lib/find_cmd.awk" \
-v phase="$phase" \
-v zod_lib="$zod_lib" \
-v proj="$proj" \
-v target="$target" | sh
}
[ "$#" -ne 2 ] && { echo "usage: zod projectdir targetdir"; exit; }
[ ! -d "$proj" ] && _zod_error "project directory does not exist"
[ ! -d "$target" ] && _zod_error "target directory does not exist"
[ -f "$proj/.zod/config" ] && cfg="$proj/.zod/config"
_zod_exec "render"
_zod_exec "copy"