#! /usr/bin/env python



"""Keywords (from "graminit.c")



This file is automatically generated; please don't muck it up!



To update the symbols in this file, 'cd' to the top directory of

the python source tree after building the interpreter and run:



    python Lib/keyword.py

"""



__all__ = ["iskeyword", "kwlist"]



kwlist = [

#--start keywords--

        'and',

        'as',

        'assert',

        'break',

        'class',

        'continue',

        'def',

        'del',

        'elif',

        'else',

        'except',

        'exec',

        'finally',

        'for',

        'from',

        'global',

        'if',

        'import',

        'in',

        'is',

        'lambda',

        'not',

        'or',

        'pass',

        'print',

        'raise',

        'return',

        'try',

        'while',

        'with',

        'yield',

#--end keywords--

        ]



iskeyword = frozenset(kwlist).__contains__



def main():

    import sys, re



    args = sys.argv[1:]

    iptfile = args and args[0] or "Python/graminit.c"

    if len(args) > 1: optfile = args[1]

    else: optfile = "Lib/keyword.py"



    # scan the source file for keywords

    fp = open(iptfile)

    strprog = re.compile('"([^"]+)"')

    lines = []

    for line in fp:

        if '{1, "' in line:

            match = strprog.search(line)

            if match:

                lines.append("        '" + match.group(1) + "',\n")

    fp.close()

    lines.sort()



    # load the output skeleton from the target

    fp = open(optfile)

    format = fp.readlines()

    fp.close()



    # insert the lines of keywords

    try:

        start = format.index("#--start keywords--\n") + 1

        end = format.index("#--end keywords--\n")

        format[start:end] = lines

    except ValueError:

        sys.stderr.write("target does not contain format markers\n")

        sys.exit(1)



    # write the output file

    fp = open(optfile, 'w')

    fp.write(''.join(format))

    fp.close()



if __name__ == "__main__":

    main()

