This commit is contained in:
Basile Burg 2016-03-01 09:37:02 +01:00
parent 798fff06ba
commit 2f780638a4
2 changed files with 62 additions and 24 deletions

View File

@ -457,7 +457,6 @@ begin
next; next;
end; end;
//TODO-cD2Syn: nested comments with multiple nesting on the same line.
procedure TSynD2Syn.next; procedure TSynD2Syn.next;
var var
reader: PChar = nil; reader: PChar = nil;
@ -592,41 +591,78 @@ begin
begin begin
fTokKind := tkCommt; fTokKind := tkCommt;
if readDelim(reader, fTokStop, '+') then if readDelim(reader, fTokStop, '+') then
if readDelim(reader, fTokStop, '/') then exit if readDelim(reader, fTokStop, '/') then
else fTokKind := tkDDocs; exit
if readUntil(reader, fTokStop, '+/') then exit; else
fTokKind := tkDDocs;
inc(fCurrRange.nestedCommentsCount); inc(fCurrRange.nestedCommentsCount);
if fTokKind = tkDDocs then while (reader^ <> #10) and (fCurrRange.nestedCommentsCount > 0) do
fCurrRange.rangeKinds += [rkBlockDoc2] begin
else if readUntilAmong(reader, fTokStop, ['+', '/']) then
fCurrRange.rangeKinds += [rkBlockCom2]; begin
readLine(reader, fTokStop); if readDelim(reader, fTokStop, ['+', '/']) then
if (fTokKind = tkCommt) then begin
StartCodeFoldBlock(nil, fkComments2 in fFoldKinds) if ((reader-1)^ = '/') and (reader^ = '+') then
else if (fTokKind = tkDDocs) then begin
StartCodeFoldBlock(nil, fkDDoc in fFoldKinds); inc(fCurrRange.nestedCommentsCount);
readerNext;
continue;
end;
if ((reader-1)^ = '+') and (reader^ = '/') then
begin
dec(fCurrRange.nestedCommentsCount);
readerNext;
continue;
end;
end else readerNext;
end;
end;
if (fCurrRange.nestedCommentsCount > 0) then
begin
if fTokKind = tkDDocs then
fCurrRange.rangeKinds += [rkBlockDoc2]
else
fCurrRange.rangeKinds += [rkBlockCom2];
if (fTokKind = tkCommt) then
StartCodeFoldBlock(nil, fkComments2 in fFoldKinds)
else if (fTokKind = tkDDocs) then
StartCodeFoldBlock(nil, fkDDoc in fFoldKinds);
end;
exit; exit;
end else readerReset; end else readerReset;
if (rkBlockCom2 in fCurrRange.rangeKinds) or (rkBlockDoc2 in fCurrRange.rangeKinds) then if (rkBlockCom2 in fCurrRange.rangeKinds) or (rkBlockDoc2 in fCurrRange.rangeKinds) then
begin begin
if (rkBlockDoc2 in fCurrRange.rangeKinds) then fTokKind := tkDDocs if (rkBlockDoc2 in fCurrRange.rangeKinds) then fTokKind := tkDDocs
else fTokKind := tkCommt; else fTokKind := tkCommt;
if readUntil(reader, fTokStop, '/+') then while (reader^ <> #10) and (fCurrRange.nestedCommentsCount > 0) do
inc(fCurrRange.nestedCommentsCount) begin
else readerReset; if readUntilAmong(reader, fTokStop, ['+', '/']) then
if readUntil(reader, fTokStop, '+/') then begin
if readDelim(reader, fTokStop, ['+', '/']) then
begin
if ((reader-1)^ = '/') and (reader^ = '+') then
begin
inc(fCurrRange.nestedCommentsCount);
readerNext;
continue;
end;
if ((reader-1)^ = '+') and (reader^ = '/') then
begin
dec(fCurrRange.nestedCommentsCount);
readerNext;
continue;
end;
end else readerNext;
end;
end;
if fCurrRange.nestedCommentsCount = 0 then
begin begin
dec(fCurrRange.nestedCommentsCount);
if fCurrRange.nestedCommentsCount <> 0 then
exit;
if (fTokKind = tkCommt) then if (fTokKind = tkCommt) then
EndCodeFoldBlock(fkComments2 in fFoldKinds) EndCodeFoldBlock(fkComments2 in fFoldKinds)
else if (fTokKind = tkDDocs) then else if (fTokKind = tkDDocs) then
EndCodeFoldBlock(fkDDoc in fFoldKinds); EndCodeFoldBlock(fkDDoc in fFoldKinds);
fCurrRange.rangeKinds -= [rkBlockDoc2, rkBlockCom2]; fCurrRange.rangeKinds -= [rkBlockDoc2, rkBlockCom2];
exit;
end; end;
readLine(reader, fTokStop);
exit; exit;
end; end;
@ -819,6 +855,8 @@ begin
if not isOperator1(reader^) then exit; if not isOperator1(reader^) then exit;
end; end;
end; end;
if isWhite(reader^) then
exit;
fTokKind := tkIdent; // invalid op not colorized. fTokKind := tkIdent; // invalid op not colorized.
end; end;

View File

@ -456,12 +456,12 @@ begin
begin begin
if isOutOfBound then if isOutOfBound then
exit; exit;
if (reader.previous^ = '/') and (reader.next^ = '+') then if ((reader.head-1)^ = '/') and (reader.head^ = '+') then
begin begin
nestedCom += 1; nestedCom += 1;
break; break;
end; end;
if (reader.previous^ = '+') and (reader.next^ = '/') then if ((reader.head-1)^ = '+') and (reader.head^ = '/') then
begin begin
nestedCom -= 1; nestedCom -= 1;
break; break;