#!/bin/env zsh # License: GPL v2.0 and newer # Script to generate static html files from input # Includes # - Header # - Body # - Footer VERSION="0.5.5" root_dir=${HOME}/www/text OUTPUT=${HOME}/www/html HEADER=${root_dir}/site/header.tpl FOOTER=${root_dir}/site/footer.tpl BLOG_TPL=${root_dir}/site/blog.tpl BLOG_IDX_TPL=${root_dir}/site/blog_index.tpl TODAY=$( date "+%Y-%m-%d - %T" ) BLOGDATE=$( date +%a-%Y-%b-%d ) builtin cd ${root_dir} function header() { if [[ $( grep title ${1} | head -2) ]]; then title=$( cat ${1} | head -2 | grep \#title | cut -d= -f2 ) NEW_HEADER=$( cat ${HEADER} | sed -e "s|#pagetitle|${title}|" ) else NEW_HEADER=$( cat ${HEADER} | sed -e "s|#pagetitle|No\ title\ supplied|" ) fi echo ${NEW_HEADER} > ${OUTPUT}/${1%.*}.html } function footer() { NEW_FOOTER=$( cat ${FOOTER} | sed -e "s|#updated|${TODAY}|" | sed -e "s|#version|${VERSION}|" ) echo ${NEW_FOOTER} >> ${OUTPUT}/${1%.*}.html } function exturl() { local get_ext_url local ext_url_link local ext_url_dest local ext_url_txt cat ${OUTPUT}/${1%.*}.html | sed "s/\.\ /\.\\n/g" | sed "s/\,/\,\\n/g" | grep -P '(?=.*?#ext)' |\ while read ext_url do #echo "MAIN: (${1}) ${ext_url}" get_ext_url=$( echo ${ext_url} | awk '/#ext/' | cut -d# -f2 ) #echo "EXT_GET_URL: ${get_ext_url}" ext_url_link=$( echo ${get_ext_url} | cut -d' ' -f2- ) #echo "EXT_URL_LINK: ${ext_url_link}" ext_url_dest=$( echo ${ext_url_link} | cut -dÅ -f1 | cut -dÅ -f1 ) #echo "EXT_URL_DEST: ${ext_url_dest}" ext_url_txt=$( echo ${ext_url_link} | cut -dÅ -f2- | cut -dÅ -f1 ) #echo "EXT_URL_TXT: ${ext_url_txt}" echo ${url_link} |\ sed -i -- 's|'${ext_url_dest}'||' ${OUTPUT}/${1%.*}.html sed -i -- 's|'${ext_url_txt}'|'${ext_url_txt}'\"External<\/a>|' ${OUTPUT}/${1%.*}.html sed -i -- "s|#ext\ ||" ${OUTPUT}/${1%.*}.html done } function url() { local get_url local url_link local url_dest local url_txt cat ${OUTPUT}/${1%.*}.html | sed "s/\.\ /\.\\n/g" | sed "s/\,/\,\\n/g" | grep -P '(?=.*?#inturl)' |\ while read url do get_url=$( echo ${url} | awk '/#inturl/' | cut -d# -f2 ) #echo "INT_GET_URL: ${get_url}" url_link=$( echo ${get_url} | cut -d' ' -f2- ) #echo "INT_URL_LINK: ${url_link}" url_dest=$( echo ${url_link} | cut -dÅ -f1 | cut -dÅ -f1 ) #echo "INT_URL_DEST: ${url_dest}" url_txt=$( echo ${url_link} | cut -dÅ -f2 | cut -dÅ -f1 ) #echo "INT_URL_TXT: ${url_txt}" echo ${url_link} |\ sed -i -- 's|'${url_dest}'||' ${OUTPUT}/${1%.*}.html sed -i -- 's|'${url_txt}'|'${url_txt}'<\/a>|' ${OUTPUT}/${1%.*}.html sed -i -- "s|\#inturl\ ||" ${OUTPUT}/${1%.*}.html done } function img() { cat ${OUTPUT}/${1%.*}.html | sed "s/\.\ /\.\\n/g" | sed "s/\,/\,\\n/g" | grep -P '(?=.*?showimg)' |\ while read img do local get_img local img_link local image local img_alt get_img=$( echo "${img}" | awk '/#showimg/' | cut -d# -f2-) #echo "GET_IMG: $get_img" img_link=$( echo ${get_img} | cut -d' ' -f2- ) #echo "IMG_LINK: $img_link" image=$( echo ${img_link} | cut -dÅ -f1 | cut -dÅ -f1- ) #echo "IMAGE: $image" img_alt=$( echo ${img_link} | cut -dÅ -f2- | cut -dÅ -f1- ) #echo "IMG_ALT: $img_alt" echo ${img_link} |\ sed -i -- "s|${image}||' ${OUTPUT}/${1%.*}.html sed -i -- "s|\#showimg\ ||" ${OUTPUT}/${1%.*}.html done } function clean_url() { sed -i -- "s|Å||g" ${OUTPUT}/${1%.*}.html } function html() { sed -i -- "s/\#BR//g" ${OUTPUT}/${1%.*}.html sed -i -- "s/\#P/

/g" ${OUTPUT}/${1%.*}.html sed -i -- "s/\#EP/<\/p>/g" ${OUTPUT}/${1%.*}.html sed -i -- "s/\#Q/

