Skip to content

Commit 5f030a3

Browse files
author
Roman Reshetnikov
committed
improve razor in razor
1 parent 1fa18d8 commit 5f030a3

8 files changed

+142
-47
lines changed

cshtml-razor.js

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ function getXmlBlocks(hljs, additional_blocks) {
9797
xml_tag_internal
9898
]
9999
}
100-
];
100+
].concat(additional_blocks);
101101
}
102102
function hljsDefineCshtmlRazor(hljs) {
103103
var SPECIAL_SYMBOL_CLASSNAME = "built_in";
@@ -114,11 +114,20 @@ function hljsDefineCshtmlRazor(hljs) {
114114
var razor_inline_expresion = {
115115
begin: "@[a-zA-Z]+",
116116
returnBegin: true,
117+
subLanguage: 'cs',
117118
end: "(\\r|\\n|<|\\s|\"|')",
118119
contains: [
119120
{
120121
begin: '@',
121122
className: SPECIAL_SYMBOL_CLASSNAME
123+
},
124+
{
125+
begin: '".*(?!$)"',
126+
skip: true
127+
},
128+
{
129+
begin: '"',
130+
endsParent: true
122131
}
123132
],
124133
returnEnd: true
@@ -154,7 +163,7 @@ function hljsDefineCshtmlRazor(hljs) {
154163
end: "\\)",
155164
returnBegin: true,
156165
returnEnd: true,
157-
subLanguage: ["cs"],
166+
subLanguage: "cs",
158167
contains: [
159168
{
160169
begin: "@\\(",
@@ -200,14 +209,12 @@ function hljsDefineCshtmlRazor(hljs) {
200209
returnBegin: true,
201210
returnEnd: true,
202211
end: "\\}",
203-
subLanguage: ['cs', 'cshtml-razor'],
212+
subLanguage: 'cs',
204213
contains: [
205214
{
206215
begin: "@\\{",
207216
className: SPECIAL_SYMBOL_CLASSNAME
208217
},
209-
razor_text_block,
210-
braces,
211218
closed_brace
212219
]
213220
};
@@ -225,7 +232,7 @@ function hljsDefineCshtmlRazor(hljs) {
225232
returnBegin: true,
226233
returnEnd: true,
227234
end: "}",
228-
subLanguage: ['cshtml-razor', 'cs'],
235+
subLanguage: 'cs',
229236
contains: [
230237
{
231238
variants: razor_code_block_variants.map(function (v) { return { begin: v.begin }; }),
@@ -262,7 +269,7 @@ function hljsDefineCshtmlRazor(hljs) {
262269
},
263270
braces,
264271
closed_brace,
265-
razor_block
272+
//razor_block
266273
]
267274
};
268275
var section_begin = "@section[\\s]+[a-zA-Z0-9]+[\\s]*{";
@@ -335,6 +342,7 @@ function hljsDefineCshtmlRazor(hljs) {
335342
}
336343
]
337344
};
345+
338346
var result = {
339347
aliases: ['cshtml'],
340348
contains: [
@@ -360,6 +368,13 @@ function hljsDefineCshtmlRazor(hljs) {
360368
]
361369
};
362370
result.contains = result.contains.concat(xml_blocks);
371+
372+
[razor_block, razor_code_block]
373+
.forEach(function(mode) {
374+
var razorModes = result.contains.filter(function(c) { return c !== mode; });
375+
mode.contains.splice.apply(mode.contains, [1, 0].concat(razorModes));
376+
});
377+
363378
return result;
364379
}
365380

package-lock.json

Lines changed: 22 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/index.html

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<!DOCTYPE html>
2+
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
3+
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
4+
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
5+
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
6+
<head>
7+
<meta charset="utf-8">
8+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
9+
<title></title>
10+
<meta name="description" content="">
11+
<meta name="viewport" content="width=device-width, initial-scale=1">
12+
<link rel="stylesheet" href="./node_modules/highlightjs/styles/default.css">
13+
<script type="text/javascript" src="./node_modules/highlightjs/highlight.pack.js"></script>
14+
<script type="text/javascript" src="cshtml-razor.js"></script>
15+
<script type="text/javascript">
16+
hljs.registerLanguage('cshtml-razor', window.hljsDefineCshtmlRazor);
17+
hljs.initHighlightingOnLoad();
18+
</script>
19+
</head>
20+
<body>
21+
<pre><code class="hljs cshtml">
22+
before
23+
@{
24+
var inCSharp = true;
25+
@&lt;text&gt;xml&lt;/text&gt;
26+
&lt;div class="foo"&gt;content&lt;/div&gt;
27+
}
28+
after
29+
@{
30+
var inCSharp = true;
31+
&lt;text&gt;xml&lt;/text&gt;
32+
}
33+
&lt;div class="foo"&gt;content&lt;/div&gt;
34+
</code></pre>
35+
<pre><code class="hljs cshtml">
36+
@if(true) {
37+
var inCSharp = true;
38+
&lt;text&gt;xml&lt;/text&gt;
39+
&lt;div class="foo"&gt;content&lt;/div&gt;
40+
@while(true) {
41+
&lt;div class="bar"&gt;content&lt;/div&gt;
42+
}
43+
}
44+
</code></pre>
45+
<pre><code class="hljs cshtml">
46+
Hello @owner from html
47+
Hello @owner["test"] from html
48+
Hello @owner.test from html
49+
Hello @owner<b>from html</b>
50+
Hello @owner
51+
from html
52+
53+
@@escapedat
54+
</code></pre>
55+
<pre><code class="hljs cshtml"></code></pre>
56+
<script src="" async defer></script>
57+
</body>
58+
</html>
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
<span class="xml">before
2-
</span><span class="cs"></span><span class="hljs-built_in">@{</span><span class="cs">
1+
before
2+
<span class="cs"></span><span class="hljs-built_in">@{</span><span class="cs">
33
<span class="hljs-keyword">var</span> inCSharp = <span class="hljs-literal">true</span>;
4-
</span><span class="cshtml-razor"><span class="xml"></span></span><span class="hljs-built_in">&lt;text&gt;</span><span class="cshtml-razor"><span class="xml">xml</span></span><span class="hljs-built_in">&lt;/text&gt;</span><span class="cs">
5-
</span><span class="hljs-built_in">}</span><span class="xml">
4+
</span><span class="cshtml-razor"></span><span class="hljs-built_in">&lt;text&gt;</span><span class="cshtml-razor">xml</span><span class="hljs-built_in">&lt;/text&gt;</span><span class="cs">
5+
</span><span class="hljs-built_in">}</span>
66
after
7-
</span><span class="cs"></span><span class="hljs-built_in">@{</span><span class="cs">
7+
<span class="cs"></span><span class="hljs-built_in">@{</span><span class="cs">
88
<span class="hljs-keyword">var</span> inCSharp = <span class="hljs-literal">true</span>;
9-
</span><span class="cshtml-razor"><span class="xml"></span></span><span class="hljs-built_in">&lt;text&gt;</span><span class="cshtml-razor"><span class="xml">xml</span></span><span class="hljs-built_in">&lt;/text&gt;</span><span class="cs">
10-
</span><span class="hljs-built_in">}</span><span class="xml"></span>
9+
</span><span class="cshtml-razor"></span><span class="hljs-built_in">&lt;text&gt;</span><span class="cshtml-razor">xml</span><span class="hljs-built_in">&lt;/text&gt;</span><span class="cs">
10+
</span><span class="hljs-built_in">}</span>

test/markup/if-else-block.expect.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
<span class="xml">before
2-
</span><span class="cshtml-razor"><span class="xml"></span></span><span class="hljs-built_in">@</span><span class="cs"><span class="hljs-keyword">if</span>(<span class="hljs-literal">true</span>) </span><span class="hljs-built_in">{</span><span class="cshtml-razor"><span class="xml">
1+
before
2+
<span class="cs"></span><span class="hljs-built_in">@</span><span class="cs"><span class="hljs-keyword">if</span>(<span class="hljs-literal">true</span>) </span><span class="hljs-built_in">{</span><span class="cs">
33
block
4-
</span></span><span class="hljs-built_in">}</span><span class="cs"> <span class="hljs-keyword">else</span> </span><span class="hljs-built_in">{</span><span class="cshtml-razor"><span class="xml">
4+
</span><span class="hljs-built_in">}</span><span class="cs"> <span class="hljs-keyword">else</span> </span><span class="hljs-built_in">{</span><span class="cs">
55
block
6-
</span></span><span class="hljs-built_in">}</span><span class="xml">
7-
after</span>
6+
</span><span class="hljs-built_in">}</span>
7+
after

test/markup/inline.expect.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
<span class="xml">Hello </span><span class="cs"></span><span class="hljs-built_in">@</span><span class="cs">owner</span><span class="xml"> from html
2-
Hello </span><span class="cs"></span><span class="hljs-built_in">@</span><span class="cs">owner[<span class="hljs-string">"test"</span>]</span><span class="xml"> from html
3-
Hello </span><span class="cs"></span><span class="hljs-built_in">@</span><span class="cs">owner.test</span><span class="xml"> from html
4-
Hello </span><span class="cs"></span><span class="hljs-built_in">@</span><span class="cs">owner</span><span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">b</span>&gt;</span>from html<span class="hljs-tag">&lt;/<span class="hljs-name">b</span>&gt;</span>
5-
Hello </span><span class="cs"></span><span class="hljs-built_in">@</span><span class="cs">owner</span><span class="xml">
1+
Hello <span class="cs"></span><span class="hljs-built_in">@</span><span class="cs">owner</span> from html
2+
Hello <span class="cs"></span><span class="hljs-built_in">@</span><span class="cs">owner[<span class="hljs-string">"test"</span>]</span> from html
3+
Hello <span class="cs"></span><span class="hljs-built_in">@</span><span class="cs">owner.test</span> from html
4+
Hello <span class="cs"></span><span class="hljs-built_in">@</span><span class="cs">owner</span><span class="hljs-tag">&lt;<span class="hljs-name">b</span>&gt;</span>from html<span class="hljs-tag">&lt;/<span class="hljs-name">b</span>&gt;</span>
5+
Hello <span class="cs"></span><span class="hljs-built_in">@</span><span class="cs">owner</span>
66
from html
77
8-
@@escapedat</span>
8+
@@escapedat

test/markup/razor-in-razor.expect.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<span class="cs"></span><span class="hljs-built_in">@{</span><span class="cs">
2+
<span class="hljs-keyword">var</span> inCSharp = <span class="hljs-literal">true</span>;
3+
</span><span class="cshtml-razor"></span><span class="hljs-built_in">@&lt;text&gt;</span><span class="cshtml-razor">xml</span><span class="hljs-built_in">&lt;/text&gt;</span><span class="cs">
4+
</span><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"foo"</span>&gt;</span><span class="cs">content</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span><span class="cs">
5+
</span><span class="hljs-built_in">}</span>
6+
7+
<span class="cs"></span><span class="hljs-built_in">@</span><span class="cs"><span class="hljs-keyword">if</span>(<span class="hljs-literal">true</span>)</span><span class="hljs-built_in">{</span><span class="cs">
8+
<span class="hljs-keyword">var</span> inCSharp = <span class="hljs-literal">true</span>;
9+
</span><span class="cshtml-razor"></span><span class="hljs-built_in">@&lt;text&gt;</span><span class="cshtml-razor">xml</span><span class="hljs-built_in">&lt;/text&gt;</span><span class="cs">
10+
</span><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"foo"</span>&gt;</span><span class="cs">content</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span><span class="cs">
11+
</span><span class="hljs-built_in">}</span>

test/markup/razor-in-razor.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
@{
2+
var inCSharp = true;
3+
@<text>xml</text>
4+
<div class="foo">content</div>
5+
}
6+
7+
@if(true){
8+
var inCSharp = true;
9+
@<text>xml</text>
10+
<div class="foo">content</div>
11+
}

0 commit comments

Comments
 (0)