bool SVGTransformable::parseTransformAttribute(SVGTransformList& list, const UChar*& currTransform, const UChar* end, TransformParsingMode mode) { if (mode == ClearList) list.clear(); bool delimParsed = false; while (currTransform < end) { delimParsed = false; SVGTransform::SVGTransformType type = SVGTransform::SVG_TRANSFORM_UNKNOWN; skipOptionalSVGSpaces(currTransform, end); if (!parseAndSkipType(currTransform, end, type)) return false; SVGTransform transform; if (!parseTransformValue(type, currTransform, end, transform)) return false; list.append(transform); skipOptionalSVGSpaces(currTransform, end); if (currTransform < end && *currTransform == ',') { delimParsed = true; ++currTransform; } skipOptionalSVGSpaces(currTransform, end); } return !delimParsed; }
SVGPropertyBase* SVGTransformListInterpolationType::appliedSVGValue( const InterpolableValue& interpolableValue, const NonInterpolableValue* nonInterpolableValue) const { SVGTransformList* result = SVGTransformList::create(); const InterpolableList& list = toInterpolableList(interpolableValue); const Vector<SVGTransformType>& transformTypes = toSVGTransformNonInterpolableValue(nonInterpolableValue) ->transformTypes(); for (size_t i = 0; i < list.length(); ++i) result->append(fromInterpolableValue(*list.get(i), transformTypes.at(i))); return result; }