/extras/html-update.sh
http://txt2tags.googlecode.com/ · Shell · 180 lines · 83 code · 23 blank · 74 comment · 12 complexity · 40f5654ed5a97e74e6d84db73c046333 MD5 · raw file
- #!/bin/bash
- # html-update.sh - converts to HTML all .t2t files that has changed
- #
- # Author: Aurelio Jargas
- # Requires: bash, find, txt2tags
- # Debut: June, 2004
- # Last Update: 27 Sep 2005
- #
- # Based on Guaracy Monteiro's t2tmake.rb program.
- # Implemented some ideas from Mauricio Teixeira (netmask).
- #
- # This file is part of the txt2tags (http://txt2tags.org) project.
- # Its license is the same as the program: GPL. See txt2tags COPYING
- # file for a detailed explanation of the GPL license.
- #
- # INSTRUCTIONS
- #
- # With no options, it searches recursively the current directory and
- # prints on the screen all the filenames that needs to be converted.
- #
- # With the '-c' option, it performs the conversion of the found
- # files.
- #
- # With a directory path as the last argument, it searches that
- # directory instead the current dir.
- #
- # Use the --help option for more information.
- #
- # NOTES
- #
- # The condition to a file be considered 'needed' to be converted is
- # that the .t2t file is newer than its respective .html. In other
- # words, you edited the .t2t after the last conversion, so it needs
- # to be converted again. You can ignore this checking using the
- # --force option.
- #
- # It assumes that the .html file uses the same basename as the .t2t
- # file. If you used the txt2tags' --outfile option to change the
- # default output filename ou extension, it will not be detected by
- # this script. You can force this detection using the --missing
- # option.
- #
- # CONFIG
- #
- # If you call txt2tags any other way, change here
- PROGRAM=txt2tags
- #
- # If you use another extension for your txt2tags files, change here
- IN_EXT=.t2t
- #
- # If you want to use this script for other formats than HTML
- OUT_EXT=.html
- TARGET=html
- #
- # The default message for --interative question
- QUESTION=" Convert? [yn] "
- #
- # The --verbose messages
- VERB_DIR="Will scan this dir:"
- VERB_FILE="Scanning this file:"
- #
- #####################################################################
- # Atention: program code starts here, do not edit from this point
- PROGNAME=${0##*/}
- USAGE="
- $PROGNAME - part of the txt2tags project
- Usage: $PROGNAME [-c] [-f] [-m] [-i] [directory]
- -c, --convert Perform the conversion of the marked files
- -f, --force Mark all .t2t files, even if up-to-date
- -m, --missing Mark .t2t files that has no .html
- -i, --interative Ask before convert
- -e, --in-ext Set other source extension than .t2t
- -E, --out-ext Set other target extension than .html
- -t, --target Force a target type when converting (default: html)
- -p, --program Set an alternative way to call txt2tags
- -v, --verbose Show all scanned file names
- -h, --help Show this help screen
- Common use: $PROGNAME -c /path/to/dir
- Stress use: $PROGNAME -c -f -m -i /path/to/dir
- "
- # Flags reset status
- f_help=0
- f_force=0
- f_convert=0
- f_missing=0
- f_verbose=0
- f_interative=0
- # Command line options parsing
- while [ "$1" ] ; do
- case "$1" in
- -h|--help ) f_help=1 ;;
- -f|--force ) f_force=1 ;;
- -m|--missing ) f_missing=1 ;;
- -c|--convert ) f_convert=1 ;;
- -v|--verbose ) f_verbose=1 ;;
- -i|--interative) f_interative=1 ;;
- -e|--in-ext ) IN_EXT="$2" ; shift;;
- -E|--out-ext ) OUT_EXT="$2"; shift;;
- -t|--target ) TARGET="$2" ; shift;;
- -p|--program ) PROGRAM="$2"; shift;;
- *) break ;;
- esac
- shift
- done
- # Show help screen and exit
- if [ "$f_help" = 1 ]; then
- echo "$USAGE"
- exit 0
- fi
- # Set directory to user passed parameter or current one
- udir="${1:-.}"
- # The directory is valid (does exist)?
- if [ ! -d "$udir" ] ; then
- echo "$PROGNAME: Sorry, '$udir' is not a valid directory"
- exit 1
- fi
- # The default message showed before the filename
- MESSAGE="$TARGET needs update:"
- # Show scanned directory name
- [ "$f_verbose" = 1 ] && echo "$VERB_DIR $udir"
- # IFS+for trick try to avoid "find | while read" that mess -i
- IFS="
- "
- # Search for all .t2t files on the specified (or current) dir
- for t2t in $(find "$udir" -name "*$IN_EXT"); do
- # Show scanned file name
- [ "$f_verbose" = 1 ] && echo "$VERB_FILE $t2t"
-
- # Set the out file name as <file>.TARGET
- out=${t2t%$IN_EXT}$OUT_EXT
- # Flag that will tell if the conversion should be done
- f_ok=0
- # Force flag
- if [ -f "$out" -a "$f_force" = 1 ]; then
- f_ok=1
- # Missing flag
- elif [ ! -f "$out" -a "$f_missing" = 1 ] ; then
- f_ok=1
-
- # If the .t2t is newer than the .TARGET...
- elif [ -f "$out" -a "$t2t" -nt "$out" ] ; then
- f_ok=1
- fi
- # Okay, the conversion may be done
- if [ "$f_ok" = 1 ]; then
- echo -n "$MESSAGE $t2t"
-
- # Last chance to give up
- if [ "$f_convert" = 1 -a "$f_interative" = 1 ]; then
- echo -n "$QUESTION"
- read -n 1 ans
- [ "$ans" = y -o "$ans" = Y ] || f_ok=0
- fi
- echo
- # Yes, we will
- if [ "$f_convert" = 1 -a "$f_ok" = 1 ]; then
- $PROGRAM -t $TARGET $t2t
- fi
- fi
- done