annotate src/os_macosx.m @ 2309:543ea69d037f vim73

Add clipboard support in Mac console. (Bjorn Winckler)
author Bram Moolenaar <bram@vim.org>
date Wed, 14 Jul 2010 13:58:07 +0200
parents src/os_macosx.c@cccb71c2c5c1
children 3e4574a4b627
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1 /* vi:set ts=8 sts=4 sw=4:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 * See README.txt for an overview of the Vim source code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 /*
2309
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
11 * os_macosx.m -- Mac specific things for Mac OS/X.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13
2309
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
14 #ifndef MACOS_X_UNIX
574
25a70b1cd2da updated for version 7.0163
vimboss
parents: 492
diff changeset
15 Error: MACOS 9 is no longer supported in Vim 7
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17
2309
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
18 #include "vim.h"
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
19 #import <Cocoa/Cocoa.h>
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
20
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
21
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
22 NSString *VimPboardType = @"VimPboardType";
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
23
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
24
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 #ifdef _DEBUG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 Trace(char* fmt, ...)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29 char buf[2048];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 va_list args;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 va_start(args, fmt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 /* vsnprintf(buf, sizeof(buf), fmt, args);*/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 fprintf(stderr, "%s", buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 va_end(args);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 #ifdef MACOS_X_ICONVEMU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 * Libiconv emulation layer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 struct _iconv_t
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 TECObjectRef tec;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 TECObjectRef tecReverse;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 TECSnifferObjectRef sniff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 TextEncoding from;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 TextEncoding to;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 /* typedef struct _iconv_t *iconv_t; */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55 static int last_errno = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 * Get TextEncoding from iconv's encoding name
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 static TextEncoding
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61 get_textencoding(const char* encodename)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 static struct {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 const char* name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 TextEncoding encode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66 } encodetable[] = {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 /* ISO-8859 encodings family */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 {"latin1", kTextEncodingISOLatin1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 {"latin2", kTextEncodingISOLatin2},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 {"latin3", kTextEncodingISOLatin3},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 {"latin4", kTextEncodingISOLatin4},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 {"latin5", kTextEncodingISOLatin5},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 {"latin6", kTextEncodingISOLatin6},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74 {"latin7", kTextEncodingISOLatin7},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75 {"latin8", kTextEncodingISOLatin8},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76 {"latin9", kTextEncodingISOLatin9},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77 {"iso-8859-1", kTextEncodingISOLatin1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78 {"iso-8859-2", kTextEncodingISOLatin2},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 {"iso-8859-3", kTextEncodingISOLatin3},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 {"iso-8859-4", kTextEncodingISOLatin4},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81 {"iso-8859-5", kTextEncodingISOLatinCyrillic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 {"iso-8859-6", kTextEncodingISOLatinArabic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83 {"iso-8859-7", kTextEncodingISOLatinGreek},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 {"iso-8859-8", kTextEncodingISOLatinHebrew},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85 {"iso-8859-9", kTextEncodingISOLatin5},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
86 {"iso-8859-10", kTextEncodingISOLatin6},
492
81c06952fb1d updated for version 7.0135
vimboss
parents: 18
diff changeset
87 {"iso-8859-15", kTextEncodingISOLatin9},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 /* Unicode encodings. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 /* TODO: Add other type of unicode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 {"ucs-2", kTextEncodingMacUnicode},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
92
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93 /* Japanese encoding aliases */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
94 {"cp932", kTextEncodingShiftJIS},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 {"shift-jis", kTextEncodingShiftJIS},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96 {"euc-jp", kTextEncodingEUC_JP},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
97 {"iso-2022-jp", kTextEncodingISO_2022_JP},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98 {"iso-2022-jp-1", kTextEncodingISO_2022_JP_1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99 {"iso-2022-jp-2", kTextEncodingISO_2022_JP_2},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 {"iso-2022-jp-3", kTextEncodingISO_2022_JP_3},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 /* Other aliases. These aliases in this block are just guessed. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103 /* TODO: Must be verified. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 {"gb2312", kTextEncodingGB_2312_80},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105 {"cp936", kTextEncodingMacChineseSimp},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 {"euc-cn", kTextEncodingEUC_CN},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 {"cp950", kTextEncodingMacChineseTrad},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 {"euc-tw", kTextEncodingEUC_TW},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109 {"cp949", kTextEncodingMacKorean},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 {"euc-kr", kTextEncodingEUC_KR},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
111
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
112 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113 * All encodings supported by Macintosh. You can find these values
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
114 * in a file:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
115 * /System/Library/Frameworks/CoreServices.framework/Versions/A/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 * Frameworks/CarbonCore.framework/Versions/A/Headers/TextCommon.h
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
118 {"MacRoman", kTextEncodingMacRoman},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
119 {"MacJapanese", kTextEncodingMacJapanese},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 {"MacChineseTrad", kTextEncodingMacChineseTrad},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121 {"MacKorean", kTextEncodingMacKorean},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 {"MacArabic", kTextEncodingMacArabic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 {"MacHebrew", kTextEncodingMacHebrew},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 {"MacGreek", kTextEncodingMacGreek},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125 {"MacCyrillic", kTextEncodingMacCyrillic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
126 {"MacDevanagari", kTextEncodingMacDevanagari},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127 {"MacGurmukhi", kTextEncodingMacGurmukhi},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128 {"MacGujarati", kTextEncodingMacGujarati},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 {"MacOriya", kTextEncodingMacOriya},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130 {"MacBengali", kTextEncodingMacBengali},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 {"MacTamil", kTextEncodingMacTamil},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 {"MacTelugu", kTextEncodingMacTelugu},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133 {"MacKannada", kTextEncodingMacKannada},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 {"MacMalayalam", kTextEncodingMacMalayalam},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 {"MacSinhalese", kTextEncodingMacSinhalese},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136 {"MacBurmese", kTextEncodingMacBurmese},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137 {"MacKhmer", kTextEncodingMacKhmer},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138 {"MacThai", kTextEncodingMacThai},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
139 {"MacLaotian", kTextEncodingMacLaotian},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140 {"MacGeorgian", kTextEncodingMacGeorgian},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
141 {"MacArmenian", kTextEncodingMacArmenian},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
142 {"MacChineseSimp", kTextEncodingMacChineseSimp},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
143 {"MacTibetan", kTextEncodingMacTibetan},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144 {"MacMongolian", kTextEncodingMacMongolian},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
145 {"MacEthiopic", kTextEncodingMacEthiopic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 {"MacCentralEurRoman", kTextEncodingMacCentralEurRoman},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147 {"MacVietnamese", kTextEncodingMacVietnamese},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 {"MacExtArabic", kTextEncodingMacExtArabic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 {"MacSymbol", kTextEncodingMacSymbol},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150 {"MacDingbats", kTextEncodingMacDingbats},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151 {"MacTurkish", kTextEncodingMacTurkish},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152 {"MacCroatian", kTextEncodingMacCroatian},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 {"MacIcelandic", kTextEncodingMacIcelandic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 {"MacRomanian", kTextEncodingMacRomanian},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
155 {"MacCeltic", kTextEncodingMacCeltic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 {"MacGaelic", kTextEncodingMacGaelic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157 {"MacKeyboardGlyphs", kTextEncodingMacKeyboardGlyphs},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 {"MacTradChinese", kTextEncodingMacTradChinese},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 {"MacRSymbol", kTextEncodingMacRSymbol},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160 {"MacSimpChinese", kTextEncodingMacSimpChinese},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 {"MacGeez", kTextEncodingMacGeez},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162 {"MacEastEurRoman", kTextEncodingMacEastEurRoman},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163 {"MacUninterp", kTextEncodingMacUninterp},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
164 {"MacUnicode", kTextEncodingMacUnicode},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165 {"MacFarsi", kTextEncodingMacFarsi},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 {"MacUkrainian", kTextEncodingMacUkrainian},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167 {"MacInuit", kTextEncodingMacInuit},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168 {"MacVT100", kTextEncodingMacVT100},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
169 {"MacHFS", kTextEncodingMacHFS},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170 {"UnicodeDefault", kTextEncodingUnicodeDefault},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
171 {"UnicodeV1_1", kTextEncodingUnicodeV1_1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 {"ISO10646_1993", kTextEncodingISO10646_1993},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 {"UnicodeV2_0", kTextEncodingUnicodeV2_0},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 {"UnicodeV2_1", kTextEncodingUnicodeV2_1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175 {"UnicodeV3_0", kTextEncodingUnicodeV3_0},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 {"UnicodeV3_1", kTextEncodingUnicodeV3_1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177 {"UnicodeV3_2", kTextEncodingUnicodeV3_2},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 {"ISOLatin1", kTextEncodingISOLatin1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 {"ISOLatin2", kTextEncodingISOLatin2},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
180 {"ISOLatin3", kTextEncodingISOLatin3},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
181 {"ISOLatin4", kTextEncodingISOLatin4},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 {"ISOLatinCyrillic", kTextEncodingISOLatinCyrillic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 {"ISOLatinArabic", kTextEncodingISOLatinArabic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 {"ISOLatinGreek", kTextEncodingISOLatinGreek},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185 {"ISOLatinHebrew", kTextEncodingISOLatinHebrew},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186 {"ISOLatin5", kTextEncodingISOLatin5},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
187 {"ISOLatin6", kTextEncodingISOLatin6},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188 {"ISOLatin7", kTextEncodingISOLatin7},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189 {"ISOLatin8", kTextEncodingISOLatin8},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190 {"ISOLatin9", kTextEncodingISOLatin9},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 {"DOSLatinUS", kTextEncodingDOSLatinUS},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 {"DOSGreek", kTextEncodingDOSGreek},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 {"DOSBalticRim", kTextEncodingDOSBalticRim},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
194 {"DOSLatin1", kTextEncodingDOSLatin1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
195 {"DOSGreek1", kTextEncodingDOSGreek1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 {"DOSLatin2", kTextEncodingDOSLatin2},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197 {"DOSCyrillic", kTextEncodingDOSCyrillic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 {"DOSTurkish", kTextEncodingDOSTurkish},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 {"DOSPortuguese", kTextEncodingDOSPortuguese},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
200 {"DOSIcelandic", kTextEncodingDOSIcelandic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 {"DOSHebrew", kTextEncodingDOSHebrew},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202 {"DOSCanadianFrench", kTextEncodingDOSCanadianFrench},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 {"DOSArabic", kTextEncodingDOSArabic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 {"DOSNordic", kTextEncodingDOSNordic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 {"DOSRussian", kTextEncodingDOSRussian},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 {"DOSGreek2", kTextEncodingDOSGreek2},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 {"DOSThai", kTextEncodingDOSThai},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 {"DOSJapanese", kTextEncodingDOSJapanese},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209 {"DOSChineseSimplif", kTextEncodingDOSChineseSimplif},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 {"DOSKorean", kTextEncodingDOSKorean},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 {"DOSChineseTrad", kTextEncodingDOSChineseTrad},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 {"WindowsLatin1", kTextEncodingWindowsLatin1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 {"WindowsANSI", kTextEncodingWindowsANSI},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214 {"WindowsLatin2", kTextEncodingWindowsLatin2},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 {"WindowsCyrillic", kTextEncodingWindowsCyrillic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216 {"WindowsGreek", kTextEncodingWindowsGreek},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
217 {"WindowsLatin5", kTextEncodingWindowsLatin5},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
218 {"WindowsHebrew", kTextEncodingWindowsHebrew},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219 {"WindowsArabic", kTextEncodingWindowsArabic},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220 {"WindowsBalticRim", kTextEncodingWindowsBalticRim},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 {"WindowsVietnamese", kTextEncodingWindowsVietnamese},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222 {"WindowsKoreanJohab", kTextEncodingWindowsKoreanJohab},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 {"US_ASCII", kTextEncodingUS_ASCII},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224 {"JIS_X0201_76", kTextEncodingJIS_X0201_76},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225 {"JIS_X0208_83", kTextEncodingJIS_X0208_83},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 {"JIS_X0208_90", kTextEncodingJIS_X0208_90},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 {"JIS_X0212_90", kTextEncodingJIS_X0212_90},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
228 {"JIS_C6226_78", kTextEncodingJIS_C6226_78},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229 {"ShiftJIS_X0213_00", kTextEncodingShiftJIS_X0213_00},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
230 {"GB_2312_80", kTextEncodingGB_2312_80},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
231 {"GBK_95", kTextEncodingGBK_95},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232 {"GB_18030_2000", kTextEncodingGB_18030_2000},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 {"KSC_5601_87", kTextEncodingKSC_5601_87},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234 {"KSC_5601_92_Johab", kTextEncodingKSC_5601_92_Johab},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235 {"CNS_11643_92_P1", kTextEncodingCNS_11643_92_P1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 {"CNS_11643_92_P2", kTextEncodingCNS_11643_92_P2},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
237 {"CNS_11643_92_P3", kTextEncodingCNS_11643_92_P3},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 {"ISO_2022_JP", kTextEncodingISO_2022_JP},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 {"ISO_2022_JP_2", kTextEncodingISO_2022_JP_2},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240 {"ISO_2022_JP_1", kTextEncodingISO_2022_JP_1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 {"ISO_2022_JP_3", kTextEncodingISO_2022_JP_3},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242 {"ISO_2022_CN", kTextEncodingISO_2022_CN},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243 {"ISO_2022_CN_EXT", kTextEncodingISO_2022_CN_EXT},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 {"ISO_2022_KR", kTextEncodingISO_2022_KR},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
245 {"EUC_JP", kTextEncodingEUC_JP},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246 {"EUC_CN", kTextEncodingEUC_CN},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247 {"EUC_TW", kTextEncodingEUC_TW},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
248 {"EUC_KR", kTextEncodingEUC_KR},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249 {"ShiftJIS", kTextEncodingShiftJIS},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 {"KOI8_R", kTextEncodingKOI8_R},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251 {"Big5", kTextEncodingBig5},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252 {"MacRomanLatin1", kTextEncodingMacRomanLatin1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
253 {"HZ_GB_2312", kTextEncodingHZ_GB_2312},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 {"Big5_HKSCS_1999", kTextEncodingBig5_HKSCS_1999},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255 {"NextStepLatin", kTextEncodingNextStepLatin},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256 {"EBCDIC_US", kTextEncodingEBCDIC_US},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
257 {"EBCDIC_CP037", kTextEncodingEBCDIC_CP037},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258 {"MultiRun", kTextEncodingMultiRun},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260 /* Terminator */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
261 {NULL, -1},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
262 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
263 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
265 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
266 for (i = 0; encodetable[i].name != NULL; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
267 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
268 if (STRICMP(encodename, encodetable[i].name) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
269 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
270 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
271 return encodetable[i].encode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
272 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
273
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
275 * iconv interfaces
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 iconv_t
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279 iconv_open(const char* tocode, const char* fromcode)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 TextEncoding toEnc, fromEnc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282 iconv_t cd = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283 OSStatus st;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285 /* Verify to/from encoding name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 toEnc = get_textencoding(tocode);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287 fromEnc = get_textencoding(fromcode);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 if (toEnc < 0 || fromEnc < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289 goto ICONV_OPEN_ERR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
290
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
291 /* Allocate memory to object */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
292 cd = (iconv_t)alloc(sizeof(struct _iconv_t));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293 if (!cd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294 goto ICONV_OPEN_ERR;
2215
cccb71c2c5c1 Fix uninit memory read in undo code. Fix uint32_t in proto file.
Bram Moolenaar <bram@vim.org>
parents: 574
diff changeset
295 vim_memset(cd, 0, sizeof(struct _iconv_t));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
296
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
297 /* Create converter */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
298 if (fromEnc != toEnc)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
299 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
300 TRACE("*** fromEnc=%d toEnc=%d\n", (int)fromEnc, (int)toEnc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
301 st = TECCreateConverter(&cd->tec, fromEnc, toEnc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
302 if (st != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
303 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
304 TRACE("*** TECCreateConverter()=%d\n", (int)st);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
305 goto ICONV_OPEN_ERR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
306 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
307 /* Create reverse converter */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
308 st = TECCreateConverter(&cd->tecReverse, toEnc, fromEnc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
309 if (st != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
310 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311 TRACE("*** TECCreateConverter()=%d (reverse)\n", (int)st);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312 goto ICONV_OPEN_ERR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 /* Create Sniffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
315 st = TECCreateSniffer(&cd->sniff, &fromEnc, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316 if (st != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
318 TRACE("*** TECCreateSniffer()=%d\n", (int)st);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 goto ICONV_OPEN_ERR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
321 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
323 cd->from = fromEnc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324 cd->to = toEnc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
325 last_errno = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326 return cd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
327
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
328 ICONV_OPEN_ERR:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
329 if (cd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
330 iconv_close(cd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
331 last_errno = EINVAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
332 return (iconv_t)-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
333 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
334
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
335 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
336 * Used when there are same value in 'from encoding' and 'to encoding'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
337 * TEC doesn't support conversion between same encodings, and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
338 * TECCreateConverter() failed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
339 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
340 static size_t
18
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
341 null_conv(iconv_t cd, const char **inbuf, size_t *inbytesleft,
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
342 char **outbuf, size_t *outbytesleft)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
343 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
344 const char* buf_in = inbuf && *inbuf ? *inbuf : NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
345 char* buf_out = outbuf && *outbuf ? *outbuf : NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
346
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
347 if (buf_in)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
348 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
349 int in_len = inbytesleft ? *inbytesleft : 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
350 int out_len = outbytesleft ? *outbytesleft : 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 if (!buf_out || out_len <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354 last_errno = E2BIG;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357 else if (in_len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
359 int len = in_len < out_len ? in_len : out_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
360
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
361 memcpy (buf_out, buf_in, len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
362 *inbuf += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
363 *outbuf += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
364 *inbytesleft -= len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
365 *outbytesleft -= len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
366 if (*outbytesleft <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 last_errno = E2BIG;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
371 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 last_errno = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 size_t
18
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
378 iconv(iconv_t cd, const char **inbuf, size_t *inbytesleft,
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
379 char **outbuf, size_t *outbytesleft)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380 {
18
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
381 ConstTextPtr buf_in;
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
382 TextPtr buf_out;
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
383 ByteCount out_len, out_true;
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
384 ByteCount in_len, in_true;
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
385 OSStatus st;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 if (!cd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
388 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
389 last_errno = ENOENT; /* TODO: Another error code should be set */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 if (cd->from == cd->to)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
393 return null_conv(cd, inbuf, inbytesleft, outbuf, outbytesleft) ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
394
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
395 buf_in = (TextPtr) inbuf ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
396 buf_out = (TextPtr) outbuf ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
397 out_len = out_true = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
398 in_len = in_true = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
399
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
400 if (buf_in && buf_out)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 ItemCount error, feature;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
403
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 /* Normal convert mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405 if (!inbytesleft || !outbytesleft)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 last_errno = EFAULT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
408 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
409 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410 in_len = *inbytesleft;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 out_len = *outbytesleft;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
413 /* Check stream is form in expected encoding or not */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
414 st = TECSniffTextEncoding(cd->sniff, (TextPtr)buf_in, in_len,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
415 &cd->from, 1, &error, 1, &feature, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
416 TRACE("TECSniffTextEncoding()=%d error=%d feature=%d\n",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
417 (int)st, (int)error, (int)feature);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
418 if ((error != 0 || feature == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419 && !(error == 0xffffffff && feature == 0xffffffff))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420 /* Not expected encoding */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 st = kTECUnmappableElementErr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
422 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
423 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
424 /* Do convert */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
425 st = TECConvertText(cd->tec,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
426 buf_in, in_len, &in_true,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
427 buf_out, out_len, &out_true);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
428 /* Verify converted text. Compare original text with reverse
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
429 * converted text. If not match, there is some problem on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
430 * converting. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431 if (st == 0 && in_true > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
433 ByteCount rev_in, rev_out;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434 TextPtr buf_rev = (TextPtr)alloc(in_true);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
436 if (buf_rev)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
437 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
438 st = TECConvertText(cd->tecReverse,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
439 buf_out, out_true, &rev_in,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
440 buf_rev, in_true, &rev_out);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441 if (st != 0 || rev_in != out_true || rev_out != in_true
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
442 || memcmp(buf_rev, buf_in, rev_out) != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
443 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
444 #ifdef ICONVOSX_DEBUG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
445 fprintf(stderr, " reverse conversion failed.\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
446 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
447 st = kTECUnmappableElementErr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
448 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
449 vim_free(buf_rev);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
450 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
451 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
452 st = kTECUnmappableElementErr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
453 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
454 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
455 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
456 else if (!buf_in && buf_out)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
457 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
458 /* Flush all buffered strings to buffer, and reset status */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
459 if (!outbytesleft)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
460 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
461 last_errno = EFAULT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
462 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
463 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
464 out_len = *outbytesleft;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
465 st = TECFlushText(cd->tec,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
466 buf_out, out_len, &out_true);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
467 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
468 else if (!buf_in && !buf_out)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470 /* Reset cd's status and cancel buffered strings */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 unsigned char tmp_out[256];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
472
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
473 buf_out = tmp_out;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
474 out_len = sizeof(tmp_out);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
475 st = TECFlushText(cd->tec,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
476 buf_out, out_len, &out_true);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
477 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
478 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 last_errno = EFAULT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
483 TRACE("st=%d, buf_in=%p, in_len=%d, in_true=%d\n"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
484 " buf_out=%p, out_len=%d, out_true=%d\n", (int)st,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
485 buf_in, (int)in_len, (int)in_true,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
486 buf_out, (int)out_len, (int)out_true);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
487
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
488 switch (st)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
489 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
490 case 0:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
491 /* No error */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
492 if (inbytesleft)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
493 *inbytesleft -= in_true;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
494 if (outbytesleft)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
495 *outbytesleft -= out_true;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
496 if (inbuf && *inbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
497 *inbuf += in_true;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
498 if (outbuf && *outbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
499 *outbuf += out_true;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
500 last_errno = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
501 return 0; /* No error */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
502 case kTECUnmappableElementErr:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
503 last_errno = EILSEQ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504 case kTECIncompleteElementErr:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
505 last_errno = EINVAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506 case kTECOutputBufferFullStatus:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 last_errno = E2BIG;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509 default:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 TRACE("iconv(%p, %p, %p, %p, %p) failed. (%d)\n",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511 cd, inbuf, inbytesleft, outbuf, outbytesleft, (int)st);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
512 last_errno = EFAULT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
514 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
516
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
517 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
518 iconv_close(iconv_t cd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
519 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
520 if (cd)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
521 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
522 /* Free all elements of iconv_t */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
523 if (cd->tec)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
524 TECDisposeConverter(cd->tec);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
525 if (cd->tecReverse)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
526 TECDisposeConverter(cd->tecReverse);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
527 if (cd->sniff)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
528 TECDisposeSniffer(cd->sniff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
529 vim_free(cd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
530 last_errno = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
531 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
532 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
533 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
534 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
535 last_errno = EINVAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
536 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
537 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
538 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
539
18
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
540 int *
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
541 iconv_errno()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
542 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
543 return &last_errno;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
544 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
545 #endif /* MACOS_X_ICONVEMU */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
546
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
547 #ifdef USE_MCH_GETTEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
548
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
549 #define GETTEXT_BUFNUM 64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
550 #define GETTEXT_BUFSIZE 256
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
551
18
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
552 char *
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
553 mch_gettext(const char *msgid)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
554 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555 static char buf[GETTEXT_BUFNUM][GETTEXT_BUFSIZE];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
556 static int bufnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
557 const char *msg = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
558 CFStringRef strkey = NULL, strmsg = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
559 CFStringEncoding enc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
560
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
561 if (!msgid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
562 goto MCH_GETTEXT_FINISH;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
563 enc = CFStringGetSystemEncoding();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
564 TRACE("mch_gettext(%s)\n", msgid);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
565
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
566 strkey = CFStringCreateWithCString(NULL, msgid, enc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
567 if (!strkey)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
568 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
569 TRACE(" Can't create a CFString for msgid.\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
570 goto MCH_GETTEXT_FINISH;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
571 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
572
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
573 strmsg = CFCopyLocalizedString(strkey, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
574 if (!strmsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
575 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
576 TRACE(" No localized strings for msgid.\n");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
577 goto MCH_GETTEXT_FINISH;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
578 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
579
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
580 msg = CFStringGetCStringPtr(strmsg, enc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
581 if (!msg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 /* This is as backup when CFStringGetCStringPtr was failed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584 CFStringGetCString(strmsg, buf[bufnum], GETTEXT_BUFSIZE, enc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
585 msg = buf[bufnum];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586 if (++bufnum >= GETTEXT_BUFNUM)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
587 bufnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
588 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
589 TRACE(" Localized to: %s\n", msg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
590
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
591 MCH_GETTEXT_FINISH:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
592 if (strkey)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
593 CFRelease(strkey);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
594 if (strmsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
595 CFRelease(strmsg);
18
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
596 return (char *)(msg ? msg : msgid);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
598
18
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
599 char *
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
600 mch_bindtextdomain(const char *domain, const char *dirname)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 TRACE("mch_bindtextdomain(%s, %s)\n", domain, dirname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603 return (char*)dirname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
604 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
605
18
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
606 char *
293621502c4d updated for version 7.0010
vimboss
parents: 7
diff changeset
607 mch_textdomain(const char *domain)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
608 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
609 TRACE("mch_textdomain(%s)\n", domain);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
610 return (char*)domain;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612 #endif
2309
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
613
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
614
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
615
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
616 #ifdef FEAT_CLIPBOARD
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
617
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
618 void
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
619 clip_mch_lose_selection(VimClipboard *cbd)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
620 {
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
621 }
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
622
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
623
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
624 int
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
625 clip_mch_own_selection(VimClipboard *cbd)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
626 {
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
627 /* This is called whenever there is a new selection and 'guioptions'
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
628 * contains the "a" flag (automatically copy selection). Return TRUE, else
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
629 * the "a" flag does nothing. Note that there is no concept of "ownership"
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
630 * of the clipboard in Mac OS X.
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
631 */
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
632 return TRUE;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
633 }
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
634
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
635
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
636 void
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
637 clip_mch_request_selection(VimClipboard *cbd)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
638 {
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
639 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
640
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
641 NSPasteboard *pb = [NSPasteboard generalPasteboard];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
642 NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType,
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
643 NSStringPboardType, nil];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
644 NSString *bestType = [pb availableTypeFromArray:supportedTypes];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
645 if (!bestType) goto releasepool;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
646
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
647 int motion_type = MCHAR;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
648 NSString *string = nil;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
649
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
650 if ([bestType isEqual:VimPboardType])
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
651 {
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
652 /* This type should consist of an array with two objects:
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
653 * 1. motion type (NSNumber)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
654 * 2. text (NSString)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
655 * If this is not the case we fall back on using NSStringPboardType.
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
656 */
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
657 id plist = [pb propertyListForType:VimPboardType];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
658 if ([plist isKindOfClass:[NSArray class]] && [plist count] == 2)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
659 {
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
660 id obj = [plist objectAtIndex:1];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
661 if ([obj isKindOfClass:[NSString class]])
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
662 {
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
663 motion_type = [[plist objectAtIndex:0] intValue];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
664 string = obj;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
665 }
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
666 }
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
667 }
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
668
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
669 if (!string)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
670 {
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
671 /* Use NSStringPboardType. The motion type is set to line-wise if the
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
672 * string contains at least one EOL character, otherwise it is set to
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
673 * character-wise (block-wise is never used).
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
674 */
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
675 NSMutableString *mstring =
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
676 [[pb stringForType:NSStringPboardType] mutableCopy];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
677 if (!mstring) goto releasepool;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
678
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
679 /* Replace unrecognized end-of-line sequences with \x0a (line feed). */
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
680 NSRange range = { 0, [mstring length] };
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
681 unsigned n = [mstring replaceOccurrencesOfString:@"\x0d\x0a"
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
682 withString:@"\x0a" options:0
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
683 range:range];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
684 if (0 == n)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
685 {
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
686 n = [mstring replaceOccurrencesOfString:@"\x0d" withString:@"\x0a"
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
687 options:0 range:range];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
688 }
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
689
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
690 /* Scan for newline character to decide whether the string should be
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
691 * pasted line-wise or character-wise.
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
692 */
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
693 motion_type = MCHAR;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
694 if (0 < n || NSNotFound != [mstring rangeOfString:@"\n"].location)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
695 motion_type = MLINE;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
696
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
697 string = mstring;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
698 }
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
699
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
700 if (!(MCHAR == motion_type || MLINE == motion_type || MBLOCK == motion_type
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
701 || MAUTO == motion_type))
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
702 motion_type = MCHAR;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
703
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
704 char_u *str = (char_u*)[string UTF8String];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
705 int len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
706
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
707 #ifdef FEAT_MBYTE
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
708 if (input_conv.vc_type != CONV_NONE)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
709 str = string_convert(&input_conv, str, &len);
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
710 #endif
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
711
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
712 if (str)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
713 clip_yank_selection(motion_type, str, len, cbd);
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
714
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
715 #ifdef FEAT_MBYTE
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
716 if (input_conv.vc_type != CONV_NONE)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
717 vim_free(str);
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
718 #endif
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
719
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
720 releasepool:
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
721 [pool release];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
722 }
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
723
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
724
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
725 /*
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
726 * Send the current selection to the clipboard.
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
727 */
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
728 void
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
729 clip_mch_set_selection(VimClipboard *cbd)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
730 {
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
731 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
732
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
733 /* If the '*' register isn't already filled in, fill it in now. */
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
734 cbd->owned = TRUE;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
735 clip_get_selection(cbd);
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
736 cbd->owned = FALSE;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
737
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
738 /* Get the text to put on the pasteboard. */
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
739 long_u llen = 0; char_u *str = 0;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
740 int motion_type = clip_convert_selection(&str, &llen, cbd);
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
741 if (motion_type < 0)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
742 goto releasepool;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
743
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
744 /* TODO: Avoid overflow. */
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
745 int len = (int)llen;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
746 #ifdef FEAT_MBYTE
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
747 if (output_conv.vc_type != CONV_NONE)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
748 {
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
749 char_u *conv_str = string_convert(&output_conv, str, &len);
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
750 if (conv_str)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
751 {
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
752 vim_free(str);
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
753 str = conv_str;
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
754 }
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
755 }
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
756 #endif
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
757
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
758 if (len > 0)
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
759 {
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
760 NSString *string = [[NSString alloc]
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
761 initWithBytes:str length:len encoding:NSUTF8StringEncoding];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
762
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
763 /* See clip_mch_request_selection() for info on pasteboard types. */
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
764 NSPasteboard *pb = [NSPasteboard generalPasteboard];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
765 NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType,
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
766 NSStringPboardType, nil];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
767 [pb declareTypes:supportedTypes owner:nil];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
768
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
769 NSNumber *motion = [NSNumber numberWithInt:motion_type];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
770 NSArray *plist = [NSArray arrayWithObjects:motion, string, nil];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
771 [pb setPropertyList:plist forType:VimPboardType];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
772
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
773 [pb setString:string forType:NSStringPboardType];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
774
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
775 [string release];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
776 }
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
777
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
778 vim_free(str);
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
779 releasepool:
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
780 [pool release];
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
781 }
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
782
543ea69d037f Add clipboard support in Mac console. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
783 #endif /* FEAT_CLIPBOARD */