diff --git a/bin/zod_render b/bin/zod_render index caee9b0..32aad10 100755 --- a/bin/zod_render +++ b/bin/zod_render @@ -7,7 +7,7 @@ proj="$2" target="$3" f="$4" -markdown_filter_cmd="awk -f $zod_lib/markdown.awk" +md_builtin="awk -f $zod_lib/markdown.awk" [ -f "$proj/helpers.awk" ] && helper_opts="$proj/helpers.awk" [ -f "$proj/filters.config" ] && filter_opts="$proj/filters.config" @@ -27,14 +27,22 @@ else fi ext=${f##*.} -if [ $ext == "md" ] || [ $ext == "html" ]; then + +# Add filter support provided by the filters.config file +[ "$filter_opts" ] && supported="$supported $(zod_supported_extensions "$zod_lib" "$filter_opts")" + +for supported_ext in "$supported"; do + [ $ext == "$supported_ext" ] && { is_supported=true; break } +done + +if [ "$is_supported" ]; then meta=${f%.$ext}.meta [ -f "$meta" ] && page_meta_opts="$meta" set -- -f "$zod_lib/render.awk" [ "$helper_opts" ] && set -- "$@" -f "$helper_opts" - set -- "$@" -v markdown_filter_cmd="$markdown_filter_cmd" \ + set -- "$@" -v markdown_filter_cmd="$md_builtin" \ "$filter_opts" \ "$global_meta_opts" \ "$page_meta_opts" \ diff --git a/bin/zod_supported_extensions b/bin/zod_supported_extensions new file mode 100644 index 0000000..14f910e --- /dev/null +++ b/bin/zod_supported_extensions @@ -0,0 +1,8 @@ +#!/bin/sh + +# return a list of all supported file extensions + +zod_lib="$1" +filter_opts="$2" + +awk -f "$zod_lib/supported_extensions.awk" "$filter_opts" diff --git a/lib/supported_extensions.awk b/lib/supported_extensions.awk new file mode 100644 index 0000000..04bedbe --- /dev/null +++ b/lib/supported_extensions.awk @@ -0,0 +1,22 @@ +BEGIN { + extensions="md html" +} + +# Process lines from config +# Also ignore comments and empty lines +(NF > 0) && (!/^;.*/) { + split($0, filter_kv, ": ") + split(filter_kv[1], filter_extensions, ",") + + for (i = 1; i <= length(filter_extensions); i++) { + ext = filter_extensions[i] + if (!match(extensions, ext)) { + extensions = extensions " " ext + } + } + next +} + +END { + print extensions +}