@@ -157,6 +157,7 @@ MAILADDR ("mailto:")?[a-z_A-Z0-9\x80-\xff.+-]+"@"[a-z_A-Z0-9\x80-\xff-]+("."[a
157157
158158%x Scan
159159%x SkipString
160+ %x SkipVerbString
160161%x SkipChar
161162%x SComment
162163%x CComment
@@ -232,7 +233,7 @@ SLASHopt [/]*
232233 if (yyextra->lang!=SrcLangExt::Cpp) REJECT;
233234 copyToOutput(yyscanner,yytext,yyleng);
234235 }
235- <Scan>[^"' !\/\n\\#,\-=; \t]* { /* eat anything that is not " / , or \n */
236+ <Scan>[^"' !\/\n\\#,\-=; \t@$]* { /* eat anything that is not " / , or \n */
236237 copyToOutput (yyscanner,yytext,yyleng);
237238 }
238239<Scan>[,= ;\t] { /* eat , so we have a nice separator in long initialization lines */
@@ -343,6 +344,12 @@ SLASHopt [/]*
343344 }
344345 }
345346 }
347+ <Scan>[$]?" @\" " { /* start of an interpolated verbatim C# string */
348+ if (yyextra->lang !=SrcLangExt::CSharp) REJECT
349+ copyToOutput (yyscanner,yytext,yyleng);
350+ yyextra->stringContext = YY_START;
351+ BEGIN (SkipVerbString);
352+ }
346353<Scan>" \" " { /* start of a string */
347354 copyToOutput (yyscanner,yytext,yyleng);
348355 yyextra->stringContext = YY_START;
@@ -695,6 +702,22 @@ SLASHopt [/]*
695702<SkipString>\n { /* new line inside string (illegal for some compilers) */
696703 copyToOutput (yyscanner,yytext,yyleng);
697704 }
705+ <SkipVerbString>[^" \n ]+ {
706+ copyToOutput(yyscanner,yytext,yyleng);
707+ }
708+ <SkipVerbString>\"\" { // escaped quote
709+ copyToOutput(yyscanner,yytext,yyleng);
710+ }
711+ <SkipVerbString>" \" " { /* end of string */
712+ copyToOutput (yyscanner,yytext,yyleng);
713+ BEGIN (yyextra->stringContext );
714+ }
715+ <SkipVerbString>. {
716+ copyToOutput (yyscanner,yytext,yyleng);
717+ }
718+ <SkipVerbString>\n {
719+ copyToOutput (yyscanner,yytext,yyleng);
720+ }
698721<SkipChar>\\. { /* escaped character */
699722 if (yyextra->lang ==SrcLangExt::Fortran || yyextra->lang ==SrcLangExt::VHDL)
700723 {
0 commit comments