__author__ = 'katharine'


def is_valid_symbol(symbol):
    if symbol['insertion_text'].startswith("_"):
        return False
    if symbol['insertion_text'] in BLACKLISTED_SYMBOLS:
        return False
    return True

BLACKLISTED_SYMBOLS = frozenset((
    "abort",
    "abs",
    "alloca",
    "app_log",
    "asctime",
    "atexit",
    "atof",
    "atol",
    "atoll",
    "brk",
    "bsearch",
    "BUFSIZ",
    "clearerr",
    "clock",
    "clock_t",
    "CLOCKS_PER_SEC",
    "close",
    "creat",
    "ctime",
    "difftime",
    "div",
    "EOF",
    "exit",
    "EXIT_FAILURE",
    "EXIT_SUCCESS",
    "fclose",
    "feof",
    "ferror",
    "fflush",
    "fgetc",
    "fgetpos",
    "fgets",
    "FILE",
    "FILENAME_MAX",
    "fopen",
    "FOPEN_MAX",
    "fpos_t",
    "fprintf",
    "fputc",
    "fputs",
    "fread",
    "freopen",
    "fscanf",
    "fseek",
    "fsetpos",
    "ftell",
    "fwrite",
    "getc",
    "getchar",
    "getenv",
    "gets",
    "INT16_C",
    "INT32_C",
    "INT64_C",
    "INT8_C",
    "INT_FAST16_MAX",
    "INT_FAST16_MIN",
    "int_fast16_t",
    "INT_FAST32_MAX",
    "INT_FAST32_MIN",
    "int_fast32_t",
    "INT_FAST64_MAX",
    "INT_FAST64_MIN",
    "int_fast64_t",
    "INT_FAST8_MAX",
    "INT_FAST8_MIN",
    "int_fast8_t",
    "INT_LEAST16_MAX",
    "INT_LEAST16_MIN",
    "int_least16_t",
    "INT_LEAST32_MAX",
    "INT_LEAST32_MIN",
    "int_least32_t",
    "INT_LEAST64_MAX",
    "INT_LEAST64_MIN",
    "int_least64_t",
    "INT_LEAST8_MAX",
    "INT_LEAST8_MIN",
    "int_least8_t",
    "INTMAX_C",
    "INTMAX_MAX",
    "INTMAX_MIN",
    "intmax_t",
    "INTPTR_MAX",
    "INTPTR_MIN",
    "intptr_t",
    "L_tmpnam",
    "labs",
    "ldiv",
    "llabs",
    "lldiv",
    "lldiv_t",
    "MB_CUR_MAX",
    "mblen",
    "mbstowcs",
    "mbtowc",
    "memchr",
    "memcmp",
    "mmap",
    "offsetof",
    "open",
    "PBL_APP_INFO",
    "PBL_APP_INFO_SIMPLE",
    "perror",
    "printf",
    "PTRDIFF_MAX",
    "PTRDIFF_MIN",
    "putc",
    "putchar",
    "puts",
    "qsort",
    "read",
    "RELEASE",
    "remove",
    "rename",
    "rewind",
    "sbrk",
    "scanf",
    "SEEK_CUR",
    "SEEK_END",
    "SEEK_SET",
    "setbuf",
    "setvbuf",
    "SIG_ATOMIC_MAX",
    "SIG_ATOMIC_MIN",
    "SIZE_MAX",
    "sprintf",
    "sscanf",
    "stat",
    "stderr",
    "stdin",
    "stdout",
    "strchr",
    "strcoll",
    "strcspn",
    "strpbrk",
    "strrchr",
    "strspn",
    "strstr",
    "strtok",
    "strtoll",
    "strtoul",
    "strtoull",
    "strxfrm",
    "system",
    "time",
    "time_t",
    "TMP_MAX",
    "tmpfile",
    "tmpnam",
    "UINT16_C",
    "UINT32_C",
    "UINT64_C",
    "UINT8_C",
    "UINT_FAST16_MAX",
    "uint_fast16_t",
    "UINT_FAST32_MAX",
    "uint_fast32_t",
    "UINT_FAST64_MAX",
    "uint_fast64_t",
    "UINT_FAST8_MAX",
    "uint_fast8_t",
    "UINT_LEAST16_MAX",
    "uint_least16_t",
    "UINT_LEAST32_MAX",
    "uint_least32_t",
    "UINT_LEAST64_MAX",
    "uint_least64_t",
    "UINT_LEAST8_MAX",
    "uint_least8_t",
    "UINTMAX_C",
    "UINTMAX_MAX",
    "uintmax_t",
    "UINTPTR_MAX",
    "uintptr_t",
    "ungetc",
    "va_arg",
    "va_copy",
    "va_end",
    "va_list",
    "va_start",
    "vfprintf",
    "vfscanf",
    "vprintf",
    "vscanf",
    "vsnprintf",
    "vsprintf",
    "vsscanf",
    "WCHAR_MIN",
    "wcstombs",
    "wctomb",
    "WINT_MAX",
    "WINT_MIN",
    "write",
))

