Files
recoll/src/filters/rcldoc
T
2013-11-19 14:41:14 +01:00

168 lines
4.0 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
# @(#$Id: rcldoc,v 1.8 2007-06-08 13:51:08 dockes Exp $ (C) 2004 J.F.Dockes
# Parts taken from Estraier:
#================================================================
# Estraier: a personal full-text search system
# Copyright (C) 2003-2004 Mikio Hirabayashi
#================================================================
#================================================================
# Extract text from an msword file by executing either antiword
# or wvware
#
#================================================================
# set variables
LANG=C ; export LANG
LC_ALL=C ; export LC_ALL
progname="rcldoc"
filetype=ms-word
decoder="antiword -t -i 1 -m UTF-8"
#RECFILTCOMMONCODE
##############################################################################
# !! Leave the previous line unmodified!! Code imported from the
# recfiltcommon file
# Utility code common to all shell filters. This could be sourced at run
# time, but it's slightly more efficient to include the code in the
# filters at build time (with a sed script).
# Describe error in a way that can be interpreted by our caller
senderror()
{
echo RECFILTERROR $*
# Also alert on stderr just in case
echo ":2:$progname::: $*" 1>&2
exit 1
}
iscmd()
{
cmd=$1
case $cmd in
*/*)
if test -x $cmd -a ! -d $cmd ; then return 0; else return 1; fi ;;
*)
oldifs=$IFS; IFS=":"; set -- $PATH; IFS=$oldifs
for d in $*;do test -x $d/$cmd -a ! -d $d/$cmd && return 0;done
return 1 ;;
esac
}
checkcmds()
{
for cmd in $*;do
if iscmd $cmd
then
a=1
else
senderror HELPERNOTFOUND $cmd
fi
done
}
# show help message
if test $# -ne 1 -o "$1" = "--help"
then
echo "Convert a $filetype file to HTML text for Recoll indexing."
echo "Usage: $progname [infile]"
exit 1
fi
infile="$1"
# check the input file existence (may be '-' for stdin)
if test "X$infile" != X- -a ! -f "$infile"
then
senderror INPUTNOSUCHFILE "$infile"
fi
# protect access to our temp files and directories
umask 77
##############################################################################
# !! Leave the following line unmodified !
#ENDRECFILTCOMMONCODE
checkcmds awk antiword iconv
# output the result
# The strange 'BEGIN' setup is to prevent 'file' from thinking this file
# is an awk program
$decoder "$infile" |
awk 'BEGIN'\
' {
cont = ""
gotdata = 0
}
{
if (!($0 ~ /^[ ]*$/)) {
gotdata = 1
if (gotdata == 0) {
print "<html><head><title></title>"
print "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\">"
print "</head>\n<body>\n<p>"
}
}
$0 = cont $0
cont = ""
if ($0 ~ /[­-]$/) {
# Note : soft-hyphen is iso8859 0xad
# Break at last whitespace
match($0, "[ \t][^ \t]+$")
line = substr($0, 0, RSTART)
cont = substr($0, RSTART, RLENGTH-1)
$0 = line
}
if($0 == "\f") {
print "</p><hr><p>"
next
}
gsub(/&/, "\\&amp;", $0)
gsub(/</, "\\&lt;", $0)
gsub(/>/, "\\&gt;", $0)
print $0 "<br>"
}
END {
if (gotdata == 0)
exit(1)
print "</p></body></html>"
}'
# Antiword rarely fails, we try to catch the most common reasons:
if test $? -eq 1 ; then
# Check actual document type
mtype=`file -b -i "$infile" | awk '{sub(";", "", $1);print $1}'`
if test X"$mtype" = Xtext/rtf; then
# RTF document disguising as msword either because it has a .doc
# extension or because it's an attachment with a wrong mime.
exec `dirname $0`/rclrtf $infile
fi
if test X"$mtype" = Xtext/plain; then
# Someone gave a .doc ext to their texts. Happens...
exec `dirname $0`/rcltext $infile
fi
if test X"$mtype" = Xapplication/msword; then
# Actually application/msword: try wvWare, which is much
# slower and we don't use it by default, but it handles some
# files that antiword won't, so use it as a last resort.
if iscmd wvWare ; then
exec wvWare --nographics --charset=utf-8 "$infile"
fi
fi
# else let the error be...
exit 1
fi