

KEYWORDS_C = [
    'alignas', 'alignof', 'auto', 'bool', 'break', 'case', 'char', 'const',
    'constexpr', 'continue', 'default', 'do', 'double', 'else', 'enum',
    'extern', 'false', 'float', 'for', 'goto', 'if', 'inline', 'int', 'long',
    'nullptr', 'register', 'restrict', 'return', 'short', 'signed', 'sizeof',
    'static', 'static_assert', 'struct', 'switch', 'thread_local', 'true',
    'typedef', 'typeof', 'typeof_unqual', 'union', 'unsigned', 'void', 'volatile',
    'while', '_Alignas', '_Alignof', '_Atomic', '_BitInt', '_Bool', '_Complex',
    '_Decimal128', '_Decimal32', '_Decimal64', '_Generic', '_Imaginary',
    '_Noreturn', '_Static_assert', '_Thread_local',
    'printf','snprintf',
    'strlen','strcmp','strcpy','strncmp',
    'max','min'
]


KEYWORDS_PY = [
    "abs",
    "aiter",
    "all",
    "anext",
    "any",
    "ascii",
    "bin",
    "bool",
    "breakpoint",
    "bytearray",
    "bytes",
    "callable",
    "chr",
    "classmethod",
    "compile",
    "complex",
    "delattr",
    "dict",
    "dir",
    "divmod",
    "enumerate",
    "eval",
    "exec",
    "filter",
    "float",
    "format",
    "frozenset",
    "getattr",
    "globals",
    "hasattr",
    "hash",
    "help",
    "hex",
    "id",
    "input",
    "int",
    "isinstance",
    "issubclass",
    "iter",
    "len",
    "list",
    "locals",
    "map",
    "max",
    "memoryview",
    "min",
    "next",
    "object",
    "oct",
    "open",
    "ord",
    "pow",
    "print",
    "property",
    "range",
    "repr",
    "reversed",
    "round",
    "set",
    "setattr",
    "slice",
    "sorted",
    "staticmethod",
    "str",
    "sum",
    "super",
    "tuple",
    "type",
    "vars",
    "zip",
    "__import__",
    "ZeroDivisionError",
    "ValueError",
    "AssertionError",
    "AttributeError",
    "EOFError",
    "FloatingPointError",
    "GeneratorExit",
    "ImportError",
    "IndexError",
    "KeyError",
    "KeyboardInterrupt",
    "MemoryError",
    "NameError",
    "NotImplementedError",
    "OSError",
    "OverflowError",
    "ReferenceError",
    "RuntimeError",
    "StopIteration",
    "SyntaxError",
    "IndentationError",
    "TabError",
    "SystemError",
    "SystemExit",
    "TypeError",
    "UnboundLocalError",
    "UnicodeError",
    "UnicodeEncodeError",
    "UnicodeDecodeError",
    "UnicodeTranslateError",
    "and",
    "or",
    "if",
    "in",
    "elif",
    "else",
    "with",
    "open",
    "append",
    "update",
    "readlines",
    "startswith",
    "endswith",
    "keys",
    "values",
    "pop",
    "join",
    "strip",
]




# Keep this in alphabetical other , you b*st*rd

