From: <tw...@us...> - 2020-07-18 17:05:57
|
Revision: 3231 http://sourceforge.net/p/gexperts/code/3231 Author: twm Date: 2020-07-18 17:05:55 +0000 (Sat, 18 Jul 2020) Log Message: ----------- updated dzlib from OSDN Modified Paths: -------------- trunk/ExternalSource/dzlib/dzlib.inc trunk/ExternalSource/dzlib/u_dzClassUtils.pas trunk/ExternalSource/dzlib/u_dzConvertUtils.pas trunk/ExternalSource/dzlib/u_dzStringUtils.pas trunk/ExternalSource/dzlib/u_dzTranslator.pas trunk/ExternalSource/dzlib/u_dzTypes.pas trunk/ExternalSource/dzlib/u_dzVclUtils.pas Modified: trunk/ExternalSource/dzlib/dzlib.inc =================================================================== --- trunk/ExternalSource/dzlib/dzlib.inc 2020-07-18 11:55:20 UTC (rev 3230) +++ trunk/ExternalSource/dzlib/dzlib.inc 2020-07-18 17:05:55 UTC (rev 3231) @@ -8,10 +8,6 @@ {$DEFINE HAS_UNIT_SYSTEM_JSON} {$ENDIF} -{$IFNDEF DELPHIXE7_UP} -{$DEFINE STARTSTEXT_IMPLEMENTATION_REQUIRED} -{$ENDIF} - {$IFDEF DELPHIXE7_UP} // For now I assume the BDE is not installed for Delphi XE7 and later, but that // largely depends on what the user selected for installation. @@ -48,7 +44,7 @@ {$ENDIF} {$IFDEF DELPHI7_UP} -{$IFNDEF DELPHI_2009_UP} +{$IFNDEF DELPHI2009_UP} // Between Delphi 7 and 2007 Native(U)Int is wrongly declared as a 64 bit integer even though // the compiler only supports 32 bits. {$DEFINE NATIVE_INT_IS_WRONG} Modified: trunk/ExternalSource/dzlib/u_dzClassUtils.pas =================================================================== --- trunk/ExternalSource/dzlib/u_dzClassUtils.pas 2020-07-18 11:55:20 UTC (rev 3230) +++ trunk/ExternalSource/dzlib/u_dzClassUtils.pas 2020-07-18 17:05:55 UTC (rev 3231) @@ -203,7 +203,10 @@ /// @param s is the string to write /// @returns the number of bytes written. /// </summary> -function TStream_WriteString(_Stream: TStream; const _s: RawByteString): Integer; +function TStream_WriteString(_Stream: TStream; const _s: RawByteString): Integer; overload; +{$IFDEF UNICODE} +function TStream_WriteString(_Stream: TStream; const _s: string): Integer; overload; +{$ENDIF} /// <summary> /// Write a ShortString to the stream as binary, that is the length byte followed by len content bytes @@ -226,7 +229,10 @@ /// @param s is the string to write /// @returns the number of bytes written. /// </summary> -function TStream_WriteStringLn(_Stream: TStream; const _s: RawByteString): Integer; +function TStream_WriteStringLn(_Stream: TStream; const _s: RawByteString): Integer; overload; +{$IFDEF UNICODE} +function TStream_WriteStringLn(_Stream: TStream; const _s: string): Integer; overload; +{$ENDIF} /// <summary> /// Read a line from a stream, that is, a string ending in CRLF @@ -234,7 +240,10 @@ /// @param s returns the read string, without the CRLF /// @returns the number of bytes read, excluding the CRLF /// </summary> -function TStream_ReadStringLn(_Stream: TStream; out _s: string): Integer; +function TStream_ReadStringLn(_Stream: TStream; out _s: RawByteString): Integer; overload; +{$IFDEF UNICODE} +function TStream_ReadStringLn(_Stream: TStream; out _s: string): Integer; overload; +{$ENDIF} /// <summary> /// Write formatted data to the stream appending CRLF @@ -1025,6 +1034,13 @@ end; end; +{$IFDEF UNICODE} +function TStream_WriteString(_Stream: TStream; const _s: string): Integer; +begin + Result := TStream_WriteString(_Stream, RawByteString(_s)); +end; +{$ENDIF} + function TStream_WriteShortStringBinary(_Stream: TStream; const _s: ShortString): Integer; var Len: Byte; @@ -1051,24 +1067,30 @@ Result := Result + TStream_WriteString(_Stream, #13#10); end; +{$IFDEF UNICODE} +function TStream_WriteStringLn(_Stream: TStream; const _s: string): Integer; +begin + Result := TStream_WriteStringLn(_Stream, RawByteString(_s)); +end; +{$ENDIF} + function TStream_WriteFmtLn(_Stream: TStream; const _Format: string; _Args: array of const): Integer; begin Result := TStream_WriteStringLn(_Stream, AnsiString(Format(_Format, _Args))); end; -function TStream_ReadStringLn(_Stream: TStream; out _s: string): Integer; +function TStream_ReadStringLn(_Stream: TStream; out _s: RawByteString): Integer; var OldPos: Int64; EndString: Int64; NewPos: Int64; c: AnsiChar; - s: AnsiString; begin // twm: this is not really efficient, because it reads single bytes, if it becomes a problem, optimize it ;-) OldPos := _Stream.Position; {$IFNDEF DELPHIX_BERLIN_UP} - Endstring := 0; + EndString := 0; NewPos := 0; {$ENDIF} while True do begin @@ -1088,15 +1110,24 @@ end; end; Result := EndString - OldPos; - SetLength(s, Result); + SetLength(_s, Result); if Result <> 0 then begin _Stream.Position := OldPos; - _Stream.ReadBuffer(s[1], Length(s)); - _s := string(s); + _Stream.ReadBuffer(_s[1], Length(_s)); end; _Stream.Position := NewPos; end; +{$IFDEF UNICODE} +function TStream_ReadStringLn(_Stream: TStream; out _s: string): Integer; +var + s: RawByteString; +begin + Result := TStream_ReadStringLn(_Stream, s); + _s := string(s); +end; +{$ENDIF} + function TStrings_TryStringByObj(_Strings: TStrings; _Obj: Pointer; out _Value: string): Boolean; var i: Integer; Modified: trunk/ExternalSource/dzlib/u_dzConvertUtils.pas =================================================================== --- trunk/ExternalSource/dzlib/u_dzConvertUtils.pas 2020-07-18 11:55:20 UTC (rev 3230) +++ trunk/ExternalSource/dzlib/u_dzConvertUtils.pas 2020-07-18 17:05:55 UTC (rev 3231) @@ -23,6 +23,10 @@ DZ_FORMAT_DECIMAL_POINT: TFormatSettings; {$IFEND} +{$IF Declared(FormatSettings)} +function DecimalSeparator: Char; inline; +{$IFEND} + type ///<summary> /// Raised by the number conversion functions if a digit is invalid for the given base. </summary> @@ -771,7 +775,6 @@ end; {$IF Declared(FormatSettings)} - function DecimalSeparator: Char; inline; begin Result := FormatSettings.DecimalSeparator; Modified: trunk/ExternalSource/dzlib/u_dzStringUtils.pas =================================================================== --- trunk/ExternalSource/dzlib/u_dzStringUtils.pas 2020-07-18 11:55:20 UTC (rev 3230) +++ trunk/ExternalSource/dzlib/u_dzStringUtils.pas 2020-07-18 17:05:55 UTC (rev 3231) @@ -68,12 +68,14 @@ ///<summary> /// @returns true, if the given string is one of the strings in the given array /// Comparison is case sensitive </summary> -function IsStringIn(const _s: string; const _Arr: array of string): Boolean; +function IsStringIn(const _s: string; const _Arr: array of string; out _Idx: Integer): Boolean; overload; +function IsStringIn(const _s: string; const _Arr: array of string): Boolean; overload; ///<summary> /// @returns true, if the given string is one of the strings in the given array /// Comparison is case insensitive </summary> -function IsTextIn(const _s: string; const _Arr: array of string): Boolean; +function IsTextIn(const _s: string; const _Arr: array of string; out _Idx: Integer): Boolean; overload; +function IsTextIn(const _s: string; const _Arr: array of string): Boolean; overload; ///<summary> /// Function is deprecated, use ExtractStr instead </summary> @@ -433,6 +435,15 @@ function SplitString(_s: string; const _Delimiters: string): TStringArray; overload; function SplitString(_s: string; const _Delimiters: array of Char): TStringArray; overload; +function TStringArray_FromStrings(_sl: TStrings): TStringArray; + +///<summary> +/// Deletes Count entries from Arr starting from Index. +/// @Note: It is allowed for Index > Length(Arr) and also Index+Count > Length(Arr) +/// @raises ERangeCheck if Index or Count < 0 </summary> +procedure Delete(var _Arr: TStringArray; _Index: Integer; _Count: Integer); overload; +function Concat(const _Arr1, _Arr2: array of string): TStringArray; overload; + {$IFDEF SUPPORTS_UNICODE} function Copy(const _s: AnsiString; _Pos, _Len: Integer): AnsiString; overload; function Copy(const _s: AnsiString; _Pos: Integer): AnsiString; overload; @@ -486,6 +497,7 @@ implementation uses + SysConst, u_dzConvertUtils; function _(const _s: string): string; @@ -706,6 +718,58 @@ SetLength(Result, Idx); end; +function TStringArray_FromStrings(_sl: TStrings): TStringArray; +var + i: Integer; +begin + SetLength(Result, _sl.count); + for i := 0 to _sl.count - 1 do + Result[i] := _sl[i]; +end; + +procedure Delete(var _Arr: TStringArray; _Index: Integer; _Count: Integer); overload; +var + Len: Integer; + i: Integer; +begin + if _Index < 0 then + raise ERangeError.CreateRes(@SRangeError); + if _Count < 0 then + raise ERangeError.CreateRes(@SRangeError); + + Len := Length(_Arr); + if _Index > Len - 1 then begin + // after the end of the array -> nothing to do + Exit; //==> + end; + + if _Index >= Len - _Count then begin + // delete from the end + SetLength(_Arr, _Index); + Exit; //==> + end; + + for i := _Index to Len - _Count - 1 do begin + _Arr[i] := _Arr[i + _Count]; + end; + SetLength(_Arr, Len - _Count); +end; + +function Concat(const _Arr1, _Arr2: array of string): TStringArray; +var + Len1: Integer; + Len2: Integer; + i: Integer; +begin + Len1 := Length(_Arr1); + Len2 := Length(_Arr2); + SetLength(Result, Len1 + Len2); + for i := 0 to Len1 - 1 do + Result[i] := _Arr1[i]; + for i := 0 to Len2 - 1 do + Result[i + Len1] := _Arr2[i]; +end; + function ReplaceChars(const _s, _Search, _Replace: string): string; var i, j: LongInt; @@ -761,7 +825,7 @@ Result[i] := _ReplaceChar; Dup := True; end else - Delete(Result, i, 1); + System.Delete(Result, i, 1); end else Dup := False; end; @@ -849,12 +913,12 @@ {$IFDEF STARTSTEXT_IMPLEMENTATION_REQUIRED} function StartsText(const _Start, _s: string): Boolean; begin - Result := UStartsWith(_Start, _s); + Result := AnsiStartsText(_Start, _s); end; {$ENDIF} {$IFDEF STARTSSTR_IMPLEMENTATION_REQUIRED} -function StartsStr(const _Start, _s: string): boolean; +function StartsStr(const _Start, _s: string): Boolean; begin Result := AnsiStartsStr(_Start, _s); end; @@ -1518,7 +1582,7 @@ Result := string(s); end; -function IsStringIn(const _s: string; const _Arr: array of string): Boolean; +function IsStringIn(const _s: string; const _Arr: array of string; out _Idx: Integer): Boolean; var i: Integer; begin @@ -1526,22 +1590,38 @@ for i := 0 to Length(_Arr) - 1 do if _s = _Arr[i] then begin Result := True; + _Idx := i; Exit; //==> end; end; -function IsTextIn(const _s: string; const _Arr: array of string): Boolean; +function IsStringIn(const _s: string; const _Arr: array of string): Boolean; var + Idx: Integer; +begin + Result := IsStringIn(_s, _Arr, Idx); +end; + +function IsTextIn(const _s: string; const _Arr: array of string; out _Idx: Integer): Boolean; overload; +var i: Integer; begin Result := False; for i := 0 to Length(_Arr) - 1 do if SameText(_s, _Arr[i]) then begin + _Idx := i; Result := True; Exit; //==> end; end; +function IsTextIn(const _s: string; const _Arr: array of string): Boolean; +var + Idx: Integer; +begin + Result := IsTextIn(_s, _Arr, Idx); +end; + function StrToLowAscii(const _s: WideString): AnsiString; const CodePage = 20127; //20127 = us-ascii Modified: trunk/ExternalSource/dzlib/u_dzTranslator.pas =================================================================== --- trunk/ExternalSource/dzlib/u_dzTranslator.pas 2020-07-18 11:55:20 UTC (rev 3230) +++ trunk/ExternalSource/dzlib/u_dzTranslator.pas 2020-07-18 17:05:55 UTC (rev 3231) @@ -27,23 +27,20 @@ DZLIB_TRANSLATION_DOMAIN = 'dzlib'; function _(const _s: string): string; +/// we can't inline this function because we don't want to add gnugettext to units using it function GetText(const _s: string): string; -{$IFDEF SUPPORTS_INLINE} -inline; -{$ENDIF} +/// we can't inline this function because we don't want to add gnugettext to units using it function dzGetText(const _s: string): string; -{$IFDEF SUPPORTS_INLINE} -inline; -{$ENDIF} +/// we can't inline this function because we don't want to add gnugettext to units using it function DGetText(const _s: string; const _TextDomain: string = ''): string; +/// we can't inline this function because we don't want to add gnugettext to units using it + ///<summary> use this if you pass variables rather than constants to avoid warnings in the dxgettext tool </summary> -{$IFDEF SUPPORTS_INLINE} -inline; -{$ENDIF} function dzDGetText(const _s: string; const _TextDomain: string = ''): string; +/// we can't inline this function because we don't want to add gnugettext to units using it ///<summary> translate using the DZLIB_TRANSLATION_DOMAIN </summary> function dzlibGetText(const _s: string): string; Modified: trunk/ExternalSource/dzlib/u_dzTypes.pas =================================================================== --- trunk/ExternalSource/dzlib/u_dzTypes.pas 2020-07-18 11:55:20 UTC (rev 3230) +++ trunk/ExternalSource/dzlib/u_dzTypes.pas 2020-07-18 17:05:55 UTC (rev 3231) @@ -7,7 +7,7 @@ uses SysUtils, Classes, - Types; // for $IF Declared(TBytes) + Types; // for $IF Declared(TBytes) and TStringDynArray type EdzException = class(Exception) @@ -16,8 +16,17 @@ type TErrorHandlingEnum = (ehReturnFalse, ehRaiseException); +{$IF not Declared(RawByteString)} type - TStringArray = array of string; + RawByteString = AnsiString; +{$IFEND} + +type +{$IF not declared(TStringDynArray)} + TStringDynArray = array of string; +{$IFEND} + TStringArray = TStringDynArray; + TRawByteStringArray = array of RawByteString; TIntegerArray = array of Integer; TSingleArray = array of Single; TDoubleArray = array of Double; @@ -25,9 +34,6 @@ {$IF not Declared(TBytes)} TBytes = array of Byte; {$IFEND} -{$IF not Declared(RawByteString)} - RawByteString = AnsiString; -{$IFEND} type TByteMatrix = array of array of Byte; @@ -39,18 +45,6 @@ type TMethodPointer = procedure of object; -function TStringArray_FromStrings(_sl: TStrings): TStringArray; - implementation -function TStringArray_FromStrings(_sl: TStrings): TStringArray; -var - i: Integer; -begin - SetLength(Result, _sl.count); - for i := 0 to _sl.count - 1 do - Result[i] := _sl[i]; -end; - end. - Modified: trunk/ExternalSource/dzlib/u_dzVclUtils.pas =================================================================== --- trunk/ExternalSource/dzlib/u_dzVclUtils.pas 2020-07-18 11:55:20 UTC (rev 3230) +++ trunk/ExternalSource/dzlib/u_dzVclUtils.pas 2020-07-18 17:05:55 UTC (rev 3231) @@ -267,26 +267,23 @@ _Data: Integer); overload; function TStringGrid_GetNonfixedCell(_Grid: TStringGrid; _Col, _Row: Integer): string; -///<summary> -/// scrolls up the lines of a string grid -/// @param Grid is the TStringGrid to scroll -/// @param Top is the topmost row to scroll, if passed as -1 defaults to the first non-fixed row -/// @param Bottom is the bottommost row to scroll, if passed as -1 defaults to RowCount-1 </summary> +///<summary> scrolls up the lines of a string grid +/// @param Grid is the TStringGrid to scroll +/// @param Top is the topmost row to scroll, if passed as -1 defaults to the first non-fixed row +/// @param Bottom is the bottommost row to scroll, if passed as -1 defaults to RowCount-1 </summary> procedure TStringGrid_ScrollUp(_Grid: TStringGrid; _Top: Integer = -1; _Bottom: Integer = -1); -///<summary> -/// Deletes the given row from the string grid and moves all rows below it up by one, -/// if there is only one non-fixed row left, this row is cleared but not deleted. -/// @param Grid is the StringGrid to change -/// @param Row is the index of the row to delete, or -1 to delete the current row -/// @returns true, if the row was deleted </summary> +///<summary> deletes the given row from the string grid and moves all rows below it up by one, +/// if there is only one non-fixed row left, this row is cleared but not deleted. +/// @param Grid is the StringGrid to change +/// @param Row is the index of the row to delete, or -1 to delete the current row +/// @returns true, if the row was deleted </summary> function TStringGrid_DeleteRow(_Grid: TStringGrid; _Row: Integer = -1): Boolean; -///<summary> -/// Inserts a row at the given index into the string grid and moves all rows below it down by one. -/// @param Grid is the StringGrid to change -/// @param Row is the index of the row to insert, or -1 to insert at the current row -/// @returns the inserted row index or -1 if the row cannot be inserted </summary> +///<summary> inserts a row at the given index into the string grid and moves all rows below it down by one. +/// @param Grid is the StringGrid to change +/// @param Row is the index of the row to insert, or -1 to insert at the current row +/// @returns the inserted row index or -1 if the row cannot be inserted </summary> function TStringGrid_InsertRow(_Grid: TStringGrid; _Row: Integer = -1): Integer; ///<summary> @@ -2539,7 +2536,7 @@ for i := Low(_Arr) to High(_Arr) do begin Result := _Arr[i] = _Element; if Result then - Exit; + Exit; //==> end; end; @@ -2550,7 +2547,7 @@ begin if TCustomGrid(_Grid) is TCustomDbGrid then if (dgIndicator in TDbGridHack(_Grid).Options) and (_Col = 0) then - Exit; + Exit; //==> ColText := _Grid.GetEditText(_Col, _Row); ColWidth := _Grid.Canvas.TextWidth(ColText); if ColWidth > _MinWidth then This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |