MediaWiki:Highlight-js/languages/d.js

/** * Language: D * Author: Aleksandar Ruzicic  * Description: D is a language with C-like syntax and static typing. It pragmatically combines efficiency, control, and modeling power, with safety and programmer productivity. * Version: 1.0a * Date: 2012-04-08

* Known issues: * * - invalid hex string literals will be recognized as a double quoted strings *  but 'x' at the beginning of string will not be matched * * - delimited string literals are not checked for matching end delimiter *  (not possible to do with js regexp) * * - content of token string is colored as a string (i.e. no keyword coloring inside a token string) *  also, content of token string is not validated to contain only valid D tokens * * - special token sequence rule is not strictly following D grammar (anything following #line *  up to the end of line is matched as special token sequence) */ window.dev.highlight.registerLanguage('d', function(hljs) { /**   * Language keywords   *   * @type {Object}   */  var D_KEYWORDS = {    keyword:      'abstract alias align asm assert auto body break byte case cast catch class ' +      'const continue debug default delete deprecated do else enum export extern final ' +      'finally for foreach foreach_reverse|10 goto if immutable import in inout int ' +      'interface invariant is lazy macro mixin module new nothrow out override package ' +      'pragma private protected public pure ref return scope shared static struct ' +      'super switch synchronized template this throw try typedef typeid typeof union ' +      'unittest version void volatile while with __FILE__ __LINE__ __gshared|10 ' +      '__thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__',    built_in:      'bool cdouble cent cfloat char creal dchar delegate double dstring float function ' + 'idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar ' + 'wstring', literal: 'false null true' };

/**  * Number literal regexps *  * @type {String} */ var decimal_integer_re = '(0|[1-9][\\d_]*)', decimal_integer_nosus_re = '(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)', binary_integer_re = '0[bB][01_]+', hexadecimal_digits_re = '([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)', hexadecimal_integer_re = '0[xX]' + hexadecimal_digits_re,

decimal_exponent_re = '([eE][+-]?' + decimal_integer_nosus_re + ')', decimal_float_re = '(' + decimal_integer_nosus_re + '(\\.\\d*|' + decimal_exponent_re + ')|' +               '\\d+\\.' + decimal_integer_nosus_re + decimal_integer_nosus_re + '|' +                '\\.' + decimal_integer_re + decimal_exponent_re + '?' +              ')', hexadecimal_float_re = '(0[xX](' + hexadecimal_digits_re + '\\.' + hexadecimal_digits_re + '|'+ '\\.?' + hexadecimal_digits_re + ')[pP][+-]?' + decimal_integer_nosus_re + ')',

integer_re = '(' +     decimal_integer_re + '|' +      binary_integer_re  + '|' +       hexadecimal_integer_re   +    ')',

float_re = '(' +     hexadecimal_float_re + '|' +      decimal_float_re  +    ')';

/**  * Escape sequence supported in D string and character literals *  * @type {String} */ var escape_sequence_re = '\\\\(' +              '[\'"\\?\\\\abfnrtv]|' +  // common escapes              'u[\\dA-Fa-f]{4}|' +     // four hex digit unicode codepoint              '[0-7]{1,3}|' +       // one to three octal digit ascii char code              'x[\\dA-Fa-f]{2}|' +    // two hex digit ascii char code              'U[\\dA-Fa-f]{8}' +      // eight hex digit unicode codepoint              ')|' +              '&[a-zA-Z\\d]{2,};';      // named character entity

/**  * D integer number literals *  * @type {Object} */ var D_INTEGER_MODE = { className: 'number', begin: '\\b' + integer_re + '(L|u|U|Lu|LU|uL|UL)?', relevance: 0 };

/**  * [D_FLOAT_MODE description] * @type {Object} */ var D_FLOAT_MODE = { className: 'number', begin: '\\b(' +       float_re + '([fF]|L|i|[fF]i|Li)?|' +        integer_re + '(i|[fF]i|Li)' +      ')', relevance: 0 };

/**  * D character literal *  * @type {Object} */ var D_CHARACTER_MODE = { className: 'string', begin: '\'(' + escape_sequence_re + '|.)', end: '\'', illegal: '.' };

/**  * D string escape sequence *  * @type {Object} */ var D_ESCAPE_SEQUENCE = { begin: escape_sequence_re, relevance: 0 };

/**  * D double quoted string literal *  * @type {Object} */ var D_STRING_MODE = { className: 'string', begin: '"',   contains: [D_ESCAPE_SEQUENCE],    end: '"[cwd]?' };

/**  * D wysiwyg and delimited string literals *  * @type {Object} */ var D_WYSIWYG_DELIMITED_STRING_MODE = { className: 'string', begin: '[rq]"',   end: '"[cwd]?', relevance: 5 };

/**  * D alternate wysiwyg string literal *  * @type {Object} */ var D_ALTERNATE_WYSIWYG_STRING_MODE = { className: 'string', begin: '`', end: '`[cwd]?' };

/**  * D hexadecimal string literal *  * @type {Object} */ var D_HEX_STRING_MODE = { className: 'string', begin: 'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?', relevance: 10 };

/**  * D delimited string literal *  * @type {Object} */ var D_TOKEN_STRING_MODE = { className: 'string', begin: 'q"\\{',   end: '\\}"' };

/**  * Hashbang support *  * @type {Object} */ var D_HASHBANG_MODE = { className: 'meta', begin: '^#!', end: '$', relevance: 5 };

/**  * D special token sequence *  * @type {Object} */ var D_SPECIAL_TOKEN_SEQUENCE_MODE = { className: 'meta', begin: '#(line)', end: '$', relevance: 5 };

/**  * D attributes *  * @type {Object} */ var D_ATTRIBUTE_MODE = { className: 'keyword', begin: '@[a-zA-Z_][a-zA-Z_\\d]*' };

/**  * D nesting comment *  * @type {Object} */ var D_NESTING_COMMENT_MODE = hljs.COMMENT(    '\\/\\+',    '\\+\\/',    {      contains: ['self'],      relevance: 10    }  );

return { lexemes: hljs.UNDERSCORE_IDENT_RE, keywords: D_KEYWORDS, contains: [ hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, D_NESTING_COMMENT_MODE, D_HEX_STRING_MODE, D_STRING_MODE, D_WYSIWYG_DELIMITED_STRING_MODE, D_ALTERNATE_WYSIWYG_STRING_MODE, D_TOKEN_STRING_MODE, D_FLOAT_MODE, D_INTEGER_MODE, D_CHARACTER_MODE, D_HASHBANG_MODE, D_SPECIAL_TOKEN_SEQUENCE_MODE, D_ATTRIBUTE_MODE ] }; }); /** **/