|
@@ -76,6 +76,7 @@ begin
|
|
|
FNameValueSeparator:='=';
|
|
|
FLBS:=DefaultTextLineBreakStyle;
|
|
|
FSpecialCharsInited:=true;
|
|
|
+ FLineBreak:=sLineBreak;
|
|
|
end;
|
|
|
end;
|
|
|
|
|
@@ -103,6 +104,18 @@ begin
|
|
|
Result:=FDelimiter;
|
|
|
end;
|
|
|
|
|
|
+procedure TStrings.SetLineBreak(Const S : String);
|
|
|
+begin
|
|
|
+ CheckSpecialChars;
|
|
|
+ FLineBreak:=S;
|
|
|
+end;
|
|
|
+
|
|
|
+Function TStrings.GetLineBreak : String;
|
|
|
+begin
|
|
|
+ CheckSpecialChars;
|
|
|
+ Result:=FLineBreak;
|
|
|
+end;
|
|
|
+
|
|
|
|
|
|
procedure TStrings.SetQuoteChar(c:Char);
|
|
|
begin
|
|
@@ -487,11 +500,14 @@ Var P : Pchar;
|
|
|
begin
|
|
|
CheckSpecialChars;
|
|
|
// Determine needed place
|
|
|
- Case FLBS of
|
|
|
- tlbsLF : NL:=#10;
|
|
|
- tlbsCRLF : NL:=#13#10;
|
|
|
- tlbsCR : NL:=#13;
|
|
|
- end;
|
|
|
+ if FLineBreak<>sLineBreak then
|
|
|
+ NL:=FLineBreak
|
|
|
+ else
|
|
|
+ Case FLBS of
|
|
|
+ tlbsLF : NL:=#10;
|
|
|
+ tlbsCRLF : NL:=#13#10;
|
|
|
+ tlbsCR : NL:=#13;
|
|
|
+ end;
|
|
|
L:=0;
|
|
|
NLS:=Length(NL);
|
|
|
For I:=0 to count-1 do
|
|
@@ -541,7 +557,7 @@ begin
|
|
|
// Empty.
|
|
|
end;
|
|
|
|
|
|
-Function GetNextLine (Const Value : String; Var S : String; Var P : Integer) : Boolean;
|
|
|
+Class Function TStrings.GetNextLine (Const Value : String; Var S : String; Var P : Integer) : Boolean;
|
|
|
|
|
|
Var
|
|
|
PS : PChar;
|
|
@@ -575,6 +591,28 @@ begin
|
|
|
Result:=True;
|
|
|
end;
|
|
|
|
|
|
+Function TStrings.GetNextLineBreak (Const Value : String; Var S : String; Var P : Integer) : Boolean;
|
|
|
+
|
|
|
+Var
|
|
|
+ PS,PC,PP : PChar;
|
|
|
+ IP,L : Integer;
|
|
|
+
|
|
|
+begin
|
|
|
+ S:='';
|
|
|
+ Result:=False;
|
|
|
+ If ((Length(Value)-P)<=0) then
|
|
|
+ exit;
|
|
|
+ PS:=@Value[P];
|
|
|
+ PC:=PS;
|
|
|
+ PP:=AnsiStrPos(PS,PChar(FLineBreak));
|
|
|
+ // Stop on #0.
|
|
|
+ While (PC^<>#0) and (PC<>PP) do
|
|
|
+ Inc(PC);
|
|
|
+ P:=P+(PC-PS)+Length(FLineBreak);
|
|
|
+ SetString(S,PS,PC-PS);
|
|
|
+ Result:=True;
|
|
|
+end;
|
|
|
+
|
|
|
Procedure TStrings.DoSetTextStr(const Value: string; DoClear : Boolean);
|
|
|
|
|
|
Var
|
|
@@ -587,8 +625,14 @@ begin
|
|
|
if DoClear then
|
|
|
Clear;
|
|
|
P:=1;
|
|
|
- While GetNextLine (Value,S,P) do
|
|
|
- Add(S);
|
|
|
+ if FLineBreak=sLineBreak then
|
|
|
+ begin
|
|
|
+ While GetNextLine (Value,S,P) do
|
|
|
+ Add(S)
|
|
|
+ end
|
|
|
+ else
|
|
|
+ While GetNextLineBreak (Value,S,P) do
|
|
|
+ Add(S);
|
|
|
finally
|
|
|
EndUpdate;
|
|
|
end;
|
|
@@ -597,12 +641,14 @@ end;
|
|
|
Procedure TStrings.SetTextStr(const Value: string);
|
|
|
|
|
|
begin
|
|
|
+ CheckSpecialChars;
|
|
|
DoSetTextStr(Value,True);
|
|
|
end;
|
|
|
|
|
|
Procedure TStrings.AddText(const S: string);
|
|
|
|
|
|
begin
|
|
|
+ CheckSpecialChars;
|
|
|
DoSetTextStr(S,False);
|
|
|
end;
|
|
|
|