Skip to content

Commit d5a13e4

Browse files
author
Roman Reshetnikov
committed
fix sections
1 parent 983d692 commit d5a13e4

File tree

5 files changed

+34
-29
lines changed

5 files changed

+34
-29
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Simply include the `highlight.js` script package in your webpage or node app, lo
1313
If you're not using a build system and just want to embed this in your webpage:
1414

1515
```html
16-
<script type="text/javascript" src="/path/to/highlight.pack.js"></script>
16+
<script type="text/javascript" src="/path/to/highlightjs/highlight.pack.js"></script>
1717
<script type="text/javascript" src="/path/to/highlightjs-cshtml-razor/cshtml-razor.js"></script>
1818
<script type="text/javascript">
1919
hljs.registerLanguage('cshtml-razor', window.hljsDefineCshtmlRazor);

cshtml-razor.js

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* Language: cshtml-razor
3-
* Requires: xml.js, cs.js
3+
* Requires: xml.js, cs.js, css.js, javascript.js
44
* Author: Roman Resh <[email protected]>
55
*/
66

@@ -56,17 +56,6 @@ function getXmlBlocks(hljs, additional_blocks) {
5656
className: 'meta',
5757
begin: /<\?xml/, end: /\?>/, relevance: 10
5858
},
59-
{
60-
begin: /<\?(php)?/, end: /\?>/,
61-
subLanguage: 'php',
62-
contains: [
63-
{ begin: '/\\*', end: '\\*/', skip: true },
64-
{ begin: 'b"', end: '"', skip: true },
65-
{ begin: 'b\'', end: '\'', skip: true },
66-
hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null, className: null, contains: null, skip: true }),
67-
hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null, className: null, contains: null, skip: true })
68-
]
69-
},
7059
{
7160
className: 'tag',
7261
begin: '<style(?=\\s|>|$)', end: '>',
@@ -101,6 +90,7 @@ function getXmlBlocks(hljs, additional_blocks) {
10190
}
10291
function hljsDefineCshtmlRazor(hljs) {
10392
var SPECIAL_SYMBOL_CLASSNAME = "built_in";
93+
var CONTENT_REPLACER = {};
10494
var closed_brace = {
10595
begin: "}",
10696
className: SPECIAL_SYMBOL_CLASSNAME,
@@ -215,6 +205,7 @@ function hljsDefineCshtmlRazor(hljs) {
215205
begin: "@\\{",
216206
className: SPECIAL_SYMBOL_CLASSNAME
217207
},
208+
CONTENT_REPLACER,
218209
closed_brace
219210
]
220211
};
@@ -246,6 +237,7 @@ function hljsDefineCshtmlRazor(hljs) {
246237
{ begin: "{", className: SPECIAL_SYMBOL_CLASSNAME }
247238
]
248239
},
240+
CONTENT_REPLACER,
249241
{
250242
variants: [
251243
{ begin: "}[\\s]*else\\sif[\\s]*\\([^{]+[\\s]*{" },
@@ -278,7 +270,7 @@ function hljsDefineCshtmlRazor(hljs) {
278270
end: "}",
279271
returnBegin: true,
280272
returnEnd: true,
281-
subLanguage: ["cs"],
273+
subLanguage: "cs",
282274
contains: [
283275
{ begin: "@", className: SPECIAL_SYMBOL_CLASSNAME },
284276
{ begin: "try[\\s]*{", subLanguage: "cs" },
@@ -300,32 +292,26 @@ function hljsDefineCshtmlRazor(hljs) {
300292
{ begin: "{", className: SPECIAL_SYMBOL_CLASSNAME }
301293
]
302294
},
303-
razor_text_block,
295+
CONTENT_REPLACER,
304296
braces,
305297
closed_brace
306298
]
307299
};
308-
309-
razor_try_block.contains = razor_try_block.contains.concat(xml_blocks);
310300
var razor_section_block = {
311301
begin: section_begin,
312302
returnBegin: true,
313303
returnEnd: true,
314304
end: "}",
315-
subLanguage: ['cshtml-razor'],
305+
subLanguage: 'cshtml-razor',
316306
contains: [
317307
{
318308
begin: section_begin,
319309
className: SPECIAL_SYMBOL_CLASSNAME
320310
},
321-
razor_code_block,
322-
razor_block,
323-
razor_try_block,
324311
braces,
325312
closed_brace
326313
]
327314
};
328-
razor_section_block.contains = razor_section_block.contains.concat(xml_blocks);
329315
var rasor_await = {
330316
begin: "@await ",
331317
returnBegin: true,
@@ -344,7 +330,7 @@ function hljsDefineCshtmlRazor(hljs) {
344330
};
345331

346332
var result = {
347-
aliases: ['cshtml'],
333+
aliases: ['cshtml','razor','razor-cshtml'],
348334
contains: [
349335
razor_directives,
350336
razor_block,
@@ -369,10 +355,11 @@ function hljsDefineCshtmlRazor(hljs) {
369355
};
370356
result.contains = result.contains.concat(xml_blocks);
371357

372-
[razor_block, razor_code_block]
358+
[razor_block, razor_code_block, razor_try_block]
373359
.forEach(function(mode) {
374360
var razorModes = result.contains.filter(function(c) { return c !== mode; });
375-
mode.contains.splice.apply(mode.contains, [1, 0].concat(razorModes));
361+
var replacerIndex = mode.contains.indexOf(CONTENT_REPLACER);
362+
mode.contains.splice.apply(mode.contains, [replacerIndex, 1].concat(razorModes));
376363
});
377364

378365
return result;

test/index.html

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
<title></title>
1010
<meta name="description" content="">
1111
<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>
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>
1515
<script type="text/javascript">
1616
hljs.registerLanguage('cshtml-razor', window.hljsDefineCshtmlRazor);
1717
hljs.initHighlightingOnLoad();
@@ -52,7 +52,13 @@
5252
5353
@@escapedat
5454
</code></pre>
55-
<pre><code class="hljs cshtml"></code></pre>
55+
<pre><code class="hljs cshtml">
56+
@section Footer {
57+
&lt;div class="view"&gt;
58+
footer
59+
&lt;/div&gt;
60+
}
61+
</code></pre>
5662
<script src="" async defer></script>
5763
</body>
5864
</html>

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,10 @@
88
<span class="hljs-keyword">var</span> inCSharp = <span class="hljs-literal">true</span>;
99
</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">
1010
</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>
12+
13+
<span class="cshtml-razor"></span><span class="hljs-built_in">@section Test{</span><span class="cshtml-razor">
14+
var inCSharp = true;
15+
<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>
16+
<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>content<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
1117
</span><span class="hljs-built_in">}</span>

test/markup/razor-in-razor.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,10 @@
88
var inCSharp = true;
99
@<text>xml</text>
1010
<div class="foo">content</div>
11+
}
12+
13+
@section Test{
14+
var inCSharp = true;
15+
@<text>xml</text>
16+
<div class="foo">content</div>
1117
}

0 commit comments

Comments
 (0)