1 | hljs.registerLanguage("wren",(()=>{"use strict";function e(e){
|
2 | return e?"string"==typeof e?e:e.source:null}function s(...s){
|
3 | return s.map((s=>e(s))).join("")}function a(...s){return"("+((e=>{
|
4 | const s=e[e.length-1]
|
5 | ;return"object"==typeof s&&s.constructor===Object?(e.splice(e.length-1,1),s):{}
|
6 | })(s).capture?"":"?:")+s.map((s=>e(s))).join("|")+")"}return e=>{
|
7 | const n=/[a-zA-Z]\w*/,t=["as","break","class","construct","continue","else","for","foreign","if","import","in","is","return","static","var","while"],c=["true","false","null"],r=["this","super"],i=["-","~",/\*/,"%",/\.\.\./,/\.\./,/\+/,"<<",">>",">=","<=","<",">",/\^/,/!=/,/!/,/\bis\b/,"==","&&","&",/\|\|/,/\|/,/\?:/,"="],o={
|
8 | relevance:0,match:s(/\b(?!(if|while|for|else|super)\b)/,n,/(?=\s*[({])/),
|
9 | className:"title.function"},l={
|
10 | match:s(a(s(/\b(?!(if|while|for|else|super)\b)/,n),a(...i)),/(?=\s*\([^)]+\)\s*\{)/),
|
11 | className:"title.function",starts:{contains:[{begin:/\(/,end:/\)/,contains:[{
|
12 | relevance:0,scope:"params",match:n}]}]}},u={variants:[{
|
13 | match:[/class\s+/,n,/\s+is\s+/,n]},{match:[/class\s+/,n]}],scope:{
|
14 | 2:"title.class",4:"title.class.inherited"},keywords:t},m={relevance:0,
|
15 | match:a(...i),className:"operator"},p={className:"property",
|
16 | begin:s(/\./,(b=n,s("(?=",b,")"))),end:n,excludeBegin:!0,relevance:0};var b
|
17 | ;const h={relevance:0,match:s(/\b_/,n),scope:"variable"},g={relevance:0,
|
18 | match:/[A-Z]+[a-z]+([A-Z]+[a-z]+)*/,scope:"title.class",keywords:{
|
19 | _:["Bool","Class","Fiber","Fn","List","Map","Null","Num","Object","Range","Sequence","String","System"]
|
20 | }},f=e.C_NUMBER_MODE,v={match:[n,/\s*/,/=/,/\s*/,/\(/,n,/\)\s*\{/],scope:{
|
21 | 1:"title.function",3:"operator",6:"params"}},d=e.COMMENT(/\/\*\*/,/\*\
|
22 | contains:[{match:/@[a-z]+/,scope:"doctag"},"self"]}),N={scope:"subst",
|
23 | begin:/%\(/,end:/\)/,contains:[f,g,o,h,m]},_={scope:"string",begin:/"/,end:/"/,
|
24 | contains:[N,{scope:"char.escape",variants:[{match:/\\\\|\\["0%abefnrtv]/},{
|
25 | match:/\\x[0-9A-F]{2}/},{match:/\\u[0-9A-F]{4}/},{match:/\\U[0-9A-F]{8}/}]}]}
|
26 | ;N.contains.push(_);const w={relevance:0,
|
27 | match:s("\\b(?!",[...t,...r,...c].join("|"),"\\b)",/[a-zA-Z_]\w*(?:[?!]|\b)/),
|
28 | className:"variable"};return{name:"Wren",keywords:{keyword:t,
|
29 | "variable.language":r,literal:c},contains:[{scope:"comment",variants:[{
|
30 | begin:[/#!?/,/[A-Za-z_]+(?=\()/],beginScope:{},keywords:{literal:c},contains:[],
|
31 | end:/\)/},{begin:[/#!?/,/[A-Za-z_]+/],beginScope:{},end:/$/}]},f,_,{
|
32 | className:"string",begin:/"""/,end:/"""/
|
33 | },d,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,g,u,v,l,o,m,h,p,w]}}})()); |
\ | No newline at end of file |