(args=sys.argv)
return 0
Main command line entry point.
Main command line entry point.
Main command line entry point .
def main(args=sys.argv):
    """
    Main command line entry point.
    """
    # pylint: disable-msg=R0911,R0912,R0915

    usage = USAGE % ((args[0],) * 6)

    try:
        popts, args = getopt.getopt(args[1:], "l:f:F:o:O:P:LS:a:N:hVHg")
    except getopt.GetoptError, err:
        print >>sys.stderr, usage
        return 2
    opts = {}
    O_opts = []
    P_opts = []
    F_opts = []
    for opt, arg in popts:
        if opt == '-O':
            O_opts.append(arg)
        elif opt == '-P':
            P_opts.append(arg)
        elif opt == '-F':
            F_opts.append(arg)
        opts[opt] = arg

    if not opts and not args:
        print usage
        return 0

    if opts.pop('-h', None) is not None:
        print usage
        return 0

    if opts.pop('-V', None) is not None:
        print 'Pygments version %s, (c) 2006-2012 by Georg Brandl.' % __version__
        return 0

    # handle ``pygmentize -L``
    L_opt = opts.pop('-L', None)
    if L_opt is not None:
        if opts:
            print >>sys.stderr, usage
            return 2

        # print version
        main(['', '-V'])
        if not args:
            args = ['lexer', 'formatter', 'filter', 'style']
        for arg in args:
            _print_list(arg.rstrip('s'))
        return 0

    # handle ``pygmentize -H``
    H_opt = opts.pop('-H', None)
    if H_opt is not None:
        if opts or len(args) != 2:
            print >>sys.stderr, usage
            return 2

        what, name = args
        if what not in ('lexer', 'formatter', 'filter'):
            print >>sys.stderr, usage
            return 2

        _print_help(what, name)
        return 0

    # parse -O options
    parsed_opts = _parse_options(O_opts)
    opts.pop('-O', None)

    # parse -P options
    for p_opt in P_opts:
        try:
            name, value = p_opt.split('=', 1)
        except ValueError:
            parsed_opts[p_opt] = True
        else:
            parsed_opts[name] = value
    opts.pop('-P', None)

    # handle ``pygmentize -N``
    infn = opts.pop('-N', None)
    if infn is not None:
        try:
            lexer = get_lexer_for_filename(infn, **parsed_opts)
        except ClassNotFound, err:
            lexer = TextLexer()
        except OptionError, err:
            print >>sys.stderr, 'Error:', err
            return 1

        print lexer.aliases[0]
        return 0

    # handle ``pygmentize -S``
    S_opt = opts.pop('-S', None)
    a_opt = opts.pop('-a', None)
    if S_opt is not None:
        f_opt = opts.pop('-f', None)
        if not f_opt:
            print >>sys.stderr, usage
            return 2
        if opts or args:
            print >>sys.stderr, usage
            return 2

        try:
            parsed_opts['style'] = S_opt
            fmter = get_formatter_by_name(f_opt, **parsed_opts)
        except ClassNotFound, err:
            print >>sys.stderr, err
            return 1

        arg = a_opt or ''
        try:
            print fmter.get_style_defs(arg)
        except Exception, err:
            print >>sys.stderr, 'Error:', err
            return 1
        return 0

    # if no -S is given, -a is not allowed
    if a_opt is not None:
        print >>sys.stderr, usage
        return 2

    # parse -F options
    F_opts = _parse_filters(F_opts)
    opts.pop('-F', None)

    # select formatter
    outfn = opts.pop('-o', None)
    fmter = opts.pop('-f', None)
    if fmter:
        try:
            fmter = get_formatter_by_name(fmter, **parsed_opts)
        except (OptionError, ClassNotFound), err:
            print >>sys.stderr, 'Error:', err
            return 1

    if outfn:
        if not fmter:
            try:
                fmter = get_formatter_for_filename(outfn, **parsed_opts)
            except (OptionError, ClassNotFound), err:
                print >>sys.stderr, 'Error:', err
                return 1
        try:
            outfile = open(outfn, 'wb')
        except Exception, err:
            print >>sys.stderr, 'Error: cannot open outfile:', err
            return 1
    else:
        if not fmter:
            fmter = TerminalFormatter(**parsed_opts)
        outfile = sys.stdout

    # select lexer
    lexer = opts.pop('-l', None)
    if lexer:
        try:
            lexer = get_lexer_by_name(lexer, **parsed_opts)
        except (OptionError, ClassNotFound), err:
            print >>sys.stderr, 'Error:', err
            return 1

    if args:
        if len(args) > 1:
            print >>sys.stderr, usage
            return 2

        infn = args[0]
        try:
            code = open(infn, 'rb').read()
        except Exception, err:
            print >>sys.stderr, 'Error: cannot read infile:', err
            return 1

        if not lexer:
            try:
                lexer = get_lexer_for_filename(infn, code, **parsed_opts)
            except ClassNotFound, err:
                if '-g' in opts:
                    try:
                        lexer = guess_lexer(code)
                    except ClassNotFound:
                        lexer = TextLexer()
                else:
                    print >>sys.stderr, 'Error:', err
                    return 1
            except OptionError, err:
                print >>sys.stderr, 'Error:', err
                return 1

    else:
        if '-g' in opts:
            code = sys.stdin.read()
            try:
                lexer = guess_lexer(code)
            except ClassNotFound:
                lexer = TextLexer()
        elif not lexer:
            print >>sys.stderr, 'Error: no lexer name given and reading ' + \
                                'from stdin (try using -g or -l <lexer>)'
            return 2
        else:
            code = sys.stdin.read()

    # No encoding given? Use latin1 if output file given,
    # stdin/stdout encoding otherwise.
    # (This is a compromise, I'm not too happy with it...)
    if 'encoding' not in parsed_opts and 'outencoding' not in parsed_opts:
        if outfn:
            # encoding pass-through
            fmter.encoding = 'latin1'
        else:
            if sys.version_info < (3,):
                # use terminal encoding; Python 3's terminals already do that
                lexer.encoding = getattr(sys.stdin, 'encoding',
                                         None) or 'ascii'
                fmter.encoding = getattr(sys.stdout, 'encoding',
                                         None) or 'ascii'
    elif not outfn and sys.version_info > (3,):
        # output to terminal with encoding -> use .buffer
        outfile = sys.stdout.buffer

    # ... and do it!
    try:
        # process filters
        for fname, fopts in F_opts:
            lexer.add_filter(fname, **fopts)
        highlight(code, lexer, fmter, outfile)
    except Exception, err:
        import traceback
        info = traceback.format_exception(*sys.exc_info())
        msg = info[-1].strip()
        if len(info) >= 3:
            # extract relevant file and position info
            msg += '\n   (f%s)' % info[-2].split('\n')[0].strip()[1:]
        print >>sys.stderr
        print >>sys.stderr, '*** Error while highlighting:'
        print >>sys.stderr, msg
        return 1

    return 0
