diff --git a/config.example b/config.example index f5372f2..b86f06e 100644 --- a/config.example +++ b/config.example @@ -1,24 +1,26 @@ -# Place this file in your project directory +; Place this file in your project directory -# This is the name of your site -export site_name="The Site Name" -# This is the site tag or subtitle -export site_tagline="The Site Tagline" -export site_url="http://www.example.com" -# At the moment, there is only 1 theme - minimal -export theme=minimal -# This is the directory where you create your pages and blogs. -# Your project working directory -export project_dir=/path/to/your/project -# This is where qsgen2 outputs the parsed and generated files -export www_root=/path/to/output/directory -# Do you want the blog on your front page or not? -# Values are true for yes and false for no -export blog_in_index=false -# Expected values are 'native' or 'markdown' -export generator=native -# Do you want to generate a sitemap.xml file? -export sitemap=true -# Language for messages from qsgen2 -# en_US, es_ES, nb_NO -export language=nb_NO +[site] +; This is the name of your site +name = "The Site Name" +; This is the tagline +tagline = "The Site Tagline" +; This is the URL of your site +url = "https://www.example.com" +; This is where your HTML files go +root = /path/to/www/dir +; The theme of your site +theme = theme_name +; sitemap or not: true or false +sitemap = true +; Do you want the blog to appear on the front page +; true = yes and false = no +blog = true + +[project] +; This is where you work before you generate the outpu +root = /path/to/working/project +; Languages: en_US, en_UK, es_ES, nb_NO, fr_FR +lang = en_US +; Use QStags (native) or Markdown (markdown) +generator = native diff --git a/include/common/zini b/include/common/zini new file mode 100644 index 0000000..920b661 --- /dev/null +++ b/include/common/zini @@ -0,0 +1,39 @@ +# zini function to parse INI files and store their content in an associative array +zini() { + local ini_path="$1" + typeset -gA config + + # Check if the file exists + if [[ ! -f "$ini_path" ]]; then + echo "Configuration file not found: $ini_path" + return 1 + fi + + local current_section="" + local line key value composite_key + + # Read the INI file line by line + while IFS= read -r line || [[ -n $line ]]; do + line=$(echo $line | xargs) # Trim whitespace + + # Skip empty lines and comments + [[ -z "$line" || "$line" == \;* ]] && continue + + # Detect section headers + if [[ "$line" == \[*\]* ]]; then + current_section="${line:1:-1}" + else + # Parse key-value pairs + key=${line%%=*} + value=${line#*=} + key=$(echo $key | xargs) # Trim key + value=$(echo $value | xargs) # Trim value + + # Store in associative array with 'section_key' format + composite_key="${current_section}_${key}" + config[$composite_key]="$value" + fi + done < "$ini_path" + + # echo "Configuration loaded." +} diff --git a/qsgen2 b/qsgen2 index 8151b87..b8758b7 100755 --- a/qsgen2 +++ b/qsgen2 @@ -28,6 +28,7 @@ globaldebug=false fpath=(${HOME}/bin/include/common ${HOME}/bin/include/qsgen2/lang $fpath) # In this case, let's load the 'include' function autoload include +autoload zini # Including some colors to the script include common/colors @@ -37,7 +38,8 @@ echo "${magenta}${blue_bg} ${QSGEN} ${end}${bold_white}${blue_bg}${VERSION} ${en # Check for, and source, the config file for this specific website if [[ -f $(pwd)/config ]]; then if (${globaldebug}); then echo "${red}Config file found and sourced${end}\n${yellow} - $(pwd)/config${end}"; fi - builtin source $(pwd)/config + # builtin source $(pwd)/config + zini $(pwd)/config else echo "${red}Cannot find configuration file.${end}" echo "${yellow} - Please create the file 'config' in your project directory.${end}" @@ -45,6 +47,19 @@ else exit fi +# Let's define the new config values to the old names until +# I've had time to change everything in the script. +site_name="${config[site_name]}" +site_tagline="${config[site_tagline]}" +site_url="${config[site_url]}" +theme="${config[site_theme]}" +sitemap="${config[site_sitemap]}" +www_root="${config[site_root]}" +blog_in_index="${config[site_blog]}" +project_dir="${config[project_root]}" +language="${config[project_lang]}" +generator="${config[project_generator]}" + # Load language as defined in config typeset -A qsgenlang lang_found=false