UNPKG

3.07 kBJavaScriptView Raw
1/*
2Language: TP
3Author: Jay Strybis <jay.strybis@gmail.com>
4Description: FANUC TP programming language (TPP).
5*/
6
7function tp(hljs) {
8 const TPID = {
9 className: 'number',
10 begin: '[1-9][0-9]*', /* no leading zeros */
11 relevance: 0
12 };
13 const TPLABEL = {
14 className: 'symbol',
15 begin: ':[^\\]]+'
16 };
17 const TPDATA = {
18 className: 'built_in',
19 begin: '(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER|' +
20 'TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\[',
21 end: '\\]',
22 contains: [
23 'self',
24 TPID,
25 TPLABEL
26 ]
27 };
28 const TPIO = {
29 className: 'built_in',
30 begin: '(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\[',
31 end: '\\]',
32 contains: [
33 'self',
34 TPID,
35 hljs.QUOTE_STRING_MODE, /* for pos section at bottom */
36 TPLABEL
37 ]
38 };
39
40 const KEYWORDS = [
41 "ABORT",
42 "ACC",
43 "ADJUST",
44 "AND",
45 "AP_LD",
46 "BREAK",
47 "CALL",
48 "CNT",
49 "COL",
50 "CONDITION",
51 "CONFIG",
52 "DA",
53 "DB",
54 "DIV",
55 "DETECT",
56 "ELSE",
57 "END",
58 "ENDFOR",
59 "ERR_NUM",
60 "ERROR_PROG",
61 "FINE",
62 "FOR",
63 "GP",
64 "GUARD",
65 "INC",
66 "IF",
67 "JMP",
68 "LINEAR_MAX_SPEED",
69 "LOCK",
70 "MOD",
71 "MONITOR",
72 "OFFSET",
73 "Offset",
74 "OR",
75 "OVERRIDE",
76 "PAUSE",
77 "PREG",
78 "PTH",
79 "RT_LD",
80 "RUN",
81 "SELECT",
82 "SKIP",
83 "Skip",
84 "TA",
85 "TB",
86 "TO",
87 "TOOL_OFFSET",
88 "Tool_Offset",
89 "UF",
90 "UT",
91 "UFRAME_NUM",
92 "UTOOL_NUM",
93 "UNLOCK",
94 "WAIT",
95 "X",
96 "Y",
97 "Z",
98 "W",
99 "P",
100 "R",
101 "STRLEN",
102 "SUBSTR",
103 "FINDSTR",
104 "VOFFSET",
105 "PROG",
106 "ATTR",
107 "MN",
108 "POS"
109 ];
110 const LITERALS = [
111 "ON",
112 "OFF",
113 "max_speed",
114 "LPOS",
115 "JPOS",
116 "ENABLE",
117 "DISABLE",
118 "START",
119 "STOP",
120 "RESET"
121 ];
122
123 return {
124 name: 'TP',
125 keywords: {
126 keyword: KEYWORDS,
127 literal: LITERALS
128 },
129 contains: [
130 TPDATA,
131 TPIO,
132 {
133 className: 'keyword',
134 begin: '/(PROG|ATTR|MN|POS|END)\\b'
135 },
136 {
137 /* this is for cases like ,CALL */
138 className: 'keyword',
139 begin: '(CALL|RUN|POINT_LOGIC|LBL)\\b'
140 },
141 {
142 /* this is for cases like CNT100 where the default lexemes do not
143 * separate the keyword and the number */
144 className: 'keyword',
145 begin: '\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)'
146 },
147 {
148 /* to catch numbers that do not have a word boundary on the left */
149 className: 'number',
150 begin: '\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\b',
151 relevance: 0
152 },
153 hljs.COMMENT('//', '[;$]'),
154 hljs.COMMENT('!', '[;$]'),
155 hljs.COMMENT('--eg:', '$'),
156 hljs.QUOTE_STRING_MODE,
157 {
158 className: 'string',
159 begin: '\'',
160 end: '\''
161 },
162 hljs.C_NUMBER_MODE,
163 {
164 className: 'variable',
165 begin: '\\$[A-Za-z0-9_]+'
166 }
167 ]
168 };
169}
170
171export { tp as default };