mirror of https://gitlab.com/basile.b/dexed.git
fix #285
This commit is contained in:
parent
7a5fc7f970
commit
7acb60c450
|
@ -1446,12 +1446,13 @@ function TCESynMemo.indentationMode: TIndentationMode;
|
||||||
function checkLine(index: integer): TIndentationMode;
|
function checkLine(index: integer): TIndentationMode;
|
||||||
var
|
var
|
||||||
u: string;
|
u: string;
|
||||||
|
b: array[0..15] of char = ' ';
|
||||||
begin
|
begin
|
||||||
result := imNone;
|
result := imNone;
|
||||||
u := Lines[index];
|
u := Lines[index];
|
||||||
if (u.length > 0) and (u[1] = #9) then
|
if (u.length > 0) and (u[1] = #9) then
|
||||||
result := imTabs
|
result := imTabs
|
||||||
else if (u.length > 1) and (u[1..2] = ' ') then
|
else if (u.length >= self.TabWidth) and u.StartsWith(b[0..TabWidth-1]) then
|
||||||
result := imSpaces;
|
result := imSpaces;
|
||||||
end;
|
end;
|
||||||
var
|
var
|
||||||
|
@ -1476,51 +1477,56 @@ begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCESynMemo.forceIndentation(m: TIndentationMode; w: integer);
|
procedure TCESynMemo.forceIndentation(m: TIndentationMode; w: integer);
|
||||||
|
type
|
||||||
|
TIndentComposition = record
|
||||||
|
numS: integer;
|
||||||
|
numT: integer;
|
||||||
|
end;
|
||||||
var
|
var
|
||||||
s: string;
|
s: string;
|
||||||
i: integer;
|
i: integer;
|
||||||
p: integer;
|
p: integer;
|
||||||
c: integer;
|
|
||||||
b: string;
|
b: string;
|
||||||
|
c: TIndentComposition;
|
||||||
|
u: char;
|
||||||
begin
|
begin
|
||||||
|
assert(w > 0);
|
||||||
for i:= 0 to lines.Count-1 do
|
for i:= 0 to lines.Count-1 do
|
||||||
begin
|
begin
|
||||||
c := 0;
|
|
||||||
p := 1;
|
p := 1;
|
||||||
|
c.numS := 0;
|
||||||
|
c.numT := 0;
|
||||||
s := lines.Strings[i];
|
s := lines.Strings[i];
|
||||||
case m of
|
|
||||||
imTabs:
|
|
||||||
begin
|
|
||||||
while p <= s.length do
|
while p <= s.length do
|
||||||
begin
|
begin
|
||||||
if s[p] = ' ' then
|
u := s[p];
|
||||||
c+=1
|
if u = ' ' then
|
||||||
|
c.numS += 1
|
||||||
|
else if u = #9 then
|
||||||
|
c.numT += 1
|
||||||
else break;
|
else break;
|
||||||
p += 1;
|
p += 1;
|
||||||
end;
|
end;
|
||||||
if c >= w then
|
if p <> 1 then
|
||||||
|
case m of
|
||||||
|
imTabs:
|
||||||
|
begin
|
||||||
|
setLength(b, (c.numS div w) + c.numT);
|
||||||
|
if b <> '' then
|
||||||
begin
|
begin
|
||||||
setLength(b, c div w);
|
|
||||||
FillChar(b[1], b.length, #9);
|
FillChar(b[1], b.length, #9);
|
||||||
s := b + s[c+1 .. s.length];
|
s := b + s[p .. s.length];
|
||||||
lines[i] := s;
|
lines[i] := s;
|
||||||
fModified:=true;
|
fModified:=true;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
imSpaces:
|
imSpaces:
|
||||||
begin
|
begin
|
||||||
while p <= s.length do
|
setLength(b, c.numT * w + c.numS);
|
||||||
|
if b <> '' then
|
||||||
begin
|
begin
|
||||||
if s[p] = #9 then
|
|
||||||
c+=1
|
|
||||||
else break;
|
|
||||||
p += 1;
|
|
||||||
end;
|
|
||||||
if c > 0 then
|
|
||||||
begin
|
|
||||||
setLength(b, c * w);
|
|
||||||
FillChar(b[1], b.length, ' ');
|
FillChar(b[1], b.length, ' ');
|
||||||
s := b + s[c+1 .. s.length];
|
s := b + s[p .. s.length];
|
||||||
lines[i] := s;
|
lines[i] := s;
|
||||||
fModified:=true;
|
fModified:=true;
|
||||||
end;
|
end;
|
||||||
|
|
Loading…
Reference in New Issue