コード例 #1
0
ファイル: SVGViewSpec.cpp プロジェクト: mirror/chromium
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, ')');
}
コード例 #2
0
ファイル: SVGViewSpec.cpp プロジェクト: 335969568/Blink-1
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();
}
コード例 #3
0
ファイル: SVGViewSpec.cpp プロジェクト: mirror/chromium
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();
}
コード例 #4
0
ファイル: SVGViewSpec.cpp プロジェクト: 335969568/Blink-1
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;
}