[WIP] Initial commit for qsgen3

This commit is contained in:
2025-05-30 20:37:56 +02:00
parent 106b66753f
commit 75105821fd
138 changed files with 12471 additions and 7 deletions

View File

@ -0,0 +1,101 @@
VERSION="0.4.3"
QSGEN="Quick Site Generator 2"
globaldebug=false
fpath=(${HOME}/bin/include/common ${HOME}/bin/include/qsgen2/lang $fpath)
autoload include
autoload zini
include common/colors
echo "${magenta}${blue_bg} ${QSGEN} ${end}${bold_white}${blue_bg}${VERSION} ${end}"
if [[ -f $(pwd)/config ]]; then
if (${globaldebug}); then echo "${red}Config file found and sourced${end}\n${yellow} - $(pwd)/config${end}"; fi
zini $(pwd)/config
else
echo "${red}Cannot find configuration file.${end}"
echo "${yellow} - Please create the file 'config' in your project directory.${end}"
echo "${yellow} - See 'config.example' in the git source tree.${end}"
exit
fi
typeset -A qsgenlang
lang_found=false
for dir in $fpath; do
if [[ -f "${dir}/${config[project_lang]}" ]]; then
source "${dir}/${config[project_lang]}"
lang_found=true
break
fi
done
if [[ ${lang_found} == "false" ]]; then
echo "Defined language, ${config[project_lang]}, not found. Using en_US."
source "${HOME}/bin/include/qsgen2/lang/en_US"
fi
if (${globaldebug}); then
qsconfig=$( cat $(pwd)/config | grep -v \# | awk '{print substr($0, index($0, " ") + 1)}' )
echo "Content of Config file"
for qslines in ${qsconfig}
do
echo "${yellow}${qslines}${end}"
done
fi
if [[ "$1" == "version" || "$1" == "-v" || "$1" == "--version" ]]; then
_version ${0:t}
elif [[ "$1" == "help" || "$1" == "-h" || "$1" == "--help" ]]; then
_help ${0:t}
fi
blog_cache_file="${config[project_root]}/.blog_cache"
pages_cache_file="${config[project_root]}/.pages_cache"
if [[ ! ${config[project_generator]} ]] || [[ -d $(pwd)/.git ]]; then
_msg debug "_qsgen2_msg_3"
exit
fi
if [[ ${config[project_generator]} == "native" ]]; then
engine=_qstags
export file_ext="qst"
elif [[ ${config[project_generator]} == "markdown" ]]; then
if [[ ! -f /usr/local/bin/pandoc ]]; then
_msg other "_qsgen2_msg_4"
_msg other "https://github.com/jgm/pandoc/releases"
exit
else
engine="/usr/local/bin/pandoc"
engine_opts=
export file_ext="md"
fi
else
_msg debug "_qsgen2_msg_5"
exit
fi
if (${globaldebug}); then _msg debug "_qsgen2_msg_6"; fi
builtin cd ${config[project_root]}
zmodload zsh/files
zmodload zsh/datetime
zmodload zsh/regex
export today=$(strftime "%Y-%m-%d - %T")
export blogdate=$(strftime "%a-%Y-%b-%d")
case ${1} in
force)
_msg sub "_qsgen2_msg_2"
: >| "$blog_cache_file"
: >| "$pages_cache_file"
;;
sitemap)
_msg sub "Updating sitemaps"
export sitemap_force=true
_sitemap
exit
;;
*)
;;
esac
_blogs
_pages
_sitemap

View File

@ -0,0 +1,142 @@
#!/usr/bin/zsh
###############################################################################
###############################################################################
#
# Quick Site Generator 2 is a static website generator inspired by Nikola.
# It is written for the Z shell (zsh) because that's what I use and also because
# I like it better than Bash.
#
# This script is an almost complete rewrite of my old script because it became
# overly complicated and had way too many bugs, even though it worked on simple
# sites.
#
# https://github.com/kekePower/qsgen2/
#
###############################################################################
############################################################################### # Sat-2024-02-24
# Set to true or false
# This will show debug information from every function in this script
# You can also set debug=true in a single function if you want to debug only that specific one.
# Use Zsh fpath to set the path to some extra functions
# In this case, let's load the 'include' function
# Including some colors to the script
# Check for, and source, the config file for this specific website
# Load language as defined in config
# echo "Language file: ${dir}/${config[project_lang]}"
# Fall back to en_US if defined language isn't found
##
# @brief Display a message with specific formatting based on message type.
# @param type The type of message (e.g., std, info, debug, etc.)
# @param ... The keys or additional strings to be formatted and displayed.
##
# @brief Display the version information of the script.
# @param ... Additional arguments (unused in this function).
##
# @brief Display help information for the script.
# @param ... Additional arguments (unused in this function).
# Define cache files for blogs and pages
# Let's check if qsgen2 can generate this site by checking if 'generator' is available
# We define the variable 'engine' based on what's in the 'config' file.
# Usage: ${engine} ${1} - Where 1 is the file you want to convert
# Usage: ${engine} ${1} - Where 1 is the file you want parsed
##
# @brief Run the configured engine to process the input file.
# @param input The input file to be processed.
# Loading Zsh modules
# Let's put these here for now.
# Let's create arrays of all the files we'll be working on
##
# @brief List all page files and store them in an array.
##
# @brief List all blog files and store them in an array.
##
# @brief Cache the state of blog files and identify changes.
##
# @brief Cache the state of page files and identify changes.
# @return Array of pages to be processed.
##
# @brief Update #updated and #version tags in the provided content.
# @param content The content to be updated.
# @return The updated content.
##
# @brief Update #updated and #version tags in the provided file.
# @param file_path The path to the file to be updated.
##
# @brief Convert the filename to lowercase and replace spaces with dashes.
# @param filename The original filename.
# @return The modified filename.
##
# @brief Generate all new and updated pages.
##
# @brief Generate or update blog files or export metadata based on argument.
##
# @brief Generate the file blog/index.tmp.html.
##
# @brief Generate the www_root/blog/index.html file.
##
# @brief Add the blog list to the index file if blog_in_index is true.
##
# @brief Generate the sitemap files if conditions are met.
##
# @brief Convert #link tags to clickable HTML links.
# @param content The content containing #link tags.
# @return The content with #link tags replaced by HTML links.
##
# @brief Convert #showimg tags to HTML img tags.
# @param content The content containing #showimg tags.
# @return The content with #showimg tags replaced by HTML img tags.
##
# @brief Embed a YouTube video in the provided content.
# @param content The content containing #ytvideo tags.
# @return The content with #ytvideo tags replaced by YouTube iframe embeds.
##
# @brief Remove leftover tags from the content.
# @param content The content to be cleaned.
# @return The cleaned content.
##
# @brief Convert QStags to HTML using Perl.
# @param content The content containing QStags.
# @return The content with QStags converted to HTML.
##
# @brief Convert QStags to HTML using Zsh regex module.
# @param content The content containing QStags.
# @return The content with QStags converted to HTML. # Truncate the blog cache before doing update # Truncate the page cache before doing update
# Nothing

