|
@@ -5104,7 +5104,7 @@ type
|
|
begin
|
|
begin
|
|
readchar; { read leading $ }
|
|
readchar; { read leading $ }
|
|
asciinr:='$';
|
|
asciinr:='$';
|
|
- while (upcase(c) in ['A'..'F','0'..'9']) and (length(asciinr)<=5) do
|
|
|
|
|
|
+ while (upcase(c) in ['A'..'F','0'..'9']) and (length(asciinr)<=7) do
|
|
begin
|
|
begin
|
|
asciinr:=asciinr+c;
|
|
asciinr:=asciinr+c;
|
|
readchar;
|
|
readchar;
|
|
@@ -5114,7 +5114,7 @@ type
|
|
begin
|
|
begin
|
|
readchar; { read leading $ }
|
|
readchar; { read leading $ }
|
|
asciinr:='&';
|
|
asciinr:='&';
|
|
- while (upcase(c) in ['0'..'7']) and (length(asciinr)<=7) do
|
|
|
|
|
|
+ while (upcase(c) in ['0'..'7']) and (length(asciinr)<=8) do
|
|
begin
|
|
begin
|
|
asciinr:=asciinr+c;
|
|
asciinr:=asciinr+c;
|
|
readchar;
|
|
readchar;
|
|
@@ -5124,7 +5124,7 @@ type
|
|
begin
|
|
begin
|
|
readchar; { read leading $ }
|
|
readchar; { read leading $ }
|
|
asciinr:='%';
|
|
asciinr:='%';
|
|
- while (upcase(c) in ['0','1']) and (length(asciinr)<=17) do
|
|
|
|
|
|
+ while (upcase(c) in ['0','1']) and (length(asciinr)<=22) do
|
|
begin
|
|
begin
|
|
asciinr:=asciinr+c;
|
|
asciinr:=asciinr+c;
|
|
readchar;
|
|
readchar;
|
|
@@ -5133,7 +5133,7 @@ type
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
asciinr:='';
|
|
asciinr:='';
|
|
- while (c in ['0'..'9']) and (length(asciinr)<=5) do
|
|
|
|
|
|
+ while (c in ['0'..'9']) and (length(asciinr)<=8) do
|
|
begin
|
|
begin
|
|
asciinr:=asciinr+c;
|
|
asciinr:=asciinr+c;
|
|
readchar;
|
|
readchar;
|
|
@@ -5145,7 +5145,7 @@ type
|
|
Message(scan_e_illegal_char_const)
|
|
Message(scan_e_illegal_char_const)
|
|
else if (m<0) or (m>255) or (length(asciinr)>3) then
|
|
else if (m<0) or (m>255) or (length(asciinr)>3) then
|
|
begin
|
|
begin
|
|
- if (m>=0) and (m<=65535) then
|
|
|
|
|
|
+ if (m>=0) and (m<=$10FFFF) then
|
|
begin
|
|
begin
|
|
if not iswidestring then
|
|
if not iswidestring then
|
|
begin
|
|
begin
|
|
@@ -5156,7 +5156,15 @@ type
|
|
iswidestring:=true;
|
|
iswidestring:=true;
|
|
len:=0;
|
|
len:=0;
|
|
end;
|
|
end;
|
|
- concatwidestringchar(patternw,tcompilerwidechar(m));
|
|
|
|
|
|
+ if m<=$FFFF then
|
|
|
|
+ concatwidestringchar(patternw,tcompilerwidechar(m))
|
|
|
|
+ else
|
|
|
|
+ begin
|
|
|
|
+ { split into surrogate pair }
|
|
|
|
+ dec(m,$10000);
|
|
|
|
+ concatwidestringchar(patternw,tcompilerwidechar((m shr 10) + $D800));
|
|
|
|
+ concatwidestringchar(patternw,tcompilerwidechar((m and $3FF) + $DC00));
|
|
|
|
+ end;
|
|
end
|
|
end
|
|
else
|
|
else
|
|
Message(scan_e_illegal_char_const)
|
|
Message(scan_e_illegal_char_const)
|