mirror of
				https://github.com/JKorf/CryptoExchange.Net
				synced 2025-10-30 18:07:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			209 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
| Language: C#
 | |
| Author: Jason Diamond <jason@diamond.name>
 | |
| Contributor: Nicolas LLOBERA <nllobera@gmail.com>, Pieter Vantorre <pietervantorre@gmail.com>
 | |
| Website: https://docs.microsoft.com/en-us/dotnet/csharp/
 | |
| Category: common
 | |
| */
 | |
| 
 | |
| export default function(hljs) {
 | |
|   var KEYWORDS = {
 | |
|     keyword:
 | |
|       // Normal keywords.
 | |
|       'abstract as base bool break byte case catch char checked const continue decimal ' +
 | |
|       'default delegate do double enum event explicit extern finally fixed float ' +
 | |
|       'for foreach goto if implicit in int interface internal is lock long ' +
 | |
|       'object operator out override params private protected public readonly ref sbyte ' +
 | |
|       'sealed short sizeof stackalloc static string struct switch this try typeof ' +
 | |
|       'uint ulong unchecked unsafe ushort using virtual void volatile while ' +
 | |
|       // Contextual keywords.
 | |
|       'add alias ascending async await by descending dynamic equals from get global group into join ' +
 | |
|       'let nameof on orderby partial remove select set value var when where yield',
 | |
|     literal:
 | |
|       'null false true'
 | |
|   };
 | |
|   var TITLE_MODE = hljs.inherit(hljs.TITLE_MODE, {begin: '[a-zA-Z](\\.?\\w)*'});
 | |
|   var NUMBERS = {
 | |
|     className: 'number',
 | |
|     variants: [
 | |
|       { begin: '\\b(0b[01\']+)' },
 | |
|       { begin: '(-?)\\b([\\d\']+(\\.[\\d\']*)?|\\.[\\d\']+)(u|U|l|L|ul|UL|f|F|b|B)' },
 | |
|       { begin: '(-?)(\\b0[xX][a-fA-F0-9\']+|(\\b[\\d\']+(\\.[\\d\']*)?|\\.[\\d\']+)([eE][-+]?[\\d\']+)?)' }
 | |
|     ],
 | |
|     relevance: 0
 | |
|   };
 | |
|   var VERBATIM_STRING = {
 | |
|     className: 'string',
 | |
|     begin: '@"', end: '"',
 | |
|     contains: [{begin: '""'}]
 | |
|   };
 | |
|   var VERBATIM_STRING_NO_LF = hljs.inherit(VERBATIM_STRING, {illegal: /\n/});
 | |
|   var SUBST = {
 | |
|     className: 'subst',
 | |
|     begin: '{', end: '}',
 | |
|     keywords: KEYWORDS
 | |
|   };
 | |
|   var SUBST_NO_LF = hljs.inherit(SUBST, {illegal: /\n/});
 | |
|   var INTERPOLATED_STRING = {
 | |
|     className: 'string',
 | |
|     begin: /\$"/, end: '"',
 | |
|     illegal: /\n/,
 | |
|     contains: [{begin: '{{'}, {begin: '}}'}, hljs.BACKSLASH_ESCAPE, SUBST_NO_LF]
 | |
|   };
 | |
|   var INTERPOLATED_VERBATIM_STRING = {
 | |
|     className: 'string',
 | |
|     begin: /\$@"/, end: '"',
 | |
|     contains: [{begin: '{{'}, {begin: '}}'}, {begin: '""'}, SUBST]
 | |
|   };
 | |
|   var INTERPOLATED_VERBATIM_STRING_NO_LF = hljs.inherit(INTERPOLATED_VERBATIM_STRING, {
 | |
|     illegal: /\n/,
 | |
|     contains: [{begin: '{{'}, {begin: '}}'}, {begin: '""'}, SUBST_NO_LF]
 | |
|   });
 | |
|   SUBST.contains = [
 | |
|     INTERPOLATED_VERBATIM_STRING,
 | |
|     INTERPOLATED_STRING,
 | |
|     VERBATIM_STRING,
 | |
|     hljs.APOS_STRING_MODE,
 | |
|     hljs.QUOTE_STRING_MODE,
 | |
|     NUMBERS,
 | |
|     hljs.C_BLOCK_COMMENT_MODE
 | |
|   ];
 | |
|   SUBST_NO_LF.contains = [
 | |
|     INTERPOLATED_VERBATIM_STRING_NO_LF,
 | |
|     INTERPOLATED_STRING,
 | |
|     VERBATIM_STRING_NO_LF,
 | |
|     hljs.APOS_STRING_MODE,
 | |
|     hljs.QUOTE_STRING_MODE,
 | |
|     NUMBERS,
 | |
|     hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, {illegal: /\n/})
 | |
|   ];
 | |
