typescript.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /*
  2. Language: TypeScript
  3. Author: Panu Horsmalahti <[email protected]>
  4. Description: TypeScript is a strict superset of JavaScript
  5. Category: scripting
  6. */
  7. function(hljs) {
  8. var KEYWORDS = {
  9. keyword:
  10. 'in if for while finally var new function do return void else break catch ' +
  11. 'instanceof with throw case default try this switch continue typeof delete ' +
  12. 'let yield const class public private protected get set super ' +
  13. 'static implements enum export import declare type namespace abstract',
  14. literal:
  15. 'true false null undefined NaN Infinity',
  16. built_in:
  17. 'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +
  18. 'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +
  19. 'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +
  20. 'TypeError URIError Number Math Date String RegExp Array Float32Array ' +
  21. 'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +
  22. 'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +
  23. 'module console window document any number boolean string void'
  24. };
  25. return {
  26. aliases: ['ts'],
  27. keywords: KEYWORDS,
  28. contains: [
  29. {
  30. className: 'meta',
  31. begin: /^\s*['"]use strict['"]/
  32. },
  33. hljs.APOS_STRING_MODE,
  34. hljs.QUOTE_STRING_MODE,
  35. { // template string
  36. className: 'string',
  37. begin: '`', end: '`',
  38. contains: [
  39. hljs.BACKSLASH_ESCAPE,
  40. {
  41. className: 'subst',
  42. begin: '\\$\\{', end: '\\}'
  43. }
  44. ]
  45. },
  46. hljs.C_LINE_COMMENT_MODE,
  47. hljs.C_BLOCK_COMMENT_MODE,
  48. {
  49. className: 'number',
  50. variants: [
  51. { begin: '\\b(0[bB][01]+)' },
  52. { begin: '\\b(0[oO][0-7]+)' },
  53. { begin: hljs.C_NUMBER_RE }
  54. ],
  55. relevance: 0
  56. },
  57. { // "value" container
  58. begin: '(' + hljs.RE_STARTERS_RE + '|\\b(case|return|throw)\\b)\\s*',
  59. keywords: 'return throw case',
  60. contains: [
  61. hljs.C_LINE_COMMENT_MODE,
  62. hljs.C_BLOCK_COMMENT_MODE,
  63. hljs.REGEXP_MODE
  64. ],
  65. relevance: 0
  66. },
  67. {
  68. className: 'function',
  69. begin: 'function', end: /[\{;]/, excludeEnd: true,
  70. keywords: KEYWORDS,
  71. contains: [
  72. 'self',
  73. hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}),
  74. {
  75. className: 'params',
  76. begin: /\(/, end: /\)/,
  77. excludeBegin: true,
  78. excludeEnd: true,
  79. keywords: KEYWORDS,
  80. contains: [
  81. hljs.C_LINE_COMMENT_MODE,
  82. hljs.C_BLOCK_COMMENT_MODE
  83. ],
  84. illegal: /["'\(]/
  85. }
  86. ],
  87. illegal: /%/,
  88. relevance: 0 // () => {} is more typical in TypeScript
  89. },
  90. {
  91. beginKeywords: 'constructor', end: /\{/, excludeEnd: true
  92. },
  93. { // prevent references like module.id from being higlighted as module definitions
  94. begin: /module\./,
  95. keywords: {built_in: 'module'},
  96. relevance: 0
  97. },
  98. {
  99. beginKeywords: 'module', end: /\{/, excludeEnd: true
  100. },
  101. {
  102. beginKeywords: 'interface', end: /\{/, excludeEnd: true,
  103. keywords: 'interface extends'
  104. },
  105. {
  106. begin: /\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`
  107. },
  108. {
  109. begin: '\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots
  110. }
  111. ]
  112. };
  113. }