bool SVGViewSpec::parseViewSpecInternal(const CharType* ptr, const CharType* end) { if (!skipToken(ptr, end, "svgView")) return false; if (!skipExactly<CharType>(ptr, end, '(')) return false; while (ptr < end && *ptr != ')') { ViewSpecFunctionType functionType = scanViewSpecFunction(ptr, end); if (functionType == Unknown) return false; if (!skipExactly<CharType>(ptr, end, '(')) return false; switch (functionType) { case ViewBox: { float x = 0.0f; float y = 0.0f; float width = 0.0f; float height = 0.0f; if (!(parseNumber(ptr, end, x) && parseNumber(ptr, end, y) && parseNumber(ptr, end, width) && parseNumber(ptr, end, height, DisallowWhitespace))) return false; updateViewBox(FloatRect(x, y, width, height)); break; } case ViewTarget: { const CharType* viewTargetStart = ptr; skipUntil<CharType>(ptr, end, ')'); if (ptr == viewTargetStart) return false; m_viewTargetString = String(viewTargetStart, ptr - viewTargetStart); break; } case ZoomAndPan: if (!parseZoomAndPan(ptr, end)) return false; break; case PreserveAspectRatio: if (!preserveAspectRatio()->baseValue()->parse(ptr, end, false)) return false; break; case Transform: m_transform->baseValue()->parse(ptr, end); break; default: NOTREACHED(); break; } if (!skipExactly<CharType>(ptr, end, ')')) return false; skipExactly<CharType>(ptr, end, ';'); } return skipExactly<CharType>(ptr, end, ')'); }
void SVGViewSpec::reset() { resetZoomAndPan(); m_transform->baseValue()->clear(); updateViewBox(FloatRect()); ASSERT(preserveAspectRatio()); preserveAspectRatio()->baseValue()->setAlign(SVGPreserveAspectRatio::SVG_PRESERVEASPECTRATIO_XMIDYMID); preserveAspectRatio()->baseValue()->setMeetOrSlice(SVGPreserveAspectRatio::SVG_MEETORSLICE_MEET); m_viewTargetString = emptyString(); }
void SVGViewSpec::reset() { resetZoomAndPan(); m_transform->baseValue()->clear(); updateViewBox(FloatRect()); ASSERT(preserveAspectRatio()); preserveAspectRatio()->baseValue()->setAlign( SVGPreserveAspectRatio::kSvgPreserveaspectratioXmidymid); preserveAspectRatio()->baseValue()->setMeetOrSlice( SVGPreserveAspectRatio::kSvgMeetorsliceMeet); m_viewTargetString = emptyString(); }
bool SVGViewSpec::parseViewSpecInternal(const CharType* ptr, const CharType* end) { if (!skipString(ptr, end, svgViewSpec, WTF_ARRAY_LENGTH(svgViewSpec))) return false; if (ptr >= end || *ptr != '(') return false; ptr++; while (ptr < end && *ptr != ')') { if (*ptr == 'v') { if (skipString(ptr, end, viewBoxSpec, WTF_ARRAY_LENGTH(viewBoxSpec))) { if (ptr >= end || *ptr != '(') return false; ptr++; float x = 0.0f; float y = 0.0f; float width = 0.0f; float height = 0.0f; if (!(parseNumber(ptr, end, x) && parseNumber(ptr, end, y) && parseNumber(ptr, end, width) && parseNumber(ptr, end, height, DisallowWhitespace))) return false; updateViewBox(FloatRect(x, y, width, height)); if (ptr >= end || *ptr != ')') return false; ptr++; } else if (skipString(ptr, end, viewTargetSpec, WTF_ARRAY_LENGTH(viewTargetSpec))) { if (ptr >= end || *ptr != '(') return false; const CharType* viewTargetStart = ++ptr; while (ptr < end && *ptr != ')') ptr++; if (ptr >= end) return false; m_viewTargetString = String(viewTargetStart, ptr - viewTargetStart); ptr++; } else return false; } else if (*ptr == 'z') { if (!skipString(ptr, end, zoomAndPanSpec, WTF_ARRAY_LENGTH(zoomAndPanSpec))) return false; if (ptr >= end || *ptr != '(') return false; ptr++; if (!parseZoomAndPan(ptr, end)) return false; if (ptr >= end || *ptr != ')') return false; ptr++; } else if (*ptr == 'p') { if (!skipString(ptr, end, preserveAspectRatioSpec, WTF_ARRAY_LENGTH(preserveAspectRatioSpec))) return false; if (ptr >= end || *ptr != '(') return false; ptr++; if (!preserveAspectRatio()->baseValue()->parse(ptr, end, false)) return false; if (ptr >= end || *ptr != ')') return false; ptr++; } else if (*ptr == 't') { if (!skipString(ptr, end, transformSpec, WTF_ARRAY_LENGTH(transformSpec))) return false; if (ptr >= end || *ptr != '(') return false; ptr++; m_transform->baseValue()->parse(ptr, end); if (ptr >= end || *ptr != ')') return false; ptr++; } else return false; if (ptr < end && *ptr == ';') ptr++; } if (ptr >= end || *ptr != ')') return false; return true; }