File: kantiword.sh

package info (click to toggle)
antiword 0.37-14
  • links: PTS
  • area: main
  • in suites: buster
  • size: 2,292 kB
  • sloc: ansic: 27,835; sh: 196; perl: 174; php: 83; makefile: 37
file content (147 lines) | stat: -rw-r--r-- 4,494 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/bin/sh
#
# Script to make drag and drop in KDE possible
#set -x
#
CONFS=$(kde-config --path config | tr ':' ' ')
CONF_FILE=kantiwordrc
mapping=

# default output format is PDF
format="-a"
ext=pdf

for i in $CONFS; do
    if [ -r "$i/$CONF_FILE" ]; then
        ENCODING=$(grep ^encoding "$i/$CONF_FILE" | tr -d '[:blank:]' | cut -d '=' -f 2)
        if [ -f "/usr/share/antiword/$ENCODING.txt" ]; then
            mapping="-m $ENCODING.txt"
        fi
        FORMAT=$(grep ^output_format "$i/$CONF_FILE" | tr -d '[:blank:]' | cut -d '=' -f 2)
        if [ "$FORMAT" = "PS" ]; then
            # switch to output format PS, Cyrillic is better supported
            format="-p"
            ext=ps
        fi
        break
    fi
done

DESKTOP=$(kde-config --userpath desktop)

if [ $# -lt 2 ]; then
    echo "Would you like to install an icon on your Desktop, where you"
    echo "will be able to drop an *.doc file on to? It will be displayed"
    echo "as a PDF document or as plain text (if no PDF viewer available)."
    echo -n "[Y/n]: > "
    read n
    if [ "x$n" = "xy" ] || [ "x$n" = "xY" ] || [ "x$n" = "x" ]; then
        if [ -r /etc/papersize ]; then
            n=$(cat /etc/papersize)
        fi
        if [ "x$n" != "xa4" ] && [ "x$n" != "xletter" ]; then
            echo
            echo "Type"
            echo "'a' for output papersize A4,"
            echo "'l' for letter or"
            echo "'n' for cancel."
            echo -n "[a/l/N]: > "
            read n
        fi
        if [ "x$n" = "xa" ] || [ "x$n" = "xa4" ]; then
            cp -f /usr/share/antiword/kantiword.eu.desktop "$DESKTOP/kantiword.desktop"
        elif [ "x$n" = "xl" ] || [ "x$n" = "xletter" ]; then
            cp -f /usr/share/antiword/kantiword.us.desktop "$DESKTOP/kantiword.desktop"
        fi
    fi
    exit 0
fi

# Determine the temp directory
if [ -d "$TMPDIR" ] && [ -w "$TMPDIR" ]; then
    tmp_dir="$TMPDIR"
elif [ -d "$TEMP" ] && [ -w "$TEMP" ]; then
    tmp_dir="$TEMP"
else
    tmp_dir="/tmp"
fi

# Try to create the temp files in a secure way
if [ -x /bin/tempfile ]; then
    out_file=$(/bin/tempfile -d "$tmp_dir" -p antiword -s ".$ext") || exit 1
    err_file=$(/bin/tempfile -d "$tmp_dir" -p antiword -s ".err")
    txt_file=$(/bin/tempfile -d "$tmp_dir" -p antiword -s ".txt")
    if [ $? -ne 0 ]; then
        rm -f "$out_file"
        exit 1
    fi
elif [ -x /bin/mktemp ]; then
    out_file=$(/bin/mktemp -q -p "$tmp_dir" antiword.$ext.XXXXXXXXX) || exit 1
    err_file=$(/bin/mktemp -q -p "$tmp_dir" antiword.err.XXXXXXXXX)
    txt_file=$(/bin/mktemp -q -p "$tmp_dir" antiword.txt.XXXXXXXXX)
    if [ $? -ne 0 ]; then
        rm -f "$out_file"
        exit 1
    fi
else
    # Creating the temp files in an un-secure way
    out_file="$tmp_dir/antiword.$$.$ext"
    err_file="$tmp_dir/antiword.$$.err"
    txt_file="$tmp_dir/antiword.$$.txt"
fi

error=0
# filename is empty, user had clicked on icon, so print a help message
# in err_file
if [ -z $2 ]; then
    cat >"$err_file" <<EOF
    You should drag any *.doc file and drop it on this icon for
    displaying. Kantiword can not do anything with an empty filename.

EOF
error=1
else
    # Determine the paper size
    paper_size=$1
    shift

    # Make the output file (default PDF)
    antiword $mapping $format $paper_size -i 0 "$@" 2>"$err_file" >"$out_file"
    if [ $? -ne 0 ]; then
        error=1
    fi
fi
if [ $error -ne 0 ]; then
    # Something went wrong
    if [ -r "$err_file" ] && [ -s "$err_file" ]; then
       if [ -x /usr/bin/konsole ]; then
           /usr/bin/konsole --hold --caption "Error from Antiword" -e more "$err_file"
       else
           /usr/bin/X11/xterm -T "Error from Antiword" -e less "$err_file"
       fi
    fi
    # Clean up
    rm -f "$out_file" "$err_file" "$txt_file"
    exit 1
fi

# Show the PDF file
if [ "$ext" = "pdf" -a -x /usr/bin/kpdf ]; then
    /usr/bin/kpdf "$out_file"
elif [ "$ext" = "pdf" -a -x /usr/bin/xpdf ]; then
    /usr/bin/xpdf "$out_file" -paper=$paper_size
elif [ -x /usr/bin/gv ]; then
    /usr/bin/gv "$out_file" --nocenter --media=$paper_size
else
    # no viewer available, so display as plain text
    antiword $mapping "$@" 2>"$err_file" >"$txt_file"
    if [ -x /usr/bin/konsole ]; then
        /usr/bin/konsole --hold --caption "Text output from Antiword" -e more "$txt_file"
    else
        /usr/bin/X11/xterm -T "Text output from Antiword" -e less "$txt_file"
    fi
fi

# Clean up
rm -f "$out_file" "$err_file" "$txt_file"
exit 0