#!/bin/tcsh -f # Run this when you add or change entries and want them # to be incorporated into the formatted journal. # What format should dates be displayed in? (see man date) set dateFmt="+%A, %B %d, %Y" # Do you want the index in forward or reverse chronological order? #set order=forward set order=reverse # NOTE Neither of these dirs should be a child of Journal: # Where are you going to put images (relative to Journal/)? set imsDir="../ims" # Where do you want to keep scripts (relative to Journal/)? set scriptsDir="/home/simon/scripts" # The rest of this script is generic. # (I.e., you shouldn't need to change anything below here.) if (! -d entries) then echo "'entries' source directory doesn't exist." exit 1 endif if (! -d parts) then echo "'parts' source directory doesn't exist." exit 1 endif if (! -d Journal) then echo "Journal target directory doesn't exist. Make it." exit 1 endif echo "Searching for new entries..." cd entries set entries=* cd .. echo "There are $#entries raw entries to date..." # It's easiest just to rebuild the index from scratch... # We'll throw the index entries into a temp file so we # can stick it together with header and footer later. # (This also lets us reverse the order at that time if # we choose...): echo -n "" > Journal/index.tmp set previous="NONE" foreach entry ($entries) set dateString=`date -d $entry "$dateFmt"` if ($status != 0) then echo "WARNING: entry '$entry' cannot be parsed as a date. Please fix." continue endif set target="Journal/$entry.html" # The names of the previous and next html files: set prevFile="$previous.html" set nextFile="$entry.next.html" # A symlink, yet to be made. # To make 'next' links easy, we'll create a symlink # from the previous entry to this one: # if ("$previous" != "NONE") then set nextlink="$previous.next.html" /bin/rm -f "Journal/$nextlink" ln -s "$entry.html" "Journal/$nextlink" endif set previous="$entry" set entryFile="entries/$entry" set title=`head -1 $entryFile | sed -f NameMappings` set numims=`grep "<img" $entryFile | wc -l` if ($numims > 0) then set imnote="<b>($numims)</b>" else set imnote="" endif echo -n "<tr><td align=right><a href=$entry.html>${dateString}</a></td>" >> Journal/index.tmp echo "<td>$title $imnote</td></tr>" >> Journal/index.tmp # If the target already exists and is current, we don't need to make it again: if (-e "$target") then if ( -M "$target" > -M "$entryFile" ) continue echo "Target exists but is out of date. Rebuilding it..." endif echo "New on ${dateString}: $title" # Here's where we actually put the pieces together into a target entry: echo "<html>" > "$target" echo "<title>$title</title>" >> "$target" sed -f NameMappings < parts/header >> "$target" echo "<br>" >> "$target" echo "<br>" >> "$target" echo "<center>" >> "$target" echo '<font face="Arial,Helvetica">' >> "$target" echo '<font size=+1>' >> "$target" echo "<h2>$dateString</h2>" >> "$target" echo "<h4><em>$title</em></h4>" >> "$target" echo "</center>" >> "$target" echo "<br>" >> "$target" echo "<br>" >> "$target" tail +2 "$entryFile" | sed -f NameMappings >> "$target" echo -n "<br><br><center>[" >> "$target" if ("$prevFile" != "NONE.html") then echo "<a href=$prevFile>Prev</a> | " >> "$target" endif echo "<a href=index.html>Index</a> | " >> "$target" echo "<a href=$nextFile>Next</a>]" >> "$target" echo "<p></center>" >> "$target" sed -f NameMappings < parts/footer >> "$target" end # This is a clone of the "previous" related code # above, except instead of linking to the current # entry, it links back to the index: if ("$previous" != "NONE") then set nextlink="$previous.next.html" /bin/rm -f "Journal/$nextlink" ln -s "index.html" "Journal/$nextlink" endif # Now let's build the index.html file: /bin/rm -f Journal/index.html sed -f NameMappings < parts/indexHeader > Journal/index.html if ("$order" == "reverse") then tac Journal/index.tmp >> Journal/index.html else cat Journal/index.tmp >> Journal/index.html endif sed -f NameMappings < parts/indexFooter >> Journal/index.html /bin/rm -f Journal/index.tmp echo "Index updated." if (! -e Journal/scripts && ! -l Journal/scripts) then ln -s "$scriptsDir" Journal/scripts endif if (! -e Journal/ims && ! -l Journal/ims) then ln -s "$imsDir" Journal/ims endif