You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.4 KiB
63 lines
1.4 KiB
/* |
|
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 |
|
*/ |
|
|
|
function json(hljs) { |
|
const LITERALS = { |
|
literal: 'true false null' |
|
}; |
|
const ALLOWED_COMMENTS = [ |
|
hljs.C_LINE_COMMENT_MODE, |
|
hljs.C_BLOCK_COMMENT_MODE |
|
]; |
|
const TYPES = [ |
|
hljs.QUOTE_STRING_MODE, |
|
hljs.C_NUMBER_MODE |
|
]; |
|
const VALUE_CONTAINER = { |
|
end: ',', |
|
endsWithParent: true, |
|
excludeEnd: true, |
|
contains: TYPES, |
|
keywords: LITERALS |
|
}; |
|
const OBJECT = { |
|
begin: /\{/, |
|
end: /\}/, |
|
contains: [ |
|
{ |
|
className: 'attr', |
|
begin: /"/, |
|
end: /"/, |
|
contains: [hljs.BACKSLASH_ESCAPE], |
|
illegal: '\\n' |
|
}, |
|
hljs.inherit(VALUE_CONTAINER, { |
|
begin: /:/ |
|
}) |
|
].concat(ALLOWED_COMMENTS), |
|
illegal: '\\S' |
|
}; |
|
const ARRAY = { |
|
begin: '\\[', |
|
end: '\\]', |
|
contains: [hljs.inherit(VALUE_CONTAINER)], // inherit is a workaround for a bug that makes shared modes with endsWithParent compile only the ending of one of the parents |
|
illegal: '\\S' |
|
}; |
|
TYPES.push(OBJECT, ARRAY); |
|
ALLOWED_COMMENTS.forEach(function(rule) { |
|
TYPES.push(rule); |
|
}); |
|
return { |
|
name: 'JSON', |
|
contains: TYPES, |
|
keywords: LITERALS, |
|
illegal: '\\S' |
|
}; |
|
} |
|
|
|
module.exports = json;
|
|
|