diff --git a/packages/rtl/sysutils.pas b/packages/rtl/sysutils.pas index fccabea..89cdadc 100644 --- a/packages/rtl/sysutils.pas +++ b/packages/rtl/sysutils.pas @@ -708,7 +708,7 @@ Type Class Function Create(const AValue: array of Char; StartIndex: SizeInt; ALen: SizeInt): string; overload; static; Class Function EndsText(const ASubText, AText: string): Boolean; static; Class Function Equals(const a: string; const b: string): Boolean; overload; static; - Class Function Format(const AFormat: string; const args: array of const): string; overload; static; + Class Function Format(const AFormat: string; const args: array of JSValue): string; overload; static; Class Function IsNullOrEmpty(const AValue: string): Boolean; static; Class Function IsNullOrWhiteSpace(const AValue: string): Boolean; static; Class Function Join(const Separator: string; const Values: array of JSValue): string; overload; static; @@ -733,7 +733,7 @@ Type Function EndsWith(const AValue: string): Boolean; overload; inline; Function EndsWith(const AValue: string; IgnoreCase: Boolean): Boolean; overload; Function Equals(const AValue: string): Boolean; overload; - Function Format(const args: array of const): string; overload; + Function Format(const args: array of jsValue): string; overload; Function GetHashCode: Integer; Function IndexOf(AValue: Char): SizeInt; overload; inline; Function IndexOf(const AValue: string): SizeInt; overload; inline; @@ -1181,7 +1181,7 @@ end; function Trim(const S: String): String; assembler; asm - return S.trim(); + return S.replace(/^[\s\uFEFF\xA0\x00-\x1f]+/,'').replace(/[\s\uFEFF\xA0\x00-\x1f]+$/,''); end; function TrimLeft(const S: String): String; assembler; @@ -5263,7 +5263,7 @@ Var begin SetLength(Result,ALen); For I:=1 to ALen do - Result[aLen]:=AValue[StartIndex+I-1]; + Result[I]:=AValue[StartIndex+I-1]; end; @@ -5280,7 +5280,7 @@ end; class function TStringHelper.Format(const AFormat: string; - const args: array of const): string; + const args: array of jsValue): string; begin Result:=Sysutils.Format(AFormat,Args); end; @@ -5294,7 +5294,7 @@ end; class function TStringHelper.IsNullOrWhiteSpace(const AValue: string): Boolean; begin - Result:=system.Length(SysUtils.Trim(AValue))=0; + Result:=system.Length(Trim(AValue))=0; end; @@ -5324,7 +5324,7 @@ begin If (ACount=0) or (VLen<0) then Result:='' else - Result:=TJSArray(Values).Slice(StartIndex,StartIndex+aCount-1).Join(Separator); + Result:=TJSArray(Values).Slice(StartIndex,StartIndex+aCount).Join(Separator); end; @@ -5403,7 +5403,7 @@ end; function TStringHelper.Contains(const AValue: string): Boolean; begin - Result:=Pos(AValue,Self)>0; + Result:=(AValue<>'') and (Pos(AValue,Self)>0); end; @@ -5500,10 +5500,10 @@ begin end; -function TStringHelper.Format(const args: array of const): string; +function TStringHelper.Format(const args: array of JSValue): string; begin - Result:=Format(Self,Args); + Result:=Sysutils.Format(Self,Args); end; @@ -5588,6 +5588,7 @@ function TStringHelper.IndexOfUnQuoted(const AValue: string; StartQuote, Var LV : SizeInt; + S : String; Function MatchAt(I : SizeInt) : Boolean ; Inline; @@ -5597,7 +5598,7 @@ Var begin J:=1; Repeat - Result:=(Self[I+J-1]=AValue[j]); + Result:=(S[I+J-1]=AValue[j]); Inc(J); Until (Not Result) or (J>LV); end; @@ -5606,6 +5607,7 @@ Var I,L,Q: SizeInt; begin + S:=Self; Result:=-1; LV:=system.Length(AValue); L:=Length-LV+1; @@ -5617,7 +5619,7 @@ begin begin While (Result=-1) and (I<=L) do begin - if (Self[I]=StartQuote) then + if (S[I]=StartQuote) then Q:=1-Q; if (Q=0) and MatchAt(i) then Result:=I-1; @@ -5628,9 +5630,9 @@ begin begin While (Result=-1) and (I<=L) do begin - if Self[I]=StartQuote then + if S[I]=StartQuote then Inc(Q) - else if (Self[I]=EndQuote) and (Q>0) then + else if (S[I]=EndQuote) and (Q>0) then Dec(Q); if (Q=0) and MatchAt(i) then Result:=I-1; @@ -6079,16 +6081,20 @@ end; function TStringHelper.Split(const Separators: array of Char; AQuoteStart, AQuoteEnd: Char; ACount: SizeInt; Options: TStringSplitOptions): TStringArray; + Const BlockSize = 10; +Var + S : String; + Function NextSep(StartIndex : SizeInt) : SizeInt; begin if (AQuoteStart<>#0) then - Result:=Self.IndexOfAnyUnQuoted(Separators,AQuoteStart,AQuoteEnd,StartIndex) + Result:=S.IndexOfAnyUnQuoted(Separators,AQuoteStart,AQuoteEnd,StartIndex) else - Result:=Self.IndexOfAny(Separators,StartIndex); + Result:=S.IndexOfAny(Separators,StartIndex); end; Procedure MaybeGrow(Curlen : SizeInt); @@ -6103,6 +6109,8 @@ Var T : String; begin + + // S:=Self; SetLength(Result,BlockSize); Len:=0; LastSep:=0; @@ -6132,6 +6140,7 @@ begin end; end; SetLength(Result,Len); + end; @@ -6165,19 +6174,23 @@ end; function TStringHelper.Split(const Separators: array of string; AQuoteStart, AQuoteEnd: Char; ACount: SizeInt; Options: TStringSplitOptions): TStringArray; + Const BlockSize = 10; +Var + S : String; + Function NextSep(StartIndex : SizeInt; out Match : SizeInt) : SizeInt; begin if (AQuoteStart<>#0) then - Result:=Self.IndexOfAnyUnQuoted(Separators,AQuoteStart,AQuoteEnd,StartIndex,Match) + Result:=S.IndexOfAnyUnQuoted(Separators,AQuoteStart,AQuoteEnd,StartIndex,Match) else - Result:=Self.IndexOfAny(Separators,StartIndex,Length,Match); - if Result<>-1 then - end; + // MVC todo: + Result:=-1; // S.IndexOfAny(Separators,StartIndex,Length,Match); + end; Procedure MaybeGrow(Curlen : SizeInt); begin @@ -6190,6 +6203,8 @@ Var T : String; begin + + S:=Self; SetLength(Result,BlockSize); Len:=0; LastSep:=0; @@ -6218,6 +6233,7 @@ begin end; end; SetLength(Result,Len); + end; @@ -6336,7 +6352,7 @@ end; function TStringHelper.Trim: string; begin - Result:=SysUtils.Trim(Self); + Result:=SysUtils.Trim(self); end;