fix column index in comments

This commit is contained in:
Basile Burg 2016-03-31 09:49:30 +02:00
parent 6ec8fe614f
commit 8d3b427bcf
1 changed files with 35 additions and 6 deletions

View File

@ -72,6 +72,8 @@ type
fAbsoluteIndex: Integer; fAbsoluteIndex: Integer;
fReaderHead: PChar; fReaderHead: PChar;
fPreviousLineColum: Integer; fPreviousLineColum: Integer;
fBegColumnIndex: Integer;
fBegLineIndex: Integer;
function getColAndLine: TPoint; function getColAndLine: TPoint;
public public
constructor Create(const aText: PChar; const aColAndLine: TPoint); constructor Create(const aText: PChar; const aColAndLine: TPoint);
@ -79,11 +81,14 @@ type
// //
function Next: PChar; function Next: PChar;
function previous: PChar; function previous: PChar;
procedure saveBeginning;
// //
property AbsoluteIndex: Integer read fAbsoluteIndex; property AbsoluteIndex: Integer read fAbsoluteIndex;
property LineIndex: Integer read fLineIndex; property LineIndex: Integer read fLineIndex;
property ColumnIndex: Integer read fColumnIndex; property ColumnIndex: Integer read fColumnIndex;
property LineAnColumn: TPoint read getColAndLine; property LineAnColumn: TPoint read getColAndLine;
property SavedLine: Integer read fBegLineIndex;
property SavedColumn: Integer read fBegColumnIndex;
// //
property head: PChar read fReaderHead; property head: PChar read fReaderHead;
end; end;
@ -252,6 +257,13 @@ begin
end; end;
exit(fReaderHead); exit(fReaderHead);
end; end;
procedure TReaderHead.saveBeginning;
begin
fBegColumnIndex:= fColumnIndex;
fBegLineIndex:= fLineIndex;
end;
{$ENDREGION} {$ENDREGION}
{$REGION TD2Dictionary ---------------------------------------------------------} {$REGION TD2Dictionary ---------------------------------------------------------}
@ -387,8 +399,8 @@ var
begin begin
ptk := new(PLexToken); ptk := new(PLexToken);
ptk^.kind := aTk; ptk^.kind := aTk;
ptk^.position := reader.LineAnColumn; ptk^.position.X := reader.SavedColumn;
ptk^.position.X -= length(identifier); ptk^.position.Y := reader.SavedLine;
ptk^.Data := identifier; ptk^.Data := identifier;
aList.Add(ptk); aList.Add(ptk);
end; end;
@ -433,17 +445,18 @@ begin
begin begin
if (reader.Next^ = '/') then if (reader.Next^ = '/') then
begin begin
reader.saveBeginning;
if isOutOfBound then if isOutOfBound then
exit; exit;
while (reader.head^ <> #10) do while (reader.head^ <> #10) do
begin begin
reader.Next;
identifier += reader.head^; identifier += reader.head^;
reader.Next;
if isOutOfBound then if isOutOfBound then
exit; exit;
end; end;
reader.Next;
addToken(ltkComment); addToken(ltkComment);
reader.Next;
if callBackDoStop then if callBackDoStop then
exit; exit;
continue; continue;
@ -457,13 +470,17 @@ begin
begin begin
if (reader.Next^ = '*') then if (reader.Next^ = '*') then
begin begin
reader.saveBeginning;
if isOutOfBound then if isOutOfBound then
exit; exit;
while (reader.head^ <> '*') or (reader.Next^ <> '/') do while (reader.head^ <> '*') or (reader.Next^ <> '/') do
begin
identifier += reader.head^;
if isOutOfBound then if isOutOfBound then
exit; exit;
reader.Next; end;
addToken(ltkComment); addToken(ltkComment);
reader.Next;
if callBackDoStop then if callBackDoStop then
exit; exit;
continue; continue;
@ -477,6 +494,7 @@ begin
begin begin
if (reader.Next^ = '+') then if (reader.Next^ = '+') then
begin begin
reader.saveBeginning;
nestedCom := 1; nestedCom := 1;
if isOutOfBound then if isOutOfBound then
exit; exit;
@ -500,8 +518,8 @@ begin
exit; exit;
end; end;
until nestedCom = 0; until nestedCom = 0;
reader.Next;
addToken(ltkComment); addToken(ltkComment);
reader.Next;
if callBackDoStop then if callBackDoStop then
exit; exit;
continue; continue;
@ -520,6 +538,7 @@ begin
end; end;
if (reader.head^ = '"') then if (reader.head^ = '"') then
begin begin
reader.saveBeginning;
reader.Next; reader.Next;
if isOutOfBound then if isOutOfBound then
exit; exit;
@ -580,6 +599,7 @@ begin
if (reader.head^ = '`') then if (reader.head^ = '`') then
begin begin
reader.Next; reader.Next;
reader.saveBeginning;
if isOutOfBound then if isOutOfBound then
exit; exit;
while (reader.head^ <> '`') do while (reader.head^ <> '`') do
@ -602,6 +622,7 @@ begin
// token string // token string
if (reader.head^ = 'q') and (reader.Next^ = '{') then if (reader.head^ = 'q') and (reader.Next^ = '{') then
begin begin
reader.saveBeginning;
reader.Next; reader.Next;
if isOutOfBound then if isOutOfBound then
exit; exit;
@ -618,6 +639,7 @@ begin
if (reader.head^ = #39) then if (reader.head^ = #39) then
begin begin
reader.Next; reader.Next;
reader.saveBeginning;
if isOutOfBound then if isOutOfBound then
exit; exit;
while true do while true do
@ -652,6 +674,7 @@ begin
// check negative float '-0.' // check negative float '-0.'
if (reader.head^ = '-') then if (reader.head^ = '-') then
begin begin
reader.saveBeginning;
identifier += reader.head^; identifier += reader.head^;
if reader.Next^ = '0' then if reader.Next^ = '0' then
begin begin
@ -678,6 +701,7 @@ begin
// binary/hex numbr/float // binary/hex numbr/float
if (reader.head^ = '0') then if (reader.head^ = '0') then
begin begin
reader.saveBeginning;
identifier += reader.head^; identifier += reader.head^;
if (reader.Next^ in ['b', 'B']) then if (reader.Next^ in ['b', 'B']) then
begin begin
@ -733,6 +757,7 @@ begin
// check negative float/int '-xxx' // check negative float/int '-xxx'
if (reader.head^ = '-') then if (reader.head^ = '-') then
begin begin
reader.saveBeginning;
identifier += reader.head^; identifier += reader.head^;
if not isNumber(reader.Next^) then if not isNumber(reader.Next^) then
begin begin
@ -744,6 +769,7 @@ begin
// numbers // numbers
if isNumber(reader.head^) then if isNumber(reader.head^) then
begin begin
reader.saveBeginning;
identifier += reader.head^; identifier += reader.head^;
while isNumber(reader.Next^) or (reader.head^ = '_') do while isNumber(reader.Next^) or (reader.head^ = '_') do
begin begin
@ -760,6 +786,7 @@ begin
// symbChars // symbChars
if isSymbol(reader.head^) then if isSymbol(reader.head^) then
begin begin
reader.saveBeginning;
identifier += reader.head^; identifier += reader.head^;
reader.Next; reader.Next;
addToken(ltkSymbol); addToken(ltkSymbol);
@ -773,6 +800,7 @@ begin
// operators // operators
if isOperator1(reader.head^) then if isOperator1(reader.head^) then
begin begin
reader.saveBeginning;
identifier += reader.head^; identifier += reader.head^;
while isOperator1(reader.Next^) do while isOperator1(reader.Next^) do
begin begin
@ -876,6 +904,7 @@ begin
// identifier accum // identifier accum
if isFirstIdentifier(reader.head^) then if isFirstIdentifier(reader.head^) then
begin begin
reader.saveBeginning;
while isIdentifier(reader.head^) do while isIdentifier(reader.head^) do
begin begin
identifier += reader.head^; identifier += reader.head^;