From 494fa2abc801e439f49c4c40cd712936c8724212 Mon Sep 17 00:00:00 2001 From: Juha Date: Tue, 7 Jun 2022 12:46:57 +0300 Subject: [PATCH] LazUtils: Add encoding ISO-8859-14 to LConvEncoding. Issue #39784, patch by Alexey Torgashin. --- components/lazutils/commoncodepages.inc | 259 ++++++++++++++++++++++++ components/lazutils/lconvencoding.pas | 65 ++++++ 2 files changed, 324 insertions(+) diff --git a/components/lazutils/commoncodepages.inc b/components/lazutils/commoncodepages.inc index 9224ec01fd..5cbd6ba628 100644 --- a/components/lazutils/commoncodepages.inc +++ b/components/lazutils/commoncodepages.inc @@ -533,6 +533,265 @@ const #195#191 // #255 ); + ArrayISO_8859_14ToUTF8: 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 + #$C2#$80, // #128 + #$C2#$81, // #129 + #$C2#$82, // #130 + #$C2#$83, // #131 + #$C2#$84, // #132 + #$C2#$85, // #133 + #$C2#$86, // #134 + #$C2#$87, // #135 + #$C2#$88, // #136 + #$C2#$89, // #137 + #$C2#$8A, // #138 + #$C2#$8B, // #139 + #$C2#$8C, // #140 + #$C2#$8D, // #141 + #$C2#$8E, // #142 + #$C2#$8F, // #143 + #$C2#$90, // #144 + #$C2#$91, // #145 + #$C2#$92, // #146 + #$C2#$93, // #147 + #$C2#$94, // #148 + #$C2#$95, // #149 + #$C2#$96, // #150 + #$C2#$97, // #151 + #$C2#$98, // #152 + #$C2#$99, // #153 + #$C2#$9A, // #154 + #$C2#$9B, // #155 + #$C2#$9C, // #156 + #$C2#$9D, // #157 + #$C2#$9E, // #158 + #$C2#$9F, // #159 + #$C2#$A0, // #160 + #$E1#$B8#$82, // #161 + #$E1#$B8#$83, // #162 + #$C2#$A3, // #163 + #$C4#$8A, // #164 + #$C4#$8B, // #165 + #$E1#$B8#$8A, // #166 + #$C2#$A7, // #167 + #$E1#$BA#$80, // #168 + #$C2#$A9, // #169 + #$E1#$BA#$82, // #170 + #$E1#$B8#$8B, // #171 + #$E1#$BB#$B2, // #172 + #$C2#$AD, // #173 + #$C2#$AE, // #174 + #$C5#$B8, // #175 + #$E1#$B8#$9E, // #176 + #$E1#$B8#$9F, // #177 + #$C4#$A0, // #178 + #$C4#$A1, // #179 + #$E1#$B9#$80, // #180 + #$E1#$B9#$81, // #181 + #$C2#$B6, // #182 + #$E1#$B9#$96, // #183 + #$E1#$BA#$81, // #184 + #$E1#$B9#$97, // #185 + #$E1#$BA#$83, // #186 + #$E1#$B9#$A0, // #187 + #$E1#$BB#$B3, // #188 + #$E1#$BA#$84, // #189 + #$E1#$BA#$85, // #190 + #$E1#$B9#$A1, // #191 + #$C3#$80, // #192 + #$C3#$81, // #193 + #$C3#$82, // #194 + #$C3#$83, // #195 + #$C3#$84, // #196 + #$C3#$85, // #197 + #$C3#$86, // #198 + #$C3#$87, // #199 + #$C3#$88, // #200 + #$C3#$89, // #201 + #$C3#$8A, // #202 + #$C3#$8B, // #203 + #$C3#$8C, // #204 + #$C3#$8D, // #205 + #$C3#$8E, // #206 + #$C3#$8F, // #207 + #$C5#$B4, // #208 + #$C3#$91, // #209 + #$C3#$92, // #210 + #$C3#$93, // #211 + #$C3#$94, // #212 + #$C3#$95, // #213 + #$C3#$96, // #214 + #$E1#$B9#$AA, // #215 + #$C3#$98, // #216 + #$C3#$99, // #217 + #$C3#$9A, // #218 + #$C3#$9B, // #219 + #$C3#$9C, // #220 + #$C3#$9D, // #221 + #$C5#$B6, // #222 + #$C3#$9F, // #223 + #$C3#$A0, // #224 + #$C3#$A1, // #225 + #$C3#$A2, // #226 + #$C3#$A3, // #227 + #$C3#$A4, // #228 + #$C3#$A5, // #229 + #$C3#$A6, // #230 + #$C3#$A7, // #231 + #$C3#$A8, // #232 + #$C3#$A9, // #233 + #$C3#$AA, // #234 + #$C3#$AB, // #235 + #$C3#$AC, // #236 + #$C3#$AD, // #237 + #$C3#$AE, // #238 + #$C3#$AF, // #239 + #$C5#$B5, // #240 + #$C3#$B1, // #241 + #$C3#$B2, // #242 + #$C3#$B3, // #243 + #$C3#$B4, // #244 + #$C3#$B5, // #245 + #$C3#$B6, // #246 + #$E1#$B9#$AB, // #247 + #$C3#$B8, // #248 + #$C3#$B9, // #249 + #$C3#$BA, // #250 + #$C3#$BB, // #251 + #$C3#$BC, // #252 + #$C3#$BD, // #253 + #$C5#$B7, // #254 + #$C3#$BF // #255 + ); + ArrayISO_8859_15ToUTF8: TCharToUTF8Table = ( #0, // #0 #1, // #1 diff --git a/components/lazutils/lconvencoding.pas b/components/lazutils/lconvencoding.pas index 6338f9a5e8..2329399b2a 100644 --- a/components/lazutils/lconvencoding.pas +++ b/components/lazutils/lconvencoding.pas @@ -80,6 +80,7 @@ const EncodingCPIso1 = 'iso88591'; EncodingCPIso2 = 'iso88592'; EncodingCPIso9 = 'iso88599'; + EncodingCPIso14 = 'iso885914'; EncodingCPIso15 = 'iso885915'; //signatures in ansi @@ -349,6 +350,11 @@ begin Result:=SingleByteToUTF8(s,ArrayISO_8859_1ToUTF8); end; +function ISO_8859_14ToUTF8(const s: string): string; +begin + Result:=SingleByteToUTF8(s,ArrayISO_8859_14ToUTF8); +end; + function ISO_8859_15ToUTF8(const s: string): string; begin Result:=SingleByteToUTF8(s,ArrayISO_8859_15ToUTF8); @@ -1113,6 +1119,58 @@ begin end; end; +function UnicodeToISO_8859_14(Unicode: cardinal): integer; +begin + case Unicode of + 0..$A0: Result:=Unicode; + $A3, + $A7, + $A9, + $AD, + $AE, + $B6: Result:= Unicode; + $1E02: Result:= $A1; + $1E03: Result:= $A2; + $10A: Result:= $A4; + $10B: Result:= $A5; + $1E0A: Result:= $A6; + $1E80: Result:= $A8; + $1E82: Result:= $AA; + $1E0B: Result:= $AB; + $1EF2: Result:= $AC; + $178: Result:= $AF; + $1E1E: Result:= $B0; + $1E1F: Result:= $B1; + $120: Result:= $B2; + $121: Result:= $B3; + $1E40: Result:= $B4; + $1E41: Result:= $B5; + $1E56: Result:= $B7; + $1E81: Result:= $B8; + $1E57: Result:= $B9; + $1E83: Result:= $BA; + $1E60: Result:= $BB; + $1EF3: Result:= $BC; + $1E84: Result:= $BD; + $1E85: Result:= $BE; + $1E61: Result:= $BF; + $C0..$CF: Result:= Unicode; + $174: Result:= $D0; + $D1..$D6: Result:= Unicode; + $1E6A: Result:= $D7; + $D8..$DD: Result:= Unicode; + $176: Result:= $DE; + $DF..$EF: Result:= Unicode; + $175: Result:= $F0; + $F1..$F6: Result:= Unicode; + $1E6B: Result:= $F7; + $F8..$FD: Result:= Unicode; + $177: Result:= $FE; + $FF: Result:= $FF; + else Result:=-1; + end; +end; + function UnicodeToISO_8859_15(Unicode: cardinal): integer; begin case Unicode of @@ -1984,6 +2042,11 @@ begin InternalUTF8ToCP(s,28599,SetTargetCodePage,{$IfDef UseSystemCPConv}nil{$else}@UnicodeToISO_8859_9{$endif},Result); end; +function UTF8ToISO_8859_14(const s: string; SetTargetCodePage: boolean): RawByteString; +begin + InternalUTF8ToCP(s,28604,SetTargetCodePage,{$IfDef UseSystemCPConv}nil{$else}@UnicodeToISO_8859_14{$endif},Result); +end; + function UTF8ToISO_8859_15(const s: string; SetTargetCodePage: boolean): RawByteString; begin InternalUTF8ToCP(s,28605,SetTargetCodePage,{$IfDef UseSystemCPConv}nil{$else}@UnicodeToISO_8859_15{$endif},Result); @@ -2394,6 +2457,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=EncodingCPIso14 then begin Result:=UTF8ToISO_8859_14(s,SetTargetCodePage); exit; end; if ATo=EncodingCPIso15 then begin Result:=UTF8ToISO_8859_15(s,SetTargetCodePage); exit; end; if ATo=EncodingCPIso2 then begin Result:=UTF8ToISO_8859_2(s,SetTargetCodePage); exit; end; if ATo=EncodingCPIso9 then begin Result:=UTF8ToISO_8859_9(s,SetTargetCodePage); exit; end; @@ -2442,6 +2506,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=EncodingCPIso14 then begin Result:=ISO_8859_14ToUTF8(s); exit; end; if AFrom=EncodingCPIso15 then begin Result:=ISO_8859_15ToUTF8(s); exit; end; if AFrom=EncodingCPIso2 then begin Result:=ISO_8859_2ToUTF8(s); exit; end; if AFrom=EncodingCPIso9 then begin Result:=ISO_8859_9ToUTF8(s); exit; end;