123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- /*
- 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 BASIC_KEYWORDS = [
- "abstract",
- "as",
- "assert",
- "async",
- "await",
- "base",
- "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",
- "interface",
- "is",
- "late",
- "library",
- "mixin",
- "new",
- "null",
- "on",
- "operator",
- "part",
- "required",
- "rethrow",
- "return",
- "sealed",
- "set",
- "show",
- "static",
- "super",
- "switch",
- "sync",
- "this",
- "throw",
- "true",
- "try",
- "typedef",
- "var",
- "void",
- "when",
- "while",
- "with",
- "yield"
- ];
- const KEYWORDS = {
- keyword: BASIC_KEYWORDS,
- 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
- }
- ]
- };
- }
- export { dart as default };
|