#!/bin/sh
# $Id: script2log,v 1.5 2015/02/04 23:51:01 tom Exp $
# Filter "most" escape sequences from files such as typescript's.
#
# For demonstration purposes (and because it is likely to be omitted from
# some BSD platforms), this does not use getopts.
if test $# != 0
then
        output=
        case x$1 in
        x-o)
                shift 1
                if test $# = 0
                then
                        echo "?? expected parameter after -o" >&2
                        exit 1
                fi
                output="$1"
                shift 1
                ;;
        x-o*)
                output=`echo "x$1" | sed -e 's/^...//'`
                shift 1
                ;;
        esac
        if test -n "$output"
        then
                exec $0 $* >$output
        fi
fi
 
# ensure POSIX locale
unset LANG
unset LANGUAGE
unset LC_ALL
unset LC_CTYPE
if test $# != 0
then
        for input in $*
        do
                test -f "$input" || continue
                case "$input" in
                *.gz)
                        gzip -dc "$input" | $0
                        ;;
                *.bz2)
                        bzip2 -dc "$input" | $0
                        ;;
                *)
                        $0 <"$input"
                        ;;
                esac
        done
elif test -f $0.sed
then
        # The separate script is more portable than the command-line arguments,
        # because of the loop construct.  Unix and BSDs do not support that
        # as a single line.  Other than changing it to a series of lines, the
        # two scripts are equivalent.
        sed -f $0.sed
else
        # Trim ordinary ANSI sequences, then OSC sequences, then backspace
        # sequences, then trailing CR's and finally overstruck sections of
        # lines.
        #
        # There are still several interesting cases which cannot be handled
        # with a script of this sort.  For example:
        #       CSI K (clear line)
        #       cursor movement within the line
        sed \
                -e 's/␛[[][<=>?]\{0,1\}[;0-9]*[@-~]//g' \
                -e 's/␛[]][^␛]*␇//g' \
                -e 's/␛[]][^␛]*␛\\//g' \
                -e ':loop; s/[^␈]␈\(.\)/\1/g; t loop;' \
                -e 's/␍␍*$//g' \
                -e 's/^.*␍//g' \
                -e 's/␛[^[]//g'
fi