Reviewed by Oliver.
authorzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 29 Dec 2007 12:50:57 +0000 (12:50 +0000)
committerzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 29 Dec 2007 12:50:57 +0000 (12:50 +0000)
Refactor SVGAnimationElement::parseValues into a generic function parseDelimitedString.
SVGAnimationElement needs to parse semicolon-seperated strings, SVGGlyphElement comma-seperated.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@29027 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/svg/SVGAnimationElement.cpp
WebCore/svg/SVGParserUtilities.cpp
WebCore/svg/SVGParserUtilities.h

index 68e2439..b19fccc 100644 (file)
@@ -1,5 +1,18 @@
 2007-12-29  Nikolas Zimmermann  <zimmermann@kde.org>
 
 2007-12-29  Nikolas Zimmermann  <zimmermann@kde.org>
 
+        Reviewed by Oliver.
+
+        Refactor SVGAnimationElement::parseValues into a generic function parseDelimitedString.
+        SVGAnimationElement needs to parse semicolon-seperated strings, SVGGlyphElement comma-seperated.
+
+        * svg/SVGAnimationElement.cpp:
+        (WebCore::SVGAnimationElement::parseMappedAttribute):
+        * svg/SVGParserUtilities.cpp:
+        (WebCore::parseDelimitedString):
+        * svg/SVGParserUtilities.h:
+
+2007-12-29  Nikolas Zimmermann  <zimmermann@kde.org>
+
         Reviewed by Maciej.
 
         Add new helper structure SVGFontData - FontData holds this object as OwnPtr.
         Reviewed by Maciej.
 
         Add new helper structure SVGFontData - FontData holds this object as OwnPtr.
index 5bb5541..e0e9ced 100644 (file)
@@ -137,30 +137,6 @@ void SVGAnimationElement::parseKeyNumbers(Vector<float>& keyNumbers, const Strin
     }
 }
 
     }
 }
 
-static void parseValues(Vector<String>& values, const String& value)
-{
-    const UChar* ptr = value.characters();
-    const UChar* end = ptr + value.length();
-    skipOptionalSpaces(ptr, end);
-    while (ptr < end) {
-        // SMIL 3.2.2 : Leading and trailing white space, and white space before and after semicolon separators, will be ignored.
-        const UChar* valueStart = ptr;
-        while (ptr < end && *ptr != ';') // careful not to ignore whitespace inside values
-            ptr++;
-        if (ptr == valueStart)
-            break;
-        
-        // walk backwards from the ; to ignore any whitespace
-        const UChar* valueEnd = ptr - 1;
-        while (valueStart < valueEnd && isWhitespace(*valueEnd))
-            valueEnd--;
-        
-        values.append(String(valueStart, valueEnd - valueStart + 1));
-        
-        skipOptionalSpacesOrDelimiter(ptr, end, ';');
-    }
-}
-
 static void parseKeySplines(Vector<SVGAnimationElement::KeySpline>& keySplines, const String& value)
 {
     float number = 0.0f;
 static void parseKeySplines(Vector<SVGAnimationElement::KeySpline>& keySplines, const String& value)
 {
     float number = 0.0f;
@@ -301,7 +277,7 @@ void SVGAnimationElement::parseMappedAttribute(MappedAttribute* attr)
             m_calcMode = CALCMODE_PACED;
     } else if (attr->name() == SVGNames::valuesAttr) {
         m_values.clear();
             m_calcMode = CALCMODE_PACED;
     } else if (attr->name() == SVGNames::valuesAttr) {
         m_values.clear();
-        parseValues(m_values, attr->value());
+        m_values = parseDelimitedString(attr->value(), ';');
     } else if (attr->name() == SVGNames::keyTimesAttr) {
         m_keyTimes.clear();
         parseKeyNumbers(m_keyTimes, attr->value());
     } else if (attr->name() == SVGNames::keyTimesAttr) {
         m_keyTimes.clear();
         parseKeyNumbers(m_keyTimes, attr->value());
index 8591411..894af80 100644 (file)
@@ -839,7 +839,35 @@ bool pathSegListFromSVGData(SVGPathSegList* path , const String& d, bool process
     return builder.build(path, d, process);
 }
 
     return builder.build(path, d, process);
 }
 
+Vector<String> parseDelimitedString(const String& input, const char seperator)
+{
+    Vector<String> values;
+
+    const UChar* ptr = input.characters();
+    const UChar* end = ptr + input.length();
+    skipOptionalSpaces(ptr, end);
+
+    while (ptr < end) {
+        // Leading and trailing white space, and white space before and after semicolon separators, will be ignored.
+        const UChar* inputStart = ptr;
+        while (ptr < end && *ptr != seperator) // careful not to ignore whitespace inside inputs
+            ptr++;
+
+        if (ptr == inputStart)
+            break;
+
+        // walk backwards from the ; to ignore any whitespace
+        const UChar* inputEnd = ptr - 1;
+        while (inputStart < inputEnd && isWhitespace(*inputEnd))
+            inputEnd--;
+
+        values.append(String(inputStart, inputEnd - inputStart + 1));
+        skipOptionalSpacesOrDelimiter(ptr, end, seperator);
+    }
+
+    return values;
+}
+
 }
 
 }
 
-// vim:ts=4:noet
 #endif // ENABLE(SVG)
 #endif // ENABLE(SVG)
index dafb354..17c8b1b 100644 (file)
@@ -84,10 +84,9 @@ namespace WebCore
     bool pointsListFromSVGData(SVGPointList* pointsList, const String& points);
     bool pathFromSVGData(Path& path, const String& d);
     bool pathSegListFromSVGData(SVGPathSegList* pathSegList, const String& d, bool process = false);
     bool pointsListFromSVGData(SVGPointList* pointsList, const String& points);
     bool pathFromSVGData(Path& path, const String& d);
     bool pathSegListFromSVGData(SVGPathSegList* pathSegList, const String& d, bool process = false);
+    Vector<String> parseDelimitedString(const String& input, const char seperator);
 
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
 #endif
 
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
 #endif
-
-// vim:ts=4:noet