mirror of
				https://github.com/JKorf/CryptoExchange.Net
				synced 2025-11-04 04:17:32 +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
 | 
						|
    ]
 | 
						|
  };
 | 
						|
}
 |