mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-29 05:22:50 +02:00
162 lines
7.7 KiB
PHP
162 lines
7.7 KiB
PHP
{$ifndef VER2_4}
|
|
type
|
|
EEncodingError = class(Exception);
|
|
|
|
{ TEncoding }
|
|
|
|
TEncoding = class
|
|
strict private
|
|
type
|
|
TStandardEncoding = (
|
|
seAnsi,
|
|
seAscii,
|
|
seUnicode,
|
|
seBigEndianUnicode,
|
|
seUTF7,
|
|
seUTF8);
|
|
var
|
|
FStandardEncodings: array[TStandardEncoding] of TEncoding; static;
|
|
|
|
class function GetANSI: TEncoding; static;
|
|
class function GetASCII: TEncoding; static;
|
|
class function GetBigEndianUnicode: TEncoding; static;
|
|
class function GetDefault: TEncoding; static;
|
|
class function GetUnicode: TEncoding; static;
|
|
class function GetUTF7: TEncoding; static;
|
|
class function GetUTF8: TEncoding; static;
|
|
|
|
class constructor Create;
|
|
class destructor Destroy;
|
|
strict protected
|
|
FIsSingleByte: Boolean;
|
|
FMaxCharSize: Integer;
|
|
function GetByteCount(Chars: PUnicodeChar; CharCount: Integer): Integer; overload; virtual; abstract;
|
|
function GetBytes(Chars: PUnicodeChar; CharCount: Integer; Bytes: PByte; ByteCount: Integer): Integer; overload; virtual; abstract;
|
|
function GetCharCount(Bytes: PByte; ByteCount: Integer): Integer; overload; virtual; abstract;
|
|
function GetChars(Bytes: PByte; ByteCount: Integer; Chars: PUnicodeChar; CharCount: Integer): Integer; overload; virtual; abstract;
|
|
function GetCodePage: Cardinal; virtual; abstract;
|
|
function GetEncodingName: UnicodeString; virtual; abstract;
|
|
public
|
|
class procedure FreeEncodings;
|
|
function Clone: TEncoding; virtual;
|
|
class function Convert(Source, Destination: TEncoding; const Bytes: TBytes): TBytes; overload;
|
|
class function Convert(Source, Destination: TEncoding; const Bytes: TBytes; StartIndex, Count: Integer): TBytes; overload;
|
|
class function IsStandardEncoding(AEncoding: TEncoding): Boolean; static;
|
|
class function GetBufferEncoding(const Buffer: TBytes; var AEncoding: TEncoding): Integer; overload; static;
|
|
class function GetBufferEncoding(const Buffer: TBytes; var AEncoding: TEncoding;
|
|
ADefaultEncoding: TEncoding): Integer; overload; static;
|
|
function GetByteCount(const Chars: TUnicodeCharArray): Integer; overload;
|
|
function GetByteCount(const Chars: TUnicodeCharArray; CharIndex, CharCount: Integer): Integer; overload;
|
|
function GetByteCount(const S: UnicodeString): Integer; overload;
|
|
function GetByteCount(const S: UnicodeString; CharIndex, CharCount: Integer): Integer; overload;
|
|
function GetBytes(const Chars: TUnicodeCharArray): TBytes; overload;
|
|
function GetBytes(const Chars: TUnicodeCharArray; CharIndex, CharCount: Integer): TBytes; overload;
|
|
function GetBytes(const Chars: TUnicodeCharArray; CharIndex, CharCount: Integer;
|
|
const Bytes: TBytes; ByteIndex: Integer): Integer; overload;
|
|
function GetBytes(const S: UnicodeString): TBytes; overload;
|
|
function GetBytes(const S: UnicodeString; CharIndex, CharCount: Integer;
|
|
const Bytes: TBytes; ByteIndex: Integer): Integer; overload;
|
|
function GetCharCount(const Bytes: TBytes): Integer; overload;
|
|
function GetCharCount(const Bytes: TBytes; ByteIndex, ByteCount: Integer): Integer; overload;
|
|
function GetChars(const Bytes: TBytes): TUnicodeCharArray; overload;
|
|
function GetChars(const Bytes: TBytes; ByteIndex, ByteCount: Integer): TUnicodeCharArray; overload;
|
|
function GetChars(const Bytes: TBytes; ByteIndex, ByteCount: Integer;
|
|
const Chars: TUnicodeCharArray; CharIndex: Integer): Integer; overload;
|
|
class function GetEncoding(CodePage: Integer): TEncoding; overload; static;
|
|
class function GetEncoding(const EncodingName: UnicodeString): TEncoding; overload; static;
|
|
function GetMaxByteCount(CharCount: Integer): Integer; virtual; abstract;
|
|
function GetMaxCharCount(ByteCount: Integer): Integer; virtual; abstract;
|
|
function GetPreamble: TBytes; virtual; abstract;
|
|
function GetString(const Bytes: TBytes): UnicodeString; overload;
|
|
function GetString(const Bytes: TBytes; ByteIndex, ByteCount: Integer): UnicodeString; overload;
|
|
|
|
property CodePage: Cardinal read GetCodePage;
|
|
property EncodingName: UnicodeString read GetEncodingName;
|
|
property IsSingleByte: Boolean read FIsSingleByte;
|
|
|
|
class property ANSI: TEncoding read GetANSI;
|
|
class property ASCII: TEncoding read GetASCII;
|
|
class property BigEndianUnicode: TEncoding read GetBigEndianUnicode;
|
|
class property Default: TEncoding read GetDefault;
|
|
class property Unicode: TEncoding read GetUnicode;
|
|
class property UTF7: TEncoding read GetUTF7;
|
|
class property UTF8: TEncoding read GetUTF8;
|
|
end;
|
|
|
|
{ TMBCSEncoding }
|
|
|
|
TMBCSEncoding = class(TEncoding)
|
|
strict private
|
|
FCodePage: Integer;
|
|
FMBToWCharFlags: Integer;
|
|
FWCharToMBFlags: Integer;
|
|
strict protected
|
|
function GetByteCount(Chars: PUnicodeChar; CharCount: Integer): Integer; overload; override;
|
|
function GetBytes(Chars: PUnicodeChar; CharCount: Integer; Bytes: PByte; ByteCount: Integer): Integer; overload; override;
|
|
function GetCharCount(Bytes: PByte; ByteCount: Integer): Integer; overload; override;
|
|
function GetChars(Bytes: PByte; ByteCount: Integer; Chars: PUnicodeChar; CharCount: Integer): Integer; overload; override;
|
|
function GetCodePage: Cardinal; override;
|
|
function GetEncodingName: UnicodeString; override;
|
|
public
|
|
constructor Create; overload; virtual;
|
|
constructor Create(ACodePage: Integer); overload; virtual;
|
|
constructor Create(ACodePage, MBToWCharFlags, WCharToMBFlags: Integer); overload; virtual;
|
|
function Clone: TEncoding; override;
|
|
function GetMaxByteCount(CharCount: Integer): Integer; override;
|
|
function GetMaxCharCount(ByteCount: Integer): Integer; override;
|
|
function GetPreamble: TBytes; override;
|
|
end;
|
|
|
|
{ TUTF7Encoding }
|
|
|
|
TUTF7Encoding = class(TMBCSEncoding)
|
|
public
|
|
constructor Create; override;
|
|
function Clone: TEncoding; override;
|
|
function GetMaxByteCount(CharCount: Integer): Integer; override;
|
|
function GetMaxCharCount(ByteCount: Integer): Integer; override;
|
|
end;
|
|
|
|
{ TUTF8Encoding }
|
|
|
|
TUTF8Encoding = class(TUTF7Encoding)
|
|
public
|
|
constructor Create; override;
|
|
function Clone: TEncoding; override;
|
|
function GetMaxByteCount(CharCount: Integer): Integer; override;
|
|
function GetMaxCharCount(ByteCount: Integer): Integer; override;
|
|
function GetPreamble: TBytes; override;
|
|
end;
|
|
|
|
{ TUnicodeEncoding }
|
|
|
|
TUnicodeEncoding = class(TEncoding)
|
|
strict protected
|
|
function GetByteCount(Chars: PUnicodeChar; CharCount: Integer): Integer; overload; override;
|
|
function GetBytes(Chars: PUnicodeChar; CharCount: Integer; Bytes: PByte; ByteCount: Integer): Integer; overload; override;
|
|
function GetCharCount(Bytes: PByte; ByteCount: Integer): Integer; overload; override;
|
|
function GetChars(Bytes: PByte; ByteCount: Integer; Chars: PUnicodeChar; CharCount: Integer): Integer; overload; override;
|
|
function GetCodePage: Cardinal; override;
|
|
function GetEncodingName: UnicodeString; override;
|
|
public
|
|
constructor Create; virtual;
|
|
function Clone: TEncoding; override;
|
|
function GetMaxByteCount(CharCount: Integer): Integer; override;
|
|
function GetMaxCharCount(ByteCount: Integer): Integer; override;
|
|
function GetPreamble: TBytes; override;
|
|
end;
|
|
|
|
{ TBigEndianUnicodeEncoding }
|
|
|
|
TBigEndianUnicodeEncoding = class(TUnicodeEncoding)
|
|
strict protected
|
|
function GetBytes(Chars: PUnicodeChar; CharCount: Integer; Bytes: PByte; ByteCount: Integer): Integer; overload; override;
|
|
function GetChars(Bytes: PByte; ByteCount: Integer; Chars: PUnicodeChar; CharCount: Integer): Integer; overload; override;
|
|
function GetCodePage: Cardinal; override;
|
|
function GetEncodingName: UnicodeString; override;
|
|
public
|
|
function Clone: TEncoding; override;
|
|
function GetPreamble: TBytes; override;
|
|
end;
|
|
{$endif VER2_4}
|