Revision 7d93221a5c159ce506b2a557777d1a1751c7f743 authored by R. David Murray on 05 May 2010, 17:31:03 UTC, committed by R. David Murray on 05 May 2010, 17:31:03 UTC
Yukihiro Nakadaira noticed a typo in encode_7or8bit that was trying
to special case iso-2022 codecs.  It turns out that the code in
question is never used, because whereas it was designed to trigger
if the payload encoding was eight bit but its output encoding was
7 bit, in practice the payload is always converted to the 7bit
encoding before encode_7or8bit is called.  Patch by Shawat Anand.
1 parent b26dc46
Raw File
pp.py
#! /usr/bin/env python

# Emulate some Perl command line options.
# Usage: pp [-a] [-c] [-d] [-e scriptline] [-F fieldsep] [-n] [-p] [file] ...
# Where the options mean the following:
#   -a            : together with -n or -p, splits each line into list F
#   -c            : check syntax only, do not execute any code
#   -d            : run the script under the debugger, pdb
#   -e scriptline : gives one line of the Python script; may be repeated
#   -F fieldsep   : sets the field separator for the -a option [not in Perl]
#   -n            : runs the script for each line of input
#   -p            : prints the line after the script has run
# When no script lines have been passed, the first file argument
# contains the script.  With -n or -p, the remaining arguments are
# read as input to the script, line by line.  If a file is '-'
# or missing, standard input is read.

# XXX To do:
# - add -i extension option (change files in place)
# - make a single loop over the files and lines (changes effect of 'break')?
# - add an option to specify the record separator
# - except for -n/-p, run directly from the file if at all possible

import sys
import getopt

FS = ''
SCRIPT = []
AFLAG = 0
CFLAG = 0
DFLAG = 0
NFLAG = 0
PFLAG = 0

try:
    optlist, ARGS = getopt.getopt(sys.argv[1:], 'acde:F:np')
except getopt.error, msg:
    sys.stderr.write('%s: %s\n' % (sys.argv[0], msg))
    sys.exit(2)

for option, optarg in optlist:
    if option == '-a':
        AFLAG = 1
    elif option == '-c':
        CFLAG = 1
    elif option == '-d':
        DFLAG = 1
    elif option == '-e':
        for line in optarg.split('\n'):
            SCRIPT.append(line)
    elif option == '-F':
        FS = optarg
    elif option == '-n':
        NFLAG = 1
        PFLAG = 0
    elif option == '-p':
        NFLAG = 1
        PFLAG = 1
    else:
        print option, 'not recognized???'

if not ARGS: ARGS.append('-')

if not SCRIPT:
    if ARGS[0] == '-':
        fp = sys.stdin
    else:
        fp = open(ARGS[0], 'r')
    while 1:
        line = fp.readline()
        if not line: break
        SCRIPT.append(line[:-1])
    del fp
    del ARGS[0]
    if not ARGS: ARGS.append('-')

if CFLAG:
    prologue = ['if 0:']
    epilogue = []
elif NFLAG:
    # Note that it is on purpose that AFLAG and PFLAG are
    # tested dynamically each time through the loop
    prologue = [
            'LINECOUNT = 0',
            'for FILE in ARGS:',
            '   \tif FILE == \'-\':',
            '   \t   \tFP = sys.stdin',
            '   \telse:',
            '   \t   \tFP = open(FILE, \'r\')',
            '   \tLINENO = 0',
            '   \twhile 1:',
            '   \t   \tLINE = FP.readline()',
            '   \t   \tif not LINE: break',
            '   \t   \tLINENO = LINENO + 1',
            '   \t   \tLINECOUNT = LINECOUNT + 1',
            '   \t   \tL = LINE[:-1]',
            '   \t   \taflag = AFLAG',
            '   \t   \tif aflag:',
            '   \t   \t   \tif FS: F = L.split(FS)',
            '   \t   \t   \telse: F = L.split()'
            ]
    epilogue = [
            '   \t   \tif not PFLAG: continue',
            '   \t   \tif aflag:',
            '   \t   \t   \tif FS: print FS.join(F)',
            '   \t   \t   \telse: print \' \'.join(F)',
            '   \t   \telse: print L',
            ]
else:
    prologue = ['if 1:']
    epilogue = []

# Note that we indent using tabs only, so that any indentation style
# used in 'command' will come out right after re-indentation.

program = '\n'.join(prologue) + '\n'
for line in SCRIPT:
    program += '   \t   \t' + line + '\n'
program += '\n'.join(epilogue) + '\n'

import tempfile
fp = tempfile.NamedTemporaryFile()
fp.write(program)
fp.flush()
if DFLAG:
    import pdb
    pdb.run('execfile(%r)' % (fp.name,))
else:
    execfile(fp.name)
back to top