--- parser3/src/main/pa_string.C 2003/09/29 09:42:12 1.181 +++ parser3/src/main/pa_string.C 2003/09/30 05:20:16 1.183 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_STRING_C="$Date: 2003/09/29 09:42:12 $"; +static const char* IDENT_STRING_C="$Date: 2003/09/30 05:20:16 $"; #include "pcre.h" @@ -167,11 +167,18 @@ String& String::mid(size_t substr_begin, } size_t String::pos(const String::Body substr, size_t this_offset, Language lang) const { - size_t substr_begin=body.pos(substr, this_offset); - if(substr_begin==CORD_NOT_FOUND || !langs.check_lang(lang, substr_begin, substr.length())) - return STRING_NOT_FOUND; + size_t substr_length=substr.length(); + while(true) { + size_t substr_begin=body.pos(substr, this_offset); + + if(substr_begin==CORD_NOT_FOUND) + return STRING_NOT_FOUND; - return substr_begin; + if(langs.check_lang(lang, substr_begin, substr_length)) + return substr_begin; + + this_offset=substr_begin+substr_length; + } } size_t String::pos(const String& substr, @@ -543,7 +550,8 @@ String::Cm String::serialize(size_t prol langs.for_each(body, serialize_lang_piece, &cur); // 4: letters body.for_each(serialize_body_char, serialize_body_piece, &cur); - // 5: zero terminator already there put by new(PointerFreeGC) + // 5: zero terminator + *cur=0; return result; }