/*
Language: TP
Author: Jay Strybis <jay.strybis@gmail.com>
Description: FANUC TP programming language (TPP).
*/
function tp(hljs) {
    const TPID = {
        className: 'number',
        begin: '[1-9][0-9]*', /* no leading zeros */
        relevance: 0
    };
    const TPLABEL = {
        className: 'symbol',
        begin: ':[^\\]]+'
    };
    const TPDATA = {
        className: 'built_in',
        begin: '(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER|'
            + 'TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\[',
        end: '\\]',
        contains: [
            'self',
            TPID,
            TPLABEL
        ]
    };
    const TPIO = {
        className: 'built_in',
        begin: '(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\[',
        end: '\\]',
        contains: [
            'self',
            TPID,
            hljs.QUOTE_STRING_MODE, /* for pos section at bottom */
            TPLABEL
        ]
    };
    const KEYWORDS = [
        "ABORT",
        "ACC",
        "ADJUST",
        "AND",
        "AP_LD",
        "BREAK",
        "CALL",
        "CNT",
        "COL",
        "CONDITION",
        "CONFIG",
        "DA",
        "DB",
        "DIV",
        "DETECT",
        "ELSE",
        "END",
        "ENDFOR",
        "ERR_NUM",
        "ERROR_PROG",
        "FINE",
        "FOR",
        "GP",
        "GUARD",
        "INC",
        "IF",
        "JMP",
        "LINEAR_MAX_SPEED",
        "LOCK",
        "MOD",
        "MONITOR",
        "OFFSET",
        "Offset",
        "OR",
        "OVERRIDE",
        "PAUSE",
        "PREG",
        "PTH",
        "RT_LD",
        "RUN",
        "SELECT",
        "SKIP",
        "Skip",
        "TA",
        "TB",
        "TO",
        "TOOL_OFFSET",
        "Tool_Offset",
        "UF",
        "UT",
        "UFRAME_NUM",
        "UTOOL_NUM",
        "UNLOCK",
        "WAIT",
        "X",
        "Y",
        "Z",
        "W",
        "P",
        "R",
        "STRLEN",
        "SUBSTR",
        "FINDSTR",
        "VOFFSET",
        "PROG",
        "ATTR",
        "MN",
        "POS"
    ];
    const LITERALS = [
        "ON",
        "OFF",
        "max_speed",
        "LPOS",
        "JPOS",
        "ENABLE",
        "DISABLE",
        "START",
        "STOP",
        "RESET"
    ];
    return {
        name: 'TP',
        keywords: {
            keyword: KEYWORDS,
            literal: LITERALS
        },
        contains: [
            TPDATA,
            TPIO,
            {
                className: 'keyword',
                begin: '/(PROG|ATTR|MN|POS|END)\\b'
            },
            {
                /* this is for cases like ,CALL */
                className: 'keyword',
                begin: '(CALL|RUN|POINT_LOGIC|LBL)\\b'
            },
            {
                /* this is for cases like CNT100 where the default lexemes do not
                 * separate the keyword and the number */
                className: 'keyword',
                begin: '\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)'
            },
            {
                /* to catch numbers that do not have a word boundary on the left */
                className: 'number',
                begin: '\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\b',
                relevance: 0
            },
            hljs.COMMENT('//', '[;$]'),
            hljs.COMMENT('!', '[;$]'),
            hljs.COMMENT('--eg:', '$'),
            hljs.QUOTE_STRING_MODE,
            {
                className: 'string',
                begin: '\'',
                end: '\''
            },
            hljs.C_NUMBER_MODE,
            {
                className: 'variable',
                begin: '\\$[A-Za-z0-9_]+'
            }
        ]
    };
}
export { tp as default };
//# sourceMappingURL=tp.js.map