highlightjs-cshtml-razor
Advanced tools
Comparing version 1.0.0 to 1.1.0
/* | ||
* Language: cshtml-razor | ||
* Requires: xml.js, cs.js | ||
* Requires: xml.js, cs.js, css.js, javascript.js | ||
* Author: Roman Resh <romanresh@live.com> | ||
*/ | ||
var module = module ? module : {}; // shim for browser use | ||
var module = module ? module : {}; | ||
function hljsDefineCshtmlRazor(hljs) { | ||
var SPECIAL_SYMBOL_CLASSNAME = "built_in"; | ||
var BLOCK_TEXT = { | ||
begin: "[@]{0,1}<text>", | ||
returnBegin: true, | ||
end: "</text>", | ||
returnEnd: true, | ||
subLanguage: "cshtml-razor", | ||
function getXmlBlocks(hljs, additional_blocks) { | ||
var xml_comment = hljs.COMMENT( | ||
'<!--', | ||
'-->', | ||
{ | ||
relevance: 10 | ||
} | ||
); | ||
var string = { | ||
className: 'string', | ||
variants: [ | ||
{ begin: /"/, end: /"/ }, | ||
{ begin: /'/, end: /'/ }, | ||
{ begin: /[^\s"'=<>`]+/ } | ||
], | ||
contains: additional_blocks | ||
}; | ||
var xml_tag_internal = { | ||
endsWithParent: true, | ||
illegal: /</, | ||
relevance: 0, | ||
contains: [ | ||
{ | ||
begin: "[@]{0,1}<text>", | ||
className: SPECIAL_SYMBOL_CLASSNAME | ||
className: 'attr', | ||
begin: '[A-Za-z0-9\\._:-]+', | ||
relevance: 0 | ||
}, | ||
{ | ||
begin: "</text>", | ||
className: SPECIAL_SYMBOL_CLASSNAME, | ||
endsParent: true, | ||
begin: /=\s*/, | ||
relevance: 0, | ||
contains: [string] | ||
} | ||
] | ||
}; | ||
var DIRECTIVES = { | ||
begin: "^@(model|using|inherits|inject)[^\\r\\n{\\(]*$", | ||
end: "$", | ||
return [ | ||
{ | ||
className: 'meta', | ||
begin: '<!DOCTYPE', end: '>', | ||
relevance: 10, | ||
contains: [{ begin: '\\[', end: '\\]' }] | ||
}, | ||
xml_comment, | ||
{ | ||
begin: '<\\!\\[CDATA\\[', end: '\\]\\]>', | ||
relevance: 10 | ||
}, | ||
{ | ||
className: 'meta', | ||
begin: /<\?xml/, end: /\?>/, relevance: 10 | ||
}, | ||
{ | ||
className: 'tag', | ||
begin: '<style(?=\\s|>|$)', end: '>', | ||
keywords: { name: 'style' }, | ||
contains: [xml_tag_internal], | ||
starts: { | ||
end: '</style>', returnEnd: true, | ||
subLanguage: ['css', 'xml'] | ||
} | ||
}, | ||
{ | ||
className: 'tag', | ||
begin: '<script(?=\\s|>|$)', end: '>', | ||
keywords: { name: 'script' }, | ||
contains: [xml_tag_internal], | ||
starts: { | ||
end: '\<\/script\>', returnEnd: true, | ||
subLanguage: ['actionscript', 'javascript', 'handlebars', 'xml'] | ||
} | ||
}, | ||
{ | ||
className: 'tag', | ||
begin: '</?', end: '/?>', | ||
contains: [ | ||
{ | ||
className: 'name', begin: /[^\/><\s]+/, relevance: 0 | ||
}, | ||
xml_tag_internal | ||
] | ||
} | ||
].concat(additional_blocks); | ||
} | ||
function hljsDefineCshtmlRazor(hljs) { | ||
var SPECIAL_SYMBOL_CLASSNAME = "built_in"; | ||
var CONTENT_REPLACER = {}; | ||
var closed_brace = { | ||
begin: "}", | ||
className: SPECIAL_SYMBOL_CLASSNAME, | ||
returnBegin: true, | ||
returnEnd: true, | ||
contains: [ | ||
{ | ||
begin: "@(model|using|inherits|inject)", | ||
className: SPECIAL_SYMBOL_CLASSNAME, | ||
}, | ||
{ | ||
variants: [ | ||
{ | ||
begin: "\\s+", | ||
end: "$", | ||
}, | ||
{ | ||
begin: "$" | ||
}, | ||
], | ||
className: "type", | ||
endsParent: true | ||
} | ||
] | ||
endsParent: true | ||
}; | ||
var EXCEPTIONS = { | ||
variants: [ | ||
{ begin: "@@" }, | ||
{ begin: "[a-zA-Z]+@" }, | ||
], | ||
skip: true | ||
} | ||
var ONE_LINE_EXPRESSION = { | ||
var braces = { | ||
begin: "{", | ||
end: "}", | ||
contains: [hljs.QUOTE_STRING_MODE, 'self'] | ||
}; | ||
var razor_inline_expresion = { | ||
begin: "@[a-zA-Z]+", | ||
returnBegin: true, | ||
end: "(\\r|\\n|<|\\s)", | ||
subLanguage: 'cs', | ||
end: "(\\r|\\n|<|\\s|\"|')", | ||
contains: [ | ||
@@ -87,21 +125,29 @@ { | ||
}; | ||
var ONE_LINE_AWAIT = { | ||
begin: "@await ", | ||
var razor_text_block = { | ||
begin: "[@]{0,1}<text>", | ||
returnBegin: true, | ||
subLanguage: 'cs', | ||
end: "(\\r|\\n|<|\\s)", | ||
end: "</text>", | ||
returnEnd: true, | ||
subLanguage: "cshtml-razor", | ||
contains: [ | ||
{ | ||
begin: "@await ", | ||
begin: "[@]{0,1}<text>", | ||
className: SPECIAL_SYMBOL_CLASSNAME | ||
}, | ||
{ | ||
begin: "[<\\r\\n]", | ||
endsParent: true | ||
begin: "</text>", | ||
className: SPECIAL_SYMBOL_CLASSNAME, | ||
endsParent: true, | ||
} | ||
] | ||
}; | ||
var razor_escape_at = { | ||
variants: [ | ||
{ begin: "@@" }, | ||
{ begin: "[a-zA-Z]+@" } | ||
], | ||
skip: true | ||
}; | ||
var BLOCK_ROUND_BRACKET = { | ||
var razor_parentheses_block = { | ||
begin: "@\\(", | ||
@@ -111,3 +157,3 @@ end: "\\)", | ||
returnEnd: true, | ||
subLanguage: 'cs', | ||
subLanguage: "cs", | ||
contains: [ | ||
@@ -122,5 +168,5 @@ { | ||
subLanguage: 'cs', | ||
contains: [hljs.QUOTE_STRING_MODE, BLOCK_TEXT, 'self'] | ||
contains: [hljs.QUOTE_STRING_MODE, 'self', razor_text_block] | ||
}, | ||
BLOCK_TEXT, | ||
razor_text_block, | ||
{ | ||
@@ -133,4 +179,24 @@ begin: "\\)", | ||
}; | ||
var BLOCK_FIGURE_BRACKET = { | ||
var xml_blocks = getXmlBlocks(hljs, [razor_inline_expresion, razor_parentheses_block]); | ||
var razor_directives = { | ||
begin: "^\\s*@(model|using|inherits|inject)[^\\r\\n{\\(]*$", | ||
end: "$", | ||
returnBegin: true, | ||
returnEnd: true, | ||
contains: [ | ||
{ | ||
begin: "^\\s*@(model|using|inherits|inject)", | ||
className: SPECIAL_SYMBOL_CLASSNAME | ||
}, | ||
{ | ||
variants: [ | ||
{ begin: "\\s+", end: "$", }, | ||
{ begin: "$" } | ||
], | ||
className: "type", | ||
endsParent: true | ||
} | ||
] | ||
}; | ||
var razor_block = { | ||
begin: "@\\{", | ||
@@ -146,102 +212,47 @@ returnBegin: true, | ||
}, | ||
{ | ||
begin: "{", | ||
end: "}", | ||
contains: [hljs.QUOTE_STRING_MODE, BLOCK_TEXT, 'self'] | ||
}, | ||
BLOCK_TEXT, | ||
{ | ||
begin: "\\}", | ||
className: SPECIAL_SYMBOL_CLASSNAME, | ||
endsParent: true | ||
} | ||
], | ||
CONTENT_REPLACER, | ||
closed_brace | ||
] | ||
}; | ||
var BUILT_IN_CODE_BLOCKS_VARIANTS = [ | ||
{ | ||
begin: "@for[\\s]*\\([^{]+[\\s]*{", | ||
end: "}" | ||
}, | ||
{ | ||
begin: "@if[\\s]*\\([^{]+[\\s]*{", | ||
end: "}" | ||
}, | ||
{ | ||
begin: "@switch[\\s]*\\([^{]+[\\s]*{", | ||
end: "}" | ||
}, | ||
{ | ||
begin: "@while[\\s]*\\([^{]+[\\s]*{", | ||
end: "}" | ||
}, | ||
{ | ||
begin: "@using[\\s]*\\([^{]+[\\s]*{", | ||
end: "}" | ||
}, | ||
{ | ||
begin: "@lock[\\s]*\\([^{]+[\\s]*{", | ||
end: "}" | ||
}, | ||
{ | ||
begin: "@foreach[\\s]*\\([^{]+[\\s]*{", | ||
end: "}" | ||
}, | ||
var razor_code_block_variants = [ | ||
{ begin: "@for[\\s]*\\([^{]+[\\s]*{", end: "}" }, | ||
{ begin: "@if[\\s]*\\([^{]+[\\s]*{", end: "}" }, | ||
{ begin: "@switch[\\s]*\\([^{]+[\\s]*{", end: "}" }, | ||
{ begin: "@while[\\s]*\\([^{]+[\\s]*{", end: "}" }, | ||
{ begin: "@using[\\s]*\\([^{]+[\\s]*{", end: "}" }, | ||
{ begin: "@lock[\\s]*\\([^{]+[\\s]*{", end: "}" }, | ||
{ begin: "@foreach[\\s]*\\([^{]+[\\s]*{", end: "}" }, | ||
]; | ||
var BUILT_IN_CODE_BLOCKS = { | ||
variants: BUILT_IN_CODE_BLOCKS_VARIANTS, | ||
var razor_code_block = { | ||
variants: razor_code_block_variants, | ||
returnBegin: true, | ||
returnEnd: true, | ||
subLanguage: "cshtml-razor", | ||
end: "}", | ||
subLanguage: 'cs', | ||
contains: [ | ||
{ | ||
variants: BUILT_IN_CODE_BLOCKS_VARIANTS.map(function(v) { | ||
return { | ||
begin: v.begin | ||
}; | ||
}), | ||
variants: razor_code_block_variants.map(function (v) { return { begin: v.begin }; }), | ||
returnBegin: true, | ||
contains: [ | ||
{ begin: "@", className: SPECIAL_SYMBOL_CLASSNAME }, | ||
{ | ||
variants: BUILT_IN_CODE_BLOCKS_VARIANTS.map(function(v) { | ||
return { | ||
begin: v.begin.substr(1, v.begin.length - 2) | ||
}; }), | ||
subLanguage: "cs" }, | ||
{ begin: "{", className: SPECIAL_SYMBOL_CLASSNAME } | ||
{ begin: "@", className: SPECIAL_SYMBOL_CLASSNAME }, | ||
{ | ||
variants: razor_code_block_variants.map(function (v) { return { begin: v.begin.substr(1, v.begin.length - 2) }; }), | ||
subLanguage: "cs" | ||
}, | ||
{ begin: "{", className: SPECIAL_SYMBOL_CLASSNAME } | ||
] | ||
}, | ||
CONTENT_REPLACER, | ||
{ | ||
begin: "{", | ||
end: "}", | ||
contains: [hljs.QUOTE_STRING_MODE, 'self'] | ||
}, | ||
BLOCK_TEXT, | ||
{ | ||
variants: [ | ||
{ | ||
begin: "}[\\s]*else\\sif[\\s]*\\([^\\)]+\\)[\\s]*{" | ||
}, | ||
{ | ||
begin: "}[\\s]*else[\\s]*{" | ||
} | ||
{ begin: "}[\\s]*else\\sif[\\s]*\\([^{]+[\\s]*{" }, | ||
{ begin: "}[\\s]*else[\\s]*{" } | ||
], | ||
returnBegin: true, | ||
contains: [ | ||
{ begin: "}", className: SPECIAL_SYMBOL_CLASSNAME }, | ||
{ | ||
begin: "}", | ||
className: SPECIAL_SYMBOL_CLASSNAME | ||
}, | ||
{ | ||
variants: [ | ||
{ | ||
begin: "[\\s]*else\\sif[\\s]*\\([^\\)]+\\)[\\s]*", | ||
}, | ||
{ | ||
begin: "[\\s]*else[\\s]*", | ||
}, | ||
{ begin: "[\\s]*else\\sif[\\s]*\\([^{]+[\\s]*{", }, | ||
{ begin: "[\\s]*else[\\s]*", } | ||
], | ||
@@ -256,13 +267,9 @@ subLanguage: "cs" | ||
}, | ||
{ | ||
begin: "}", | ||
className: SPECIAL_SYMBOL_CLASSNAME, | ||
endsParent: true | ||
}, | ||
braces, | ||
closed_brace, | ||
//razor_block | ||
] | ||
}; | ||
var BLOCK_TRY = { | ||
var section_begin = "@section[\\s]+[a-zA-Z0-9]+[\\s]*{"; | ||
var razor_try_block = { | ||
begin: "@try[\\s]*{", | ||
@@ -274,75 +281,54 @@ end: "}", | ||
contains: [ | ||
{ begin: "@", className: SPECIAL_SYMBOL_CLASSNAME }, | ||
{ begin: "try[\\s]*{", subLanguage: "cs" }, | ||
{ | ||
begin: "@", | ||
className: SPECIAL_SYMBOL_CLASSNAME | ||
}, | ||
{ | ||
begin: "try[\\s]*{", | ||
subLanguage: "cs" | ||
}, | ||
{ | ||
begin: "{", | ||
end: "}", | ||
contains: [hljs.QUOTE_STRING_MODE, 'self'] | ||
}, | ||
{ | ||
variants: [ | ||
{ | ||
begin: "}[\\s]*catch[\\s]*\\([^\\)]+\\)[\\s]*{" | ||
}, | ||
{ | ||
begin: "}[\\s]*finally[\\s]*{" | ||
} | ||
{ begin: "}[\\s]*catch[\\s]*\\([^\\)]+\\)[\\s]*{" }, | ||
{ begin: "}[\\s]*finally[\\s]*{" } | ||
], | ||
returnBegin: true, | ||
contains: [ | ||
{ begin: "}", className: SPECIAL_SYMBOL_CLASSNAME }, | ||
{ | ||
begin: "}", | ||
className: SPECIAL_SYMBOL_CLASSNAME | ||
}, | ||
{ | ||
variants: [ | ||
{ | ||
begin: "[\\s]*catch[\\s]*\\([^\\)]+\\)[\\s]*", | ||
}, | ||
{ | ||
begin: "[\\s]*finally[\\s]*", | ||
}, | ||
{ begin: "[\\s]*catch[\\s]*\\([^\\)]+\\)[\\s]*", }, | ||
{ begin: "[\\s]*finally[\\s]*", }, | ||
], | ||
subLanguage: "cs" | ||
}, | ||
{ | ||
begin: "{", | ||
className: SPECIAL_SYMBOL_CLASSNAME | ||
} | ||
{ begin: "{", className: SPECIAL_SYMBOL_CLASSNAME } | ||
] | ||
}, | ||
{ | ||
begin: "}", | ||
className: SPECIAL_SYMBOL_CLASSNAME, | ||
endsParent: true | ||
}, | ||
CONTENT_REPLACER, | ||
braces, | ||
closed_brace | ||
] | ||
}; | ||
var BLOCK_FUNCTIONS = { | ||
begin: "@functions[\\s]*{", | ||
end: "}", | ||
var razor_section_block = { | ||
begin: section_begin, | ||
returnBegin: true, | ||
returnEnd: true, | ||
subLanguage: "cs", | ||
end: "}", | ||
subLanguage: 'cshtml-razor', | ||
contains: [ | ||
{ | ||
begin: "@functions[\\s]*{", | ||
begin: section_begin, | ||
className: SPECIAL_SYMBOL_CLASSNAME | ||
}, | ||
braces, | ||
closed_brace | ||
] | ||
}; | ||
var rasor_await = { | ||
begin: "@await ", | ||
returnBegin: true, | ||
subLanguage: 'cs', | ||
end: "(\\r|\\n|<|\\s)", | ||
contains: [ | ||
{ | ||
begin: "{", | ||
end: "}", | ||
contains: [hljs.QUOTE_STRING_MODE, 'self'] | ||
begin: "@await ", | ||
className: SPECIAL_SYMBOL_CLASSNAME | ||
}, | ||
{ | ||
begin: "}", | ||
className: SPECIAL_SYMBOL_CLASSNAME, | ||
begin: "[<\\r\\n]", | ||
endsParent: true | ||
@@ -353,49 +339,42 @@ } | ||
var BLOCK_SECTION = { | ||
begin: "@section[\\s]+[a-zA-Z0-9]+[\\s]*{", | ||
returnBegin: true, | ||
returnEnd: true, | ||
subLanguage: "cshtml-razor", | ||
end: "}", | ||
var result = { | ||
aliases: ['cshtml','razor','razor-cshtml'], | ||
contains: [ | ||
razor_directives, | ||
razor_block, | ||
razor_code_block, | ||
razor_section_block, | ||
rasor_await, | ||
razor_try_block, | ||
razor_escape_at, | ||
razor_text_block, | ||
razor_parentheses_block, | ||
{ | ||
begin: "@section[\\s]+[a-zA-Z0-9]+[\\s]*{", | ||
className: SPECIAL_SYMBOL_CLASSNAME | ||
className: 'meta', | ||
begin: '<!DOCTYPE', end: '>', | ||
relevance: 10, | ||
contains: [{ begin: '\\[', end: '\\]' }] | ||
}, | ||
{ | ||
begin: "{", | ||
end: "}", | ||
contains: [hljs.QUOTE_STRING_MODE, 'self'] | ||
}, | ||
{ | ||
begin: "}", | ||
className: SPECIAL_SYMBOL_CLASSNAME, | ||
endsParent: true | ||
begin: '<\\!\\[CDATA\\[', end: '\\]\\]>', | ||
relevance: 10 | ||
} | ||
] | ||
} | ||
}; | ||
result.contains = result.contains.concat(xml_blocks); | ||
return { | ||
subLanguage: 'xml', | ||
contains: [ | ||
hljs.COMMENT("@\\*", "\\*@"), | ||
EXCEPTIONS, | ||
DIRECTIVES, | ||
BLOCK_FUNCTIONS, | ||
BLOCK_SECTION, | ||
BLOCK_TRY, | ||
BUILT_IN_CODE_BLOCKS, | ||
ONE_LINE_AWAIT, | ||
ONE_LINE_EXPRESSION, | ||
BLOCK_ROUND_BRACKET, | ||
BLOCK_FIGURE_BRACKET, | ||
BLOCK_TEXT | ||
] | ||
}; | ||
[razor_block, razor_code_block, razor_try_block] | ||
.forEach(function(mode) { | ||
var razorModes = result.contains.filter(function(c) { return c !== mode; }); | ||
var replacerIndex = mode.contains.indexOf(CONTENT_REPLACER); | ||
mode.contains.splice.apply(mode.contains, [replacerIndex, 1].concat(razorModes)); | ||
}); | ||
return result; | ||
} | ||
module.exports = function(hljs) { | ||
module.exports = function (hljs) { | ||
hljs.registerLanguage('cshtml-razor', hljsDefineCshtmlRazor); | ||
}; | ||
module.exports.definer = hljsDefineCshtmlRazor; | ||
module.exports.definer = hljsDefineCshtmlRazor; |
{ | ||
"name": "highlightjs-cshtml-razor", | ||
"version": "1.0.0", | ||
"version": "1.1.0", | ||
"description": "highlight.js syntax definition for ASP.NET Razor CSHTML language", | ||
@@ -13,2 +13,5 @@ "main": "cshtml-razor.js", | ||
}, | ||
"files": [ | ||
"cshtml-razor.js" | ||
], | ||
"keywords": [ | ||
@@ -15,0 +18,0 @@ "cshtml", |
@@ -16,3 +16,3 @@ `highlight.js` syntax definition for Razor CSHTML. | ||
```html | ||
<script type="text/javascript" src="/path/to/highlight.pack.js"></script> | ||
<script type="text/javascript" src="/path/to/highlightjs/highlight.pack.js"></script> | ||
<script type="text/javascript" src="/path/to/highlightjs-cshtml-razor/cshtml-razor.js"></script> | ||
@@ -19,0 +19,0 @@ <script type="text/javascript"> |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
0
13197
3
364
1