#pragma once
#include "SVGPoint.h"
#include "SVGValuePropertyList.h"
namespace WebCore {
class SVGPointList : public SVGValuePropertyList<SVGPoint> {
using Base = SVGValuePropertyList<SVGPoint>;
using Base::Base;
public:
static Ref<SVGPointList> create()
{
return adoptRef(*new SVGPointList());
}
static Ref<SVGPointList> create(SVGPropertyOwner* owner, SVGPropertyAccess access)
{
return adoptRef(*new SVGPointList(owner, access));
}
static Ref<SVGPointList> create(const SVGPointList& other, SVGPropertyAccess access)
{
return adoptRef(*new SVGPointList(other, access));
}
bool parse(const String& value)
{
clearItems();
auto upconvertedCharacters = StringView(value).upconvertedCharacters();
const UChar* cur = upconvertedCharacters;
const UChar* end = cur + value.length();
skipOptionalSVGSpaces(cur, end);
bool delimParsed = false;
while (cur < end) {
delimParsed = false;
float xPos = 0.0f;
if (!parseNumber(cur, end, xPos))
return false;
float yPos = 0.0f;
if (!parseNumber(cur, end, yPos, false))
return false;
skipOptionalSVGSpaces(cur, end);
if (cur < end && *cur == ',') {
delimParsed = true;
cur++;
}
skipOptionalSVGSpaces(cur, end);
append(SVGPoint::create({ xPos, yPos }));
}
return !delimParsed;
}
String valueAsString() const override
{
StringBuilder builder;
for (const auto& point : m_items) {
if (builder.length())
builder.append(' ');
builder.append(FormattedNumber::fixedPrecision(point->x()));
builder.append(' ');
builder.append(FormattedNumber::fixedPrecision(point->y()));
}
return builder.toString();
}
};
}