Introduction
Introduction Statistics Contact Development Disclaimer Help
initial repo - static-site-scripts - static site generator shellscripts
git clone git://git.codemadness.org/static-site-scripts
Log
Files
Refs
README
LICENSE
---
commit acdd7813ab6db1ee9b83e7f224966b37b968ccc1
parent 9051ca6cbee74f640b22bebaeda165b043eee7e3
Author: Hiltjo Posthuma <[email protected]>
Date: Sun, 15 Dec 2013 16:41:42 +0100
initial repo
Signed-off-by: Hiltjo Posthuma <[email protected]>
Diffstat:
A .gitignore | 1 +
M README.md | 20 ++++++++++++++++----
A config.sh | 33 +++++++++++++++++++++++++++++…
A generate.sh | 115 +++++++++++++++++++++++++++++…
A layout/atom/atom.sh | 14 ++++++++++++++
A layout/atom/atomitem.sh | 16 ++++++++++++++++
A layout/index/index.sh | 51 +++++++++++++++++++++++++++++…
A layout/index/indexitem.sh | 3 +++
A layout/page/page.sh | 49 +++++++++++++++++++++++++++++…
A layout/rss/rss.sh | 14 ++++++++++++++
A layout/rss/rssitem.sh | 12 ++++++++++++
A pages/example-page-template.html | 1 +
A pages/example-page-template.sh | 10 ++++++++++
A print.css | 12 ++++++++++++
A style.css | 72 +++++++++++++++++++++++++++++…
15 files changed, 419 insertions(+), 4 deletions(-)
---
diff --git a/.gitignore b/.gitignore
@@ -0,0 +1 @@
+output/
diff --git a/README.md b/README.md
@@ -1,4 +1,16 @@
-static-site-scripts
-===================
-
-Generate a simple static site with an index page
+Usage
+=====
+
+sh generate.sh [configfile]
+
+the default config file is ./config.sh
+
+
+Pages
+=====
+
+Pages are defined as shellscripts containing metadata (see pages/example-page-…
+
+The page content is the basename of the shellscript + .html (see pages/example…
+
+<insert you favorite template language> can easily be added to generate.sh.
diff --git a/config.sh b/config.sh
@@ -0,0 +1,33 @@
+# Fix for running on Cygwin =/
+export PATH="/bin:/usr/bin"
+
+# Site title (part of $pagetitle probably).
+sitetitle="Codemadness"
+# Main site domain.
+sitedomain="http://www.codemadness.nl"
+# Short site domain.
+sitedomainshort="codemadness.nl"
+# Relative site url.
+siterelurl=""
+# Full site url.
+sitefullurl="${sitedomain}${siterelurl}"
+# Site keywords (default).
+sitekeywords="blog, suckless, dwm-hiltjo"
+# Site description (default).
+sitedescription="blog with various projects and articles about computer-relate…
+# Admin mail, handy to use on site.
+# TODO: remove adminmail?
+adminmail="hiltjo@[email protected]"
+# used for "mail link"
+sitemail="hiltjo@[email protected]"
+
+# Directories containing content and metadata.
+pagesdir="pages"
+# Output dir.
+outputdir="output"
+
+# Layout file.
+layoutdir="layout"
+
+# TODO: markdown program: http://freecode.com/projects/smu
+markdown="smu"
diff --git a/generate.sh b/generate.sh
@@ -0,0 +1,115 @@
+#!/bin/sh
+# Generate a simple static site with an index page.
+# Author: Hiltjo Posthuma <[email protected]>
+# License: WTFPL
+
+# Syntax highlight code.
+code_highlight() {
+ echo '<pre>'
+ # escape some HTML entities, prefix code with linenumbers.
+ sed -e 's@&@\&amp;@g' -e 's@>@\&gt;@g' -e 's@<@\&lt;@g' | nl -w 4 -s '…
+ echo '</pre>'
+}
+
+# page_metadata(filename)
+page_metadata() {
+ id=""
+ tags=""
+ title=""
+ url=""
+ pagetitle=""
+ description="${sitedescription}"
+ keywords="${sitekeywords}"
+ filename=""
+ content=""
+ categories=""
+ timestamp=""
+ [ -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
+
+# Remember current dir.
+pwddir="$(pwd)"
+
+# 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"
+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"
+ 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
+ # TODO: test markdown
+ 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"
+done
+
+# Index page.
+page_metadata ""
+title="Posts"
+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"
+
+# Atom
+page_metadata ""
+content=$(cat "$outputdir/atom.xml")
+. "$layoutdir/atom/atom.sh" > "$outputdir/atom.xml"
+
+# Goto output dir to make relative urls.
+cd "$outputdir"
+
+# Sitemap: urllist.txt
+find ./ -type f -name "*.html" | sort | sed 's@^./\(.*\)$@'$sitefullurl'/\1@' …
+
+# Sitemap: sitemap.xml
+(cat <<!
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+!
+
+find ./ -type f -name "*.html" | sort | sed 's@^./\(.*\)$@<url><loc>'$sitefull…
+
+cat <<!
+</urlset>
+!
+) > "sitemap.xml"
+
+# Restore current dir.
+cd "$pwddir"
+
+# Copy stylesheets.
+cp "style.css" "$outputdir"
+cp "print.css" "$outputdir"
diff --git a/layout/atom/atom.sh b/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…
+ ${content}
+</feed>
+!__EOF__
diff --git a/layout/atom/atomitem.sh b/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/layout/index/index.sh b/layout/index/index.sh
@@ -0,0 +1,51 @@
+#!/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=…
+ <link rel="stylesheet" href="print.css" type="text/css" media=…
+ <link rel="alternate" type="application/rss+xml" title="Codema…
+ <link rel="alternate" type="application/atom+xml" title="Codem…
+ <link rel="icon" type="image/png" href="/favicon.png" />
+ <meta http-equiv="Content-Type" content="text/html; charset=UT…
+ <meta http-equiv="Content-Language" content="en" />
+ <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">…
+ <a href="/downloads/projects/" title="…
+ </span>
+ <span id="links-contact">
+ <span class="hidden"> | </span>
+ <a href="rss.xml" title="Syndicate thi…
+ <a href="atom.xml" title="Atom feed" c…
+ <a href="mailto:${sitemail}" title="Ma…
+ </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
@@ -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>…
diff --git a/layout/page/page.sh b/layout/page/page.sh
@@ -0,0 +1,49 @@
+#!/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=…
+ <link rel="stylesheet" href="print.css" type="text/css" media=…
+ <link rel="alternate" type="application/rss+xml" title="Codema…
+ <link rel="alternate" type="application/atom+xml" title="Codem…
+ <link rel="icon" type="image/png" href="/favicon.png" />
+ <meta http-equiv="Content-Type" content="text/html; charset=UT…
+ <meta http-equiv="Content-Language" content="en" />
+ <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">…
+ <a href="/downloads/projects/" title="…
+ </span>
+ <span id="links-contact">
+ <span class="hidden"> | </span>
+ <a href="rss.xml" title="Syndicate thi…
+ <a href="atom.xml" title="Atom feed" c…
+ <a href="mailto:${sitemail}" title="Ma…
+ </span>
+ </div>
+ </div>
+ <hr class="hidden" />
+ <div id="mainwrap">
+ <div id="main">
+ <h1><a href="${urlrel}" title="${title}">${tit…
+ ${content}
+ </div>
+ </div>
+ </body>
+</html>
+!__EOF__
diff --git a/layout/rss/rss.sh b/layout/rss/rss.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+cat <<!__EOF__
+<?xml version="1.0" encoding="UTF-8"?>
+<rss version="2.0">
+ <channel>
+ <title>${sitetitle}</title>
+ <link>${sitefullurl}</link>
+ <description></description>
+ <language>en</language>
+ ${content}
+ </channel>
+</rss>
+!__EOF__
diff --git a/layout/rss/rssitem.sh b/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/pages/example-page-template.html
@@ -0,0 +1 @@
+Hai there
diff --git a/pages/example-page-template.sh b/pages/example-page-template.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+title="title"
+description="description"
+id="example-page-template"
+url="${id}.html"
+tags="tags, comma, separated"
+keywords="keywords, comma, separated"
+categories="Category name"
+timestamp="now"
+author="author"
diff --git a/print.css b/print.css
@@ -0,0 +1,12 @@
+body {
+ text-align: left;
+}
+#menuwrap {
+ display: none;
+}
+#menu, #main {
+ margin: 0;
+}
+pre, code {
+ white-space: pre-wrap;
+}
diff --git a/style.css b/style.css
@@ -0,0 +1,72 @@
+body {
+ font-family: sans-serif, monospace;
+ text-align: center;
+ overflow-y: scroll;
+ color: #333;
+ background-color: #fff;
+ margin: 0;
+ padding: 0;
+}
+table {
+ border: 0;
+}
+hr {
+ height: 1px;
+ color: #ccc;
+ background-color: #ccc;
+ border: 0;
+}
+h1 {
+ font-size: 140%;
+}
+h2 {
+ font-size: 120%;
+}
+h3 {
+ font-size: 100%;
+}
+h1, h1 a, h1 a:visited,
+h2, h2 a, h2 a:visited,
+h3, h3 a, h3 a:visited,
+h1 a:hover, h2 a:hover, h3 a:hover {
+ color: inherit;
+ text-decoration: none;
+}
+table tr td {
+ padding: 2px 10px 2px 0px;
+}
+pre, code {
+ border: 1px dashed #777;
+ background-color: #eee;
+ padding: 5px;
+ display: block;
+ overflow-x: auto;
+}
+code {
+ white-space: nowrap;
+ word-wrap: normal;
+}
+#menuwrap {
+ background-color: #eee;
+ padding: 1ex;
+ border-bottom: 1px solid #ccc;
+}
+#main {
+ padding: 1ex;
+}
+#menu,
+#main {
+ margin: 0px auto;
+ text-align: left;
+ max-width: 80ex;
+}
+#menu a {
+ font-weight: bold;
+ vertical-align: middle;
+}
+#links-contact {
+ float: right;
+}
+.hidden {
+ display: none;
+}
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.