(svn r26384) -Fix [FS#5924]: Return correct values from ICU iterators in case of leading or trailing whitespace
This commit is contained in:
		@@ -752,7 +752,14 @@ public:
 | 
			
		||||
				/* The ICU word iterator considers both the start and the end of a word a valid
 | 
			
		||||
				 * break point, but we only want word starts. Move to the next location in
 | 
			
		||||
				 * case the new position points to whitespace. */
 | 
			
		||||
				while (pos != icu::BreakIterator::DONE && IsWhitespace(Utf16DecodeChar((const uint16 *)&this->utf16_str[pos]))) pos = this->word_itr->next();
 | 
			
		||||
				while (pos != icu::BreakIterator::DONE &&
 | 
			
		||||
						IsWhitespace(Utf16DecodeChar((const uint16 *)&this->utf16_str[pos]))) {
 | 
			
		||||
					int32_t new_pos = this->word_itr->next();
 | 
			
		||||
					/* Don't set it to DONE if it was valid before. Otherwise we'll return END
 | 
			
		||||
					 * even though the iterator wasn't at the end of the string before. */
 | 
			
		||||
					if (new_pos == icu::BreakIterator::DONE) break;
 | 
			
		||||
					pos = new_pos;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				this->char_itr->isBoundary(pos);
 | 
			
		||||
				break;
 | 
			
		||||
@@ -777,7 +784,14 @@ public:
 | 
			
		||||
				/* The ICU word iterator considers both the start and the end of a word a valid
 | 
			
		||||
				 * break point, but we only want word starts. Move to the previous location in
 | 
			
		||||
				 * case the new position points to whitespace. */
 | 
			
		||||
				while (pos != icu::BreakIterator::DONE && IsWhitespace(Utf16DecodeChar((const uint16 *)&this->utf16_str[pos]))) pos = this->word_itr->previous();
 | 
			
		||||
				while (pos != icu::BreakIterator::DONE &&
 | 
			
		||||
						IsWhitespace(Utf16DecodeChar((const uint16 *)&this->utf16_str[pos]))) {
 | 
			
		||||
					int32_t new_pos = this->word_itr->previous();
 | 
			
		||||
					/* Don't set it to DONE if it was valid before. Otherwise we'll return END
 | 
			
		||||
					 * even though the iterator wasn't at the start of the string before. */
 | 
			
		||||
					if (new_pos == icu::BreakIterator::DONE) break;
 | 
			
		||||
					pos = new_pos;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				this->char_itr->isBoundary(pos);
 | 
			
		||||
				break;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user