%PDF- %PDF-
Direktori : /usr/lib/cups/filter/ |
Current File : //usr/lib/cups/filter/textbrftoindexv4 |
#!/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