The R Project SVN R

Rev

Rev 76173 | Rev 77916 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 76173 Rev 76183
Line 299... Line 299...
299
	for (i = 0; i < sa - 1 && str < end; i++)
299
	for (i = 0; i < sa - 1 && str < end; i++)
300
	    str += utf8clen(*str);
300
	    str += utf8clen(*str);
301
	*rfrom = str;
301
	*rfrom = str;
302
	for(; i < so && str < end; i++)
302
	for(; i < so && str < end; i++)
303
	    str += utf8clen(*str);
303
	    str += utf8clen(*str);
304
	*rlen = str - *rfrom;
304
	*rlen = (int) (str - *rfrom);
305
    } else if (!isascii && ienc != CE_LATIN1 && ienc != CE_BYTES
305
    } else if (!isascii && ienc != CE_LATIN1 && ienc != CE_BYTES
306
               && mbcslocale) {
306
               && mbcslocale) {
307
	mbstate_t mb_st;
307
	mbstate_t mb_st;
308
	mbs_init(&mb_st);
308
	mbs_init(&mb_st);
309
	for (i = 0; i < sa - 1 && str < end; i++)
309
	for (i = 0; i < sa - 1 && str < end; i++)
Line 311... Line 311...
311
	    str += Mbrtowc(NULL, str, MB_CUR_MAX, &mb_st);
311
	    str += Mbrtowc(NULL, str, MB_CUR_MAX, &mb_st);
312
	*rfrom = str;
312
	*rfrom = str;
313
	for (; i < so && str < end; i++)
313
	for (; i < so && str < end; i++)
314
	    /* throws error on invalid multi-byte string */
314
	    /* throws error on invalid multi-byte string */
315
	    str += (int) Mbrtowc(NULL, str, MB_CUR_MAX, &mb_st);
315
	    str += (int) Mbrtowc(NULL, str, MB_CUR_MAX, &mb_st);
316
	*rlen = str - *rfrom;
316
	*rlen = (int) (str - *rfrom);
317
    } else {
317
    } else {
318
	if (so - 1 < len) {
318
	if (so - 1 < len) {
319
	    *rfrom = str + sa - 1;
319
	    *rfrom = str + sa - 1;
320
	    *rlen = so - sa + 1;
320
	    *rlen = so - sa + 1;
321
	} else if (sa - 1 < len) {
321
	} else if (sa - 1 < len) {
Line 356... Line 356...
356
		SET_STRING_ELT(s, i, NA_STRING);
356
		SET_STRING_ELT(s, i, NA_STRING);
357
		continue;
357
		continue;
358
	    }
358
	    }
359
	    cetype_t ienc = getCharCE(el);
359
	    cetype_t ienc = getCharCE(el);
360
	    const char *ss = CHAR(el);
360
	    const char *ss = CHAR(el);
361
	    size_t slen = LENGTH(el);
361
	    int slen = LENGTH(el);
362
	    if (start < 1) start = 1;
362
	    if (start < 1) start = 1;
363
	    if (start > stop) {
363
	    if (start > stop) {
364
		SET_STRING_ELT(s, i, R_BlankString);
364
		SET_STRING_ELT(s, i, R_BlankString);
365
	    } else {
365
	    } else {
366
		const char *rfrom;
366
		const char *rfrom;