#!/bin/bash
# html-gen.sh
# Copyright (C) 2013 Red Hat
#
# This file is part of IcedTea.
#
# IcedTea is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# IcedTea is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with IcedTea; see the file COPYING. If not, write to the
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA.
#
# Linking this library statically or dynamically with other modules is
# making a combined work based on this library. Thus, the terms and
# conditions of the GNU General Public License cover the whole
# combination.
#
# As a special exception, the copyright holders of this library give you
# permission to link this library with independent modules to produce an
# executable, regardless of the license terms of these independent
# modules, and to copy and distribute the resulting executable under
# terms of your choice, provided that you also meet, for each linked
# independent module, the terms and conditions of the license of that
# module. An independent module is a module which is not derived from
# or based on this library. If you modify this library, you may extend
# this exception to your version of the library, but you are not
# obligated to do so. If you do not wish to do so, delete this
# exception statement from your version.
################################################################################
# This script is used by the stamps/html-gen target in Makefile.am. Its purpose
# is to produce HTML-escaped and formatted documents from a set of plaintext
# documents, namely AUTHORS, NEWS, ChangeLog, and COPYING, located in the
# same directory as this script. These generated HTML documents are then used
# in the netx About Dialog, which can be invoked with "javaws -about".
# Currently the script is not configurable in any way and the files it processes
# are hardcoded. To run the script manually, create a directory "html-gen" in the
# same directory as this script, containing files named AUTHORS, NEWS, ChangeLog,
# and COPYING. Note that these files WILL be modified in-place during the HTML
# "conversion" process. Setting the environment variable "HTML_GEN_DEBUG" to "true"
# will enable some output from the script, which may be useful if you encounter
# issues with this script's processing of an input file.
if [ -z "$HTML_GEN_DEBUG" ]; then HTML_GEN_DEBUG="false"; fi
print_debug() {
if [ "$HTML_GEN_DEBUG" == "true" ]; then echo "$1"; fi
}
start_time=$(date +%s.%N)
cd html-gen
print_debug "Starting sed substitutions"
for FILE in NEWS AUTHORS COPYING ChangeLog
do
print_debug "Processing $FILE..."
sed -i -r 's/\t/ /g' "./$FILE" # Convert tabs into four spaces
sed -i -r 's/\&/\&/g' "./$FILE" # "&" -> "&"
sed -i -r 's/ /\ \ /g' "./$FILE" # Double-spaces into HTML whitespace for format preservation
sed -i -r 's/\</g' "./$FILE" # "<" -> "<"
sed -i -r 's/>/\>/g' "./$FILE" # ">" -> ">"
sed -i -r 's_(\<)?(https?://[^ ]*)(\>| |$)_\1\2\3_i' "./$FILE" # Create hyperlinks from http(s) URLs
sed -i -r 's/\<(.*@.*)\>/\<\1<\/a>\>/i' "./$FILE" # Create mailto links from email addresses formatted as
sed -i -r 's/$/
/' "./$FILE" # "\n" -> "
"
mv "$FILE" "$FILE.html"
print_debug "$FILE.html finished."
done
print_debug "Done sed subs. Starting in-place additions"
# Centre the column of author names in the Authors file
sed -i '4i ' AUTHORS.html
# Insert jamIcon above author names
sed -i '5i
' AUTHORS.html
echo "" >> AUTHORS.html
print_debug "Done. Starting formatting (bolding, mailto and hyperlink creation)"
for FILE in NEWS.html ChangeLog.html
do
print_debug "Processing $FILE..."
mv $FILE "$FILE.old"
COUNTER=0
while read LINE
do
BOLD=1
if [[ $FILE == "NEWS.html" ]]
then
if [[ $LINE =~ New\ in\ release* ]]
then
BOLD=0
COUNTER=$(( $COUNTER + 1 ))
fi
if [[ $COUNTER -gt 2 ]] # Cut to two releases
then
break
fi
else
if [[ $LINE =~ .*\<\;.*\@.*\>\; ]] # Matches eg , after HTML-escaping
then
BOLD=0
fi
if [[ $LINE =~ [0-9]{4}-[0-9]{2}-[0-9]{2}* ]] # Matches eg 2013-07-01
then
COUNTER=$(( $COUNTER + 1 ))
fi
if [[ $COUNTER -gt 10 ]] # Cut to ten changesets
then
break
fi
fi
if [[ $BOLD -eq 0 ]] # Highlight "New In Release" in News, and author name lines in ChangeLog
then
LINE="$LINE"
fi
echo "$LINE" >> $FILE
done < "$FILE.old"
rm "$FILE.old"
print_debug "$FILE finished"
done
sed -i -r 's|(\*\ .*):|\1:|' ChangeLog.html # Underline changed files in ChangeLog, eg "* Makefile.am:"
end_time=$(date +%s.%N)
print_debug "HTML generation complete"
print_debug "Total elapsed time: $(echo "$end_time - $start_time" | bc )"