View File

@ -0,0 +1,16 @@
qsgen2/_blog_cache: qsgen2/_list_blogs
qsgen2/_blog_idx_for_index: qsgen2/_msg
qsgen2/_blog_index: qsgen2/_msg qsgen2/_f_last_updated
qsgen2/_blogs: qsgen2/_msg qsgen2/_list_blogs qsgen2/_blog_cache qsgen2/_blog_idx_for_index qsgen2/_blog_index
qsgen2/_f_last_updated: qsgen2/_msg
qsgen2/_last_updated: qsgen2/_msg
qsgen2/_list_blogs: qsgen2/_msg
qsgen2/_list_pages: qsgen2/_msg
qsgen2/_pages: qsgen2/_msg qsgen2/_pages_cache qsgen2/_add_blog_list_to_index
qsgen2/_pages_cache: qsgen2/_list_pages
qsgen2/_p_qstags: qsgen2/_msg
qsgen2/_qstags: qsgen2/_msg
qsgen2/_run_engine: qsgen2/_msg
qsgen2/_sitemap: qsgen2/_msg
qsgen2/_version: qsgen2/_msg
qsgen2/zsd_script_body: qsgen2/_version qsgen2/_help qsgen2/_msg qsgen2/_sitemap qsgen2/_blogs qsgen2/_pages

View File

@ -0,0 +1,2 @@
##
# @brief Add the blog list to the index file if blog_in_index is true.

View File

@ -0,0 +1,2 @@
##
# @brief Cache the state of blog files and identify changes.

View File

@ -0,0 +1,2 @@
##
# @brief Generate the file blog/index.tmp.html.

View File

@ -0,0 +1,2 @@
##
# @brief Generate the www_root/blog/index.html file.

View File

@ -0,0 +1,2 @@
##
# @brief Generate or update blog files or export metadata based on argument.

View File

@ -0,0 +1,4 @@
##
# @brief Remove leftover tags from the content.
# @param content The content to be cleaned.
# @return The cleaned content.

View File

@ -0,0 +1,3 @@
##
# @brief Update #updated and #version tags in the provided file.
# @param file_path The path to the file to be updated.

View File

@ -0,0 +1,4 @@
##
# @brief Convert the filename to lowercase and replace spaces with dashes.
# @param filename The original filename.
# @return The modified filename.

View File

@ -0,0 +1,3 @@
##
# @brief Display help information for the script.
# @param ... Additional arguments (unused in this function).

View File

@ -0,0 +1,4 @@
##
# @brief Convert #showimg tags to HTML img tags.
# @param content The content containing #showimg tags.
# @return The content with #showimg tags replaced by HTML img tags.

View File

@ -0,0 +1,4 @@
##
# @brief Update #updated and #version tags in the provided content.
# @param content The content to be updated.
# @return The updated content.

View File

@ -0,0 +1,4 @@
##
# @brief Convert #link tags to clickable HTML links.
# @param content The content containing #link tags.
# @return The content with #link tags replaced by HTML links.

View File

@ -0,0 +1,2 @@
##
# @brief List all blog files and store them in an array.

View File

@ -0,0 +1,2 @@
##
# @brief List all page files and store them in an array.

View File

@ -0,0 +1,4 @@
##
# @brief Display a message with specific formatting based on message type.
# @param type The type of message (e.g., std, info, debug, etc.)
# @param ... The keys or additional strings to be formatted and displayed.

View File

@ -0,0 +1,4 @@
##
# @brief Convert QStags to HTML using Perl.
# @param content The content containing QStags.
# @return The content with QStags converted to HTML.

View File

@ -0,0 +1,2 @@
##
# @brief Generate all new and updated pages.

View File

@ -0,0 +1,3 @@
##
# @brief Cache the state of page files and identify changes.
# @return Array of pages to be processed.

View File

@ -0,0 +1,4 @@
##
# @brief Convert QStags to HTML using Zsh regex module.
# @param content The content containing QStags.
# @return The content with QStags converted to HTML.

View File

@ -0,0 +1,3 @@
##
# @brief Run the configured engine to process the input file.
# @param input The input file to be processed.

View File

@ -0,0 +1,2 @@
##
# @brief Generate the sitemap files if conditions are met.

View File

@ -0,0 +1,3 @@
##
# @brief Display the version information of the script.
# @param ... Additional arguments (unused in this function).

View File

@ -0,0 +1,4 @@
##
# @brief Embed a YouTube video in the provided content.
# @param content The content containing #ytvideo tags.
# @return The content with #ytvideo tags replaced by YouTube iframe embeds.

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,9 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
if (${debug}) _msg debug "${0:t}_msg_1"
local blog_index_list=$(<${config[project_root]}/blog/index.tmp.html)
local site_index_file=$(<${config[site_root]}/index.html)
echo "${site_index_file}" | awk -v new_body="${blog_index_list}" '{sub(/BLOGINDEX/, new_body)} 1' > "${config[site_root]}/index.html"

View File

@ -0,0 +1,31 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
_list_blogs
typeset -A blog_cache
if [[ -f $blog_cache_file ]]; then
while IFS=':' read -r name hash; do
blog_cache[$name]=$hash
if (${debug}) _msg debug "${0:t}_msg_1" " ${blog_cache[${name}]}"
done < "$blog_cache_file"
fi
make_blog_array=()
for blog_file in ${blogs_file_array[@]}; do
current_hash=$(md5sum "$blog_file" | awk '{print $1}')
if (${debug}) _msg debug "${0:t}_msg_2" " ${blog_file}"
if (${debug}) _msg debug "${0:t}_msg_3" " ${current_hash}"
if [[ ${blog_cache[$blog_file]} != "$current_hash" ]]; then
if (${debug}) _msg debug "${0:t}_msg_4" " ${blog_file}"
if (${debug}) _msg debug "${0:t}_msg_5" " ${current_hash}"
make_blog_array+=("$blog_file")
blog_cache[$blog_file]=$current_hash
fi
done
: >| "$blog_cache_file"
for name in "${(@k)blog_cache}"; do
echo "$name:${blog_cache[$name]}" >> "$blog_cache_file"
done

