mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-06 00:28:05 +02:00
566 lines
22 KiB
ObjectPascal
566 lines
22 KiB
ObjectPascal
{
|
|
This file is part of the Free Pascal run time library.
|
|
Copyright (c) 2000 by Florian Klaempfl
|
|
member of the Free Pascal development team.
|
|
|
|
This unit implements several classes for charset conversions
|
|
|
|
See the file COPYING.FPC, included in this distribution,
|
|
for details about the copyright.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
**********************************************************************}
|
|
{$mode objfpc}
|
|
unit ccharset;
|
|
|
|
{$i fpcdefs.inc}
|
|
|
|
interface
|
|
|
|
type
|
|
tunicodechar = word;
|
|
tunicodestring = ^tunicodechar;
|
|
|
|
tcsconvert = class
|
|
end;
|
|
|
|
tunicodecharmappingflag = (umf_noinfo,umf_leadbyte,umf_undefined,
|
|
umf_unused);
|
|
|
|
punicodecharmapping = ^tunicodecharmapping;
|
|
tunicodecharmapping = record
|
|
unicode : tunicodechar;
|
|
flag : tunicodecharmappingflag;
|
|
reserved : byte;
|
|
end;
|
|
|
|
punicodemap = ^tunicodemap;
|
|
tunicodemap = record
|
|
cpname : string[20];
|
|
cp : word;
|
|
map : punicodecharmapping;
|
|
lastchar : longint;
|
|
next : punicodemap;
|
|
internalmap : boolean;
|
|
end;
|
|
|
|
tcp2unicode = class(tcsconvert)
|
|
end;
|
|
|
|
const
|
|
DefaultSystemCodePage = 437;
|
|
|
|
function loadunicodemapping(const cpname,f : string; cp :word) : punicodemap;
|
|
procedure registermapping(p : punicodemap);
|
|
function getmap(const s : string) : punicodemap;
|
|
function getmap(cp : word) : punicodemap;
|
|
function mappingavailable(const s : string) : boolean;
|
|
function mappingavailable(cp :word) : boolean;
|
|
function getunicode(c : char;p : punicodemap) : tunicodechar;
|
|
function getascii(c : tunicodechar;p : punicodemap) : string;
|
|
|
|
implementation
|
|
|
|
var
|
|
mappings : punicodemap;
|
|
|
|
function loadunicodemapping(const cpname,f : string; cp :word) : punicodemap;
|
|
|
|
var
|
|
data : punicodecharmapping;
|
|
datasize : longint;
|
|
t : text;
|
|
s,hs : string;
|
|
scanpos,charpos,unicodevalue : longint;
|
|
code : word;
|
|
flag : tunicodecharmappingflag;
|
|
p : punicodemap;
|
|
lastchar : longint;
|
|
|
|
begin
|
|
lastchar:=-1;
|
|
loadunicodemapping:=nil;
|
|
datasize:=256;
|
|
getmem(data,sizeof(tunicodecharmapping)*datasize);
|
|
assign(t,f);
|
|
{$I-}
|
|
reset(t);
|
|
{$I+}
|
|
if ioresult<>0 then
|
|
begin
|
|
freemem(data,sizeof(tunicodecharmapping)*datasize);
|
|
exit;
|
|
end;
|
|
while not(eof(t)) do
|
|
begin
|
|
readln(t,s);
|
|
if (s[1]='0') and (s[2]='x') then
|
|
begin
|
|
flag:=umf_unused;
|
|
scanpos:=3;
|
|
hs:='$';
|
|
while s[scanpos] in ['0'..'9','A'..'F','a'..'f'] do
|
|
begin
|
|
hs:=hs+s[scanpos];
|
|
inc(scanpos);
|
|
end;
|
|
val(hs,charpos,code);
|
|
if code<>0 then
|
|
begin
|
|
freemem(data,sizeof(tunicodecharmapping)*datasize);
|
|
close(t);
|
|
exit;
|
|
end;
|
|
while not(s[scanpos] in ['0','#']) do
|
|
inc(scanpos);
|
|
if s[scanpos]='#' then
|
|
begin
|
|
{ special char }
|
|
unicodevalue:=$ffff;
|
|
hs:=copy(s,scanpos,length(s)-scanpos+1);
|
|
if hs='#DBCS LEAD BYTE' then
|
|
flag:=umf_leadbyte;
|
|
end
|
|
else
|
|
begin
|
|
{ C hex prefix }
|
|
inc(scanpos,2);
|
|
hs:='$';
|
|
while s[scanpos] in ['0'..'9','A'..'F','a'..'f'] do
|
|
begin
|
|
hs:=hs+s[scanpos];
|
|
inc(scanpos);
|
|
end;
|
|
val(hs,unicodevalue,code);
|
|
if code<>0 then
|
|
begin
|
|
freemem(data,sizeof(tunicodecharmapping)*datasize);
|
|
close(t);
|
|
exit;
|
|
end;
|
|
if charpos>datasize then
|
|
begin
|
|
{ allocate 1024 bytes more because }
|
|
{ if we need more than 256 entries it's }
|
|
{ probably a mbcs with a lot of }
|
|
{ entries }
|
|
datasize:=charpos+1024;
|
|
reallocmem(data,sizeof(tunicodecharmapping)*datasize);
|
|
end;
|
|
flag:=umf_noinfo;
|
|
end;
|
|
data[charpos].flag:=flag;
|
|
data[charpos].unicode:=unicodevalue;
|
|
if charpos>lastchar then
|
|
lastchar:=charpos;
|
|
end;
|
|
end;
|
|
close(t);
|
|
new(p);
|
|
p^.lastchar:=lastchar;
|
|
p^.cpname:=cpname;
|
|
p^.cp:=cp;
|
|
p^.internalmap:=false;
|
|
p^.next:=nil;
|
|
p^.map:=data;
|
|
loadunicodemapping:=p;
|
|
end;
|
|
|
|
procedure registermapping(p : punicodemap);
|
|
|
|
begin
|
|
p^.next:=mappings;
|
|
mappings:=p;
|
|
end;
|
|
|
|
function getmap(const s : string) : punicodemap;
|
|
|
|
var
|
|
hp : punicodemap;
|
|
|
|
const
|
|
mapcache : string = '';
|
|
mapcachep : punicodemap = nil;
|
|
|
|
begin
|
|
if (mapcache=s) and assigned(mapcachep) and (mapcachep^.cpname=s) then
|
|
begin
|
|
getmap:=mapcachep;
|
|
exit;
|
|
end;
|
|
hp:=mappings;
|
|
while assigned(hp) do
|
|
begin
|
|
if hp^.cpname=s then
|
|
begin
|
|
getmap:=hp;
|
|
mapcache:=s;
|
|
mapcachep:=hp;
|
|
exit;
|
|
end;
|
|
hp:=hp^.next;
|
|
end;
|
|
getmap:=nil;
|
|
end;
|
|
|
|
function getmap(cp : word) : punicodemap;
|
|
|
|
var
|
|
hp : punicodemap;
|
|
|
|
const
|
|
mapcache : word = 0;
|
|
mapcachep : punicodemap = nil;
|
|
|
|
begin
|
|
if (mapcache=cp) and assigned(mapcachep) and (mapcachep^.cp=cp) then
|
|
begin
|
|
getmap:=mapcachep;
|
|
exit;
|
|
end;
|
|
hp:=mappings;
|
|
while assigned(hp) do
|
|
begin
|
|
if hp^.cp=cp then
|
|
begin
|
|
getmap:=hp;
|
|
mapcache:=cp;
|
|
mapcachep:=hp;
|
|
exit;
|
|
end;
|
|
hp:=hp^.next;
|
|
end;
|
|
getmap:=nil;
|
|
end;
|
|
|
|
function mappingavailable(const s : string) : boolean;
|
|
|
|
begin
|
|
mappingavailable:=getmap(s)<>nil;
|
|
end;
|
|
|
|
function mappingavailable(cp : word) : boolean;
|
|
|
|
begin
|
|
mappingavailable:=getmap(cp)<>nil;
|
|
end;
|
|
|
|
function getunicode(c : char;p : punicodemap) : tunicodechar;
|
|
|
|
begin
|
|
if ord(c)<=p^.lastchar then
|
|
getunicode:=p^.map[ord(c)].unicode
|
|
else
|
|
getunicode:=0;
|
|
end;
|
|
|
|
function getascii(c : tunicodechar;p : punicodemap) : string;
|
|
|
|
var
|
|
i : longint;
|
|
|
|
begin
|
|
{ at least map to '?' }
|
|
getascii:=#63;
|
|
for i:=0 to p^.lastchar do
|
|
if p^.map[i].unicode=c then
|
|
begin
|
|
if i<256 then
|
|
getascii:=chr(i)
|
|
else
|
|
getascii:=chr(i div 256)+chr(i mod 256);
|
|
exit;
|
|
end;
|
|
end;
|
|
|
|
const
|
|
map : array[0..255] of tunicodecharmapping = (
|
|
(unicode : 0; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 1; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 2; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 3; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 4; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 5; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 6; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 7; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 8; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 9; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 10; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 11; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 12; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 13; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 14; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 15; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 16; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 17; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 18; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 19; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 20; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 21; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 22; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 23; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 24; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 25; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 26; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 27; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 28; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 29; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 30; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 31; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 32; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 33; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 34; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 35; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 36; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 37; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 38; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 39; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 40; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 41; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 42; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 43; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 44; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 45; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 46; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 47; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 48; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 49; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 50; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 51; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 52; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 53; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 54; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 55; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 56; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 57; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 58; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 59; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 60; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 61; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 62; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 63; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 64; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 65; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 66; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 67; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 68; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 69; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 70; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 71; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 72; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 73; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 74; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 75; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 76; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 77; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 78; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 79; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 80; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 81; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 82; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 83; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 84; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 85; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 86; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 87; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 88; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 89; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 90; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 91; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 92; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 93; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 94; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 95; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 96; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 97; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 98; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 99; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 100; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 101; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 102; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 103; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 104; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 105; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 106; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 107; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 108; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 109; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 110; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 111; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 112; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 113; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 114; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 115; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 116; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 117; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 118; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 119; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 120; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 121; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 122; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 123; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 124; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 125; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 126; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 127; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 128; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 129; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 130; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 131; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 132; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 133; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 134; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 135; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 136; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 137; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 138; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 139; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 140; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 141; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 142; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 143; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 144; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 145; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 146; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 147; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 148; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 149; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 150; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 151; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 152; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 153; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 154; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 155; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 156; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 157; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 158; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 159; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 160; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 161; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 162; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 163; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 164; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 165; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 166; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 167; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 168; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 169; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 170; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 171; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 172; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 173; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 174; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 175; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 176; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 177; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 178; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 179; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 180; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 181; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 182; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 183; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 184; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 185; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 186; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 187; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 188; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 189; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 190; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 191; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 192; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 193; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 194; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 195; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 196; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 197; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 198; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 199; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 200; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 201; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 202; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 203; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 204; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 205; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 206; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 207; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 208; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 209; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 210; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 211; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 212; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 213; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 214; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 215; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 216; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 217; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 218; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 219; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 220; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 221; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 222; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 223; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 224; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 225; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 226; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 227; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 228; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 229; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 230; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 231; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 232; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 233; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 234; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 235; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 236; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 237; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 238; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 239; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 240; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 241; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 242; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 243; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 244; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 245; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 246; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 247; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 248; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 249; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 250; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 251; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 252; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 253; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 254; flag : umf_noinfo; reserved: 0),
|
|
(unicode : 255; flag : umf_noinfo; reserved: 0)
|
|
);
|
|
|
|
unicodemap : tunicodemap = (
|
|
cpname : '8859-1';
|
|
cp : 28591;
|
|
map : @map;
|
|
lastchar : 255;
|
|
next : nil;
|
|
internalmap : true
|
|
);
|
|
|
|
var
|
|
hp : punicodemap;
|
|
|
|
initialization
|
|
mappings:=nil;
|
|
registermapping(@unicodemap)
|
|
finalization
|
|
while assigned(mappings) do
|
|
begin
|
|
hp:=mappings^.next;
|
|
if not(mappings^.internalmap) then
|
|
begin
|
|
freemem(mappings^.map);
|
|
dispose(mappings);
|
|
end;
|
|
mappings:=hp;
|
|
end;
|
|
end.
|