fpc/rtl/objpas/sysutils/sysencodingh.inc
2011-10-04 05:06:32 +00:00

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}