%PDF- %PDF-
| Direktori : /usr/lib/cups/filter/ |
| Current File : //usr/lib/cups/filter/textbrftoindexv3 |
#!/bin/bash
#
# Copyright (c) 2015-2018, 2021 Samuel Thibault <samuel.thibault@ens-lyon.org>
#
# Licensed under Apache License v2.0. See the file "LICENSE" for more
# information.
#
# Make sure we have enough options
if [ $# != 5 -a $# != 6 ]; then
echo "ERROR: $0 jobid user name nb options [filename]" >&2
exit 1
fi
NB=$4
OPTIONS=$5
FILE=$6
case $0 in
*indexv3*) . /usr/share/cups/braille/indexv3.sh ;;
*indexv4*) . /usr/share/cups/braille/indexv4.sh ;;
*) echo "ERROR: $0 must be called as somethingindexv3 or somethingindexv4" >&2
exit 1
;;
esac
printf "$INIT"
if [ $LIBLOUIS1 != None -o \
$LIBLOUIS2 != None -o \
$LIBLOUIS3 != None -o \
$LIBLOUIS4 != None ]
then
# software-translated, send to printer in transparent mode
echo "INFO: Writing text to Index embosser in transparent mode" >&2
if [ -z "$FILE" ]
then
cat
else
cat "$FILE"
fi | (
IFS=$'\n' read -r LINE
EOF=$?
while [ "$EOF" = 0 -o -n "$LINE" ]
do
# Strip CRs
LINE=${LINE//$'\015'}
# Ignore SUBs
LINE=${LINE//$'\032'}
# Turn non-breakable spaces into spaces
LINE=${LINE//$'\302'$'\240'/ }
LINE=${LINE//$'\240'/ }
# Interpret FFs
while [ -n "$LINE" -a -z "${LINE/#$'\014'*}" ]
do
printf "\\f"
LINE=${LINE#$'\014'}
done
# Make sure there is nothing else we don't process
if [ -n "$LINE" ]
then
if [ -z "${LINE/*[$'\000'$'\001'-$'\037'$'\177']*}" ]
then
echo "ERROR: unsupported control character in BRF file" >&2
fi
if [ -z "${LINE/*[$'\200'-$'\377']*}" ]
then
echo "ERROR: unsupported non-ASCII character in BRF file" >&2
fi
fi
CHARS=$(printf %s "$LINE" | wc -c)
if [ "$CHARS" -gt 127 ]
then
# Index printers have a bug with numbers between 128 and 255 in
# transparent mode escape sequence. This is normally not a problem since
# 128 chars is more than a line worth of text
echo "ERROR: Line too long ($CHARS)" >&2
exit 1
fi
if [ "$CHARS" -gt 0 ]
then
# Enter transparent mode for $CHARS characters
printf "\\033\\\\\\x$(printf %02x $CHARS)\\x00"
# Echo those $CHARS characters.
# First normalize BRF characters (`a-z{|}~ are non-standard).
# Drop unicode patterns with dots 7 or 8 in case the liblouis table happened to erroneously emit one
# Drop remaining erroneous multibyte characters
# Drop remaining erroneous 1-byte characters
# Then turn it into Index 6dots sequences.
printf %s "$LINE" | \
tr "\`a-z{|}~" "@A-Z\\[\\\\]_" | \
sed -e 's/[⡀⡁⡂⡃⡄⡅⡆⡇⡈⡉⡊⡋⡌⡍⡎⡏⡐⡑⡒⡓⡔⡕⡖⡗⡘⡙⡚⡛⡜⡝⡞⡟⡠⡡⡢⡣⡤⡥⡦⡧⡨⡩⡪⡫⡬⡭⡮⡯⡰⡱⡲⡳⡴⡵⡶⡷⡸⡹⡺⡻⡼⡽⡾⡿⢀⢁⢂⢃⢄⢅⢆⢇⢈⢉⢊⢋⢌⢍⢎⢏⢐⢑⢒⢓⢔⢕⢖⢗⢘⢙⢚⢛⢜⢝⢞⢟⢠⢡⢢⢣⢤⢥⢦⢧⢨⢩⢪⢫⢬⢭⢮⢯⢰⢱⢲⢳⢴⢵⢶⢷⢸⢹⢺⢻⢼⢽⢾⢿⣀⣁⣂⣃⣄⣅⣆⣇⣈⣉⣊⣋⣌⣍⣎⣏⣐⣑⣒⣓⣔⣕⣖⣗⣘⣙⣚⣛⣜⣝⣞⣟⣠⣡⣢⣣⣤⣥⣦⣧⣨⣩⣪⣫⣬⣭⣮⣯⣰⣱⣲⣳⣴⣵⣶⣷⣸⣹⣺⣻⣼⣽⣾⣿]/ /g' | \
sed -e "s/[^] \!\"#$%&'()*+,.\\/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\\\\^_[-]/ /g" | \
tr "\000-\037\177\200-\377" " " | \
tr " \!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\\[\\\\\\]^_" "\\0V tSQW"$'\004'"gvAT@DP"$'\024'"d"$'\002\006'"\"bB&fF\$a\`Cw4q"$'\020\001\003\021'"1!"$'\023'"3#"$'\022'"2"$'\005\007\025'"5%"$'\027'"7'"$'\026'"6EGrUueRcs0p"
fi
if [ "$EOF" = 0 ]
then
printf "\\r\\n"
fi
IFS=$'\n' read -r LINE
EOF=$?
done
)
if [ $? != 0 ]
then
printf '\032'
exit 1
fi
else
# not software-translated, send to printer as such
echo "INFO: Writing text to Index embosser" >&2
if [ -z "$FILE" ]
then
cat
else
cat "$FILE"
fi
fi
printf '\032'
echo "INFO: Ready" >&2