@@ -120,7 +120,8 @@ function hljsDefineSolidity(hljs) {
120120 } ;
121121
122122 //covers the special slot/offset notation in assembly
123- var SOL_ASSEMBLY_MEMBERS = {
123+ //(old-style, with an underscore)
124+ var SOL_ASSEMBLY_MEMBERS_OLD = {
124125 begin : / _ / ,
125126 end : / [ ^ A - Z a - z 0 - 9 $ . ] / ,
126127 excludeBegin : true ,
@@ -131,6 +132,20 @@ function hljsDefineSolidity(hljs) {
131132 relevance : 2 ,
132133 } ;
133134
135+ //covers the special slot/offset notation in assembly
136+ //(new-style, with a dot; keeping this separate as it
137+ //may be expanded in the future)
138+ var SOL_ASSEMBLY_MEMBERS = {
139+ begin : / \. / ,
140+ end : / [ ^ A - Z a - z 0 - 9 $ . ] / ,
141+ excludeBegin : true ,
142+ excludeEnd : true ,
143+ keywords : {
144+ built_in : 'slot offset'
145+ } ,
146+ relevance : 2 ,
147+ } ;
148+
134149 function isNegativeLookbehindAvailable ( ) {
135150 try {
136151 new RegExp ( '(?<!.)' ) ;
@@ -160,6 +175,24 @@ function hljsDefineSolidity(hljs) {
160175 relevance : 0 ,
161176 } ;
162177
178+ var HEX_APOS_STRING_MODE = {
179+ className : 'string' ,
180+ begin : / h e x ' ( ( [ 0 - 9 a - f A - F ] { 2 } _ ? ) * [ 0 - 9 a - f A - F ] { 2 } ) ? ' / , //please also update HEX_QUOTE_STRING_MODE
181+ } ;
182+ var HEX_QUOTE_STRING_MODE = {
183+ className : 'string' ,
184+ begin : / h e x " ( ( [ 0 - 9 a - f A - F ] { 2 } _ ? ) * [ 0 - 9 a - f A - F ] { 2 } ) ? " / , //please also update HEX_APOS_STRING_MODE
185+ } ;
186+
187+ //I've set these up exactly like hljs's builtin STRING_MODEs,
188+ //except with the optional initial "unicode" text
189+ var SOL_APOS_STRING_MODE = hljs . inherit ( hljs . APOS_STRING_MODE , //please also update SOL_QUOTE_STRING_MODE
190+ { begin : / ( u n i c o d e ) ? ' / }
191+ ) ;
192+ var SOL_QUOTE_STRING_MODE = hljs . inherit ( hljs . QUOTE_STRING_MODE , //please also update SOL_APOS_STRING_MODE
193+ { begin : / ( u n i c o d e ) ? " / }
194+ ) ;
195+
163196 var SOL_FUNC_PARAMS = {
164197 className : 'params' ,
165198 begin : / \( / , end : / \) / ,
@@ -169,22 +202,13 @@ function hljsDefineSolidity(hljs) {
169202 contains : [
170203 hljs . C_LINE_COMMENT_MODE ,
171204 hljs . C_BLOCK_COMMENT_MODE ,
172- hljs . APOS_STRING_MODE ,
173- hljs . QUOTE_STRING_MODE ,
205+ SOL_APOS_STRING_MODE ,
206+ SOL_QUOTE_STRING_MODE ,
174207 SOL_NUMBER ,
175208 'self' //to account for mappings and fn variables
176209 ]
177210 } ;
178211
179- var HEX_APOS_STRING_MODE = {
180- className : 'string' ,
181- begin : / h e x ' ( ( [ 0 - 9 a - f A - F ] { 2 } _ ? ) * [ 0 - 9 a - f A - F ] { 2 } ) ? ' / , //please also update HEX_QUOTE_STRING_MODE
182- } ;
183- var HEX_QUOTE_STRING_MODE = {
184- className : 'string' ,
185- begin : / h e x " ( ( [ 0 - 9 a - f A - F ] { 2 } _ ? ) * [ 0 - 9 a - f A - F ] { 2 } ) ? " / , //please also update HEX_APOS_STRING_MODE
186- } ;
187-
188212 //NOTE: including "*" as a "lexeme" because we use it as a "keyword" below
189213 var SOL_LEXEMES_RE = / [ A - Z a - z _ $ ] [ A - Z a - z _ $ 0 - 9 ] * | \* / ;
190214 //in assembly, identifiers can contain periods (but may not start with them)
@@ -239,8 +263,8 @@ function hljsDefineSolidity(hljs) {
239263 lexemes : SOL_LEXEMES_RE ,
240264 contains : [
241265 // basic literal definitions
242- hljs . APOS_STRING_MODE ,
243- hljs . QUOTE_STRING_MODE ,
266+ SOL_APOS_STRING_MODE ,
267+ SOL_QUOTE_STRING_MODE ,
244268 HEX_APOS_STRING_MODE ,
245269 HEX_QUOTE_STRING_MODE ,
246270 hljs . C_LINE_COMMENT_MODE ,
@@ -296,8 +320,8 @@ function hljsDefineSolidity(hljs) {
296320 keywords : 'import * from as' ,
297321 contains : [
298322 SOL_TITLE_MODE ,
299- hljs . APOS_STRING_MODE ,
300- hljs . QUOTE_STRING_MODE ,
323+ SOL_APOS_STRING_MODE ,
324+ SOL_QUOTE_STRING_MODE ,
301325 HEX_APOS_STRING_MODE ,
302326 HEX_QUOTE_STRING_MODE ,
303327 hljs . C_LINE_COMMENT_MODE ,
@@ -325,8 +349,8 @@ function hljsDefineSolidity(hljs) {
325349 contains : [
326350 hljs . C_LINE_COMMENT_MODE ,
327351 hljs . C_BLOCK_COMMENT_MODE ,
328- hljs . inherit ( hljs . APOS_STRING_MODE , { className : 'meta-string' } ) ,
329- hljs . inherit ( hljs . QUOTE_STRING_MODE , { className : 'meta-string' } )
352+ hljs . inherit ( SOL_APOS_STRING_MODE , { className : 'meta-string' } ) ,
353+ hljs . inherit ( SOL_QUOTE_STRING_MODE , { className : 'meta-string' } )
330354 ]
331355 } ,
332356 { //assembly section
@@ -341,27 +365,29 @@ function hljsDefineSolidity(hljs) {
341365 keywords : SOL_ASSEMBLY_KEYWORDS ,
342366 lexemes : SOL_ASSEMBLY_LEXEMES_RE ,
343367 contains : [
344- hljs . APOS_STRING_MODE ,
345- hljs . QUOTE_STRING_MODE ,
368+ SOL_APOS_STRING_MODE ,
369+ SOL_QUOTE_STRING_MODE ,
346370 HEX_APOS_STRING_MODE ,
347371 HEX_QUOTE_STRING_MODE ,
348372 hljs . C_LINE_COMMENT_MODE ,
349373 hljs . C_BLOCK_COMMENT_MODE ,
350374 SOL_NUMBER ,
351375 SOL_ASSEMBLY_MEMBERS ,
376+ SOL_ASSEMBLY_MEMBERS_OLD ,
352377 { //block within assembly; note the lack of endsParent
353378 begin : '{' , end : '}' ,
354379 keywords : SOL_ASSEMBLY_KEYWORDS ,
355380 lexemes : SOL_ASSEMBLY_LEXEMES_RE ,
356381 contains : [
357- hljs . APOS_STRING_MODE ,
358- hljs . QUOTE_STRING_MODE ,
382+ SOL_APOS_STRING_MODE ,
383+ SOL_QUOTE_STRING_MODE ,
359384 HEX_APOS_STRING_MODE ,
360385 HEX_QUOTE_STRING_MODE ,
361386 hljs . C_LINE_COMMENT_MODE ,
362387 hljs . C_BLOCK_COMMENT_MODE ,
363388 SOL_NUMBER ,
364389 SOL_ASSEMBLY_MEMBERS ,
390+ SOL_ASSEMBLY_MEMBERS_OLD ,
365391 'self'
366392 ]
367393 }
0 commit comments