text: module.exports = function(hljs) {
    var SUBST = {
      className: 'subst',
      variants: [{
        begin: '\\$[A-Za-z0-9_]+'
      }],
    };
  
    var BRACED_SUBST = {
      className: 'subst',
      variants: [{
        begin: '\\${',
        end: '}'
      }, ],
      keywords: 'true false null this is new super',
    };
  
    var 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
    ];
  
    var 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 library mixin new null on operator part rethrow return set show static ' +
        'super switch sync this throw true try typedef var void while with yield',
      built_in:
        // dart:core
        'Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set ' +
        'Stopwatch String StringBuffer StringSink Symbol Type Uri bool double dynamic int num print ' +
        // dart:html
        'Element ElementList document querySelector querySelectorAll window'
    };
  
    return {
      keywords: KEYWORDS,
      contains: [
        STRING,
        hljs.COMMENT(
          '/\\*\\*',
          '\\*/', {
            subLanguage: 'markdown'
          }
        ),
        hljs.COMMENT(
          '///+\\s*',
          '$', {
            contains: [{
              subLanguage: 'markdown',
              begin: '.',
              end: '$',
            }]
          }
        ),
        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
        }
      ]
    }
  };