/* Language: C# Author: Jason Diamond Category: common */ function(hljs) { var KEYWORDS = // Normal keywords. 'abstract as base bool break byte case catch char checked const continue decimal ' + 'default delegate do double else enum event explicit extern false finally fixed float ' + 'for foreach goto if implicit in int interface internal is lock long null ' + 'object operator out override params private protected public readonly ref sbyte ' + 'sealed short sizeof stackalloc static string struct switch this true try typeof ' + 'uint ulong unchecked unsafe ushort using virtual volatile void while async ' + 'protected public private internal ' + // Contextual keywords. 'ascending descending from get group into join let orderby partial select set value var ' + 'where yield'; var GENERIC_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '>)?'; return { aliases: ['csharp'], keywords: KEYWORDS, illegal: /::/, contains: [ { className: 'comment', begin: '///', end: '$', returnBegin: true, contains: [ { className: 'xmlDocTag', variants: [ { begin: '///', relevance: 0 }, { begin: '' }, { begin: '' } ] } ] }, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, { className: 'preprocessor', begin: '#', end: '$', keywords: 'if else elif endif define undef warning error line region endregion pragma checksum' }, { className: 'string', begin: '@"', end: '"', contains: [{begin: '""'}] }, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE, { beginKeywords: 'class namespace interface', end: /[{;=]/, illegal: /[^\s:]/, contains: [ hljs.TITLE_MODE, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE ] }, { // Expression keywords prevent 'keyword Name(...)' from being // recognized as a function definition beginKeywords: 'new return throw await', relevance: 0 }, { className: 'function', begin: '(' + GENERIC_IDENT_RE + '\\s+)+' + hljs.IDENT_RE + '\\s*\\(', returnBegin: true, end: /[{;=]/, excludeEnd: true, keywords: KEYWORDS, contains: [ { begin: hljs.IDENT_RE + '\\s*\\(', returnBegin: true, contains: [hljs.TITLE_MODE], relevance: 0 }, { className: 'params', begin: /\(/, end: /\)/, keywords: KEYWORDS, relevance: 0, contains: [ hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE, hljs.C_BLOCK_COMMENT_MODE ] }, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE ] } ] }; }