|
@@ -412,37 +412,54 @@ begin
|
|
|
'0'..'9','.','-':
|
|
|
begin
|
|
|
TokenStart := FTokenStr;
|
|
|
+ if FTokenStr^ = '-' then inc(FTokenStr);
|
|
|
+ case FTokenStr^ of
|
|
|
+ '1'..'9': Inc(FTokenStr);
|
|
|
+ '0': begin
|
|
|
+ Inc(FTokenStr);
|
|
|
+ if (joStrict in Options) and (FTokenStr^ in ['0'..'9']) then
|
|
|
+ Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
|
|
|
+ end;
|
|
|
+ '.': if joStrict in Options then
|
|
|
+ Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
|
|
|
+ else
|
|
|
+ Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
|
|
|
+ end;
|
|
|
while true do
|
|
|
begin
|
|
|
- Inc(FTokenStr);
|
|
|
case FTokenStr^ of
|
|
|
+ '0'..'9': inc(FTokenStr);
|
|
|
'.':
|
|
|
begin
|
|
|
- if FTokenStr[1] in ['0'..'9', 'e', 'E'] then
|
|
|
- begin
|
|
|
- Inc(FTokenStr);
|
|
|
- repeat
|
|
|
+ case FTokenStr[1] of
|
|
|
+ '0'..'9': Inc(FTokenStr, 2);
|
|
|
+ 'e', 'E': begin
|
|
|
+ if joStrict in Options then
|
|
|
+ Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
|
|
|
Inc(FTokenStr);
|
|
|
- until not (FTokenStr^ in ['0'..'9', 'e', 'E','-','+']);
|
|
|
+ end;
|
|
|
+ else Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
|
|
|
end;
|
|
|
- break;
|
|
|
- end;
|
|
|
- '0'..'9': ;
|
|
|
- 'e', 'E':
|
|
|
- begin
|
|
|
- Inc(FTokenStr);
|
|
|
- if FTokenStr^ in ['-','+'] then
|
|
|
- Inc(FTokenStr);
|
|
|
while FTokenStr^ in ['0'..'9'] do
|
|
|
- Inc(FTokenStr);
|
|
|
+ inc(FTokenStr);
|
|
|
break;
|
|
|
end;
|
|
|
else
|
|
|
- if {(FTokenStr<>FEOL) and }not (FTokenStr^ in [#13,#10,#0,'}',']',',',#9,' ']) then
|
|
|
- Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
|
|
|
break;
|
|
|
end;
|
|
|
end;
|
|
|
+ if FTokenStr^ in ['e', 'E'] then begin
|
|
|
+ Inc(FTokenStr);
|
|
|
+ if FTokenStr^ in ['-','+'] then
|
|
|
+ Inc(FTokenStr);
|
|
|
+ if not (FTokenStr^ in ['0'..'9']) then
|
|
|
+ Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
|
|
|
+ repeat
|
|
|
+ Inc(FTokenStr);
|
|
|
+ until not (FTokenStr^ in ['0'..'9']);
|
|
|
+ end;
|
|
|
+ if {(FTokenStr<>FEOL) and }not (FTokenStr^ in [#13,#10,#0,'}',']',',',#9,' ']) then
|
|
|
+ Error(SErrInvalidCharacter, [CurRow,CurColumn,FTokenStr[0]]);
|
|
|
SectionLength := FTokenStr - TokenStart;
|
|
|
FCurTokenString:='';
|
|
|
SetString(FCurTokenString, TokenStart, SectionLength);
|