mirror of https://github.com/jkjoy/sunpeiwen.git
54 lines
1.3 KiB
JavaScript
54 lines
1.3 KiB
JavaScript
|
/*
|
||
|
Language: JSON
|
||
|
Description: JSON (JavaScript Object Notation) is a lightweight data-interchange format.
|
||
|
Author: Ivan Sagalaev <maniac@softwaremaniacs.org>
|
||
|
Website: http://www.json.org
|
||
|
Category: common, protocols, web
|
||
|
*/
|
||
|
|
||
|
function json(hljs) {
|
||
|
const ATTRIBUTE = {
|
||
|
className: 'attr',
|
||
|
begin: /"(\\.|[^\\"\r\n])*"(?=\s*:)/,
|
||
|
relevance: 1.01
|
||
|
};
|
||
|
const PUNCTUATION = {
|
||
|
match: /[{}[\],:]/,
|
||
|
className: "punctuation",
|
||
|
relevance: 0
|
||
|
};
|
||
|
const LITERALS = [
|
||
|
"true",
|
||
|
"false",
|
||
|
"null"
|
||
|
];
|
||
|
// NOTE: normally we would rely on `keywords` for this but using a mode here allows us
|
||
|
// - to use the very tight `illegal: \S` rule later to flag any other character
|
||
|
// - as illegal indicating that despite looking like JSON we do not truly have
|
||
|
// - JSON and thus improve false-positively greatly since JSON will try and claim
|
||
|
// - all sorts of JSON looking stuff
|
||
|
const LITERALS_MODE = {
|
||
|
scope: "literal",
|
||
|
beginKeywords: LITERALS.join(" "),
|
||
|
};
|
||
|
|
||
|
return {
|
||
|
name: 'JSON',
|
||
|
keywords:{
|
||
|
literal: LITERALS,
|
||
|
},
|
||
|
contains: [
|
||
|
ATTRIBUTE,
|
||
|
PUNCTUATION,
|
||
|
hljs.QUOTE_STRING_MODE,
|
||
|
LITERALS_MODE,
|
||
|
hljs.C_NUMBER_MODE,
|
||
|
hljs.C_LINE_COMMENT_MODE,
|
||
|
hljs.C_BLOCK_COMMENT_MODE
|
||
|
],
|
||
|
illegal: '\\S'
|
||
|
};
|
||
|
}
|
||
|
|
||
|
export { json as default };
|