commit e249829a851b58876124433b43c72c02b8ca81df
parent 94bed6022e16b4095581d31c38056be14675d4c3
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Sun, 15 Dec 2013 20:32:59 +0100
cleanup and use consistent variable naming
Signed-off-by: Hiltjo Posthuma <hiltjo@codemadness.org>
Diffstat:
16 files changed, 204 insertions(+), 200 deletions(-)
diff --git a/generate.sh b/generate.sh
@@ -1,14 +1,11 @@
#!/bin/sh
-# Generate a simple static site with an index page.
-# Author: Hiltjo Posthuma <hiltjo@codemadness.org>
-# License: WTFPL
# Syntax highlight code.
code_highlight() {
- echo '<pre>'
+ printf '%s\n' '<pre>'
# escape some HTML entities, prefix code with linenumbers.
sed -e 's@&@\&@g' -e 's@>@\>@g' -e 's@<@\<@g' | nl -w 4 -s ' '
- echo '</pre>'
+ printf '%s\n' '</pre>'
}
# page_metadata(filename)
@@ -17,82 +14,93 @@ page_metadata() {
tags=""
title=""
url=""
- pagetitle=""
description="${sitedescription}"
keywords="${sitekeywords}"
filename=""
content=""
categories=""
timestamp=""
- [ -f "$1" ] && . "$1" # load page metadata.
+ [ ! "$1" = "" ] && [ -f "$1" ] && . "$1" # load page metadata.
}
-# Read config file.
-configfile="$1"
-if [ "$configfile" = "" ]; then
- configfile="./config.sh"
-fi
-if [ -f "$configfile" ]; then
- . "$configfile"
-else
- echo "$configfile not found or not a file." >&2
- exit 1
-fi
+# load config (evaluate shellscript).
+# loadconfig(configfile)
+loadconfig() {
+ # allow to specify config via argv[1].
+ if [ ! "$1" = "" ]; then
+ # get absolute path of config file.
+ config=$(readlink -f "$1")
+ else
+ # default config location.
+ config="./site.conf"
+ fi
+ # load config: config is loaded here to be able to override above variables
+ # (sfeedpath, sfeedfile, etc).
+ if [ -r "$config" ]; then
+ . "$config"
+ else
+ echo "$0 [configfile]" >&2
+ echo "" >&2
+ echo "Configuration file \"$config\" does not exist or is not readable." >&2
+ exit 1
+ fi
+}
-# Remember current dir.
-pwddir="$(pwd)"
+# Read config file.
+loadconfig "$1"
+config="$1"
-# Make output dir.
-mkdir -p "$outputdir"
+# Try to make output dir.
+mkdir -p "${outputdir}"
# process pages.
# truncate pages where content is appended.
for name in "rss.xml" "atom.xml" "index.html"; do
- echo > "$outputdir/$name"
+ echo > "${outputdir}/${name}"
done
-find "$pagesdir" -name "*.sh" | while read page; do
- page_metadata "$page" # load page metadata.
- printf "%s\t%s\n" "$timestamp" "$page"
-done | sort -rn | while read ts meta; do # process in order of time descending.
- pagename=$(basename "$meta" ".sh")
- page_metadata "$meta"
+find "${pagesdir}" -name "*.sh" | while read -r page; do
+ page_metadata "${page}" # load page metadata.
+ printf "%s\t%s\n" "${timestamp}" "${page}"
+done | sort -rn | while read -r ts meta; do # process in order of time descending.
+ pagename=$(basename "${meta}" ".sh")
+ page_metadata "${meta}"
urlfull="${sitefullurl}/${url}"
#url="${siterelurl}/${url}"
- if [ -f "$pagesdir/$pagename.html" ]; then
- filename="$pagesdir/$pagename.html"
- content=$(cat "$filename")
- elif [ -f "$pagesdir/$pagename.md" ]; then
+ if [ -f "${pagesdir}/${pagename}.html" ]; then
+ filename="${pagesdir}/${pagename}.html"
+ content=$(cat "${filename}")
+ elif [ -f "${pagesdir}/${pagename}.md" ]; then
# TODO: test markdown
- filename="$pagesdir/$pagename.md"
- content=$("$markdown" "$filename")
+ filename="${pagesdir}/${pagename}.md"
+ content=$("${markdown}" "${filename}")
fi
- . "$layoutdir/page/page.sh" > "$outputdir/$pagename.html"
- . "$layoutdir/rss/rssitem.sh" >> "$outputdir/rss.xml"
- . "$layoutdir/atom/atomitem.sh" >> "$outputdir/atom.xml"
- . "$layoutdir/index/indexitem.sh" >> "$outputdir/index.html"
+ . "${layoutdir}/page/page.sh" > "${outputdir}/${pagename}.html"
+ . "${layoutdir}/index/indexitem.sh" >> "${outputdir}/index.html"
+ . "${layoutdir}/rss/rssitem.sh" >> "${outputdir}/rss.xml"
+ . "${layoutdir}/atom/atomitem.sh" >> "${outputdir}/atom.xml"
done
# Index page.
page_metadata ""
title="Posts"
-content=$(cat "$outputdir/index.html")
-. "$layoutdir/index/index.sh" > "$outputdir/index.html"
+content=$(cat "${outputdir}/index.html")
+. "${layoutdir}/index/index.sh" > "${outputdir}/index.html"
# RSS
page_metadata ""
-content=$(cat "$outputdir/rss.xml")
-. "$layoutdir/rss/rss.sh" > "$outputdir/rss.xml"
+content=$(cat "${outputdir}/rss.xml")
+. "${layoutdir}/rss/rss.sh" > "${outputdir}/rss.xml"
# Atom
page_metadata ""
-content=$(cat "$outputdir/atom.xml")
-. "$layoutdir/atom/atom.sh" > "$outputdir/atom.xml"
+content=$(cat "${outputdir}/atom.xml")
+. "${layoutdir}/atom/atom.sh" > "${outputdir}/atom.xml"
# Goto output dir to make relative urls.
-cd "$outputdir"
+cd "${outputdir}"
# Sitemap: urllist.txt
-find ./ -type f -name "*.html" | sort | sed 's@^./\(.*\)$@'$sitefullurl'/\1@' > "urllist.txt"
+find ./ -type f -name "*.html" | sort | sed 's@^./\(.*\)$@'${sitefullurl}'/\1@' > "urllist.txt"
# Sitemap: sitemap.xml
(cat <<!
@@ -100,7 +108,7 @@ find ./ -type f -name "*.html" | sort | sed 's@^./\(.*\)$@'$sitefullurl'/\1@' >
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
!
-find ./ -type f -name "*.html" | sort | sed 's@^./\(.*\)$@<url><loc>'$sitefullurl'/\1</loc></url>@'
+find ./ -type f -name "*.html" | sort | sed 's@^./\(.*\)$@<url><loc>'${sitefullurl}'/\1</loc></url>@'
cat <<!
</urlset>
@@ -108,8 +116,4 @@ cat <<!
) > "sitemap.xml"
# Restore current dir.
-cd "$pwddir"
-
-# Copy stylesheets.
-cp "style.css" "$outputdir"
-cp "print.css" "$outputdir"
+cd "${basedir}"
diff --git a/layout/atom/atom.sh b/layout/atom/atom.sh
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-cat <<!__EOF__
-<?xml version="1.0" encoding="UTF-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
- <title type="text">${sitetitle}</title>
- <subtitle type="text">${sitedescription}</subtitle>
- <updated>$(date "+%Y-%m-%dT%H:%M:%SZ" -d "$builddate")</updated>
- <link rel="alternate" type="text/html" href="${sitefullurl}" />
- <id>${sitefullurl}/atom.xml</id>
- <link rel="self" type="application/atom+xml" href="${sitefullurl}/atom.xml" />
- ${content}
-</feed>
-!__EOF__
diff --git a/layout/atom/atomitem.sh b/layout/atom/atomitem.sh
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-cat <<!__EOF__
-<entry>
- <author>
- <name>${author}</name>
- <uri>${sitefullurl}</uri>
- </author>
- <title type="html"><![CDATA[$title]]></title>
- <link rel="alternate" type="text/html" href="${urlfull}" />
- <id>${urlfull}</id>
- <updated>$(date "+%Y-%m-%dT%H:%M:%SZ" -d "$timestamp")</updated>
- <published>$(date "+%Y-%m-%dT%H:%M:%SZ" -d "$timestamp")</published>
- <summary type="html"><![CDATA[$description]]></summary>
-</entry>
-!__EOF__
diff --git a/layout/index/index.sh b/layout/index/index.sh
@@ -1,52 +0,0 @@
-#!/bin/sh
-
-# prefix page title with site title, make sure its neatly formatted.
-if [ "$title" = "" ]; then
- pagetitle="$sitetitle"
-else
- pagetitle="$title - $sitetitle"
-fi
-
-cat <<!__EOF__
-<!DOCTYPE HTML>
-<html dir="ltr" lang="en">
- <head>
- <title>${pagetitle}</title>
- <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
- <link rel="stylesheet" href="print.css" type="text/css" media="print" />
- <link rel="alternate" type="application/rss+xml" title="${sitetitle} RSS Feed" href="rss.xml" />
- <link rel="alternate" type="application/atom+xml" title="${sitetitle} Atom Feed" href="atom.xml" />
- <link rel="icon" type="image/png" href="/favicon.png" />
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <meta http-equiv="Content-Language" content="en" />
- <meta content="width=device-width" name="viewport" />
- <meta content="${keywords}" name="keywords" />
- <meta content="${description}" name="description" />
- </head>
- <body>
- <div id="menuwrap">
- <div id="menu">
- <span id="links">
- <a href="${siterelurl}/" title="Blog">Blog</a> |
- <a href="/downloads/projects/" title="Software I've written">Software</a>
- </span>
- <span id="links-contact">
- <span class="hidden"> | </span>
- <a href="rss.xml" title="Syndicate this site using RSS 2.0" class="rss">RSS</a> |
- <a href="atom.xml" title="Atom feed" class="atom">Atom</a> |
- <a href="mailto:${sitemail}" title="Mail me" class="mail">Mail</a>
- </span>
- </div>
- </div>
- <hr class="hidden" />
- <div id="mainwrap">
- <div id="main">
-<h1>Posts</h1>
-<table>
- ${content}
-</table>
- </div>
- </div>
- </body>
-</html>
-!__EOF__
diff --git a/layout/index/indexitem.sh b/layout/index/indexitem.sh
@@ -1,3 +0,0 @@
-#!/bin/sh
-# row for index page.
-printf '<tr><td class="lm">%s</td><td><a href="%s" title="%s">%s</a></td></tr>\n' "$timestamp" "${url}" "$description" "$title"
diff --git a/layout/page/page.sh b/layout/page/page.sh
@@ -1,50 +0,0 @@
-#!/bin/sh
-
-# prefix page title with site title, make sure its neatly formatted.
-if [ "$title" = "" ]; then
- pagetitle="$sitetitle"
-else
- pagetitle="$title - $sitetitle"
-fi
-
-cat <<!__EOF__
-<!DOCTYPE HTML>
-<html dir="ltr" lang="en">
- <head>
- <title>${pagetitle}</title>
- <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
- <link rel="stylesheet" href="print.css" type="text/css" media="print" />
- <link rel="alternate" type="application/rss+xml" title="${sitetitle} RSS Feed" href="rss.xml" />
- <link rel="alternate" type="application/atom+xml" title="${sitetitle} Atom Feed" href="atom.xml" />
- <link rel="icon" type="image/png" href="/favicon.png" />
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <meta http-equiv="Content-Language" content="en" />
- <meta content="width=device-width" name="viewport" />
- <meta content="${keywords}" name="keywords" />
- <meta content="${description}" name="description" />
- </head>
- <body>
- <div id="menuwrap">
- <div id="menu">
- <span id="links">
- <a href="${siterelurl}/" title="Blog">Blog</a> |
- <a href="/downloads/projects/" title="Software I've written">Software</a>
- </span>
- <span id="links-contact">
- <span class="hidden"> | </span>
- <a href="rss.xml" title="Syndicate this site using RSS 2.0" class="rss">RSS</a> |
- <a href="atom.xml" title="Atom feed" class="atom">Atom</a> |
- <a href="mailto:${sitemail}" title="Mail me" class="mail">Mail</a>
- </span>
- </div>
- </div>
- <hr class="hidden" />
- <div id="mainwrap">
- <div id="main">
- <h1><a href="${urlrel}" title="${title}">${title}</a></h1>
- ${content}
- </div>
- </div>
- </body>
-</html>
-!__EOF__
diff --git a/layout/rss/rssitem.sh b/layout/rss/rssitem.sh
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-cat <<!__EOF__
-<item>
- <title>${title}</title>
- <link>${urlfull}</link>
- <pubDate>$(date -R -d "$timestamp")</pubDate>
- <author>${author}</author>
- <guid isPermaLink="false">${urlfull}</guid>
- <description><![CDATA[${description}]]></description>
-</item>
-!__EOF__
diff --git a/site/layout/atom/atom.sh b/site/layout/atom/atom.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+cat <<!__EOF__
+<?xml version="1.0" encoding="UTF-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
+ <title type="text">${sitetitle}</title>
+ <subtitle type="text">${sitedescription}</subtitle>
+ <updated>$(date "+%Y-%m-%dT%H:%M:%SZ" -d "${builddate}")</updated>
+ <link rel="alternate" type="text/html" href="${sitefullurl}" />
+ <id>${sitefullurl}/atom.xml</id>
+ <link rel="self" type="application/atom+xml" href="${sitefullurl}/atom.xml" />
+ ${content}
+</feed>
+!__EOF__
diff --git a/site/layout/atom/atomitem.sh b/site/layout/atom/atomitem.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+cat <<!__EOF__
+<entry>
+ <author>
+ <name>${author}</name>
+ <uri>${sitefullurl}</uri>
+ </author>
+ <title type="html"><![CDATA[${title}]]></title>
+ <link rel="alternate" type="text/html" href="${urlfull}" />
+ <id>${urlfull}</id>
+ <updated>$(date "+%Y-%m-%dT%H:%M:%SZ" -d "${timestamp}")</updated>
+ <published>$(date "+%Y-%m-%dT%H:%M:%SZ" -d "${timestamp}")</published>
+ <summary type="html"><![CDATA[${description}]]></summary>
+</entry>
+!__EOF__
diff --git a/site/layout/index/index.sh b/site/layout/index/index.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+# prefix page title with site title, make sure its neatly formatted.
+if [ "${title}" = "" ]; then
+ pagetitle="${sitetitle}"
+else
+ pagetitle="${title} - ${sitetitle}"
+fi
+
+cat <<!__EOF__
+<!DOCTYPE HTML>
+<html dir="ltr" lang="en">
+ <head>
+ <title>${pagetitle}</title>
+ <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
+ <link rel="stylesheet" href="print.css" type="text/css" media="print" />
+ <link rel="alternate" type="application/rss+xml" title="${sitetitle} RSS Feed" href="rss.xml" />
+ <link rel="alternate" type="application/atom+xml" title="${sitetitle} Atom Feed" href="atom.xml" />
+ <link rel="icon" type="image/png" href="/favicon.png" />
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta content="width=device-width" name="viewport" />
+ <meta content="${keywords}" name="keywords" />
+ <meta content="${description}" name="description" />
+ </head>
+ <body>
+ <div id="menuwrap">
+ <div id="menu">
+ <span id="links">
+ <a href="${siterelurl}/" title="Blog">Blog</a> |
+ <a href="/downloads/projects/" title="Software I've written">Software</a>
+ </span>
+ <span id="links-contact">
+ <span class="hidden"> | </span>
+ <a href="rss.xml" title="Syndicate this site using RSS 2.0" class="rss">RSS</a> |
+ <a href="atom.xml" title="Atom feed" class="atom">Atom</a> |
+ <a href="mailto:${sitemail}" title="Mail me" class="mail">Mail</a>
+ </span>
+ </div>
+ </div>
+ <hr class="hidden" />
+ <div id="mainwrap">
+ <div id="main">
+<h1>${title}</h1>
+<table>
+ ${content}
+</table>
+ </div>
+ </div>
+ </body>
+</html>
+!__EOF__
diff --git a/site/layout/index/indexitem.sh b/site/layout/index/indexitem.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+# row for index page.
+printf '<tr><td class="lm">%s</td><td><a href="%s" title="%s">%s</a></td></tr>\n' "${timestamp}" "${url}" "${description}" "${title}"
diff --git a/site/layout/page/page.sh b/site/layout/page/page.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+# prefix page title with site title, make sure its neatly formatted.
+if [ "${title}" = "" ]; then
+ pagetitle="${sitetitle}"
+else
+ pagetitle="${title} - ${sitetitle}"
+fi
+
+cat <<!__EOF__
+<!DOCTYPE HTML>
+<html dir="ltr" lang="en">
+ <head>
+ <title>${pagetitle}</title>
+ <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
+ <link rel="stylesheet" href="print.css" type="text/css" media="print" />
+ <link rel="alternate" type="application/rss+xml" title="${sitetitle} RSS Feed" href="rss.xml" />
+ <link rel="alternate" type="application/atom+xml" title="${sitetitle} Atom Feed" href="atom.xml" />
+ <link rel="icon" type="image/png" href="/favicon.png" />
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta content="width=device-width" name="viewport" />
+ <meta content="${keywords}" name="keywords" />
+ <meta content="${description}" name="description" />
+ </head>
+ <body>
+ <div id="menuwrap">
+ <div id="menu">
+ <span id="links">
+ <a href="${siterelurl}/" title="Blog">Blog</a> |
+ <a href="/downloads/projects/" title="Software I've written">Software</a>
+ </span>
+ <span id="links-contact">
+ <span class="hidden"> | </span>
+ <a href="rss.xml" title="Syndicate this site using RSS 2.0" class="rss">RSS</a> |
+ <a href="atom.xml" title="Atom feed" class="atom">Atom</a> |
+ <a href="mailto:${sitemail}" title="Mail me" class="mail">Mail</a>
+ </span>
+ </div>
+ </div>
+ <hr class="hidden" />
+ <div id="mainwrap">
+ <div id="main">
+ <h1><a href="${urlrel}" title="${title}">${title}</a></h1>
+ ${content}
+ </div>
+ </div>
+ </body>
+</html>
+!__EOF__
diff --git a/layout/rss/rss.sh b/site/layout/rss/rss.sh
diff --git a/site/layout/rss/rssitem.sh b/site/layout/rss/rssitem.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+cat <<!__EOF__
+<item>
+ <title>${title}</title>
+ <link>${urlfull}</link>
+ <pubDate>$(date -R -d "${timestamp}")</pubDate>
+ <author>${author}</author>
+ <guid isPermaLink="false">${urlfull}</guid>
+ <description><![CDATA[${description}]]></description>
+</item>
+!__EOF__
diff --git a/pages/example-page-template.html b/site/pages/example-page-template.html
diff --git a/pages/example-page-template.sh b/site/pages/example-page-template.sh