]>
Commit | Line | Data |
---|---|---|
c4638f66 SP |
1 | # git-gui encoding support |
2 | # Copyright (C) 2005 Paul Mackerras <paulus@samba.org> | |
3 | # (Copied from gitk, commit fd8ccbec4f0161) | |
4 | ||
5 | # This list of encoding names and aliases is distilled from | |
6 | # http://www.iana.org/assignments/character-sets. | |
7 | # Not all of them are supported by Tcl. | |
8 | set encoding_aliases { | |
9 | { ANSI_X3.4-1968 iso-ir-6 ANSI_X3.4-1986 ISO_646.irv:1991 ASCII | |
10 | ISO646-US US-ASCII us IBM367 cp367 csASCII } | |
11 | { ISO-10646-UTF-1 csISO10646UTF1 } | |
12 | { ISO_646.basic:1983 ref csISO646basic1983 } | |
13 | { INVARIANT csINVARIANT } | |
14 | { ISO_646.irv:1983 iso-ir-2 irv csISO2IntlRefVersion } | |
15 | { BS_4730 iso-ir-4 ISO646-GB gb uk csISO4UnitedKingdom } | |
16 | { NATS-SEFI iso-ir-8-1 csNATSSEFI } | |
17 | { NATS-SEFI-ADD iso-ir-8-2 csNATSSEFIADD } | |
18 | { NATS-DANO iso-ir-9-1 csNATSDANO } | |
19 | { NATS-DANO-ADD iso-ir-9-2 csNATSDANOADD } | |
20 | { SEN_850200_B iso-ir-10 FI ISO646-FI ISO646-SE se csISO10Swedish } | |
21 | { SEN_850200_C iso-ir-11 ISO646-SE2 se2 csISO11SwedishForNames } | |
22 | { KS_C_5601-1987 iso-ir-149 KS_C_5601-1989 KSC_5601 korean csKSC56011987 } | |
23 | { ISO-2022-KR csISO2022KR } | |
24 | { EUC-KR csEUCKR } | |
25 | { ISO-2022-JP csISO2022JP } | |
26 | { ISO-2022-JP-2 csISO2022JP2 } | |
27 | { JIS_C6220-1969-jp JIS_C6220-1969 iso-ir-13 katakana x0201-7 | |
28 | csISO13JISC6220jp } | |
29 | { JIS_C6220-1969-ro iso-ir-14 jp ISO646-JP csISO14JISC6220ro } | |
30 | { IT iso-ir-15 ISO646-IT csISO15Italian } | |
31 | { PT iso-ir-16 ISO646-PT csISO16Portuguese } | |
32 | { ES iso-ir-17 ISO646-ES csISO17Spanish } | |
33 | { greek7-old iso-ir-18 csISO18Greek7Old } | |
34 | { latin-greek iso-ir-19 csISO19LatinGreek } | |
35 | { DIN_66003 iso-ir-21 de ISO646-DE csISO21German } | |
36 | { NF_Z_62-010_(1973) iso-ir-25 ISO646-FR1 csISO25French } | |
37 | { Latin-greek-1 iso-ir-27 csISO27LatinGreek1 } | |
38 | { ISO_5427 iso-ir-37 csISO5427Cyrillic } | |
39 | { JIS_C6226-1978 iso-ir-42 csISO42JISC62261978 } | |
40 | { BS_viewdata iso-ir-47 csISO47BSViewdata } | |
41 | { INIS iso-ir-49 csISO49INIS } | |
42 | { INIS-8 iso-ir-50 csISO50INIS8 } | |
43 | { INIS-cyrillic iso-ir-51 csISO51INISCyrillic } | |
44 | { ISO_5427:1981 iso-ir-54 ISO5427Cyrillic1981 } | |
45 | { ISO_5428:1980 iso-ir-55 csISO5428Greek } | |
46 | { GB_1988-80 iso-ir-57 cn ISO646-CN csISO57GB1988 } | |
47 | { GB_2312-80 iso-ir-58 chinese csISO58GB231280 } | |
48 | { NS_4551-1 iso-ir-60 ISO646-NO no csISO60DanishNorwegian | |
49 | csISO60Norwegian1 } | |
50 | { NS_4551-2 ISO646-NO2 iso-ir-61 no2 csISO61Norwegian2 } | |
51 | { NF_Z_62-010 iso-ir-69 ISO646-FR fr csISO69French } | |
52 | { videotex-suppl iso-ir-70 csISO70VideotexSupp1 } | |
53 | { PT2 iso-ir-84 ISO646-PT2 csISO84Portuguese2 } | |
54 | { ES2 iso-ir-85 ISO646-ES2 csISO85Spanish2 } | |
55 | { MSZ_7795.3 iso-ir-86 ISO646-HU hu csISO86Hungarian } | |
56 | { JIS_C6226-1983 iso-ir-87 x0208 JIS_X0208-1983 csISO87JISX0208 } | |
57 | { greek7 iso-ir-88 csISO88Greek7 } | |
58 | { ASMO_449 ISO_9036 arabic7 iso-ir-89 csISO89ASMO449 } | |
59 | { iso-ir-90 csISO90 } | |
60 | { JIS_C6229-1984-a iso-ir-91 jp-ocr-a csISO91JISC62291984a } | |
61 | { JIS_C6229-1984-b iso-ir-92 ISO646-JP-OCR-B jp-ocr-b | |
62 | csISO92JISC62991984b } | |
63 | { JIS_C6229-1984-b-add iso-ir-93 jp-ocr-b-add csISO93JIS62291984badd } | |
64 | { JIS_C6229-1984-hand iso-ir-94 jp-ocr-hand csISO94JIS62291984hand } | |
65 | { JIS_C6229-1984-hand-add iso-ir-95 jp-ocr-hand-add | |
66 | csISO95JIS62291984handadd } | |
67 | { JIS_C6229-1984-kana iso-ir-96 csISO96JISC62291984kana } | |
68 | { ISO_2033-1983 iso-ir-98 e13b csISO2033 } | |
69 | { ANSI_X3.110-1983 iso-ir-99 CSA_T500-1983 NAPLPS csISO99NAPLPS } | |
70 | { ISO_8859-1:1987 iso-ir-100 ISO_8859-1 ISO-8859-1 latin1 l1 IBM819 | |
71 | CP819 csISOLatin1 } | |
72 | { ISO_8859-2:1987 iso-ir-101 ISO_8859-2 ISO-8859-2 latin2 l2 csISOLatin2 } | |
73 | { T.61-7bit iso-ir-102 csISO102T617bit } | |
74 | { T.61-8bit T.61 iso-ir-103 csISO103T618bit } | |
75 | { ISO_8859-3:1988 iso-ir-109 ISO_8859-3 ISO-8859-3 latin3 l3 csISOLatin3 } | |
76 | { ISO_8859-4:1988 iso-ir-110 ISO_8859-4 ISO-8859-4 latin4 l4 csISOLatin4 } | |
77 | { ECMA-cyrillic iso-ir-111 KOI8-E csISO111ECMACyrillic } | |
78 | { CSA_Z243.4-1985-1 iso-ir-121 ISO646-CA csa7-1 ca csISO121Canadian1 } | |
79 | { CSA_Z243.4-1985-2 iso-ir-122 ISO646-CA2 csa7-2 csISO122Canadian2 } | |
80 | { CSA_Z243.4-1985-gr iso-ir-123 csISO123CSAZ24341985gr } | |
81 | { ISO_8859-6:1987 iso-ir-127 ISO_8859-6 ISO-8859-6 ECMA-114 ASMO-708 | |
82 | arabic csISOLatinArabic } | |
83 | { ISO_8859-6-E csISO88596E ISO-8859-6-E } | |
84 | { ISO_8859-6-I csISO88596I ISO-8859-6-I } | |
85 | { ISO_8859-7:1987 iso-ir-126 ISO_8859-7 ISO-8859-7 ELOT_928 ECMA-118 | |
86 | greek greek8 csISOLatinGreek } | |
87 | { T.101-G2 iso-ir-128 csISO128T101G2 } | |
88 | { ISO_8859-8:1988 iso-ir-138 ISO_8859-8 ISO-8859-8 hebrew | |
89 | csISOLatinHebrew } | |
90 | { ISO_8859-8-E csISO88598E ISO-8859-8-E } | |
91 | { ISO_8859-8-I csISO88598I ISO-8859-8-I } | |
92 | { CSN_369103 iso-ir-139 csISO139CSN369103 } | |
93 | { JUS_I.B1.002 iso-ir-141 ISO646-YU js yu csISO141JUSIB1002 } | |
94 | { ISO_6937-2-add iso-ir-142 csISOTextComm } | |
95 | { IEC_P27-1 iso-ir-143 csISO143IECP271 } | |
96 | { ISO_8859-5:1988 iso-ir-144 ISO_8859-5 ISO-8859-5 cyrillic | |
97 | csISOLatinCyrillic } | |
98 | { JUS_I.B1.003-serb iso-ir-146 serbian csISO146Serbian } | |
99 | { JUS_I.B1.003-mac macedonian iso-ir-147 csISO147Macedonian } | |
100 | { ISO_8859-9:1989 iso-ir-148 ISO_8859-9 ISO-8859-9 latin5 l5 csISOLatin5 } | |
101 | { greek-ccitt iso-ir-150 csISO150 csISO150GreekCCITT } | |
102 | { NC_NC00-10:81 cuba iso-ir-151 ISO646-CU csISO151Cuba } | |
103 | { ISO_6937-2-25 iso-ir-152 csISO6937Add } | |
104 | { GOST_19768-74 ST_SEV_358-88 iso-ir-153 csISO153GOST1976874 } | |
105 | { ISO_8859-supp iso-ir-154 latin1-2-5 csISO8859Supp } | |
106 | { ISO_10367-box iso-ir-155 csISO10367Box } | |
107 | { ISO-8859-10 iso-ir-157 l6 ISO_8859-10:1992 csISOLatin6 latin6 } | |
108 | { latin-lap lap iso-ir-158 csISO158Lap } | |
109 | { JIS_X0212-1990 x0212 iso-ir-159 csISO159JISX02121990 } | |
110 | { DS_2089 DS2089 ISO646-DK dk csISO646Danish } | |
111 | { us-dk csUSDK } | |
112 | { dk-us csDKUS } | |
113 | { JIS_X0201 X0201 csHalfWidthKatakana } | |
114 | { KSC5636 ISO646-KR csKSC5636 } | |
115 | { ISO-10646-UCS-2 csUnicode } | |
116 | { ISO-10646-UCS-4 csUCS4 } | |
117 | { DEC-MCS dec csDECMCS } | |
118 | { hp-roman8 roman8 r8 csHPRoman8 } | |
119 | { macintosh mac csMacintosh } | |
120 | { IBM037 cp037 ebcdic-cp-us ebcdic-cp-ca ebcdic-cp-wt ebcdic-cp-nl | |
121 | csIBM037 } | |
122 | { IBM038 EBCDIC-INT cp038 csIBM038 } | |
123 | { IBM273 CP273 csIBM273 } | |
124 | { IBM274 EBCDIC-BE CP274 csIBM274 } | |
125 | { IBM275 EBCDIC-BR cp275 csIBM275 } | |
126 | { IBM277 EBCDIC-CP-DK EBCDIC-CP-NO csIBM277 } | |
127 | { IBM278 CP278 ebcdic-cp-fi ebcdic-cp-se csIBM278 } | |
128 | { IBM280 CP280 ebcdic-cp-it csIBM280 } | |
129 | { IBM281 EBCDIC-JP-E cp281 csIBM281 } | |
130 | { IBM284 CP284 ebcdic-cp-es csIBM284 } | |
131 | { IBM285 CP285 ebcdic-cp-gb csIBM285 } | |
132 | { IBM290 cp290 EBCDIC-JP-kana csIBM290 } | |
133 | { IBM297 cp297 ebcdic-cp-fr csIBM297 } | |
134 | { IBM420 cp420 ebcdic-cp-ar1 csIBM420 } | |
135 | { IBM423 cp423 ebcdic-cp-gr csIBM423 } | |
136 | { IBM424 cp424 ebcdic-cp-he csIBM424 } | |
137 | { IBM437 cp437 437 csPC8CodePage437 } | |
138 | { IBM500 CP500 ebcdic-cp-be ebcdic-cp-ch csIBM500 } | |
139 | { IBM775 cp775 csPC775Baltic } | |
140 | { IBM850 cp850 850 csPC850Multilingual } | |
141 | { IBM851 cp851 851 csIBM851 } | |
142 | { IBM852 cp852 852 csPCp852 } | |
143 | { IBM855 cp855 855 csIBM855 } | |
144 | { IBM857 cp857 857 csIBM857 } | |
145 | { IBM860 cp860 860 csIBM860 } | |
146 | { IBM861 cp861 861 cp-is csIBM861 } | |
147 | { IBM862 cp862 862 csPC862LatinHebrew } | |
148 | { IBM863 cp863 863 csIBM863 } | |
149 | { IBM864 cp864 csIBM864 } | |
150 | { IBM865 cp865 865 csIBM865 } | |
151 | { IBM866 cp866 866 csIBM866 } | |
152 | { IBM868 CP868 cp-ar csIBM868 } | |
153 | { IBM869 cp869 869 cp-gr csIBM869 } | |
154 | { IBM870 CP870 ebcdic-cp-roece ebcdic-cp-yu csIBM870 } | |
155 | { IBM871 CP871 ebcdic-cp-is csIBM871 } | |
156 | { IBM880 cp880 EBCDIC-Cyrillic csIBM880 } | |
157 | { IBM891 cp891 csIBM891 } | |
158 | { IBM903 cp903 csIBM903 } | |
159 | { IBM904 cp904 904 csIBBM904 } | |
160 | { IBM905 CP905 ebcdic-cp-tr csIBM905 } | |
161 | { IBM918 CP918 ebcdic-cp-ar2 csIBM918 } | |
162 | { IBM1026 CP1026 csIBM1026 } | |
163 | { EBCDIC-AT-DE csIBMEBCDICATDE } | |
164 | { EBCDIC-AT-DE-A csEBCDICATDEA } | |
165 | { EBCDIC-CA-FR csEBCDICCAFR } | |
166 | { EBCDIC-DK-NO csEBCDICDKNO } | |
167 | { EBCDIC-DK-NO-A csEBCDICDKNOA } | |
168 | { EBCDIC-FI-SE csEBCDICFISE } | |
169 | { EBCDIC-FI-SE-A csEBCDICFISEA } | |
170 | { EBCDIC-FR csEBCDICFR } | |
171 | { EBCDIC-IT csEBCDICIT } | |
172 | { EBCDIC-PT csEBCDICPT } | |
173 | { EBCDIC-ES csEBCDICES } | |
174 | { EBCDIC-ES-A csEBCDICESA } | |
175 | { EBCDIC-ES-S csEBCDICESS } | |
176 | { EBCDIC-UK csEBCDICUK } | |
177 | { EBCDIC-US csEBCDICUS } | |
178 | { UNKNOWN-8BIT csUnknown8BiT } | |
179 | { MNEMONIC csMnemonic } | |
180 | { MNEM csMnem } | |
181 | { VISCII csVISCII } | |
182 | { VIQR csVIQR } | |
183 | { KOI8-R csKOI8R } | |
184 | { IBM00858 CCSID00858 CP00858 PC-Multilingual-850+euro } | |
185 | { IBM00924 CCSID00924 CP00924 ebcdic-Latin9--euro } | |
186 | { IBM01140 CCSID01140 CP01140 ebcdic-us-37+euro } | |
187 | { IBM01141 CCSID01141 CP01141 ebcdic-de-273+euro } | |
188 | { IBM01142 CCSID01142 CP01142 ebcdic-dk-277+euro ebcdic-no-277+euro } | |
189 | { IBM01143 CCSID01143 CP01143 ebcdic-fi-278+euro ebcdic-se-278+euro } | |
190 | { IBM01144 CCSID01144 CP01144 ebcdic-it-280+euro } | |
191 | { IBM01145 CCSID01145 CP01145 ebcdic-es-284+euro } | |
192 | { IBM01146 CCSID01146 CP01146 ebcdic-gb-285+euro } | |
193 | { IBM01147 CCSID01147 CP01147 ebcdic-fr-297+euro } | |
194 | { IBM01148 CCSID01148 CP01148 ebcdic-international-500+euro } | |
195 | { IBM01149 CCSID01149 CP01149 ebcdic-is-871+euro } | |
196 | { IBM1047 IBM-1047 } | |
197 | { PTCP154 csPTCP154 PT154 CP154 Cyrillic-Asian } | |
198 | { Amiga-1251 Ami1251 Amiga1251 Ami-1251 } | |
199 | { UNICODE-1-1 csUnicode11 } | |
200 | { CESU-8 csCESU-8 } | |
201 | { BOCU-1 csBOCU-1 } | |
202 | { UNICODE-1-1-UTF-7 csUnicode11UTF7 } | |
203 | { ISO-8859-14 iso-ir-199 ISO_8859-14:1998 ISO_8859-14 latin8 iso-celtic | |
204 | l8 } | |
205 | { ISO-8859-15 ISO_8859-15 Latin-9 } | |
206 | { ISO-8859-16 iso-ir-226 ISO_8859-16:2001 ISO_8859-16 latin10 l10 } | |
207 | { GBK CP936 MS936 windows-936 } | |
208 | { JIS_Encoding csJISEncoding } | |
50102c56 | 209 | { Shift_JIS MS_Kanji csShiftJIS ShiftJIS Shift-JIS } |
c4638f66 SP |
210 | { Extended_UNIX_Code_Packed_Format_for_Japanese csEUCPkdFmtJapanese |
211 | EUC-JP } | |
212 | { Extended_UNIX_Code_Fixed_Width_for_Japanese csEUCFixWidJapanese } | |
213 | { ISO-10646-UCS-Basic csUnicodeASCII } | |
214 | { ISO-10646-Unicode-Latin1 csUnicodeLatin1 ISO-10646 } | |
215 | { ISO-Unicode-IBM-1261 csUnicodeIBM1261 } | |
216 | { ISO-Unicode-IBM-1268 csUnicodeIBM1268 } | |
217 | { ISO-Unicode-IBM-1276 csUnicodeIBM1276 } | |
218 | { ISO-Unicode-IBM-1264 csUnicodeIBM1264 } | |
219 | { ISO-Unicode-IBM-1265 csUnicodeIBM1265 } | |
220 | { ISO-8859-1-Windows-3.0-Latin-1 csWindows30Latin1 } | |
221 | { ISO-8859-1-Windows-3.1-Latin-1 csWindows31Latin1 } | |
222 | { ISO-8859-2-Windows-Latin-2 csWindows31Latin2 } | |
223 | { ISO-8859-9-Windows-Latin-5 csWindows31Latin5 } | |
224 | { Adobe-Standard-Encoding csAdobeStandardEncoding } | |
225 | { Ventura-US csVenturaUS } | |
226 | { Ventura-International csVenturaInternational } | |
227 | { PC8-Danish-Norwegian csPC8DanishNorwegian } | |
228 | { PC8-Turkish csPC8Turkish } | |
229 | { IBM-Symbols csIBMSymbols } | |
230 | { IBM-Thai csIBMThai } | |
231 | { HP-Legal csHPLegal } | |
232 | { HP-Pi-font csHPPiFont } | |
233 | { HP-Math8 csHPMath8 } | |
234 | { Adobe-Symbol-Encoding csHPPSMath } | |
235 | { HP-DeskTop csHPDesktop } | |
236 | { Ventura-Math csVenturaMath } | |
237 | { Microsoft-Publishing csMicrosoftPublishing } | |
238 | { Windows-31J csWindows31J } | |
239 | { GB2312 csGB2312 } | |
240 | { Big5 csBig5 } | |
241 | } | |
242 | ||
50102c56 AG |
243 | set encoding_groups { |
244 | {"" "" | |
245 | {"Unicode" UTF-8} | |
246 | {"Western" ISO-8859-1}} | |
247 | {we "West European" | |
248 | {"Western" ISO-8859-15 CP-437 CP-850 MacRoman CP-1252 Windows-1252} | |
249 | {"Celtic" ISO-8859-14} | |
250 | {"Greek" ISO-8859-14 ISO-8859-7 CP-737 CP-869 MacGreek CP-1253 Windows-1253} | |
251 | {"Icelandic" MacIceland MacIcelandic CP-861} | |
252 | {"Nordic" ISO-8859-10 CP-865} | |
253 | {"Portuguese" CP-860} | |
254 | {"South European" ISO-8859-3}} | |
255 | {ee "East European" | |
256 | {"Baltic" CP-775 ISO-8859-4 ISO-8859-13 CP-1257 Windows-1257} | |
257 | {"Central European" CP-852 ISO-8859-2 MacCE CP-1250 Windows-1250} | |
258 | {"Croatian" MacCroatian} | |
259 | {"Cyrillic" CP-855 ISO-8859-5 ISO-IR-111 KOI8-R MacCyrillic CP-1251 Windows-1251} | |
260 | {"Russian" CP-866} | |
261 | {"Ukrainian" KOI8-U MacUkraine MacUkrainian} | |
262 | {"Romanian" ISO-8859-16 MacRomania MacRomanian}} | |
263 | {ea "East Asian" | |
264 | {"Generic" ISO-2022} | |
265 | {"Chinese Simplified" GB2312 GB1988 GB12345 GB2312-RAW GBK EUC-CN GB18030 HZ ISO-2022-CN} | |
266 | {"Chinese Traditional" Big5 Big5-HKSCS EUC-TW CP-950} | |
267 | {"Japanese" EUC-JP ISO-2022-JP Shift-JIS JIS-0212 JIS-0208 JIS-0201 CP-932 MacJapan} | |
268 | {"Korean" EUC-KR UHC JOHAB ISO-2022-KR CP-949 KSC5601}} | |
269 | {sa "SE & SW Asian" | |
270 | {"Armenian" ARMSCII-8} | |
271 | {"Georgian" GEOSTD8} | |
272 | {"Thai" TIS-620 ISO-8859-11 CP-874 Windows-874 MacThai} | |
273 | {"Turkish" CP-857 CP857 ISO-8859-9 MacTurkish CP-1254 Windows-1254} | |
274 | {"Vietnamese" TCVN VISCII VPS CP-1258 Windows-1258} | |
275 | {"Hindi" MacDevanagari} | |
276 | {"Gujarati" MacGujarati} | |
277 | {"Gurmukhi" MacGurmukhi}} | |
278 | {me "Middle Eastern" | |
279 | {"Arabic" ISO-8859-6 Windows-1256 CP-1256 CP-864 MacArabic} | |
280 | {"Farsi" MacFarsi} | |
281 | {"Hebrew" ISO-8859-8-I Windows-1255 CP-1255 ISO-8859-8 CP-862 MacHebrew}} | |
282 | {mi "Misc" | |
283 | {"7-bit" ASCII} | |
284 | {"16-bit" Unicode} | |
285 | {"Legacy" CP-863 EBCDIC} | |
286 | {"Symbol" Symbol Dingbats MacDingbats MacCentEuro}} | |
287 | } | |
288 | ||
a1c3feb7 AG |
289 | proc build_encoding_table {} { |
290 | global encoding_aliases encoding_lookup_table | |
291 | ||
292 | # Prepare the lookup list; cannot use lsort -nocase because | |
293 | # of compatibility issues with older Tcl (e.g. in msysgit) | |
294 | set names [list] | |
295 | foreach item [encoding names] { | |
296 | lappend names [list [string tolower $item] $item] | |
297 | } | |
298 | set names [lsort -ascii -index 0 $names] | |
299 | # neither can we use lsearch -index | |
300 | set lnames [list] | |
301 | foreach item $names { | |
302 | lappend lnames [lindex $item 0] | |
303 | } | |
304 | ||
305 | foreach grp $encoding_aliases { | |
306 | set target {} | |
307 | foreach item $grp { | |
308 | set i [lsearch -sorted -ascii $lnames \ | |
309 | [string tolower $item]] | |
310 | if {$i >= 0} { | |
311 | set target [lindex $names $i 1] | |
312 | break | |
313 | } | |
314 | } | |
315 | if {$target eq {}} continue | |
316 | foreach item $grp { | |
317 | set encoding_lookup_table([string tolower $item]) $target | |
318 | } | |
319 | } | |
320 | ||
321 | foreach item $names { | |
322 | set encoding_lookup_table([lindex $item 0]) [lindex $item 1] | |
323 | } | |
324 | } | |
325 | ||
c4638f66 | 326 | proc tcl_encoding {enc} { |
a1c3feb7 AG |
327 | global encoding_lookup_table |
328 | if {$enc eq {}} { | |
329 | return {} | |
c4638f66 | 330 | } |
a1c3feb7 AG |
331 | if {![info exists encoding_lookup_table]} { |
332 | build_encoding_table | |
333 | } | |
334 | set enc [string tolower $enc] | |
335 | if {![info exists encoding_lookup_table($enc)]} { | |
336 | # look for "isonnn" instead of "iso-nnn" or "iso_nnn" | |
337 | if {[regsub {^(iso|cp|ibm|jis)[-_]} $enc {\1} encx]} { | |
338 | set enc $encx | |
c4638f66 | 339 | } |
c4638f66 | 340 | } |
a1c3feb7 AG |
341 | if {[info exists encoding_lookup_table($enc)]} { |
342 | return $encoding_lookup_table($enc) | |
343 | } else { | |
344 | return {} | |
345 | } | |
c4638f66 | 346 | } |
72e6b002 | 347 | |
3fe01623 AG |
348 | proc force_path_encoding {path enc} { |
349 | global path_encoding_overrides last_encoding_override | |
350 | ||
351 | set enc [tcl_encoding $enc] | |
352 | if {$enc eq {}} { | |
353 | catch { unset last_encoding_override } | |
354 | catch { unset path_encoding_overrides($path) } | |
355 | } else { | |
356 | set last_encoding_override $enc | |
357 | if {$path ne {}} { | |
358 | set path_encoding_overrides($path) $enc | |
359 | } | |
360 | } | |
361 | } | |
362 | ||
72e6b002 | 363 | proc get_path_encoding {path} { |
3fe01623 AG |
364 | global path_encoding_overrides last_encoding_override |
365 | ||
366 | if {[info exists last_encoding_override]} { | |
367 | set tcl_enc $last_encoding_override | |
368 | } else { | |
369 | set tcl_enc [tcl_encoding [get_config gui.encoding]] | |
370 | } | |
72e6b002 AG |
371 | if {$tcl_enc eq {}} { |
372 | set tcl_enc [encoding system] | |
373 | } | |
374 | if {$path ne {}} { | |
3fe01623 AG |
375 | if {[info exists path_encoding_overrides($path)]} { |
376 | set enc2 $path_encoding_overrides($path) | |
377 | } else { | |
378 | set enc2 [tcl_encoding [gitattr $path encoding $tcl_enc]] | |
379 | } | |
72e6b002 AG |
380 | if {$enc2 ne {}} { |
381 | set tcl_enc $enc2 | |
382 | } | |
383 | } | |
384 | return $tcl_enc | |
385 | } | |
50102c56 AG |
386 | |
387 | proc build_encoding_submenu {parent grp cmd} { | |
388 | global used_encodings | |
389 | ||
390 | set mid [lindex $grp 0] | |
391 | set gname [mc [lindex $grp 1]] | |
392 | ||
393 | set smenu {} | |
394 | foreach subset [lrange $grp 2 end] { | |
395 | set name [mc [lindex $subset 0]] | |
396 | ||
397 | foreach enc [lrange $subset 1 end] { | |
398 | set tcl_enc [tcl_encoding $enc] | |
399 | if {$tcl_enc eq {}} continue | |
400 | ||
401 | if {$smenu eq {}} { | |
402 | if {$mid eq {}} { | |
403 | set smenu $parent | |
404 | } else { | |
405 | set smenu "$parent.$mid" | |
406 | menu $smenu | |
407 | $parent add cascade \ | |
408 | -label $gname \ | |
409 | -menu $smenu | |
410 | } | |
411 | } | |
412 | ||
413 | if {$name ne {}} { | |
414 | set lbl "$name ($enc)" | |
415 | } else { | |
416 | set lbl $enc | |
417 | } | |
418 | $smenu add command \ | |
419 | -label $lbl \ | |
420 | -command [concat $cmd [list $tcl_enc]] | |
421 | ||
422 | lappend used_encodings $tcl_enc | |
423 | } | |
424 | } | |
425 | } | |
426 | ||
427 | proc popup_btn_menu {m b} { | |
428 | tk_popup $m [winfo pointerx $b] [winfo pointery $b] | |
429 | } | |
430 | ||
431 | proc build_encoding_menu {emenu cmd {nodef 0}} { | |
432 | $emenu configure -postcommand \ | |
433 | [list do_build_encoding_menu $emenu $cmd $nodef] | |
434 | } | |
435 | ||
436 | proc do_build_encoding_menu {emenu cmd {nodef 0}} { | |
437 | global used_encodings encoding_groups | |
438 | ||
439 | $emenu configure -postcommand {} | |
440 | ||
441 | if {!$nodef} { | |
442 | $emenu add command \ | |
443 | -label [mc "Default"] \ | |
444 | -command [concat $cmd [list {}]] | |
445 | } | |
446 | set sysenc [encoding system] | |
447 | $emenu add command \ | |
448 | -label [mc "System (%s)" $sysenc] \ | |
449 | -command [concat $cmd [list $sysenc]] | |
450 | ||
451 | # Main encoding tree | |
452 | set used_encodings [list identity] | |
453 | $emenu add separator | |
454 | foreach grp $encoding_groups { | |
455 | build_encoding_submenu $emenu $grp $cmd | |
456 | } | |
457 | ||
458 | # Add unclassified encodings | |
459 | set unused_grp [list [mc Other]] | |
460 | foreach enc [encoding names] { | |
461 | if {[lsearch -exact $used_encodings $enc] < 0} { | |
462 | lappend unused_grp $enc | |
463 | } | |
464 | } | |
465 | build_encoding_submenu $emenu [list other [mc Other] $unused_grp] $cmd | |
466 | } |