118 lines
3.5 KiB
JavaScript
118 lines
3.5 KiB
JavaScript
module.exports = function(hljs) {
|
|
var KEYWORDS =
|
|
// Normal keywords.
|
|
'abstract as base bool break byte case catch char checked const continue decimal dynamic ' +
|
|
'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 when ' +
|
|
'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: [
|
|
hljs.COMMENT(
|
|
'///',
|
|
'$',
|
|
{
|
|
returnBegin: true,
|
|
contains: [
|
|
{
|
|
className: 'xmlDocTag',
|
|
variants: [
|
|
{
|
|
begin: '///', relevance: 0
|
|
},
|
|
{
|
|
begin: '<!--|-->'
|
|
},
|
|
{
|
|
begin: '</?', end: '>'
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
),
|
|
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 interface', end: /[{;=]/,
|
|
illegal: /[^\s:]/,
|
|
contains: [
|
|
hljs.TITLE_MODE,
|
|
hljs.C_LINE_COMMENT_MODE,
|
|
hljs.C_BLOCK_COMMENT_MODE
|
|
]
|
|
},
|
|
{
|
|
beginKeywords: 'namespace', end: /[{;=]/,
|
|
illegal: /[^\s:]/,
|
|
contains: [
|
|
{
|
|
// Customization of hljs.TITLE_MODE that allows '.'
|
|
className: 'title',
|
|
begin: '[a-zA-Z](\\.?\\w)*',
|
|
relevance: 0
|
|
},
|
|
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: /\)/,
|
|
excludeBegin: true,
|
|
excludeEnd: true,
|
|
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
|
|
]
|
|
}
|
|
]
|
|
};
|
|
}; |