|   var STRING = {
 | |
|     variants: [
 | |
|       INTERPOLATED_VERBATIM_STRING,
 | |
|       INTERPOLATED_STRING,
 | |
|       VERBATIM_STRING,
 | |
|       hljs.APOS_STRING_MODE,
 | |
|       hljs.QUOTE_STRING_MODE
 | |
|     ]
 | |
|   };
 | |
| 
 | |
|   var GENERIC_MODIFIER = {
 | |
|     begin: "<",
 | |
|     end: ">",
 | |
|     keywords: "in out"
 | |
|   };
 | |
|   var TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\s*,\\s*' + hljs.IDENT_RE + ')*>)?(\\[\\])?';
 | |
|   var AT_IDENTIFIER = {
 | |
|     // prevents expressions like `@class` from incorrect flagging
 | |
|     // `class` as a keyword
 | |
|     begin: "@" + hljs.IDENT_RE,
 | |
|     relevance: 0
 | |
|   };
 | |
| 
 | |
|   return {
 | |
|     name: 'C#',
 | |
|     aliases: ['cs', 'c#'],
 | |
|     keywords: KEYWORDS,
 | |
|     illegal: /::/,
 | |
|     contains: [
 | |
|       hljs.COMMENT(
 | |
|         '///',
 | |
|         '$',
 | |
|         {
 | |
|           returnBegin: true,
 | |
|           contains: [
 | |
|             {
 | |
|               className: 'doctag',
 | |
|               variants: [
 | |
|                 {
 | |
|                   begin: '///', relevance: 0
 | |
|                 },
 | |
|                 {
 | |
|                   begin: '<!--|-->'
 | |
|                 },
 | |
|                 {
 | |
|                   begin: '</?', end: '>'
 | |
|                 }
 | |
|               ]
 | |
|             }
 | |
|           ]
 | |
|         }
 | |
|       ),
 | |
|       hljs.C_LINE_COMMENT_MODE,
 | |
|       hljs.C_BLOCK_COMMENT_MODE,
 | |
|       {
 | |
|         className: 'meta',
 | |
|         begin: '#', end: '$',
 | |
|         keywords: {
 | |
|           'meta-keyword': 'if else elif endif define undef warning error line region endregion pragma checksum'
 | |
|         }
 | |
|       },
 | |
|       STRING,
 | |
|       NUMBERS,
 | |
|       {
 | |
|         beginKeywords: 'class interface', end: /[{;=]/,
 | |
|         illegal: /[^\s:,]/,
 | |
|         contains: [
 | |
|           { beginKeywords: "where class" },
 | |
|           TITLE_MODE,
 | |
|           GENERIC_MODIFIER,
 | |
|           hljs.C_LINE_COMMENT_MODE,
 | |
|           hljs.C_BLOCK_COMMENT_MODE
 | |
|         ]
 | |
|       },
 | |
|       {
 | |
|         beginKeywords: 'namespace', end: /[{;=]/,
 | |
|         illegal: /[^\s:]/,
 | |
|         contains: [
 | |
|           TITLE_MODE,
 | |
|           hljs.C_LINE_COMMENT_MODE,
 | |
|           hljs.C_BLOCK_COMMENT_MODE
 | |
|         ]
 | |
|       },
 | |
|       {
 | |
|         // [Attributes("")]
 | |
|         className: 'meta',
 | |
|         begin: '^\\s*\\[', excludeBegin: true, end: '\\]', excludeEnd: true,
 | |
|         contains: [
 | |
|           {className: 'meta-string', begin: /"/, end: /"/}
 | |
|         ]
 | |
|       },
 | |
|       {
 | |
|         // Expression keywords prevent 'keyword Name(...)' from being
 | |
|         // recognized as a function definition
 | |
|         beginKeywords: 'new return throw await else',
 | |
|         relevance: 0
 | |
|       },
 | |
|       {
 | |
|         className: 'function',
 | |
|         begin: '(' + TYPE_IDENT_RE + '\\s+)+' + hljs.IDENT_RE + '\\s*\\(', returnBegin: true,
 | |
|         end: /\s*[{;=]/, 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: [
 | |
|               STRING,
 | |
|               NUMBERS,
 | |
|               hljs.C_BLOCK_COMMENT_MODE
 | |
|             ]
 | |
|           },
 | |
|           hljs.C_LINE_COMMENT_MODE,
 | |
|           hljs.C_BLOCK_COMMENT_MODE
 | |
|         ]
 | |
|       },
 | |
|       AT_IDENTIFIER
 | |
|     ]
 | |
|   };
 | |
| }
 |