enhanced cut
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: str_dyn.c 287 2009-09-15 10:01:02Z hyunghwan.chung $
|
||||
* $Id: str_dyn.c 295 2009-10-06 13:47:16Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
This file is part of QSE.
|
||||
@ -334,3 +334,24 @@ qse_size_t qse_str_del (qse_str_t* str, qse_size_t index, qse_size_t size)
|
||||
|
||||
return str->len;
|
||||
}
|
||||
|
||||
qse_size_t qse_str_trm (qse_str_t* str)
|
||||
{
|
||||
if (str->ptr != QSE_NULL)
|
||||
{
|
||||
str->len = qse_strxtrm (str->ptr, str->len);
|
||||
}
|
||||
|
||||
return str->len;
|
||||
}
|
||||
|
||||
qse_size_t qse_str_pac (qse_str_t* str)
|
||||
{
|
||||
if (str->ptr != QSE_NULL)
|
||||
{
|
||||
str->len = qse_strxpac (str->ptr, str->len);
|
||||
}
|
||||
|
||||
return str->len;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: str_utl.c 287 2009-09-15 10:01:02Z hyunghwan.chung $
|
||||
* $Id: str_utl.c 295 2009-10-06 13:47:16Z hyunghwan.chung $
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
This file is part of QSE.
|
||||
@ -20,6 +20,7 @@
|
||||
|
||||
#include <qse/cmn/str.h>
|
||||
#include <qse/cmn/chr.h>
|
||||
#include "mem.h"
|
||||
|
||||
#define ISSPACE(c) \
|
||||
((c) == QSE_T(' ') || (c) == QSE_T('\t') || (c) == QSE_T('\n') || \
|
||||
@ -311,7 +312,7 @@ int qse_strspl (
|
||||
return qse_strspltrn (s, delim, lquote, rquote, escape, QSE_NULL);
|
||||
}
|
||||
|
||||
qse_char_t* qse_strtrm (qse_char_t* str, int opt)
|
||||
qse_char_t* qse_strtrmc (qse_char_t* str, int opt)
|
||||
{
|
||||
qse_char_t* p = str;
|
||||
qse_char_t* s = QSE_NULL, * e = QSE_NULL;
|
||||
@ -326,8 +327,124 @@ qse_char_t* qse_strtrm (qse_char_t* str, int opt)
|
||||
p++;
|
||||
}
|
||||
|
||||
if (opt & QSE_STRTRM_RIGHT) e[1] = QSE_T('\0');
|
||||
if (opt & QSE_STRTRM_LEFT) str = s;
|
||||
if (opt & QSE_STRTRMC_RIGHT) e[1] = QSE_T('\0');
|
||||
if (opt & QSE_STRTRMC_LEFT) str = s;
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
qse_size_t qse_strtrm (qse_char_t* str)
|
||||
{
|
||||
qse_char_t* p = str;
|
||||
qse_char_t* s = QSE_NULL, * e = QSE_NULL;
|
||||
|
||||
while (*p != QSE_T('\0'))
|
||||
{
|
||||
if (!QSE_ISSPACE(*p))
|
||||
{
|
||||
if (s == QSE_NULL) s = p;
|
||||
e = p;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
|
||||
if (e != QSE_NULL)
|
||||
{
|
||||
e[1] = QSE_T('\0');
|
||||
if (str != s)
|
||||
QSE_MEMCPY (str, s, (e - s + 2) * QSE_SIZEOF(qse_char_t));
|
||||
return e - s + 1;
|
||||
}
|
||||
|
||||
str[0] = QSE_T('\0');
|
||||
return 0;
|
||||
}
|
||||
|
||||
qse_size_t qse_strxtrm (qse_char_t* str, qse_size_t len)
|
||||
{
|
||||
qse_char_t* p = str, * end = str + len;
|
||||
qse_char_t* s = QSE_NULL, * e = QSE_NULL;
|
||||
|
||||
while (p < end)
|
||||
{
|
||||
if (!QSE_ISSPACE(*p))
|
||||
{
|
||||
if (s == QSE_NULL) s = p;
|
||||
e = p;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
|
||||
if (e != QSE_NULL)
|
||||
{
|
||||
/* do not insert a terminating null */
|
||||
/*e[1] = QSE_T('\0');*/
|
||||
if (str != s)
|
||||
QSE_MEMCPY (str, s, (e - s + 2) * QSE_SIZEOF(qse_char_t));
|
||||
return e - s + 1;
|
||||
}
|
||||
|
||||
/* do not insert a terminating null */
|
||||
/*str[0] = QSE_T('\0');*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
qse_size_t qse_strpac (qse_char_t* str)
|
||||
{
|
||||
qse_char_t* p = str, * q = str;
|
||||
|
||||
while (QSE_ISSPACE(*p)) p++;
|
||||
while (*p != QSE_T('\0'))
|
||||
{
|
||||
if (QSE_ISSPACE(*p))
|
||||
{
|
||||
*q++ = *p++;
|
||||
while (QSE_ISSPACE(*p)) p++;
|
||||
}
|
||||
else *q++ = *p++;
|
||||
}
|
||||
|
||||
if (q > str && QSE_ISSPACE(q[-1])) q--;
|
||||
*q = QSE_T('\0');
|
||||
|
||||
return q - str;
|
||||
}
|
||||
|
||||
qse_size_t qse_strxpac (qse_char_t* str, qse_size_t len)
|
||||
{
|
||||
qse_char_t* p = str, * q = str, * end = str + len;
|
||||
int followed_by_space = 0;
|
||||
int state = 0;
|
||||
|
||||
while (p < end)
|
||||
{
|
||||
if (state == 0)
|
||||
{
|
||||
if (!QSE_ISSPACE(*p))
|
||||
{
|
||||
*q++ = *p;
|
||||
state = 1;
|
||||
}
|
||||
}
|
||||
else if (state == 1)
|
||||
{
|
||||
if (QSE_ISSPACE(*p))
|
||||
{
|
||||
if (!followed_by_space)
|
||||
{
|
||||
followed_by_space = 1;
|
||||
*q++ = *p;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
followed_by_space = 0;
|
||||
*q++ = *p;
|
||||
}
|
||||
}
|
||||
|
||||
p++;
|
||||
}
|
||||
|
||||
return (followed_by_space) ? (q - str -1): (q - str);
|
||||
}
|
||||
|
Reference in New Issue
Block a user