PageSourceSearch

https://www.analytikashop.gr/vendor/prismjs/components/prism-cshtml.2ou1b0bq5v.js

js analytikashop.gr collected 2026-10-10 00:40:10 UTC 6,649 bytes, 199 lines download raw bytes

vendor: 6,649 bytes, lines 1-199
1// Docs:
2// https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-5.0&tabs=visual-studio
3// https://docs.microsoft.com/en-us/aspnet/core/mvc/views/razor?view=aspnetcore-5.0
4
5(function (Prism) {
6
7	var commentLike = /\/(?![/*])|\/\/.*[\r\n]|\/\*[^*]*(?:\*(?!\/)[^*]*)*\*\//.source;
8	var stringLike =
9		/@(?!")|"(?:[^\r\n\\"]|\\.)*"|@"(?:[^\\"]|""|\\[\s\S])*"(?!")/.source +
10		'|' +
11		/'(?:(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'|(?=[^\\](?!')))/.source;
12
13	/**
14	 * Creates a nested pattern where all occurrences of the string `<<self>>` are replaced with the pattern itself.
15	 *
16	 * @param {string} pattern
17	 * @param {number} depthLog2
18	 * @returns {string}
19	 */
20	function nested(pattern, depthLog2) {
21		for (var i = 0; i < depthLog2; i++) {
22			pattern = pattern.replace(/<self>/g, function () { return '(?:' + pattern + ')'; });
23		}
24		return pattern
25			.replace(/<self>/g, '[^\\s\\S]')
26			.replace(/<str>/g, '(?:' + stringLike + ')')
27			.replace(/<comment>/g, '(?:' + commentLike + ')');
28	}
29
30	var round = nested(/\((?:[^()'"@/]|<str>|<comment>|<self>)*\)/.source, 2);
31	var square = nested(/\[(?:[^\[\]'"@/]|<str>|<comment>|<self>)*\]/.source, 1);
32	var curly = nested(/\{(?:[^{}'"@/]|<str>|<comment>|<self>)*\}/.source, 2);
33	var angle = nested(/<(?:[^<>'"@/]|<comment>|<self>)*>/.source, 1);
34
35	var inlineCs = /@/.source +
36		/(?:await\b\s*)?/.source +
37		'(?:' + /(?!await\b)\w+\b/.source + '|' + round + ')' +
38		'(?:' + /[?!]?\.\w+\b/.source + '|' + '(?:' + angle + ')?' + round + '|' + square + ')*' +
39		/(?![?!\.(\[]|<(?!\/))/.source;
40
41	// Note about the above bracket patterns:
42	// They all ignore HTML expressions that might be in the C# code. This is a problem because HTML (like strings and
43	// comments) is parsed differently. This is a huge problem because HTML might contain brackets and quotes which
44	// messes up the bracket and string counting implemented by the above patterns.
45	//
46	// This problem is not fixable because 1) HTML expression are highly context sensitive and very difficult to detect
47	// and 2) they require one capturing group at every nested level. See the `tagRegion` pattern to admire the
48	// complexity of an HTML expression.
49	//
50	// To somewhat alleviate the problem a bit, the patterns for characters (e.g. 'a') is very permissive, it also
51	// allows invalid characters to support HTML expressions like this: <p>That's it!</p>.
52
53	var tagAttrInlineCs = /@(?![\w()])/.source + '|' + inlineCs;
54	var tagAttrValue = '(?:' +
55		/"[^"@]*"|'[^'@]*'|[^\s'"@>=]+(?=[\s>])/.source +
56		'|' +
57		'["\'][^"\'@]*(?:(?:' + tagAttrInlineCs + ')[^"\'@]*)+["\']' +
58		')';
59
60	var tagAttrs = /(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*<tagAttrValue>|(?=[\s/>])))+)?/.source.replace(/<tagAttrValue>/, tagAttrValue);
61	var tagContent = /(?!\d)[^\s>\/=$<%]+/.source + tagAttrs + /\s*\/?>/.source;
62	var tagRegion =
63		/\B@?/.source +
64		'(?:' +
65		/<([a-zA-Z][\w:]*)/.source + tagAttrs + /\s*>/.source +
66		'(?:' +
67		(
68			/[^<]/.source +
69			'|' +
70			// all tags that are not the start tag
71			// eslint-disable-next-line regexp/strict
72			/<\/?(?!\1\b)/.source + tagContent +
73			'|' +
74			// nested start tag
75			nested(
76				// eslint-disable-next-line regexp/strict
77				/<\1/.source + tagAttrs + /\s*>/.source +
78				'(?:' +
79				(
80					/[^<]/.source +
81					'|' +
82					// all tags that are not the start tag
83					// eslint-disable-next-line regexp/strict
84					/<\/?(?!\1\b)/.source + tagContent +
85					'|' +
86					'<self>'
87				) +
88				')*' +
89				// eslint-disable-next-line regexp/strict
90				/<\/\1\s*>/.source,
91				2
92			)
93		) +
94		')*' +
95		// eslint-disable-next-line regexp/strict
96		/<\/\1\s*>/.source +
97		'|' +
98		/</.source + tagContent +
99		')';
100
101	// Now for the actual language definition(s):
102	//
103	// Razor as a language has 2 parts:
104	//  1) CSHTML: A markup-like language that has been extended with inline C# code expressions and blocks.
105	//  2) C#+HTML: A variant of C# that can contain CSHTML tags as expressions.
106	//
107	// In the below code, both CSHTML and C#+HTML will be create as separate language definitions that reference each
108	// other. However, only CSHTML will be exported via `Prism.languages`.
109
110	Prism.languages.cshtml = Prism.languages.extend('markup', {});
111
112	var csharpWithHtml = Prism.languages.insertBefore('csharp', 'string', {
113		'html': {
114			pattern: RegExp(tagRegion),
115			greedy: true,
116			inside: Prism.languages.cshtml
117		},
118	}, { csharp: Prism.languages.extend('csharp', {}) });
119
120	var cs = {
121		pattern: /\S[\s\S]*/,
122		alias: 'language-csharp',
123		inside: csharpWithHtml
124	};
125
126	var inlineValue = {
127		pattern: RegExp(/(^|[^@])/.source + inlineCs),
128		lookbehind: true,
129		greedy: true,
130		alias: 'variable',
131		inside: {
132			'keyword': /^@/,
133			'csharp': cs
134		}
135	};
136
137	Prism.languages.cshtml.tag.pattern = RegExp(/<\/?/.source + tagContent);
138	Prism.languages.cshtml.tag.inside['attr-value'].pattern = RegExp(/=\s*/.source + tagAttrValue);
139	Prism.languages.insertBefore('inside', 'punctuation', { 'value': inlineValue }, Prism.languages.cshtml.tag.inside['attr-value']);
140
141	Prism.languages.insertBefore('cshtml', 'prolog', {
142		'razor-comment': {
143			pattern: /@\*[\s\S]*?\*@/,
144			greedy: true,
145			alias: 'comment'
146		},
147
148		'block': {
149			pattern: RegExp(
150				/(^|[^@])@/.source +
151				'(?:' +
152				[
153					// @{ ... }
154					curly,
155					// @code{ ... }
156					/(?:code|functions)\s*/.source + curly,
157					// @for (...) { ... }
158					/(?:for|foreach|lock|switch|using|while)\s*/.source + round + /\s*/.source + curly,
159					// @do { ... } while (...);
160					/do\s*/.source + curly + /\s*while\s*/.source + round + /(?:\s*;)?/.source,
161					// @try { ... } catch (...) { ... } finally { ... }
162					/try\s*/.source + curly + /\s*catch\s*/.source + round + /\s*/.source + curly + /\s*finally\s*/.source + curly,
163					// @if (...) {...} else if (...) {...} else {...}
164					/if\s*/.source + round + /\s*/.source + curly + '(?:' + /\s*else/.source + '(?:' + /\s+if\s*/.source + round + ')?' + /\s*/.source + curly + ')*',
165					// @helper Ident(params) { ... }
166					/helper\s+\w+\s*/.source + round + /\s*/.source + curly,
167				].join('|') +
168				')'
169			),
170			lookbehind: true,
171			greedy: true,
172			inside: {
173				'keyword': /^@\w*/,
174				'csharp': cs
175			}
176		},
177
178		'directive': {
179			pattern: /^([ \t]*)@(?:addTagHelper|attribute|implements|inherits|inject|layout|model|namespace|page|preservewhitespace|removeTagHelper|section|tagHelperPrefix|using)(?=\s).*/m,
180			lookbehind: true,
181			greedy: true,
182			inside: {
183				'keyword': /^@\w+/,
184				'csharp': cs
185			}
186		},
187
188		'value': inlineValue,
189
190		'delegate-operator': {
191			pattern: /(^|[^@])@(?=<)/,
192			lookbehind: true,
193			alias: 'operator'
194		}
195	});
196
197	Prism.languages.razor = Prism.languages.cshtml;
198
199}(Prism));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.