def main ( args = sys . argv ) : # pylint: disable-msg=R0911,R0912,R0915 usage = USAGE % ( ( args [ 0 ] , ) * 6 ) try : popts , args = getopt . getopt ( args [ 1 : ] , "l:f:F:o:O:P:LS:a:N:hVHg" ) except getopt . GetoptError , err : print >> sys . stderr , usage return 2 opts = { } O_opts = [ ] P_opts = [ ] F_opts = [ ] for opt , arg in popts : if opt == '-O' : O_opts . append ( arg ) elif opt == '-P' : P_opts . append ( arg ) elif opt == '-F' : F_opts . append ( arg ) opts [ opt ] = arg if not opts and not args : print usage return 0 if opts . pop ( '-h' , None ) is not None : print usage return 0 if opts . pop ( '-V' , None ) is not None : print 'Pygments version %s, (c) 2006-2012 by Georg Brandl.' % __version__ return 0 # handle ``pygmentize -L`` L_opt = opts . pop ( '-L' , None ) if L_opt is not None : if opts : print >> sys . stderr , usage return 2 # print version main ( [ '' , '-V' ] ) if not args : args = [ 'lexer' , 'formatter' , 'filter' , 'style' ] for arg in args : _print_list ( arg . rstrip ( 's' ) ) return 0 # handle ``pygmentize -H`` H_opt = opts . pop ( '-H' , None ) if H_opt is not None : if opts or len ( args ) != 2 : print >> sys . stderr , usage return 2 what , name = args if what not in ( 'lexer' , 'formatter' , 'filter' ) : print >> sys . stderr , usage return 2 _print_help ( what , name ) return 0 # parse -O options parsed_opts = _parse_options ( O_opts ) opts . pop ( '-O' , None ) # parse -P options for p_opt in P_opts : try : name , value = p_opt . split ( '=' , 1 ) except ValueError : parsed_opts [ p_opt ] = True else : parsed_opts [ name ] = value opts . pop ( '-P' , None ) # handle ``pygmentize -N`` infn = opts . pop ( '-N' , None ) if infn is not None : try : lexer = get_lexer_for_filename ( infn , * * parsed_opts ) except ClassNotFound , err : lexer = TextLexer ( ) except OptionError , err : print >> sys . stderr , 'Error:' , err return 1 print lexer . aliases [ 0 ] return 0 # handle ``pygmentize -S`` S_opt = opts . pop ( '-S' , None ) a_opt = opts . pop ( '-a' , None ) if S_opt is not None : f_opt = opts . pop ( '-f' , None ) if not f_opt : print >> sys . stderr , usage return 2 if opts or args : print >> sys . stderr , usage return 2 try : parsed_opts [ 'style' ] = S_opt fmter = get_formatter_by_name ( f_opt , * * parsed_opts ) except ClassNotFound , err : print >> sys . stderr , err return 1 arg = a_opt or '' try : print fmter . get_style_defs ( arg ) except Exception , err : print >> sys . stderr , 'Error:' , err return 1 return 0 # if no -S is given, -a is not allowed if a_opt is not None : print >> sys . stderr , usage return 2 # parse -F options F_opts = _parse_filters ( F_opts ) opts . pop ( '-F' , None ) # select formatter outfn = opts . pop ( '-o' , None ) fmter = opts . pop ( '-f' , None ) if fmter : try : fmter = get_formatter_by_name ( fmter , * * parsed_opts ) except ( OptionError , ClassNotFound ) , err : print >> sys . stderr , 'Error:' , err return 1 if outfn : if not fmter : try : fmter = get_formatter_for_filename ( outfn , * * parsed_opts ) except ( OptionError , ClassNotFound ) , err : print >> sys . stderr , 'Error:' , err return 1 try : outfile = open ( outfn , 'wb' ) except Exception , err : print >> sys . stderr , 'Error: cannot open outfile:' , err return 1 else : if not fmter : fmter = TerminalFormatter ( * * parsed_opts ) outfile = sys . stdout # select lexer lexer = opts . pop ( '-l' , None ) if lexer : try : lexer = get_lexer_by_name ( lexer , * * parsed_opts ) except ( OptionError , ClassNotFound ) , err : print >> sys . stderr , 'Error:' , err return 1 if args : if len ( args ) > 1 : print >> sys . stderr , usage return 2 infn = args [ 0 ] try : code = open ( infn , 'rb' ) . read ( ) except Exception , err : print >> sys . stderr , 'Error: cannot read infile:' , err return 1 if not lexer : try : lexer = get_lexer_for_filename ( infn , code , * * parsed_opts ) except ClassNotFound , err : if '-g' in opts : try : lexer = guess_lexer ( code ) except ClassNotFound : lexer = TextLexer ( ) else : print >> sys . stderr , 'Error:' , err return 1 except OptionError , err : print >> sys . stderr , 'Error:' , err return 1 else : if '-g' in opts : code = sys . stdin . read ( ) try : lexer = guess_lexer ( code ) except ClassNotFound : lexer = TextLexer ( ) elif not lexer : print >> sys . stderr , 'Error: no lexer name given and reading ' + 'from stdin (try using -g or -l <lexer>)' return 2 else : code = sys . stdin . read ( ) # No encoding given? Use latin1 if output file given, # stdin/stdout encoding otherwise. # (This is a compromise, I'm not too happy with it...) if 'encoding' not in parsed_opts and 'outencoding' not in parsed_opts : if outfn : # encoding pass-through fmter . encoding = 'latin1' else : if sys . version_info < ( 3 , ) : # use terminal encoding; Python 3's terminals already do that lexer . encoding = getattr ( sys . stdin , 'encoding' , None ) or 'ascii' fmter . encoding = getattr ( sys . stdout , 'encoding' , None ) or 'ascii' elif not outfn and sys . version_info > ( 3 , ) : # output to terminal with encoding -> use .buffer outfile = sys . stdout . buffer # ... and do it! try : # process filters for fname , fopts in F_opts : lexer . add_filter ( fname , * * fopts ) highlight ( code , lexer , fmter , outfile ) except Exception , err : import traceback info = traceback . format_exception ( * sys . exc_info ( ) ) msg = info [ - 1 ] . strip ( ) if len ( info ) >= 3 : # extract relevant file and position info msg += '\n   (f%s)' % info [ - 2 ] . split ( '\n' ) [ 0 ] . strip ( ) [ 1 : ] print >> sys . stderr print >> sys . stderr , '*** Error while highlighting:' print >> sys . stderr , msg return 1 return 0