X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fshared%2Futils.pas;h=f61035e5c4ac6a6fbf736df86b64e53901c4550e;hb=5c0e145428d60023677261d107632740cec9342b;hp=6bfe7915453d93af3b465d0fb5b0a7fbd97e46df;hpb=2b04301f4303668096c37c21e06af70930f55b7f;p=d2df-sdl.git diff --git a/src/shared/utils.pas b/src/shared/utils.pas index 6bfe791..f61035e 100644 --- a/src/shared/utils.pas +++ b/src/shared/utils.pas @@ -81,6 +81,8 @@ function Int64ToStrComma (i: Int64): AnsiString; function UpCase1251 (ch: Char): Char; function LoCase1251 (ch: Char): Char; +function toLowerCase1251 (const s: AnsiString): AnsiString; + // `true` if strings are equal; ignoring case for cp1251 function StrEquCI1251 (const s0, s1: AnsiString): Boolean; @@ -843,6 +845,26 @@ begin end; +function toLowerCase1251 (const s: AnsiString): AnsiString; +var + f: Integer; + ch: AnsiChar; +begin + for ch in s do + begin + if (ch <> LoCase1251(ch)) then + begin + result := ''; + SetLength(result, Length(s)); + for f := 1 to Length(s) do result[f] := LoCase1251(s[f]); + exit; + end; + end; + // nothing to do + result := s; +end; + + // ////////////////////////////////////////////////////////////////////////// // // utils // `ch`: utf8 start @@ -1247,6 +1269,7 @@ var fmtblen: Integer; pclen: Integer; pc: PAnsiChar; + ccname: ShortString; procedure writer (constref buf; len: SizeUInt); var @@ -1338,7 +1361,7 @@ var xpos := High(strbuf); strbuf[xpos] := #0; Dec(xpos); repeat - if hex then + if not hex then begin strbuf[xpos] := AnsiChar((n mod 10)+48); Dec(xpos); @@ -1368,7 +1391,7 @@ var xpos := High(strbuf); strbuf[xpos] := #0; Dec(xpos); repeat - if hex then + if not hex then begin strbuf[xpos] := AnsiChar((n mod 10)+48); Dec(xpos); @@ -1646,15 +1669,17 @@ begin end; vtObject: // args[curarg].VObject.Classname (TObject) begin - if (sign <> '-') then indent(width-Length(args[curarg].VObject.Classname)); - xwrite(args[curarg].VObject.Classname); - if (sign = '-') then indent(width-Length(args[curarg].VObject.Classname)); + if (args[curarg].VObject <> nil) then ccname := args[curarg].VObject.Classname else ccname := ''; + if (sign <> '-') then indent(width-Length(ccname)); + xwrite(ccname); + if (sign = '-') then indent(width-Length(ccname)); end; vtClass: // args[curarg].VClass.Classname (TClass) begin - if (sign <> '-') then indent(width-Length(args[curarg].VClass.Classname)); - xwrite(args[curarg].VClass.Classname); - if (sign = '-') then indent(width-Length(args[curarg].VClass.Classname)); + if (args[curarg].VClass <> nil) then ccname := args[curarg].VClass.Classname else ccname := ''; + if (sign <> '-') then indent(width-Length(ccname)); + xwrite(ccname); + if (sign = '-') then indent(width-Length(ccname)); end; //vtPWideChar: begin end; // args[curarg].VPWideChar (PWideChar) vtAnsiString: // AnsiString(args[curarg].VAnsiString) (Pointer)