200 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
| Language: Dart
 | |
| Requires: markdown.js
 | |
| Author: Maxim Dikun <dikmax@gmail.com>
 | |
| Description: Dart a modern, object-oriented language developed by Google. For more information see https://www.dartlang.org/
 | |
| Website: https://dart.dev
 | |
| Category: scripting
 | |
| */
 | |
| 
 | |
| /** @type LanguageFn */
 | |
| function dart(hljs) {
 | |
|   const SUBST = {
 | |
|     className: 'subst',
 | |
|     variants: [{
 | |
|       begin: '\\$[A-Za-z0-9_]+'
 | |
|     }]
 | |
|   };
 | |
| 
 | |
|   const BRACED_SUBST = {
 | |
|     className: 'subst',
 | |
|     variants: [{
 | |
|       begin: /\$\{/,
 | |
|       end: /\}/
 | |
|     }],
 | |
|     keywords: 'true false null this is new super'
 | |
|   };
 | |
| 
 | |
|   const STRING = {
 | |
|     className: 'string',
 | |
|     variants: [
 | |
|       {
 | |
|         begin: 'r\'\'\'',
 | |
|         end: '\'\'\''
 | |
|       },
 | |
|       {
 | |
|         begin: 'r"""',
 | |
|         end: '"""'
 | |
|       },
 | |
|       {
 | |
|         begin: 'r\'',
 | |
|         end: '\'',
 | |
|         illegal: '\\n'
 | |
|       },
 | |
|       {
 | |
|         begin: 'r"',
 | |
|         end: '"',
 | |
|         illegal: '\\n'
 | |
|       },
 | |
|       {
 | |
|         begin: '\'\'\'',
 | |
|         end: '\'\'\'',
 | |
|         contains: [
 | |
|           hljs.BACKSLASH_ESCAPE,
 | |
|           SUBST,
 | |
|           BRACED_SUBST
 | |
|         ]
 | |
|       },
 | |
|       {
 | |
|         begin: '"""',
 | |
|         end: '"""',
 | |
|         contains: [
 | |
|           hljs.BACKSLASH_ESCAPE,
 | |
|           SUBST,
 | |
|           BRACED_SUBST
 | |
|         ]
 | |
|       },
 | |
|       {
 | |
|         begin: '\'',
 | |
|         end: '\'',
 | |
|         illegal: '\\n',
 | |
|         contains: [
 | |
|           hljs.BACKSLASH_ESCAPE,
 | |
|           SUBST,
 | |
|           BRACED_SUBST
 | |
|         ]
 | |
|       },
 | |
|       {
 | |
|         begin: '"',
 | |
|         end: '"',
 | |
|         illegal: '\\n',
 | |
|         contains: [
 | |
|           hljs.BACKSLASH_ESCAPE,
 | |
|           SUBST,
 | |
|           BRACED_SUBST
 | |
|         ]
 | |
|       }
 | |
|     ]
 | |
|   };
 | |
|   BRACED_SUBST.contains = [
 | |
|     hljs.C_NUMBER_MODE,
 | |
|     STRING
 | |
|   ];
 | |
| 
 | |
|   const BUILT_IN_TYPES = [
 | |
|     // dart:core
 | |
|     'Comparable',
 | |
|     'DateTime',
 | |
|     'Duration',
 | |
|     'Function',
 | |
|     'Iterable',
 | |
|     'Iterator',
 | |
|     'List',
 | |
|     'Map',
 | |
|     'Match',
 | |
|     'Object',
 | |
|     'Pattern',
 | |
|     'RegExp',
 | |
|     'Set',
 | |
|     'Stopwatch',
 | |
|     'String',
 | |
|     'StringBuffer',
 | |
|     'StringSink',
 | |
|     'Symbol',
 | |
|     'Type',
 | |
|     'Uri',
 | |
|     'bool',
 | |
|     'double',
 | |
|     'int',
 | |
|     'num',
 | |
|     // dart:html
 | |
|     'Element',
 | |
|     'ElementList'
 | |
|   ];
 | |
|   const NULLABLE_BUILT_IN_TYPES = BUILT_IN_TYPES.map((e) => `${e}?`);
 | |
| 
 | |
|   const KEYWORDS = {
 | |
|     keyword: 'abstract as assert async await break case catch class const continue covariant default deferred do ' +
 | |
|       'dynamic else enum export extends extension external factory false final finally for Function get hide if ' +
 | |
|       'implements import in inferface is late library mixin new null on operator part required rethrow return set ' +
 | |
|       'show static super switch sync this throw true try typedef var void while with yield',
 | |
|     built_in:
 | |
|       BUILT_IN_TYPES
 | |
|         .concat(NULLABLE_BUILT_IN_TYPES)
 | |
|         .concat([
 | |
|           // dart:core
 | |
|           'Never',
 | |
|           'Null',
 | |
|           'dynamic',
 | |
|           'print',
 | |
|           // dart:html
 | |
|           'document',
 | |
|           'querySelector',
 | |
|           'querySelectorAll',
 | |
|           'window'
 | |
|         ]),
 | |
|     $pattern: /[A-Za-z][A-Za-z0-9_]*\??/
 | |
|   };
 | |
| 
 | |
|   return {
 | |
|     name: 'Dart',
 | |
|     keywords: KEYWORDS,
 | |
|     contains: [
 | |
|       STRING,
 | |
|       hljs.COMMENT(
 | |
|         /\/\*\*(?!\/)/,
 | |
|         /\*\//,
 | |
|         {
 | |
|           subLanguage: 'markdown',
 | |
|           relevance: 0
 | |
|         }
 | |
|       ),
 | |
|       hljs.COMMENT(
 | |
|         /\/{3,} ?/,
 | |
|         /$/, {
 | |
|           contains: [{
 | |
|             subLanguage: 'markdown',
 | |
|             begin: '.',
 | |
|             end: '$',
 | |
|             relevance: 0
 | |
|           }]
 | |
|         }
 | |
|       ),
 | |
|       hljs.C_LINE_COMMENT_MODE,
 | |
|       hljs.C_BLOCK_COMMENT_MODE,
 | |
|       {
 | |
|         className: 'class',
 | |
|         beginKeywords: 'class interface',
 | |
|         end: /\{/,
 | |
|         excludeEnd: true,
 | |
|         contains: [
 | |
|           {
 | |
|             beginKeywords: 'extends implements'
 | |
|           },
 | |
|           hljs.UNDERSCORE_TITLE_MODE
 | |
|         ]
 | |
|       },
 | |
|       hljs.C_NUMBER_MODE,
 | |
|       {
 | |
|         className: 'meta',
 | |
|         begin: '@[A-Za-z]+'
 | |
|       },
 | |
|       {
 | |
|         begin: '=>' // No markup, just a relevance booster
 | |
|       }
 | |
|     ]
 | |
|   };
 | |
| }
 | |
| 
 | |
| module.exports = dart;
 | 
