tp.js 3.0 KB

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