dart.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. /*
  2. Language: Dart
  3. Requires: markdown.js
  4. Author: Maxim Dikun <dikmax@gmail.com>
  5. Description: Dart a modern, object-oriented language developed by Google. For more information see https://www.dartlang.org/
  6. Website: https://dart.dev
  7. Category: scripting
  8. */
  9. function dart(hljs) {
  10. const SUBST = {
  11. className: 'subst',
  12. variants: [{
  13. begin: '\\$[A-Za-z0-9_]+'
  14. }],
  15. };
  16. const BRACED_SUBST = {
  17. className: 'subst',
  18. variants: [{
  19. begin: '\\${',
  20. end: '}'
  21. }],
  22. keywords: 'true false null this is new super',
  23. };
  24. const STRING = {
  25. className: 'string',
  26. variants: [{
  27. begin: 'r\'\'\'',
  28. end: '\'\'\''
  29. },
  30. {
  31. begin: 'r"""',
  32. end: '"""'
  33. },
  34. {
  35. begin: 'r\'',
  36. end: '\'',
  37. illegal: '\\n'
  38. },
  39. {
  40. begin: 'r"',
  41. end: '"',
  42. illegal: '\\n'
  43. },
  44. {
  45. begin: '\'\'\'',
  46. end: '\'\'\'',
  47. contains: [hljs.BACKSLASH_ESCAPE, SUBST, BRACED_SUBST]
  48. },
  49. {
  50. begin: '"""',
  51. end: '"""',
  52. contains: [hljs.BACKSLASH_ESCAPE, SUBST, BRACED_SUBST]
  53. },
  54. {
  55. begin: '\'',
  56. end: '\'',
  57. illegal: '\\n',
  58. contains: [hljs.BACKSLASH_ESCAPE, SUBST, BRACED_SUBST]
  59. },
  60. {
  61. begin: '"',
  62. end: '"',
  63. illegal: '\\n',
  64. contains: [hljs.BACKSLASH_ESCAPE, SUBST, BRACED_SUBST]
  65. }
  66. ]
  67. };
  68. BRACED_SUBST.contains = [
  69. hljs.C_NUMBER_MODE, STRING
  70. ];
  71. const BUILT_IN_TYPES = [
  72. // dart:core
  73. 'Comparable',
  74. 'DateTime',
  75. 'Duration',
  76. 'Function',
  77. 'Iterable',
  78. 'Iterator',
  79. 'List',
  80. 'Map',
  81. 'Match',
  82. 'Object',
  83. 'Pattern',
  84. 'RegExp',
  85. 'Set',
  86. 'Stopwatch',
  87. 'String',
  88. 'StringBuffer',
  89. 'StringSink',
  90. 'Symbol',
  91. 'Type',
  92. 'Uri',
  93. 'bool',
  94. 'double',
  95. 'int',
  96. 'num',
  97. // dart:html
  98. 'Element',
  99. 'ElementList',
  100. ];
  101. const NULLABLE_BUILT_IN_TYPES = BUILT_IN_TYPES.map((e) => `${e}?`);
  102. const KEYWORDS = {
  103. keyword: 'abstract as assert async await break case catch class const continue covariant default deferred do ' +
  104. 'dynamic else enum export extends extension external factory false final finally for Function get hide if ' +
  105. 'implements import in inferface is late library mixin new null on operator part required rethrow return set ' +
  106. 'show static super switch sync this throw true try typedef var void while with yield',
  107. built_in:
  108. BUILT_IN_TYPES
  109. .concat(NULLABLE_BUILT_IN_TYPES)
  110. .concat([
  111. // dart:core
  112. 'Never',
  113. 'Null',
  114. 'dynamic',
  115. 'print',
  116. // dart:html
  117. 'document',
  118. 'querySelector',
  119. 'querySelectorAll',
  120. 'window',
  121. ]).join(' '),
  122. $pattern: /[A-Za-z][A-Za-z0-9_]*\??/
  123. };
  124. return {
  125. name: 'Dart',
  126. keywords: KEYWORDS,
  127. contains: [
  128. STRING,
  129. hljs.COMMENT(
  130. '/\\*\\*',
  131. '\\*/', {
  132. subLanguage: 'markdown',
  133. relevance:0
  134. }
  135. ),
  136. hljs.COMMENT(
  137. '///+\\s*',
  138. '$', {
  139. contains: [{
  140. subLanguage: 'markdown',
  141. begin: '.',
  142. end: '$',
  143. relevance:0
  144. }]
  145. }
  146. ),
  147. hljs.C_LINE_COMMENT_MODE,
  148. hljs.C_BLOCK_COMMENT_MODE,
  149. {
  150. className: 'class',
  151. beginKeywords: 'class interface',
  152. end: '{',
  153. excludeEnd: true,
  154. contains: [{
  155. beginKeywords: 'extends implements'
  156. },
  157. hljs.UNDERSCORE_TITLE_MODE
  158. ]
  159. },
  160. hljs.C_NUMBER_MODE,
  161. {
  162. className: 'meta',
  163. begin: '@[A-Za-z]+'
  164. },
  165. {
  166. begin: '=>' // No markup, just a relevance booster
  167. }
  168. ]
  169. };
  170. }
  171. module.exports = dart;