Added support for AWK (#3375)

This commit is contained in:
Michael Schmidt 2022-03-21 15:20:08 +01:00 committed by GitHub
parent 33f2cf9510
commit a1340666e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 534 additions and 2 deletions

File diff suppressed because one or more lines are too long

View File

@ -330,6 +330,10 @@
"title": "CSV",
"owner": "RunDevelopment"
},
"cue": {
"title": "CUE",
"owner": "RunDevelopment"
},
"cypher": {
"title": "Cypher",
"owner": "RunDevelopment"

84
components/prism-cue.js Normal file
View File

@ -0,0 +1,84 @@
(function (Prism) {
// https://cuelang.org/docs/references/spec/
// eslint-disable-next-line regexp/strict
var stringEscape = /\\(?:(?!\2)|\2(?:[^()\r\n]|\([^()]*\)))/.source;
// eslint-disable-next-line regexp/strict
var stringTypes = /"""(?:[^\\"]|"(?!""\2)|<esc>)*"""/.source +
// eslint-disable-next-line regexp/strict
'|' + /'''(?:[^\\']|'(?!''\2)|<esc>)*'''/.source +
// eslint-disable-next-line regexp/strict
'|' + /"(?:[^\\\r\n"]|"(?!\2)|<esc>)*"/.source +
// eslint-disable-next-line regexp/strict
'|' + /'(?:[^\\\r\n']|'(?!\2)|<esc>)*'/.source;
var stringLiteral = '(?:' + stringTypes.replace(/<esc>/g, stringEscape) + ')';
Prism.languages.cue = {
'comment': {
pattern: /\/\/.*/,
greedy: true
},
'string-literal': {
// eslint-disable-next-line regexp/strict
pattern: RegExp(/(^|[^#"'\\])(#*)/.source + stringLiteral + /(?!["'])\2/.source),
lookbehind: true,
greedy: true,
inside: {
// I'm using dirty hack here. We have to know the number hashes at the start of the string somehow,
// but we can't look back. So instead, we will use a lookahead, go to the end of the string, and
// capture the hashes at the end of the string.
'escape': {
pattern: /(?=[\s\S]*["'](#*)$)\\\1(?:U[a-fA-F0-9]{1,8}|u[a-fA-F0-9]{1,4}|x[a-fA-F0-9]{1,2}|\d{2,3}|[^(])/,
greedy: true,
alias: 'string'
},
'interpolation': {
pattern: /(?=[\s\S]*["'](#*)$)\\\1\([^()]*\)/,
greedy: true,
inside: {
'punctuation': /^\\#*\(|\)$/,
'expression': {
pattern: /[\s\S]+/,
inside: null
}
}
},
'string': /[\s\S]+/
}
},
'keyword': {
pattern: /(^|[^\w$])(?:for|if|import|in|let|null|package)(?![\w$])/,
lookbehind: true
},
'boolean': {
pattern: /(^|[^\w$])(?:false|true)(?![\w$])/,
lookbehind: true
},
'builtin': {
pattern: /(^|[^\w$])(?:bool|bytes|float|float(?:32|64)|u?int(?:8|16|32|64|128)?|number|rune|string)(?![\w$])/,
lookbehind: true
},
'attribute': {
pattern: /@[\w$]+(?=\s*\()/,
alias: 'function'
},
'function': {
pattern: /(^|[^\w$])[a-z_$][\w$]*(?=\s*\()/i,
lookbehind: true
},
'number': {
pattern: /(^|[^\w$.])(?:0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|0[xX][0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*|(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[eE][+-]?\d+(?:_\d+)*)?(?:[KMGTP]i?)?)(?![\w$])/,
lookbehind: true
},
'operator': /\.{3}|_\|_|&&?|\|\|?|[=!]~|[<>=!]=?|[+\-*/?]/,
'punctuation': /[()[\]{},.:]/
};
Prism.languages.cue['string-literal'].inside.interpolation.inside.expression.inside = Prism.languages.cue;
}(Prism));

1
components/prism-cue.min.js vendored Normal file
View File

@ -0,0 +1 @@
!function(e){var n="(?:"+('"""(?:[^\\\\"]|"(?!""\\2)|<esc>)*"""|'+"'''(?:[^\\\\']|'(?!''\\2)|<esc>)*'''|\"(?:[^\\\\\r\n\"]|\"(?!\\2)|<esc>)*\"|'(?:[^\\\\\r\n']|'(?!\\2)|<esc>)*'").replace(/<esc>/g,"\\\\(?:(?!\\2)|\\2(?:[^()\r\n]|\\([^()]*\\)))")+")";e.languages.cue={comment:{pattern:/\/\/.*/,greedy:!0},"string-literal":{pattern:RegExp("(^|[^#\"'\\\\])(#*)"+n+"(?![\"'])\\2"),lookbehind:!0,greedy:!0,inside:{escape:{pattern:/(?=[\s\S]*["'](#*)$)\\\1(?:U[a-fA-F0-9]{1,8}|u[a-fA-F0-9]{1,4}|x[a-fA-F0-9]{1,2}|\d{2,3}|[^(])/,greedy:!0,alias:"string"},interpolation:{pattern:/(?=[\s\S]*["'](#*)$)\\\1\([^()]*\)/,greedy:!0,inside:{punctuation:/^\\#*\(|\)$/,expression:{pattern:/[\s\S]+/,inside:null}}},string:/[\s\S]+/}},keyword:{pattern:/(^|[^\w$])(?:for|if|import|in|let|null|package)(?![\w$])/,lookbehind:!0},boolean:{pattern:/(^|[^\w$])(?:false|true)(?![\w$])/,lookbehind:!0},builtin:{pattern:/(^|[^\w$])(?:bool|bytes|float|float(?:32|64)|u?int(?:8|16|32|64|128)?|number|rune|string)(?![\w$])/,lookbehind:!0},attribute:{pattern:/@[\w$]+(?=\s*\()/,alias:"function"},function:{pattern:/(^|[^\w$])[a-z_$][\w$]*(?=\s*\()/i,lookbehind:!0},number:{pattern:/(^|[^\w$.])(?:0b[01]+(?:_[01]+)*|0o[0-7]+(?:_[0-7]+)*|0[xX][0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*|(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[eE][+-]?\d+(?:_\d+)*)?(?:[KMGTP]i?)?)(?![\w$])/,lookbehind:!0},operator:/\.{3}|_\|_|&&?|\|\|?|[=!]~|[<>=!]=?|[+\-*/?]/,punctuation:/[()[\]{},.:]/},e.languages.cue["string-literal"].inside.interpolation.inside.expression.inside=e.languages.cue}(Prism);

23
examples/prism-cue.html Normal file
View File

@ -0,0 +1,23 @@
<h2>Full example</h2>
<pre><code>#Spec: {
kind: string
name: {
first: !="" // must be specified and non-empty
middle?: !="" // optional, but must be non-empty when specified
last: !=""
}
// The minimum must be strictly smaller than the maximum and vice versa.
minimum?: int & &lt;maximum
maximum?: int & >minimum
}
// A spec is of type #Spec
spec: #Spec
spec: {
knid: "Homo Sapiens" // error, misspelled field
name: first: "Jane"
name: last: "Doe"
}</code></pre>

View File

@ -71,6 +71,7 @@
"csp": "Content-Security-Policy",
"css-extras": "CSS Extras",
"csv": "CSV",
"cue": "CUE",
"dataweave": "DataWeave",
"dax": "DAX",
"django": "Django/Jinja2",

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,20 @@
@protobuf(proto3)
@jsonschema(id="https://example.org/mystruct1.json")
----------------------------------------------------
[
["attribute", "@protobuf"],
["punctuation", "("],
"proto3",
["punctuation", ")"],
["attribute", "@jsonschema"],
["punctuation", "("],
"id",
["operator", "="],
["string-literal", [
["string", "\"https://example.org/mystruct1.json\""]
]],
["punctuation", ")"]
]

View File

@ -0,0 +1,9 @@
true
false
----------------------------------------------------
[
["boolean", "true"],
["boolean", "false"]
]

View File

@ -0,0 +1,74 @@
// Types
null // The null type and value
bool // All boolean values
int // All integral numbers
float // All decimal floating-point numbers
string // Any valid UTF-8 sequence
bytes // Any valid byte sequence
// Derived Value
number // int | float
uint // >=0
uint8 // >=0 & <=255
int8 // >=-128 & <=127
uint16 // >=0 & <=65536
int16 // >=-32_768 & <=32_767
rune // >=0 & <=0x10FFFF
uint32 // >=0 & <=4_294_967_296
int32 // >=-2_147_483_648 & <=2_147_483_647
uint64 // >=0 & <=18_446_744_073_709_551_615
int64 // >=-9_223_372_036_854_775_808 & <=9_223_372_036_854_775_807
uint128 // >=0 & <=340_282_366_920_938_463_463_374_607_431_768_211_455
int128 // >=-170_141_183_460_469_231_731_687_303_715_884_105_728 &
// <=170_141_183_460_469_231_731_687_303_715_884_105_727
float32 // >=-3.40282346638528859811704183484516925440e+38 &
// <=3.40282346638528859811704183484516925440e+38
float64 // >=-1.797693134862315708145274237317043567981e+308 &
// <=1.797693134862315708145274237317043567981e+308
----------------------------------------------------
[
["comment", "// Types"],
["keyword", "null"], ["comment", "// The null type and value"],
["builtin", "bool"], ["comment", "// All boolean values"],
["builtin", "int"], ["comment", "// All integral numbers"],
["builtin", "float"], ["comment", "// All decimal floating-point numbers"],
["builtin", "string"], ["comment", "// Any valid UTF-8 sequence"],
["builtin", "bytes"], ["comment", "// Any valid byte sequence"],
["comment", "// Derived Value"],
["builtin", "number"],
["comment", "// int | float"],
["builtin", "uint"],
["comment", "// >=0"],
["builtin", "uint8"],
["comment", "// >=0 & <=255"],
["builtin", "int8"],
["comment", "// >=-128 & <=127"],
["builtin", "uint16"],
["comment", "// >=0 & <=65536"],
["builtin", "int16"],
["comment", "// >=-32_768 & <=32_767"],
["builtin", "rune"],
["comment", "// >=0 & <=0x10FFFF"],
["builtin", "uint32"],
["comment", "// >=0 & <=4_294_967_296"],
["builtin", "int32"],
["comment", "// >=-2_147_483_648 & <=2_147_483_647"],
["builtin", "uint64"],
["comment", "// >=0 & <=18_446_744_073_709_551_615"],
["builtin", "int64"],
["comment", "// >=-9_223_372_036_854_775_808 & <=9_223_372_036_854_775_807"],
["builtin", "uint128"],
["comment", "// >=0 & <=340_282_366_920_938_463_463_374_607_431_768_211_455"],
["builtin", "int128"],
["comment", "// >=-170_141_183_460_469_231_731_687_303_715_884_105_728 &"],
["comment", "// <=170_141_183_460_469_231_731_687_303_715_884_105_727"],
["builtin", "float32"],
["comment", "// >=-3.40282346638528859811704183484516925440e+38 &"],
["comment", "// <=3.40282346638528859811704183484516925440e+38"],
["builtin", "float64"],
["comment", "// >=-1.797693134862315708145274237317043567981e+308 &"],
["comment", "// <=1.797693134862315708145274237317043567981e+308"]
]

View File

@ -0,0 +1,7 @@
// comment
----------------------------------------------------
[
["comment", "// comment"]
]

View File

@ -0,0 +1,12 @@
math.Sin(x)
----------------------------------------------------
[
"math",
["punctuation", "."],
["function", "Sin"],
["punctuation", "("],
"x",
["punctuation", ")"]
]

View File

@ -0,0 +1,19 @@
for
if
import
in
let
null
package
----------------------------------------------------
[
["keyword", "for"],
["keyword", "if"],
["keyword", "import"],
["keyword", "in"],
["keyword", "let"],
["keyword", "null"],
["keyword", "package"]
]

View File

@ -0,0 +1,39 @@
42
1.5G // 1_000_000_000
1.3Ki // 1.3 * 1024 = trunc(1331.2) = 1331
170_141_183_460_469_231_731_687_303_715_884_105_727
0xBad_Face
0o755
0b0101_0001
0.
72.40
072.40 // == 72.40
2.71828
1.e+0
6.67428e-11
1E6
.25
.12345E+5
----------------------------------------------------
[
["number", "42"],
["number", "1.5G"], ["comment", "// 1_000_000_000"],
["number", "1.3Ki"], ["comment", "// 1.3 * 1024 = trunc(1331.2) = 1331"],
["number", "170_141_183_460_469_231_731_687_303_715_884_105_727"],
["number", "0xBad_Face"],
["number", "0o755"],
["number", "0b0101_0001"],
["number", "0."],
["number", "72.40"],
["number", "072.40"], ["comment", "// == 72.40"],
["number", "2.71828"],
["number", "1.e+0"],
["number", "6.67428e-11"],
["number", "1E6"],
["number", ".25"],
["number", ".12345E+5"]
]

View File

@ -0,0 +1,32 @@
+ - * /
< <= > >= == != =~ !~
&& || & |
! ? =
_|_
...
----------------------------------------------------
[
["operator", "+"],
["operator", "-"],
["operator", "*"],
["operator", "/"],
["operator", "<"],
["operator", "<="],
["operator", ">"],
["operator", ">="],
["operator", "=="],
["operator", "!="],
["operator", "=~"],
["operator", "!~"],
["operator", "&&"], ["operator", "||"], ["operator", "&"], ["operator", "|"],
["operator", "!"], ["operator", "?"], ["operator", "="],
["operator", "_|_"],
["operator", "..."]
]

View File

@ -0,0 +1,17 @@
( ) [ ] { }
, . :
----------------------------------------------------
[
["punctuation", "("],
["punctuation", ")"],
["punctuation", "["],
["punctuation", "]"],
["punctuation", "{"],
["punctuation", "}"],
["punctuation", ","],
["punctuation", "."],
["punctuation", ":"]
]

View File

@ -0,0 +1,190 @@
'a\000\xab'
'\007'
'\377'
'\xa' // illegal: too few hexadecimal digits
"\n"
"\""
'Hello, world!\n'
"Hello, \( name )!"
"日本語"
"\u65e5本\U00008a9e"
'\xff\u00FF'
"\uD800" // illegal: surrogate half (TODO: probably should allow)
"\U00110000" // illegal: invalid Unicode code point
#"This is not an \(interpolation)"#
#"This is an \#(interpolation)"#
#"The sequence "\U0001F604" renders as \#U0001F604."#
"日本語" // UTF-8 input text
'日本語' // UTF-8 input text as byte sequence
"\u65e5\u672c\u8a9e" // the explicit Unicode code points
"\U000065e5\U0000672c\U00008a9e" // the explicit Unicode code points
'\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e' // the explicit UTF-8 bytes
"""
lily:
out of the water
out of itself
bass
picking bugs
off the moon
Nick Virgilio, Selected Haiku, 1988
"""
----------------------------------------------------
[
["string-literal", [
["string", "'a"],
["escape", "\\000"],
["escape", "\\xab"],
["string", "'"]
]],
["string-literal", [
["string", "'"],
["escape", "\\007"],
["string", "'"]
]],
["string-literal", [
["string", "'"],
["escape", "\\377"],
["string", "'"]
]],
["string-literal", [
["string", "'"],
["escape", "\\xa"],
["string", "'"]
]],
["comment", "// illegal: too few hexadecimal digits"],
["string-literal", [
["string", "\""],
["escape", "\\n"],
["string", "\""]
]],
["string-literal", [
["string", "\""],
["escape", "\\\""],
["string", "\""]
]],
["string-literal", [
["string", "'Hello, world!"],
["escape", "\\n"],
["string", "'"]
]],
["string-literal", [
["string", "\"Hello, "],
["interpolation", [
["punctuation", "\\("],
["expression", [" name "]],
["punctuation", ")"]
]],
["string", "!\""]
]],
["string-literal", [
["string", "\"日本語\""]
]],
["string-literal", [
["string", "\""],
["escape", "\\u65e5"],
["string", "本"],
["escape", "\\U00008a9e"],
["string", "\""]
]],
["string-literal", [
["string", "'"],
["escape", "\\xff"],
["escape", "\\u00FF"],
["string", "'"]
]],
["string-literal", [
["string", "\""],
["escape", "\\uD800"],
["string", "\""]
]],
["comment", "// illegal: surrogate half (TODO: probably should allow)"],
["string-literal", [
["string", "\""],
["escape", "\\U00110000"],
["string", "\""]
]],
["comment", "// illegal: invalid Unicode code point"],
["string-literal", [
["string", "#\"This is not an \\(interpolation)\"#"]
]],
["string-literal", [
["string", "#\"This is an "],
["interpolation", [
["punctuation", "\\#("],
["expression", ["interpolation"]],
["punctuation", ")"]
]],
["string", "\"#"]
]],
["string-literal", [
["string", "#\"The sequence \"\\U0001F604\" renders as "],
["escape", "\\#U0001F604"],
["string", ".\"#"]
]],
["string-literal", [
["string", "\"日本語\""]
]],
["comment", "// UTF-8 input text"],
["string-literal", [
["string", "'日本語'"]
]],
["comment", "// UTF-8 input text as byte sequence"],
["string-literal", [
["string", "\""],
["escape", "\\u65e5"],
["escape", "\\u672c"],
["escape", "\\u8a9e"],
["string", "\""]
]],
["comment", "// the explicit Unicode code points"],
["string-literal", [
["string", "\""],
["escape", "\\U000065e5"],
["escape", "\\U0000672c"],
["escape", "\\U00008a9e"],
["string", "\""]
]],
["comment", "// the explicit Unicode code points"],
["string-literal", [
["string", "'"],
["escape", "\\xe6"],
["escape", "\\x97"],
["escape", "\\xa5"],
["escape", "\\xe6"],
["escape", "\\x9c"],
["escape", "\\xac"],
["escape", "\\xe8"],
["escape", "\\xaa"],
["escape", "\\x9e"],
["string", "'"]
]],
["comment", "// the explicit UTF-8 bytes"],
["string-literal", [
["string", "\"\"\"\r\n lily:\r\n out of the water\r\n out of itself\r\n\r\n bass\r\n picking bugs\r\n off the moon\r\n —Nick Virgilio, Selected Haiku, 1988\r\n \"\"\""]
]]
]