@@ -143,6 +143,7 @@ const LexicalClass lexicalClassesAsm[] = {
143143 13 , " SCE_ASM_STRINGEOL" , " error literal string" , " End of line where string is not closed" ,
144144 14 , " SCE_ASM_EXTINSTRUCTION" , " keyword" , " Extended Instruction" ,
145145 15 , " SCE_ASM_COMMENTDIRECTIVE" , " comment" , " Directive Comment" ,
146+ 16 , " SCE_ASM_STRINGBACKQUOTE" , " literal string" , " Back quoted string" ,
146147};
147148
148149const LexicalClass lexicalClassesAs[] = {
@@ -163,6 +164,7 @@ const LexicalClass lexicalClassesAs[] = {
163164 13 , " SCE_ASM_STRINGEOL" , " error literal string" , " End of line where string is not closed" ,
164165 14 , " SCE_ASM_EXTINSTRUCTION" , " keyword" , " Extended Instruction" ,
165166 15 , " SCE_ASM_COMMENTDIRECTIVE" , " comment" , " Directive Comment" ,
167+ 16 , " SCE_ASM_STRINGBACKQUOTE" , " literal string" , " Back quoted string" ,
166168};
167169
168170class LexerAsm : public DefaultLexer {
@@ -287,6 +289,7 @@ void SCI_METHOD LexerAsm::Lex(Sci_PositionU startPos, Sci_Position length, int i
287289 switch (sc.state ) {
288290 case SCE_ASM_STRING:
289291 case SCE_ASM_CHARACTER:
292+ case SCE_ASM_STRINGBACKQUOTE:
290293 // Prevent SCE_ASM_STRINGEOL from leaking back to previous line
291294 sc.SetState (sc.state );
292295 break ;
@@ -390,6 +393,19 @@ void SCI_METHOD LexerAsm::Lex(Sci_PositionU startPos, Sci_Position length, int i
390393 }
391394 break ;
392395
396+ case SCE_ASM_STRINGBACKQUOTE:
397+ if (sc.ch == ' \\ ' ) {
398+ if (sc.chNext == ' \" ' || sc.chNext == ' \' ' || sc.chNext == ' \\ ' || sc.chNext == ' `' ) {
399+ sc.Forward ();
400+ }
401+ } else if (sc.ch == ' `' ) {
402+ sc.ForwardSetState (SCE_ASM_DEFAULT);
403+ } else if (sc.atLineEnd ) {
404+ sc.ChangeState (SCE_ASM_STRINGEOL);
405+ sc.ForwardSetState (SCE_ASM_DEFAULT);
406+ }
407+ break ;
408+
393409 default :
394410 break ;
395411 }
@@ -406,6 +422,8 @@ void SCI_METHOD LexerAsm::Lex(Sci_PositionU startPos, Sci_Position length, int i
406422 sc.SetState (SCE_ASM_STRING);
407423 } else if (sc.ch == ' \' ' ) {
408424 sc.SetState (SCE_ASM_CHARACTER);
425+ } else if (sc.ch == ' `' ) {
426+ sc.SetState (SCE_ASM_STRINGBACKQUOTE);
409427 } else if (IsAsmOperator (sc.ch )) {
410428 sc.SetState (SCE_ASM_OPERATOR);
411429 }
0 commit comments