KEYWORDS_FTN = {
    "abs" : "other",
    "aimag" : "other",
    "aint" : "other",
    "all" : "other",
    "allocatable" : "other",
    "allocate" : "other",
    "allocated" : "other",
    "anint" : "other",
    "any" : "other",
    "asin" : "other",
    "assign" : "other",
    "assignment" : "other",
    "associate" : "nesting",
    "atan" : "other",
    "atan2" : "other",
    "backspace" : "other",
    "bind" : "other",
    "bit_size" : "other",
    "block" : "nesting",
    "btest" : "other",
    "call" : "other",
    "case" : "other",
    "ceiling" : "other",
    "char" : "other",
    "character" : "other",
    "close" : "other",
    "class" : "other",
    "cmplx" : "other",
    "common" : "other",
    "conjg" : "other",
    "contains" : "other",
    "continue" : "other",
    "cos" : "other",
    "cosh" : "other",
    "count" : "other",
    "cshift" : "other",
    "cycle" : "other",
    "data" : "other",
    "date_and_time" : "other",
    "deallocate" : "other",
    "digits" : "other",
    "dim" : "other",
    "dimension" : "other",
    "do" : "nesting",
    "dot_product" : "other",
    "dprod" : "other",
    "dshiftl" : "other",
    "dshiftr" : "other",
    "else" : "other",
    "elseif" : "other",
    "elsewhere" : "other",
    "end" : "other",
    "endfile" : "other",
    "entry" : "other",
    "enum" : "nesting",
    "eor" : "other",
    "epsilon" : "other",
    "equivalence" : "other",
    "erf" : "other",
    "erfc" : "other",
    "etime" : "other",
    "exit" : "other",
    "exp" : "other",
    "exponent" : "other",
    "extends" : "other",
    "extends_type_of" : "other",
    "external" : "other",
    "floor" : "other",
    "forall" : "nesting",
    "format" : "other",
    "fraction" : "other",
    "function" : "structure",
    "function_elemental" : "structure", # Created to simplify struct analysis
    "function_pure" : "structure", # Created to simplify struct analysis
    "function_recursive" : "structure", # Created to simplify struct analysis
    "gamma" : "other",
    "go" : "other",
    "goto" : "other",
    "huge" : "other",
    "iachar" : "other",
    "iall" : "other",
    "iand" : "other",
    "iany" : "other",
    "ibclr" : "other",
    "ibits" : "other",
    "ibset" : "other",
    "ichar" : "other",
    "idate" : "other",
    "idim" : "other",
    "idint" : "other",
    "idnint" : "other",
    "ieor" : "other",
    "ierrno" : "other",
    "if" : "nesting",
    "ifix" : "other",
    "implicit" : "other",
    "index" : "other",
    "inquire" : "other",
    "int" : "other",
    "integer" : "other",
    "intent" : "other",
    "interface" : "structure",
    "interface_abstract" : "structure",  # Created to simplify struct analysis
    "intrinsic" : "other",
    "ior" : "other",
    "iparity" : "other",
    "irand" : "other",
    "is_iostat_end" : "other",
    "is_iostat_eor" : "other",
    "ishft" : "other",
    "ishftc" : "other",
    "kind" : "other",
    "lbound" : "other",
    "lcm" : "other",
    "len" : "other",
    "len_trim" : "other",
    "lge" : "other",
    "lgt" : "other",
    "lle" : "other",
    "llt" : "other",
    "log" : "other",
    "log10" : "other",
    "log_gamma" : "other",
    "logical" : "other",
    "maskl" : "other",
    "maskr" : "other",
    "matmul" : "other",
    "max" : "other",
    "maxexponent" : "other",
    "maxloc" : "other",
    "maxval" : "other",
    "merge" : "other",
    "merge_bits" : "other",
    "min" : "other",
    "minexponent" : "other",
    "minloc" : "other",
    "minval" : "other",
    "mod" : "other",
    "module" : "structure",
    "modulo" : "other",
    "namelist" : "other",
    "nearest" : "other",
    "norm2" : "other",
    "not" : "other",
    "null" : "other",
    "nullify" : "other",
    "nworkers" : "other",
    "only" : "other",
    "open" : "other",
    "operator" : "other",
    "optional" : "other",
    "pack" : "other",
    "parameter" : "other",
    "parity" : "other",
    "pause" : "other",
    "pointer" : "other",
    "popcnt" : "other",
    "poppar" : "other",
    "precision" : "other",
    "present" : "other",
    "print" : "other",
    "private" : "other",
    "procedure" : "other",
    "product" : "other",
    "program" : "structure",
    "public" : "other",
    "radix" : "other",
    "range" : "other",
    "read" : "other",
    "real" : "other",
    "recursive" : "other",
    "repeat" : "other",
    "reshape" : "other",
    "result" : "other",
    "return" : "other",
    "rewind" : "other",
    "rrspacing" : "other",
    "save" : "other",
    "scale" : "other",
    "scan" : "other",
    "select" : "other",
    "select_case" : "nesting",  # Created to simplify struct analysis
    "select_type" : "nesting", # Created to simplify struct analysis
    "selected_int_kind" : "other",
    "selected_real_kind" : "other",
    "sequence" : "other",
    "set_exponent" : "other",
    "shape" : "other",
    "shifta" : "other",
    "shiftl" : "other",
    "shiftr" : "other",
    "sign" : "other",
    "sin" : "other",
    "sinh" : "other",
    "size" : "other",
    "spacing" : "other",
    "spread" : "other",
    "sqrt" : "other",
    "stop" : "other",
    "storage_size" : "other",
    "subroutine" : "structure",
    "subroutine_elemental" : "structure", # Created to simplify struct analysis
    "subroutine_recursive" : "structure", # Created to simplify struct analysis
    "sum" : "other",
    "system_clock" : "other",
    "tan" : "other",
    "tanh" : "other",
    "target" : "other",
    "then" : "other",
    "this_image" : "other",
    "tiny" : "other",
    "to" : "other",
    "trailz" : "other",
    "transfer" : "other",
    "transpose" : "other",
    "trim" : "other",
    "type" : "structure",
    "type_private" : "structure",   # Created to simplify struct analysis
    "type_private_abstract" : "structure", # Created to simplify struct analysis
    "type_public" : "structure", # Created to simplify struct analysis
    "type_public_abstract" : "structure", # Created to simplify struct analysis
    "ubound" : "other",
    "unpack" : "other",
    "use" : "other",
    "verify" : "other",
    "where" : "nesting",
    "while" : "other",
    "write" : "other",
    "xor" : "other",
}

STRUCTURES_FTN = [key for key,value in KEYWORDS_FTN.items() if value=="structure"  ]
NESTS_FTN = [key for key,value in KEYWORDS_FTN.items() if value=="nesting"  ]
OTHERS_FTN = [key for key,value in KEYWORDS_FTN.items() if value=="other"  ]

