Length* newCoordsArray(const String& string, int& len) { unsigned length = string.length(); const UChar* data = string.characters(); StringBuffer spacified(length); for (unsigned i = 0; i < length; i++) { UChar cc = data[i]; if (cc > '9' || (cc < '0' && cc != '-' && cc != '*' && cc != '.')) spacified[i] = ' '; else spacified[i] = cc; } RefPtr<StringImpl> str = StringImpl::adopt(spacified); str = str->simplifyWhiteSpace(); len = countCharacter(str->characters(), str->length(), ' ') + 1; Length* r = new Length[len]; int i = 0; int pos = 0; int pos2; while ((pos2 = str->find(' ', pos)) != -1) { r[i++] = parseLength(str->characters() + pos, pos2 - pos); pos = pos2+1; } r[i] = parseLength(str->characters() + pos, str->length() - pos); ASSERT(i == len - 1); return r; }
std::unique_ptr<Length[]> newCoordsArray(const String& string, int& len) { unsigned length = string.length(); StringBuffer<UChar> spacified(length); for (unsigned i = 0; i < length; i++) { UChar cc = string[i]; if (cc > '9' || (cc < '0' && cc != '-' && cc != '*' && cc != '.')) spacified[i] = ' '; else spacified[i] = cc; } RefPtr<StringImpl> str = StringImpl::adopt(spacified); str = str->simplifyWhiteSpace(); len = countCharacter(*str, ' ') + 1; auto r = std::make_unique<Length[]>(len); int i = 0; unsigned pos = 0; size_t pos2; auto upconvertedCharacters = StringView(str.get()).upconvertedCharacters(); while ((pos2 = str->find(' ', pos)) != notFound) { r[i++] = parseLength(upconvertedCharacters + pos, pos2 - pos); pos = pos2+1; } r[i] = parseLength(upconvertedCharacters + pos, str->length() - pos); ASSERT(i == len - 1); return r; }