xquery.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. Language: XQuery
  3. Author: Dirk Kirsten <[email protected]>
  4. Description: Supports XQuery 3.1 including XQuery Update 3, so also XPath (as it is a superset)
  5. Category: functional
  6. */
  7. function(hljs) {
  8. var KEYWORDS = 'for let if while then else return where group by xquery encoding version' +
  9. 'module namespace boundary-space preserve strip default collation base-uri ordering' +
  10. 'copy-namespaces order declare import schema namespace function option in allowing empty' +
  11. 'at tumbling window sliding window start when only end when previous next stable ascending' +
  12. 'descending empty greatest least some every satisfies switch case typeswitch try catch and' +
  13. 'or to union intersect instance of treat as castable cast map array delete insert into' +
  14. 'replace value rename copy modify update';
  15. var LITERAL = 'false true xs:string xs:integer element item xs:date xs:datetime xs:float xs:double xs:decimal QName xs:anyURI xs:long xs:int xs:short xs:byte attribute';
  16. var VAR = {
  17. begin: /\$[a-zA-Z0-9\-]+/
  18. };
  19. var NUMBER = {
  20. className: 'number',
  21. begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
  22. relevance: 0
  23. };
  24. var STRING = {
  25. className: 'string',
  26. variants: [
  27. {begin: /"/, end: /"/, contains: [{begin: /""/, relevance: 0}]},
  28. {begin: /'/, end: /'/, contains: [{begin: /''/, relevance: 0}]}
  29. ]
  30. };
  31. var ANNOTATION = {
  32. className: 'meta',
  33. begin: '%\\w+'
  34. };
  35. var COMMENT = {
  36. className: 'comment',
  37. begin: '\\(:', end: ':\\)',
  38. relevance: 10,
  39. contains: [
  40. {
  41. className: 'doctag', begin: '@\\w+'
  42. }
  43. ]
  44. };
  45. var METHOD = {
  46. begin: '{', end: '}'
  47. };
  48. var CONTAINS = [
  49. VAR,
  50. STRING,
  51. NUMBER,
  52. COMMENT,
  53. ANNOTATION,
  54. METHOD
  55. ];
  56. METHOD.contains = CONTAINS;
  57. return {
  58. aliases: ['xpath', 'xq'],
  59. case_insensitive: false,
  60. lexemes: /[a-zA-Z\$][a-zA-Z0-9_:\-]*/,
  61. illegal: /(proc)|(abstract)|(extends)|(until)|(#)/,
  62. keywords: {
  63. keyword: KEYWORDS,
  64. literal: LITERAL
  65. },
  66. contains: CONTAINS
  67. };
  68. }