Mercurial > hg > octave-lyh > gnulib-hg
changeset 7258:448f74ab8f39
New 'trim' module, from Davide Angelocola <davide.angelocola@tiscali.it>.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Tue, 05 Sep 2006 12:32:42 +0000 |
parents | b188d0ecb399 |
children | 69f130cab11a |
files | ChangeLog MODULES.html.sh lib/ChangeLog lib/trim.c lib/trim.h modules/trim |
diffstat | 6 files changed, 206 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-09-05 Bruno Haible <bruno@clisp.org> + + * MODULES.html.sh (String handling): Add trim. + +2006-09-05 Davide Angelocola <davide.angelocola@tiscali.it> + + * modules/trim: New file. + 2006-09-01 Paul Eggert <eggert@cs.ucla.edu> * gnulib-tool (func_emit_lib_Makefile_am): Fix typos in
--- a/MODULES.html.sh +++ b/MODULES.html.sh @@ -1536,6 +1536,7 @@ func_module strndup func_module strsep func_module c-strstr + func_module trim #func_module fstrcmp func_module xstrndup func_end_table
--- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,8 @@ +2006-09-05 Davide Angelocola <davide.angelocola@tiscali.it> + + * trim.h: New file. + * trim.c: New file. + 2006-09-01 Paul Eggert <eggert@cs.ucla.edu> * getloadavg.c: Use CONFIGURING_GETLOADAVG, not gl_GETLOADAVG.
new file mode 100644 --- /dev/null +++ b/lib/trim.c @@ -0,0 +1,132 @@ +/* Removes leading and/or trailing whitespaces + Copyright (C) 2006 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. + If not, write to the Free Software Foundation, + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Davide Angelocola <davide.angelocola@gmail.com> */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#if HAVE_MBRTOWC +# include <stddef.h> +# include "mbchar.h" +# include "mbiter.h" +# include "mbuiter.h" /* FIXME: for MB_CUR_MAX */ +#else +# include <ctype.h> +#endif + +#include "xalloc.h" +#include "trim.h" + +char * +trim2(const char *s, int how) +{ + char *d; + + d = strdup(s); + + if (!d) + xalloc_die(); + +#if HAVE_MBRTOWC + if (MB_CUR_MAX > 1) + { + mbi_iterator_t i; + + /* Trim leading whitespaces. */ + if (how != TRIM_TRAILING) + { + mbi_init (i, d, strlen (d)); + + for (; mbi_avail (i) && mb_isspace (mbi_cur (i)); mbi_advance (i)) + ; + + memmove (d, mbi_cur_ptr (i), strlen (mbi_cur_ptr (i)) + 1); + } + + /* Trim trailing whitespaces. */ + if (how != TRIM_LEADING) + { + int state = 0; + char *r; + + mbi_init (i, d, strlen (d)); + + for (; mbi_avail (i); mbi_advance (i)) + { + if (state == 0 && mb_isspace (mbi_cur (i))) + { + state = 0; + continue; + } + + if (state == 0 && !mb_isspace (mbi_cur (i))) + { + state = 1; + continue; + } + + if (state == 1 && !mb_isspace (mbi_cur (i))) + { + state = 1; + continue; + } + + if (state == 1 && mb_isspace (mbi_cur (i))) + { + state = 2; + r = (char *) mbi_cur_ptr (i); + } + else if (state == 2 && mb_isspace (mbi_cur (i))) + { + state = 2; + } + else + { + state = 1; + } + } + + if (state == 2) + *r = '\0'; + } + } + else +#endif /* HAVE_MBRTOWC */ + { + char *p; + + /* Trim leading whitespaces. */ + if (how != TRIM_TRAILING) { + for (p = d; *p && isspace (*p); p++) + ; + + memmove (d, p, strlen (p) + 1); + } + + /* Trim trailing whitespaces. */ + if (how != TRIM_LEADING) { + for (p = d + strlen (d) - 1; p >= d && isspace (*p); p--) + *p = '\0'; + } + } + + return d; +} +
new file mode 100644 --- /dev/null +++ b/lib/trim.h @@ -0,0 +1,36 @@ +/* Removes leading and/or trailing whitespaces + Copyright (C) 2006 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. + If not, write to the Free Software Foundation, + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Davide Angelocola <davide.angelocola@gmail.com> */ + +/* Trim mode. */ +#define TRIM_TRAILING 0 +#define TRIM_LEADING 1 +#define TRIM_BOTH 2 + +/* Removes trailing and leading whitespaces. */ +#define trim(s) trim2((s), TRIM_BOTH) + +/* Removes trailing whitespaces. */ +#define trim_trailing(s) trim2((s), TRIM_TRAILING) + +/* Removes leading whitespaces. */ +#define trim_leading(s) trim2((s), TRIM_LEADING) + +char *trim2(const char *, int); +
new file mode 100644 --- /dev/null +++ b/modules/trim @@ -0,0 +1,24 @@ +Description: +trim() removes leading and/or trailing whitespaces + +Files: +lib/trim.c +lib/trim.h + +Depends-on: +xalloc +mbiter + +configure.ac: + +Makefile.am: +EXTRA_DIST += trim.h + +Include: +#include "trim.h" + +License: +GPL + +Maintainer: +Davide Angelocola