From 95340ca30788ef5478d5c51770f101f9f62cdb08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Uruba?= Date: Thu, 28 Dec 2023 14:04:31 +0100 Subject: [PATCH] add support for global template variables --- mige.sh | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/mige.sh b/mige.sh index 6643d81..8b43e31 100755 --- a/mige.sh +++ b/mige.sh @@ -9,6 +9,7 @@ REGEX_VARIABLE="^([0-9]+)=(.+)$" SEPARATOR_EMBED="|" TEMPLATE_HEADER=${TEMPLATE_HEADER:-templates/header.html} TEMPLATE_FOOTER=${TEMPLATE_FOOTER:-templates/footer.html} +TEMPLATE_VARS=${TEMPLATE_VARS:-.vars} SOURCEDIR=$PWD OPTION_ASSETS=false @@ -41,26 +42,26 @@ replace_variables() { if [[ $variable =~ $REGEX_VARIABLE ]]; then local variable_name=${BASH_REMATCH[1]} local variable_value=${BASH_REMATCH[2]} - sed -i "s/\$$variable_name/$variable_value/g;/$variable/d" $1 + sed -i "s|\$$variable_name|$variable_value|g;\|$variable|d" $1 else echo -e "\e[38;5;208mWarning: could not match '$variable' as a variable assignment.\e[0m" fi - done < <(grep -P $REGEX_VARIABLE $1) + done < <(grep -P $REGEX_VARIABLE $1 | sort -gr) } replace_embeds () { while read match; do IFS=$SEPARATOR_EMBED read -ra parts <<< "$match" - file_embed="$SOURCEDIR/$DIR_EMBED/$(echo "${parts[0]}$SEPARATOR_EMBED" | sed -r "s/$REGEX_EMBED/\1/")" + file_embed="$SOURCEDIR/$DIR_EMBED/$(echo "${parts[0]}$SEPARATOR_EMBED" | sed -r "s|$REGEX_EMBED|\1|")" params=("${parts[@]:1}") if [ -f "$file_embed" ]; then expr_replace="" for index in "${!params[@]}"; do - expr_replace+="s/\$$(($index+1))/${params[index]}/g;" + expr_replace+="s|\$$(($index+1))|${params[index]}|g;" done - expr_replace+="s/\n//g;" - sed -i "s/$match/$(sed -z "$expr_replace" $file_embed)/g" $1 + expr_replace+="s|\n||g;" + sed -i "s|$match|$(sed -z "$expr_replace" $file_embed)|g" $1 else echo -e "\e[38;5;208mWarning: embed file '$file_embed' doesn't exist, skipping.\e[0m" fi @@ -71,9 +72,13 @@ process_file () { local timep=$(date +%s%N) local sourcediresc=${SOURCEDIR//\//\\/} - mkdir -p $( dirname "$1" | sed "s/$sourcediresc\/$DIR_CONTENT/$sourcediresc\/$DIR_DIST/" ) - local file_output=$( echo "$1" | sed "s/$sourcediresc\/$DIR_CONTENT/$sourcediresc\/$DIR_DIST/" ) - cat "$SOURCEDIR/$TEMPLATE_HEADER" "$1" "$SOURCEDIR/$TEMPLATE_FOOTER" > $file_output + mkdir -p $( dirname "$1" | sed "s|$sourcediresc/$DIR_CONTENT|$sourcediresc/$DIR_DIST|" ) + local file_output=$( echo "$1" | sed "s|$sourcediresc/$DIR_CONTENT|$sourcediresc/$DIR_DIST|" ) + cat "$SOURCEDIR/$TEMPLATE_HEADER" "$1" "$SOURCEDIR/$TEMPLATE_FOOTER" > $file_output + + if [ -f "$2" ]; then + cat "$2" >> $file_output + fi if [ $OPTION_EMBEDS = true ]; then replace_embeds $file_output @@ -95,8 +100,14 @@ process_assets () { } main () { + local file_template_vars="$SOURCEDIR/$TEMPLATE_VARS" + if [ ! -f "$file_template_vars" ]; then + echo -e "\e[38;5;208mWarning: template vars file '$file_template_vars' doesn't exist, skipping.\e[0m" + file_template_vars="" + fi + while IFS= read -d '' file_content; do - process_file "${file_content}"