lasso.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /*
  2. Language: Lasso
  3. Author: Eric Knibbe <eric@lassosoft.com>
  4. Description: Lasso is a language and server platform for database-driven web applications. This definition handles Lasso 9 syntax and LassoScript for Lasso 8.6 and earlier.
  5. Website: http://www.lassosoft.com/What-Is-Lasso
  6. */
  7. function lasso(hljs) {
  8. var LASSO_IDENT_RE = '[a-zA-Z_][\\w.]*';
  9. var LASSO_ANGLE_RE = '<\\?(lasso(script)?|=)';
  10. var LASSO_CLOSE_RE = '\\]|\\?>';
  11. var LASSO_KEYWORDS = {
  12. $pattern: LASSO_IDENT_RE + '|&[lg]t;',
  13. literal:
  14. 'true false none minimal full all void and or not ' +
  15. 'bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft',
  16. built_in:
  17. 'array date decimal duration integer map pair string tag xml null ' +
  18. 'boolean bytes keyword list locale queue set stack staticarray ' +
  19. 'local var variable global data self inherited currentcapture givenblock',
  20. keyword:
  21. 'cache database_names database_schemanames database_tablenames ' +
  22. 'define_tag define_type email_batch encode_set html_comment handle ' +
  23. 'handle_error header if inline iterate ljax_target link ' +
  24. 'link_currentaction link_currentgroup link_currentrecord link_detail ' +
  25. 'link_firstgroup link_firstrecord link_lastgroup link_lastrecord ' +
  26. 'link_nextgroup link_nextrecord link_prevgroup link_prevrecord log ' +
  27. 'loop namespace_using output_none portal private protect records ' +
  28. 'referer referrer repeating resultset rows search_args ' +
  29. 'search_arguments select sort_args sort_arguments thread_atomic ' +
  30. 'value_list while abort case else fail_if fail_ifnot fail if_empty ' +
  31. 'if_false if_null if_true loop_abort loop_continue loop_count params ' +
  32. 'params_up return return_value run_children soap_definetag ' +
  33. 'soap_lastrequest soap_lastresponse tag_name ascending average by ' +
  34. 'define descending do equals frozen group handle_failure import in ' +
  35. 'into join let match max min on order parent protected provide public ' +
  36. 'require returnhome skip split_thread sum take thread to trait type ' +
  37. 'where with yield yieldhome'
  38. };
  39. var HTML_COMMENT = hljs.COMMENT(
  40. '<!--',
  41. '-->',
  42. {
  43. relevance: 0
  44. }
  45. );
  46. var LASSO_NOPROCESS = {
  47. className: 'meta',
  48. begin: '\\[noprocess\\]',
  49. starts: {
  50. end: '\\[/noprocess\\]',
  51. returnEnd: true,
  52. contains: [HTML_COMMENT]
  53. }
  54. };
  55. var LASSO_START = {
  56. className: 'meta',
  57. begin: '\\[/noprocess|' + LASSO_ANGLE_RE
  58. };
  59. var LASSO_DATAMEMBER = {
  60. className: 'symbol',
  61. begin: '\'' + LASSO_IDENT_RE + '\''
  62. };
  63. var LASSO_CODE = [
  64. hljs.C_LINE_COMMENT_MODE,
  65. hljs.C_BLOCK_COMMENT_MODE,
  66. hljs.inherit(hljs.C_NUMBER_MODE, {begin: hljs.C_NUMBER_RE + '|(-?infinity|NaN)\\b'}),
  67. hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),
  68. hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
  69. {
  70. className: 'string',
  71. begin: '`', end: '`'
  72. },
  73. { // variables
  74. variants: [
  75. {
  76. begin: '[#$]' + LASSO_IDENT_RE
  77. },
  78. {
  79. begin: '#', end: '\\d+',
  80. illegal: '\\W'
  81. }
  82. ]
  83. },
  84. {
  85. className: 'type',
  86. begin: '::\\s*', end: LASSO_IDENT_RE,
  87. illegal: '\\W'
  88. },
  89. {
  90. className: 'params',
  91. variants: [
  92. {
  93. begin: '-(?!infinity)' + LASSO_IDENT_RE,
  94. relevance: 0
  95. },
  96. {
  97. begin: '(\\.\\.\\.)'
  98. }
  99. ]
  100. },
  101. {
  102. begin: /(->|\.)\s*/,
  103. relevance: 0,
  104. contains: [LASSO_DATAMEMBER]
  105. },
  106. {
  107. className: 'class',
  108. beginKeywords: 'define',
  109. returnEnd: true, end: '\\(|=>',
  110. contains: [
  111. hljs.inherit(hljs.TITLE_MODE, {begin: LASSO_IDENT_RE + '(=(?!>))?|[-+*/%](?!>)'})
  112. ]
  113. }
  114. ];
  115. return {
  116. name: 'Lasso',
  117. aliases: ['ls', 'lassoscript'],
  118. case_insensitive: true,
  119. keywords: LASSO_KEYWORDS,
  120. contains: [
  121. {
  122. className: 'meta',
  123. begin: LASSO_CLOSE_RE,
  124. relevance: 0,
  125. starts: { // markup
  126. end: '\\[|' + LASSO_ANGLE_RE,
  127. returnEnd: true,
  128. relevance: 0,
  129. contains: [HTML_COMMENT]
  130. }
  131. },
  132. LASSO_NOPROCESS,
  133. LASSO_START,
  134. {
  135. className: 'meta',
  136. begin: '\\[no_square_brackets',
  137. starts: {
  138. end: '\\[/no_square_brackets\\]', // not implemented in the language
  139. keywords: LASSO_KEYWORDS,
  140. contains: [
  141. {
  142. className: 'meta',
  143. begin: LASSO_CLOSE_RE,
  144. relevance: 0,
  145. starts: {
  146. end: '\\[noprocess\\]|' + LASSO_ANGLE_RE,
  147. returnEnd: true,
  148. contains: [HTML_COMMENT]
  149. }
  150. },
  151. LASSO_NOPROCESS,
  152. LASSO_START
  153. ].concat(LASSO_CODE)
  154. }
  155. },
  156. {
  157. className: 'meta',
  158. begin: '\\[',
  159. relevance: 0
  160. },
  161. {
  162. className: 'meta',
  163. begin: '^#!', end:'lasso9$',
  164. relevance: 10
  165. }
  166. ].concat(LASSO_CODE)
  167. };
  168. }
  169. module.exports = lasso;