unit cp_usascii;
{$mode objfpc}{$H+}
interface
type
USASCIIString = type AnsiString(20127);
function UTF8ToUSASCII(AStr: String): USASCIIString;
implementation
uses
LConvEncoding;
function UnicodeToCP20127(Unicode: Cardinal): integer;
begin
case Unicode of
$0000..$007F: Result := Unicode - 0;
$00C1..$00C6: Result := 65;
$00C7..$00C8: Result := Unicode - 134;
$00C9..$00CB: Result := 69;
$00CD..$00CF: Result := 73;
$00D3..$00D6: Result := 79;
$00DA..$00DC: Result := 85;
$00E1..$00E6: Result := 97;
$00E7..$00E8: Result := Unicode - 134;
$00E9..$00EB: Result := 101;
$00ED..$00EF: Result := 105;
$00F3..$00F6: Result := 111;
$00FA..$00FC: Result := 117;
$2001..$2006: Result := 32;
$2013..$2014: Result := 45;
$201D..$201E: Result := 34;
$FF02..$FF1E: Result := Unicode - 65249;
$FF21..$FF5E: Result := Unicode - 65249;
$00A0,$2000: Result := 32;
$00A1,$FF01: Result := 33;
$02BA,$030E,$201C: Result := 34;
$00A4: Result := 36;
$02B9,$02BC,$02C8,$2018,$2019,$2032: Result := 39;
$00B8,$201A: Result := 44;
$00AD,$2010,$2011: Result := 45;
$00B7,$2022,$2026: Result := 46;
$00B9: Result := 49;
$00B2: Result := 50;
$00B3: Result := 51;
$00AB,$2039: Result := 60;
$00BB,$203A: Result := 62;
$10000: Result := 63;
$FF20: Result := 64;
$00C0,$0100,$0102,$0104,$01CD,$01DE: Result := 65;
$00A9,$0106,$0108,$010A,$010C: Result := 67;
$00D0,$010E,$0110,$0189: Result := 68;
$0112,$0114,$0116,$0118,$011A: Result := 69;
$0191: Result := 70;
$011C,$011E,$0120,$0122,$01E4,$01E6: Result := 71;
$0124,$0126: Result := 72;
$00CC,$0128,$012A,$012C,$012E,$0130,$0197,$01CF: Result := 73;
$0134: Result := 74;
$0136,$01E8: Result := 75;
$0139,$013B,$013D,$0141: Result := 76;
$00D1,$0143,$0145,$0147: Result := 78;
$00D2,$00D8,$014C,$014E,$0150,$0152,$019F,$01A0,$01D1,$01EA,$01EC: Result := 79;
$00AE,$0154,$0156,$0158: Result := 82;
$015A,$015C,$015E,$0160: Result := 83;
$0162,$0164,$0166,$01AE,$2122: Result := 84;
$00D9,$0168,$016A,$016C,$016E,$0170,$0172,$01AF,$01D3,$01D5,$01D7,$01D9,$01DB: Result := 85;
$0174: Result := 87;
$00A5,$00DD,$0176,$0178: Result := 89;
$0179,$017B,$017D: Result := 90;
$02C4,$02C6,$0302: Result := 94;
$02CD,$0331,$0332: Result := 95;
$02CB,$0300,$2035: Result := 96;
$00AA,$00E0,$0101,$0103,$0105,$01CE,$01DF: Result := 97;
$0180: Result := 98;
$00A2,$0107,$0109,$010B,$010D: Result := 99;
$010F,$0111: Result := 100;
$0113,$0115,$0117,$0119,$011B: Result := 101;
$0192: Result := 102;
$011D,$011F,$0121,$0123,$01E5,$01E7,$0261: Result := 103;
$0125,$0127: Result := 104;
$00EC,$0129,$012B,$012D,$012F,$0131,$01D0: Result := 105;
$0135,$01F0: Result := 106;
$0137,$01E9: Result := 107;
$013A,$013C,$013E,$0142,$019A: Result := 108;
$00F1,$0144,$0146,$0148: Result := 110;
$00BA,$00F2,$00F8,$014D,$014F,$0151,$0153,$01A1,$01D2,$01EB,$01ED: Result := 111;
$0155,$0157,$0159: Result := 114;
$015B,$015D,$015F,$0161: Result := 115;
$0163,$0165,$0167,$01AB: Result := 116;
$00F9,$0169,$016B,$016D,$016F,$0171,$0173,$01B0,$01D4,$01D6,$01D8,$01DA,$01DC: Result := 117;
$0175: Result := 119;
$00FD,$00FF,$0177: Result := 121;
$017A,$017C,$017E,$01B6: Result := 122;
$00A6: Result := 124;
$02DC,$0303: Result := 126;
else
Result := $3F;
end;
end;
function UTF8ToUSASCII(AStr: String): USASCIIString;
begin
Result := UTF8ToSingleByte(AStr, @UnicodeToCP20127);
end;
end.