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

View File

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