version 0.3

fixes:
	- fixed the mess of options and general inconsistencies between program
	  man page and help message
	- fixed some cases where rivet should fail but didn't and specified
	  return values for all exit conditions
	- fixed the header system, before the header would have been added
	  inside of <head></head> which is incorrect, browsers would fix it
	  on the fly but still it is not correct.
	  Now _header.html contents are put inside <header></header> at the
	  beginning of <body>
	- fixed <footer> outside of <body>
	- some fixes in the man page

additions:
	- added the requirement for _metadata.html, this file contains tags
	  and html metadata that is put inside <head>
	- the main article is now enclosed inside <article></article> tags for
	  better styling
pull/1/head
Alessandro Mauri 4 years ago
parent 5ac9e2ae5f
commit 280d0946db
  1. 2
      makefile
  2. 22
      rivet.1
  3. 75
      rivet.sh

@ -1,4 +1,4 @@
VERSION = 0.2
VERSION = 0.3
PREFIX = /usr/local
MANPREFIX = ${PREFIX}/share/man

@ -5,10 +5,12 @@ rivet \- simple static site generator
.SH SYNOPSIS
.SY rivet
.OP \-vhelfsu
.OP \-hvelfsurdt
.OP \-o destdir
.OP \-p string
.I srcdir/
.OP \-m number
.OP \-n string
.I srcdir
.I domain
.YS
@ -16,7 +18,7 @@ rivet \- simple static site generator
.PP
Rivet is a POSIX shell script that relies on
.BR lowdown(1)
to convert markdown ( refer to
to convert markdown (refer to
.BR lowdown(5)
for more info on the dialect of markdown used and metadata) files to html and
build an output directory which can be uploaded to an http server.
@ -48,7 +50,7 @@ Set the title of the atom feed to
.IP "\-d string"
Set the description of the atom feed to
.I string
.IP "\-n number"
.IP "\-m number"
Set the maximum number of elements in the atom feed to
.I number
setting it to '0' includes all files
@ -62,6 +64,9 @@ Disables the application of the user-supplied header in
.IP \-f
Disables the application of the user-supplied footer in
.I _footer.html
.IP \-t
Disables the insertion of the user-supplied metadata in
.I _metadata.html
.IP \-l
Disables the generation of the "Pages" section in index.html
.IP \-s
@ -95,6 +100,7 @@ src/
- index.md
- _header.html
- _footer.html
- _metadata.html
.EE
.PP
@ -110,6 +116,8 @@ contains
.EX
<p> Header </p>
.EE
.I _metadata.html
can be empty
.PP
Note that since the contents of
@ -119,6 +127,12 @@ and
will be placed inside the correct tags, the files themselves do not need to
contain <header> and <footer> tags (the script removes them)
.PP
The contents of
.I _metadata.html
are placed inside the <head> tags, so it can contain stylesheets, icons and
other valid entries for the head of an html document
.PP
To generate the site from the folder run the command
.EX

@ -23,6 +23,7 @@
set -e
unset SKIP_FOOTER
unset SKIP_HEADER
unset SKIP_META
unset SKIP_LIST
unset VERBOSE
unset PRINT_HELP
@ -30,7 +31,7 @@ unset SKIP_SITEMAP
unset SKIP_FEED
usage() {
printf "Usage: rivet [-hvelfsu] [-p string] [-o destdir] srcdir domain\n"
printf "Usage: rivet [-hvelfsurdt] [-p string] [-o destdir] [-m number] [-n string] srcdir domain\n"
printf "\t-h: prints this message\n"
printf "\t-o [destdir]: specifies the output direcotory to be [destdir]\n"
printf "\t-p [string]: Rename the \"Pages\" section to [string]\n"
@ -40,11 +41,12 @@ usage() {
0 to include all files\n"
printf "\t-v: Makes the script verbose\n"
printf "\t-e: Do not prepend _header.html to .html files\n"
printf "\t-f: Do not prepend _footer.html to .html files\n"
printf "\t-l: Do not generate \"Pages\" section in index.html\n"
printf "\t-f: Do not prepend _footer.html to .html files\n"
printf "\t-s: Do not generate sitemap.xml\n"
printf "\t-r: Do not generate an atom feed\n"
printf "\t-u: Makes all references to the url 'http' instead of 'https'\n"
printf "\t-r: Do not generate an atom feed\n"
printf "\t-t: Do not insert contents of _metadata.html"
exit 2
}
@ -55,7 +57,8 @@ convert() {
tmpfile="tmpconvfile.tmp"
outfile="${infile%md}html"
cp "$infile" "$tmpfile"
lowdown -s -Thtml -o "$outfile" "$tmpfile"
lowdown --html-no-skiphtml --html-no-escapehtml -s -Thtml \
-o "$outfile" "$tmpfile"
rm -f "$tmpfile" "$infile"
fi
# TODO: convert links to .md to .html
@ -64,7 +67,7 @@ convert() {
# Check dependencies
if ! command -v lowdown > /dev/null; then
echo "lowdown is not installed"
exit
exit 1
fi
destdir='dst'
@ -73,7 +76,7 @@ linksec='Pages'
blog_title='Atom feed'
blog_desc=''
blog_nmax='0'
while getopts 'o:vhelfsrup:n:d:m:' c
while getopts 'o:vhelfsrup:n:d:m:t' c
do
case "$c" in
o) destdir=${OPTARG%%\/} ;;
@ -89,6 +92,7 @@ do
n) blog_title="$OPTARG" ;;
d) blog_desc="$OPTARG" ;;
m) blog_nmax="$OPTARG" ;;
t) SKIP_META=true ;;
*) ;;
esac
done
@ -103,6 +107,7 @@ srcdir=${src%%\/}
unset src
headerfile=$srcdir/_header.html
footerfile=$srcdir/_footer.html
metafile=$srcdir/_metadata.html
objlist=objlist.tmp
objdate=objdate.tmp
@ -135,6 +140,7 @@ url="$prefix"'://'"$domain"
if [ "$PRINT_HELP" ]; then
usage
exit 0
fi
if [ "$VERBOSE" ]; then
set -x
@ -143,6 +149,7 @@ fi
if ! [ -d "$srcdir" ]; then
echo "Error: missing source direcotry"
usage
exit 1
fi
rm -rf "$destdir"
@ -159,7 +166,7 @@ while IFS="" read -r file; do
done < "$objlist"
sed -i -e "s,^\/*[^\/]*\/,$destdir/," "$objlist"
# Convert markdown files
# Convert convertible files
while IFS="" read -r file; do
convert "$file"
done < "$objlist"
@ -172,25 +179,13 @@ linklist=linklist.tmp
cp -f "$objlist" "$linklist"
sed -i -e "s/^$destdir//" -e "s/^/$prefix:\/\/$domain/" "$linklist"
# Prepare the header
if ! [ "$SKIP_HEADER" ]; then
# Insert metadata into <head>
if ! [ "$SKIP_META" ]; then
find "$destdir" -name "*.html" |
while IFS="" read -r file; do
sed -i "/<head>/r $headerfile" "$file"
sed -i "/<head>/r $metafile" "$file"
done
fi
# Prepate the footer
if ! [ "$SKIP_FOOTER" ]; then
tmpfoot="tmpfootfile.tmp"
cp "$footerfile" "$tmpfoot"
sed -i '1s/^/<footer>/' "$tmpfoot"
echo '</footer>' >> "$tmpfoot"
find "$destdir" -name "*.html" |
while IFS="" read -r file; do
sed -i "/<\/body>/r $tmpfoot" "$file"
done
rm -f "$tmpfoot"
fi
# Prepare index file list
if ! [ "$SKIP_LIST" ]; then
@ -221,6 +216,40 @@ EOF
rm -f "$tmpfile"
fi
# enclose article inside <article></article>
find "$destdir" -name "*.html" |
while IFS="" read -r file; do
sed -i -e '/<body>/a <article>' -e '/<\/body>/i </article>' "$file"
done
# Prepate the header
if ! [ "$SKIP_HEADER" ]; then
tmphead="tmpheadfile.tmp"
cp "$headerfile" "$tmphead"
sed -i '1s/^/<header>/' "$tmphead"
echo '</header>' >> "$tmphead"
find "$destdir" -name "*.html" |
while IFS="" read -r file; do
sed -i "/<body>/r $tmphead" "$file"
done
rm -f "$tmphead"
fi
# Prepare the footer
if ! [ "$SKIP_FOOTER" ]; then
tmpfoot="tmpfootfile.tmp"
cp "$footerfile" "$tmpfoot"
sed -i '1s/^/<footer>/' "$tmpfoot"
echo '</footer>' >> "$tmpfoot"
find "$destdir" -name "*.html" |
while IFS="" read -r file; do
sed -i '/<\/body>/i REPLACE' "$file"
sed -i "/^REPLACE/r $tmpfoot" "$file"
sed -i 's/^REPLACE//' "$file"
done
rm -f "$tmpfoot"
fi
# Generate sitemap
if ! [ "$SKIP_SITEMAP" ]; then
cat << EOF >> "$destdir"/sitemap.xml
@ -277,4 +306,4 @@ fi
rm -f "$objlist" "$linklist" "$objdate"
exit
exit 0

Loading…
Cancel
Save