Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
executable file 180 lines (157 sloc) 4.74 KB
#!/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
You can’t perform that action at this time.