Add tests and refactor config

This commit is contained in:
2026-05-20 08:30:21 +02:00
parent 8b760b2897
commit cd9550ee8a
13 changed files with 1070 additions and 558 deletions

View File

@@ -62,106 +62,88 @@ DEFAULT_TMPL='<!doctype html>
</body>
</html>'
_parse_conf_val() {
_pv_val="$1"
case "$_pv_val" in
\"*\")
_pv_val=${_pv_val#\"}
_pv_val=${_pv_val%\"}
printf '%s' "$_pv_val" | sed 's/\\"/\"/g; s/\\\\/\\/g'
;;
\'*\')
_pv_val=${_pv_val#\'}
_pv_val=${_pv_val%\'}
printf '%s' "$_pv_val" | sed "s/\\\\'/'/g; s/\\\\/\\/g"
;;
*)
printf '%s' "$_pv_val"
;;
esac
}
_load_conf_line() {
case "$1" in
''|'#'*) return ;;
*=*) ;;
*) return ;;
esac
_lc_key=${1%%=*}
_lc_val=${1#*=}
_lc_key=$(printf '%s' "$_lc_key" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//')
_lc_val=$(_parse_conf_val "$(printf '%s' "$_lc_val" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//')")
case "$_lc_key" in
title) title="$_lc_val" ;;
style) style="${_lc_val#/}" ;;
dir_indexes) dir_indexes="$_lc_val" ;;
single_file_index) single_file_index="$_lc_val" ;;
flatten) flatten="$_lc_val" ;;
order) order="$_lc_val" ;;
home_name) home_name="$_lc_val" ;;
show_home_in_nav) show_home_in_nav="$_lc_val" ;;
nav_links) nav_links="$_lc_val" ;;
nav_extra) nav_extra="$_lc_val" ;;
footer) footer="$_lc_val" ;;
logo) logo="${_lc_val#/}" ;;
display_logo) display_logo="$_lc_val" ;;
display_title) display_title="$_lc_val" ;;
logo_as_favicon) logo_as_favicon="$_lc_val" ;;
favicon) favicon="${_lc_val#/}" ;;
generate_page_title) generate_page_title="$_lc_val" ;;
error_page) error_page="${_lc_val#/}" ;;
versioning) versioning="$_lc_val" ;;
enable_header_links) enable_header_links="$_lc_val" ;;
base_url) base_url="$_lc_val" ;;
generate_feed) generate_feed="$_lc_val" ;;
feed_file) feed_file="${_lc_val#/}" ;;
posts_dir) posts_dir="${_lc_val#/}" ;;
posts_per_page) posts_per_page="$_lc_val" ;;
custom_admonitions) custom_admonitions="$_lc_val" ;;
cw_hide_url) cw_hide_url="$_lc_val" ;;
lang) lang="$_lc_val" ;;
draft_by_default) draft_by_default="$_lc_val" ;;
generate_tags) generate_tags="$_lc_val" ;;
tags_dir) tags_dir="${_lc_val#/}" ;;
generate_search) generate_search="$_lc_val" ;;
search_in_footer) search_in_footer="$_lc_val" ;;
search_in_header) search_in_header="$_lc_val" ;;
include_cw_pages_in_search) include_cw_pages_in_search="$_lc_val" ;;
esac
}
reset_config() {
title="kewt"
style="kewt"
lang="en"
draft_by_default="false"
dir_indexes="true"
single_file_index="true"
flatten="false"
order=""
home_name="Home"
show_home_in_nav="true"
nav_links=""
nav_extra=""
footer="made with <a href=\"https://kewt.krzak.org\">kewt</a>"
logo=""
display_logo="false"
display_title="true"
logo_as_favicon="true"
favicon=""
generate_page_title="true"
error_page="not_found.html"
versioning="false"
enable_header_links="true"
base_url=""
generate_feed="false"
feed_file="rss.xml"
posts_dir=""
posts_per_page="12"
custom_admonitions=""
cw_hide_url="true"
generate_tags="false"
tags_dir="tags"
generate_search="false"
search_in_footer="false"
search_in_header="false"
include_cw_pages_in_search="false"
while IFS= read -r _rc_line; do
_load_conf_line "$_rc_line"
done <<EOF
$DEFAULT_CONF
EOF
}
load_config() {
[ -f "$1" ] || return
while IFS= read -r line || [ -n "$line" ]; do
case "$line" in
''|'#'*) continue ;;
*=*) ;;
*) continue ;;
esac
key=${line%%=*}
val=${line#*=}
key=$(printf '%s' "$key" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//')
val=$(printf '%s' "$val" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//')
case "$val" in
\"*\")
val=${val#\"}; val=${val%\"}
val=$(printf '%s' "$val" | sed 's/\\"/\"/g; s/\\\\/\\/g')
;;
\'*\')
val=${val#\'}; val=${val%\'}
val=$(printf '%s' "$val" | sed "s/\\\\'/'/g; s/\\\\/\\/g")
;;
esac
case "$key" in
title) title="$val" ;;
style) style="${val#/}" ;;
dir_indexes) dir_indexes="$val" ;;
single_file_index) single_file_index="$val" ;;
flatten) flatten="$val" ;;
order) order="$val" ;;
home_name) home_name="$val" ;;
show_home_in_nav) show_home_in_nav="$val" ;;
nav_links) nav_links="$val" ;;
nav_extra) nav_extra="$val" ;;
footer) footer="$val" ;;
logo) logo="${val#/}" ;;
display_logo) display_logo="$val" ;;
display_title) display_title="$val" ;;
logo_as_favicon) logo_as_favicon="$val" ;;
favicon) favicon="${val#/}" ;;
generate_page_title) generate_page_title="$val" ;;
error_page) error_page="${val#/}" ;;
versioning) versioning="$val" ;;
enable_header_links) enable_header_links="$val" ;;
base_url) base_url="$val" ;;
generate_feed) generate_feed="$val" ;;
feed_file) feed_file="${val#/}" ;;
posts_dir) posts_dir="${val#/}" ;;
posts_per_page) posts_per_page="$val" ;;
custom_admonitions) custom_admonitions="$val" ;;
cw_hide_url) cw_hide_url="$val" ;;
lang) lang="$val" ;;
draft_by_default) draft_by_default="$val" ;;
generate_tags) generate_tags="$val" ;;
tags_dir) tags_dir="${val#/}" ;;
generate_search) generate_search="$val" ;;
search_in_footer) search_in_footer="$val" ;;
search_in_header) search_in_header="$val" ;;
include_cw_pages_in_search) include_cw_pages_in_search="$val" ;;
esac
while IFS= read -r _lc_line || [ -n "$_lc_line" ]; do
_load_conf_line "$_lc_line"
done < "$1"
}