From 66936f48a856ac0fdf7dec092a6a93cbf42061c8 Mon Sep 17 00:00:00 2001 From: David Schach <636977+dschach@users.noreply.github.com> Date: Mon, 13 Nov 2023 17:06:03 -0800 Subject: [PATCH] style: exclude tick-marks from comment substring highlighting (#38) Will make the code look better on a page --- dist/apex.es.min.js | 31 ++++++++++++++++--------------- dist/apex.min.js | 31 ++++++++++++++++--------------- src/languages/apex.js | 12 +++++++++--- 3 files changed, 41 insertions(+), 33 deletions(-) diff --git a/dist/apex.es.min.js b/dist/apex.es.min.js index 9d72f17..b652a16 100644 --- a/dist/apex.es.min.js +++ b/dist/apex.es.min.js @@ -6,9 +6,9 @@ relevance:0}];function l(...e){return t.concat("(?!",e.join("|"),")")}const p={ scope:"number", match:t.either(/\b(\d{4}\-\d{2}\-\d{2}T\d{2}\:\d{2}\:\d{2}(\.\d{1,3})?(\-|\+)\d{2}\:\d{2})\b/,/\b(\d{4}\-\d{2}\-\d{2}T\d{2}\:\d{2}\:\d{2}(\.\d{1,3})?(Z)?)\b/,/\b(\d{4}\-\d{2}\-\d{2})\b/,/\b0(x|X)[0-9a-fA-F_]+(U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?\b/,/\b0(b|B)[01_]+(U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?\b/,/\b([0-9]+)?\.[0-9]+((e|E)[0-9]+)?(F|f|D|d|M|m)?\b/,/(-?)\b[0-9]+(e|E)[0-9]+(F|f|D|d|M|m)?\b/,/(-?)\b[0-9]+(F|f|D|d|M|m)\b/,/(-?)\b[0-9]+(U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?\b/,/(-?)(\b0[0-9]+|(\b\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?)/), relevance:0 -},b=["try","catch","finally","get","set","put","if","for","else","do","while","continue","break","implements","extends","return","throw","when","new"],u=["instanceof","super","this"],d=["abstract","final","global","override","private","protected","public","static","testMethod","transient","virtual","webservice"],m=["anytype|0","blob|0","boolean|0","byte|0","currency|0","date|0","datetime|0","decimal|0","double|0","enum|0","float|0","integer|0","long|0","object|0","pagereference|8","selectoption|8","short|0","sobject|10","string|0","time|0","void|0","float|0"],E=["insert","update","upsert","delete","undelete","merge","convertLead"],A=["AppLauncher","Approval","Auth","Cache","Canvas","ChatterAnswers","CommercePayments","ConnectApi","Database","Datacloud","Dataweave","DataSource","Dom","EventBus","ExternalService","Flow","Functions","Invocable","KbManagement","LxScheduler","Messaging","Metadata","Pref_center","Process","QuickAction","Reports","RichMessageing","Schema","Search","Sfc","Sfdc_Checkout","sfdc_surveys","Site","Support","System","TerritoryMgmt","TxnSecurity","UserProvisioning","VisualEditor","Wave"],h=["AccessLevel","Address","Answers","ApexPages","Approval","Assert","AsyncInfo","AsyncOptions","BusinessHours","Cases","Collator","Continuation","Cookie","Crypto","Database","Date","Datetime","Decimal","Domain","DomainCreator","DomainParser","EmailMessages","EncodingUtil","EventBus","Exception","FeatureManagement","FlexQueue","Formula","FormulaRecalcFieldError","FormulaRecalcResult","Http","HttpRequest","HttpResponse","Ideas","JSON","JSONGenerator","JSONParser","Label","Limits","Location","Matcher","Math","Messaging","MultiStaticResourceCalloutMock","Network","OrgLimit","OrgLimits","Packaging","PageReference","Pattern","QueueableDuplicateSignature","QueueableDuplicateSignature.Builder","QuickAction","Request","ResetPasswordResult","RestContext","RestRequest","RestResponse","Search","Security","SelectOption","Site","SObject","SObjectAccessDecision","StaticResourceCalloutMock","Test","TimeZone","Type","URL","UserInfo","UserManagement","Version","WebServiceCallout","XmlStreamReader","XmlStreamWriter"],v=["AccessType","AccessLevel","DomainType","JSONToken","LoggingLevel","Quiddity","TriggerOperation","operationType"],S=["false","true","null"],R={ +},b=["try","catch","finally","get","set","put","if","for","else","do","while","continue","break","implements","extends","return","throw","when","new"],u=["instanceof","super","this"],d=["abstract","final","global","override","private","protected","public","static","testMethod","transient","virtual","webservice"],m=["anytype|0","blob|0","boolean|0","byte|0","currency|0","date|0","datetime|0","decimal|0","double|0","enum|0","float|0","integer|0","long|0","object|0","pagereference|8","selectoption|8","short|0","sobject|10","string|0","time|0","void|0","float|0"],E=["insert","update","upsert","delete","undelete","merge","convertLead"],A=["AppLauncher","Approval","Auth","Cache","Canvas","ChatterAnswers","CommercePayments","ConnectApi","Database","Datacloud","Dataweave","DataSource","Dom","EventBus","ExternalService","Flow","Functions","Invocable","KbManagement","LxScheduler","Messaging","Metadata","Pref_center","Process","QuickAction","Reports","RichMessageing","Schema","Search","Sfc","Sfdc_Checkout","sfdc_surveys","Site","Support","System","TerritoryMgmt","TxnSecurity","UserProvisioning","VisualEditor","Wave"],h=["AccessLevel","Address","Answers","ApexPages","Approval","Assert","AsyncInfo","AsyncOptions","BusinessHours","Cases","Collator","Continuation","Cookie","Crypto","Database","Date","Datetime","Decimal","Domain","DomainCreator","DomainParser","EmailMessages","EncodingUtil","EventBus","Exception","FeatureManagement","FlexQueue","Formula","FormulaRecalcFieldError","FormulaRecalcResult","Http","HttpRequest","HttpResponse","Ideas","JSON","JSONGenerator","JSONParser","Label","Limits","Location","Matcher","Math","Messaging","MultiStaticResourceCalloutMock","Network","OrgLimit","OrgLimits","Packaging","PageReference","Pattern","QueueableDuplicateSignature","QueueableDuplicateSignature.Builder","QuickAction","Request","ResetPasswordResult","RestContext","RestRequest","RestResponse","Search","Security","SelectOption","Site","SObject","SObjectAccessDecision","StaticResourceCalloutMock","Test","TimeZone","Type","URL","UserInfo","UserManagement","Version","WebServiceCallout","XmlStreamReader","XmlStreamWriter"],v=["AccessType","AccessLevel","DomainType","JSONToken","LoggingLevel","Quiddity","TriggerOperation","operationType"],S=["false","true","null"],g={ match:/,/,scope:"punctuation",relevance:0 -},T=[/--/,/\+\+/,/\&\&|\|\|/,/\*\=|\/\=|\%\=|\+\=|-\=/,/\&\=|\^\=|<<\=|>>\=|>>>\=|\|\=/,/\&|~|\^|\|/,/<<|>>/,/<\=|>\=|\s(<|>)\s/,/\=\=|!\=/,/\=>/,/!(?=\w)/,/(?<=\s)(\?|:)(?=\s)/,r,/(?)/],g=A.concat(...h),y={ +},R=[/--/,/\+\+/,/\&\&|\|\|/,/\*\=|\/\=|\%\=|\+\=|-\=/,/\&\=|\^\=|<<\=|>>\=|>>>\=|\|\=/,/\&|~|\^|\|/,/<<|>>/,/<\=|>\=|\s(<|>)\s/,/\=\=|!\=/,/\=>/,/!(?=\w)/,/(?<=\s)(\?|:)(?=\s)/,r,/(?)/],T=A.concat(...h),y={ $pattern:t.concat(/(?/,/\<(?=\w)/,/\{|\}/,/\(|\)/,/\{|\}/), -scope:"punctuation",relevance:0},R],C=e.inherit(e.APOS_STRING_MODE,{ +scope:"punctuation",relevance:0},g],C=e.inherit(e.APOS_STRING_MODE,{ scope:"string",relevance:0,contains:[{match:/\\'/,scope:"literal",relevance:0}] }),D=e.COMMENT("//",/[$\n]/,{relevance:0}),I=[e.COMMENT("/\\*","\\*/",{ relevance:0,contains:[{begin:/\w+@/,relevance:0},{ match:[/@(?:exception|throws)/,s,a],scope:{1:"doctag",3:"title.class"}, relevance:0},{begin:"@[A-Za-z_-]+",scope:"doctag",relevance:0},{ -match:[/(?<=@param)\s+/,a],scope:{2:"variable"},relevance:0},{begin:"`",end:"`", -scope:"string",contains:[e.BACKSLASH_ESCAPE],relevance:0}]}),D],_={ -match:t.either(...T),scope:"operator",relevance:0},U={match:/(?+/,endScope:"punctuation",contains:[{match:/\<|\,/, scope:"punctuation"},{match:c,scope:"type"}],relevance:8},{ @@ -50,14 +51,14 @@ relevance:0},F={match:[/(?])/],scope:{2:"variable"}, relevance:0},P={match:[/(?<=\=\s*\()/,a,"(?=\\)\\s*"+a+")"],scope:{2:"type"}, relevance:0},Y={match:[/\bnew\s+/,a,o],scope:{2:"type"},relevance:0};let W={ scope:"params_call",begin:/\(/,beginScope:"punctuation",end:/\)/, -endScope:"punctuation",relevance:0,keywords:y,contains:[]};const H=[{ +endScope:"punctuation",relevance:0,keywords:y,contains:[]};const x=[{ match:[/(?<=\.)/,a,o],scope:{2:"title.function.invoke"},relevance:1, contains:[...i],starts:W},{match:[/^\s*/,l(...b),a,o],scope:{ 3:"title.function.invoke"},relevance:1,starts:W}] -;W.contains=[C,Y,I,_,f,O,p,U,H,{keywords:{KEYWORDS:y}, +;W.contains=[C,Y,I,_,f,O,p,U,x,{keywords:{KEYWORDS:y}, match:t.concat(/(?<=\s|\(|\,)/,l(...S),a,/\b/,/(?!\.)/),scope:"variable", relevance:0},{match:/\(|\,|\./,scope:"punctuation",relevance:0},{match:a, -scope:"variable"}];const x={scope:"params",end:/\)/,endScope:"punctuation", +scope:"variable"}];const H={scope:"params",end:/\)/,endScope:"punctuation", relevance:1,keywords:y,contains:[p,C,I,f,...O,{match:/\,|\(/,scope:"punctuation" },U,{match:[/(?<=\(|\,)\s*/,a,/(?=\s)/],scope:{2:"type"}},{ match:[s,a,/\s*(?=[,)])/],scope:{2:"variable"}}]},G={ @@ -69,7 +70,7 @@ contains:[I,M,C,p,P,f,[{begin:[/\btrigger/,s,a,s,"on",s,a],beginScope:{ 1:"keyword",3:"title.class",5:"operator",7:"type"},end:/(?=\{)/,returnEnd:!0, contains:[I,{begin:/\(/,end:/\)/,contains:[{ match:/\b(before|after)\s+(insert|update|delete|merge|undelete)\b/, -scope:"keyword",relevance:5},R]}]},{relevance:5, +scope:"keyword",relevance:5},g]}]},{relevance:5, match:/\b(with|without|inherited)\s+sharing\b/,scope:"keyword"},{ begin:[/(?!\.)/,/\b(class|interface)\b(?!\?|\.)/],beginScope:{2:"keyword"}, end:/(?=\{)/,relevance:1,keywords:{type:m,keyword:b},contains:[{ @@ -79,15 +80,15 @@ match:[c,/(?=\.)/],scope:{1:"built_in"}},{match:t.concat(c,/(?=\>)/), scope:"type"},{match:c,scope:"title.class.inherited"},{match:/<|>|,/, scope:"punctuation"},O],relevance:0}]},{begin:[/\benum\s+/,a,/\s*\{/], beginScope:{2:"type",3:"punctuation"},end:/\}/,endScope:"punctuation", -relevance:0,contains:[I,R,{match:t.concat(c),scope:"variable.constant"}]},{ +relevance:0,contains:[I,g,{match:t.concat(c),scope:"variable.constant"}]},{ match:[/(public|private|protected)\s+/,a,o],scope:{1:"keyword", -2:"title.function"},starts:x,relevance:1},{ +2:"title.function"},starts:H,relevance:1},{ match:[/(?|\w)\s+/,a,o],scope:{2:"title.function"}, -relevance:1,starts:x}],[{match:/as\s+(user|system)\b/,scope:"keyword"}],k,{ +relevance:1,starts:H}],[{match:/as\s+(user|system)\b/,scope:"keyword"}],k,{ match:[/\bfor\b\s*/,/\(/,a,s,a,/\s*/,/:/],scope:{3:"type",5:"variable", -7:"operator"}},H,Y,N,O,U,{begin:[/\[/,/\s*(?=(SELECT|FIND)\b)/],end:/\]/, +7:"operator"}},x,Y,N,O,U,{begin:[/\[/,/\s*(?=(SELECT|FIND)\b)/],end:/\]/, beginScope:{1:"punctuation"},endScope:"punctuation",scope:"soql",relevance:10, -endsWithParent:!0,keywords:{literal:y.literal,built_in:g},contains:[p,_,C,R,{ +endsWithParent:!0,keywords:{literal:y.literal,built_in:T},contains:[p,_,C,g,{ match:/\(|\)/,scope:"punctuation",relevance:0},...i,{begin:[/\bFROM\b/,s], beginScope:{1:"keyword"},end:/(?=\bWHERE\b|\]|\s|\))/,contains:[{match:a, scope:"type"},...i]},{ diff --git a/dist/apex.min.js b/dist/apex.min.js index 306c7a4..19860ff 100644 --- a/dist/apex.min.js +++ b/dist/apex.min.js @@ -1,14 +1,14 @@ /*! `apex` grammar compiled for Highlight.js 11.9.0 */ (()=>{var e=(()=>{"use strict";return e=>{ -const t=e.regex,a="[a-zA-Z][a-zA-Z_0-9]*",c="\\b"+a+"\\b",n="@"+a,o=/(?=\s*\()/,s=/\s+/,r=/\?\./,i=[{ -match:/(?>\=|>>>\=|\|\=/,/\&|~|\^|\|/,/<<|>>/,/<\=|>\=|\s(<|>)\s/,/\=\=|!\=/,/\=>/,/!(?=\w)/,/(?<=\s)(\?|:)(?=\s)/,r,/(?)/],T=A.concat(...h),y={ +},R=[/--/,/\+\+/,/\&\&|\|\|/,/\*\=|\/\=|\%\=|\+\=|-\=/,/\&\=|\^\=|<<\=|>>\=|>>>\=|\|\=/,/\&|~|\^|\|/,/<<|>>/,/<\=|>\=|\s(<|>)\s/,/\=\=|!\=/,/\=>/,/!(?=\w)/,/(?<=\s)(\?|:)(?=\s)/,i,/(?)/],T=A.concat(...h),y={ $pattern:t.concat(/(?+/,endScope:"punctuation",contains:[{match:/\<|\,/, @@ -50,14 +51,14 @@ relevance:0},F={match:[/(?])/],scope:{2:"variable"}, relevance:0},P={match:[/(?<=\=\s*\()/,a,"(?=\\)\\s*"+a+")"],scope:{2:"type"}, relevance:0},Y={match:[/\bnew\s+/,a,o],scope:{2:"type"},relevance:0};let W={ scope:"params_call",begin:/\(/,beginScope:"punctuation",end:/\)/, -endScope:"punctuation",relevance:0,keywords:y,contains:[]};const H=[{ +endScope:"punctuation",relevance:0,keywords:y,contains:[]};const x=[{ match:[/(?<=\.)/,a,o],scope:{2:"title.function.invoke"},relevance:1, -contains:[...i],starts:W},{match:[/^\s*/,l(...b),a,o],scope:{ +contains:[...r],starts:W},{match:[/^\s*/,l(...b),a,o],scope:{ 3:"title.function.invoke"},relevance:1,starts:W}] -;W.contains=[C,Y,I,_,f,O,p,U,H,{keywords:{KEYWORDS:y}, +;W.contains=[C,Y,I,_,f,O,p,U,x,{keywords:{KEYWORDS:y}, match:t.concat(/(?<=\s|\(|\,)/,l(...S),a,/\b/,/(?!\.)/),scope:"variable", relevance:0},{match:/\(|\,|\./,scope:"punctuation",relevance:0},{match:a, -scope:"variable"}];const x={scope:"params",end:/\)/,endScope:"punctuation", +scope:"variable"}];const H={scope:"params",end:/\)/,endScope:"punctuation", relevance:1,keywords:y,contains:[p,C,I,f,...O,{match:/\,|\(/,scope:"punctuation" },U,{match:[/(?<=\(|\,)\s*/,a,/(?=\s)/],scope:{2:"type"}},{ match:[s,a,/\s*(?=[,)])/],scope:{2:"variable"}}]},B={ @@ -81,16 +82,16 @@ scope:"punctuation"},O],relevance:0}]},{begin:[/\benum\s+/,a,/\s*\{/], beginScope:{2:"type",3:"punctuation"},end:/\}/,endScope:"punctuation", relevance:0,contains:[I,g,{match:t.concat(c),scope:"variable.constant"}]},{ match:[/(public|private|protected)\s+/,a,o],scope:{1:"keyword", -2:"title.function"},starts:x,relevance:1},{ +2:"title.function"},starts:H,relevance:1},{ match:[/(?|\w)\s+/,a,o],scope:{2:"title.function"}, -relevance:1,starts:x}],[{match:/as\s+(user|system)\b/,scope:"keyword"}],k,{ +relevance:1,starts:H}],[{match:/as\s+(user|system)\b/,scope:"keyword"}],k,{ match:[/\bfor\b\s*/,/\(/,a,s,a,/\s*/,/:/],scope:{3:"type",5:"variable", -7:"operator"}},H,Y,N,O,U,{begin:[/\[/,/\s*(?=(SELECT|FIND)\b)/],end:/\]/, +7:"operator"}},x,Y,N,O,U,{begin:[/\[/,/\s*(?=(SELECT|FIND)\b)/],end:/\]/, beginScope:{1:"punctuation"},endScope:"punctuation",scope:"soql",relevance:10, endsWithParent:!0,keywords:{literal:y.literal,built_in:T},contains:[p,_,C,g,{ -match:/\(|\)/,scope:"punctuation",relevance:0},...i,{begin:[/\bFROM\b/,s], +match:/\(|\)/,scope:"punctuation",relevance:0},...r,{begin:[/\bFROM\b/,s], beginScope:{1:"keyword"},end:/(?=\bWHERE\b|\]|\s|\))/,contains:[{match:a, -scope:"type"},...i]},{ +scope:"type"},...r]},{ match:t.concat(/\b/,t.either("CALENDAR_MONTH","CALENDAR_QUARTER","CALENDAR_YEAR","DAY_IN_MONTH","DAY_IN_WEEK","DAY_IN_YEAR","DAY_ONLY","FISCAL_MONTH","FISCAL_QUARTER","FISCAL_YEAR","HOUR_IN_DAY","WEEK_IN_MONTH","WEEK_IN_YEAR","AVG","convertCurrency","convertTimezone","COUNT_DISTINCT","COUNT","DISTANCE","EXCLUDES","FIELDS","FORMAT","GEOLOCATION","GROUPING","ROLLUP","CUBE","INCLUDES","MAX","MIN","SUM","toLabel"),/\b/), scope:"title.function"},{match:/\b(GROUP|ORDER)\s+BY\b/,scope:"title.function" },{match:/\b(TODAY|TOMORROW|YESTERDAY)\b/,scope:"keyword"},{ @@ -102,6 +103,6 @@ match:t.concat(/\b/,t.either(...y.keyword,"ABOVE_OR_BELOW","ABOVE","ACTIVE","ADV scope:"keyword"},{match:[/(?<=:)/,/\s*/,c,/(?!\()/],scope:{3:"variable"}, relevance:0},{match:[/(?<=:|\.)/,a,/(?=\s*\()/],scope:{2:"title.function.invoke" },relevance:0},{match:/:/,scope:"operator",relevance:0}],illegal:"::" -},B,F,_,w,i,{match:t.concat("(?<=this.)",a,"(?!\\()"),scope:"variable"},{ +},B,F,_,w,r,{match:t.concat("(?<=this.)",a,"(?!\\()"),scope:"variable"},{ match:[t.concat(/\b/,l(...L)),a,s,/(?=\{)/],scope:{2:"property"},relevance:0}]}} })();hljs.registerLanguage("apex",e)})(); \ No newline at end of file diff --git a/src/languages/apex.js b/src/languages/apex.js index 1bc27c7..08c96ee 100644 --- a/src/languages/apex.js +++ b/src/languages/apex.js @@ -440,11 +440,17 @@ export default function (hljs) { relevance: 0 }, { - begin: '`', + /* begin: '`', end: '`', - scope: 'string', + scope: 'string', */ + excludeBegin: true, + excludeEnd: true, contains: [hljs.BACKSLASH_ESCAPE], - relevance: 0 + relevance: 0, + variants: [ + { begin: '`', end: '`', scope: 'subst' }, + { begin: /'/, end: /'/, scope: 'string' } + ] } ] });