|
@@ -2471,6 +2471,13 @@ var
|
|
Result:=false;
|
|
Result:=false;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+ procedure HandleEscape;
|
|
|
|
+ begin
|
|
|
|
+ inc(MyTokenPos);
|
|
|
|
+ if (MyTokenPos<=l) and (s[MyTokenPos]>#31) then
|
|
|
|
+ inc(MyTokenPos);
|
|
|
|
+ end;
|
|
|
|
+
|
|
begin
|
|
begin
|
|
SetCurTokenString('');
|
|
SetCurTokenString('');
|
|
s:=CurLine;
|
|
s:=CurLine;
|
|
@@ -2489,6 +2496,8 @@ begin
|
|
if MyTokenPos>l then
|
|
if MyTokenPos>l then
|
|
if DoEndOfLine then exit;
|
|
if DoEndOfLine then exit;
|
|
case s[MyTokenPos] of
|
|
case s[MyTokenPos] of
|
|
|
|
+ '\':
|
|
|
|
+ HandleEscape;
|
|
'''':
|
|
'''':
|
|
begin
|
|
begin
|
|
inc(MyTokenPos);
|
|
inc(MyTokenPos);
|
|
@@ -2496,6 +2505,8 @@ begin
|
|
if MyTokenPos>l then
|
|
if MyTokenPos>l then
|
|
Error(nErrOpenString,SErrOpenString);
|
|
Error(nErrOpenString,SErrOpenString);
|
|
case s[MyTokenPos] of
|
|
case s[MyTokenPos] of
|
|
|
|
+ '\':
|
|
|
|
+ HandleEscape;
|
|
'''':
|
|
'''':
|
|
begin
|
|
begin
|
|
inc(MyTokenPos);
|
|
inc(MyTokenPos);
|
|
@@ -2518,6 +2529,8 @@ begin
|
|
if MyTokenPos>l then
|
|
if MyTokenPos>l then
|
|
Error(nErrOpenString,SErrOpenString);
|
|
Error(nErrOpenString,SErrOpenString);
|
|
case s[MyTokenPos] of
|
|
case s[MyTokenPos] of
|
|
|
|
+ '\':
|
|
|
|
+ HandleEscape;
|
|
'"':
|
|
'"':
|
|
begin
|
|
begin
|
|
inc(MyTokenPos);
|
|
inc(MyTokenPos);
|
|
@@ -2533,6 +2546,32 @@ begin
|
|
end;
|
|
end;
|
|
until false;
|
|
until false;
|
|
end;
|
|
end;
|
|
|
|
+ '`': // template literal
|
|
|
|
+ begin
|
|
|
|
+ inc(MyTokenPos);
|
|
|
|
+ repeat
|
|
|
|
+ while MyTokenPos>l do
|
|
|
|
+ if DoEndOfLine then
|
|
|
|
+ begin
|
|
|
|
+ writeln('AAA1 TPas2jsPasScanner.ReadNonPascalTillEndToken ',StopAtLineEnd);
|
|
|
|
+ if not StopAtLineEnd then
|
|
|
|
+ Error(nErrOpenString,SErrOpenString);
|
|
|
|
+ exit;
|
|
|
|
+ end;
|
|
|
|
+ case s[MyTokenPos] of
|
|
|
|
+ '\':
|
|
|
|
+ HandleEscape;
|
|
|
|
+ '`':
|
|
|
|
+ begin
|
|
|
|
+ inc(MyTokenPos);
|
|
|
|
+ break;
|
|
|
|
+ end;
|
|
|
|
+ // Note: template literals can span multiple lines
|
|
|
|
+ else
|
|
|
|
+ inc(MyTokenPos);
|
|
|
|
+ end;
|
|
|
|
+ until false;
|
|
|
|
+ end;
|
|
'/':
|
|
'/':
|
|
begin
|
|
begin
|
|
inc(MyTokenPos);
|
|
inc(MyTokenPos);
|