diff --git a/components/prism-csharp.js b/components/prism-csharp.js index 3b79d2e12e..0d65d6fcd4 100644 --- a/components/prism-csharp.js +++ b/components/prism-csharp.js @@ -8,6 +8,14 @@ Prism.languages.csharp = Prism.languages.extend('clike', { }); Prism.languages.insertBefore('csharp', 'keyword', { + 'generic-method': { + pattern: /[a-z0-9_]+\s*<[^>\r\n]+?>\s*(?=\()/i, + alias: 'function', + inside: { + keyword: Prism.languages.csharp.keyword, + punctuation: /[<>(),.:]/ + } + }, 'preprocessor': { pattern: /(^\s*)#.*/m, lookbehind: true, diff --git a/components/prism-csharp.min.js b/components/prism-csharp.min.js index ab27060fe6..737e5670a1 100644 --- a/components/prism-csharp.min.js +++ b/components/prism-csharp.min.js @@ -1 +1 @@ -Prism.languages.csharp=Prism.languages.extend("clike",{keyword:/\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|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|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b/,string:[/@("|')(\1\1|\\\1|\\?(?!\1)[\s\S])*\1/,/("|')(\\?.)*?\1/],number:/\b-?(0x[\da-f]+|\d*\.?\d+f?)\b/i}),Prism.languages.insertBefore("csharp","keyword",{preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(\s*#)\b(define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}}); \ No newline at end of file +Prism.languages.csharp=Prism.languages.extend("clike",{keyword:/\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|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|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b/,string:[/@("|')(\1\1|\\\1|\\?(?!\1)[\s\S])*\1/,/("|')(\\?.)*?\1/],number:/\b-?(0x[\da-f]+|\d*\.?\d+f?)\b/i}),Prism.languages.insertBefore("csharp","keyword",{"generic-method":{pattern:/[a-z0-9_]+\s*<[^>\r\n]+?>\s*(?=\()/i,alias:"function",inside:{keyword:Prism.languages.csharp.keyword,punctuation:/[<>(),.:]/}},preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(\s*#)\b(define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}}); \ No newline at end of file diff --git a/tests/languages/csharp/generic_feature.test b/tests/languages/csharp/generic_feature.test new file mode 100644 index 0000000000..01115cfe6d --- /dev/null +++ b/tests/languages/csharp/generic_feature.test @@ -0,0 +1,32 @@ +void method(); +method(); + +---------------------------------------------------- + +[ + ["keyword", "void"], + ["generic-method", [ "method", + ["punctuation", "<"], + "T", + ["punctuation", ","], + " U", + ["punctuation", ">"] + ]], + ["punctuation", "("], + ["punctuation", ")"], + ["punctuation", ";"], + ["generic-method", [ "method", + ["punctuation", "<"], + ["keyword", "int"], + ["punctuation", ","], + ["keyword", "char"], + ["punctuation", ">"] + ]], + ["punctuation", "("], + ["punctuation", ")"], + ["punctuation", ";"] +] + +---------------------------------------------------- + +Checks for generic methods \ No newline at end of file