X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fpbd%2Ftokenizer.h;h=325347351962d18fd97e446fcb9f930d255039b5;hb=95ccbc452f513a9d6f70de45bc413067e568364c;hp=a976b7934118868b1f66f3349467f93cac2ac701;hpb=22c20ab6f215c0ab24702a479aa6821c25a7d058;p=ardour.git diff --git a/libs/pbd/pbd/tokenizer.h b/libs/pbd/pbd/tokenizer.h index a976b79341..3253473519 100644 --- a/libs/pbd/pbd/tokenizer.h +++ b/libs/pbd/pbd/tokenizer.h @@ -1,21 +1,47 @@ +/* + Copyright (C) 2000-2007 Paul Davis + + 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 of the License, 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; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + #ifndef PBD_TOKENIZER #define PBD_TOKENIZER #include #include +#include "pbd/libpbd_visibility.h" +#include "pbd/whitespace.h" + namespace PBD { /** Tokenize string, this should work for standard - strings aswell as Glib::ustring. This is a bit of a hack, + strings as well as Glib::ustring. This is a bit of a hack, there are much better string tokenizing patterns out there. + If strip_whitespace is set to true, tokens will be checked to see + that they still have a length after stripping. If no length, they + are discarded. */ template -unsigned int +/*LIBPBD_API*/ unsigned int tokenize(const StringType& str, const StringType& delims, - Iter it) + Iter it, + bool strip_whitespace=false) { typename StringType::size_type start_pos = 0; typename StringType::size_type end_pos = 0; @@ -28,14 +54,30 @@ tokenize(const StringType& str, if (end_pos == str.npos) { end_pos = str.length(); } - *it++ = str.substr(start_pos, end_pos - start_pos); + if (strip_whitespace) { + StringType stripped = str.substr(start_pos, end_pos - start_pos); + strip_whitespace_edges (stripped); + if (stripped.length()) { + *it++ = stripped; + } + } else { + *it++ = str.substr(start_pos, end_pos - start_pos); + } ++token_count; start_pos = str.find_first_not_of(delims, end_pos + 1); } } while (start_pos != str.npos); if (start_pos != str.npos) { - *it++ = str.substr(start_pos, str.length() - start_pos); + if (strip_whitespace) { + StringType stripped = str.substr(start_pos, str.length() - start_pos); + strip_whitespace_edges (stripped); + if (stripped.length()) { + *it++ = stripped; + } + } else { + *it++ = str.substr(start_pos, str.length() - start_pos); + } ++token_count; }