/g" ${OUTPUT}/${1%.*}.html sed -i -- "s/\#EQ/<\/blockquote>/g" ${OUTPUT}/${1%.*}.html sed -i -- "s|\#STRONG||g" ${OUTPUT}/${1%.*}.html sed -i -- "s|\#ESTRONG||g" ${OUTPUT}/${1%.*}.html sed -i -- "s|\#I||g" ${OUTPUT}/${1%.*}.html sed -i -- "s|\#EI|<\/i>|g" ${OUTPUT}/${1%.*}.html sed -i -- "s|\#C||g" ${OUTPUT}/${1%.*}.html sed -i -- "s|\#EC|<\/code>|g" ${OUTPUT}/${1%.*}.html sed -i -- "s|\#EM||g" ${OUTPUT}/${1%.*}.html sed -i -- "s|\#SEM|<\/em>|g" ${OUTPUT}/${1%.*}.html sed -i -- "s|\#OT|\"|g" ${OUTPUT}/${1%.*}.html } function make_blog() { ls -har blog/*blog |\ while read blog do # Array sdate = Name day=4, Year=2, Month=3, Number day=1 sed -i "s/GETDATE/${BLOGDATE}/" ${blog} # sed -i "s/\'/\\\'/g" ${blog} sdate=( $( cat ${blog} | grep DATE | sed "s|DATE\ ||" | sed "s|\-|\ |g" ) ) btitle=$( cat ${blog} | grep BLOG_TITLE | cut -d' ' -f2- ) ingress=$( cat ${blog} | sed "s/'/\\\'/g" | xargs | grep -Po "#INGRESS_START\K(.*?)#INGRESS_STOP" | sed "s/\ \#INGRESS_STOP//" | sed "s/^\ //" ) body=$( cat ${blog} | sed "s/'/\\\'/g" | xargs | grep -Po "#BODY_START\K(.*?)#BODY_STOP" | sed "s/\ \#BODY_STOP//" | sed "s/^\ //" ) blog_index=$( echo ${btitle} | sed -e "s|-|_|" | sed -e "s|\ |-|g" | sed -e "s|\,||g" | sed -e "s|\.||" ) blog_dir="/blog/${sdate[2]}/${sdate[3]}/${sdate[4]}" blog_url="${blog_dir}/${blog_index}.html" if [[ ! -d ${OUTPUT}${blog_dir} ]]; then mkdir -p ${OUTPUT}${blog_dir} fi cat ${BLOG_IDX_TPL} | sed \ -e "s|BLOGTITLE|${btitle}|" \ -e "s|CALADAY|${sdate[1]}|" \ -e "s|CALNDAY|${sdate[4]}|" \ -e "s|CALMONTH|${sdate[3]}|" \ -e "s|CALYEAR|${sdate[2]}|" \ -e "s|BLOGURL|${blog_url}|" \ -e "s|INGRESS|${ingress}|" \ -e "s|DATE\ ||" \ > ${blog%.*}.idx if [[ ! $( cat ${blog%.*}.idx | grep \#title ) ]]; then NEW_HEADER=$( cat ${HEADER} | sed -e "s|#pagetitle|${btitle}|" ) else NEW_HEADER=$( cat ${HEADER} | sed -e "s|#pagetitle|Blog|" ) fi echo ${NEW_HEADER} > ${OUTPUT}${blog_url} cat ${BLOG_TPL} | sed \ -e "s|BLOGTITLE|${btitle}|" \ -e "s|CALADAY|${sdate[1]}|" \ -e "s|CALNDAY|${sdate[4]}|" \ -e "s|CALMONTH|${sdate[3]}|" \ -e "s|CALYEAR|${sdate[2]}|" \ -e "s|INGRESS|${ingress}|" \ -e "s|BODY|${body}|" \ -e "s|DATE\ ||" \ -e "s|\#title||" \ >> ${OUTPUT}${blog_url} NEW_FOOTER=$( cat ${FOOTER} | sed -e "s|#updated|${TODAY}|" | sed -e "s|\#version|${VERSION}|" ) echo "Generating: footer for ${blog_url}" echo ${NEW_FOOTER} >> ${OUTPUT}${blog_url} html ${blog_url} img ${blog_url} url ${blog_url} exturl ${blog_url} clean_url ${blog_url} done } function blog_index() { make_blog ls -har blog/*idx |\ while read blogs do cat ${blogs} >> ${OUTPUT}/index.html done html ${1} url ${1} img ${1} } function body() { html ${1} url ${1} img ${1} cat ${1} | grep -v "\#title=" >> ${OUTPUT}/${1%.*}.html } function generate() { echo "Generating: ${1%.*}.html" header ${1} body ${1} html ${1} url ${1} img ${1} exturl ${1} clean_url ${1} } if [[ ! ${1} ]]; then ls -1bt *tpl |\ while read t do generate ${t} done if [[ -d blog ]]; then echo "Generating: blog entries" blog_index index.idx echo "Generating: blog index file" rm -f blog/index.html ls -1bt blog/*blog |\ while read b do cat ${b%.*}.idx >> blog/index.html done header blog/index.html cat blog/index.html >> ${OUTPUT}/blog/index.html footer blog/index.html fi ls -1bt *tpl |\ while read t do echo "Generating: footer for ${t%.*}.html" footer ${t} done else generate ${1} echo "Generating: footer for ${1%.*}.html" footer ${1} fi