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

33
bin/zod Executable file
View File

@@ -0,0 +1,33 @@
#!/bin/sh
# ZODIAC - a simple static site generator
# Copyright (c) 2011 Chase Allen James <nx-zodiac@nu-ex.com>
zod_lib=/home/nuex/_dev/zodiac/lib
proj="$1"
target="$2"
. zod-internal
_zod_error() {
echo -e ">>> ERROR: $*" >&2
exit 1
}
_zod_exec() {
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"
_zod_exec "render"
_zod_exec "copy"

11
bin/zod-copy Executable file
View File

@@ -0,0 +1,11 @@
#!/bin/sh
. zod-internal
zod_lib="$1"; shift
proj="$1"; shift
target="$1"; shift
file="$1"
destination="$(__zod_destination "$file")"
cp "$file" "$destination"

31
bin/zod-internal Executable file
View File

@@ -0,0 +1,31 @@
#!/bin/sh
__zod_config() {
cat - "$proj/.zod/config" <<! 2>/dev/null
[parse]
htm,html
[parse_convert]
md awk -f "/home/nuex/_dev/zodiac/lib/markdown.awk"
[ignore]
helpers.awk
*.layout
*.meta
config
!
}
__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;
}

24
bin/zod-render Executable file
View File

@@ -0,0 +1,24 @@
#!/bin/sh
. zod-internal
zod_lib="$1"; shift
proj="$1"; shift
target="$1"; shift
file="$1"; shift
ext="${file##*.}"
meta="${file%.$ext}.meta"
page="${file##*/}"
page="${page%.$ext}.html"
destination=$(__zod_destination "$file")
set -- -f "$zod_lib/render.awk"
set -- "$@" -f "$zod_lib/config.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"
__zod_config | awk "$@" > "$destination/$page"

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"