lasso.js 4.9 KB

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