* Merging revisions 42904 from trunk:

------------------------------------------------------------------------
    r42904 | michael | 2019-09-02 14:36:37 +0200 (Mon, 02 Sep 2019) | 1 line
    
    * Additional case where whitespace can mess up (bug ID 36037)
    ------------------------------------------------------------------------

git-svn-id: branches/fixes_3_2@43254 -
This commit is contained in:
michael 2019-10-19 14:46:44 +00:00
parent d785134a57
commit b4ac2e2027
2 changed files with 61 additions and 15 deletions

View File

@ -258,6 +258,14 @@ begin
FCurToken := Result;
exit;
end;
// Empty line
if (FTokenStr=FEOL) then
begin
Result := tkWhiteSpace;
FCurToken := Result;
exit;
end;
FCurTokenString := '';
@ -272,13 +280,13 @@ begin
Result := tkWhitespace;
repeat
Inc(FTokenStr);
if FTokenStr[0] = #0 then
if (FTokenStr[0] = #0) or (FTokenStr=FEOL) then
if not FetchLine then
begin
FCurToken := Result;
exit;
end;
until not (FTokenStr[0] in [#9, ' ']);
until not (FTokenStr[0] in [#9, ' ',#10, #13]);
end;
'"','''':
begin

View File

@ -70,6 +70,7 @@ type
Procedure TestHandlerResult;
Procedure TestHandlerResultStream;
Procedure TestEmptyLine;
procedure TestBug36037Part2;
end;
implementation
@ -540,20 +541,23 @@ begin
end;
procedure TTestParser.TestEmptyLine;
// Bug report 36037
Const MyJSON =
' {'+sLineBreak+
' "pylib__linux" : "libpython3.7m.so.1.0",'+sLineBreak+
' "ui_toolbar_theme": "default_24x24",'+sLineBreak+
' "ui_toolbar_show" : true,'+sLineBreak+
' "font_name__linux" : "DejaVu Sans Mono",'+sLineBreak+
' "font_size__linux" : 10,'+sLineBreak+
' "ui_listbox_fuzzy": false,'+sLineBreak+
' "ui_max_size_lexer": 5,'+sLineBreak+
' "find_separate_form": false,'+sLineBreak+sLineBreak+
'}';
var
J : TJSONData;
Const
MyJSON =
' {'+sLineBreak+
' "pylib__linux" : "libpython3.7m.so.1.0",'+sLineBreak+
' "ui_toolbar_theme": "default_24x24",'+sLineBreak+
' "ui_toolbar_show" : true,'+sLineBreak+
' "font_name__linux" : "DejaVu Sans Mono",'+sLineBreak+
' "font_size__linux" : 10,'+sLineBreak+
' "ui_listbox_fuzzy": false,'+sLineBreak+
' "ui_max_size_lexer": 5,'+sLineBreak+
' "find_separate_form": false,'+sLineBreak+sLineBreak+
'}';
var
J : TJSONData;
begin
With TJSONParser.Create(MyJSON,[joUTF8,joIgnoreTrailingComma]) do
Try
@ -564,6 +568,40 @@ begin
end;
end;
procedure TTestParser.TestBug36037Part2;
Const
MyJSON =
'{'+sLineBreak+
' "tab_spaces": true,'+sLineBreak+
' //auto-indent kind:'+sLineBreak+
' // 0: indent like in prev line'+sLineBreak+
' // 1: by spaces'+sLineBreak+
' // 2: by tabs+spaces'+sLineBreak+
' // 3: by tabs only'+sLineBreak+
' "indent_kind": 1,'+sLineBreak+
' "indent_size": 4,'+sLineBreak+
''+sLineBreak+
' "saving_trim_spaces": true,'+sLineBreak+
''+sLineBreak+
'// "config_menus_from": "kv-menu JSON.json",'+sLineBreak+
' "find_hotkey_replace": "Alt+Enter",'+sLineBreak+
' "fold_style": 4,'+sLineBreak+
'}'+sLineBreak;
var
J : TJSONData;
begin
With TJSONParser.Create(MyJSON,[joUTF8,joIgnoreTrailingComma,joComments]) do
Try
J:=Parse;
J.Free;
Finally
Free;
end;
end;
procedure TTestParser.DoTestError(S : String; Options : TJSONOptions = DefaultOpts);
Var