"""
    pygments.lexers.apdlexer
    ~~~~~~~~~~~~~~~~~~~~~~~~

    Lexers for ANSYS Parametric Design Language.

    :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
"""

import re

from pygments.lexer import RegexLexer, include, words, default
from pygments.token import Comment, Keyword, Name, Number, Operator, String, Generic, Punctuation, Whitespace, Escape

__all__ = ["apdlexer"]


class apdlexer(RegexLexer):
    """
    For APDL source code.

    .. versionadded:: 2.9
    """

    name = "ANSYS parametric design language"
    aliases = ["ansys", "apdl"]
    filenames = ["*.ans"]
    flags = re.IGNORECASE

    # list of elements
    elafunb = (
        "SURF152",
        "SURF153",
        "SURF154",
        "SURF156",
        "SHELL157",
        "SURF159",
        "LINK160",
        "BEAM161",
        "PLANE162",
        "SHELL163",
        "SOLID164",
        "COMBI165",
        "MASS166",
        "LINK167",
        "SOLID168",
        "TARGE169",
        "TARGE170",
        "CONTA171",
        "CONTA172",
        "CONTA173",
        "CONTA174",
        "CONTA175",
        "CONTA176",
        "CONTA177",
        "CONTA178",
        "PRETS179",
        "LINK180",
        "SHELL181",
        "PLANE182",
        "PLANE183",
        "MPC184",
        "SOLID185",
        "SOLID186",
        "SOLID187",
        "BEAM188",
        "BEAM189",
        "SOLSH190",
        "INTER192",
        "INTER193",
        "INTER194",
        "INTER195",
        "MESH200",
        "FOLLW201",
        "INTER202",
        "INTER203",
        "INTER204",
        "INTER205",
        "SHELL208",
        "SHELL209",
        "CPT212",
        "CPT213",
        "COMBI214",
        "CPT215",
        "CPT216",
        "CPT217",
        "FLUID220",
        "FLUID221",
        "PLANE223",
        "SOLID226",
        "SOLID227",
        "PLANE230",
        "SOLID231",
        "SOLID232",
        "PLANE233",
        "SOLID236",
        "SOLID237",
        "PLANE238",
        "SOLID239",
        "SOLID240",
        "HSFLD241",
        "HSFLD242",
        "SURF251",
        "SURF252",
        "REINF263",
        "REINF264",
        "REINF265",
        "SOLID272",
        "SOLID273",
        "SOLID278",
        "SOLID279",
        "SHELL281",
        "SOLID285",
        "PIPE288",
        "PIPE289",
        "ELBOW290",
        "USER300",
        "BEAM3",
        "BEAM4",
        "BEAM23",
        "BEAM24",
        "BEAM44",
        "BEAM54",
        "COMBIN7",
        "FLUID79",
        "FLUID80",
        "FLUID81",
        "FLUID141",
        "FLUID142",
        "INFIN9",
        "INFIN47",
        "PLANE13",
        "PLANE25",
        "PLANE42",
        "PLANE53",
        "PLANE67",
        "PLANE82",
        "PLANE83",
        "PLANE145",
        "PLANE146",
        "CONTAC12",
        "CONTAC52",
        "LINK1",
        "LINK8",
        "LINK10",
        "LINK32",
        "PIPE16",
        "PIPE17",
        "PIPE18",
        "PIPE20",
        "PIPE59",
        "PIPE60",
        "SHELL41",
        "SHELL43",
        "SHELL57",
        "SHELL63",
        "SHELL91",
        "SHELL93",
        "SHELL99",
        "SHELL150",
        "SOLID5",
        "SOLID45",
        "SOLID46",
        "SOLID65",
        "SOLID69",
        "SOLID92",
        "SOLID95",
        "SOLID117",
        "SOLID127",
        "SOLID128",
        "SOLID147",
        "SOLID148",
        "SOLID191",
        "VISCO88",
        "VISCO89",
        "VISCO106",
        "VISCO107",
        "VISCO108",
        "TRANS109",
    )

    elafunc = (
        "PGRAPH",
        "/VT",
        "VTIN",
        "VTRFIL",
        "VTTEMP",
        "PGRSET",
        "VTCLR",
        "VTMETH",
        "VTRSLT",
        "VTVMOD",
        "PGSELE",
        "VTDISC",
        "VTMP",
        "VTSEC",
        "PGWRITE",
        "VTEVAL",
        "VTOP",
        "VTSFE",
        "POUTRES",
        "VTFREQ",
        "VTPOST",
        "VTSL",
        "FLDATA1-40",
        "HFPCSWP",
        "MSDATA",
        "MSVARY",
        "QFACT",
        "FLOCHECK",
        "HFPOWER",
        "MSMASS",
        "PERI",
        "SPADP",
        "FLREAD",
        "HFPORT",
        "MSMETH",
        "PLFSS",
        "SPARM",
        "FLOTRAN",
        "HFSCAT",
        "MSMIR",
        "PLSCH",
        "SPFSS",
        "HFADP",
        "ICE",
        "MSNOMF",
        "PLSYZ",
        "SPICE",
        "HFARRAY",
        "ICEDELE",
        "MSPROP",
        "PLTD",
        "SPSCAN",
        "HFDEEM",
        "ICELIST",
        "MSQUAD",
        "PLTLINE",
        "SPSWP",
        "HFEIGOPT",
        "ICVFRC",
        "MSRELAX",
        "PLVFRC",
        "HFEREFINE",
        "LPRT",
        "MSSOLU",
        "/PICE",
        "HFMODPRT",
        "MSADV",
        "MSSPEC",
        "PLWAVE",
        "HFPA",
        "MSCAP",
        "MSTERM",
        "PRSYZ",
    )

    elafund = (
        "*VOPER",
        "VOVLAP",
        "*VPLOT",
        "VPLOT",
        "VPTN",
        "*VPUT",
        "VPUT",
        "*VREAD",
        "VROTAT",
        "VSBA",
        "VSBV",
        "VSBW",
        "/VSCALE",
        "*VSCFUN",
        "VSEL",
        "VSLA",
        "*VSTAT",
        "VSUM",
        "VSWEEP",
        "VSYMM",
        "VTRAN",
        "VTYPE",
        "/VUP",
        "*VWRITE",
        "/WAIT",
        "WAVES",
        "WERASE",
        "WFRONT",
        "/WINDOW",
        "WMID",
        "WMORE",
        "WPAVE",
        "WPCSYS",
        "WPLANE",
        "WPOFFS",
        "WPROTA",
        "WPSTYL",
        "WRFULL",
        "WRITE",
        "WRITEMAP",
        "*WRK",
        "WSORT",
        "WSPRINGS",
        "WSTART",
        "WTBCREATE",
        "XFDATA",
        "XFENRICH",
        "XFLIST",
        "/XFRM",
        "/XRANGE",
        "XVAR",
        "/YRANGE",
        "/ZOOM",
        "/WB",
        "XMLO",
        "/XML",
        "CNTR",
        "EBLOCK",
        "CMBLOCK",
        "NBLOCK",
        "/TRACK",
        "CWZPLOT",
        "~EUI",
        "NELE",
        "EALL",
        "NALL",
        "FLITEM",
        "LSLN",
        "PSOLVE",
        "ASLN",
        "/VERIFY",
        "/SSS",
        "~CFIN",
        "*EVAL",
        "*MOONEY",
        "/RUNSTAT",
        "ALPFILL",
        "ARCOLLAPSE",
        "ARDETACH",
        "ARFILL",
        "ARMERGE",
        "ARSPLIT",
        "FIPLOT",
        "GAPFINISH",
        "GAPLIST",
        "GAPMERGE",
        "GAPOPT",
        "GAPPLOT",
        "LNCOLLAPSE",
        "LNDETACH",
        "LNFILL",
        "LNMERGE",
        "LNSPLIT",
        "PCONV",
        "PLCONV",
        "PEMOPTS",
        "PEXCLUDE",
        "PINCLUDE",
        "PMETH",
        "/PMETH",
        "PMOPTS",
        "PPLOT",
        "PPRANGE",
        "PRCONV",
        "PRECISION",
        "RALL",
        "RFILSZ",
        "RITER",
        "RMEMRY",
        "RSPEED",
        "RSTAT",
        "RTIMST",
        "/RUNST",
        "RWFRNT",
        "SARPLOT",
        "SHSD",
        "SLPPLOT",
        "SLSPLOT",
        "VCVFILL",
        "/OPT",
        "OPEQN",
        "OPFACT",
        "OPFRST",
        "OPGRAD",
        "OPKEEP",
        "OPLOOP",
        "OPPRNT",
        "OPRAND",
        "OPSUBP",
        "OPSWEEP",
        "OPTYPE",
        "OPUSER",
        "OPVAR",
        "OPADD",
        "OPCLR",
        "OPDEL",
        "OPMAKE",
        "OPSEL",
        "OPANL",
        "OPDATA",
        "OPRESU",
        "OPSAVE",
        "OPEXE",
        "OPLFA",
        "OPLGR",
        "OPLIST",
        "OPLSW",
        "OPRFA",
        "OPRGR",
        "OPRSW",
        "PILECALC",
        "PILEDISPSET",
        "PILEGEN",
        "PILELOAD",
        "PILEMASS",
        "PILERUN",
        "PILESEL",
        "PILESTIF",
        "PLVAROPT",
        "PRVAROPT",
        "TOCOMP",
        "TODEF",
        "TOFREQ",
        "TOTYPE",
        "TOVAR",
        "TOEXE",
        "TOLOOP",
        "TOGRAPH",
        "TOLIST",
        "TOPLOT",
        "TOPRINT",
        "TOSTAT",
        "TZAMESH",
        "TZDELE",
        "TZEGEN",
        "XVAROPT",
        "PGSAVE",
        "SOLCONTROL",
        "TOTAL",
        "VTGEOM",
        "VTREAL",
        "VTSTAT",
    )

    elafune = (
        "/ANUM",
        "AOFFST",
        "AOVLAP",
        "APLOT",
        "APPEND",
        "APTN",
        "ARCLEN",
        "ARCTRM",
        "AREAS",
        "AREFINE",
        "AREMESH",
        "AREVERSE",
        "AROTAT",
        "ARSCALE",
        "ARSYM",
        "ASBA",
        "ASBL",
        "ASBV",
        "ASBW",
        "ASCRES",
        "ASEL",
        "ASIFILE",
        "*ASK",
        "ASKIN",
        "ASLL",
        "ASLV",
        "ASOL",
        "/ASSIGN",
        "ASUB",
        "ASUM",
        "ATAN",
        "ATRAN",
        "ATYPE",
        "/AUTO",
        "AUTOTS",
        "/AUX2",
        "/AUX3",
        "/AUX12",
        "/AUX15",
        "AVPRIN",
        "AVRES",
        "AWAVE",
        "/AXLAB",
        "*AXPY",
        "/BATCH",
        "BCSOPTION",
        "BETAD",
        "BF",
        "BFA",
        "BFADELE",
        "BFALIST",
        "BFCUM",
        "BFDELE",
        "BFE",
        "BFECUM",
        "BFEDELE",
        "BFELIST",
        "BFESCAL",
        "BFINT",
        "BFK",
        "BFKDELE",
        "BFKLIST",
        "BFL",
        "BFLDELE",
        "BFLIST",
        "BFLLIST",
        "BFSCALE",
        "BFTRAN",
        "BFUNIF",
        "BFV",
        "BFVDELE",
        "BFVLIST",
        "BIOOPT",
        "BIOT",
        "BLC4",
        "BLC5",
        "BLOCK",
        "BOOL",
        "BOPTN",
        "BSAX",
        "BSMD",
        "BSM1",
        "BSM2",
        "BSPLIN",
        "BSS1",
        "BSS2",
        "BSTE",
        "BSTQ",
        "BTOL",
        "BUCOPT",
        "C",
        "CALC",
        "CAMPBELL",
        "CBDOF",
        "CBMD",
        "CBMX",
        "CBTE",
        "CBTMP",
        "CDOPT",
        "CDREAD",
        "CDWRITE",
        "CE",
        "CECHECK",
        "CECMOD",
        "CECYC",
        "CEDELE",
        "CEINTF",
        "CELIST",
        "CENTER",
        "CEQN",
        "CERIG",
        "CESGEN",
        "CFACT",
        "*CFCLOS",
        "*CFOPEN",
        "*CFWRITE",
        "/CFORMAT",
        "CGLOC",
        "CGOMGA",
        "CGROW",
        "CHECK",
        "CHKMSH",
        "CINT",
        "CIRCLE",
        "CISOL",
        "/CLABEL",
        "/CLEAR",
        "CLOCAL",
        "CLOG",
        "/CLOG",
        "CLRMSHLN",
        "CM",
        "CMACEL",
        "/CMAP",
        "CMATRIX",
        "CMDELE",
        "CMDOMEGA",
        "CMEDIT",
        "CMGRP",
        "CMLIST",
        "CMMOD",
        "CMOMEGA",
        "CMPLOT",
        "CMROTATE",
        "CMSEL",
        "CMSFILE",
        "CMSOPT",
        "CMWRITE",
        "CNCHECK",
        "CNKMOD",
        "CNTR",
        "CNVTOL",
        "/COLOR",
        "*COMP",
        "COMBINE",
        "COMPRESS",
        "CON4",
        "CONE",
        "/CONFIG",
        "CONJUG",
        "/CONTOUR",
        "/COPY",
        "CORIOLIS",
        "COUPLE",
        "COVAL",
        "CP",
        "CPCYC",
        "CPDELE",
        "CPINTF",
        "/CPLANE",
        "CPLGEN",
        "CPLIST",
        "CPMERGE",
        "CPNGEN",
        "CPSGEN",
        "CQC",
        "*CREATE",
        "CRPLIM",
        "CS",
        "CSCIR",
        "CSDELE",
        "CSKP",
        "CSLIST",
        "CSWPLA",
        "CSYS",
        "/CTYPE",
        "CURR2D",
        "CUTCONTROL",
        "/CVAL",
        "CVAR",
        "/CWD",
        "CYCCALC",
        "/CYCEXPAND",
        "CYCFILES",
        "CYCFREQ",
        "*CYCLE",
        "CYCLIC",
        "CYCOPT",
        "CYCPHASE",
        "CYCSPEC",
        "CYL4",
        "CYL5",
        "CYLIND",
        "CZDEL",
        "CZMESH",
        "D",
        "DA",
        "DADELE",
        "DALIST",
        "DAMORPH",
        "DATA",
        "DATADEF",
        "DCGOMG",
        "DCUM",
        "DCVSWP",
        "DDASPEC",
        "DDELE",
        "DDOPTION",
        "DEACT",
        "DEFINE",
        "*DEL",
        "DELETE",
        "/DELETE",
        "DELTIM",
        "DELTIME",
        "DEMORPH",
        "DERIV",
        "DESIZE",
        "DESOL",
        "DETAB",
        "/DEVDISP",
        "/DEVICE",
        "/DFLAB",
        "DFLX",
        "DFSWAVE",
        "DIG",
        "DIGIT",
        "*DIM",
        "/DIRECTORY",
        "DISPLAY",
        "/DIST",
        "DJ",
        "DJDELE",
        "DJLIST",
        "DK",
        "DKDELE",
        "DKLIST",
        "DL",
        "DLDELE",
        "DLIST",
        "DLLIST",
        "*DMAT",
        "DMOVE",
        "DMPEXT",
        "DMPOPTION",
        "DMPRAT",
        "DMPSTR",
        "DNSOL",
        "*DO",
        "DOF",
        "DOFSEL",
        "DOMEGA",
        "*DOT",
        "*DOWHILE",
        "DSCALE",
        "/DSCALE",
        "DSET",
        "DSPOPTION",
        "DSUM",
        "DSURF",
        "DSYM",
        "DSYS",
        "DTRAN",
        "DUMP",
        "/DV3D",
        "DVAL",
        "DVMORPH",
        "DYNOPT",
        "E",
        "EALIVE",
        "EDADAPT",
        "EDALE",
        "EDASMP",
        "EDBOUND",
        "EDBX",
        "EDBVIS",
        "EDCADAPT",
        "EDCGEN",
        "EDCLIST",
        "EDCMORE",
        "EDCNSTR",
        "EDCONTACT",
        "EDCPU",
        "EDCRB",
        "EDCSC",
        "EDCTS",
        "EDCURVE",
        "EDDAMP",
        "EDDBL",
        "EDDC",
        "EDDRELAX",
        "EDDUMP",
        "EDELE",
        "EDENERGY",
        "EDFPLOT",
        "EDGCALE",
        "/EDGE",
        "EDHGLS",
        "EDHIST",
        "EDHTIME",
        "EDINT",
        "EDIPART",
        "EDIS",
        "EDLCS",
        "EDLOAD",
        "EDMP",
        "EDNB",
        "EDNDTSD",
        "EDNROT",
        "EDOPT",
        "EDOUT",
        "EDPART",
        "EDPC",
        "EDPL",
        "EDPVEL",
        "EDRC",
        "EDRD",
        "EDREAD",
        "EDRI",
        "EDRST",
        "EDRUN",
        "EDSHELL",
        "EDSOLV",
        "EDSP",
        "EDSTART",
        "EDTERM",
        "EDTP",
        "EDVEL",
        "EDWELD",
        "EDWRITE",
        "EEXTRUDE",
        "/EFACET",
        "EGEN",
        "*EIGEN",
        "EINFIN",
        "EINTF",
        "EKILL",
        "ELBOW",
        "ELEM",
        "ELIST",
        "*ELSE",
        "*ELSEIF",
        "EMAGERR",
        "EMATWRITE",
        "EMF",
        "EMFT",
        "EMID",
        "EMIS",
        "EMODIF",
        "EMORE",
        "EMSYM",
        "EMTGEN",
        "EMUNIT",
        "EN",
        "*END",
        "*ENDDO",
        "*ENDIF",
        "ENDRELEASE",
        "ENERSOL",
        "ENGEN",
        "ENORM",
        "ENSYM",
        "EORIENT",
        "EPLOT",
        "EQSLV",
        "ERASE",
        "/ERASE",
        "EREAD",
        "EREFINE",
        "EREINF",
        "ERESX",
        "ERNORM",
        "ERRANG",
        "ESCHECK",
        "ESEL",
        "/ESHAPE",
        "ESIZE",
        "ESLA",
        "ESLL",
        "ESLN",
        "ESLV",
        "ESOL",
        "ESORT",
        "ESSOLV",
        "ESTIF",
        "ESURF",
        "ESYM",
        "ESYS",
        "ET",
        "ETABLE",
        "ETCHG",
        "ETCONTROL",
        "ETDELE",
        "ETLIST",
        "ETYPE",
        "EUSORT",
        "EWRITE",
        "*EXIT",
        "/EXIT",
        "EXP",
        "EXPAND",
        "/EXPAND",
        "EXPASS",
        "*EXPORT",
        "EXPROFILE",
        "EXPSOL",
        "EXTOPT",
        "EXTREM",
        "EXUNIT",
        "F",
        "/FACET",
        "FATIGUE",
        "FC",
        "FCCHECK",
        "FCDELE",
        "FCLIST",
        "FCUM",
        "FCTYP",
        "FDELE",
        "/FDELE",
        "FE",
        "FEBODY",
        "FECONS",
        "FEFOR",
        "FELIST",
        "FESURF",
        "*FFT",
        "FILE",
        "FILEAUX2",
        "FILEAUX3",
        "FILEDISP",
        "FILL",
        "FILLDATA",
        "/FILNAME",
        "FINISH",
        "FITEM",
        "FJ",
        "FJDELE",
        "FJLIST",
        "FK",
        "FKDELE",
        "FKLIST",
        "FL",
        "FLIST",
        "FLLIST",
        "FLST",
        "FLUXV",
        "FLUREAD",
        "FMAGBC",
        "FMAGSUM",
        "/FOCUS",
        "FOR2D",
        "FORCE",
        "FORM",
        "/FORMAT",
        "FP",
        "FPLIST",
        "*FREE",
        "FREQ",
        "FRQSCL",
        "FS",
        "FSCALE",
        "FSDELE",
        "FSLIST",
        "FSNODE",
        "FSPLOT",
        "FSSECT",
        "FSSPARM",
        "FSUM",
        "FTCALC",
        "FTRAN",
        "FTSIZE",
        "FTWRITE",
        "FTYPE",
        "FVMESH",
        "GAP",
        "GAPF",
        "GAUGE",
        "GCDEF",
        "GCGEN",
        "/GCMD",
        "/GCOLUMN",
        "GENOPT",
        "GEOM",
        "GEOMETRY",
        "*GET",
        "/GFILE",
        "/GFORMAT",
        "/GLINE",
        "/GMARKER",
        "GMATRIX",
        "GMFACE",
        "*GO",
        "/GO",
        "/GOLIST",
        "/GOPR",
        "GP",
        "GPDELE",
        "GPLIST",
        "GPLOT",
        "/GRAPHICS",
        "/GRESUME",
        "/GRID",
        "/GROPT",
        "GRP",
        "/GRTYP",
        "/GSAVE",
        "GSBDATA",
        "GSGDATA",
        "GSLIST",
        "GSSOL",
        "/GST",
        "GSUM",
        "/GTHK",
        "/GTYPE",
        "HARFRQ",
        "/HBC",
        "HBMAT",
        "/HEADER",
        "HELP",
        "HELPDISP",
        "HEMIOPT",
        "HFANG",
        "HFSYM",
        "HMAGSOLV",
        "HPGL",
        "HPTCREATE",
        "HPTDELETE",
        "HRCPLX",
        "HREXP",
        "HROPT",
        "HROCEAN",
        "HROUT",
        "IC",
        "ICDELE",
        "ICLIST",
        "/ICLWID",
        "/ICSCALE",
        "*IF",
        "IGESIN",
        "IGESOUT",
        "/IMAGE",
        "IMAGIN",
        "IMESH",
        "IMMED",
        "IMPD",
        "INISTATE",
        "*INIT",
        "/INPUT",
        "/INQUIRE",
        "INRES",
        "INRTIA",
        "INT1",
        "INTSRF",
        "IOPTN",
        "IRLF",
        "IRLIST",
        "*ITENGINE",
        "JPEG",
        "JSOL",
        "K",
        "KATT",
        "KBC",
        "KBETW",
        "KCALC",
        "KCENTER",
        "KCLEAR",
        "KDELE",
        "KDIST",
        "KEEP",
        "KESIZE",
        "KEYOPT",
        "KEYPTS",
        "KEYW",
        "KFILL",
        "KGEN",
        "KL",
        "KLIST",
        "KMESH",
        "KMODIF",
        "KMOVE",
        "KNODE",
        "KPLOT",
        "KPSCALE",
        "KREFINE",
        "KSCALE",
        "KSCON",
        "KSEL",
        "KSLL",
        "KSLN",
        "KSUM",
        "KSYMM",
        "KTRAN",
        "KUSE",
        "KWPAVE",
        "KWPLAN",
        "L",
        "L2ANG",
        "L2TAN",
        "LANG",
        "LARC",
        "/LARC",
        "LAREA",
        "LARGE",
        "LATT",
        "LAYER",
        "LAYERP26",
        "LAYLIST",
        "LAYPLOT",
        "LCABS",
        "LCASE",
        "LCCALC",
        "LCCAT",
        "LCDEF",
        "LCFACT",
        "LCFILE",
        "LCLEAR",
        "LCOMB",
        "LCOPER",
        "LCSEL",
        "LCSL",
        "LCSUM",
        "LCWRITE",
        "LCZERO",
        "LDELE",
        "LDIV",
        "LDRAG",
        "LDREAD",
        "LESIZE",
        "LEXTND",
        "LFILLT",
        "LFSURF",
        "LGEN",
        "LGLUE",
        "LGWRITE",
        "/LIGHT",
        "LINA",
        "LINE",
        "/LINE",
        "LINES",
        "LINL",
        "LINP",
        "LINV",
        "LIST",
        "*LIST",
        "LLIST",
        "LMATRIX",
        "LMESH",
        "LNSRCH",
        "LOCAL",
        "LOVLAP",
        "LPLOT",
        "LPTN",
        "LREFINE",
        "LREVERSE",
        "LROTAT",
        "LSBA",
        "*LSBAC",
        "LSBL",
        "LSBV",
        "LSBW",
        "LSCLEAR",
        "LSDELE",
        "*LSDUMP",
        "LSEL",
        "*LSENGINE",
        "*LSFACTOR",
        "LSLA",
        "LSLK",
        "LSOPER",
        "/LSPEC",
        "LSREAD",
        "*LSRESTORE",
        "LSSCALE",
        "LSSOLVE",
        "LSTR",
        "LSUM",
        "LSWRITE",
        "/LSYMBOL",
        "LSYMM",
        "LTAN",
        "LTRAN",
        "LUMPM",
        "LVSCALE",
        "LWPLAN",
        "M",
        "MADAPT",
        "MAGOPT",
        "MAGSOLV",
        "/MAIL",
        "MAP",
        "/MAP",
        "MAP2DTO3D",
        "MAPSOLVE",
        "MAPVAR",
        "MASTER",
        "MAT",
        "MATER",
        "MCHECK",
        "MDAMP",
        "MDELE",
        "MDPLOT",
        "MEMM",
        "/MENU",
        "MESHING",
        "MFANALYSIS",
        "MFBUCKET",
        "MFCALC",
        "MFCI",
        "MFCLEAR",
        "MFCMMAND",
        "MFCONV",
        "MFDTIME",
        "MFELEM",
        "MFEM",
        "MFEXTER",
        "MFFNAME",
        "MFFR",
        "MFIMPORT",
        "MFINTER",
        "MFITER",
        "MFLCOMM",
        "MFLIST",
        "MFMAP",
        "MFORDER",
        "MFOUTPUT",
        "*MFOURI",
        "MFPSIMUL",
        "MFRC",
        "MFRELAX",
        "MFRSTART",
        "MFSORDER",
        "MFSURFACE",
        "MFTIME",
        "MFTOL",
        "*MFUN",
        "MFVOLUME",
        "MFWRITE",
        "MGEN",
        "MIDTOL",
        "/MKDIR",
        "MLIST",
        "MMASS",
        "MMF",
        "MODCONT",
        "MODE",
        "MODIFY",
        "MODMSH",
        "MODSELOPTION",
        "MODOPT",
        "MONITOR",
        "*MOPER",
        "MOPT",
        "MORPH",
        "MOVE",
        "MP",
        "MPAMOD",
        "MPCHG",
        "MPCOPY",
        "MPDATA",
        "MPDELE",
        "MPDRES",
        "/MPLIB",
        "MPLIST",
        "MPPLOT",
        "MPREAD",
        "MPRINT",
        "MPTEMP",
        "MPTGEN",
        "MPTRES",
        "MPWRITE",
        "/MREP",
        "MSAVE",
        "*MSG",
        "MSHAPE",
        "MSHCOPY",
        "MSHKEY",
        "MSHMID",
        "MSHPATTERN",
        "MSOLVE",
        "/MSTART",
        "MSTOLE",
        "*MULT",
        "*MWRITE",
        "MXPAND",
        "N",
        "NANG",
        "NAXIS",
        "NCNV",
        "NDELE",
        "NDIST",
        "NDSURF",
        "NEQIT",
        "/NERR",
        "NFORCE",
        "NGEN",
        "NKPT",
        "NLADAPTIVE",
        "NLDIAG",
        "NLDPOST",
        "NLGEOM",
        "NLHIST",
        "NLIST",
        "NLMESH",
        "NLOG",
        "NLOPT",
        "NMODIF",
        "NOCOLOR",
        "NODES",
        "/NOERASE",
        "/NOLIST",
        "NOOFFSET",
        "NOORDER",
        "/NOPR",
        "NORA",
        "NORL",
        "/NORMAL",
        "NPLOT",
        "NPRINT",
        "NREAD",
        "NREFINE",
        "NRLSUM",
        "*NRM",
        "NROPT",
        "NROTAT",
        "NRRANG",
        "NSCALE",
        "NSEL",
        "NSLA",
        "NSLE",
        "NSLK",
        "NSLL",
        "NSLV",
        "NSMOOTH",
        "NSOL",
        "NSORT",
        "NSTORE",
        "NSUBST",
        "NSVR",
        "NSYM",
        "/NUMBER",
        "NUMCMP",
        "NUMEXP",
        "NUMMRG",
        "NUMOFF",
        "NUMSTR",
        "NUMVAR",
        "NUSORT",
        "NWPAVE",
        "NWPLAN",
        "NWRITE",
        "OCDATA",
        "OCDELETE",
        "OCLIST",
        "OCREAD",
        "OCTABLE",
        "OCTYPE",
        "OCZONE",
        "OMEGA",
        "OPERATE",
        "OPNCONTROL",
        "OUTAERO",
        "OUTOPT",
        "OUTPR",
        "/OUTPUT",
        "OUTRES",
        "OVCHECK",
        "PADELE",
        "/PAGE",
        "PAGET",
        "PAPUT",
        "PARESU",
        "PARTSEL",
        "PARRES",
        "PARSAV",
        "PASAVE",
        "PATH",
        "PAUSE",
        "/PBC",
        "/PBF",
        "PCALC",
        "PCGOPT",
        "PCIRC",
        "/PCIRCLE",
        "/PCOPY",
        "PCROSS",
        "PDANL",
        "PDCDF",
        "PDCFLD",
        "PDCLR",
        "PDCMAT",
        "PDCORR",
        "PDDMCS",
        "PDDOEL",
        "PDEF",
        "PDEXE",
        "PDHIST",
        "PDINQR",
        "PDLHS",
        "PDMETH",
        "PDOT",
        "PDPINV",
        "PDPLOT",
        "PDPROB",
        "PDRESU",
        "PDROPT",
        "/PDS",
        "PDSAVE",
        "PDSCAT",
        "PDSENS",
        "PDSHIS",
        "PDUSER",
        "PDVAR",
        "PDWRITE",
        "PERBC2D",
        "PERTURB",
        "PFACT",
        "PHYSICS",
        "PIVCHECK",
        "PLCAMP",
        "PLCFREQ",
        "PLCHIST",
        "PLCINT",
        "PLCPLX",
        "PLCRACK",
        "PLDISP",
        "PLESOL",
        "PLETAB",
        "PLFAR",
        "PLF2D",
        "PLGEOM",
        "PLLS",
        "PLMAP",
        "PLMC",
        "PLNEAR",
        "PLNSOL",
        "/PLOPTS",
        "PLORB",
        "PLOT",
        "PLOTTING",
        "PLPAGM",
        "PLPATH",
        "PLSECT",
        "PLST",
        "PLTIME",
        "PLTRAC",
        "PLVAR",
        "PLVECT",
        "PLZZ",
        "/PMACRO",
        "PMAP",
        "PMGTRAN",
        "PMLOPT",
        "PMLSIZE",
        "/PMORE",
        "PNGR",
        "/PNUM",
        "POINT",
        "POLY",
        "/POLYGON",
        "/POST1",
        "/POST26",
        "POWERH",
        "PPATH",
        "PRANGE",
        "PRAS",
        "PRCAMP",
        "PRCINT",
        "PRCPLX",
        "PRED",
        "PRENERGY",
        "/PREP7",
        "PRERR",
        "PRESOL",
        "PRETAB",
        "PRFAR",
        "PRI2",
        "PRIM",
        "PRINT",
        "*PRINT",
        "PRISM",
        "PRITER",
        "PRJSOL",
        "PRNEAR",
        "PRNLD",
        "PRNSOL",
        "PROD",
        "PRORB",
        "PRPATH",
        "PRRFOR",
        "PRRSOL",
        "PRSCONTROL",
        "PRSECT",
        "PRTIME",
        "PRVAR",
        "PRVECT",
        "PSCONTROL",
        "PSCR",
        "PSDCOM",
        "PSDFRQ",
        "PSDGRAPH",
        "PSDRES",
        "PSDSPL",
        "PSDUNIT",
        "PSDVAL",
        "PSDWAV",
        "/PSEARCH",
        "PSEL",
        "/PSF",
        "PSMAT",
        "PSMESH",
        "/PSPEC",
        "/PSTATUS",
        "PSTRES",
        "/PSYMB",
        "PTR",
        "PTXY",
        "PVECT",
        "/PWEDGE",
        "QDVAL",
        "QRDOPT",
        "QSOPT",
        "QUAD",
        "/QUIT",
        "QUOT",
        "R",
        "RACE",
        "RADOPT",
        "RAPPND",
        "RATE",
        "/RATIO",
        "RBE3",
        "RCON",
        "RCYC",
        "RDEC",
        "RDELE",
        "READ",
        "REAL",
        "REALVAR",
        "RECTNG",
        "REMESH",
        "/RENAME",
        "REORDER",
        "*REPEAT",
        "/REPLOT",
        "RESCOMBINE",
        "RESCONTROL",
        "RESET",
        "/RESET",
        "RESP",
        "RESUME",
        "RESVEC",
        "RESWRITE",
        "*RETURN",
        "REXPORT",
        "REZONE",
        "RFORCE",
        "/RGB",
        "RIGID",
        "RIGRESP",
        "RIMPORT",
        "RLIST",
        "RMALIST",
        "RMANL",
        "RMASTER",
        "RMCAP",
        "RMCLIST",
        "/RMDIR",
        "RMFLVEC",
        "RMLVSCALE",
        "RMMLIST",
        "RMMRANGE",
        "RMMSELECT",
        "RMNDISP",
        "RMNEVEC",
        "RMODIF",
        "RMORE",
        "RMPORDER",
        "RMRESUME",
        "RMRGENERATE",
        "RMROPTIONS",
        "RMRPLOT",
        "RMRSTATUS",
        "RMSAVE",
        "RMSMPLE",
        "RMUSE",
        "RMXPORT",
        "ROCK",
        "ROSE",
        "RPOLY",
        "RPR4",
        "RPRISM",
        "RPSD",
        "RSFIT",
        "RSOPT",
        "RSPLIT",
        "RSPLOT",
        "RSPRNT",
        "RSSIMS",
        "RSTMAC",
        "RSTOFF",
        "RSURF",
        "RSYMM",
        "RSYS",
        "RTHICK",
        "SABS",
        "SADD",
        "SALLOW",
        "SAVE",
        "SBCLIST",
        "SBCTRAN",
        "SDELETE",
        "SE",
        "SECCONTROL",
        "SECDATA",
        "SECFUNCTION",
        "SECJOINT",
        "/SECLIB",
        "SECLOCK",
        "SECMODIF",
        "SECNUM",
        "SECOFFSET",
        "SECPLOT",
        "SECREAD",
        "SECSTOP",
        "SECTYPE",
        "SECWRITE",
        "SED",
        "SEDLIST",
        "SEEXP",
        "/SEG",
        "SEGEN",
        "SELIST",
        "SELM",
        "SELTOL",
        "SENERGY",
        "SEOPT",
        "SESYMM",
        "*SET",
        "SET",
        "SETFGAP",
        "SETRAN",
        "SEXP",
        "SF",
        "SFA",
        "SFACT",
        "SFADELE",
        "SFALIST",
        "SFBEAM",
        "SFCALC",
        "SFCUM",
        "SFDELE",
        "SFE",
        "SFEDELE",
        "SFELIST",
        "SFFUN",
        "SFGRAD",
        "SFL",
        "SFLDELE",
        "SFLEX",
        "SFLIST",
        "SFLLIST",
        "SFSCALE",
        "SFTRAN",
        "/SHADE",
        "SHELL",
        "/SHOW",
        "/SHOWDISP",
        "SHPP",
        "/SHRINK",
        "SLIST",
        "SLOAD",
        "SMALL",
        "*SMAT",
        "SMAX",
        "/SMBC",
        "SMBODY",
        "SMCONS",
        "SMFOR",
        "SMIN",
        "SMOOTH",
        "SMRTSIZE",
        "SMSURF",
        "SMULT",
        "SNOPTION",
        "SOLU",
        "/SOLU",
        "SOLUOPT",
        "SOLVE",
        "SORT",
        "SOURCE",
        "SPACE",
        "SPCNOD",
        "SPCTEMP",
        "SPDAMP",
        "SPEC",
        "SPFREQ",
        "SPGRAPH",
        "SPH4",
        "SPH5",
        "SPHERE",
        "SPLINE",
        "SPLOT",
        "SPMWRITE",
        "SPOINT",
        "SPOPT",
        "SPREAD",
        "SPTOPT",
        "SPOWER",
        "SPUNIT",
        "SPVAL",
        "SQRT",
        "*SREAD",
        "SRSS",
        "SSBT",
        "/SSCALE",
        "SSLN",
        "SSMT",
        "SSPA",
        "SSPB",
        "SSPD",
        "SSPE",
        "SSPM",
        "SSUM",
        "SSTATE",
        "STABILIZE",
        "STAOPT",
        "STAT",
        "*STATUS",
        "/STATUS",
        "STEF",
        "STORE",
        "SUBOPT",
        "SUBSET",
        "SUCALC",
        "SUCR",
        "SUDEL",
        "SUEVAL",
        "SUGET",
        "SUMAP",
        "SUMTYPE",
        "SUPL",
        "SUPR",
        "SURESU",
        "SUSAVE",
        "SUSEL",
        "SUVECT",
        "SV",
        "SVPLOT",
        "SVTYP",
        "SWADD",
        "SWDEL",
        "SWGEN",
        "SWLIST",
        "SYNCHRO",
        "/SYP",
        "/SYS",
        "TALLOW",
        "TARGET",
        "*TAXIS",
        "TB",
        "TBCOPY",
        "TBDATA",
        "TBDELE",
        "TBEO",
        "TBIN",
        "TBFIELD",
        "TBFT",
        "TBLE",
        "TBLIST",
        "TBMODIF",
        "TBPLOT",
        "TBPT",
        "TBTEMP",
        "TCHG",
        "/TEE",
        "TERM",
        "THEXPAND",
        "THOPT",
        "TIFF",
        "TIME",
        "TIMERANGE",
        "TIMINT",
        "TIMP",
        "TINTP",
        "/TLABEL",
        "TOFFST",
        "*TOPER",
        "TORQ2D",
        "TORQC2D",
        "TORQSUM",
        "TORUS",
        "TRANS",
        "TRANSFER",
        "*TREAD",
        "TREF",
        "/TRIAD",
        "/TRLCY",
        "TRNOPT",
        "TRPDEL",
        "TRPLIS",
        "TRPOIN",
        "TRTIME",
        "TSHAP",
        "/TSPEC",
        "TSRES",
        "TUNIF",
        "TVAR",
        "/TXTRE",
        "/TYPE",
        "TYPE",
        "/UCMD",
        "/UDOC",
        "/UI",
        "UIMP",
        "/UIS",
        "*ULIB",
        "/UPF",
        "UNDELETE",
        "UNDO",
        "/UNITS",
        "UNPAUSE",
        "UPCOORD",
        "UPGEOM",
        "*USE",
        "/USER",
        "USRCAL",
        "USRDOF",
        "USRELEM",
        "V",
        "V2DOPT",
        "VA",
        "*VABS",
        "VADD",
        "VARDEL",
        "VARNAM",
        "VATT",
        "VCLEAR",
        "*VCOL",
        "/VCONE",
        "VCROSS",
        "*VCUM",
        "VDDAM",
        "VDELE",
        "VDGL",
        "VDOT",
        "VDRAG",
        "*VEC",
        "*VEDIT",
        "VEORIENT",
        "VEXT",
        "*VFACT",
        "*VFILL",
        "VFOPT",
        "VFQUERY",
        "VFSM",
        "*VFUN",
        "VGEN",
        "*VGET",
        "VGET",
        "VGLUE",
        "/VIEW",
        "VIMP",
        "VINP",
        "VINV",
        "*VITRP",
        "*VLEN",
        "VLIST",
        "VLSCALE",
        "*VMASK",
        "VMESH",
        "VOFFST",
        "VOLUMES",
    )

    # list of in-built () functions
    elafunf = (
        "NX()",
        "NY()",
        "NZ()",
        "KX()",
        "KY()",
        "KZ()",
        "LX()",
        "LY()",
        "LZ()",
        "LSX()",
        "LSY()",
        "LSZ()",
        "NODE()",
        "KP()",
        "DISTND()",
        "DISTKP()",
        "DISTEN()",
        "ANGLEN()",
        "ANGLEK()",
        "NNEAR()",
        "KNEAR()",
        "ENEARN()",
        "AREAND()",
        "AREAKP()",
        "ARNODE()",
        "NORMNX()",
        "NORMNY()",
        "NORMNZ()",
        "NORMKX()",
        "NORMKY()",
        "NORMKZ()",
        "ENEXTN()",
        "NELEM()",
        "NODEDOF()",
        "ELADJ()",
        "NDFACE()",
        "NMFACE()",
        "ARFACE()",
        "UX()",
        "UY()",
        "UZ()",
        "ROTX()",
        "ROTY()",
        "ROTZ()",
        "TEMP()",
        "PRES()",
        "VX()",
        "VY()",
        "VZ()",
        "ENKE()",
        "ENDS()",
        "VOLT()",
        "MAG()",
        "AX()",
        "AY()",
        "AZ()",
        "VIRTINQR()",
        "KWGET()",
        "VALCHR()",
        "VALHEX()",
        "CHRHEX()",
        "STRFILL()",
        "STRCOMP()",
        "STRPOS()",
        "STRLENG()",
        "UPCASE()",
        "LWCASE()",
        "JOIN()",
        "SPLIT()",
        "ABS()",
        "SIGN()",
        "CXABS()",
        "EXP()",
        "LOG()",
        "LOG10()",
        "SQRT()",
        "NINT()",
        "MOD()",
        "RAND()",
        "GDIS()",
        "SIN()",
        "COS()",
        "TAN()",
        "SINH()",
        "COSH()",
        "TANH()",
        "ASIN()",
        "ACOS()",
        "ATAN()",
        "ATAN2()",
    )

    elafung = (
        "NSEL()",
        "ESEL()",
        "KSEL()",
        "LSEL()",
        "ASEL()",
        "VSEL()",
        "NDNEXT()",
        "ELNEXT()",
        "KPNEXT()",
        "LSNEXT()",
        "ARNEXT()",
        "VLNEXT()",
        "CENTRX()",
        "CENTRY()",
        "CENTRZ()",
    )

    elafunh = (
        "~CAT5IN",
        "~CATIAIN",
        "~PARAIN",
        "~PROEIN",
        "~SATIN",
        "~UGIN",
        "A",
        "AADD",
        "AATT",
        "ABEXTRACT",
        "*ABBR",
        "ABBRES",
        "ABBSAV",
        "ABS",
        "ACCAT",
        "ACCOPTION",
        "ACEL",
        "ACLEAR",
        "ADAMS",
        "ADAPT",
        "ADD",
        "ADDAM",
        "ADELE",
        "ADGL",
        "ADRAG",
        "AESIZE",
        "AFILLT",
        "AFLIST",
        "AFSURF",
        "*AFUN",
        "AGEN",
        "AGLUE",
        "AINA",
        "AINP",
        "AINV",
        "AL",
        "ALIST",
        "ALLSEL",
        "ALPHAD",
        "AMAP",
        "AMESH",
        "/AN3D",
        "ANCNTR",
        "ANCUT",
        "ANCYC",
        "ANDATA",
        "ANDSCL",
        "ANDYNA",
        "/ANFILE",
        "ANFLOW",
        "/ANGLE",
        "ANHARM",
        "ANIM",
        "ANISOS",
        "ANMODE",
        "ANMRES",
        "/ANNOT",
        "ANORM",
        "ANPRES",
        "ANSOL",
        "ANSTOAQWA",
        "ANSTOASAS",
        "ANTIME",
        "ANTYPE",
    )

    special = ("/COM", "/TITLE", "STITLE")

    elements = (
        "SOLID5",
        "LINK11",
        "PLANE13",
        "COMBIN14",
        "MASS2",
        "PLANE25",
        "MATRIX27",
        "FLUID29",
        "FLUID30",
        "LINK31",
        "LINK33",
        "LINK34",
        "PLANE35",
        "SOURC36",
        "COMBIN37",
        "FLUID38",
        "COMBIN39",
        "COMBIN40",
        "INFIN47",
        "MATRIX50",
        "PLANE55",
        "SHELL61",
        "LINK68",
        "SOLID70",
        "MASS71",
        "PLANE75",
        "PLANE77",
        "PLANE78",
        "PLANE83",
        "SOLID87",
        "SOLID90",
        "CIRCU94",
        "SOLID96",
        "SOLID98",
        "INFIN110",
        "INFIN111",
        "FLUID116",
        "PLANE121",
        "SOLID122",
        "SOLID123",
        "CIRCU124",
        "CIRCU125",
        "TRANS126",
        "FLUID129",
        "FLUID130",
        "SHELL131",
        "SHELL132",
        "FLUID136",
        "FLUID138",
        "FLUID139",
        "SURF151",
        "SURF152",
        "SURF153",
        "SURF154",
        "SURF155",
        "SURF156",
        "SHELL157",
        "SURF159",
        "TARGE169",
        "TARGE170",
        "CONTA172",
        "CONTA174",
        "CONTA175",
        "CONTA177",
        "CONTA178",
        "PRETS179",
        "LINK180",
        "SHELL181",
        "PLANE182",
        "PLANE183",
        "MPC184",
        "SOLID185",
        "SOLID186",
        "SOLID187",
        "BEAM188",
        "BEAM189",
        "SOLSH190",
        "INTER192",
        "INTER193",
        "INTER194",
        "INTER195",
        "MESH200",
        "FOLLW201",
        "INTER202",
        "INTER203",
        "INTER204",
        "INTER205",
        "SHELL208",
        "SHELL209",
        "CPT212",
        "CPT213",
        "COMBI214",
        "CPT215",
        "CPT216",
        "CPT217",
        "FLUID218",
        "FLUID220",
        "FLUID221",
        "PLANE222",
        "PLANE223",
        "SOLID225",
        "SOLID226",
        "SOLID227",
        "PLANE230",
        "SOLID231",
        "SOLID232",
        "PLANE233",
        "SOLID236",
        "SOLID237",
        "PLANE238",
        "SOLID239",
        "SOLID240",
        "HSFLD241",
        "HSFLD242",
        "COMBI250",
        "SURF251",
        "SURF252",
        "INFIN257",
        "REINF263",
        "REINF264",
        "REINF265",
        "SOLID272",
        "SOLID273",
        "SOLID278",
        "SOLID279",
        "CABLE280",
        "SHELL281",
        "SOLID285",
        "PIPE288",
        "PIPE289",
        "ELBOW290",
        "SOLID291",
        "PLANE292",
        "PLANE293",
        "USER300",
    )

    tokens = {
        "root": [
            (r"[^\S\n]+", Whitespace),
            (words((elafunb + elafunc + elafund + elafune + elafunh + special), suffix=r"\b"), Keyword, "non-keyword"),
            default("non-keyword"),
        ],
        "non-keyword": [
            (r"!.*\n", Comment, "#pop"),
            (r"%.*?%", Escape),
            include("strings"),
            include("nums"),
            (words((elafunf + elafung), suffix=r"\b"), Name.Builtin),
            (words((elements), suffix=r"\b"), Name.Property),
            include("core"),
            (r"AR[0-9]+", Name.Variable.Instance),
            (r"[a-z_][a-z0-9_]*", Name.Variable),
            (r"\n+", Whitespace, "#pop"),
            (r"[^\S\n]+", Whitespace),
        ],
        "core": [
            # Operators
            (r"(\*\*|\*|\+|-|\/|<|>|<=|>=|==|\/=|=|\(|\))", Operator),
            (r"/EOF", Generic.Emph),
            (r"[\.(),:&;]", Punctuation),
        ],
        "strings": [
            (r'(?s)"(\\\\|\\[0-7]+|\\.|[^"\\])*"', String.Double),
            (r"(?s)'(\\\\|\\[0-7]+|\\.|[^'\\])*'", String.Single),
            (r"[$%]", String.Symbol),
        ],
        "nums": [
            (r"[+-]?\d*\.\d+([efEF][-+]?\d+)?", Number.Float),  # with dot
            (r"([+-]?\d+([efEF][-+]?\d+))", Number.Float),  # With scientific notation
            (r"\b\d+(?![.ef])", Number.Integer),  # integer simple
        ],
    }
