Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(690)

Side by Side Diff: third_party/WebKit/Source/core/svg/SVGNumber.cpp

Issue 1667353003: Error reporting for number-or-percentage (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2014 Google Inc. All rights reserved. 2 * Copyright (C) 2014 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 float SVGNumber::calculateDistance(PassRefPtrWillBeRawPtr<SVGPropertyBase> other , SVGElement*) 99 float SVGNumber::calculateDistance(PassRefPtrWillBeRawPtr<SVGPropertyBase> other , SVGElement*)
100 { 100 {
101 return fabsf(m_value - toSVGNumber(other)->value()); 101 return fabsf(m_value - toSVGNumber(other)->value());
102 } 102 }
103 103
104 PassRefPtrWillBeRawPtr<SVGNumber> SVGNumberAcceptPercentage::clone() const 104 PassRefPtrWillBeRawPtr<SVGNumber> SVGNumberAcceptPercentage::clone() const
105 { 105 {
106 return create(m_value); 106 return create(m_value);
107 } 107 }
108 108
109 template<typename CharType>
110 static SVGParsingError parseNumberOrPercentage(const CharType*& ptr, const CharT ype* end, float& number)
111 {
112 const CharType* start = ptr;
113 if (!parseNumber(ptr, end, number, AllowLeadingWhitespace))
114 return SVGParsingError(SVGParseStatus::ExpectedNumberOrPercentage, ptr - start);
115 if (ptr < end && *ptr == '%') {
116 number /= 100;
117 ptr++;
118 }
119 if (skipOptionalSVGSpaces(ptr, end))
120 return SVGParsingError(SVGParseStatus::TrailingGarbage, ptr - start);
121 return SVGParseStatus::NoError;
122 }
123
109 SVGParsingError SVGNumberAcceptPercentage::setValueAsString(const String& string ) 124 SVGParsingError SVGNumberAcceptPercentage::setValueAsString(const String& string )
110 { 125 {
111 if (parseNumberOrPercentage(string, m_value)) 126 m_value = 0;
112 return SVGParseStatus::NoError;
113 127
114 m_value = 0; 128 if (string.isEmpty())
115 return SVGParseStatus::ParsingFailed; 129 return SVGParseStatus::ExpectedNumberOrPercentage;
130
131 float number = 0;
132 SVGParsingError error;
133 if (string.is8Bit()) {
134 const LChar* ptr = string.characters8();
135 const LChar* end = ptr + string.length();
136 error = parseNumberOrPercentage(ptr, end, number);
137 } else {
138 const UChar* ptr = string.characters16();
139 const UChar* end = ptr + string.length();
140 error = parseNumberOrPercentage(ptr, end, number);
141 }
142 if (error == SVGParseStatus::NoError)
143 m_value = number;
144 return error;
116 } 145 }
117 146
118 SVGNumberAcceptPercentage::SVGNumberAcceptPercentage(float value) 147 SVGNumberAcceptPercentage::SVGNumberAcceptPercentage(float value)
119 : SVGNumber(value) 148 : SVGNumber(value)
120 { 149 {
121 } 150 }
122 151
123 } // namespace blink 152 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/TestExpectations ('k') | third_party/WebKit/Source/core/svg/SVGParserUtilities.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698