__author__ = 'katharine'


def is_valid_symbol(symbol):
    if symbol['insertion_text'].startswith("_"):
        return False
    if symbol['insertion_text'] in BLACKLISTED_SYMBOLS:
        return False
    return True

BLACKLISTED_SYMBOLS = frozenset((
    "abort",
    "abs",
    "alloca",
    "app_log",
    "asctime",
    "atexit",
    "atof",
    "atol",
    "atoll",
    "brk",
    "bsearch",
    "BUFSIZ",
    "clearerr",
    "clock",
    "clock_t",
    "CLOCKS_PER_SEC",
    "close",
    "creat",
    "ctime",
    "difftime",
    "div",
    "EOF",
    "exit",
    "EXIT_FAILURE",
    "EXIT_SUCCESS",
    "fclose",
    "feof",
    "ferror",
    "fflush",
    "fgetc",
    "fgetpos",
    "fgets",
    "FILE",
    "FILENAME_MAX",
    "fopen",
    "FOPEN_MAX",
    "fpos_t",
    "fprintf",
    "fputc",
    "fputs",
    "fread",
    "freopen",
    "fscanf",
    "fseek",
    "fsetpos",
    "ftell",
    "fwrite",
    "getc",
    "getchar",
    "getenv",
    "gets",
    "INT16_C",
    "INT32_C",
    "INT64_C",
    "INT8_C",
    "INT_FAST16_MAX",
    "INT_FAST16_MIN",
    "int_fast16_t",
    "INT_FAST32_MAX",
    "INT_FAST32_MIN",
    "int_fast32_t",
    "INT_FAST64_MAX",
    "INT_FAST64_MIN",
    "int_fast64_t",
    "INT_FAST8_MAX",
    "INT_FAST8_MIN",
    "int_fast8_t",
    "INT_LEAST16_MAX",
    "INT_LEAST16_MIN",
    "int_least16_t",
    "INT_LEAST32_MAX",
    "INT_LEAST32_MIN",
    "int_least32_t",
    "INT_LEAST64_MAX",
    "INT_LEAST64_MIN",
    "int_least64_t",
    "INT_LEAST8_MAX",
    "INT_LEAST8_MIN",
    "int_least8_t",
    "INTMAX_C",
    "INTMAX_MAX",
    "INTMAX_MIN",
    "intmax_t",
    "INTPTR_MAX",
    "INTPTR_MIN",
    "intptr_t",
    "L_tmpnam",
    "labs",
    "ldiv",
    "llabs",
    "lldiv",
    "lldiv_t",
    "MB_CUR_MAX",
    "mblen",
    "mbstowcs",
    "mbtowc",
    "memchr",
    "memcmp",
    "mmap",
    "offsetof",
    "open",
    "PBL_APP_INFO",
    "PBL_APP_INFO_SIMPLE",
    "perror",
    "printf",
    "PTRDIFF_MAX",
    "PTRDIFF_MIN",
    "putc",
    "putchar",
    "puts",
    "qsort",
    "read",
    "RELEASE",
    "remove",
    "rename",
    "rewind",
    "sbrk",
    "scanf",
    "SEEK_CUR",
    "SEEK_END",
    "SEEK_SET",
    "setbuf",
    "setvbuf",
    "SIG_ATOMIC_MAX",
    "SIG_ATOMIC_MIN",
    "SIZE_MAX",
    "sprintf",
    "sscanf",
    "stat",
    "stderr",
    "stdin",
    "stdout",
    "strchr",
    "strcoll",
    "strcspn",
    "strpbrk",
    "strrchr",
    "strspn",
    "strstr",
    "strtok",
    "strtoll",
    "strtoul",
    "strtoull",
    "strxfrm",
    "system",
    "time",
    "time_t",
    "TMP_MAX",
    "tmpfile",
    "tmpnam",
    "UINT16_C",
    "UINT32_C",
    "UINT64_C",
    "UINT8_C",
    "UINT_FAST16_MAX",
    "uint_fast16_t",
    "UINT_FAST32_MAX",
    "uint_fast32_t",
    "UINT_FAST64_MAX",
    "uint_fast64_t",
    "UINT_FAST8_MAX",
    "uint_fast8_t",
    "UINT_LEAST16_MAX",
    "uint_least16_t",
    "UINT_LEAST32_MAX",
    "uint_least32_t",
    "UINT_LEAST64_MAX",
    "uint_least64_t",
    "UINT_LEAST8_MAX",
    "uint_least8_t",
    "UINTMAX_C",
    "UINTMAX_MAX",
    "uintmax_t",
    "UINTPTR_MAX",
    "uintptr_t",
    "ungetc",
    "va_arg",
    "va_copy",
    "va_end",
    "va_list",
    "va_start",
    "vfprintf",
    "vfscanf",
    "vprintf",
    "vscanf",
    "vsnprintf",
    "vsprintf",
    "vsscanf",
    "WCHAR_MIN",
    "wcstombs",
    "wctomb",
    "WINT_MAX",
    "WINT_MIN",
    "write",
))
