diff --git a/LDP/users/Peter-Bieringer/generate.sh b/LDP/users/Peter-Bieringer/generate.sh index a64be881..12f4aafe 100755 --- a/LDP/users/Peter-Bieringer/generate.sh +++ b/LDP/users/Peter-Bieringer/generate.sh @@ -4,6 +4,8 @@ # # Generator script # +# $Id$ +# # Requires: htmldoc recode docbook-utils-pdf # # Changelog @@ -20,10 +22,28 @@ # support also ldp.dsl stored in same directory as the script # 20110509/PB: add charset meta header on each html page to force UTF-8 -# $Id$ +loglevel=6 + +# parse options +while getopts "ql:" opt; do + case $opt in + q) + loglevel=4 + ;; + l) + loglevel=$OPTARG + echo "INFO : set loglevel to: $loglevel" + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + ;; + esac +done + +shift $((OPTIND-1)) # Renice script -renice -n 10 $$ +renice -n 10 $$ >/dev/null if [ -z "$1" ]; then file_input="Linux+IPv6-HOWTO.sgml" @@ -132,39 +152,42 @@ done # echo "WARN: cannot execute 'runsgmlfix.sh'" #fi +export SP_ENCODING=UTF-8 +export SP_CHARSET_FIXED=yes ## Functions validate_sgml() { # remove tags , perl -pi -e 's|||g' "$file_input" - echo "INF: Validate SGML/XML code '$file_input'" + echo "INFO : Validate SGML/XML code '$file_input'" if [ "$doctype" = "XML" ]; then local options="$file_xmldcl" fi - set -x - SP_ENCODING=UTF-8 SP_CHARSET_FIXED=yes $ONSGMLS -s $options $file_input + [ $loglevel -ge 7 ] && set -x + + $ONSGMLS -s $options $file_input local retval=$? - set +x + [ $loglevel -ge 7 ] && set +x if [ $retval -gt 0 ]; then echo "ERR: Validation results in errors!" return 1 else - echo "INF: Validation was successfully" + echo "INFO : Validation was successfully" fi } create_html_multipage() { - echo "INF: Create HTML multipages" + echo "INFO : Create HTML multipages" if [ ! -d "$file_base" ]; then mkdir "$file_base" || exit 1 fi - pushd "$file_base" || exit 1 + pushd "$file_base" >/dev/null || exit 1 rm -f * - set -x - SP_ENCODING=UTF-8 $JADE -t sgml -i html -D $dir_dssslstylesheets -d "${file_ldpdsl}#html" ../$file_input + [ $loglevel -ge 7 ] && set -x + $JADE -t sgml -i html -D $dir_dssslstylesheets -d "${file_ldpdsl}#html" ../$file_input local retval=$? - set +x + [ $loglevel -ge 7 ] && set +x perl -pi -e 's#>/dev/null return $retval } create_html_singlepage() { - echo "INF: Create HTML singlepage '$file_html'" - set -x - SP_ENCODING=UTF-8 $JADE -t sgml -i html -V nochunks -d "${file_ldpdsl}#html" $file_input >$file_html - set +x + echo "INFO : Create HTML singlepage '$file_html'" + [ $loglevel -ge 7 ] && set -x + $JADE -t sgml -i html -V nochunks -d "${file_ldpdsl}#html" $file_input >$file_html local retval=$? + [ $loglevel -ge 7 ] && set +x perl -pi -e 's#> $file_txt - set +x local retval=$? + [ $loglevel -ge 7 ] && set +x else echo "ERR: Cannot create TXT because of missing PS file" fi if [ $retval -eq 0 ]; then - echo "INF: Create TXT file - done" + echo "INFO : Create TXT file - done" else echo "ERR: Create TXT file - an error occurs!" fi diff --git a/LDP/users/Peter-Bieringer/make.sh b/LDP/users/Peter-Bieringer/make.sh new file mode 100755 index 00000000..c1cef194 --- /dev/null +++ b/LDP/users/Peter-Bieringer/make.sh @@ -0,0 +1,257 @@ +#!/bin/bash +# +# (P) & (C) 2011 - 2011 by Dr. Peter Bieringer +# +# wrapper script for generate.sh +# +# 20110517/PB: initial release +# 20110518/PB: minor improvements + + +URL_BASE="http://cvs.tldp.org/go.to/LDP/LDP/users/Peter-Bieringer/" + +FILE_EN="Linux+IPv6-HOWTO.sgml" +FILE_DE="Linux+IPv6-HOWTO.de.sgml" +FILE_FR="Linux+IPv6-HOWTO.fr.sgml" +FILE_PT_BR="Linux+IPv6-HOWTO.pt_BR.sgml" + +options_wget="--quiet" +DIR_DOWNLOAD="download" + +DIR_DEST_BASE="/var/www/html/howto" + +## logging +log() { + local level="$1" + shift + + printf "%-6s: %s\n" "$level" "$*" +} + +## download file +download() { + local url_base="$1" + local file="$2" + + if [ -z "$url_base" ]; then + log "ERROR" "'url_base' empty" + return 1 + fi + + if [ -z "$file" ]; then + log "ERROR" "'file' empty" + return 1 + fi + + if [ -z "$DIR_DOWNLOAD" ]; then + log "ERROR" "no download directory given" + return 1 + fi + + if [ ! -d "$DIR_DOWNLOAD" ]; then + log "ERROR" "download directory doesn't exist: $DIR_DOWNLOAD" + return 1 + fi + + if [ "force_download" != "1" ]; then + log "NOTICE" "skip download $url_base/$file (use option -f)" + return 0 + fi + + log "INFO" "start download $url_base/$file to directory $DIR_DOWNLOAD" + wget $options_wget -N -P "$DIR_DOWNLOAD" "$url_base/$file" + local result=$? + if [ $result -eq 0 ]; then + log "INFO" "download successful: $url_base/$file (stored to $DIR_DOWNLOAD)" + else + log "ERROR" "download not successful: $url_base/$file" + fi + + return $result +} + +## check, whether processing should be started +check() { + local file="$1" + local dir="$2" + + if [ -z "$file" ]; then + log "ERROR" "'file' empty" + return 1 + fi + + if [ -z "$dir" ]; then + log "ERROR" "'dir' empty" + return 1 + fi + + log "INFO" "check file: $file" + + if [ ! -f "$DIR_DOWNLOAD/$file" ]; then + log "WARN" "no downloaded file available: $DIR_DOWNLOAD/$file" + return 1 + fi + + if [ ! -f "$file" ]; then + log "NOTICE" "no 'old' file available: $file (copy now)" + cp -p "$DIR_DOWNLOAD/$file" "$file" + if [ $? -ne 0 ]; then + log "ERROR" "can't copy 'new' file to 'old' file: $DIR_DOWNLOAD/$file -> $file" + return 1 + fi + + return 0 + else + # check contents of destination directory + log "INFO" "check directory: $dir" + + if [ ! -d "$dir" ]; then + log "NOTICE" "directory still not exist: $dir" + return 0 + fi + + local num_files="`find "$dir" -mindepth 1 -maxdepth 1 -type f | wc -l`" + if [ $num_files -eq 0 ]; then + # directory is empty + log "NOTICE" "directory is empty: $dir" + return 0 + fi + + local num_files_old="`find "$dir" -mindepth 1 -maxdepth 1 -type f ! -newer "$file" | wc -l`" + if [ $num_files_old -ne 0 ]; then + # force regeneration + log "NOTICE" "directory contains old files: $dir ($num_files_old)" + return 0 + fi + + # 'old' file already exists + if [ "$file" -nt "$DIR_DOWNLOAD/$file" ]; then + log "WARN" "'old' is newer than 'new' file: $file" + return 1 + fi + + if cmp -s "$file" "$DIR_DOWNLOAD/$file"; then + log "INFO" "'old' is identical with 'new' file: $file" + return 1 + fi + fi + + # nothing to do + log "DEBUG" "no indication for start processing file found: $file" + return 1 +} + +## process/generate output +process() { + log "INFO" "start processing file: $file" + ./generate.sh "$file" +} + + +## copy output +copy() { + local file="$1" + + if [ -z "$DIR_DEST_BASE" ]; then + log "ERROR" "destination directory for output not given 'DIR_DEST_BASE'" + fi + + if [ ! -d "$DIR_DEST_BASE" ]; then + log "ERROR" "destination directory for output doesn't exist: $DIR_DEST_BASE" + return 1 + fi + + log "INFO" "start syncing files of master file: $file" + + local file_pdf="${file/.sgml/.pdf}" + local file_html="${file/.sgml/.html}" + + local dir_html="${file/.sgml}" + + log "INFO" "copy PDF file: $file_pdf" + cp -p "$file_pdf" "$DIR_DEST_BASE/$file_pdf" + if [ $? -ne 0 ]; then + log "ERROR" "can't copy PDF file: $file_pdf" + return 1 + fi + chmod 644 "$DIR_DEST_BASE/$file_pdf" + + log "INFO" "copy HTML file: $file_html" + cp -p "$file_html" "$DIR_DEST_BASE/$file_html" + if [ $? -ne 0 ]; then + log "ERROR" "can't copy HTML file: $file_html" + return 1 + fi + chmod 644 "$DIR_DEST_BASE/$file_html" + + if [ ! -d "$DIR_DEST_BASE/$dir_html" ]; then + log "ERROR" "destination directory for html doesn't exist: $DIR_DEST_BASE/$dir_html" + return 1 + fi + + log "INFO" "copy HTML directory: $dir_html -> $DIR_DEST_BASE/$dir_html" + rsync --delete -r "$dir_html/" "$DIR_DEST_BASE/$dir_html/" + if [ $? -ne 0 ]; then + log "ERROR" "can't sync HTML dir: $dir_html" + return 1 + fi +} + + + + + +## main +main() { + for file in $*; do + download "$URL_BASE" "$file" + if [ $? -ne 0 ]; then + continue + fi + + dir="${file/.sgml}" + + check "$file" "$dir" + if [ $? -eq 0 ]; then + process "$file" + fi + + copy "$file" + done +} + + +# parse options +while getopts "d" opt; do + case $opt in + d) + # no download + force_download=1 + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + ;; + esac +done + +shift $((OPTIND-1)) + +case $1 in + 'de') + files="$FILE_DE" + ;; + 'en') + files="$FILE_EN" + ;; + 'fr') + files="$FILE_FR" + ;; + 'pt') + files="$FILE_PT_BR" + ;; + 'all') + files="$FILE_EN $FILE_DE $FILE_FR $FILE_PT_BR" + ;; +esac + +main $files