unit uROUnicodeConv; // UnicodeConv 2.0.0 // Unicode Converter Library 2.0.0 // Delphi 3/4/5/6 and Kylix Implementation // // Copyright (c) 2002 by Dieter Köhler // ("http://www.philo.de/xml/") // // Definitions: // - "Package" refers to the collection of files distributed by // the Copyright Holder, and derivatives of that collection of // files created through textual modification. // - "Standard Version" refers to such a Package if it has not // been modified, or has been modified in accordance with the // wishes of the Copyright Holder. // - "Copyright Holder" is whoever is name in the copyright or // copyrights for the package. // - "You" is you, if you're thinking about copying or distributing // this Package. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation // files (the "Package"), to deal in the Package without restriction, // including without limitation the rights to use, copy, modify, // merge, publish, distribute, sublicense, and/or sell copies of the // Package, and to permit persons to whom the Package is furnished // to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Package. // // You may modify your copy of this Package in any way, provided // that you insert a prominent notice in each changed file stating // how and when you changed a file, and provided that you do at // least one of the following: // // a) allow the Copyright Holder to include your modifications in // the Standard Version of the Package. // // b) use the modified Package only within your corporation or // organization. // // c) rename any non standard executables, units, and classes so // the names do not conflict with standard executables, units, and // classes, and provide a separate manual page that clearly documents // how it differs from the standard version. // // d) make other distribution arrangements with the Copyright Holder. // // The name of the Copyright Holder may not be used to endorse or // promote products derived from this Package without specific prior // written permission. // // THE PACKAGE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE // PACKAGE OR THE USE OR OTHER DEALINGS IN THE PACKAGE. interface {$I RemObjects.inc} uses SysUtils, Classes; type TdomEncodingType = (etUnknown,etUTF8,etUTF16BE,etUTF16LE,etLatin1, etLatin2,etLatin3,etLatin4,etCyrillic,etArabic, etGreek,etHebrew,etLatin5,etLatin6,etLatin7, etLatin8,etLatin9,etKOI8R,etcp10000_MacRoman, etWindows1250,etWindows1251,etWindows1252); EConversionStream = class(EStreamError); TConversionStream = class(TStream) private FTarget: TStream; FConvertCount: longint; FConvertBufP: pointer; FConvertBufSize: longint; protected function convertReadBuffer(const buffer; count: longint): longint; virtual; function convertWriteBuffer(const buffer; count: longint): longint; virtual; procedure setConvertBufSize(newSize: longint); virtual; public constructor Create(target: TStream); destructor Destroy; override; function Read(var buffer; count: longint): longint; override; function Write(const buffer; count: longint): longint; override; function Seek(offset: longint; origin: word): longint; override; procedure FreeConvertBuffer; property Target: TStream read FTarget; property ConvertBufP: pointer read FConvertBufP; property ConvertCount: longint read FConvertCount; property ConvertBufSize: longint read FConvertBufSize; end; TUTF16BEToUTF8Stream = class(TConversionStream) private FExpandLF: boolean; protected function convertWriteBuffer(const buffer; count: longint): longint; override; public property expandLF: boolean read FExpandLF write FExpandLF; end; function StrToEncoding(const S: String): TdomEncodingType; function SingleByteEncodingToUTF16Char(const P: Char; const Encoding: TdomEncodingType): WideChar; function Iso8859_1ToUTF16Char(const P: Char): WideChar; function Iso8859_2ToUTF16Char(const P: Char): WideChar; function Iso8859_3ToUTF16Char(const P: Char): WideChar; function Iso8859_4ToUTF16Char(const P: Char): WideChar; function Iso8859_5ToUTF16Char(const P: Char): WideChar; function Iso8859_6ToUTF16Char(const P: Char): WideChar; function Iso8859_7ToUTF16Char(const P: Char): WideChar; function Iso8859_8ToUTF16Char(const P: Char): WideChar; function Iso8859_9ToUTF16Char(const P: Char): WideChar; function Iso8859_10ToUTF16Char(const P: Char): WideChar; function Iso8859_13ToUTF16Char(const P: Char): WideChar; function Iso8859_14ToUTF16Char(const P: Char): WideChar; function Iso8859_15ToUTF16Char(const P: Char): WideChar; function KOI8_RToUTF16Char(const P: Char): WideChar; function cp10000_MacRomanToUTF16Char(const P: Char): WideChar; function cp1250ToUTF16Char(const P: Char): WideChar; function cp1251ToUTF16Char(const P: Char): WideChar; function cp1252ToUTF16Char(const P: Char): WideChar; function Iso8859_1ToUTF16Str(const S: string): wideString; function Iso8859_2ToUTF16Str(const S: string): wideString; function Iso8859_3ToUTF16Str(const S: string): wideString; function Iso8859_4ToUTF16Str(const S: string): wideString; function Iso8859_5ToUTF16Str(const S: string): wideString; function Iso8859_6ToUTF16Str(const S: string): wideString; function Iso8859_7ToUTF16Str(const S: string): wideString; function Iso8859_8ToUTF16Str(const S: string): wideString; function Iso8859_9ToUTF16Str(const S: string): wideString; function Iso8859_10ToUTF16Str(const S: string): wideString; function Iso8859_13ToUTF16Str(const S: string): wideString; function Iso8859_14ToUTF16Str(const S: string): wideString; function Iso8859_15ToUTF16Str(const S: string): wideString; function KOI8_RToUTF16Str(const S: string): wideString; function cp10000_MacRomanToUTF16Str(const S: string): wideString; function cp1250ToUTF16Str(const S: string): wideString; function cp1251ToUTF16Str(const S: string): wideString; function cp1252ToUTF16Str(const S: string): wideString; function UTF8ToUTF16BEStr(const S: string): wideString; function UTF16BEToUTF8Str(const ws: wideString; const expandLF: boolean): string; function UTF16To7BitASCIIChar(const P: wideChar): char; function UTF16ToIso8859_1Char(const P: wideChar): char; function UTF16To7BitASCIIStr(const S: wideString): string; function UTF16ToIso8859_1Str(const S: wideString): string; function UTF16HighSurrogate(const value: integer): WideChar; function UTF16LowSurrogate(const value: integer): WideChar; function UTF16SurrogateToInt(const highSurrogate, lowSurrogate: WideChar): integer; function IsUTF16HighSurrogate(const S: WideChar): boolean; function IsUTF16LowSurrogate(const S: WideChar): boolean; type ECSMIBException = Exception; TCSMIBChangingEvent = procedure (Sender: TObject; NewEnum: integer; var AllowChange: Boolean) of object; TCSMIB = class (TComponent) protected FEnum: integer; FIgnoreInvalidEnum: boolean; FOnChanging: TCSMIBChangingEvent; FOnChange: TNotifyEvent; procedure DoChange(Sender: TObject); virtual; procedure DoChanging(Sender: TObject; NewEnum: integer; var AllowChange: Boolean); virtual; function GetPrfMIMEName: string; virtual; function GetAlias(i: integer): string; virtual; function GetAliasCount: integer; virtual; procedure SetEnum(const Value: integer); virtual; procedure SetOnChange(const Value: TNotifyEvent); virtual; procedure SetOnChanging(const Value: TCSMIBChangingEvent); virtual; public constructor Create(AOwner: TComponent); override; function IsValidEnum(const Value: integer): boolean; virtual; function SetToAlias(const S: string): boolean; virtual; property Alias[i: integer]: string read GetAlias; property AliasCount: integer read GetAliasCount; property PreferredMIMEName: string read GetPrfMIMEName; published property OnChange: TNotifyEvent read FOnChange write SetOnChange; property OnChanging: TCSMIBChangingEvent read FOnChanging write SetOnChanging; property Enum: integer read FEnum write SetEnum; property IgnoreInvalidEnum: boolean read FIgnoreInvalidEnum write FIgnoreInvalidEnum; end; {procedure Register;} implementation {procedure Register; begin RegisterComponents('XML', [TCSMIB]); end;} resourcestring SOddSizeInvalid = 'Odd size not valid for WideString'; STargetNil = 'Must have a target stream'; // +++++++++++++++++++++++++ TConversionStream +++++++++++++++++++++++++ // - Provided by Karl Waclawek - // This is an input/output stream for other streams. // Purpose: transform data as they are written to or read from a target // stream. constructor TConversionStream.create(Target: TStream); begin if Target = nil then raise EConversionStream.create(STargetNil); inherited create; FTarget := Target; end; destructor TConversionStream.destroy; begin FreeMem(FConvertBufP); inherited destroy; end; function TConversionStream.Seek(Offset: longint; Origin: Word): longint; begin Result := 0; // Seek makes no sense here end; function TConversionStream.ConvertReadBuffer(const Buffer; Count: longint): longint; // Performs the actual conversion of the data in Buffer (read buffer); // the result of the conversion must be written to ConvertBufB } begin Result := 0; //do nothing, override in descendants end; function TConversionStream.ConvertWriteBuffer(const Buffer; Count: longint): longint; // Performs the actual conversion of the data in Buffer (write buffer); // the result of the conversion must be written to ConvertBufB } begin Result := 0; //do nothing, override in descendants end; function TConversionStream.Read(var Buffer; Count: longint): longint; // Reads Count bytes from target stream into Buffer; // converts those bytes and stores the result in ConvertBufP; // ConvertCount indicates the amount of bytes converted. begin Result := Target.Read(Buffer, Count); FConvertCount := ConvertReadBuffer(Buffer, Result); end; function TConversionStream.Write(const Buffer; Count: longint): longint; // Converts Count bytes from Buffer into ConvertBufP; // ConvertCount indicates the amount of bytes converted; // if not all converted bytes could be written to the target stream, // then this returns the negative of the number of bytes actually written. begin Result := Count; FConvertCount := ConvertWriteBuffer(Buffer, Result); Count := Target.Write(FConvertBufP^, FConvertCount); //if not all converted data could be written, return the negative //count of the data actually written. This avoids having Result //being the same as Count by coincidence if Count <> FConvertCount then Result := -Count; end; procedure TConversionStream.FreeConvertBuffer; begin ReallocMem(FConvertBufP, 0); FConvertBufSize := 0; end; procedure TConversionStream.SetConvertBufSize(NewSize: Integer); begin ReallocMem(FConvertBufP, NewSize); FConvertBufSize := NewSize; end; // ++++++++++++++++++++++++++ TUTF16BEToUTF8Stream +++++++++++++++++++++++ function TUTF16BEToUTF8Stream.ConvertWriteBuffer(const Buffer; Count: Integer): longint; // Converts an UTF-16BE stream into an UTF-8 encoded stream // (and expands LF to CR+LF if its protected expandLF property // is 'true'). // - This function was provided by Ernst van der Pols - // - expandLF parameter added by Dieter Köhler - // - converted for stream processing by Karl Waclawek - type TWideCharBuf = array[0..(MaxInt shr 1) - 1] of WideChar; var InIndx, OutIndx: longint; Wc: WideChar; InBuf: TWideCharBuf absolute Buffer; procedure IncBufSize(BufSize: longint); var Delta: longint; begin Inc(BufSize); Delta := BufSize shr 2; if Delta < 8 then Delta := 8; BufSize := ((BufSize + Delta) shr 2) shl 2; //make it multiple of 4 setConvertBufSize(BufSize); end; procedure UCS4CodeToUTF8String(Code: longint); const MaxCode: array[0..5] of longint = ($7F,$7FF,$FFFF,$1FFFFF,$3FFFFFF,$7FFFFFFF); FirstByte: array[0..5] of Byte = (0,$C0,$E0,$F0,$F8,$FC); var Mo, Indx, StartIndx: longint; begin Mo := 0; // get number of bytes while ((Code > MaxCode[Mo]) and (Mo < 5)) do Inc(Mo); StartIndx := OutIndx; OutIndx := StartIndx + Mo; if OutIndx >= ConvertBufSize then IncBufSize(OutIndx); for Indx := OutIndx downto StartIndx + 1 do // fill bytes from rear end begin PChar(FConvertBufP)[Indx] := Char($80 or (Code and $3F)); Code := Code shr 6; end; PChar(FConvertBufP)[StartIndx] := Char(FirstByte[Mo] or Code); // fill first byte end; begin Result := 0; if Count = 0 then Exit; if Odd(Count) then raise EConversionStream.create(SOddSizeInvalid); Count := Count shr 1; //for initial size, assume all low ASCII chars if Count > ConvertBufSize then setConvertBufSize(Count); OutIndx := -1; // keep track of end position InIndx := 0; if InBuf[0] = #$feff then Inc(InIndx); // Test for BOM while InIndx < Count do begin Wc := InBuf[InIndx]; case Word(Wc) of $0020..$007F,$0009,$000D: // plain ASCII begin Inc(OutIndx); if OutIndx >= ConvertBufSize then IncBufSize(OutIndx); PChar(FConvertBufP)[OutIndx]:= Char(Wc); end; $000A: // LF --> CR+LF if ExpandLF then begin Inc(OutIndx, 2); if OutIndx >= ConvertBufSize then IncBufSize(OutIndx); PChar(FConvertBufP)[OutIndx - 1] := Chr(13); PChar(FConvertBufP)[OutIndx] := Chr(10); end else begin Inc(OutIndx); if OutIndx >= ConvertBufSize then IncBufSize(OutIndx); PChar(FConvertBufP)[OutIndx] := Chr(10); end; $D800..$DBFF: // high surrogate begin Inc(InIndx); if (InIndx < (Count - 1)) and (Word(InBuf[InIndx]) >= $DC00) and (Word(InBuf[InIndx]) <= $DFFF) then begin Inc(OutIndx); UCS4CodeToUTF8String(Utf16SurrogateToInt(Wc, InBuf[InIndx])); end else raise EConvertError.CreateFmt( 'High surrogate %4.4X without low surrogate.',[Word(Wc)]); end; $DC00..$DFFF: // low surrogate begin Inc(InIndx); if (InIndx < (Count - 1)) and (Word(InBuf[InIndx]) >= $D800) and (Word(InBuf[InIndx]) <= $DBFF) then begin Inc(OutIndx); UCS4CodeToUTF8String(Utf16SurrogateToInt(InBuf[InIndx], Wc)); end else raise EConvertError.CreateFmt( 'Low surrogate %4.4X without high surrogate.',[Word(Wc)]); end; $0080..$D7FF,$E000..$FFFD: begin Inc(OutIndx); UCS4CodeToUTF8String(Word(Wc)); end; end; {case ...} Inc(InIndx); end; { while ...} Result := OutIndx + 1; end; // +++++++++++++++++++ encoding detection functions +++++++++++++++++++++ function StrToEncoding(const S: String): TdomEncodingType; var csmib: TCSMIB; begin if (CompareText(S,'cp10000_MacRoman') = 0) then begin result:= etcp10000_MacRoman; exit; end; csmib:= TCSMIB.Create(nil); try if csmib.SetToAlias(S) then begin case csmib.Enum of 4: result:= etLatin1; 5: result:= etLatin2; 6: result:= etLatin3; 7: result:= etLatin4; 8: result:= etCyrillic; 9: result:= etArabic; 10: result:= etGreek; 11: result:= etHebrew; 12: result:= etLatin5; 13: result:= etLatin6; 106: result:= etUTF8; 109: result:= etLatin7; 110: result:= etLatin8; 111: result:= etLatin9; 1013,1015: result:= etUTF16BE; 1014: result:= etUTF16LE; 2084: result:= etKOI8R; 2250: result:= etWindows1250; 2251: result:= etWindows1251; 2252: result:= etWindows1252; else result:= etUnknown; end; end else result:= etUnknown; finally csmib.free; end; end; // ++++++++++++++++++++++ conversion functions ++++++++++++++++++++++++ function SingleByteEncodingToUTF16Char(const P: Char; const Encoding: TdomEncodingType):WideChar; begin case Encoding of etLatin1: result:= Iso8859_1ToUTF16Char(P); etLatin2: result:= Iso8859_2ToUTF16Char(P); etLatin3: result:= Iso8859_3ToUTF16Char(P); etLatin4: result:= Iso8859_4ToUTF16Char(P); etCyrillic: result:= Iso8859_5ToUTF16Char(P); etArabic: result:= Iso8859_6ToUTF16Char(P); etGreek: result:= Iso8859_7ToUTF16Char(P); etHebrew: result:= Iso8859_8ToUTF16Char(P); etLatin5: result:= Iso8859_9ToUTF16Char(P); etLatin6: result:= Iso8859_10ToUTF16Char(P); etLatin7: result:= Iso8859_13ToUTF16Char(P); etLatin8: result:= Iso8859_14ToUTF16Char(P); etLatin9: result:= Iso8859_15ToUTF16Char(P); etKOI8R: result:= KOI8_RToUTF16Char(P); etcp10000_MacRoman: result:= cp10000_MacRomanToUTF16Char(P); etWindows1250: result:= cp1250ToUTF16Char(P); etWindows1251: result:= cp1251ToUTF16Char(P); etWindows1252: result:= cp1252ToUTF16Char(P); else raise EConvertError.Create('Invalid encoding type specified'); end; end; function Iso8859_1ToUTF16Char(const P: Char):WideChar; begin result:= WideChar(ord(P)); end; function Iso8859_2ToUTF16Char(const P: Char):WideChar; begin case ord(p) of $a1: result:= #$0104; // LATIN CAPITAL LETTER A WITH OGONEK $a2: result:= #$02d8; // BREVE $a3: result:= #$0141; // LATIN CAPITAL LETTER L WITH STROKE $a5: result:= #$0132; // LATIN CAPITAL LETTER L WITH CARON $a6: result:= #$015a; // LATIN CAPITAL LETTER S WITH ACUTE $a9: result:= #$0160; // LATIN CAPITAL LETTER S WITH CARON $aa: result:= #$015e; // LATIN CAPITAL LETTER S WITH CEDILLA $ab: result:= #$0164; // LATIN CAPITAL LETTER T WITH CARON $ac: result:= #$0179; // LATIN CAPITAL LETTER Z WITH ACUTE $ae: result:= #$017d; // LATIN CAPITAL LETTER Z WITH CARON $af: result:= #$017b; // LATIN CAPITAL LETTER Z WITH DOT ABOVE $b1: result:= #$0105; // LATIN SMALL LETTER A WITH OGONEK $b2: result:= #$02db; // OGONEK $b3: result:= #$0142; // LATIN SMALL LETTER L WITH STROKE $b5: result:= #$013e; // LATIN SMALL LETTER L WITH CARON $b6: result:= #$015b; // LATIN SMALL LETTER S WITH ACUTE $b7: result:= #$02c7; // CARON $b9: result:= #$0161; // LATIN SMALL LETTER S WITH CARON $ba: result:= #$015f; // LATIN SMALL LETTER S WITH CEDILLA $bb: result:= #$0165; // LATIN SMALL LETTER T WITH CARON $bc: result:= #$017a; // LATIN SMALL LETTER Z WITH ACUTE $bd: result:= #$02dd; // DOUBLE ACUTE ACCENT $be: result:= #$017e; // LATIN SMALL LETTER Z WITH CARON $bf: result:= #$017c; // LATIN SMALL LETTER Z WITH DOT ABOVE $c0: result:= #$0154; // LATIN CAPITAL LETTER R WITH ACUTE $c3: result:= #$0102; // LATIN CAPITAL LETTER A WITH BREVE $c5: result:= #$0139; // LATIN CAPITAL LETTER L WITH ACUTE $c6: result:= #$0106; // LATIN CAPITAL LETTER C WITH ACUTE $c8: result:= #$010c; // LATIN CAPITAL LETTER C WITH CARON $ca: result:= #$0118; // LATIN CAPITAL LETTER E WITH OGONEK $cc: result:= #$011a; // LATIN CAPITAL LETTER E WITH CARON $cf: result:= #$010e; // LATIN CAPITAL LETTER D WITH CARON $d0: result:= #$0110; // LATIN CAPITAL LETTER D WITH STROKE $d1: result:= #$0143; // LATIN CAPITAL LETTER N WITH ACUTE $d2: result:= #$0147; // LATIN CAPITAL LETTER N WITH CARON $d5: result:= #$0150; // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE $d8: result:= #$0158; // LATIN CAPITAL LETTER R WITH CARON $d9: result:= #$016e; // LATIN CAPITAL LETTER U WITH RING ABOVE $db: result:= #$0170; // LATIN CAPITAL LETTER U WITH WITH DOUBLE ACUTE $de: result:= #$0162; // LATIN CAPITAL LETTER T WITH CEDILLA $e0: result:= #$0155; // LATIN SMALL LETTER R WITH ACUTE $e3: result:= #$0103; // LATIN SMALL LETTER A WITH BREVE $e5: result:= #$013a; // LATIN SMALL LETTER L WITH ACUTE $e6: result:= #$0107; // LATIN SMALL LETTER C WITH ACUTE $e8: result:= #$010d; // LATIN SMALL LETTER C WITH CARON $ea: result:= #$0119; // LATIN SMALL LETTER E WITH OGONEK $ec: result:= #$011b; // LATIN SMALL LETTER E WITH CARON $ef: result:= #$010f; // LATIN SMALL LETTER D WITH CARON $f0: result:= #$0111; // LATIN SMALL LETTER D WITH STROKE $f1: result:= #$0144; // LATIN SMALL LETTER N WITH ACUTE $f2: result:= #$0148; // LATIN SMALL LETTER N WITH CARON $f5: result:= #$0151; // LATIN SMALL LETTER O WITH DOUBLE ACUTE $f8: result:= #$0159; // LATIN SMALL LETTER R WITH CARON $f9: result:= #$016f; // LATIN SMALL LETTER U WITH RING ABOVE $fb: result:= #$0171; // LATIN SMALL LETTER U WITH WITH DOUBLE ACUTE $fe: result:= #$0163; // LATIN SMALL LETTER T WITH CEDILLA $ff: result:= #$02d9; // DOT ABOVE else result:= WideChar(ord(P)); end; end; function Iso8859_3ToUTF16Char(const P: Char):WideChar; begin case ord(P) of $a1: result:= #$0126; // LATIN CAPITAL LETTER H WITH STROKE $a2: result:= #$02d8; // BREVE $a5: raise EConvertError.CreateFmt('Invalid ISO-8859-3 sequence "%s"',[P]); $a6: result:= #$0124; // LATIN CAPITAL LETTER H WITH CIRCUMFLEX $a9: result:= #$0130; // LATIN CAPITAL LETTER I WITH DOT ABOVE $aa: result:= #$015e; // LATIN CAPITAL LETTER S WITH CEDILLA $ab: result:= #$011e; // LATIN CAPITAL LETTER G WITH BREVE $ac: result:= #$0134; // LATIN CAPITAL LETTER J WITH CIRCUMFLEX $ae: raise EConvertError.CreateFmt('Invalid ISO-8859-3 sequence "%s"',[P]); $af: result:= #$017b; // LATIN CAPITAL LETTER Z WITH DOT $b1: result:= #$0127; // LATIN SMALL LETTER H WITH STROKE $b6: result:= #$0125; // LATIN SMALL LETTER H WITH CIRCUMFLEX $b9: result:= #$0131; // LATIN SMALL LETTER DOTLESS I $ba: result:= #$015f; // LATIN SMALL LETTER S WITH CEDILLA $bb: result:= #$011f; // LATIN SMALL LETTER G WITH BREVE $bc: result:= #$0135; // LATIN SMALL LETTER J WITH CIRCUMFLEX $be: raise EConvertError.CreateFmt('Invalid ISO-8859-3 sequence "%s"',[P]); $bf: result:= #$017c; // LATIN SMALL LETTER Z WITH DOT $c3: raise EConvertError.CreateFmt('Invalid ISO-8859-3 sequence "%s"',[P]); $c5: result:= #$010a; // LATIN CAPITAL LETTER C WITH DOT ABOVE $c6: result:= #$0108; // LATIN CAPITAL LETTER C WITH CIRCUMFLEX $d0: raise EConvertError.CreateFmt('Invalid ISO-8859-3 sequence "%s"',[P]); $d5: result:= #$0120; // LATIN CAPITAL LETTER G WITH DOT ABOVE $d8: result:= #$011c; // LATIN CAPITAL LETTER G WITH CIRCUMFLEX $dd: result:= #$016c; // LATIN CAPITAL LETTER U WITH BREVE $de: result:= #$015c; // LATIN CAPITAL LETTER S WITH CIRCUMFLEX $e3: raise EConvertError.CreateFmt('Invalid ISO-8859-3 sequence "%s"',[P]); $e5: result:= #$010b; // LATIN SMALL LETTER C WITH DOT ABOVE $e6: result:= #$0109; // LATIN SMALL LETTER C WITH CIRCUMFLEX $f0: raise EConvertError.CreateFmt('Invalid ISO-8859-3 sequence "%s"',[P]); $f5: result:= #$0121; // LATIN SMALL LETTER G WITH DOT ABOVE $f8: result:= #$011d; // LATIN SMALL LETTER G WITH CIRCUMFLEX $fd: result:= #$016d; // LATIN SMALL LETTER U WITH BREVE $fe: result:= #$015d; // LATIN SMALL LETTER S WITH CIRCUMFLEX $ff: result:= #$02d9; // DOT ABOVE else result:= WideChar(ord(P)); end; end; function Iso8859_4ToUTF16Char(const P: Char):WideChar; begin case ord(P) of $a1: result:= #$0104; // LATIN CAPITAL LETTER A WITH OGONEK $a2: result:= #$0138; // LATIN SMALL LETTER KRA $a3: result:= #$0156; // LATIN CAPITAL LETTER R WITH CEDILLA $a5: result:= #$0128; // LATIN CAPITAL LETTER I WITH TILDE $a6: result:= #$013b; // LATIN CAPITAL LETTER L WITH CEDILLA $a9: result:= #$0160; // LATIN CAPITAL LETTER S WITH CARON $aa: result:= #$0112; // LATIN CAPITAL LETTER E WITH MACRON $ab: result:= #$0122; // LATIN CAPITAL LETTER G WITH CEDILLA $ac: result:= #$0166; // LATIN CAPITAL LETTER T WITH STROKE $ae: result:= #$017d; // LATIN CAPITAL LETTER Z WITH CARON $b1: result:= #$0105; // LATIN SMALL LETTER A WITH OGONEK $b2: result:= #$02db; // OGONEK $b3: result:= #$0157; // LATIN SMALL LETTER R WITH CEDILLA $b5: result:= #$0129; // LATIN SMALL LETTER I WITH TILDE $b6: result:= #$013c; // LATIN SMALL LETTER L WITH CEDILLA $b7: result:= #$02c7; // CARON $b9: result:= #$0161; // LATIN SMALL LETTER S WITH CARON $ba: result:= #$0113; // LATIN SMALL LETTER E WITH MACRON $bb: result:= #$0123; // LATIN SMALL LETTER G WITH CEDILLA $bc: result:= #$0167; // LATIN SMALL LETTER T WITH STROKE $bd: result:= #$014a; // LATIN CAPITAL LETTER ENG $be: result:= #$017e; // LATIN SMALL LETTER Z WITH CARON $bf: result:= #$014b; // LATIN SMALL LETTER ENG $c0: result:= #$0100; // LATIN CAPITAL LETTER A WITH MACRON $c7: result:= #$012e; // LATIN CAPITAL LETTER I WITH OGONEK $c8: result:= #$010c; // LATIN CAPITAL LETTER C WITH CARON $ca: result:= #$0118; // LATIN CAPITAL LETTER E WITH OGONEK $cc: result:= #$0116; // LATIN CAPITAL LETTER E WITH DOT ABOVE $cf: result:= #$012a; // LATIN CAPITAL LETTER I WITH MACRON $d0: result:= #$0110; // LATIN CAPITAL LETTER D WITH STROKE $d1: result:= #$0145; // LATIN CAPITAL LETTER N WITH CEDILLA $d2: result:= #$014c; // LATIN CAPITAL LETTER O WITH MACRON $d3: result:= #$0136; // LATIN CAPITAL LETTER K WITH CEDILLA $d9: result:= #$0172; // LATIN CAPITAL LETTER U WITH OGONEK $dd: result:= #$0168; // LATIN CAPITAL LETTER U WITH TILDE $de: result:= #$016a; // LATIN CAPITAL LETTER U WITH MACRON $e0: result:= #$0101; // LATIN SMALL LETTER A WITH MACRON $e7: result:= #$012f; // LATIN SMALL LETTER I WITH OGONEK $e8: result:= #$010d; // LATIN SMALL LETTER C WITH CARON $ea: result:= #$0119; // LATIN SMALL LETTER E WITH OGONEK $ec: result:= #$0117; // LATIN SMALL LETTER E WITH DOT ABOVE $ef: result:= #$012b; // LATIN SMALL LETTER I WITH MACRON $f0: result:= #$0111; // LATIN SMALL LETTER D WITH STROKE $f1: result:= #$0146; // LATIN SMALL LETTER N WITH CEDILLA $f2: result:= #$014d; // LATIN SMALL LETTER O WITH MACRON $f3: result:= #$0137; // LATIN SMALL LETTER K WITH CEDILLA $f9: result:= #$0173; // LATIN SMALL LETTER U WITH OGONEK $fd: result:= #$0169; // LATIN SMALL LETTER U WITH TILDE $fe: result:= #$016b; // LATIN SMALL LETTER U WITH MACRON $ff: result:= #$02d9; // DOT ABOVE else result:= WideChar(ord(P)); end; end; function Iso8859_5ToUTF16Char(const P: Char):WideChar; begin case ord(P) of $00..$a0,$ad: result:= WideChar(ord(P)); $f0: result:= #$2116; // NUMERO SIGN $fd: result:= #$00a7; // SECTION SIGN else result:= WideChar(ord(P)+$0360); end; end; function Iso8859_6ToUTF16Char(const P: Char):WideChar; begin case ord(P) of $00..$a0,$a4,$ad: result:= WideChar(ord(P)); $ac,$bb,$bf,$c1..$da,$e0..$f2: result:= WideChar(ord(P)+$0580); else raise EConvertError.CreateFmt('Invalid ISO-8859-6 sequence "%s"',[P]); end; end; function Iso8859_7ToUTF16Char(const P: Char):WideChar; begin case ord(P) of $00..$a0,$a6..$a9,$ab..$ad,$b0..$b3,$b7,$bb,$bd: result:= WideChar(ord(P)); $a1: result:= #$2018; // LEFT SINGLE QUOTATION MARK $a2: result:= #$2019; // RIGHT SINGLE QUOTATION MARK $af: result:= #$2015; // HORIZONTAL BAR $d2,$ff: raise EConvertError.CreateFmt('Invalid ISO-8859-7 sequence "%s"',[P]); else result:= WideChar(ord(P)+$02d0); end; end; function Iso8859_8ToUTF16Char(const P: Char):WideChar; begin case ord(P) of $00..$a0,$a2..$a9,$ab..$ae,$b0..$b9,$bb..$be: result:= WideChar(ord(P)); $aa: result:= #$00d7; // MULTIPLICATION SIGN $af: result:= #$203e; // OVERLINE $ba: result:= #$00f7; // DIVISION SIGN $df: result:= #$2017; // DOUBLE LOW LINE $e0..$fa: result:= WideChar(ord(P)+$04e0); else raise EConvertError.CreateFmt('Invalid ISO-8859-8 sequence "%s"',[P]); end; end; function Iso8859_9ToUTF16Char(const P: Char):WideChar; begin case ord(P) of $d0: result:= #$011e; // LATIN CAPITAL LETTER G WITH BREVE $dd: result:= #$0130; // LATIN CAPITAL LETTER I WITH DOT ABOVE $de: result:= #$015e; // LATIN CAPITAL LETTER S WITH CEDILLA $f0: result:= #$011f; // LATIN SMALL LETTER G WITH BREVE $fd: result:= #$0131; // LATIN SMALL LETTER I WITH DOT ABOVE $fe: result:= #$015f; // LATIN SMALL LETTER S WITH CEDILLA else result:= WideChar(ord(P)); end; end; function Iso8859_10ToUTF16Char(const P: Char):WideChar; begin case ord(P) of $a1: result:= #$0104; // LATIN CAPITAL LETTER A WITH OGONEK $a2: result:= #$0112; // LATIN CAPITAL LETTER E WITH MACRON $a3: result:= #$0122; // LATIN CAPITAL LETTER G WITH CEDILLA $a4: result:= #$012a; // LATIN CAPITAL LETTER I WITH MACRON $a5: result:= #$0128; // LATIN CAPITAL LETTER I WITH TILDE $a6: result:= #$0136; // LATIN CAPITAL LETTER K WITH CEDILLA $a8: result:= #$013b; // LATIN CAPITAL LETTER L WITH CEDILLA $a9: result:= #$0110; // LATIN CAPITAL LETTER D WITH STROKE $aa: result:= #$0160; // LATIN CAPITAL LETTER S WITH CARON $ab: result:= #$0166; // LATIN CAPITAL LETTER T WITH STROKE $ac: result:= #$017d; // LATIN CAPITAL LETTER Z WITH CARON $ae: result:= #$016a; // LATIN CAPITAL LETTER U WITH MACRON $af: result:= #$014a; // LATIN CAPITAL LETTER ENG $b1: result:= #$0105; // LATIN SMALL LETTER A WITH OGONEK $b2: result:= #$0113; // LATIN SMALL LETTER E WITH MACRON $b3: result:= #$0123; // LATIN SMALL LETTER G WITH CEDILLA $b4: result:= #$012b; // LATIN SMALL LETTER I WITH MACRON $b5: result:= #$0129; // LATIN SMALL LETTER I WITH TILDE $b6: result:= #$0137; // LATIN SMALL LETTER K WITH CEDILLA $b8: result:= #$013c; // LATIN SMALL LETTER L WITH CEDILLA $b9: result:= #$0111; // LATIN SMALL LETTER D WITH STROKE $ba: result:= #$0161; // LATIN SMALL LETTER S WITH CARON $bb: result:= #$0167; // LATIN SMALL LETTER T WITH STROKE $bc: result:= #$017e; // LATIN SMALL LETTER Z WITH CARON $bd: result:= #$2015; // HORIZONTAL BAR $be: result:= #$016b; // LATIN SMALL LETTER U WITH MACRON $bf: result:= #$014b; // LATIN SMALL LETTER ENG $c0: result:= #$0100; // LATIN CAPITAL LETTER A WITH MACRON $c7: result:= #$012e; // LATIN CAPITAL LETTER I WITH OGONEK $c8: result:= #$010c; // LATIN CAPITAL LETTER C WITH CARON $ca: result:= #$0118; // LATIN CAPITAL LETTER E WITH OGONEK $cc: result:= #$0116; // LATIN CAPITAL LETTER E WITH DOT ABOVE $d1: result:= #$0145; // LATIN CAPITAL LETTER N WITH CEDILLA $d2: result:= #$014c; // LATIN CAPITAL LETTER O WITH MACRON $d7: result:= #$0168; // LATIN CAPITAL LETTER U WITH TILDE $d9: result:= #$0172; // LATIN CAPITAL LETTER U WITH OGONEK $e0: result:= #$0101; // LATIN SMALL LETTER A WITH MACRON $e7: result:= #$012f; // LATIN SMALL LETTER I WITH OGONEK $e8: result:= #$010d; // LATIN SMALL LETTER C WITH CARON $ea: result:= #$0119; // LATIN SMALL LETTER E WITH OGONEK $ec: result:= #$0117; // LATIN SMALL LETTER E WITH DOT ABOVE $f1: result:= #$0146; // LATIN SMALL LETTER N WITH CEDILLA $f2: result:= #$014d; // LATIN SMALL LETTER O WITH MACRON $f7: result:= #$0169; // LATIN SMALL LETTER U WITH TILDE $f9: result:= #$0173; // LATIN SMALL LETTER U WITH OGONEK $ff: result:= #$0138; // LATIN SMALL LETTER KRA else result:= WideChar(ord(P)); end; end; function Iso8859_13ToUTF16Char(const P: Char):WideChar; begin case ord(P) of $a1: result:= #$201d; // RIGHT DOUBLE QUOTATION MARK $a5: result:= #$201e; // DOUBLE LOW-9 QUOTATION MARK $a8: result:= #$00d8; // LATIN CAPITAL LETTER O WITH STROKE $aa: result:= #$0156; // LATIN CAPITAL LETTER R WITH CEDILLA $af: result:= #$00c6; // LATIN CAPITAL LETTER AE $b4: result:= #$201c; // LEFT DOUBLE QUOTATION MARK $b8: result:= #$00f8; // LATIN SMALL LETTER O WITH STROKE $ba: result:= #$0157; // LATIN SMALL LETTER R WITH CEDILLA $bf: result:= #$00e6; // LATIN SMALL LETTER AE $c0: result:= #$0104; // LATIN CAPITAL LETTER A WITH OGONEK $c1: result:= #$012e; // LATIN CAPITAL LETTER I WITH OGONEK $c2: result:= #$0100; // LATIN CAPITAL LETTER A WITH MACRON $c3: result:= #$0106; // LATIN CAPITAL LETTER C WITH ACUTE $c6: result:= #$0118; // LATIN CAPITAL LETTER E WITH OGONEK $c7: result:= #$0112; // LATIN CAPITAL LETTER E WITH MACRON $c8: result:= #$010c; // LATIN CAPITAL LETTER C WITH CARON $ca: result:= #$0179; // LATIN CAPITAL LETTER Z WITH ACUTE $cb: result:= #$0116; // LATIN CAPITAL LETTER E WITH DOT ABOVE $cc: result:= #$0122; // LATIN CAPITAL LETTER G WITH CEDILLA $cd: result:= #$0136; // LATIN CAPITAL LETTER K WITH CEDILLA $ce: result:= #$012a; // LATIN CAPITAL LETTER I WITH MACRON $cf: result:= #$013b; // LATIN CAPITAL LETTER L WITH CEDILLA $d0: result:= #$0160; // LATIN CAPITAL LETTER S WITH CARON $d1: result:= #$0143; // LATIN CAPITAL LETTER N WITH ACUTE $d2: result:= #$0145; // LATIN CAPITAL LETTER N WITH CEDILLA $d4: result:= #$014c; // LATIN CAPITAL LETTER O WITH MACRON $d8: result:= #$0172; // LATIN CAPITAL LETTER U WITH OGONEK $d9: result:= #$0141; // LATIN CAPITAL LETTER L WITH STROKE $da: result:= #$015a; // LATIN CAPITAL LETTER S WITH ACUTE $db: result:= #$016a; // LATIN CAPITAL LETTER U WITH MACRON $dd: result:= #$017b; // LATIN CAPITAL LETTER Z WITH DOT ABOVE $de: result:= #$017d; // LATIN CAPITAL LETTER Z WITH CARON $e0: result:= #$0105; // LATIN SMALL LETTER A WITH OGONEK $e1: result:= #$012f; // LATIN SMALL LETTER I WITH OGONEK $e2: result:= #$0101; // LATIN SMALL LETTER A WITH MACRON $e3: result:= #$0107; // LATIN SMALL LETTER C WITH ACUTE $e6: result:= #$0119; // LATIN SMALL LETTER E WITH OGONEK $e7: result:= #$0113; // LATIN SMALL LETTER E WITH MACRON $e8: result:= #$010d; // LATIN SMALL LETTER C WITH CARON $ea: result:= #$017a; // LATIN SMALL LETTER Z WITH ACUTE $eb: result:= #$0117; // LATIN SMALL LETTER E WITH DOT ABOVE $ec: result:= #$0123; // LATIN SMALL LETTER G WITH CEDILLA $ed: result:= #$0137; // LATIN SMALL LETTER K WITH CEDILLA $ee: result:= #$012b; // LATIN SMALL LETTER I WITH MACRON $ef: result:= #$013c; // LATIN SMALL LETTER L WITH CEDILLA $f0: result:= #$0161; // LATIN SMALL LETTER S WITH CARON $f1: result:= #$0144; // LATIN SMALL LETTER N WITH ACUTE $f2: result:= #$0146; // LATIN SMALL LETTER N WITH CEDILLA $f4: result:= #$014d; // LATIN SMALL LETTER O WITH MACRON $f8: result:= #$0173; // LATIN SMALL LETTER U WITH OGONEK $f9: result:= #$0142; // LATIN SMALL LETTER L WITH STROKE $fa: result:= #$015b; // LATIN SMALL LETTER S WITH ACUTE $fb: result:= #$016b; // LATIN SMALL LETTER U WITH MACRON $fd: result:= #$017c; // LATIN SMALL LETTER Z WITH DOT ABOVE $fe: result:= #$017e; // LATIN SMALL LETTER Z WITH CARON $ff: result:= #$2019; // RIGHT SINGLE QUOTATION MARK else result:= WideChar(ord(P)); end; end; function Iso8859_14ToUTF16Char(const P: Char):WideChar; begin case ord(P) of $a1: result:= #$1e02; // LATIN CAPITAL LETTER B WITH DOT ABOVE $a2: result:= #$1e03; // LATIN SMALL LETTER B WITH DOT ABOVE $a4: result:= #$010a; // LATIN CAPITAL LETTER C WITH DOT ABOVE $a5: result:= #$010b; // LATIN SMALL LETTER C WITH DOT ABOVE $a6: result:= #$1e0a; // LATIN CAPITAL LETTER D WITH DOT ABOVE $a8: result:= #$1e80; // LATIN CAPITAL LETTER W WITH GRAVE $aa: result:= #$1e82; // LATIN CAPITAL LETTER W WITH ACUTE $ab: result:= #$1e0b; // LATIN SMALL LETTER D WITH DOT ABOVE $ac: result:= #$1ef2; // LATIN CAPITAL LETTER Y WITH GRAVE $af: result:= #$0178; // LATIN CAPITAL LETTER Y WITH DIAERESIS $b0: result:= #$1e1e; // LATIN CAPITAL LETTER F WITH DOT ABOVE $b1: result:= #$1e1f; // LATIN SMALL LETTER F WITH DOT ABOVE $b2: result:= #$0120; // LATIN CAPITAL LETTER G WITH DOT ABOVE $b3: result:= #$0121; // LATIN SMALL LETTER G WITH DOT ABOVE $b4: result:= #$1e40; // LATIN CAPITAL LETTER M WITH DOT ABOVE $b5: result:= #$1e41; // LATIN SMALL LETTER M WITH DOT ABOVE $b7: result:= #$1e56; // LATIN CAPITAL LETTER P WITH DOT ABOVE $b8: result:= #$1e81; // LATIN SMALL LETTER W WITH GRAVE $b9: result:= #$1e57; // LATIN SMALL LETTER P WITH DOT ABOVE $ba: result:= #$1e83; // LATIN SMALL LETTER W WITH ACUTE $bb: result:= #$1e60; // LATIN CAPITAL LETTER S WITH DOT ABOVE $bc: result:= #$1ef3; // LATIN SMALL LETTER Y WITH GRAVE $bd: result:= #$1e84; // LATIN CAPITAL LETTER W WITH DIAERESIS $be: result:= #$1e85; // LATIN SMALL LETTER W WITH DIAERESIS $bf: result:= #$1e61; // LATIN SMALL LETTER S WITH DOT ABOVE $d0: result:= #$0174; // LATIN CAPITAL LETTER W WITH CIRCUMFLEX $d7: result:= #$1e6a; // LATIN CAPITAL LETTER T WITH DOT ABOVE $de: result:= #$0176; // LATIN CAPITAL LETTER Y WITH CIRCUMFLEX $f0: result:= #$0175; // LATIN SMALL LETTER W WITH CIRCUMFLEX $f7: result:= #$1e6b; // LATIN SMALL LETTER T WITH DOT ABOVE $fe: result:= #$0177; // LATIN SMALL LETTER Y WITH CIRCUMFLEX else result:= WideChar(ord(P)); end; end; function Iso8859_15ToUTF16Char(const P: Char):WideChar; begin case ord(P) of $a4: result:= #$20ac; // EURO SIGN $a6: result:= #$00a6; // LATIN CAPITAL LETTER S WITH CARON $a8: result:= #$0161; // LATIN SMALL LETTER S WITH CARON $b4: result:= #$017d; // LATIN CAPITAL LETTER Z WITH CARON $b8: result:= #$017e; // LATIN SMALL LETTER Z WITH CARON $bc: result:= #$0152; // LATIN CAPITAL LIGATURE OE $bd: result:= #$0153; // LATIN SMALL LIGATURE OE $be: result:= #$0178; // LATIN CAPITAL LETTER Y WITH DIAERESIS else result:= WideChar(ord(P)); end; end; function KOI8_RToUTF16Char(const P: Char):WideChar; begin case ord(P) of $80: result:= #$2500; // BOX DRAWINGS LIGHT HORIZONTAL $81: result:= #$2502; // BOX DRAWINGS LIGHT VERTICAL $82: result:= #$250c; // BOX DRAWINGS LIGHT DOWN AND RIGHT $83: result:= #$2510; // BOX DRAWINGS LIGHT DOWN AND LEFT $84: result:= #$2514; // BOX DRAWINGS LIGHT UP AND RIGHT $85: result:= #$2518; // BOX DRAWINGS LIGHT UP AND LEFT $86: result:= #$251c; // BOX DRAWINGS LIGHT VERTICAL AND RIGHT $87: result:= #$2524; // BOX DRAWINGS LIGHT VERTICAL AND LEFT $88: result:= #$252c; // BOX DRAWINGS LIGHT DOWN AND HORIZONTAL $89: result:= #$2534; // BOX DRAWINGS LIGHT UP AND HORIZONTAL $8a: result:= #$253c; // BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL $8b: result:= #$2580; // UPPER HALF BLOCK $8c: result:= #$2584; // LOWER HALF BLOCK $8d: result:= #$2588; // FULL BLOCK $8e: result:= #$258c; // LEFT HALF BLOCK $8f: result:= #$2590; // RIGHT HALF BLOCK $90: result:= #$2591; // LIGHT SHADE $91: result:= #$2592; // MEDIUM SHADE $92: result:= #$2593; // DARK SHADE $93: result:= #$2320; // TOP HALF INTEGRAL $94: result:= #$25a0; // BLACK SQUARE $95: result:= #$2219; // BULLET OPERATOR $96: result:= #$221a; // SQUARE ROOT $97: result:= #$2248; // ALMOST EQUAL TO $98: result:= #$2264; // LESS-THAN OR EQUAL TO $99: result:= #$2265; // GREATER-THAN OR EQUAL TO $9a: result:= #$00a0; // NO-BREAK SPACE $9b: result:= #$2321; // BOTTOM HALF INTEGRAL $9c: result:= #$00b0; // DEGREE SIGN $9d: result:= #$00b2; // SUPERSCRIPT TWO $9e: result:= #$00b7; // MIDDLE DOT $9f: result:= #$00f7; // DIVISION SIGN $a0: result:= #$2550; // BOX DRAWINGS DOUBLE HORIZONTAL $a1: result:= #$2551; // BOX DRAWINGS DOUBLE VERTICAL $a2: result:= #$2552; // BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE $a3: result:= #$0451; // CYRILLIC SMALL LETTER IO $a4: result:= #$2553; // BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE $a5: result:= #$2554; // BOX DRAWINGS DOUBLE DOWN AND RIGHT $a6: result:= #$2555; // BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE $a7: result:= #$2556; // BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE $a8: result:= #$2557; // BOX DRAWINGS DOUBLE DOWN AND LEFT $a9: result:= #$2558; // BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE $aa: result:= #$2559; // BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE $ab: result:= #$255a; // BOX DRAWINGS DOUBLE UP AND RIGHT $ac: result:= #$255b; // BOX DRAWINGS UP SINGLE AND LEFT DOUBLE $ad: result:= #$255c; // BOX DRAWINGS UP DOUBLE AND LEFT SINGLE $ae: result:= #$255d; // BOX DRAWINGS DOUBLE UP AND LEFT $af: result:= #$255e; // BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE $b0: result:= #$255f; // BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE $b1: result:= #$2560; // BOX DRAWINGS DOUBLE VERTICAL AND RIGHT $b2: result:= #$2561; // BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE $b3: result:= #$0401; // CYRILLIC CAPITAL LETTER IO $b4: result:= #$2562; // BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE $b5: result:= #$2563; // BOX DRAWINGS DOUBLE VERTICAL AND LEFT $b6: result:= #$2564; // BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE $b7: result:= #$2565; // BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE $b8: result:= #$2566; // BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL $b9: result:= #$2567; // BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE $ba: result:= #$2568; // BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE $bb: result:= #$2569; // BOX DRAWINGS DOUBLE UP AND HORIZONTAL $bc: result:= #$256a; // BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE $bd: result:= #$256b; // BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE $be: result:= #$256c; // BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL $bf: result:= #$00a9; // COPYRIGHT SIGN $c0: result:= #$044e; // CYRILLIC SMALL LETTER YU $c1: result:= #$0430; // CYRILLIC SMALL LETTER A $c2: result:= #$0431; // CYRILLIC SMALL LETTER BE $c3: result:= #$0446; // CYRILLIC SMALL LETTER TSE $c4: result:= #$0434; // CYRILLIC SMALL LETTER DE $c5: result:= #$0435; // CYRILLIC SMALL LETTER IE $c6: result:= #$0444; // CYRILLIC SMALL LETTER EF $c7: result:= #$0433; // CYRILLIC SMALL LETTER GHE $c8: result:= #$0445; // CYRILLIC SMALL LETTER HA $c9: result:= #$0438; // CYRILLIC SMALL LETTER I $ca: result:= #$0439; // CYRILLIC SMALL LETTER SHORT I $cb: result:= #$043a; // CYRILLIC SMALL LETTER KA $cc: result:= #$043b; // CYRILLIC SMALL LETTER EL $cd: result:= #$043c; // CYRILLIC SMALL LETTER EM $ce: result:= #$043d; // CYRILLIC SMALL LETTER EN $cf: result:= #$043e; // CYRILLIC SMALL LETTER O $d0: result:= #$043f; // CYRILLIC SMALL LETTER PE $d1: result:= #$044f; // CYRILLIC SMALL LETTER YA $d2: result:= #$0440; // CYRILLIC SMALL LETTER ER $d3: result:= #$0441; // CYRILLIC SMALL LETTER ES $d4: result:= #$0442; // CYRILLIC SMALL LETTER TE $d5: result:= #$0443; // CYRILLIC SMALL LETTER U $d6: result:= #$0436; // CYRILLIC SMALL LETTER ZHE $d7: result:= #$0432; // CYRILLIC SMALL LETTER VE $d8: result:= #$044c; // CYRILLIC SMALL LETTER SOFT SIGN $d9: result:= #$044b; // CYRILLIC SMALL LETTER YERU $da: result:= #$0437; // CYRILLIC SMALL LETTER ZE $db: result:= #$0448; // CYRILLIC SMALL LETTER SHA $dc: result:= #$044d; // CYRILLIC SMALL LETTER E $dd: result:= #$0449; // CYRILLIC SMALL LETTER SHCHA $de: result:= #$0447; // CYRILLIC SMALL LETTER CHE $df: result:= #$044a; // CYRILLIC SMALL LETTER HARD SIGN $e0: result:= #$042e; // CYRILLIC CAPITAL LETTER YU $e1: result:= #$0410; // CYRILLIC CAPITAL LETTER A $e2: result:= #$0411; // CYRILLIC CAPITAL LETTER BE $e3: result:= #$0426; // CYRILLIC CAPITAL LETTER TSE $e4: result:= #$0414; // CYRILLIC CAPITAL LETTER DE $e5: result:= #$0415; // CYRILLIC CAPITAL LETTER IE $e6: result:= #$0424; // CYRILLIC CAPITAL LETTER EF $e7: result:= #$0413; // CYRILLIC CAPITAL LETTER GHE $e8: result:= #$0425; // CYRILLIC CAPITAL LETTER HA $e9: result:= #$0418; // CYRILLIC CAPITAL LETTER I $ea: result:= #$0419; // CYRILLIC CAPITAL LETTER SHORT I $eb: result:= #$041a; // CYRILLIC CAPITAL LETTER KA $ec: result:= #$041b; // CYRILLIC CAPITAL LETTER EL $ed: result:= #$041c; // CYRILLIC CAPITAL LETTER EM $ee: result:= #$041d; // CYRILLIC CAPITAL LETTER EN $ef: result:= #$041e; // CYRILLIC CAPITAL LETTER O $f0: result:= #$041f; // CYRILLIC CAPITAL LETTER PE $f1: result:= #$042f; // CYRILLIC CAPITAL LETTER YA $f2: result:= #$0420; // CYRILLIC CAPITAL LETTER ER $f3: result:= #$0421; // CYRILLIC CAPITAL LETTER ES $f4: result:= #$0422; // CYRILLIC CAPITAL LETTER TE $f5: result:= #$0423; // CYRILLIC CAPITAL LETTER U $f6: result:= #$0416; // CYRILLIC CAPITAL LETTER ZHE $f7: result:= #$0412; // CYRILLIC CAPITAL LETTER VE $f8: result:= #$042c; // CYRILLIC CAPITAL LETTER SOFT SIGN $f9: result:= #$042b; // CYRILLIC CAPITAL LETTER YERU $fa: result:= #$0417; // CYRILLIC CAPITAL LETTER ZE $fb: result:= #$0428; // CYRILLIC CAPITAL LETTER SHA $fc: result:= #$042d; // CYRILLIC CAPITAL LETTER E $fd: result:= #$0429; // CYRILLIC CAPITAL LETTER SHCHA $fe: result:= #$0427; // CYRILLIC CAPITAL LETTER CHE $ff: result:= #$042a; // CYRILLIC CAPITAL LETTER HARD SIGN else result:= WideChar(ord(P)); end; end; function cp10000_MacRomanToUTF16Char(const P: Char):WideChar; begin case ord(P) of $80: result:= #$00c4; // LATIN CAPITAL LETTER A WITH DIAERESIS $81: result:= #$00c5; // LATIN CAPITAL LETTER A WITH RING ABOVE $82: result:= #$00c7; // LATIN CAPITAL LETTER C WITH CEDILLA $83: result:= #$00c9; // LATIN CAPITAL LETTER E WITH ACUTE $84: result:= #$00d1; // LATIN CAPITAL LETTER N WITH TILDE $85: result:= #$00d6; // LATIN CAPITAL LETTER O WITH DIAERESIS $86: result:= #$00dc; // LATIN CAPITAL LETTER U WITH DIAERESIS $87: result:= #$00e1; // LATIN SMALL LETTER A WITH ACUTE $88: result:= #$00e0; // LATIN SMALL LETTER A WITH GRAVE $89: result:= #$00e2; // LATIN SMALL LETTER A WITH CIRCUMFLEX $8a: result:= #$00e4; // LATIN SMALL LETTER A WITH DIAERESIS $8b: result:= #$00e3; // LATIN SMALL LETTER A WITH TILDE $8c: result:= #$00e5; // LATIN SMALL LETTER A WITH RING ABOVE $8d: result:= #$00e7; // LATIN SMALL LETTER C WITH CEDILLA $8e: result:= #$00e9; // LATIN SMALL LETTER E WITH ACUTE $8f: result:= #$00e8; // LATIN SMALL LETTER E WITH GRAVE $90: result:= #$00ea; // LATIN SMALL LETTER E WITH CIRCUMFLEX $91: result:= #$00eb; // LATIN SMALL LETTER E WITH DIAERESIS $92: result:= #$00ed; // LATIN SMALL LETTER I WITH ACUTE $93: result:= #$00ec; // LATIN SMALL LETTER I WITH GRAVE $94: result:= #$00ee; // LATIN SMALL LETTER I WITH CIRCUMFLEX $95: result:= #$00ef; // LATIN SMALL LETTER I WITH DIAERESIS $96: result:= #$00f1; // LATIN SMALL LETTER N WITH TILDE $97: result:= #$00f3; // LATIN SMALL LETTER O WITH ACUTE $98: result:= #$00f2; // LATIN SMALL LETTER O WITH GRAVE $99: result:= #$00f4; // LATIN SMALL LETTER O WITH CIRCUMFLEX $9a: result:= #$00f6; // LATIN SMALL LETTER O WITH DIAERESIS $9b: result:= #$00f5; // LATIN SMALL LETTER O WITH TILDE $9c: result:= #$00fa; // LATIN SMALL LETTER U WITH ACUTE $9d: result:= #$00f9; // LATIN SMALL LETTER U WITH GRAVE $9e: result:= #$00fb; // LATIN SMALL LETTER U WITH CIRCUMFLEX $9f: result:= #$00fc; // LATIN SMALL LETTER U WITH DIAERESIS $a0: result:= #$2020; // DAGGER $a1: result:= #$00b0; // DEGREE SIGN $a4: result:= #$00a7; // SECTION SIGN $a5: result:= #$2022; // BULLET $a6: result:= #$00b6; // PILCROW SIGN $a7: result:= #$00df; // LATIN SMALL LETTER SHARP S $a8: result:= #$00ae; // REGISTERED SIGN $aa: result:= #$2122; // TRADE MARK SIGN $ab: result:= #$00b4; // ACUTE ACCENT $ac: result:= #$00a8; // DIAERESIS $ad: result:= #$2260; // NOT EQUAL TO $ae: result:= #$00c6; // LATIN CAPITAL LIGATURE AE $af: result:= #$00d8; // LATIN CAPITAL LETTER O WITH STROKE $b0: result:= #$221e; // INFINITY $b2: result:= #$2264; // LESS-THAN OR EQUAL TO $b3: result:= #$2265; // GREATER-THAN OR EQUAL TO $b4: result:= #$00a5; // YEN SIGN $b6: result:= #$2202; // PARTIAL DIFFERENTIAL $b7: result:= #$2211; // N-ARY SUMMATION $b8: result:= #$220f; // N-ARY PRODUCT $b9: result:= #$03c0; // GREEK SMALL LETTER PI $ba: result:= #$222b; // INTEGRAL $bb: result:= #$00aa; // FEMININE ORDINAL INDICATOR $bc: result:= #$00ba; // MASCULINE ORDINAL INDICATOR $bd: result:= #$2126; // OHM SIGN $be: result:= #$00e6; // LATIN SMALL LIGATURE AE $bf: result:= #$00f8; // LATIN SMALL LETTER O WITH STROKE $c0: result:= #$00bf; // INVERTED QUESTION MARK $c1: result:= #$00a1; // INVERTED EXCLAMATION MARK $c2: result:= #$00ac; // NOT SIGN $c3: result:= #$221a; // SQUARE ROOT $c4: result:= #$0192; // LATIN SMALL LETTER F WITH HOOK $c5: result:= #$2248; // ALMOST EQUAL TO $c6: result:= #$2206; // INCREMENT $c7: result:= #$00ab; // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK $c8: result:= #$00bb; // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK $c9: result:= #$2026; // HORIZONTAL ELLIPSIS $ca: result:= #$00a0; // NO-BREAK SPACE $cb: result:= #$00c0; // LATIN CAPITAL LETTER A WITH GRAVE $cc: result:= #$00c3; // LATIN CAPITAL LETTER A WITH TILDE $cd: result:= #$00d5; // LATIN CAPITAL LETTER O WITH TILDE $ce: result:= #$0152; // LATIN CAPITAL LIGATURE OE $cf: result:= #$0153; // LATIN SMALL LIGATURE OE $d0: result:= #$2013; // EN DASH $d1: result:= #$2014; // EM DASH $d2: result:= #$201c; // LEFT DOUBLE QUOTATION MARK $d3: result:= #$201d; // RIGHT DOUBLE QUOTATION MARK $d4: result:= #$2018; // LEFT SINGLE QUOTATION MARK $d5: result:= #$2019; // RIGHT SINGLE QUOTATION MARK $d6: result:= #$00f7; // DIVISION SIGN $d7: result:= #$25ca; // LOZENGE $d8: result:= #$00ff; // LATIN SMALL LETTER Y WITH DIAERESIS $d9: result:= #$0178; // LATIN CAPITAL LETTER Y WITH DIAERESIS $da: result:= #$2044; // FRACTION SLASH $db: result:= #$00a4; // CURRENCY SIGN $dc: result:= #$2039; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK $dd: result:= #$203a; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK $de: result:= #$fb01; // LATIN SMALL LIGATURE FI $df: result:= #$fb02; // LATIN SMALL LIGATURE FL $e0: result:= #$2021; // DOUBLE DAGGER $e1: result:= #$00b7; // MIDDLE DOT $e2: result:= #$201a; // SINGLE LOW-9 QUOTATION MARK $e3: result:= #$201e; // DOUBLE LOW-9 QUOTATION MARK $e4: result:= #$2030; // PER MILLE SIGN $e5: result:= #$00c2; // LATIN CAPITAL LETTER A WITH CIRCUMFLEX $e6: result:= #$00ca; // LATIN CAPITAL LETTER E WITH CIRCUMFLEX $e7: result:= #$00c1; // LATIN CAPITAL LETTER A WITH ACUTE $e8: result:= #$00cb; // LATIN CAPITAL LETTER E WITH DIAERESIS $e9: result:= #$00c8; // LATIN CAPITAL LETTER E WITH GRAVE $ea: result:= #$00cd; // LATIN CAPITAL LETTER I WITH ACUTE $eb: result:= #$00ce; // LATIN CAPITAL LETTER I WITH CIRCUMFLEX $ec: result:= #$00cf; // LATIN CAPITAL LETTER I WITH DIAERESIS $ed: result:= #$00cc; // LATIN CAPITAL LETTER I WITH GRAVE $ee: result:= #$00d3; // LATIN CAPITAL LETTER O WITH ACUTE $ef: result:= #$00d4; // LATIN CAPITAL LETTER O WITH CIRCUMFLEX $f0: raise EConvertError.CreateFmt('Invalid cp10000_MacRoman sequence "%s"',[P]); $f1: result:= #$00d2; // LATIN CAPITAL LETTER O WITH GRAVE $f2: result:= #$00da; // LATIN CAPITAL LETTER U WITH ACUTE $f3: result:= #$00db; // LATIN CAPITAL LETTER U WITH CIRCUMFLEX $f4: result:= #$00d9; // LATIN CAPITAL LETTER U WITH GRAVE $f5: result:= #$0131; // LATIN SMALL LETTER DOTLESS I $f6: result:= #$02c6; // MODIFIER LETTER CIRCUMFLEX ACCENT $f7: result:= #$02dc; // SMALL TILDE $f8: result:= #$00af; // MACRON $f9: result:= #$02d8; // BREVE $fa: result:= #$02d9; // DOT ABOVE $fb: result:= #$02da; // RING ABOVE $fc: result:= #$00b8; // CEDILLA $fd: result:= #$02dd; // DOUBLE ACUTE ACCENT $fe: result:= #$02db; // OGONEK $ff: result:= #$02c7; // CARON else result:= WideChar(ord(P)); end; end; function cp1250ToUTF16Char(const P: Char):WideChar; // This function was provided by Miloslav Skácel const sInvalidWindows1250Sequence = 'Invalid Windows-1250 sequence "%s"'; begin case ord(p) of // NOT USED $81,$83,$88,$90,$98: raise EConvertError.CreateFmt(sInvalidWindows1250Sequence,[P]); $80: result:= #$20ac; // EURO SIGN $82: Result:= #$201a; // SINGLE LOW-9 QUOTATION MARK $84: Result:= #$201e; // DOUBLE LOW-9 QUOTATION MARK $85: Result:= #$2026; // HORIZONTAL ELLIPSIS $86: Result:= #$2020; // DAGGER $87: Result:= #$2021; // DOUBLE DAGGER $89: Result:= #$2030; // PER MILLE SIGN $8a: Result:= #$0160; // LATIN CAPITAL LETTER S WITH CARON $8b: Result:= #$2039; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK $8c: Result:= #$015a; // LATIN CAPITAL LETTER S WITH ACUTE $8d: Result:= #$0164; // LATIN CAPITAL LETTER T WITH CARON $8e: Result:= #$017d; // LATIN CAPITAL LETTER Z WITH CARON $8f: Result:= #$0179; // LATIN CAPITAL LETTER Z WITH ACUTE $91: Result:= #$2018; // LEFT SINGLE QUOTATION MARK $92: Result:= #$2019; // RIGHT SINGLE QUOTATION MARK $93: Result:= #$201c; // LEFT DOUBLE QUOTATION MARK $94: Result:= #$201d; // RIGHT DOUBLE QUOTATION MARK $95: Result:= #$2022; // BULLET $96: Result:= #$2013; // EN-DASH $97: Result:= #$2014; // EM-DASH $99: Result:= #$2122; // TRADE MARK SIGN $9a: Result:= #$0161; // LATIN SMALL LETTER S WITH CARON $9b: Result:= #$203a; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK $9c: Result:= #$015b; // LATIN SMALL LETTER S WITH ACUTE $9d: Result:= #$0165; // LATIN SMALL LETTER T WITH CARON $9e: Result:= #$017e; // LATIN SMALL LETTER Z WITH CARON $9f: Result:= #$017a; // LATIN SMALL LETTER Z WITH ACUTE $a0: Result:= #$00a0; // NO-BREAK SPACE $a1: Result:= #$02c7; // CARON $a2: Result:= #$02d8; // BREVE $a3: Result:= #$0141; // LATIN CAPITAL LETTER L WITH STROKE $a4: Result:= #$00a4; // CURRENCY SIGN $a5: Result:= #$0104; // LATIN CAPITAL LETTER A WITH OGONEK $a6: Result:= #$00a6; // BROKEN BAR $a7: Result:= #$00a7; // SECTION SIGN $a8: Result:= #$00a8; // DIAERESIS $a9: Result:= #$00a9; // COPYRIGHT SIGN $aa: Result:= #$015e; // LATIN CAPITAL LETTER S WITH CEDILLA $ab: Result:= #$00ab; // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK $ac: Result:= #$00ac; // NOT SIGN $ad: Result:= #$00ad; // SOFT HYPHEN $ae: Result:= #$00ae; // REGISTERED SIGN $af: Result:= #$017b; // LATIN CAPITAL LETTER Z WITH DOT ABOVE $b0: Result:= #$00b0; // DEGREE SIGN $b1: Result:= #$00b1; // PLUS-MINUS SIGN $b2: Result:= #$02db; // OGONEK $b3: Result:= #$0142; // LATIN SMALL LETTER L WITH STROKE $b4: Result:= #$00b4; // ACUTE ACCENT $b5: Result:= #$00b5; // MIKRO SIGN $b6: Result:= #$00b6; // PILCROW SIGN $b7: Result:= #$00b7; // MIDDLE DOT $b8: Result:= #$00b8; // CEDILLA $b9: Result:= #$0105; // LATIN SMALL LETTER A WITH OGONEK $ba: Result:= #$015f; // LATIN SMALL LETTER S WITH CEDILLA $bb: Result:= #$00bb; // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK $bc: Result:= #$013d; // LATIN CAPITAL LETTER L WITH CARON $bd: Result:= #$02dd; // DOUBLE ACUTE ACCENT $be: Result:= #$013e; // LATIN SMALL LETTER L WITH CARON $bf: Result:= #$017c; // LATIN SMALL LETTER Z WITH DOT ABOVE $c0: Result:= #$0154; // LATIN CAPITAL LETTER R WITH ACUTE $c1: Result:= #$00c1; // LATIN CAPITAL LETTER A WITH ACUTE $c2: Result:= #$00c2; // LATIN CAPITAL LETTER A WITH CIRCUMFLEX $c3: Result:= #$0102; // LATIN CAPITAL LETTER A WITH BREVE $c4: Result:= #$00c4; // LATIN CAPITAL LETTER A WITH DIAERESIS $c5: Result:= #$0139; // LATIN CAPITAL LETTER L WITH ACUTE $c6: Result:= #$0106; // LATIN CAPITAL LETTER C WITH ACUTE $c7: Result:= #$00c7; // LATIN CAPITAL LETTER C WITH CEDILLA $c8: Result:= #$010c; // LATIN CAPITAL LETTER C WITH CARON $c9: Result:= #$00c9; // LATIN CAPITAL LETTER E WITH ACUTE $ca: Result:= #$0118; // LATIN CAPITAL LETTER E WITH OGONEK $cb: Result:= #$00cb; // LATIN CAPITAL LETTER E WITH DIAERESIS $cc: Result:= #$011a; // LATIN CAPITAL LETTER E WITH CARON $cd: Result:= #$00cd; // LATIN CAPITAL LETTER I WITH ACUTE $ce: Result:= #$00ce; // LATIN CAPITAL LETTER I WITH CIRCUMFLEX $cf: Result:= #$010e; // LATIN CAPITAL LETTER D WITH CARON $d0: Result:= #$0110; // LATIN CAPITAL LETTER D WITH STROKE $d1: Result:= #$0143; // LATIN CAPITAL LETTER N WITH ACUTE $d2: Result:= #$0147; // LATIN CAPITAL LETTER N WITH CARON $d3: Result:= #$00d3; // LATIN CAPITAL LETTER O WITH ACUTE $d4: Result:= #$00d4; // LATIN CAPITAL LETTER O WITH CIRCUMFLEX $d5: Result:= #$0150; // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE $d6: Result:= #$00d6; // LATIN CAPITAL LETTER O WITH DIAERESIS $d7: Result:= #$00d7; // MULTIPLICATION SIGN $d8: Result:= #$0158; // LATIN CAPITAL LETTER R WITH CARON $d9: Result:= #$016e; // LATIN CAPITAL LETTER U WITH RING ABOVE $da: Result:= #$00da; // LATIN CAPITAL LETTER U WITH ACUTE $db: Result:= #$0170; // LATIN CAPITAL LETTER U WITH WITH DOUBLE ACUTE $dc: Result:= #$00dc; // LATIN CAPITAL LETTER U WITH DIAERESIS $dd: Result:= #$00dd; // LATIN CAPITAL LETTER Y WITH ACUTE $de: Result:= #$0162; // LATIN CAPITAL LETTER T WITH CEDILLA $df: Result:= #$00df; // LATIN SMALL LETTER SHARP S $e0: Result:= #$0155; // LATIN SMALL LETTER R WITH ACUTE $e1: Result:= #$00e1; // LATIN SMALL LETTER A WITH ACUTE $e2: Result:= #$00e2; // LATIN SMALL LETTER A WITH CIRCUMFLEX $e3: Result:= #$0103; // LATIN SMALL LETTER A WITH BREVE $e4: Result:= #$00e4; // LATIN SMALL LETTER A WITH DIAERESIS $e5: Result:= #$013a; // LATIN SMALL LETTER L WITH ACUTE $e6: Result:= #$0107; // LATIN SMALL LETTER C WITH ACUTE $e7: Result:= #$00e7; // LATIN SMALL LETTER C WITH CEDILLA $e8: Result:= #$010d; // LATIN SMALL LETTER C WITH CARON 100D $e9: Result:= #$00e9; // LATIN SMALL LETTER E WITH ACUTE $ea: Result:= #$0119; // LATIN SMALL LETTER E WITH OGONEK $eb: Result:= #$00eb; // LATIN SMALL LETTER E WITH DIAERESIS $ec: Result:= #$011b; // LATIN SMALL LETTER E WITH CARON $ed: Result:= #$00ed; // LATIN SMALL LETTER I WITH ACUTE $ee: Result:= #$00ee; // LATIN SMALL LETTER I WITH CIRCUMFLEX $ef: Result:= #$010f; // LATIN SMALL LETTER D WITH CARON $f0: Result:= #$0111; // LATIN SMALL LETTER D WITH STROKE $f1: Result:= #$0144; // LATIN SMALL LETTER N WITH ACUTE $f2: Result:= #$0148; // LATIN SMALL LETTER N WITH CARON $f3: Result:= #$00f3; // LATIN SMALL LETTER O WITH ACUTE $f4: Result:= #$00f4; // LATIN SMALL LETTER O WITH CIRCUMFLEX $f5: Result:= #$0151; // LATIN SMALL LETTER O WITH DOUBLE ACUTE $f6: Result:= #$00f6; // LATIN SMALL LETTER O WITH DIAERESIS $f7: Result:= #$00f7; // DIVISION SIGN $f8: Result:= #$0159; // LATIN SMALL LETTER R WITH CARON $f9: Result:= #$016f; // LATIN SMALL LETTER U WITH RING ABOVE $fa: Result:= #$00fa; // LATIN SMALL LETTER U WITH ACUTE $fb: Result:= #$0171; // LATIN SMALL LETTER U WITH WITH DOUBLE ACUTE $fc: Result:= #$00fc; // LATIN SMALL LETTER U WITH DIAERESIS $fd: Result:= #$00fd; // LATIN SMALL LETTER Y WITH ACUTE $fe: Result:= #$0163; // LATIN SMALL LETTER T WITH CEDILLA $ff: Result:= #$02d9; // DOT ABOVE else Result:= WideChar(ord(P)); end; end; function cp1251ToUTF16Char(const P: Char):WideChar; begin case ord(P) of $80: result:= #$0402; // CYRILLIC CAPITAL LETTER DJE $81: result:= #$0403; // CYRILLIC CAPITAL LETTER GJE $82: result:= #$201a; // SINGLE LOW-9 QUOTATION MARK $83: result:= #$0453; // CYRILLIC SMALL LETTER GJE $84: result:= #$201e; // DOUBLE LOW-9 QUOTATION MARK $85: result:= #$2026; // HORIZONTAL ELLIPSIS $86: result:= #$2020; // DAGGER $87: result:= #$2021; // DOUBLE DAGGER $88: result:= #$20ac; // EURO SIGN $89: result:= #$2030; // PER MILLE SIGN $8a: result:= #$0409; // CYRILLIC CAPITAL LETTER LJE $8b: result:= #$2039; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK $8c: result:= #$040a; // CYRILLIC CAPITAL LETTER NJE $8d: result:= #$040c; // CYRILLIC CAPITAL LETTER KJE $8e: result:= #$040b; // CYRILLIC CAPITAL LETTER TSHE $8f: result:= #$040f; // CYRILLIC CAPITAL LETTER DZHE $90: result:= #$0452; // CYRILLIC SMALL LETTER DJE $91: result:= #$2018; // LEFT SINGLE QUOTATION MARK $92: result:= #$2019; // RIGHT SINGLE QUOTATION MARK $93: result:= #$201c; // LEFT DOUBLE QUOTATION MARK $94: result:= #$201d; // RIGHT DOUBLE QUOTATION MARK $95: result:= #$2022; // BULLET $96: result:= #$2013; // EN DASH $97: result:= #$2014; // EM DASH $98: raise EConvertError.CreateFmt('Invalid cp1251 sequence "%s"',[P]); $99: result:= #$2122; // TRADE MARK SIGN $9a: result:= #$0459; // CYRILLIC SMALL LETTER LJE $9b: result:= #$203a; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK $9c: result:= #$045a; // CYRILLIC SMALL LETTER NJE $9d: result:= #$045c; // CYRILLIC SMALL LETTER KJE $9e: result:= #$045b; // CYRILLIC SMALL LETTER TSHE $9f: result:= #$045f; // CYRILLIC SMALL LETTER DZHE $a0: result:= #$00a0; // NO-BREAK SPACE $a1: result:= #$040e; // CYRILLIC CAPITAL LETTER SHORT U $a2: result:= #$045e; // CYRILLIC SMALL LETTER SHORT U $a3: result:= #$0408; // CYRILLIC CAPITAL LETTER JE $a4: result:= #$00a4; // CURRENCY SIGN $a5: result:= #$0490; // CYRILLIC CAPITAL LETTER GHE WITH UPTURN $a8: result:= #$0401; // CYRILLIC CAPITAL LETTER IO $aa: result:= #$0404; // CYRILLIC CAPITAL LETTER UKRAINIAN IE $af: result:= #$0407; // CYRILLIC CAPITAL LETTER YI $b2: result:= #$0406; // CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I $b3: result:= #$0456; // CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I $b4: result:= #$0491; // CYRILLIC SMALL LETTER GHE WITH UPTURN $b8: result:= #$0451; // CYRILLIC SMALL LETTER IO $b9: result:= #$2116; // NUMERO SIGN $ba: result:= #$0454; // CYRILLIC SMALL LETTER UKRAINIAN IE $bc: result:= #$0458; // CYRILLIC SMALL LETTER JE $bd: result:= #$0405; // CYRILLIC CAPITAL LETTER DZE $be: result:= #$0455; // CYRILLIC SMALL LETTER DZE $bf: result:= #$0457; // CYRILLIC SMALL LETTER YI $c0..$ff: result:= WideChar(ord(P)+$350); else result:= WideChar(ord(P)); end; end; function cp1252ToUTF16Char(const P: Char):WideChar; // Provided by Olaf Lösken. // Info taken from // ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT const sInvalidWindows1252Sequence = 'Invalid Windows-1252 sequence "%s"'; begin case ord(p) of $80 : result:= #$20AC; //EUROSIGN $81 : raise EConvertError.CreateFmt(sInvalidWindows1252Sequence,[P]); $82 : result:= #$201A; //SINGLE LOW-9 QUOTATION MARK $83 : result:= #$0192; //ATIN SMALL LETTER F WITH HOOK $84 : result:= #$201E; //DOUBLE LOW-9 QUOTATION MARK $85 : result:= #$2026; //HORIZONTAL ELLIPSIS $86 : result:= #$2020; //DAGGER $87 : result:= #$2021; //DOUBLE DAGGER $88 : result:= #$02C6; //MODIFIER LETTER CIRCUMFLEX ACCENT $89 : result:= #$2030; //PER MILLE SIGN $8A : result:= #$0160; //LATIN CAPITAL LETTER S WITH CARON $8B : result:= #$2039; //SINGLE LEFT-POINTING ANGLE QUOTATION MARK $8C : result:= #$0152; //LATIN CAPITAL LIGATURE OE $8D : raise EConvertError.CreateFmt(sInvalidWindows1252Sequence,[P]); $8E : result:= #$017D; //LATIN CAPITAL LETTER Z WITH CARON $8F : raise EConvertError.CreateFmt(sInvalidWindows1252Sequence,[P]); $90 : raise EConvertError.CreateFmt(sInvalidWindows1252Sequence,[P]); $91 : result:= #$2018; //LEFT SINGLE QUOTATION MARK $92 : result:= #$2019; //RIGHT SINGLE QUOTATION MARK $93 : result:= #$201C; //LEFT DOUBLE QUOTATION MARK $94 : result:= #$201D; //RIGHT DOUBLE QUOTATION MARK $95 : result:= #$2022; //BULLET $96 : result:= #$2013; //EN DASH $97 : result:= #$2014; //EM DASH $98 : result:= #$02DC; //SMALL TILDE $99 : result:= #$2122; //TRADE MARK SIGN $9A : result:= #$0161; //LATIN SMALL LETTER S WITH CARON $9B : result:= #$203A; //SINGLE RIGHT-POINTING ANGLE QUOTATION MARK $9C : result:= #$0153; //LATIN SMALL LIGATURE OE $9D : raise EConvertError.CreateFmt(sInvalidWindows1252Sequence,[P]); $9E : result:= #$017E; //LATIN SMALL LETTER Z WITH CARON $9F : result:= #$0178; //LATIN CAPITAL LETTER Y WITH D else Result:= WideChar(ord(P)); end; end; function Iso8859_1ToUTF16Str(const s: string): wideString; // Converts an ISO-8859-1 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=Iso8859_1ToUTF16Char(s[i]); end; function Iso8859_2ToUTF16Str(const s: string): wideString; // Converts an ISO-8859-2 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=Iso8859_2ToUTF16Char(s[i]); end; function Iso8859_3ToUTF16Str(const s: string): wideString; // Converts an ISO-8859-3 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=Iso8859_3ToUTF16Char(s[i]); end; function Iso8859_4ToUTF16Str(const s: string): wideString; // Converts an ISO-8859-4 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=Iso8859_4ToUTF16Char(s[i]); end; function Iso8859_5ToUTF16Str(const s: string): wideString; // Converts an ISO-8859-5 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=Iso8859_5ToUTF16Char(s[i]); end; function Iso8859_6ToUTF16Str(const s: string): wideString; // Converts an ISO-8859-6 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=Iso8859_6ToUTF16Char(s[i]); end; function Iso8859_7ToUTF16Str(const s: string): wideString; // Converts an ISO-8859-7 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=Iso8859_7ToUTF16Char(s[i]); end; function Iso8859_8ToUTF16Str(const s: string): wideString; // Converts an ISO-8859-8 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=Iso8859_8ToUTF16Char(s[i]); end; function Iso8859_9ToUTF16Str(const s: string): wideString; // Converts an ISO-8859-9 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=Iso8859_9ToUTF16Char(s[i]); end; function Iso8859_10ToUTF16Str(const s: string): wideString; // Converts an ISO-8859-10 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=Iso8859_10ToUTF16Char(s[i]); end; function Iso8859_13ToUTF16Str(const s: string): wideString; // Converts an ISO-8859-13 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=Iso8859_13ToUTF16Char(s[i]); end; function Iso8859_14ToUTF16Str(const s: string): wideString; // Converts an ISO-8859-14 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=Iso8859_14ToUTF16Char(s[i]); end; function Iso8859_15ToUTF16Str(const s: string): wideString; // Converts an ISO-8859-15 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=Iso8859_15ToUTF16Char(s[i]); end; function KOI8_RToUTF16Str(const s: string): wideString; // Converts an KOI8-R string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=KOI8_RToUTF16Char(s[i]); end; function cp10000_MacRomanToUTF16Str(const s: string): wideString; // Converts an cp10000_MacRoman string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=cp10000_MacRomanToUTF16Char(s[i]); end; function cp1250ToUTF16Str(const s: string): wideString; // Converts an cp1250 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=cp1250ToUTF16Char(s[i]); end; function cp1251ToUTF16Str(const s: string): wideString; // Converts an cp1251 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=cp1251ToUTF16Char(s[i]); end; function cp1252ToUTF16Str(const s: string): wideString; // Converts an cp1252 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) are done. var i,j: integer; begin j:= length(s); setLength(Result,j); for i:= 1 to j do Result[i]:=cp1252ToUTF16Char(s[i]); end; function UTF8ToUTF16BEStr(const s: string): wideString; // Converts an UTF-8 string into an UTF-16 wideString. // No special conversions (e.g. on line breaks) and // no XML-char checking are done. // - This function was provided by Ernst van der Pols - // - and slightly modified by Dieter Köhler - const MaxCode: array[1..6] of integer = ($7F,$7FF,$FFFF,$1FFFFF,$3FFFFFF,$7FFFFFFF); var i, j, CharSize, mask, ucs4: integer; c, first: char; begin setLength(Result,Length(s)+1); // assume no or little above-ASCII-chars j:=0; // keep track of actual length i:=0; while i=$80 then // UTF-8 sequence begin CharSize:=1; first:=c; mask:=$40; ucs4:=ord(c); if (ord(c) and $C0<>$C0) then raise EConvertError.CreateFmt('Invalid UTF-8 sequence %2.2X',[ord(c)]); while (mask and ord(first)<>0) do begin // read next character of stream if i=length(s) then raise EConvertError.CreateFmt('Aborted UTF-8 sequence "%s"',[Copy(s,i-CharSize,CharSize)]); Inc(i); c:=s[i]; if (ord(c) and $C0<>$80) then raise EConvertError.CreateFmt('Invalid UTF-8 sequence $%2.2X',[ord(c)]); ucs4:=(ucs4 shl 6) or (ord(c) and $3F); // add bits to result Inc(CharSize); // increase sequence length mask:=mask shr 1; // adjust mask end; if (CharSize>6) then // no 0 bit in sequence header 'first' raise EConvertError.CreateFmt('Invalid UTF-8 sequence "%s"',[Copy(s,i-CharSize,CharSize)]); ucs4:=ucs4 and MaxCode[CharSize]; // dispose of header bits // check for invalid sequence as suggested by RFC2279 if ((CharSize>1) and (ucs4<=MaxCode[CharSize-1])) then raise EConvertError.CreateFmt('Invalid UTF-8 encoding "%s"',[Copy(s,i-CharSize,CharSize)]); // convert non-ASCII UCS-4 to UTF-16 if possible case ucs4 of $00000080..$0000D7FF,$0000E000..$0000FFFD: begin Inc(j); Result[j]:=WideChar(ord(c)); end; $0000D800..$0000DFFF,$0000FFFE,$0000FFFF: raise EConvertError.CreateFmt('Invalid UCS-4 character $%8.8X',[ucs4]); $00010000..$0010FFFF: begin // add high surrogate to content as if it was processed earlier Inc(j); Result[j]:= Utf16HighSurrogate(ucs4); // assign high surrogate Inc(j); Result[j]:= Utf16LowSurrogate(ucs4); // assign low surrogate end; else // out of UTF-16 range raise EConvertError.CreateFmt('Cannot convert $%8.8X to UTF-16',[ucs4]); end; end else // ASCII char begin Inc(j); Result[j]:=WideChar(ord(c)); end; end; setLength(Result,j); // set to correct length end; function UTF16BEToUTF8Str(const ws: wideString; const expandLF: boolean): string; var StringStr: TStringStream; UTF16To8: TUTF16BEToUTF8Stream; begin StringStr := TStringStream.create(''); try UTF16To8 := TUTF16BEToUTF8Stream.create(StringStr); try UTF16To8.ExpandLF := expandLF; UTF16To8.WriteBuffer(pointer(ws)^, Length(ws) shl 1); finally UTF16To8.Free; end; Result := StringStr.DataString; finally StringStr.Free; end; end; function UTF16To7BitASCIIChar(const P: wideChar): char; begin case ord(p) of $00..$7f: result:= char(ord(p)); else raise EConvertError.CreateFmt('Invalid 7BitASCII sequence "%s"',[P]); end; end; function UTF16ToIso8859_1Char(const P: wideChar): char; begin case ord(p) of $00..$ff: result:= char(ord(p)); else raise EConvertError.CreateFmt('Invalid ISO-8859-1 sequence "%s"',[P]); end; end; function UTF16To7BitASCIIStr(const S: wideString): string; var i,j,start: integer; encType: TdomEncodingType; begin j:= length(s); start:= 1; encType:= etUTF16BE; if j > 0 then begin // Byte order mark? if s[1] = #$feff then start:= 2 else if s[1] = #$fffe then begin start:= 2; encType:= etUTF16LE; end; end; setLength(Result,j-start+1); if encType = etUTF16BE then for i:= start to j do Result[i]:= UTF16To7BitASCIIChar(s[i]) else for i:= start to j do Result[i]:= UTF16To7BitASCIIChar(wideChar(Swap(ord(s[i])))); end; function UTF16ToIso8859_1Str(const S: wideString): string; var i,j,start: integer; encType: TdomEncodingType; begin j:= length(s); start:= 1; encType:= etUTF16BE; if j > 0 then begin // Byte order mark? if s[1] = #$feff then start:= 2 else if s[1] = #$fffe then begin start:= 2; encType:= etUTF16LE; end; end; setLength(Result,j-start+1); if encType = etUTF16BE then for i:= start to j do Result[i]:= UTF16ToIso8859_1Char(s[i]) else for i:= start to j do Result[i]:= UTF16ToIso8859_1Char(wideChar(Swap(ord(s[i])))); end; function Utf16HighSurrogate(const value: integer): WideChar; var value2: word; begin value2:= ($D7C0 + ( value shr 10 )); Result:= WideChar(value2); end; function Utf16LowSurrogate(const value: integer): WideChar; var value2: word; begin value2:= ($DC00 XOR (value AND $3FF)); Result:= WideChar(value2); end; function Utf16SurrogateToInt(const highSurrogate, lowSurrogate: WideChar): integer; begin Result:= ( (word(highSurrogate) - $D7C0) shl 10 ) + ( word(lowSurrogate) XOR $DC00 ); end; function IsUtf16HighSurrogate(const S: WideChar): boolean; begin Case Word(S) of $D800..$DBFF: result:= true; else result:= false; end; end; function IsUtf16LowSurrogate(const S: WideChar): boolean; begin Case Word(S) of $DC00..$DFFF: result:= true; else result:= false; end; end; { TCSMIB } constructor TCSMIB.Create(AOwner: TComponent); begin inherited; Enum:= 3; end; procedure TCSMIB.DoChange(Sender: TObject); begin if assigned(FOnChange) then FOnChange(Sender); end; procedure TCSMIB.DoChanging(Sender: TObject; NewEnum: integer; var AllowChange: Boolean); begin if assigned(FOnChanging) then FOnChanging(Sender,NewEnum,AllowChange); end; function TCSMIB.GetAlias(i: integer): string; begin case FEnum of 3: case i of 0: result:= 'ANSI_X3.4-1968'; 1: result:= 'iso-ir-6'; 2: result:= 'ANSI_X3.4-1986'; 3: result:= 'ISO_646.irv:1991'; 4: result:= 'ASCII'; 5: result:= 'ISO646-US'; 6: result:= 'US-ASCII'; 7: result:= 'us'; 8: result:= 'IBM367'; 9: result:= 'cp367'; 10: result:= 'csASCII'; else raise ECSMIBException.Create('Invalid MIB number'); end; 4: case i of 0: result:= 'ISO_8859-1:1987'; 1: result:= 'iso-ir-100'; 2: result:= 'ISO_8859-1'; 3: result:= 'ISO-8859-1'; 4: result:= 'latin1'; 5: result:= 'l1'; 6: result:= 'IBM819'; 7: result:= 'CP819'; 8: result:= 'csISOLatin1'; else raise ECSMIBException.Create('Invalid MIB number'); end; 5: case i of 0: result:= 'ISO_8859-2:1987'; 1: result:= 'iso-ir-101'; 2: result:= 'ISO_8859-2'; 3: result:= 'ISO-8859-2'; 4: result:= 'latin2'; 5: result:= 'l2'; 6: result:= 'csISOLatin2'; else raise ECSMIBException.Create('Invalid MIB number'); end; 6: case i of 0: result:= 'ISO_8859-3:1988'; 1: result:= 'iso-ir-109'; 2: result:= 'ISO_8859-3'; 3: result:= 'ISO-8859-3'; 4: result:= 'latin3'; 5: result:= 'l3'; 6: result:= 'csISOLatin3'; else raise ECSMIBException.Create('Invalid MIB number'); end; 7: case i of 0: result:= 'ISO_8859-4:1988'; 1: result:= 'iso-ir-110'; 2: result:= 'ISO_8859-4'; 3: result:= 'ISO-8859-4'; 4: result:= 'latin4'; 5: result:= 'l4'; 6: result:= 'csISOLatin4'; else raise ECSMIBException.Create('Invalid MIB number'); end; 8: case i of 0: result:= 'ISO_8859-5:1988'; 1: result:= 'iso-ir-144'; 2: result:= 'ISO_8859-5'; 3: result:= 'ISO-8859-5'; 4: result:= 'cyrillic'; 5: result:= 'csISOLatinCyrillic'; else raise ECSMIBException.Create('Invalid MIB number'); end; 9: case i of 0: result:= 'ISO_8859-6:1987'; 1: result:= 'iso-ir-127'; 2: result:= 'ISO_8859-6'; 3: result:= 'ISO-8859-6'; 4: result:= 'ECMA-114'; 5: result:= 'ASMO-708'; 6: result:= 'arabic'; 7: result:= 'csISOLatinArabic'; else raise ECSMIBException.Create('Invalid MIB number'); end; 10: case i of 0: result:= 'ISO_8859-7:1987'; 1: result:= 'iso-ir-126'; 2: result:= 'ISO_8859-7'; 3: result:= 'ISO-8859-7'; 4: result:= 'ELOT_928'; 5: result:= 'ECMA-118'; 6: result:= 'greek'; 7: result:= 'greek8'; 8: result:= 'csISOLatinGreek'; else raise ECSMIBException.Create('Invalid MIB number'); end; 11: case i of 0: result:= 'ISO_8859-8:1988'; 1: result:= 'iso-ir-138'; 2: result:= 'ISO_8859-8'; 3: result:= 'ISO-8859-8'; 4: result:= 'hebrew'; 5: result:= 'csISOLatinHebrew'; else raise ECSMIBException.Create('Invalid MIB number'); end; 12: case i of 0: result:= 'ISO_8859-9:1989'; 1: result:= 'iso-ir-148'; 2: result:= 'ISO_8859-9'; 3: result:= 'ISO-8859-9'; 4: result:= 'latin5'; 5: result:= 'l5'; 6: result:= 'csISOLatin5'; else raise ECSMIBException.Create('Invalid MIB number'); end; 13: case i of 0: result:= 'ISO_8859-10'; 1: result:= 'iso-ir-157'; 2: result:= 'l6'; 3: result:= 'ISO-8859-10:1992'; 4: result:= 'csISOLatin6'; 5: result:= 'latin6'; else raise ECSMIBException.Create('Invalid MIB number'); end; 14: case i of 0: result:= 'ISO_6937-2-add'; 1: result:= 'iso-ir-142'; 2: result:= 'csISOTextComm'; else raise ECSMIBException.Create('Invalid MIB number'); end; 15: case i of 0: result:= 'JIS_X0201'; 1: result:= 'X0201'; 2: result:= 'csHalfWidthKatakana'; else raise ECSMIBException.Create('Invalid MIB number'); end; 16: case i of 0: result:= 'JIS_Encoding'; 1: result:= 'csJISEncoding'; else raise ECSMIBException.Create('Invalid MIB number'); end; 17: case i of 0: result:= 'Shift_JIS'; 1: result:= 'MS_Kanji'; 2: result:= 'csShiftJIS'; else raise ECSMIBException.Create('Invalid MIB number'); end; 18: case i of 0: result:= 'Extended_UNIX_Code_Packed_Format_for_Japanese'; 1: result:= 'csEUCPPkdFmtJapanese'; 2: result:= 'EUC-JP'; else raise ECSMIBException.Create('Invalid MIB number'); end; 19: case i of 0: result:= 'Extended_UNIX_Code_Fixed_Width_for_Japanese'; 1: result:= 'csEUCFixWidJapanese'; else raise ECSMIBException.Create('Invalid MIB number'); end; 20: case i of 0: result:= 'BS_4730'; 1: result:= 'iso-ir-4'; 2: result:= 'ISO646-GB'; 3: result:= 'gb'; 4: result:= 'uk'; 5: result:= 'csISO4UnitedKingdom'; else raise ECSMIBException.Create('Invalid MIB number'); end; 21: case i of 0: result:= 'SEN_850200_C'; 1: result:= 'iso-ir-11'; 2: result:= 'ISO646-SE2'; 3: result:= 'se2'; 4: result:= 'csISO11SwedishForNames'; else raise ECSMIBException.Create('Invalid MIB number'); end; 22: case i of 0: result:= 'IT'; 1: result:= 'iso-ir-15'; 2: result:= 'ISO646-IT'; 3: result:= 'csISO15Italian'; else raise ECSMIBException.Create('Invalid MIB number'); end; 23: case i of 0: result:= 'ES'; 1: result:= 'iso-ir-17'; 2: result:= 'ISO646-ES'; 3: result:= 'csISO17Spanish'; else raise ECSMIBException.Create('Invalid MIB number'); end; 24: case i of 0: result:= 'DIN_66003'; 1: result:= 'iso-ir-21'; 2: result:= 'de'; 3: result:= 'ISO646-DE'; 4: result:= 'csISO21German'; else raise ECSMIBException.Create('Invalid MIB number'); end; 25: case i of 0: result:= 'NS_4551-1'; 1: result:= 'iso-ir-60'; 2: result:= 'ISO646-NO'; 3: result:= 'no'; 4: result:= 'csISO60Danish-Norwegian'; 5: result:= 'csISO60Norwegian1'; else raise ECSMIBException.Create('Invalid MIB number'); end; 26: case i of 0: result:= 'NF_Z_62-010'; 1: result:= 'iso-ir-69'; 2: result:= 'ISO646-FR'; 3: result:= 'fr'; 4: result:= 'csISO69French'; else raise ECSMIBException.Create('Invalid MIB number'); end; 27: case i of 0: result:= 'ISO-10646-UTF-1'; 1: result:= 'csISO10646UTF1'; else raise ECSMIBException.Create('Invalid MIB number'); end; 28: case i of 0: result:= 'ISO_646.basic:1983'; 1: result:= 'ref'; 2: result:= 'csISO646basic1983'; else raise ECSMIBException.Create('Invalid MIB number'); end; 29: case i of 0: result:= 'INVARIANT'; 1: result:= 'csINVARIANT'; else raise ECSMIBException.Create('Invalid MIB number'); end; 30: case i of 0: result:= 'ISO_646.irv:1983'; 1: result:= 'iso-ir-2'; 2: result:= 'irv'; 3: result:= 'csISO2Int1RefVersion'; else raise ECSMIBException.Create('Invalid MIB number'); end; 31: case i of 0: result:= 'NATS-SEFI'; 1: result:= 'iso-ir-8-1'; 2: result:= 'csNATSSEFI'; else raise ECSMIBException.Create('Invalid MIB number'); end; 32: case i of 0: result:= 'NATS-SEFI-ADD'; 1: result:= 'iso-ir-8-2'; 2: result:= 'csNATSSEFIADD'; else raise ECSMIBException.Create('Invalid MIB number'); end; 33: case i of 0: result:= 'NATS-DANO'; 1: result:= 'iso-ir-9-1'; 2: result:= 'csNATSDANO'; else raise ECSMIBException.Create('Invalid MIB number'); end; 34: case i of 0: result:= 'NATS-DANO-ADD'; 1: result:= 'iso-ir-9-2'; 2: result:= 'csNATSDANOADD'; else raise ECSMIBException.Create('Invalid MIB number'); end; 35: case i of 0: result:= 'SEN_850200_B'; 1: result:= 'iso-ir-10'; 2: result:= 'FI'; 3: result:= 'ISO646-FI'; 4: result:= 'ISO646-SE'; 5: result:= 'se'; 6: result:= 'csISO10Swedish'; else raise ECSMIBException.Create('Invalid MIB number'); end; 36: case i of 0: result:= 'KS_C_5601-1987'; 1: result:= 'iso-ir-149'; 2: result:= 'KS_C_5601-1989'; 3: result:= 'KSC_5601'; 4: result:= 'korean'; 5: result:= 'csKSC56011987'; else raise ECSMIBException.Create('Invalid MIB number'); end; 37: case i of 0: result:= 'ISO-2022-KR'; 1: result:= 'csISO2022KR'; else raise ECSMIBException.Create('Invalid MIB number'); end; 38: case i of 0: result:= 'EUC-KR'; 1: result:= 'csEUCKR'; else raise ECSMIBException.Create('Invalid MIB number'); end; 39: case i of 0: result:= 'ISO-2022-JP'; 1: result:= 'csISO2022JP'; else raise ECSMIBException.Create('Invalid MIB number'); end; 40: case i of 0: result:= 'ISO-2022-JP-2'; 1: result:= 'csISO2022JP2'; else raise ECSMIBException.Create('Invalid MIB number'); end; 41: case i of 0: result:= 'JIS_C6220-1969-jp'; 1: result:= 'JIS_C6220-1969'; 2: result:= 'iso-ir-13'; 3: result:= 'katakana'; 4: result:= 'x0201-7'; 5: result:= 'csISO13JISC6220jp'; else raise ECSMIBException.Create('Invalid MIB number'); end; 42: case i of 0: result:= 'JIS_C6220-1969-ro'; 1: result:= 'iso-ir-14'; 2: result:= 'jp'; 3: result:= 'ISO646-JP'; 4: result:= 'csISO14JISC6220ro'; else raise ECSMIBException.Create('Invalid MIB number'); end; 43: case i of 0: result:= 'PT'; 1: result:= 'iso-ir-16'; 2: result:= 'ISO646-PT'; 3: result:= 'csISO16Portuguese'; else raise ECSMIBException.Create('Invalid MIB number'); end; 44: case i of 0: result:= 'greek7-old'; 1: result:= 'iso-ir-18'; 2: result:= 'csISO18Greek7Old'; else raise ECSMIBException.Create('Invalid MIB number'); end; 45: case i of 0: result:= 'latin-greek'; 1: result:= 'iso-ir-19'; 2: result:= 'csISO19LatinGreek'; else raise ECSMIBException.Create('Invalid MIB number'); end; 46: case i of 0: result:= 'NF_Z_62-010_(1973)'; 1: result:= 'iso-ir-25'; 2: result:= 'ISO646-FR1'; 3: result:= 'csISO25French'; else raise ECSMIBException.Create('Invalid MIB number'); end; 47: case i of 0: result:= 'Latin-greek-1'; 1: result:= 'iso-ir-27'; 2: result:= 'csISO27LatinGreek1'; else raise ECSMIBException.Create('Invalid MIB number'); end; 48: case i of 0: result:= 'ISO_5427'; 1: result:= 'iso-ir-37'; 2: result:= 'csISO5427Cyrillic'; else raise ECSMIBException.Create('Invalid MIB number'); end; 49: case i of 0: result:= 'JIS_C6226-1978'; 1: result:= 'iso-ir-42'; 2: result:= 'csISO42JISC62261978'; else raise ECSMIBException.Create('Invalid MIB number'); end; 50: case i of 0: result:= 'BS_viewdata'; 1: result:= 'iso-ir-47'; 2: result:= 'csISO47BSViewdata'; else raise ECSMIBException.Create('Invalid MIB number'); end; 51: case i of 0: result:= 'INIS'; 1: result:= 'iso-ir-49'; 2: result:= 'csISO49INIS'; else raise ECSMIBException.Create('Invalid MIB number'); end; 52: case i of 0: result:= 'INIS-8'; 1: result:= 'iso-ir-50'; 2: result:= 'csISO50INIS8'; else raise ECSMIBException.Create('Invalid MIB number'); end; 53: case i of 0: result:= 'INIS-cyrillic'; 1: result:= 'iso-ir-51'; 2: result:= 'csISO51INISCyrillic'; else raise ECSMIBException.Create('Invalid MIB number'); end; 54: case i of 0: result:= 'ISO_5427:1981'; 1: result:= 'iso-ir-54'; 2: result:= 'ISO5427Cyrillic1981'; else raise ECSMIBException.Create('Invalid MIB number'); end; 55: case i of 0: result:= 'ISO_5428:1980'; 1: result:= 'iso-ir-55'; 2: result:= 'csISO5428Greek'; else raise ECSMIBException.Create('Invalid MIB number'); end; 56: case i of 0: result:= 'GB_1988-80'; 1: result:= 'iso-ir-57'; 2: result:= 'cn'; 3: result:= 'ISO646-CN'; 4: result:= 'csISO57GB1988'; else raise ECSMIBException.Create('Invalid MIB number'); end; 57: case i of 0: result:= 'GB_2312-80'; 1: result:= 'iso-ir-58'; 2: result:= 'chinese'; 3: result:= 'csISO58GB231280'; else raise ECSMIBException.Create('Invalid MIB number'); end; 58: case i of 0: result:= 'NS_4551-2'; 1: result:= 'ISO646-NO2'; 2: result:= 'iso-ir-61'; 3: result:= 'no2'; 4: result:= 'csISO61Norwegian2'; else raise ECSMIBException.Create('Invalid MIB number'); end; 59: case i of 0: result:= 'videotex-suppl'; 1: result:= 'iso-ir-70'; 2: result:= 'csISO70VideotexSupp1'; else raise ECSMIBException.Create('Invalid MIB number'); end; 60: case i of 0: result:= 'PT2'; 1: result:= 'iso-ir-84'; 2: result:= 'ISO646-PT2'; 3: result:= 'csISO84Portuguese2'; else raise ECSMIBException.Create('Invalid MIB number'); end; 61: case i of 0: result:= 'ES2'; 1: result:= 'iso-ir-85'; 2: result:= 'ISO646-ES2'; 3: result:= 'csISO85Spanish2'; else raise ECSMIBException.Create('Invalid MIB number'); end; 62: case i of 0: result:= 'MSZ_7795.3'; 1: result:= 'iso-ir-86'; 2: result:= 'ISO646-HU'; 3: result:= 'hu'; 4: result:= 'csISO86Hungarian'; else raise ECSMIBException.Create('Invalid MIB number'); end; 63: case i of 0: result:= 'JIS_C6226-1983'; 1: result:= 'iso-ir-87'; 2: result:= 'x0208'; 3: result:= 'JIS_X0208-1983'; 4: result:= 'csISO87JISX0208'; else raise ECSMIBException.Create('Invalid MIB number'); end; 64: case i of 0: result:= 'greek7'; 1: result:= 'iso-ir-88'; 2: result:= 'csISO88Greek7'; else raise ECSMIBException.Create('Invalid MIB number'); end; 65: case i of 0: result:= 'ASMO_449'; 1: result:= 'ISO_9036'; 2: result:= 'arabic7'; 3: result:= 'iso-ir-89'; 4: result:= 'csISO89ASMO449'; else raise ECSMIBException.Create('Invalid MIB number'); end; 66: case i of 0: result:= 'iso-ir-90'; 1: result:= 'csISO90'; else raise ECSMIBException.Create('Invalid MIB number'); end; 67: case i of 0: result:= 'JIS_C6229-1984-a'; 1: result:= 'iso-ir-91'; 2: result:= 'jp-ocr-a'; 3: result:= 'csISO91JISC62291984a'; else raise ECSMIBException.Create('Invalid MIB number'); end; 68: case i of 0: result:= 'JIS_C6229-1984-b'; 1: result:= 'iso-ir-92'; 2: result:= 'ISO646-JP-OCR-B'; 3: result:= 'jp-ocr-b'; 4: result:= 'csISO92JISC62291984b'; else raise ECSMIBException.Create('Invalid MIB number'); end; 69: case i of 0: result:= 'JIS_C6229-1984-b-add'; 1: result:= 'iso-ir-93'; 2: result:= 'jp-ocr-b-add'; 3: result:= 'csISO93JISC62291984badd'; else raise ECSMIBException.Create('Invalid MIB number'); end; 70: case i of 0: result:= 'JIS_C6229-1984-hand'; 1: result:= 'iso-ir-94'; 2: result:= 'jp-ocr-hand'; 3: result:= 'csISO94JISC62291984hand'; else raise ECSMIBException.Create('Invalid MIB number'); end; 71: case i of 0: result:= 'JIS_C6229-1984-hand-add'; 1: result:= 'iso-ir-95'; 2: result:= 'jp-ocr-hand-add'; 3: result:= 'csISO95JISC62291984handadd'; else raise ECSMIBException.Create('Invalid MIB number'); end; 72: case i of 0: result:= 'JIS_C6229-1984-kana'; 1: result:= 'iso-ir-96'; 2: result:= 'jp-ocr-hand'; 3: result:= 'csISO96JISC62291984kana'; else raise ECSMIBException.Create('Invalid MIB number'); end; 73: case i of 0: result:= 'ISO_2033-1983'; 1: result:= 'iso-ir-98'; 2: result:= 'e13b'; 3: result:= 'csISO2033'; else raise ECSMIBException.Create('Invalid MIB number'); end; 74: case i of 0: result:= 'ANSI_X3.110-1983'; 1: result:= 'iso-ir-99'; 2: result:= 'CSA_T500-1983'; 3: result:= 'NAPLPS'; 4: result:= 'csISO99NAPLPS'; else raise ECSMIBException.Create('Invalid MIB number'); end; 75: case i of 0: result:= 'T.61-7bit'; 1: result:= 'iso-ir-102'; 2: result:= 'csISO102T617bit'; else raise ECSMIBException.Create('Invalid MIB number'); end; 76: case i of 0: result:= 'T.61-8bit'; 1: result:= 'T.61'; 2: result:= 'iso-ir-103'; 3: result:= 'csISO103T618bit'; else raise ECSMIBException.Create('Invalid MIB number'); end; 77: case i of 0: result:= 'ECMA-cyrillic'; 1: result:= 'iso-ir-111'; 2: result:= 'csISO111ECMACyrillic'; else raise ECSMIBException.Create('Invalid MIB number'); end; 78: case i of 0: result:= 'CSA_Z243.4-1985-1'; 1: result:= 'iso-ir-121'; 2: result:= 'ISO646-CA'; 3: result:= 'csa7-1'; 4: result:= 'ca'; 5: result:= 'csISO121Canadian1'; else raise ECSMIBException.Create('Invalid MIB number'); end; 79: case i of 0: result:= 'CSA_Z243.4-1985-2'; 1: result:= 'iso-ir-122'; 2: result:= 'ISO646-CA2'; 3: result:= 'csa7-2'; 4: result:= 'csISO122Canadian2'; else raise ECSMIBException.Create('Invalid MIB number'); end; 80: case i of 0: result:= 'CSA_Z243.4-1985-gr'; 1: result:= 'iso-ir-123'; 2: result:= 'csISO123CSAZ24341985gr'; else raise ECSMIBException.Create('Invalid MIB number'); end; 81: case i of 0: result:= 'ISO_8859-6-E'; 1: result:= 'csISO88596E'; 2: result:= 'ISO-8859-6-E'; else raise ECSMIBException.Create('Invalid MIB number'); end; 82: case i of 0: result:= 'ISO_8859-6-I'; 1: result:= 'csISO88596I'; 2: result:= 'ISO-8859-6-I'; else raise ECSMIBException.Create('Invalid MIB number'); end; 83: case i of 0: result:= 'T.101-G2'; 1: result:= 'iso-ir-128'; 2: result:= 'csISO128T101G2'; else raise ECSMIBException.Create('Invalid MIB number'); end; 84: case i of 0: result:= 'ISO_8859-8-E'; 1: result:= 'csISO88598E'; 2: result:= 'ISO-8859-8-E'; else raise ECSMIBException.Create('Invalid MIB number'); end; 85: case i of 0: result:= 'ISO_8859-8-I'; 1: result:= 'csISO88598I'; 2: result:= 'ISO-8859-8-I'; else raise ECSMIBException.Create('Invalid MIB number'); end; 86: case i of 0: result:= 'CSN_369103'; 1: result:= 'iso-ir-139'; 2: result:= 'csISO139CSN369103'; else raise ECSMIBException.Create('Invalid MIB number'); end; 87: case i of 0: result:= 'JUS_I.B1.002'; 1: result:= 'iso-ir-141'; 2: result:= 'ISO646-YU'; 3: result:= 'js'; 4: result:= 'yu'; 5: result:= 'csISO141JUSIB1002'; else raise ECSMIBException.Create('Invalid MIB number'); end; 88: case i of 0: result:= 'IEC_P27-1'; 1: result:= 'iso-ir-143'; 2: result:= 'csISO143IECP271'; else raise ECSMIBException.Create('Invalid MIB number'); end; 89: case i of 0: result:= 'JUS_I.B1.003-serb'; 1: result:= 'iso-ir-146'; 2: result:= 'serbian'; 3: result:= 'csISO146Serbian'; else raise ECSMIBException.Create('Invalid MIB number'); end; 90: case i of 0: result:= 'JUS_I.B1.003-mac'; 1: result:= 'macedonian'; 2: result:= 'iso-ir-147'; 3: result:= 'csISO147Macedonian'; else raise ECSMIBException.Create('Invalid MIB number'); end; 91: case i of 0: result:= 'greek-ccitt'; 1: result:= 'iso-ir-150'; 2: result:= 'csISO150'; 3: result:= 'csISO150GreekCCITT'; else raise ECSMIBException.Create('Invalid MIB number'); end; 92: case i of 0: result:= 'NC_NC00-10:81'; 1: result:= 'cuba'; 2: result:= 'iso-ir-151'; 3: result:= 'ISO646-CU'; 4: result:= 'csISO151Cuba'; else raise ECSMIBException.Create('Invalid MIB number'); end; 93: case i of 0: result:= 'ISO_6937-2-25'; 1: result:= 'iso-ir-152'; 2: result:= 'csISO6937Add'; else raise ECSMIBException.Create('Invalid MIB number'); end; 94: case i of 0: result:= 'GOST_19768-74'; 1: result:= 'ST_SEV_358-88'; 2: result:= 'iso-ir-153'; 3: result:= 'csISO153GOST1976874'; else raise ECSMIBException.Create('Invalid MIB number'); end; 95: case i of 0: result:= 'ISO_8859-supp'; 1: result:= 'iso-ir-154'; 2: result:= 'latin1-2-5'; 3: result:= 'csISO8859Supp'; else raise ECSMIBException.Create('Invalid MIB number'); end; 96: case i of 0: result:= 'ISO_10367-box'; 1: result:= 'iso-ir-155'; 2: result:= 'csISO10367Box'; else raise ECSMIBException.Create('Invalid MIB number'); end; 97: case i of 0: result:= 'latin-lap'; 1: result:= 'lap'; 2: result:= 'iso-ir-158'; 3: result:= 'csISO158Lap'; else raise ECSMIBException.Create('Invalid MIB number'); end; 98: case i of 0: result:= 'JIS_X0212-1990'; 1: result:= 'x0212'; 2: result:= 'iso-ir-159'; 3: result:= 'csISO159JISX02121990'; else raise ECSMIBException.Create('Invalid MIB number'); end; 99: case i of 0: result:= 'DS_2089'; 1: result:= 'DS2089'; 2: result:= 'ISO646-DK'; 3: result:= 'dk'; 4: result:= 'csISO646Danish'; else raise ECSMIBException.Create('Invalid MIB number'); end; 100: case i of 0: result:= 'us-dk'; 1: result:= 'csUSDK'; else raise ECSMIBException.Create('Invalid MIB number'); end; 101: case i of 0: result:= 'dk-us'; 1: result:= 'csDKUS'; else raise ECSMIBException.Create('Invalid MIB number'); end; 102: case i of 0: result:= 'KSC5636'; 1: result:= 'ISO646-KR'; 2: result:= 'csKSC5636'; else raise ECSMIBException.Create('Invalid MIB number'); end; 103: case i of 0: result:= 'UNICODE-1-1-UTF-7'; 1: result:= 'csUnicode11UTF7'; else raise ECSMIBException.Create('Invalid MIB number'); end; 104: case i of 0: result:= 'ISO-2022-CN'; else raise ECSMIBException.Create('Invalid MIB number'); end; 105: case i of 0: result:= 'ISO-2022-CN-EXT'; else raise ECSMIBException.Create('Invalid MIB number'); end; 106: case i of 0: result:= 'UTF-8'; else raise ECSMIBException.Create('Invalid MIB number'); end; 109: case i of 0: result:= 'ISO-8859-13'; else raise ECSMIBException.Create('Invalid MIB number'); end; 110: case i of 0: result:= 'ISO-8859-14'; 1: result:= 'iso-ir-199'; 2: result:= 'ISO_8859-14:1998'; 3: result:= 'ISO_8859-14'; 4: result:= 'latin8'; 5: result:= 'iso-celtic'; 6: result:= 'l8'; else raise ECSMIBException.Create('Invalid MIB number'); end; 111: case i of 0: result:= 'ISO-8859-15'; 1: result:= 'ISO_8869-15'; else raise ECSMIBException.Create('Invalid MIB number'); end; 112: case i of 0: result:= 'ISO-8859-16'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1000: case i of 0: result:= 'ISO-10646-UCS-2'; 1: result:= 'csUnicode'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1001: case i of 0: result:= 'ISO-10646-UCS-4'; 1: result:= 'csUCS4'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1002: case i of 0: result:= 'ISO-10646-UCS-Basic'; 1: result:= 'csUnicodeASCII'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1003: case i of 0: result:= 'ISO-10646-Unicode-Latin1'; 1: result:= 'csUnicodeLatin1'; 2: result:= 'ISO-10646'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1004: case i of 0: result:= 'ISO-10646-J-1'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1005: case i of 0: result:= 'ISO-Unicode-IBM-1261'; 1: result:= 'csUnicodeIBM1261'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1006: case i of 0: result:= 'ISO-Unicode-IBM-1268'; 1: result:= 'csUnicodeIBM1268'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1007: case i of 0: result:= 'ISO-Unicode-IBM-1276'; 1: result:= 'csUnicodeIBM1276'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1008: case i of 0: result:= 'ISO-Unicode-IBM-1264'; 1: result:= 'csUnicodeIBM1264'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1009: case i of 0: result:= 'ISO-Unicode-IBM-1265'; 1: result:= 'csUnicodeIBM1265'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1010: case i of 0: result:= 'UNICODE-1-1'; 1: result:= 'csUnicode11'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1011: case i of 0: result:= 'SCSU'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1012: case i of 0: result:= 'UTF-7'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1013: case i of 0: result:= 'UTF-16BE'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1014: case i of 0: result:= 'UTF-16LE'; else raise ECSMIBException.Create('Invalid MIB number'); end; 1015: case i of 0: result:= 'UTF-16'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2000: case i of 0: result:= 'ISO-8859-1-Windows-3.0-Latin-1'; 1: result:= 'csWindows30Latin1'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2001: case i of 0: result:= 'ISO-8859-1-Windows-3.1-Latin-1'; 1: result:= 'csWindows31Latin1'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2002: case i of 0: result:= 'ISO-8859-2-Windows-Latin-2'; 1: result:= 'csWindows31Latin2'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2003: case i of 0: result:= 'ISO-8859-9-Windows-Latin-5'; 1: result:= 'csWindows31Latin5'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2004: case i of 0: result:= 'hp-roman8'; 1: result:= 'roman8'; 2: result:= 'r8'; 3: result:= 'csHPRoman8'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2005: case i of 0: result:= 'Adobe-Standard-Encoding'; 1: result:= 'csAdobeStandardEncoding'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2006: case i of 0: result:= 'Ventura-US'; 1: result:= 'csVenturaUS'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2007: case i of 0: result:= 'Ventura-International'; 1: result:= 'csVenturaInternational'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2008: case i of 0: result:= 'DEC-MCS'; 1: result:= 'dec'; 2: result:= 'csDECMCS'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2009: case i of 0: result:= 'IBM850'; 1: result:= 'cp850'; 2: result:= '850'; 3: result:= 'csPC850Multilingual'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2010: case i of 0: result:= 'IBM852'; 1: result:= 'cp852'; 2: result:= '852'; 3: result:= 'csPCp852'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2011: case i of 0: result:= 'IBM437'; 1: result:= 'cp437'; 2: result:= '437'; 3: result:= 'csPC8CodePage437'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2012: case i of 0: result:= 'PC8-Danish-Norwegian'; 1: result:= 'csPC8DanishNorwegian'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2013: case i of 0: result:= 'IBM862'; 1: result:= 'cp862'; 2: result:= '862'; 3: result:= 'csPC862LatinHebrew'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2014: case i of 0: result:= 'PC8-Turkish'; 1: result:= 'csPC8Turkish'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2015: case i of 0: result:= 'IBM-Symbols'; 1: result:= 'csIBMSymbols'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2016: case i of 0: result:= 'IBM-Thai'; 1: result:= 'csIBMThai'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2017: case i of 0: result:= 'HP-Legal'; 1: result:= 'csHPLegal'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2018: case i of 0: result:= 'HP-Pi-font'; 1: result:= 'csHPPiFont'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2019: case i of 0: result:= 'HP-Math8'; 1: result:= 'csHPMath8'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2020: case i of 0: result:= 'Adobe-Symbol-Encoding'; 1: result:= 'csHPPSMath'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2021: case i of 0: result:= 'HP-DeskTop'; 1: result:= 'csHPDesktop'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2022: case i of 0: result:= 'Ventura-Math'; 1: result:= 'csVenturaMath'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2023: case i of 0: result:= 'Microsoft-Publishing'; 1: result:= 'csMicrosoftPublishing'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2024: case i of 0: result:= 'Windows-31J'; 1: result:= 'csWindows31J'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2025: case i of 0: result:= 'GB2312'; 1: result:= 'csGB2312'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2026: case i of 0: result:= 'Big5'; 1: result:= 'csBig5'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2027: case i of 0: result:= 'macintosh'; 1: result:= 'mac'; 2: result:= 'csMacintosh'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2028: case i of 0: result:= 'IBM037'; 1: result:= 'cp037'; 2: result:= 'ebcdic-cp-us'; 3: result:= 'ebcdic-cp-ca'; 4: result:= 'ebcdic-cp-wt'; 5: result:= 'ebcdic-cp-nl'; 6: result:= 'csIBM037'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2029: case i of 0: result:= 'IBM038'; 1: result:= 'EBCDIC-INT'; 2: result:= 'cp038'; 3: result:= 'csIBM038'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2030: case i of 0: result:= 'IBM273'; 1: result:= 'CP273'; 2: result:= 'csIBM273'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2031: case i of 0: result:= 'IBM274'; 1: result:= 'EBCDIC-BE'; 2: result:= 'CP274'; 3: result:= 'csIBM274'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2032: case i of 0: result:= 'IBM275'; 1: result:= 'EBCDIC-BR'; 2: result:= 'cp275'; 3: result:= 'csIBM275'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2033: case i of 0: result:= 'IBM277'; 1: result:= 'EBCDIC-CP-DK'; 2: result:= 'EBCDIC-CP-NO'; 3: result:= 'csIBM277'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2034: case i of 0: result:= 'IBM278'; 1: result:= 'CP278'; 2: result:= 'ebcdic-cp-fi'; 3: result:= 'ebcdic-cp-se'; 4: result:= 'csIBM278'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2035: case i of 0: result:= 'IBM280'; 1: result:= 'CP280'; 2: result:= 'ebcdic-cp-it'; 3: result:= 'csIBM280'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2036: case i of 0: result:= 'IBM281'; 1: result:= 'EBCDIC-JP-E'; 2: result:= 'cp281'; 3: result:= 'csIBM281'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2037: case i of 0: result:= 'IBM284'; 1: result:= 'CP284'; 2: result:= 'ebcdic-cp-es'; 3: result:= 'csIBM284'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2038: case i of 0: result:= 'IBM285'; 1: result:= 'CP285'; 2: result:= 'ebcdic-cp-gb'; 3: result:= 'csIBM285'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2039: case i of 0: result:= 'IBM290'; 1: result:= 'cp290'; 2: result:= 'EBCDIC-JP-kana'; 3: result:= 'csIBM290'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2040: case i of 0: result:= 'IBM297'; 1: result:= 'cp297'; 2: result:= 'ebcdic-cp-fr'; 3: result:= 'csIBM297'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2041: case i of 0: result:= 'IBM420'; 1: result:= 'cp420'; 2: result:= 'ebcdic-cp-ar1'; 3: result:= 'csIBM420'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2042: case i of 0: result:= 'IBM423'; 1: result:= 'cp423'; 2: result:= 'ebcdic-cp-gr'; 3: result:= 'csIBM423'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2043: case i of 0: result:= 'IBM424'; 1: result:= 'cp424'; 2: result:= 'ebcdic-cp-he'; 3: result:= 'csIBM424'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2044: case i of 0: result:= 'IBM500'; 1: result:= 'CP500'; 2: result:= 'ebcdic-cp-be'; 3: result:= 'ebcdic-cp-ch'; 4: result:= 'csIBM500'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2045: case i of 0: result:= 'IBM851'; 1: result:= 'cp851'; 2: result:= '851'; 3: result:= 'csIBM851'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2046: case i of 0: result:= 'IBM855'; 1: result:= 'cp855'; 2: result:= '855'; 3: result:= 'csIBM855'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2047: case i of 0: result:= 'IBM857'; 1: result:= 'cp857'; 2: result:= '857'; 3: result:= 'csIBM857'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2048: case i of 0: result:= 'IBM860'; 1: result:= 'cp860'; 2: result:= '860'; 3: result:= 'csIBM860'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2049: case i of 0: result:= 'IBM861'; 1: result:= 'cp861'; 2: result:= '861'; 3: result:= 'cp-is'; 4: result:= 'csIBM861'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2050: case i of 0: result:= 'IBM863'; 1: result:= 'cp863'; 2: result:= '863'; 3: result:= 'csIBM863'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2051: case i of 0: result:= 'IBM864'; 1: result:= 'cp864'; 2: result:= 'csIBM864'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2052: case i of 0: result:= 'IBM865'; 1: result:= 'cp865'; 2: result:= '865'; 3: result:= 'csIBM865'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2053: case i of 0: result:= 'IBM868'; 1: result:= 'CP868'; 2: result:= 'cp-ar'; 3: result:= 'csIBM868'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2054: case i of 0: result:= 'IBM869'; 1: result:= 'cp869'; 2: result:= '869'; 3: result:= 'cp-gr'; 4: result:= 'csIBM869'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2055: case i of 0: result:= 'IBM870'; 1: result:= 'CP870'; 2: result:= 'ebcdic-cp-roece'; 3: result:= 'ebcdic-cp-yu'; 4: result:= 'csIBM870'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2056: case i of 0: result:= 'IBM871'; 1: result:= 'CP871'; 2: result:= 'ebcdic-cp-is'; 3: result:= 'csIBM871'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2057: case i of 0: result:= 'IBM880'; 1: result:= 'cp880'; 2: result:= 'EBCDIC-Cyrillic'; 3: result:= 'csIBM880'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2058: case i of 0: result:= 'IBM891'; 1: result:= 'cp891'; 2: result:= 'csIBM891'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2059: case i of 0: result:= 'IBM903'; 1: result:= 'cp903'; 2: result:= 'csIBM903'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2060: case i of 0: result:= 'IBM904'; 1: result:= 'cp904'; 2: result:= '904'; 3: result:= 'csIBM904'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2061: case i of 0: result:= 'IBM905'; 1: result:= 'CP905'; 2: result:= 'ebcdic-cp-tr'; 3: result:= 'csIBM905'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2062: case i of 0: result:= 'IBM918'; 1: result:= 'CP918'; 2: result:= 'ebcdic-cp-ar2'; 3: result:= 'csIBM918'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2063: case i of 0: result:= 'IBM1026'; 1: result:= 'CP1026'; 2: result:= 'csIBM1026'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2064: case i of 0: result:= 'EBCDIC-AT-DE'; 1: result:= 'csIBMEBCDICATDE'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2065: case i of 0: result:= 'EBCDIC-AT-DE-A'; 1: result:= 'csIBMEBCDICATDEA'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2066: case i of 0: result:= 'EBCDIC-CA-FR'; 1: result:= 'csIBMEBCDICCAFR'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2067: case i of 0: result:= 'EBCDIC-DK-NO'; 1: result:= 'csIBMEBCDICDKNO'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2068: case i of 0: result:= 'EBCDIC-DK-NO-A'; 1: result:= 'csIBMEBCDICDKNOA'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2069: case i of 0: result:= 'EBCDIC-FI-SE'; 1: result:= 'csIBMEBCDICFISE'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2070: case i of 0: result:= 'EBCDIC-FI-SE-A'; 1: result:= 'csIBMEBCDICFISEA'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2071: case i of 0: result:= 'EBCDIC-FR'; 1: result:= 'csIBMEBCDICFR'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2072: case i of 0: result:= 'EBCDIC-IT'; 1: result:= 'csIBMEBCDICIT'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2073: case i of 0: result:= 'EBCDIC-PT'; 1: result:= 'csIBMEBCDICPT'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2074: case i of 0: result:= 'EBCDIC-ES'; 1: result:= 'csIBMEBCDICES'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2075: case i of 0: result:= 'EBCDIC-ES-A'; 1: result:= 'csIBMEBCDICESA'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2076: case i of 0: result:= 'EBCDIC-ES-S'; 1: result:= 'csIBMEBCDICESS'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2077: case i of 0: result:= 'EBCDIC-UK'; 1: result:= 'csIBMEBCDICUK'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2078: case i of 0: result:= 'EBCDIC-US'; 1: result:= 'csIBMEBCDICUS'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2079: case i of 0: result:= 'UNKNOWN-8BIT'; 1: result:= 'csUnkown8Bit'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2080: case i of 0: result:= 'MNEMONIC'; 1: result:= 'csMnemonic'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2081: case i of 0: result:= 'MNEM'; 1: result:= 'csMnem'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2082: case i of 0: result:= 'VISCII'; 1: result:= 'csVISCII'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2083: case i of 0: result:= 'VIQR'; 1: result:= 'csVIQR'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2084: case i of 0: result:= 'KOI8-R'; 1: result:= 'csKOI8R'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2085: case i of 0: result:= 'HZ-GB-2312'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2086: case i of 0: result:= 'IBM866'; 1: result:= 'cp866'; 2: result:= '866'; 3: result:= 'csIBM866'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2087: case i of 0: result:= 'IBM775'; 1: result:= 'cp775'; 2: result:= 'csPC775Baltic'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2088: case i of 0: result:= 'KOI8-U'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2089: case i of 0: result:= 'IBM00858'; 1: result:= 'CCSID00858'; 2: result:= 'CP00858'; 3: result:= 'PC-Multilingual-850+euro'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2090: case i of 0: result:= 'IBM00924'; 1: result:= 'CCSID00924'; 2: result:= 'CP00924'; 3: result:= 'ebcdic-Latin9--euro'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2091: case i of 0: result:= 'IBM01140'; 1: result:= 'CCSID01140'; 2: result:= 'CP01140'; 3: result:= 'ebcdic-us-37+euro'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2092: case i of 0: result:= 'IBM01141'; 1: result:= 'CCSID01141'; 2: result:= 'CP01141'; 3: result:= 'ebcdic-de-273+euro'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2093: case i of 0: result:= 'IBM01142'; 1: result:= 'CCSID01142'; 2: result:= 'CP01142'; 3: result:= 'ebcdic-dk-277+euro'; 4: result:= 'ebcdic-no-277+euro'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2094: case i of 0: result:= 'IBM01143'; 1: result:= 'CCSID01143'; 2: result:= 'CP01143'; 3: result:= 'ebcdic-fi-278+euro'; 4: result:= 'ebcdic-se-278+euro'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2095: case i of 0: result:= 'IBM01144'; 1: result:= 'CCSID01144'; 2: result:= 'CP01144'; 3: result:= 'ebcdic-it-280+euro'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2096: case i of 0: result:= 'IBM01145'; 1: result:= 'CCSID01145'; 2: result:= 'CP01145'; 3: result:= 'ebcdic-es-284+euro'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2097: case i of 0: result:= 'IBM01146'; 1: result:= 'CCSID01146'; 2: result:= 'CP01146'; 3: result:= 'ebcdic-gb-285+euro'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2098: case i of 0: result:= 'IBM01147'; 1: result:= 'CCSID01147'; 2: result:= 'CP01147'; 3: result:= 'ebcdic-fr-297+euro'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2099: case i of 0: result:= 'IBM01148'; 1: result:= 'CCSID01148'; 2: result:= 'CP01148'; 3: result:= 'ebcdic-international-500+euro'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2100: case i of 0: result:= 'IBM01149'; 1: result:= 'CCSID01149'; 2: result:= 'CP01149'; 3: result:= 'ebcdic-is-871+euro'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2101: case i of 0: result:= 'Big5-HKSCS'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2250: case i of 0: result:= 'windows-1250'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2251: case i of 0: result:= 'windows-1251'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2252: case i of 0: result:= 'windows-1252'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2253: case i of 0: result:= 'windows-1253'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2254: case i of 0: result:= 'windows-1254'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2255: case i of 0: result:= 'windows-1255'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2256: case i of 0: result:= 'windows-1256'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2257: case i of 0: result:= 'windows-1257'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2258: case i of 0: result:= 'windows-1258'; else raise ECSMIBException.Create('Invalid MIB number'); end; 2259: case i of 0: result:= 'TIS-620'; else raise ECSMIBException.Create('Invalid MIB number'); end; else raise ECSMIBException.Create('Invalid MIB number'); end; end; function TCSMIB.GetAliasCount: integer; begin case FEnum of 104..106,109,112,1004,1011..1015,2085,2088,2101,2250..2259: result:= 1; 16,19,27,29,37..40,66,100..101,103,111,1000..1002,1005..1010,2000..2003,2005..2007,2012,2014..2026,2064..2084: result:= 2; 14..15,17..18,28,31..34,44..45,47..55,59,64,72,75,77,80..86,88,93,96,102,1003,2008,2027,2030,2051,2058..2059,2063,2087: result:= 3; 22..23,30,43,46,57,60..61,67,69..71,73,76,89..91,94..95,97..98,2004,2009..2011,2013,2029,2031..2033,2035..2043,2045..2048,2050,2052..2053,2056..2057,2060..2062,2086,2089..2092,2095..2100: result:= 4; 21,24,26,42,56,58,62..63,65,68,74,79,92,99,2034,2044,2049,2054..2055,2093..2094: result:= 5; 8,11,13,20,25,36,41,78,87: result:= 6; 5..7,12,35,110,2028: result:= 7; 9: result:= 8; 4,10: result:= 9; 3: result:= 11; else raise ECSMIBException.Create('Invalid MIB number'); end; end; function TCSMIB.GetPrfMIMEName: string; begin case FEnum of 13,17,37..40,2025..2026,2084: result:= Alias[0]; 18,82,84..85: result:= Alias[2]; 4..12: result:= Alias[3]; 3: result:= Alias[6]; else result:= ''; end; end; function TCSMIB.IsValidEnum(const Value: integer): boolean; begin case Value of 3..106,109..112,1000..1015,2000..2101,2250..2259: result:= true; else result:= false; end; end; procedure TCSMIB.SetEnum(const Value: integer); var AllowChange: boolean; begin if IsValidEnum(Value) then begin if FEnum = Value then exit; AllowChange:= True; DoChanging(self,Value,AllowChange); if AllowChange then begin FEnum:= Value; DoChange(self); end; end else if not IgnoreInvalidEnum then begin raise ECSMIBException.Create('Invalid MIB number'); end; end; procedure TCSMIB.SetOnChange(const Value: TNotifyEvent); begin FOnChange := Value; end; procedure TCSMIB.SetOnChanging(const Value: TCSMIBChangingEvent); begin FOnChanging := Value; end; function TCSMIB.SetToAlias(const S: string): boolean; var i,j,oldEnum: integer; begin result:= true; oldEnum:= Enum; for i:= 3 to 106 do begin Enum:= i; for j:= 0 to pred(AliasCount) do begin if CompareText(Alias[j],S) = 0 then exit; end; end; for i:= 109 to 112 do begin Enum:= i; for j:= 0 to pred(AliasCount) do begin if CompareText(Alias[j],S) = 0 then exit; end; end; for i:= 1000 to 1015 do begin Enum:= i; for j:= 0 to pred(AliasCount) do begin if CompareText(Alias[j],S) = 0 then exit; end; end; for i:= 2000 to 2101 do begin Enum:= i; for j:= 0 to pred(AliasCount) do begin if CompareText(Alias[j],S) = 0 then exit; end; end; for i:= 2250 to 2259 do begin Enum:= i; for j:= 0 to pred(AliasCount) do begin if CompareText(Alias[j],S) = 0 then exit; end; end; result:= false; Enum:= oldEnum; end; end.