diff --git a/docs/languages.md b/docs/languages.md index 80af8c984..d101d1b84 100644 --- a/docs/languages.md +++ b/docs/languages.md @@ -114,6 +114,7 @@ export type Lang = | 'handlebars' | 'hbs' | 'haskell' | 'hs' | 'hcl' + | 'hjson' | 'hlsl' | 'html' | 'http' diff --git a/packages/shiki/languages/hjson.tmLanguage.json b/packages/shiki/languages/hjson.tmLanguage.json new file mode 100644 index 000000000..31e16d829 --- /dev/null +++ b/packages/shiki/languages/hjson.tmLanguage.json @@ -0,0 +1,819 @@ +{ + "fileTypes": ["hjson"], + "foldingStartMarker": "(?x: # turn on extended mode\n ^ # a line beginning with\n \\s* # some optional space\n [{\\[] # the start of an object or array\n (?! # but not followed by\n .* # whatever\n [}\\]] # and the close of an object or array\n ,? # an optional comma\n \\s* # some optional space\n $ # at the end of the line\n )\n | # ...or...\n [{\\[] # the start of an object or array\n \\s* # some optional space\n $ # at the end of the line\n )", + "foldingStopMarker": "(?x: # turn on extended mode\n ^ # a line beginning with\n \\s* # some optional space\n [}\\]] # and the close of an object or array\n )", + "keyEquivalent": "^~J", + "name": "Hjson", + "patterns": [ + { + "include": "#comments" + }, + { + "include": "#value" + }, + { + "match": "[^\\s]", + "name": "invalid.illegal.excess-characters.hjson" + } + ], + "repository": { + "array": { + "begin": "\\[", + "beginCaptures": { + "0": { + "name": "punctuation.definition.array.begin.hjson" + } + }, + "end": "(\\])(?:\\s*([^,\\s]+))?", + "endCaptures": { + "1": { + "name": "punctuation.definition.array.end.hjson" + }, + "2": { + "name": "invalid.illegal.value.hjson" + } + }, + "name": "meta.structure.array.hjson", + "patterns": [ + { + "include": "#arrayContent" + } + ] + }, + "arrayArray": { + "begin": "\\[", + "beginCaptures": { + "0": { + "name": "punctuation.definition.array.begin.hjson" + } + }, + "end": "(\\])(?:\\s*([^,\\s\\]]+))?", + "endCaptures": { + "1": { + "name": "punctuation.definition.array.end.hjson" + }, + "2": { + "name": "invalid.illegal.value.hjson" + } + }, + "name": "meta.structure.array.hjson", + "patterns": [ + { + "include": "#arrayContent" + } + ] + }, + "arrayConstant": { + "captures": { + "1": { + "name": "constant.language.hjson" + }, + "2": { + "name": "punctuation.separator.array.after-const.hjson" + } + }, + "match": "\\b(true|false|null)(?:[\\t ]*(?=,)|[\\t ]*(?:(,)[\\t ]*)?(?=$|#|/\\*|//|\\]))" + }, + "arrayContent": { + "name": "meta.structure.array.hjson", + "patterns": [ + { + "include": "#comments" + }, + { + "include": "#arrayValue" + }, + { + "begin": "(?<=\\[)|,", + "beginCaptures": { + "1": { + "name": "punctuation.separator.dictionary.pair.hjson" + } + }, + "end": "(?=[^\\s,/#])|(?=/[^/*])", + "patterns": [ + { + "include": "#comments" + }, + { + "match": ",", + "name": "invalid.illegal.extra-comma.hjson" + } + ] + }, + { + "match": ",", + "name": "punctuation.separator.array.hjson" + }, + { + "match": "[^\\s\\]]", + "name": "invalid.illegal.expected-array-separator.hjson" + } + ] + }, + "arrayJstring": { + "patterns": [ + { + "begin": "\"", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.hjson" + } + }, + "end": "(\")(?:\\s*((?:[^,\\s\\]#/]|/[^/*])+))?", + "endCaptures": { + "1": { + "name": "punctuation.definition.string.end.hjson" + }, + "2": { + "name": "invalid.illegal.value.hjson" + } + }, + "name": "string.quoted.double.hjson", + "patterns": [ + { + "include": "#jstringDoubleContent" + } + ] + }, + { + "begin": "'", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.hjson" + } + }, + "end": "(')(?:\\s*((?:[^,\\s\\]#/]|/[^/*])+))?", + "endCaptures": { + "1": { + "name": "punctuation.definition.string.end.hjson" + }, + "2": { + "name": "invalid.illegal.value.hjson" + } + }, + "name": "string.quoted.single.hjson", + "patterns": [ + { + "include": "#jstringSingleContent" + } + ] + } + ] + }, + "arrayMstring": { + "begin": "'''", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.hjson" + } + }, + "end": "(''')(?:\\s*((?:[^,\\s\\]#/]|/[^/*])+))?", + "endCaptures": { + "1": { + "name": "punctuation.definition.string.end.hjson" + }, + "2": { + "name": "invalid.illegal.value.hjson" + } + }, + "name": "string.quoted.multiline.hjson" + }, + "arrayNumber": { + "captures": { + "1": { + "name": "constant.numeric.hjson" + }, + "2": { + "name": "punctuation.separator.array.after-num.hjson" + } + }, + "match": "(-?(?:0|(?:[1-9]\\d*))(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)(?:[\\t ]*(?=,)|[\\t ]*(?:(,)[\\t ]*)?(?=$|#|/\\*|//|\\]))" + }, + "arrayObject": { + "begin": "\\{", + "beginCaptures": { + "0": { + "name": "punctuation.definition.dictionary.begin.hjson" + } + }, + "end": "(\\}|(?<=\\}))(?:\\s*([^,\\s\\]]+))?", + "endCaptures": { + "1": { + "name": "punctuation.definition.dictionary.end.hjson" + }, + "2": { + "name": "invalid.illegal.value.hjson" + } + }, + "name": "meta.structure.dictionary.hjson", + "patterns": [ + { + "include": "#objectContent" + } + ] + }, + "arrayString": { + "patterns": [ + { + "include": "#arrayMstring" + }, + { + "include": "#arrayJstring" + }, + { + "include": "#ustring" + } + ] + }, + "arrayValue": { + "patterns": [ + { + "include": "#arrayNumber" + }, + { + "include": "#arrayConstant" + }, + { + "include": "#arrayString" + }, + { + "include": "#arrayObject" + }, + { + "include": "#arrayArray" + } + ] + }, + "comments": { + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.definition.comment.hjson" + } + }, + "match": "^\\s*(#).*(?:\\n)?", + "name": "comment.line.hash" + }, + { + "captures": { + "1": { + "name": "punctuation.definition.comment.hjson" + } + }, + "match": "^\\s*(//).*(?:\\n)?", + "name": "comment.line.double-slash" + }, + { + "begin": "^\\s*/\\*", + "beginCaptures": { + "1": { + "name": "punctuation.definition.comment.hjson" + } + }, + "end": "\\*/(?:\\s*\\n)?", + "endCaptures": { + "1": { + "name": "punctuation.definition.comment.hjson" + } + }, + "name": "comment.block.double-slash" + }, + { + "captures": { + "1": { + "name": "punctuation.definition.comment.hjson" + } + }, + "match": "(#)[^\\n]*", + "name": "comment.line.hash" + }, + { + "captures": { + "1": { + "name": "punctuation.definition.comment.hjson" + } + }, + "match": "(//)[^\\n]*", + "name": "comment.line.double-slash" + }, + { + "begin": "/\\*", + "beginCaptures": { + "1": { + "name": "punctuation.definition.comment.hjson" + } + }, + "end": "\\*/", + "endCaptures": { + "1": { + "name": "punctuation.definition.comment.hjson" + } + }, + "name": "comment.block.double-slash" + } + ] + }, + "commentsNewline": { + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.definition.comment.hjson" + } + }, + "match": "(#).*\\n", + "name": "comment.line.hash" + }, + { + "captures": { + "1": { + "name": "punctuation.definition.comment.hjson" + } + }, + "match": "(//).*\\n", + "name": "comment.line.double-slash" + }, + { + "begin": "/\\*", + "beginCaptures": { + "1": { + "name": "punctuation.definition.comment.hjson" + } + }, + "end": "\\*/(\\s*\\n)?", + "endCaptures": { + "1": { + "name": "punctuation.definition.comment.hjson" + } + }, + "name": "comment.block.double-slash" + } + ] + }, + "constant": { + "captures": { + "1": { + "name": "constant.language.hjson" + } + }, + "match": "\\b(true|false|null)[\\t ]*(?=$|#|/\\*|//|\\])" + }, + "jstring": { + "patterns": [ + { + "begin": "\"", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.hjson" + } + }, + "end": "(\")(?:\\s*((?:[^\\s#/]|/[^/*]).*)$)?", + "endCaptures": { + "1": { + "name": "punctuation.definition.string.end.hjson" + }, + "2": { + "name": "invalid.illegal.value.hjson" + } + }, + "name": "string.quoted.double.hjson", + "patterns": [ + { + "include": "#jstringDoubleContent" + } + ] + }, + { + "begin": "'", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.hjson" + } + }, + "end": "(')(?:\\s*((?:[^\\s#/]|/[^/*]).*)$)?", + "endCaptures": { + "1": { + "name": "punctuation.definition.string.end.hjson" + }, + "2": { + "name": "invalid.illegal.value.hjson" + } + }, + "name": "string.quoted.single.hjson", + "patterns": [ + { + "include": "#jstringSingleContent" + } + ] + } + ] + }, + "jstringDoubleContent": { + "patterns": [ + { + "match": "\\\\(?:[\"'\\\\\\/bfnrt]|u[0-9a-fA-F]{4})", + "name": "constant.character.escape.hjson" + }, + { + "match": "\\\\.", + "name": "invalid.illegal.unrecognized-string-escape.hjson" + }, + { + "match": "[^\"]*[^\\n\\r\"\\\\]$", + "name": "invalid.illegal.string.hjson" + } + ] + }, + "jstringSingleContent": { + "patterns": [ + { + "match": "\\\\(?:[\"'\\\\\\/bfnrt]|u[0-9a-fA-F]{4})", + "name": "constant.character.escape.hjson" + }, + { + "match": "\\\\.", + "name": "invalid.illegal.unrecognized-string-escape.hjson" + }, + { + "match": "[^']*[^\\n\\r'\\\\]$", + "name": "invalid.illegal.string.hjson" + } + ] + }, + "key": { + "begin": "(?x:\n (\n (?:[^:,\\{\\}\\[\\]\\s\"'][^:,\\{\\}\\[\\]\\s]*) |\n (?: # json string w/ '\n '\n (?:\n [^\\\\'] | # anything but an escape character or quote\n (\\\\(?:[\"'\\\\\\/bfnrt]|u[0-9a-fA-F]{4})) | # escape characters\n (\\\\.) # bad escape characters\n )*\n '\n ) |\n (?: # json string w/ \"\n \"\n (?:\n [^\\\\\"] | # anything but an escape character or quote\n (\\\\(?:[\"'\\\\\\/bfnrt]|u[0-9a-fA-F]{4})) | # escape characters\n (\\\\.) # bad escape characters\n )*\n \"\n )\n )\n \\s*\n (?!\\n)\n ([,\\{\\}\\[\\]]*)\n )", + "beginCaptures": { + "0": { + "name": "meta.structure.key-value.begin.hjson" + }, + "1": { + "name": "support.type.property-name.hjson" + }, + "2": { + "name": "constant.character.escape.hjson" + }, + "3": { + "name": "invalid.illegal.unrecognized-string-escape.hjson" + }, + "4": { + "name": "constant.character.escape.hjson" + }, + "5": { + "name": "invalid.illegal.unrecognized-string-escape.hjson" + }, + "6": { + "name": "invalid.illegal.separator.hjson" + }, + "7": { + "name": "invalid.illegal.property-name.hjson" + } + }, + "end": "(?