forked from aniani/vim
Remove obsolete Mac code.
This commit is contained in:
@@ -1098,10 +1098,6 @@ Vim 7.3:
|
||||
- Conceal feature: no update when moving to another window. (Dominique Pelle,
|
||||
2010 Jul 5) Vince will look into it.
|
||||
Patches to possibly include:
|
||||
- 'colorcolumn': make it local to window.
|
||||
Alternative patch. (2010 Feb 2, Gregor Uhlenheuer, update 2010 Jul 12)
|
||||
- Another patch for Javascript indenting. (Hari Kumar, 2010 Jul 11)
|
||||
Needs a few tests.
|
||||
- Add different highlighting for a fold line depending on the fold level.
|
||||
Patch. (Noel Henson, 2009 Sep 13)
|
||||
- Patch to make synIDattr() work for GUI attributes in Vim without GUI
|
||||
@@ -1116,6 +1112,8 @@ Patches to possibly include:
|
||||
Docs patch by Dominique Pelle, Mar 25
|
||||
Update 2009 Mar 28.
|
||||
Fix for invalid memory access. (Lech Lorens, 2009 Apr 17)
|
||||
- Another patch for Javascript indenting. (Hari Kumar, 2010 Jul 11)
|
||||
Needs a few tests.
|
||||
- Disable setting 'encoding' from a modeline? It usually causes problems,
|
||||
can't do any good. (Patch from Patrick Texier, 2008 Dec 9)
|
||||
- Redraw problem when appending digraph causes line to wrap. (James Vega, 2007
|
||||
|
12
src/os_mac.h
12
src/os_mac.h
@@ -299,15 +299,3 @@
|
||||
|
||||
/* A Mac constant causing big problem to syntax highlighting */
|
||||
#define UNKNOWN_CREATOR '\?\?\?\?'
|
||||
|
||||
/*
|
||||
* for debugging
|
||||
*/
|
||||
#ifdef MACOS_X
|
||||
# ifdef _DEBUG
|
||||
# define TRACE Trace
|
||||
void Trace(char *fmt, ...);
|
||||
# else
|
||||
# define TRACE 1 ? (void)0 : printf
|
||||
# endif
|
||||
#endif
|
||||
|
529
src/os_macosx.m
529
src/os_macosx.m
@@ -19,533 +19,12 @@
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
|
||||
NSString *VimPboardType = @"VimPboardType";
|
||||
|
||||
|
||||
#ifdef _DEBUG
|
||||
void
|
||||
Trace(char* fmt, ...)
|
||||
{
|
||||
char buf[2048];
|
||||
va_list args;
|
||||
|
||||
va_start(args, fmt);
|
||||
/* vsnprintf(buf, sizeof(buf), fmt, args);*/
|
||||
fprintf(stderr, "%s", buf);
|
||||
va_end(args);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef MACOS_X_ICONVEMU
|
||||
/*
|
||||
* Libiconv emulation layer
|
||||
*/
|
||||
|
||||
struct _iconv_t
|
||||
{
|
||||
TECObjectRef tec;
|
||||
TECObjectRef tecReverse;
|
||||
TECSnifferObjectRef sniff;
|
||||
TextEncoding from;
|
||||
TextEncoding to;
|
||||
};
|
||||
/* typedef struct _iconv_t *iconv_t; */
|
||||
|
||||
|
||||
static int last_errno = 0;
|
||||
|
||||
/*
|
||||
* Get TextEncoding from iconv's encoding name
|
||||
*/
|
||||
static TextEncoding
|
||||
get_textencoding(const char* encodename)
|
||||
{
|
||||
static struct {
|
||||
const char* name;
|
||||
TextEncoding encode;
|
||||
} encodetable[] = {
|
||||
/* ISO-8859 encodings family */
|
||||
{"latin1", kTextEncodingISOLatin1},
|
||||
{"latin2", kTextEncodingISOLatin2},
|
||||
{"latin3", kTextEncodingISOLatin3},
|
||||
{"latin4", kTextEncodingISOLatin4},
|
||||
{"latin5", kTextEncodingISOLatin5},
|
||||
{"latin6", kTextEncodingISOLatin6},
|
||||
{"latin7", kTextEncodingISOLatin7},
|
||||
{"latin8", kTextEncodingISOLatin8},
|
||||
{"latin9", kTextEncodingISOLatin9},
|
||||
{"iso-8859-1", kTextEncodingISOLatin1},
|
||||
{"iso-8859-2", kTextEncodingISOLatin2},
|
||||
{"iso-8859-3", kTextEncodingISOLatin3},
|
||||
{"iso-8859-4", kTextEncodingISOLatin4},
|
||||
{"iso-8859-5", kTextEncodingISOLatinCyrillic},
|
||||
{"iso-8859-6", kTextEncodingISOLatinArabic},
|
||||
{"iso-8859-7", kTextEncodingISOLatinGreek},
|
||||
{"iso-8859-8", kTextEncodingISOLatinHebrew},
|
||||
{"iso-8859-9", kTextEncodingISOLatin5},
|
||||
{"iso-8859-10", kTextEncodingISOLatin6},
|
||||
{"iso-8859-15", kTextEncodingISOLatin9},
|
||||
|
||||
/* Unicode encodings. */
|
||||
/* TODO: Add other type of unicode */
|
||||
{"ucs-2", kTextEncodingMacUnicode},
|
||||
|
||||
/* Japanese encoding aliases */
|
||||
{"cp932", kTextEncodingShiftJIS},
|
||||
{"shift-jis", kTextEncodingShiftJIS},
|
||||
{"euc-jp", kTextEncodingEUC_JP},
|
||||
{"iso-2022-jp", kTextEncodingISO_2022_JP},
|
||||
{"iso-2022-jp-1", kTextEncodingISO_2022_JP_1},
|
||||
{"iso-2022-jp-2", kTextEncodingISO_2022_JP_2},
|
||||
{"iso-2022-jp-3", kTextEncodingISO_2022_JP_3},
|
||||
|
||||
/* Other aliases. These aliases in this block are just guessed. */
|
||||
/* TODO: Must be verified. */
|
||||
{"gb2312", kTextEncodingGB_2312_80},
|
||||
{"cp936", kTextEncodingMacChineseSimp},
|
||||
{"euc-cn", kTextEncodingEUC_CN},
|
||||
{"cp950", kTextEncodingMacChineseTrad},
|
||||
{"euc-tw", kTextEncodingEUC_TW},
|
||||
{"cp949", kTextEncodingMacKorean},
|
||||
{"euc-kr", kTextEncodingEUC_KR},
|
||||
|
||||
/*
|
||||
* All encodings supported by Macintosh. You can find these values
|
||||
* in a file:
|
||||
* /System/Library/Frameworks/CoreServices.framework/Versions/A/
|
||||
* Frameworks/CarbonCore.framework/Versions/A/Headers/TextCommon.h
|
||||
*/
|
||||
{"MacRoman", kTextEncodingMacRoman},
|
||||
{"MacJapanese", kTextEncodingMacJapanese},
|
||||
{"MacChineseTrad", kTextEncodingMacChineseTrad},
|
||||
{"MacKorean", kTextEncodingMacKorean},
|
||||
{"MacArabic", kTextEncodingMacArabic},
|
||||
{"MacHebrew", kTextEncodingMacHebrew},
|
||||
{"MacGreek", kTextEncodingMacGreek},
|
||||
{"MacCyrillic", kTextEncodingMacCyrillic},
|
||||
{"MacDevanagari", kTextEncodingMacDevanagari},
|
||||
{"MacGurmukhi", kTextEncodingMacGurmukhi},
|
||||
{"MacGujarati", kTextEncodingMacGujarati},
|
||||
{"MacOriya", kTextEncodingMacOriya},
|
||||
{"MacBengali", kTextEncodingMacBengali},
|
||||
{"MacTamil", kTextEncodingMacTamil},
|
||||
{"MacTelugu", kTextEncodingMacTelugu},
|
||||
{"MacKannada", kTextEncodingMacKannada},
|
||||
{"MacMalayalam", kTextEncodingMacMalayalam},
|
||||
{"MacSinhalese", kTextEncodingMacSinhalese},
|
||||
{"MacBurmese", kTextEncodingMacBurmese},
|
||||
{"MacKhmer", kTextEncodingMacKhmer},
|
||||
{"MacThai", kTextEncodingMacThai},
|
||||
{"MacLaotian", kTextEncodingMacLaotian},
|
||||
{"MacGeorgian", kTextEncodingMacGeorgian},
|
||||
{"MacArmenian", kTextEncodingMacArmenian},
|
||||
{"MacChineseSimp", kTextEncodingMacChineseSimp},
|
||||
{"MacTibetan", kTextEncodingMacTibetan},
|
||||
{"MacMongolian", kTextEncodingMacMongolian},
|
||||
{"MacEthiopic", kTextEncodingMacEthiopic},
|
||||
{"MacCentralEurRoman", kTextEncodingMacCentralEurRoman},
|
||||
{"MacVietnamese", kTextEncodingMacVietnamese},
|
||||
{"MacExtArabic", kTextEncodingMacExtArabic},
|
||||
{"MacSymbol", kTextEncodingMacSymbol},
|
||||
{"MacDingbats", kTextEncodingMacDingbats},
|
||||
{"MacTurkish", kTextEncodingMacTurkish},
|
||||
{"MacCroatian", kTextEncodingMacCroatian},
|
||||
{"MacIcelandic", kTextEncodingMacIcelandic},
|
||||
{"MacRomanian", kTextEncodingMacRomanian},
|
||||
{"MacCeltic", kTextEncodingMacCeltic},
|
||||
{"MacGaelic", kTextEncodingMacGaelic},
|
||||
{"MacKeyboardGlyphs", kTextEncodingMacKeyboardGlyphs},
|
||||
{"MacTradChinese", kTextEncodingMacTradChinese},
|
||||
{"MacRSymbol", kTextEncodingMacRSymbol},
|
||||
{"MacSimpChinese", kTextEncodingMacSimpChinese},
|
||||
{"MacGeez", kTextEncodingMacGeez},
|
||||
{"MacEastEurRoman", kTextEncodingMacEastEurRoman},
|
||||
{"MacUninterp", kTextEncodingMacUninterp},
|
||||
{"MacUnicode", kTextEncodingMacUnicode},
|
||||
{"MacFarsi", kTextEncodingMacFarsi},
|
||||
{"MacUkrainian", kTextEncodingMacUkrainian},
|
||||
{"MacInuit", kTextEncodingMacInuit},
|
||||
{"MacVT100", kTextEncodingMacVT100},
|
||||
{"MacHFS", kTextEncodingMacHFS},
|
||||
{"UnicodeDefault", kTextEncodingUnicodeDefault},
|
||||
{"UnicodeV1_1", kTextEncodingUnicodeV1_1},
|
||||
{"ISO10646_1993", kTextEncodingISO10646_1993},
|
||||
{"UnicodeV2_0", kTextEncodingUnicodeV2_0},
|
||||
{"UnicodeV2_1", kTextEncodingUnicodeV2_1},
|
||||
{"UnicodeV3_0", kTextEncodingUnicodeV3_0},
|
||||
{"UnicodeV3_1", kTextEncodingUnicodeV3_1},
|
||||
{"UnicodeV3_2", kTextEncodingUnicodeV3_2},
|
||||
{"ISOLatin1", kTextEncodingISOLatin1},
|
||||
{"ISOLatin2", kTextEncodingISOLatin2},
|
||||
{"ISOLatin3", kTextEncodingISOLatin3},
|
||||
{"ISOLatin4", kTextEncodingISOLatin4},
|
||||
{"ISOLatinCyrillic", kTextEncodingISOLatinCyrillic},
|
||||
{"ISOLatinArabic", kTextEncodingISOLatinArabic},
|
||||
{"ISOLatinGreek", kTextEncodingISOLatinGreek},
|
||||
{"ISOLatinHebrew", kTextEncodingISOLatinHebrew},
|
||||
{"ISOLatin5", kTextEncodingISOLatin5},
|
||||
{"ISOLatin6", kTextEncodingISOLatin6},
|
||||
{"ISOLatin7", kTextEncodingISOLatin7},
|
||||
{"ISOLatin8", kTextEncodingISOLatin8},
|
||||
{"ISOLatin9", kTextEncodingISOLatin9},
|
||||
{"DOSLatinUS", kTextEncodingDOSLatinUS},
|
||||
{"DOSGreek", kTextEncodingDOSGreek},
|
||||
{"DOSBalticRim", kTextEncodingDOSBalticRim},
|
||||
{"DOSLatin1", kTextEncodingDOSLatin1},
|
||||
{"DOSGreek1", kTextEncodingDOSGreek1},
|
||||
{"DOSLatin2", kTextEncodingDOSLatin2},
|
||||
{"DOSCyrillic", kTextEncodingDOSCyrillic},
|
||||
{"DOSTurkish", kTextEncodingDOSTurkish},
|
||||
{"DOSPortuguese", kTextEncodingDOSPortuguese},
|
||||
{"DOSIcelandic", kTextEncodingDOSIcelandic},
|
||||
{"DOSHebrew", kTextEncodingDOSHebrew},
|
||||
{"DOSCanadianFrench", kTextEncodingDOSCanadianFrench},
|
||||
{"DOSArabic", kTextEncodingDOSArabic},
|
||||
{"DOSNordic", kTextEncodingDOSNordic},
|
||||
{"DOSRussian", kTextEncodingDOSRussian},
|
||||
{"DOSGreek2", kTextEncodingDOSGreek2},
|
||||
{"DOSThai", kTextEncodingDOSThai},
|
||||
{"DOSJapanese", kTextEncodingDOSJapanese},
|
||||
{"DOSChineseSimplif", kTextEncodingDOSChineseSimplif},
|
||||
{"DOSKorean", kTextEncodingDOSKorean},
|
||||
{"DOSChineseTrad", kTextEncodingDOSChineseTrad},
|
||||
{"WindowsLatin1", kTextEncodingWindowsLatin1},
|
||||
{"WindowsANSI", kTextEncodingWindowsANSI},
|
||||
{"WindowsLatin2", kTextEncodingWindowsLatin2},
|
||||
{"WindowsCyrillic", kTextEncodingWindowsCyrillic},
|
||||
{"WindowsGreek", kTextEncodingWindowsGreek},
|
||||
{"WindowsLatin5", kTextEncodingWindowsLatin5},
|
||||
{"WindowsHebrew", kTextEncodingWindowsHebrew},
|
||||
{"WindowsArabic", kTextEncodingWindowsArabic},
|
||||
{"WindowsBalticRim", kTextEncodingWindowsBalticRim},
|
||||
{"WindowsVietnamese", kTextEncodingWindowsVietnamese},
|
||||
{"WindowsKoreanJohab", kTextEncodingWindowsKoreanJohab},
|
||||
{"US_ASCII", kTextEncodingUS_ASCII},
|
||||
{"JIS_X0201_76", kTextEncodingJIS_X0201_76},
|
||||
{"JIS_X0208_83", kTextEncodingJIS_X0208_83},
|
||||
{"JIS_X0208_90", kTextEncodingJIS_X0208_90},
|
||||
{"JIS_X0212_90", kTextEncodingJIS_X0212_90},
|
||||
{"JIS_C6226_78", kTextEncodingJIS_C6226_78},
|
||||
{"ShiftJIS_X0213_00", kTextEncodingShiftJIS_X0213_00},
|
||||
{"GB_2312_80", kTextEncodingGB_2312_80},
|
||||
{"GBK_95", kTextEncodingGBK_95},
|
||||
{"GB_18030_2000", kTextEncodingGB_18030_2000},
|
||||
{"KSC_5601_87", kTextEncodingKSC_5601_87},
|
||||
{"KSC_5601_92_Johab", kTextEncodingKSC_5601_92_Johab},
|
||||
{"CNS_11643_92_P1", kTextEncodingCNS_11643_92_P1},
|
||||
{"CNS_11643_92_P2", kTextEncodingCNS_11643_92_P2},
|
||||
{"CNS_11643_92_P3", kTextEncodingCNS_11643_92_P3},
|
||||
{"ISO_2022_JP", kTextEncodingISO_2022_JP},
|
||||
{"ISO_2022_JP_2", kTextEncodingISO_2022_JP_2},
|
||||
{"ISO_2022_JP_1", kTextEncodingISO_2022_JP_1},
|
||||
{"ISO_2022_JP_3", kTextEncodingISO_2022_JP_3},
|
||||
{"ISO_2022_CN", kTextEncodingISO_2022_CN},
|
||||
{"ISO_2022_CN_EXT", kTextEncodingISO_2022_CN_EXT},
|
||||
{"ISO_2022_KR", kTextEncodingISO_2022_KR},
|
||||
{"EUC_JP", kTextEncodingEUC_JP},
|
||||
{"EUC_CN", kTextEncodingEUC_CN},
|
||||
{"EUC_TW", kTextEncodingEUC_TW},
|
||||
{"EUC_KR", kTextEncodingEUC_KR},
|
||||
{"ShiftJIS", kTextEncodingShiftJIS},
|
||||
{"KOI8_R", kTextEncodingKOI8_R},
|
||||
{"Big5", kTextEncodingBig5},
|
||||
{"MacRomanLatin1", kTextEncodingMacRomanLatin1},
|
||||
{"HZ_GB_2312", kTextEncodingHZ_GB_2312},
|
||||
{"Big5_HKSCS_1999", kTextEncodingBig5_HKSCS_1999},
|
||||
{"NextStepLatin", kTextEncodingNextStepLatin},
|
||||
{"EBCDIC_US", kTextEncodingEBCDIC_US},
|
||||
{"EBCDIC_CP037", kTextEncodingEBCDIC_CP037},
|
||||
{"MultiRun", kTextEncodingMultiRun},
|
||||
|
||||
/* Terminator */
|
||||
{NULL, -1},
|
||||
};
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
for (i = 0; encodetable[i].name != NULL; ++i)
|
||||
{
|
||||
if (STRICMP(encodename, encodetable[i].name) == 0)
|
||||
break;
|
||||
}
|
||||
return encodetable[i].encode;
|
||||
}
|
||||
|
||||
/*
|
||||
* iconv interfaces
|
||||
*/
|
||||
|
||||
iconv_t
|
||||
iconv_open(const char* tocode, const char* fromcode)
|
||||
{
|
||||
TextEncoding toEnc, fromEnc;
|
||||
iconv_t cd = NULL;
|
||||
OSStatus st;
|
||||
|
||||
/* Verify to/from encoding name */
|
||||
toEnc = get_textencoding(tocode);
|
||||
fromEnc = get_textencoding(fromcode);
|
||||
if (toEnc < 0 || fromEnc < 0)
|
||||
goto ICONV_OPEN_ERR;
|
||||
|
||||
/* Allocate memory to object */
|
||||
cd = (iconv_t)alloc(sizeof(struct _iconv_t));
|
||||
if (!cd)
|
||||
goto ICONV_OPEN_ERR;
|
||||
vim_memset(cd, 0, sizeof(struct _iconv_t));
|
||||
|
||||
/* Create converter */
|
||||
if (fromEnc != toEnc)
|
||||
{
|
||||
TRACE("*** fromEnc=%d toEnc=%d\n", (int)fromEnc, (int)toEnc);
|
||||
st = TECCreateConverter(&cd->tec, fromEnc, toEnc);
|
||||
if (st != 0)
|
||||
{
|
||||
TRACE("*** TECCreateConverter()=%d\n", (int)st);
|
||||
goto ICONV_OPEN_ERR;
|
||||
}
|
||||
/* Create reverse converter */
|
||||
st = TECCreateConverter(&cd->tecReverse, toEnc, fromEnc);
|
||||
if (st != 0)
|
||||
{
|
||||
TRACE("*** TECCreateConverter()=%d (reverse)\n", (int)st);
|
||||
goto ICONV_OPEN_ERR;
|
||||
}
|
||||
/* Create Sniffer */
|
||||
st = TECCreateSniffer(&cd->sniff, &fromEnc, 1);
|
||||
if (st != 0)
|
||||
{
|
||||
TRACE("*** TECCreateSniffer()=%d\n", (int)st);
|
||||
goto ICONV_OPEN_ERR;
|
||||
}
|
||||
}
|
||||
|
||||
cd->from = fromEnc;
|
||||
cd->to = toEnc;
|
||||
last_errno = 0;
|
||||
return cd;
|
||||
|
||||
ICONV_OPEN_ERR:
|
||||
if (cd)
|
||||
iconv_close(cd);
|
||||
last_errno = EINVAL;
|
||||
return (iconv_t)-1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Used when there are same value in 'from encoding' and 'to encoding'.
|
||||
* TEC doesn't support conversion between same encodings, and
|
||||
* TECCreateConverter() failed.
|
||||
*/
|
||||
static size_t
|
||||
null_conv(iconv_t cd, const char **inbuf, size_t *inbytesleft,
|
||||
char **outbuf, size_t *outbytesleft)
|
||||
{
|
||||
const char* buf_in = inbuf && *inbuf ? *inbuf : NULL;
|
||||
char* buf_out = outbuf && *outbuf ? *outbuf : NULL;
|
||||
|
||||
if (buf_in)
|
||||
{
|
||||
int in_len = inbytesleft ? *inbytesleft : 0;
|
||||
int out_len = outbytesleft ? *outbytesleft : 0;
|
||||
|
||||
if (!buf_out || out_len <= 0)
|
||||
{
|
||||
last_errno = E2BIG;
|
||||
return -1;
|
||||
}
|
||||
else if (in_len > 0)
|
||||
{
|
||||
int len = in_len < out_len ? in_len : out_len;
|
||||
|
||||
memcpy (buf_out, buf_in, len);
|
||||
*inbuf += len;
|
||||
*outbuf += len;
|
||||
*inbytesleft -= len;
|
||||
*outbytesleft -= len;
|
||||
if (*outbytesleft <= 0)
|
||||
{
|
||||
last_errno = E2BIG;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
last_errno = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
size_t
|
||||
iconv(iconv_t cd, const char **inbuf, size_t *inbytesleft,
|
||||
char **outbuf, size_t *outbytesleft)
|
||||
{
|
||||
ConstTextPtr buf_in;
|
||||
TextPtr buf_out;
|
||||
ByteCount out_len, out_true;
|
||||
ByteCount in_len, in_true;
|
||||
OSStatus st;
|
||||
|
||||
if (!cd)
|
||||
{
|
||||
last_errno = ENOENT; /* TODO: Another error code should be set */
|
||||
return -1;
|
||||
}
|
||||
if (cd->from == cd->to)
|
||||
return null_conv(cd, inbuf, inbytesleft, outbuf, outbytesleft) ;
|
||||
|
||||
buf_in = (TextPtr) inbuf ;
|
||||
buf_out = (TextPtr) outbuf ;
|
||||
out_len = out_true = -1;
|
||||
in_len = in_true = -1;
|
||||
|
||||
if (buf_in && buf_out)
|
||||
{
|
||||
ItemCount error, feature;
|
||||
|
||||
/* Normal convert mode */
|
||||
if (!inbytesleft || !outbytesleft)
|
||||
{
|
||||
last_errno = EFAULT;
|
||||
return -1;
|
||||
}
|
||||
in_len = *inbytesleft;
|
||||
out_len = *outbytesleft;
|
||||
|
||||
/* Check stream is form in expected encoding or not */
|
||||
st = TECSniffTextEncoding(cd->sniff, (TextPtr)buf_in, in_len,
|
||||
&cd->from, 1, &error, 1, &feature, 1);
|
||||
TRACE("TECSniffTextEncoding()=%d error=%d feature=%d\n",
|
||||
(int)st, (int)error, (int)feature);
|
||||
if ((error != 0 || feature == 0)
|
||||
&& !(error == 0xffffffff && feature == 0xffffffff))
|
||||
/* Not expected encoding */
|
||||
st = kTECUnmappableElementErr;
|
||||
else
|
||||
{
|
||||
/* Do convert */
|
||||
st = TECConvertText(cd->tec,
|
||||
buf_in, in_len, &in_true,
|
||||
buf_out, out_len, &out_true);
|
||||
/* Verify converted text. Compare original text with reverse
|
||||
* converted text. If not match, there is some problem on
|
||||
* converting. */
|
||||
if (st == 0 && in_true > 0)
|
||||
{
|
||||
ByteCount rev_in, rev_out;
|
||||
TextPtr buf_rev = (TextPtr)alloc(in_true);
|
||||
|
||||
if (buf_rev)
|
||||
{
|
||||
st = TECConvertText(cd->tecReverse,
|
||||
buf_out, out_true, &rev_in,
|
||||
buf_rev, in_true, &rev_out);
|
||||
if (st != 0 || rev_in != out_true || rev_out != in_true
|
||||
|| memcmp(buf_rev, buf_in, rev_out) != 0)
|
||||
{
|
||||
#ifdef ICONVOSX_DEBUG
|
||||
fprintf(stderr, " reverse conversion failed.\n");
|
||||
#endif
|
||||
st = kTECUnmappableElementErr;
|
||||
}
|
||||
vim_free(buf_rev);
|
||||
}
|
||||
else
|
||||
st = kTECUnmappableElementErr;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!buf_in && buf_out)
|
||||
{
|
||||
/* Flush all buffered strings to buffer, and reset status */
|
||||
if (!outbytesleft)
|
||||
{
|
||||
last_errno = EFAULT;
|
||||
return -1;
|
||||
}
|
||||
out_len = *outbytesleft;
|
||||
st = TECFlushText(cd->tec,
|
||||
buf_out, out_len, &out_true);
|
||||
}
|
||||
else if (!buf_in && !buf_out)
|
||||
{
|
||||
/* Reset cd's status and cancel buffered strings */
|
||||
unsigned char tmp_out[256];
|
||||
|
||||
buf_out = tmp_out;
|
||||
out_len = sizeof(tmp_out);
|
||||
st = TECFlushText(cd->tec,
|
||||
buf_out, out_len, &out_true);
|
||||
}
|
||||
else
|
||||
{
|
||||
last_errno = EFAULT;
|
||||
return -1;
|
||||
}
|
||||
TRACE("st=%d, buf_in=%p, in_len=%d, in_true=%d\n"
|
||||
" buf_out=%p, out_len=%d, out_true=%d\n", (int)st,
|
||||
buf_in, (int)in_len, (int)in_true,
|
||||
buf_out, (int)out_len, (int)out_true);
|
||||
|
||||
switch (st)
|
||||
{
|
||||
case 0:
|
||||
/* No error */
|
||||
if (inbytesleft)
|
||||
*inbytesleft -= in_true;
|
||||
if (outbytesleft)
|
||||
*outbytesleft -= out_true;
|
||||
if (inbuf && *inbuf)
|
||||
*inbuf += in_true;
|
||||
if (outbuf && *outbuf)
|
||||
*outbuf += out_true;
|
||||
last_errno = 0;
|
||||
return 0; /* No error */
|
||||
case kTECUnmappableElementErr:
|
||||
last_errno = EILSEQ;
|
||||
case kTECIncompleteElementErr:
|
||||
last_errno = EINVAL;
|
||||
case kTECOutputBufferFullStatus:
|
||||
last_errno = E2BIG;
|
||||
return -1;
|
||||
default:
|
||||
TRACE("iconv(%p, %p, %p, %p, %p) failed. (%d)\n",
|
||||
cd, inbuf, inbytesleft, outbuf, outbytesleft, (int)st);
|
||||
last_errno = EFAULT;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
iconv_close(iconv_t cd)
|
||||
{
|
||||
if (cd)
|
||||
{
|
||||
/* Free all elements of iconv_t */
|
||||
if (cd->tec)
|
||||
TECDisposeConverter(cd->tec);
|
||||
if (cd->tecReverse)
|
||||
TECDisposeConverter(cd->tecReverse);
|
||||
if (cd->sniff)
|
||||
TECDisposeSniffer(cd->sniff);
|
||||
vim_free(cd);
|
||||
last_errno = 0;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
last_errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int *
|
||||
iconv_errno()
|
||||
{
|
||||
return &last_errno;
|
||||
}
|
||||
#endif /* MACOS_X_ICONVEMU */
|
||||
|
||||
#ifdef FEAT_CLIPBOARD
|
||||
|
||||
/* Used to identify clipboard data copied from Vim. */
|
||||
|
||||
NSString *VimPboardType = @"VimPboardType";
|
||||
|
||||
void
|
||||
clip_mch_lose_selection(VimClipboard *cbd)
|
||||
{
|
||||
|
Reference in New Issue
Block a user