LazUtils: Add encoding ISO-8859-5 to LConvEncoding. Issue #39795, patch by Alexey Torgashin.

This commit is contained in:
Juha 2022-06-13 16:41:04 +03:00
parent 83f94025e0
commit 4b08ccf47b
2 changed files with 384 additions and 95 deletions

View File

@ -1213,101 +1213,101 @@ const
#194#158, // #158
#194#159, // #159
#194#160, // #160
#$C4#$84, // #$A1
#$C4#$85, // #$A2
#$C5#$81, // #$A3
#$E2#$82#$AC, // #$A4
#$E2#$80#$9E, // #$A5
#$C5#$A0, // #$A6
#$C2#$A7, // #$A7
#$C5#$A1, // #$A8
#$C2#$A9, // #$A9
#$C8#$98, // #$AA
#$C2#$AB, // #$AB
#$C5#$B9, // #$AC
#$C2#$AD, // #$AD
#$C5#$BA, // #$AE
#$C5#$BB, // #$AF
#$C2#$B0, // #$B0
#$C2#$B1, // #$B1
#$C4#$8C, // #$B2
#$C5#$82, // #$B3
#$C5#$BD, // #$B4
#$E2#$80#$9D, // #$B5
#$C2#$B6, // #$B6
#$C2#$B7, // #$B7
#$C5#$BE, // #$B8
#$C4#$8D, // #$B9
#$C8#$99, // #$BA
#$C2#$BB, // #$BB
#$C5#$92, // #$BC
#$C5#$93, // #$BD
#$C5#$B8, // #$BE
#$C5#$BC, // #$BF
#$C3#$80, // #$C0
#$C3#$81, // #$C1
#$C3#$82, // #$C2
#$C4#$82, // #$C3
#$C3#$84, // #$C4
#$C4#$86, // #$C5
#$C3#$86, // #$C6
#$C3#$87, // #$C7
#$C3#$88, // #$C8
#$C3#$89, // #$C9
#$C3#$8A, // #$CA
#$C3#$8B, // #$CB
#$C3#$8C, // #$CC
#$C3#$8D, // #$CD
#$C3#$8E, // #$CE
#$C3#$8F, // #$CF
#$C4#$90, // #$D0
#$C5#$83, // #$D1
#$C3#$92, // #$D2
#$C3#$93, // #$D3
#$C3#$94, // #$D4
#$C5#$90, // #$D5
#$C3#$96, // #$D6
#$C5#$9A, // #$D7
#$C5#$B0, // #$D8
#$C3#$99, // #$D9
#$C3#$9A, // #$DA
#$C3#$9B, // #$DB
#$C3#$9C, // #$DC
#$C4#$98, // #$DD
#$C8#$9A, // #$DE
#$C3#$9F, // #$DF
#$C3#$A0, // #$E0
#$C3#$A1, // #$E1
#$C3#$A2, // #$E2
#$C4#$83, // #$E3
#$C3#$A4, // #$E4
#$C4#$87, // #$E5
#$C3#$A6, // #$E6
#$C3#$A7, // #$E7
#$C3#$A8, // #$E8
#$C3#$A9, // #$E9
#$C3#$AA, // #$EA
#$C3#$AB, // #$EB
#$C3#$AC, // #$EC
#$C3#$AD, // #$ED
#$C3#$AE, // #$EE
#$C3#$AF, // #$EF
#$C4#$91, // #$F0
#$C5#$84, // #$F1
#$C3#$B2, // #$F2
#$C3#$B3, // #$F3
#$C3#$B4, // #$F4
#$C5#$91, // #$F5
#$C3#$B6, // #$F6
#$C5#$9B, // #$F7
#$C5#$B1, // #$F8
#$C3#$B9, // #$F9
#$C3#$BA, // #$FA
#$C3#$BB, // #$FB
#$C3#$BC, // #$FC
#$C4#$99, // #$FD
#$C8#$9B, // #$FE
#$C3#$BF // #$FF
#$C4#$84, // #$A1
#$C4#$85, // #$A2
#$C5#$81, // #$A3
#$E2#$82#$AC, // #$A4
#$E2#$80#$9E, // #$A5
#$C5#$A0, // #$A6
#$C2#$A7, // #$A7
#$C5#$A1, // #$A8
#$C2#$A9, // #$A9
#$C8#$98, // #$AA
#$C2#$AB, // #$AB
#$C5#$B9, // #$AC
#$C2#$AD, // #$AD
#$C5#$BA, // #$AE
#$C5#$BB, // #$AF
#$C2#$B0, // #$B0
#$C2#$B1, // #$B1
#$C4#$8C, // #$B2
#$C5#$82, // #$B3
#$C5#$BD, // #$B4
#$E2#$80#$9D, // #$B5
#$C2#$B6, // #$B6
#$C2#$B7, // #$B7
#$C5#$BE, // #$B8
#$C4#$8D, // #$B9
#$C8#$99, // #$BA
#$C2#$BB, // #$BB
#$C5#$92, // #$BC
#$C5#$93, // #$BD
#$C5#$B8, // #$BE
#$C5#$BC, // #$BF
#$C3#$80, // #$C0
#$C3#$81, // #$C1
#$C3#$82, // #$C2
#$C4#$82, // #$C3
#$C3#$84, // #$C4
#$C4#$86, // #$C5
#$C3#$86, // #$C6
#$C3#$87, // #$C7
#$C3#$88, // #$C8
#$C3#$89, // #$C9
#$C3#$8A, // #$CA
#$C3#$8B, // #$CB
#$C3#$8C, // #$CC
#$C3#$8D, // #$CD
#$C3#$8E, // #$CE
#$C3#$8F, // #$CF
#$C4#$90, // #$D0
#$C5#$83, // #$D1
#$C3#$92, // #$D2
#$C3#$93, // #$D3
#$C3#$94, // #$D4
#$C5#$90, // #$D5
#$C3#$96, // #$D6
#$C5#$9A, // #$D7
#$C5#$B0, // #$D8
#$C3#$99, // #$D9
#$C3#$9A, // #$DA
#$C3#$9B, // #$DB
#$C3#$9C, // #$DC
#$C4#$98, // #$DD
#$C8#$9A, // #$DE
#$C3#$9F, // #$DF
#$C3#$A0, // #$E0
#$C3#$A1, // #$E1
#$C3#$A2, // #$E2
#$C4#$83, // #$E3
#$C3#$A4, // #$E4
#$C4#$87, // #$E5
#$C3#$A6, // #$E6
#$C3#$A7, // #$E7
#$C3#$A8, // #$E8
#$C3#$A9, // #$E9
#$C3#$AA, // #$EA
#$C3#$AB, // #$EB
#$C3#$AC, // #$EC
#$C3#$AD, // #$ED
#$C3#$AE, // #$EE
#$C3#$AF, // #$EF
#$C4#$91, // #$F0
#$C5#$84, // #$F1
#$C3#$B2, // #$F2
#$C3#$B3, // #$F3
#$C3#$B4, // #$F4
#$C5#$91, // #$F5
#$C3#$B6, // #$F6
#$C5#$9B, // #$F7
#$C5#$B1, // #$F8
#$C3#$B9, // #$F9
#$C3#$BA, // #$FA
#$C3#$BB, // #$FB
#$C3#$BC, // #$FC
#$C4#$99, // #$FD
#$C8#$9B, // #$FE
#$C3#$BF // #$FF
);
ArrayISO_8859_2ToUTF8: TCharToUTF8Table = (
@ -1569,6 +1569,264 @@ const
#203#153 // #255
);
ArrayISO_8859_5ToUTF8: TCharToUTF8Table = (
#0, // #0
#1, // #1
#2, // #2
#3, // #3
#4, // #4
#5, // #5
#6, // #6
#7, // #7
#8, // #8
#9, // #9
#10, // #10
#11, // #11
#12, // #12
#13, // #13
#14, // #14
#15, // #15
#16, // #16
#17, // #17
#18, // #18
#19, // #19
#20, // #20
#21, // #21
#22, // #22
#23, // #23
#24, // #24
#25, // #25
#26, // #26
#27, // #27
#28, // #28
#29, // #29
#30, // #30
#31, // #31
' ', // ' '
'!', // '!'
'"', // '"'
'#', // '#'
'#$', // '#$'
'%', // '%'
'&', // '&'
'''', // ''''
'(', // '('
')', // ')'
'*', // '*'
'+', // '+'
',', // ','
'-', // '-'
'.', // '.'
'/', // '/'
'0', // '0'
'1', // '1'
'2', // '2'
'3', // '3'
'4', // '4'
'5', // '5'
'6', // '6'
'7', // '7'
'8', // '8'
'9', // '9'
':', // ':'
';', // ';'
'<', // '<'
'=', // '='
'>', // '>'
'?', // '?'
'@', // '@'
'A', // 'A'
'B', // 'B'
'C', // 'C'
'D', // 'D'
'E', // 'E'
'F', // 'F'
'G', // 'G'
'H', // 'H'
'I', // 'I'
'J', // 'J'
'K', // 'K'
'L', // 'L'
'M', // 'M'
'N', // 'N'
'O', // 'O'
'P', // 'P'
'Q', // 'Q'
'R', // 'R'
'S', // 'S'
'T', // 'T'
'U', // 'U'
'V', // 'V'
'W', // 'W'
'X', // 'X'
'Y', // 'Y'
'Z', // 'Z'
'[', // '['
'\', // '\'
']', // ']'
'^', // '^'
'_', // '_'
'`', // '`'
'a', // 'a'
'b', // 'b'
'c', // 'c'
'd', // 'd'
'e', // 'e'
'f', // 'f'
'g', // 'g'
'h', // 'h'
'i', // 'i'
'j', // 'j'
'k', // 'k'
'l', // 'l'
'm', // 'm'
'n', // 'n'
'o', // 'o'
'p', // 'p'
'q', // 'q'
'r', // 'r'
's', // 's'
't', // 't'
'u', // 'u'
'v', // 'v'
'w', // 'w'
'x', // 'x'
'y', // 'y'
'z', // 'z'
'{', // '{'
'|', // '|'
'}', // '}'
'~', // '~'
#127, // #127
#194#128, // #128
#194#129, // #129
#194#130, // #130
#194#131, // #131
#194#132, // #132
#194#133, // #133
#194#134, // #134
#194#135, // #135
#194#136, // #136
#194#137, // #137
#194#138, // #138
#194#139, // #139
#194#140, // #140
#194#141, // #141
#194#142, // #142
#194#143, // #143
#194#144, // #144
#194#145, // #145
#194#146, // #146
#194#147, // #147
#194#148, // #148
#194#149, // #149
#194#150, // #150
#194#151, // #151
#194#152, // #152
#194#153, // #153
#194#154, // #154
#194#155, // #155
#194#156, // #156
#194#157, // #157
#194#158, // #158
#194#159, // #159
#$C2#$A0, // $A0
#$D0#$81, // $A1
#$D0#$82, // $A2
#$D0#$83, // $A3
#$D0#$84, // $A4
#$D0#$85, // $A5
#$D0#$86, // $A6
#$D0#$87, // $A7
#$D0#$88, // $A8
#$D0#$89, // $A9
#$D0#$8A, // $AA
#$D0#$8B, // $AB
#$D0#$8C, // $AC
#$C2#$AD, // $AD
#$D0#$8E, // $AE
#$D0#$8F, // $AF
#$D0#$90, // $B0
#$D0#$91, // $B1
#$D0#$92, // $B2
#$D0#$93, // $B3
#$D0#$94, // $B4
#$D0#$95, // $B5
#$D0#$96, // $B6
#$D0#$97, // $B7
#$D0#$98, // $B8
#$D0#$99, // $B9
#$D0#$9A, // $BA
#$D0#$9B, // $BB
#$D0#$9C, // $BC
#$D0#$9D, // $BD
#$D0#$9E, // $BE
#$D0#$9F, // $BF
#$D0#$A0, // $C0
#$D0#$A1, // $C1
#$D0#$A2, // $C2
#$D0#$A3, // $C3
#$D0#$A4, // $C4
#$D0#$A5, // $C5
#$D0#$A6, // $C6
#$D0#$A7, // $C7
#$D0#$A8, // $C8
#$D0#$A9, // $C9
#$D0#$AA, // $CA
#$D0#$AB, // $CB
#$D0#$AC, // $CC
#$D0#$AD, // $CD
#$D0#$AE, // $CE
#$D0#$AF, // $CF
#$D0#$B0, // $D0
#$D0#$B1, // $D1
#$D0#$B2, // $D2
#$D0#$B3, // $D3
#$D0#$B4, // $D4
#$D0#$B5, // $D5
#$D0#$B6, // $D6
#$D0#$B7, // $D7
#$D0#$B8, // $D8
#$D0#$B9, // $D9
#$D0#$BA, // $DA
#$D0#$BB, // $DB
#$D0#$BC, // $DC
#$D0#$BD, // $DD
#$D0#$BE, // $DE
#$D0#$BF, // $DF
#$D1#$80, // $E0
#$D1#$81, // $E1
#$D1#$82, // $E2
#$D1#$83, // $E3
#$D1#$84, // $E4
#$D1#$85, // $E5
#$D1#$86, // $E6
#$D1#$87, // $E7
#$D1#$88, // $E8
#$D1#$89, // $E9
#$D1#$8A, // $EA
#$D1#$8B, // $EB
#$D1#$8C, // $EC
#$D1#$8D, // $ED
#$D1#$8E, // $EE
#$D1#$8F, // $EF
#$E2#$84#$96, // $F0
#$D1#$91, // $F1
#$D1#$92, // $F2
#$D1#$93, // $F3
#$D1#$94, // $F4
#$D1#$95, // $F5
#$D1#$96, // $F6
#$D1#$97, // $F7
#$D1#$98, // $F8
#$D1#$99, // $F9
#$D1#$9A, // $FA
#$D1#$9B, // $FB
#$D1#$9C, // $FC
#$C2#$A7, // $FD
#$D1#$9E, // $FE
#$D1#$9F // $FF
);
ArrayCP1250ToUTF8: TCharToUTF8Table = (
#0, // #0

View File

@ -79,6 +79,7 @@ const
EncodingCPIso1 = 'iso88591';
EncodingCPIso2 = 'iso88592';
EncodingCPIso5 = 'iso88595';
EncodingCPIso9 = 'iso88599';
EncodingCPIso14 = 'iso885914';
EncodingCPIso15 = 'iso885915';
@ -127,6 +128,7 @@ var
function UTF8BOMToUTF8(const s: string): string; // UTF8 with BOM
function ISO_8859_1ToUTF8(const s: string): string; // central europe
function ISO_8859_2ToUTF8(const s: string): string; // eastern europe
function ISO_8859_5ToUTF8(const s: string): string; // Cyrillic
function ISO_8859_9ToUTF8(const s: string): string; // Turkish
function ISO_8859_14ToUTF8(const s: string): string;
function ISO_8859_15ToUTF8(const s: string): string; // Western European languages
@ -157,6 +159,7 @@ function UTF8ToUTF8BOM(const s: string): string; // UTF8 with BOM
function UTF8ToISO_8859_1(const s: string; SetTargetCodePage: boolean = false): RawByteString; // central europe
function UTF8ToISO_8859_2(const s: string; SetTargetCodePage: boolean = false): RawByteString; // eastern europe
function UTF8ToISO_8859_5(const s: string; SetTargetCodePage: boolean = false): RawByteString; // Cyrillic
function UTF8ToISO_8859_9(const s: string; SetTargetCodePage: boolean = false): RawByteString; // Turkish
function UTF8ToISO_8859_14(const s: string; SetTargetCodePage: boolean = false): RawByteString;
function UTF8ToISO_8859_15(const s: string; SetTargetCodePage: boolean = false): RawByteString; // Western European languages
@ -375,6 +378,11 @@ begin
Result:=SingleByteToUTF8(s,ArrayISO_8859_2ToUTF8);
end;
function ISO_8859_5ToUTF8(const s: string): string;
begin
Result:=SingleByteToUTF8(s,ArrayISO_8859_5ToUTF8);
end;
function ISO_8859_9ToUTF8(const s: string): string;
begin
Result:=SingleByteToUTF8(s,ArrayISO_8859_9ToUTF8);
@ -1338,6 +1346,21 @@ begin
end;
end;
function UnicodeToISO_8859_5(Unicode: cardinal): integer;
begin
case Unicode of
0..$A6,
$A8..$FF: Result:= Unicode;
$401..$40C,
$40E..$44F: Result:= Unicode-($401-$A1);
$2116: Result:= $F0;
$451..$45C,
$45E..$45F: Result:= Unicode-($451-$F1);
$A7: Result:= $FD;
else Result:= -1;
end;
end;
function UnicodeToMacintosh(Unicode: cardinal): integer;
begin
case Unicode of
@ -2095,6 +2118,11 @@ begin
InternalUTF8ToCP(s,28592,SetTargetCodePage,{$IfDef UseSystemCPConv}nil{$else}@UnicodeToISO_8859_2{$endif},Result);
end;
function UTF8ToISO_8859_5(const s: string; SetTargetCodePage: boolean): RawByteString;
begin
InternalUTF8ToCP(s,28595,SetTargetCodePage,{$IfDef UseSystemCPConv}nil{$else}@UnicodeToISO_8859_5{$endif},Result);
end;
function UTF8ToISO_8859_9(const s: string; SetTargetCodePage: boolean): RawByteString;
begin
InternalUTF8ToCP(s,28599,SetTargetCodePage,{$IfDef UseSystemCPConv}nil{$else}@UnicodeToISO_8859_9{$endif},Result);
@ -2367,6 +2395,7 @@ begin
List.Add('ISO-8859-1');
List.Add('ISO-8859-2');
List.Add('ISO-8859-5');
List.Add('ISO-8859-9');
List.Add('ISO-8859-14');
List.Add('ISO-8859-15');
@ -2524,6 +2553,7 @@ begin
if ATo=EncodingUTF8BOM then begin Result:=UTF8ToUTF8BOM(s); exit; end;
if ATo=EncodingCPIso1 then begin Result:=UTF8ToISO_8859_1(s,SetTargetCodePage); exit; end;
if ATo=EncodingCPIso2 then begin Result:=UTF8ToISO_8859_2(s,SetTargetCodePage); exit; end;
if ATo=EncodingCPIso5 then begin Result:=UTF8ToISO_8859_5(s,SetTargetCodePage); exit; end;
if ATo=EncodingCPIso9 then begin Result:=UTF8ToISO_8859_9(s,SetTargetCodePage); exit; end;
if ATo=EncodingCPIso14 then begin Result:=UTF8ToISO_8859_14(s,SetTargetCodePage); exit; end;
if ATo=EncodingCPIso15 then begin Result:=UTF8ToISO_8859_15(s,SetTargetCodePage); exit; end;
@ -2574,6 +2604,7 @@ begin
if AFrom=EncodingUTF8BOM then begin Result:=UTF8BOMToUTF8(s); exit; end;
if AFrom=EncodingCPIso1 then begin Result:=ISO_8859_1ToUTF8(s); exit; end;
if AFrom=EncodingCPIso2 then begin Result:=ISO_8859_2ToUTF8(s); exit; end;
if AFrom=EncodingCPIso5 then begin Result:=ISO_8859_5ToUTF8(s); exit; end;
if AFrom=EncodingCPIso9 then begin Result:=ISO_8859_9ToUTF8(s); exit; end;
if AFrom=EncodingCPIso14 then begin Result:=ISO_8859_14ToUTF8(s); exit; end;
if AFrom=EncodingCPIso15 then begin Result:=ISO_8859_15ToUTF8(s); exit; end;