#!/usr/bin/env python3
# Copyright 2009 James P Goodwin ped tiny python editor
# This is a tiny editor created by James
import sys                        
import os     
import re
from optparse import OptionParser

def run_find( name, file_input, options ):
    """ perform find on the stream passed as input """
    line = 1
    pat = re.compile(options.pattern)
    for l in file_input:
        if pat.search(l):
            if options.filenames:
                print(name)
                return
            if options.numbers:
                print("%s:%d: %s"%(name,line,l.strip()))
            else:
                print("%s: %s"%(name,l.strip()))
        line += 1

def main(piped_stdin, options, args):
    """ The main driver for the pyfind utility """
    
    if piped_stdin:
        run_find("stdin",piped_stdin, options)
        
    for arg in args:
        run_find(arg,open(arg,"r"), options)


if __name__ == '__main__':
    piped_stdin = None
    if not os.isatty(sys.stdin.fileno()):
        # grab the original stream
        piped_stdin = sys.stdin

    parser = OptionParser(usage="usage: {cmd |} %prog [options] {files to search}", description="A python grep utility that uses python regular expressions")
    parser.add_option("-p","--pattern", dest="pattern", default=".*", help="python regular expression to search for")
    parser.add_option("-f","--filenames", dest="filenames", action="store_true", default=False, help="just print file names with matches")
    parser.add_option("-n","--numbers", dest="numbers", action="store_true", default=False, help="print line numbers")
    (options,args) = parser.parse_args()

    retval = main(piped_stdin,options,args)
    if retval:
        sys.exit(retval)