View File

@ -0,0 +1,59 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
_msg sub "${0:t}_msg_1" " ${config[project_root]}/blog/index.tmp.html"
if (${debug}) _msg debug "${0:t}_msg_2"
local blog_list_tpl=$(<${config[project_root]}/themes/${config[site_theme]}/blog_list.tpl)
local blog_list_content=""
: >| "${config[project_root]}/blog/index.tmp.html"
for meta_str in ${BLOG_META_STR_ARRAY[@]}
do
if (${debug}) _msg debug "${0:t}_msg_4"
if (${debug}) _msg debug "${0:t}_msg_5" " ${meta_str}"
local -a meta_array=("${(@s/||/)meta_str}")
local sdate btitle ingress url
if (${debug}) _msg debug "${0:t}_msg_6"
for component in "${meta_array[@]}"
do
case "${component}" in
SDATE:*) sdate=${component#SDATE: } ;;
BTITLE:*) btitle=${component#BTITLE: } ;;
INGRESS:*) ingress=${component#INGRESS: } ;;
URL:*) url=${component#URL: } ;;
esac
done
local adate=( $( echo ${sdate} ) )
local caladay="${adate[1]}"
local calyear="${adate[2]}"
local calmonth="${adate[3]}"
local calnday="${adate[4]}"
local bdate="${adate[1]} - ${adate[4]}/${adate[3]}/${adate[2]}"
blog_list_content+=$(
echo "${blog_list_tpl}" | \
perl -pe "\
s|BLOGURL|${config[site_url]}${url}|g; \
s|BLOGTITLE|${btitle}|g; \
s|INGRESS|${ingress}|g; \
s|BLOGDATE|${bdate}|g; \
s|CALADAY|${caladay}|g; \
s|CALNDAY|${calnday}|g; \
s|CALMONTH|${calmonth}|g; \
s|CALYEAR|${calyear}|g \
")
unset sdate btitle ingress url adate caladay calyear calmonth calnday
done
if (${debug}) _msg debug "${0:t}_msg_7" " ${engine} " "${0:t}_msg_7.1"
blog_list_content=$( _run_engine ${blog_list_content} )
if (${debug}) _msg debug "${0:t}_msg_8" " ${config[project_root]}/blog/index.tmp.html"
echo ${blog_list_content} > ${config[project_root]}/blog/index.tmp.html

View File

@ -0,0 +1,30 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
if ([[ ${config[site_blog]} == "false" ]] && [[ ${new_updated_blogs} = "true" ]]); then
if (${debug}) _msg debug "${0:t}_msg_1" "${config[site_blog]}"
if (${debug}) _msg debug "${0:t}_msg_2" "${new_updated_blogs}"
if (${debug}) _msg debug "${0:t}_msg_3"
if (${debug}) _msg debug "${0:t}_msg_4" " ${config[site_blog]}"
_msg std "${0:t}_msg_5" " ${config[site_root]}/blog/index.html"
local blog_index_tpl=$(<${config[project_root]}/themes/${config[site_theme]}/blog_index.tpl)
local blog_index_list=$(<${config[project_root]}/blog/index.tmp.html)
if (${debug}) _msg debug "${0:t}_msg_6"
local blog_index_content=$(echo "${blog_index_tpl}" | perl -pe "s|#sitename|${config[site_name]}|gs; s|#tagline|${config[site_tagline]}|gs")
if (${debug}) _msg debug "${0:t}_msg_7" " ${config[project_root]}/blog/index.tmp.html"
blog_index_content=$( awk -v new_body="$blog_index_list" '{sub(/BODY/, new_body)} 1' <(echo "${blog_index_content}") )
if (${debug}); then
_msg debug "${0:t}_msg_8" " ${config[site_root]}/blog/index.html"
_msg debug "${0:t}_msg_9" " ${#blog_index_content}"
fi
echo "$blog_index_content" > ${config[site_root]}/blog/index.html
_f_last_updated ${config[site_root]}/blog/index.html
fi

View File

@ -0,0 +1,155 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
_msg main "${0:t}_msg_3"
if (${debug}) _msg debug "${0:t}_msg_1"
_list_blogs
if [[ ${no_blogs_found} == "true" ]]; then
_msg sub "${0:t}_msg_2"
return
fi
if (${debug}) _msg debug "${0:t}_msg_4"
_blog_cache
if (( ${#make_blog_array[@]} > 0 )); then
BLOG_META_STR_ARRAY=()
if [[ -f ${config[project_root]}/themes/${config[site_theme]}/blogs.tpl ]]; then
local blog_tpl=$(<"${config[project_root]}/themes/${config[site_theme]}/blogs.tpl")
else
_msg info "${0:t}_msg_5"
exit
fi
for blog in "${make_blog_array[@]}"; do
if (${debug}) _msg info "*************************************************************************"
if (${debug}) _msg info "**************************FOR LOOP START*********************************"
if (${debug}) _msg info "*************************************************************************"
if (${debug}) _msg debug "${0:t}_msg_6" " ${blog}"
local content="$(<"${blog}")"
local sdate btitle ingress body blog_index blog_dir blog_url
local date_found=false
local title_found=false
while IFS= read -r line
do
if [[ "${line}" == "DATE "* ]]; then
if (${debug}) _msg debug "${0:t}_msg_7"
date_found=true
fi
if [[ "${line}" == "BLOG_TITLE "* ]]; then
if (${debug}) _msg debug "${0:t}_msg_8"
title_found=true
fi
if [[ "${date_found}" == true && "${title_found}" == true ]]; then
break
fi
done <<< "${content}"
if [[ "${date_found}" == false ]]; then
if (${debug}) _msg debug "${0:t}_msg_9" " ${blog}."
continue
fi
if [[ "${title_found}" == false ]]; then
if (${debug}) _msg debug "${0:t}_msg_10" " ${blog}."
continue
fi
sdate=( $( echo ${content} | grep DATE | sed "s|DATE\ ||" | sed "s|\-|\ |g" ) )
if [[ ${config[project_generator]} == "native" ]]; then
if (${debug}) _msg debug "* qstags: Fetching BLOG_TITLE"
while IFS= read -r line; do
if [[ "$line" == "BLOG_TITLE "* ]]; then
btitle="${line#BLOG_TITLE }"
break
fi
done <<< "$content"
elif [[ ${config[project_generator]} == "markdown" ]]; then
if (${debug}) _msg debug "* markdown: Fetching BLOG_TITLE"
while IFS= read -r line; do
if [[ "$line" == \#* ]]; then
btitle="${line#\#}"
btitle="${btitle#\#}"
btitle="${btitle#"${btitle%%[![:space:]]*}"}"
break
fi
done <<< "$content"
fi
if (${debug}) _msg debug "* Fetching INGRESS"
ingress=$( echo ${content} | sed "s/'/\\\'/g" | xargs | grep -Po "#INGRESS_START\K(.*?)#INGRESS_STOP" | sed "s|\ \#INGRESS_STOP||" | sed "s|^\ ||" )
if (${debug}) _msg debug "* Fetching BODY"
body=$( echo ${content} | sed "s/'/\\\'/g" | xargs | grep -Po "#BODY_START\K(.*?)#BODY_STOP" | sed "s|\ \#BODY_STOP||" | sed "s|^\ ||" )
blog_index=$(echo "${btitle:l}" | sed 's/ /_/g; s/,//g; s/\.//g; s/://g; s/[()]//g')
blog_dir="/blog/${sdate[2]}/${sdate[3]:l}/${sdate[4]}"
blog_url="${blog_dir}/${blog_index}.html"
if (${debug}) _msg debug "${0:t}_msg_11" " ${blog} " "${0:t}_msg_11.1"
local metadata_str="SDATE: ${sdate[@]}||BTITLE: ${btitle}||INGRESS: ${ingress}||URL: ${blog_url}"
BLOG_META_STR_ARRAY+=("${metadata_str}")
if (${debug}) _msg debug "${0:t}_msg_12" " ${blog}"
_msg std " - ${btitle}"
if (${debug}) _msg debug "${0:t}_msg_14" " ${blog}"
local blog_content=$(
echo "${blog_tpl}" | \
perl -pe "\
s|BLOGTITLE|${btitle}|g; \
s|BLOGURL|${blog_url}|g; \
s|\QINGRESS\E|${ingress}|g; \
s|\QBODY\E|${body}|g \
")
blog_content="${blog_content//CALNDAY/${sdate[4]}}"
blog_content="${blog_content//CALYEAR/${sdate[2]}}"
blog_content="${blog_content//CALMONTH/${sdate[3]}}"
blog_content="${blog_content//CALADAY/${sdate[1]}}"
if (${debug}) _msg debug "${0:t}_msg_15" " ${engine} " "${0:t}_msg_15_1" " ${blog}"
blog_content=$( _run_engine "${blog_content}" )
if (${debug}) _msg debug "${0:t}_msg_16"
if [[ $( echo ${blog_content} | grep \#link ) ]]; then
if (${debug}) _msg debug "${0:t}_msg_17"
blog_content=$(_link "${blog_content}")
fi
if [[ $( echo ${blog_content} | grep \#showimg ) ]]; then
if (${debug}) _msg debug "${0:t}_msg_18"
blog_content=$(_image "${blog_content}")
fi
if [[ $( echo ${blog_content} | grep \#ytvideo ) ]]; then
if (${debug}) _msg debug "${0:t}_msg_19"
blog_content=$(_youtube "${blog_content}")
fi
if (${debug}) _msg debug "${0:t}_msg_20"
blog_content=$( echo ${blog_content} | perl -pe "s|#tagline|${config[site_tagline]}|gs; s|#sitename|${config[site_name]}|gs; s|#pagetitle|${page_title}|gs" )
if (${debug}) _msg debug "* Running _last_updated"
blog_content=$(_last_updated "${blog_content}")
if (${debug}) _msg debug "* Running _cleanup"
blog_content=$(_cleanup "${blog_content}")
if (${debug}) _msg debug "${0:t}_msg_21" " ${config[site_root]}${blog_dir}"
[[ ! -d "${config[site_root]}/${blog_dir}" ]] && mkdir -p "${config[site_root]}/${blog_dir}"
if (${debug}) _msg debug "${0:t}_msg_22" " ${config[site_root]}${blog_url}"
echo "${blog_content}" > "${config[site_root]}${blog_url}"
unset sdate btitle ingress body blog_index blog_dir blog_url
done
export BLOG_META_STR_ARRAY
if (${debug}) _msg debug "${0:t}_msg_23"
export new_updated_blogs=true
else
_msg sub "${0:t}_msg_24"
export new_updated_blogs=false
fi
if [[ ${new_updated_blogs} == "true" ]]; then
if (${debug}) _msg sub "${0:t}_msg_25"
_blog_idx_for_index
if (${debug}) _msg sub "${0:t}_msg_26"
_blog_index
fi

View File

@ -0,0 +1,16 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
local content="${1}"
if (${debug}) _msg debug "${0:t}_msg_1"
local cleaned_content=$(echo "${content}" | sed \
-e "s|¤||g" \
-e "s|#showimg\ ||g" \
-e "s|#ytvideo\ ||g" \
-e "s|#link\ ||g" \
)
echo "${cleaned_content}"

View File

@ -0,0 +1,19 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
local upd_msg="Last updated ${today} by <a href=\"https://blog.kekepower.com/qsgen2.html\">${QSGEN} ${VERSION}</a>"
if ${debug}; then
_msg debug "${0:t}_msg_1" " ${1}"
_msg debug "${0:t}_msg_2" " ${upd_msg}"
fi
local content="$(<${1})"
content="${content//#updated/${upd_msg}}"
if [[ -f "${1}" ]]; then
sed -i -e "s|#updated|${upd_msg}|" "${1}"
else
_msg debug "${0:t}_msg_3" " '${1}' " "${0:t}_msg_3.1"
fi

View File

@ -0,0 +1,5 @@
local filename="${1}"
filename="${filename// /-}"
filename=$(echo "${filename}" | sed -e 's/^[^a-zA-Z0-9_.]+//g' -e 's/[^a-zA-Z0-9_-]+/-/g')
echo ${filename}

View File

@ -0,0 +1,2 @@
echo "This is where I'll write the Help documentation."
exit

View File

@ -0,0 +1,28 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
local content="${1}"
local modified_content=""
echo "${content}" | while IFS= read -r line; do
if [[ ${line} == *"#showimg"* ]]; then
if (${debug}) _msg debug "${0:t}_msg_1" " ${line}"
local img_link=$(echo "${line}" | awk -F'#showimg ' '{print $2}')
local image=$(echo "${img_link}" | awk -F'¤' '{print $1}')
local img_alt=$(echo "${img_link}" | awk -F'¤' '{print $2}')
local real_image=""
if [[ ${image} =~ ^https?:// ]]; then
real_image=${image}
elif [[ ${image} =~ ^\/ ]]; then
real_image=${image}
else
real_image="/images/${image}"
fi
local img_tag="<img src=\"${real_image}\" alt=\"${img_alt}\" width=\"500\" />"
line=${line//"#showimg ${img_link}"/${img_tag}}
fi
modified_content+="${line}\n"
done
echo -e "${modified_content}"

View File

@ -0,0 +1,15 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
local upd_msg="Last updated ${today} by <a href=\"https://blog.kekepower.com/qsgen2.html\">${QSGEN} ${VERSION}</a>"
if (${debug}); then _msg debug "${0:t}_msg_1"; fi
if (${debug}); then _msg debug "${0:t}_msg_2" " ${upd_msg}"; fi
local content="${1}"
local updated_content=$(echo "${content}" | sed \
-e "s|#updated|${upd_msg}|")
echo "${updated_content}"

View File

@ -0,0 +1,27 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
local content="${1}"
local modified_content=""
echo "${content}" | while IFS= read -r line; do
if [[ ${line} == *"#link"* ]]; then
if (${debug}) _msg debug "${0:t}_msg_1" " ${line}"
local url_full=$(echo "${line}" | awk -F'#link ' '{print $2}' | awk -F'¤' '{print $1 "¤" $2}')
local url_dest=$(echo "${url_full}" | awk -F'¤' '{print $1}')
local url_txt=$(echo "${url_full}" | awk -F'¤' '{print $2}')
if (${debug}) _msg debug "${0:t}_msg_2" " ${url_dest}"
if (${debug}) _msg debug "${0:t}_msg_3" " ${url_txt}"
local modified_link="<a href=\"${url_dest}\">${url_txt}"
if [[ ${url_dest} =~ ^https?:// ]]; then
modified_link+="<img class=\"exticon\" alt=\"External site icon\" src=\"/images/ext-black-top.svg\" width=\"12\" />"
fi
modified_link+="</a>"
line=${line//"#link ${url_full}"/${modified_link}}
fi
modified_content+="${line}\n"
done
echo -e "${modified_content}"

View File

@ -0,0 +1,22 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
blogs_file_array=()
export no_blogs_found=false
setopt local_options null_glob
local -a blog_files=(blog/*.blog(On))
if (( ${#blog_files[@]} == 0 )); then
if ${debug}; then _msg debug "${0:t}_msg_1"; fi
export no_blogs_found=true
return
else
for file in "${blog_files[@]}"
do
if ${debug}; then _msg debug "${0:t}_msg_2" " $file"; fi
blogs_file_array+=("$file")
done
fi

View File

@ -0,0 +1,21 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
pages_file_array=()
export no_pages_found=false
setopt local_options null_glob
local -a pages_files=(*.${file_ext})
if (( ${#pages_files} == 0 )); then
if ${debug}; then _msg debug "${0:t}_msg_1" " ${file_ext}."; fi
export no_pages_found=true
return
else
for file in "${pages_files[@]}"; do
if ${debug}; then _msg debug "${0:t}_msg_2" " ${file}"; fi
pages_file_array+=("$file")
done
fi

View File

@ -0,0 +1,21 @@
local type=$1
shift
local full_msg=""
for arg in "$@"; do
if [[ -n "${qsgenlang[$arg]}" ]]; then
full_msg+="${qsgenlang[$arg]}"
else
full_msg+="$arg"
fi
done
local color="${end}"
case $type in
std) color="${green}" ;;
info) color="${yellow}" ;;
debug) color="${red}" ;;
other) color="${bold_yellow}" ;;
sub) color="${magenta}" ;;
main) color="${white}${green_bg}" ;;
esac
printf "${color}%b${end}\n" "${full_msg}"

View File

@ -0,0 +1,55 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
local content="${1}"
if ${debug}; then
_msg debug "${0:t}_msg_1"
fi
perl -0777 -pe '
BEGIN {
@qstags = (
"#BR", "<br/>\n",
"#BD", "<b>", "#EBD", "</b>",
"#I", "<i>", "#EI", "</i>\n",
"#P", "<p>", "#EP", "</p>\n",
"#Q", "<blockquote>", "#EQ", "</blockquote>\n",
"#C", "<code>", "#EC", "</code>\n",
"#H1", "<h1>", "#EH1", "</h1>\n",
"#H2", "<h2>", "#EH2", "</h2>\n",
"#H3", "<h3>", "#EH3", "</h3>\n",
"#H4", "<h4>", "#EH4", "</h4>\n",
"#H5", "<h5>", "#EH5", "</h5>\n",
"#H6", "<h6>", "#EH6", "</h6>\n",
"#STRONG", "<strong>", "#ESTRONG", "</strong>\n",
"#EM", "<em>", "#SEM", "</em>\n",
"#DV", "<div>", "#EDV", "</div>\n",
"#SPN", "<span>", "#ESPN", "</span>\n",
"#UL", "<ul>", "#EUL", "</ul>\n",
"#OL", "<ol>", "#EOL", "</ol>\n",
"#LI", "<li>", "#ELI", "</li>\n",
"#UD", "<u>", "#EUD", "</u>\n",
"#TBL", "<table>", "#ETBL", "</table>\n",
"#TR", "<tr>", "#ETR", "</tr>\n",
"#TD", "<td>", "#ETD", "</td>\n",
"#TH", "<th>", "#ETH", "</th>\n",
"#ART", "<article>", "#EART", "</article>\n",
"#SEC", "<section>", "#ESEC", "</section>\n",
"#ASIDE", "<aside>", "#EASIDE", "</aside>\n",
"#NAV", "<nav>", "#ENAV", "</nav>\n",
"#BTN", "<button>", "#EBTN", "</button>\n",
"#SEL", "<select>", "#ESEL", "</select>\n",
"#OPT", "<option>", "#EOPT", "</option>\n",
"#LT", "&lt;", "#GT", "&gt;", "#NUM", "&num;"
);
}
for (my $i = 0; $i < $#qstags; $i += 2) {
my $qstag = $qstags[$i];
my $html = $qstags[$i + 1];
s/\Q$qstag\E/$html/g;
}
' <<< "$content"

View File

@ -0,0 +1,108 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
_msg main "${0:t}_msg_3"
if (${debug}) _msg debug "${0:t}_msg_1"
_pages_cache
if [[ ${no_pages_found} == "true" ]]; then
_msg sub "${0:t}_msg_1"
return
fi
if (( ${#pages_array[@]} > 0 )); then
if (${debug}) _msg debug "${0:t}_msg_4"
for pages_in_array in ${pages_array[@]}
do
if (${debug}) _msg debug "${0:t}_msg_5"
local pages=${config[project_root]}/themes/${config[site_theme]}/pages.tpl
if [[ ! -f ${pages} ]]; then
_msg info "${0:t}_msg_6" " ${pages}"
exit
else
if (${debug}) _msg debug "${0:t}_msg_7"
local pages_tpl="$(<${pages})"
fi
if (${debug}) _msg debug "${0:t}_msg_9" " ${pages_in_array}"
local page_content="$(<${pages_in_array})"
if (${debug}) _msg debug "${0:t}_msg_10"
if [[ ${config[project_generator]} == "native" ]]; then
while read -r line
do
if [[ "$line" =~ ^#title=(.*) ]]; then
local page_title=${match[1]}
break
fi
done <<< "$page_content"
elif [[ ${config[project_generator]} == "markdown" ]]; then
while IFS= read -r line
do
if [[ "$line" == \#* ]]; then
local page_title="${line#\#}"
page_title="${page_title#\#}"
page_title="${page_title#"${page_title%%[![:space:]]*}"}"
break
fi
done <<< ${page_content}
fi
_msg std " - ${page_title}"
if (${debug}) _msg debug "${0:t}_msg_11" " ${page_title}"
if (${debug}) _msg debug "${0:t}_msg_12"
page_content=$( echo ${page_content} | grep -v \#title )
if (${debug}) _msg debug "${0:t}_msg_13" " ${pages_in_array}"
page_content=$( _run_engine "$page_content" )
if (${debug}) _msg debug "${0:t}_msg_14"
if [[ $( echo ${page_content} | grep \#link ) ]]; then
if (${debug}) _msg debug "${0:t}_msg_15"
page_content=$( _link "${page_content}" )
fi
if [[ $( echo ${page_content} | grep \#showimg ) ]]; then
if (${debug}) _msg debug "${0:t}_msg_16"
page_content=$( _image "${page_content}" )
fi
if [[ $( echo ${page_content} | grep \#ytvideo ) ]]; then
if (${debug}) _msg debug "${0:t}_msg_17"
page_content=$( _youtube "${page_content}" )
fi
if (${debug}) _msg debug "${0:t}_msg_18"
pages_tpl=$(echo "${pages_tpl}" | perl -pe "s|#pagetitle|${page_title}|gs; s|#tagline|${config[site_tagline]}|gs; s|#sitename|${config[site_name]}|gs")
if (${debug}) _msg debug "${0:t}_msg_19"
pages_tpl=$( awk -v new_body="$page_content" '{sub(/BODY/, new_body)} 1' <(echo "${pages_tpl}") )
if (${debug}) _msg debug "${0:t}_msg_20"
pages_tpl=$( _last_updated ${pages_tpl} )
if (${debug}) _msg debug "${0:t}_msg_21"
pages_title_lower=$( _file_to_lower "${pages_in_array}" )
if (${debug}) _msg debug "${0:t}_msg_22"
pages_tpl=$( _cleanup "${pages_tpl}" )
echo "${pages_tpl}" > ${config[site_root]}/${pages_title_lower%.*}.html
if [[ ${pages_in_array} == "index.${file_ext}" && ${config[site_blog]} == "true" && -s "${config[project_root]}/blog/index.tmp.html" ]]; then
if (${debug}) _msg sub "${0:t}_msg_23" " ${pages_in_array}"
if (${debug}) _msg sub "${0:t}_msg_24" " ${config[site_blog]}"
if (${debug}) _msg sub "${0:t}_msg_25"
if (${debug}) ls -l ${config[project_root]}/blog/index.tmp.html
_add_blog_list_to_index
fi
done
export new_updated_pages=true
else
if [[ ${config[site_blog]} == "true" && -s "${config[project_root]}/blog/index.tmp.html" ]]; then
_msg std "${0:t}_msg_26"
if (${debug}) _msg sub "${0:t}_msg_27" " ${pages_in_array}"
if (${debug}) _msg sub "${0:t}_msg_28" " ${config[site_blog]}"
if (${debug}) _msg sub "${0:t}_msg_25"
if (${debug}) ls -l ${config[project_root]}/blog/index.tmp.html
_add_blog_list_to_index
fi
_msg sub "${0:t}_msg_29"
export new_updated_pages=false
fi

View File

@ -0,0 +1,31 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
typeset -A pages_cache
_list_pages
if [[ -f $pages_cache_file ]]; then
while IFS=':' read -r name hash; do
pages_cache[$name]=$hash
if (${debug}) _msg debug "${0:t}_msg_1" " ${pages_cache[${name}]}"
done < "$pages_cache_file"
fi
pages_array=()
for file in ${pages_file_array[@]}; do
current_hash=$(md5sum "$file" | awk '{print $1}')
if (${debug}) _msg debug "${0:t}_msg_2" " ${pages_cache[$file]}"
if (${debug}) _msg debug "${0:t}_msg_3" " current_cache: ${current_hash}"
if [[ ${pages_cache[$file]} != "$current_hash" ]]; then
if (${debug}) _msg debug "${0:t}_msg_4" " ${pages_cache[$file]}"
if (${debug}) _msg debug "${0:t}_msg_5" " current_cache: ${current_hash}"
pages_array+=("$file")
pages_cache[$file]=$current_hash
fi
done
: >| "$pages_cache_file"
for name in "${(@k)pages_cache}"; do
echo "$name:${pages_cache[$name]}" >> "$pages_cache_file"
done

View File

@ -0,0 +1,50 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
local content="${1}"
if ${debug}; then
_msg debug "${0:t}_msg_1"
fi
typeset -A qstags=(
"#BR" "<br/>\n"
"#BD" "<b>" "#EBD" "</b>"
"#I" "<i>" "#EI" "</i>\n"
"#P" "<p>" "#EP" "</p>\n"
"#Q" "<blockquote>" "#EQ" "</blockquote>\n"
"#C" "<code>" "#EC" "</code>\n"
"#H1" "<h1>" "#EH1" "</h1>\n"
"#H2" "<h2>" "#EH2" "</h2>\n"
"#H3" "<h3>" "#EH3" "</h3>\n"
"#H4" "<h4>" "#EH4" "</h4>\n"
"#H5" "<h5>" "#EH5" "</h5>\n"
"#H6" "<h6>" "#EH6" "</h6>\n"
"#STRONG" "<strong>" "#ESTRONG" "</strong>\n"
"#EM" "<em>" "#SEM" "</em>\n"
"#DV" "<div>" "#EDV" "</div>\n"
"#SPN" "<span>" "#ESPN" "</span>\n"
"#UL" "<ul>" "#EUL" "</ul>\n"
"#OL" "<ol>" "#EOL" "</ol>\n"
"#LI" "<li class=\"libody\">" "#ELI" "</li>\n"
"#UD" "<u>" "#EUD" "</u>\n"
"#TBL" "<table>" "#ETBL" "</table>\n"
"#TR" "<tr>" "#ETR" "</tr>\n"
"#TD" "<td>" "#ETD" "</td>\n"
"#TH" "<th>" "#ETH" "</th>\n"
"#ART" "<article>" "#EART" "</article>\n"
"#SEC" "<section>" "#ESEC" "</section>\n"
"#ASIDE" "<aside>" "#EASIDE" "</aside>\n"
"#NAV" "<nav>" "#ENAV" "</nav>\n"
"#BTN" "<button>" "#EBTN" "</button>\n"
"#SEL" "<select>" "#ESEL" "</select>\n"
"#OPT" "<option>" "#EOPT" "</option>\n"
"#LT" "&lt;" "#GT" "&gt;" "#NUM" "&num;"
)
for qstag html (${(kv)qstags}); do
content=${content//${qstag}/${html}}
done
echo "${content}"

View File

@ -0,0 +1,11 @@
local debug=false
if [[ ${config[project_generator]} == "native" ]]; then
${engine} ${1}
elif [[ ${config[project_generator]} == "markdown" ]]; then
echo "${1} | ${engine} ${engine_opts}"
else
_msg debug "ERROR running engine: ${engine}!"
_msg info "Usage: _run_engine <input>"
exit
fi

View File

@ -0,0 +1,92 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
if ([[ ${config[site_sitemap]} == "true" ]] && ( [[ ${new_updated_blogs} == "true" ]] || [[ ${new_updated_pages} == "true" ]] )) || [[ ${sitemap_force} == "true" ]]; then
setopt extendedglob
_msg main "${0:t}_msg_1"
local sm_file="sitemap.xml"
local b_file="sitemap-blogs.xml"
local p_file="sitemap-pages.xml"
local sitemap_file="${config[site_root]}/${sm_file}"
local sitemap_blog="${config[site_root]}/${b_file}"
local sitemap_page="${config[site_root]}/${p_file}"
builtin cd ${config[site_root]}
local -a html_files=(**/[a-z]*.html(.))
local -a blog_files=()
local -a page_files=()
for file in "${html_files[@]}"; do
if [[ $file == *blog* ]]; then
blog_files+=("$file")
else
page_files+=("$file")
fi
done
echo '<?xml version="1.0" encoding="UTF-8"?>' > ${sitemap_blog}
echo "<!-- Sitemap generated by ${QSGEN} ${VERSION} - https://github.com/kekePower/qsgen2 -->" >> ${sitemap_blog}
echo "<?xml-stylesheet type=\"text/xsl\" href=\"${config[site_url]}/css/default-sitemap.xsl?sitemap=page\"?>" >> ${sitemap_blog}
echo '<urlset' >> ${sitemap_blog}
echo ' xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"' >> ${sitemap_blog}
echo ' xmlns:xhtml="http://www.w3.org/1999/xhtml"' >> ${sitemap_blog}
echo ' xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"' >> ${sitemap_blog}
echo '>' >> ${sitemap_blog}
for file in "${blog_files[@]}"
do
local url="${config[site_url]}/${file}"
local lastmod=$(stat -c %y "${file}" 2>/dev/null | cut -d' ' -f1,2 | sed 's/ /T/' | sed 's/\..*$//')
echo " <url>" >> ${sitemap_blog}
echo " <loc>${url}</loc>" >> ${sitemap_blog}
echo " <lastmod><![CDATA[${lastmod}+01:00]]></lastmod>" >> ${sitemap_blog}
echo " <changefreq><![CDATA[always]]></changefreq>" >> ${sitemap_blog}
echo " <priority><![CDATA[1]]></priority>" >> ${sitemap_blog}
echo " </url>" >> ${sitemap_blog}
done
echo '</urlset>' >> "${sitemap_blog}"
_msg std " - ${b_file}"
echo '<?xml version="1.0" encoding="UTF-8"?>' > ${sitemap_page}
echo "<!-- Sitemap generated by ${QSGEN} ${VERSION} - https://github.com/kekePower/qsgen2 -->" >> ${sitemap_page}
echo "<?xml-stylesheet type=\"text/xsl\" href=\"${config[site_url]}/css/default-sitemap.xsl?sitemap=page\"?>" >> ${sitemap_page}
echo '<urlset' >> ${sitemap_page}
echo ' xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"' >> ${sitemap_page}
echo ' xmlns:xhtml="http://www.w3.org/1999/xhtml"' >> ${sitemap_page}
echo ' xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"' >> ${sitemap_page}
echo '>' >> ${sitemap_page}
for file in "${page_files[@]}"
do
local url="${config[site_url]}/${file}"
local lastmod=$(stat -c %y "${file}" 2>/dev/null | cut -d' ' -f1,2 | sed 's/ /T/' | sed 's/\..*$//')
echo " <url>" >> ${sitemap_page}
echo " <loc>${url}</loc>" >> ${sitemap_page}
echo " <lastmod><![CDATA[${lastmod}+01:00]]></lastmod>" >> ${sitemap_page}
echo " <changefreq><![CDATA[always]]></changefreq>" >> ${sitemap_page}
echo " <priority><![CDATA[1]]></priority>" >> ${sitemap_page}
echo " </url>" >> ${sitemap_page}
done
echo '</urlset>' >> "${sitemap_page}"
_msg std " - ${p_file}"
if (${debug}); then _msg debug "${0:t}_msg_2" " ${sitemap_file}"; fi
echo '<?xml version="1.0" encoding="UTF-8"?>' > "${sitemap_file}"
echo "<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">" >> "${sitemap_file}"
echo " <sitemap>" >> "${sitemap_file}"
echo " <loc>${config[site_url]}/${b_file}</loc>" >> "${sitemap_file}"
local lastmod_b=$(stat -c %y "${b_file}" 2>/dev/null | cut -d' ' -f1,2 | sed 's/ /T/' | sed 's/\..*$//')
echo " <lastmod>${lastmod_b}</lastmod>" >> "${sitemap_file}"
echo " </sitemap>" >> "${sitemap_file}"
echo " <sitemap>" >> "${sitemap_file}"
echo " <loc>${config[site_url]}/${p_file}</loc>" >> "${sitemap_file}"
local lastmod_p=$(stat -c %y "${p_file}" 2>/dev/null | cut -d' ' -f1,2 | sed 's/ /T/' | sed 's/\..*$//')
echo " <lastmod>${lastmod_p}</lastmod>" >> "${sitemap_file}"
echo " </sitemap>" >> "${sitemap_file}"
echo "</sitemapindex>" >> "${sitemap_file}"
_msg std " - ${sm_file}"
builtin cd ${config[project_root]}
fi

View File

@ -0,0 +1,4 @@
_msg info "_qsgen2_msg_7" "-$(strftime "%Y")"
echo "${yellow}- https://github.com/kekePower/qsgen2/${end}"
_msg info "_qsgen2_msg_8" " '${1} help' " "_qsgen2_msg_8.1"
exit

View File

@ -0,0 +1,18 @@
if [[ ${globaldebug} == "true" ]]; then
local debug=true
else
local debug=false
fi
local content="${1}"
local modified_content=""
echo "${content}" | while IFS= read -r line; do
if [[ ${line} == *"#ytvideo"* ]]; then
if (${debug}) _msg debug "${0:t}_msg_1" " ${line}"
local yt_id=$(echo "${line}" | awk -F'#ytvideo ' '{print $2}')
local yt_iframe="<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/${yt_id}\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen></iframe>"
line=${line//"#ytvideo ${yt_id}"/${yt_iframe}}
fi
modified_content+="${line}\n"
done
echo -e "${modified_content}"

View File

@ -0,0 +1,14 @@
qsgen2/_add_blog_list_to_index: qsgen2/_pages
qsgen2/_blog_cache: qsgen2/_blogs
qsgen2/_blog_idx_for_index: qsgen2/_blogs
qsgen2/_blog_index: qsgen2/_blogs
qsgen2/_blogs: qsgen2/zsd_script_body
qsgen2/_f_last_updated: qsgen2/_blog_index
qsgen2/_help: qsgen2/zsd_script_body
qsgen2/_list_blogs: qsgen2/_blog_cache qsgen2/_blogs
qsgen2/_list_pages: qsgen2/_pages_cache
qsgen2/_msg: qsgen2/_version qsgen2/zsd_script_body qsgen2/_run_engine qsgen2/_list_pages qsgen2/_list_blogs qsgen2/_last_updated qsgen2/_f_last_updated qsgen2/_pages qsgen2/_blogs qsgen2/_blog_idx_for_index qsgen2/_blog_index qsgen2/_sitemap qsgen2/_p_qstags qsgen2/_qstags
qsgen2/_pages: qsgen2/zsd_script_body
qsgen2/_pages_cache: qsgen2/_pages
qsgen2/_sitemap: qsgen2/zsd_script_body
qsgen2/_version: qsgen2/zsd_script_body

View File

@ -0,0 +1,28 @@
Script_Body_
|-- _blogs
|   |-- _blog_cache
|   |   `-- _list_blogs
|   |   `-- _msg
|   |-- _blog_idx_for_index
|   |   `-- _msg
|   |-- _blog_index
|   |   |-- _f_last_updated
|   |   |   `-- _msg
|   |   `-- _msg
|   |-- _list_blogs
|   |   `-- _msg
|   `-- _msg
|-- _help
|-- _msg
|-- _pages
|   |-- _add_blog_list_to_index
|   |-- _msg
|   `-- _pages_cache
|   `-- _list_pages
|   `-- _msg
|-- _sitemap
|   `-- _msg
`-- _version
`-- _msg
26 directories, 0 files

View File

@ -0,0 +1,5 @@
_blog_cache
`-- _list_blogs
`-- _msg
3 directories, 0 files

View File

@ -0,0 +1,4 @@
_blog_idx_for_index
`-- _msg
2 directories, 0 files

View File

@ -0,0 +1,6 @@
_blog_index
|-- _f_last_updated
|   `-- _msg
`-- _msg
4 directories, 0 files

View File

@ -0,0 +1,15 @@
_blogs
|-- _blog_cache
|   `-- _list_blogs
|   `-- _msg
|-- _blog_idx_for_index
|   `-- _msg
|-- _blog_index
|   |-- _f_last_updated
|   |   `-- _msg
|   `-- _msg
|-- _list_blogs
|   `-- _msg
`-- _msg
13 directories, 0 files

View File

@ -0,0 +1,4 @@
_f_last_updated
`-- _msg
2 directories, 0 files

View File

@ -0,0 +1,4 @@
_last_updated
`-- _msg
2 directories, 0 files

View File

@ -0,0 +1,4 @@
_list_blogs
`-- _msg
2 directories, 0 files

View File

@ -0,0 +1,4 @@
_list_pages
`-- _msg
2 directories, 0 files

View File

@ -0,0 +1,4 @@
_p_qstags
`-- _msg
2 directories, 0 files

View File

@ -0,0 +1,8 @@
_pages
|-- _add_blog_list_to_index
|-- _msg
`-- _pages_cache
`-- _list_pages
`-- _msg
6 directories, 0 files

View File

@ -0,0 +1,5 @@
_pages_cache
`-- _list_pages
`-- _msg
3 directories, 0 files

View File

@ -0,0 +1,4 @@
_qstags
`-- _msg
2 directories, 0 files

View File

@ -0,0 +1,4 @@
_run_engine
`-- _msg
2 directories, 0 files

View File

@ -0,0 +1,4 @@
_sitemap
`-- _msg
2 directories, 0 files

View File

@ -0,0 +1,4 @@
_version
`-- _msg
2 directories, 0 files

Some files were not shown because too many files have changed in this diff Show More