 Chromium Code Reviews
 Chromium Code Reviews Issue 2225623002:
  [SVGDom] Improve whitespace handling in style parsing  (Closed) 
  Base URL: https://chromium.googlesource.com/skia.git@master
    
  
    Issue 2225623002:
  [SVGDom] Improve whitespace handling in style parsing  (Closed) 
  Base URL: https://chromium.googlesource.com/skia.git@master| OLD | NEW | 
|---|---|
| 1 /* | 1 /* | 
| 2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. | 
| 3 * | 3 * | 
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be | 
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. | 
| 6 */ | 6 */ | 
| 7 | 7 | 
| 8 #include "SkCanvas.h" | 8 #include "SkCanvas.h" | 
| 9 #include "SkDOM.h" | 9 #include "SkDOM.h" | 
| 10 #include "SkParse.h" | 10 #include "SkParse.h" | 
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 119 | 119 | 
| 120 std::tuple<SkString, SkString> next() { | 120 std::tuple<SkString, SkString> next() { | 
| 121 SkString name, value; | 121 SkString name, value; | 
| 122 | 122 | 
| 123 if (fPos) { | 123 if (fPos) { | 
| 124 const char* sep = this->nextSeparator(); | 124 const char* sep = this->nextSeparator(); | 
| 125 SkASSERT(*sep == ';' || *sep == '\0'); | 125 SkASSERT(*sep == ';' || *sep == '\0'); | 
| 126 | 126 | 
| 127 const char* valueSep = strchr(fPos, ':'); | 127 const char* valueSep = strchr(fPos, ':'); | 
| 128 if (valueSep && valueSep < sep) { | 128 if (valueSep && valueSep < sep) { | 
| 129 name.set(fPos, valueSep - fPos); | 129 name = TrimmedString(fPos, valueSep - 1); | 
| 130 value.set(valueSep + 1, sep - valueSep - 1); | 130 value = TrimmedString(valueSep + 1, sep - 1); | 
| 131 } | 131 } | 
| 132 | 132 | 
| 133 fPos = *sep ? sep + 1 : nullptr; | 133 fPos = *sep ? sep + 1 : nullptr; | 
| 134 } | 134 } | 
| 135 | 135 | 
| 136 return std::make_tuple(name, value); | 136 return std::make_tuple(name, value); | 
| 137 } | 137 } | 
| 138 | 138 | 
| 139 private: | 139 private: | 
| 140 const char* nextSeparator() const { | 140 const char* nextSeparator() const { | 
| 141 const char* sep = fPos; | 141 const char* sep = fPos; | 
| 142 while (*sep != ';' && *sep != '\0') { | 142 while (*sep != ';' && *sep != '\0') { | 
| 143 sep++; | 143 sep++; | 
| 144 } | 144 } | 
| 145 return sep; | 145 return sep; | 
| 146 } | 146 } | 
| 147 | 147 | 
| 
robertphillips
2016/08/08 12:39:30
Does this need to be class-scoped? It seems like t
 
f(malita)
2016/08/08 13:00:02
Done/moved out of the class.
 | |
| 148 static SkString TrimmedString(const char* first, const char* last) { | |
| 149 SkASSERT(first); | |
| 150 SkASSERT(last); | |
| 151 SkASSERT(first <= last); | |
| 152 | |
| 153 while (first <= last && *first <= ' ') { first++; } | |
| 154 while (first <= last && *last <= ' ') { last--; } | |
| 155 | |
| 156 SkASSERT(last - first + 1 >= 0); | |
| 157 return SkString(first, SkTo<size_t>(last - first + 1)); | |
| 158 } | |
| 159 | |
| 148 const char* fPos; | 160 const char* fPos; | 
| 149 }; | 161 }; | 
| 150 | 162 | 
| 151 void set_string_attribute(const sk_sp<SkSVGNode>& node, const char* name, const char* value); | 163 void set_string_attribute(const sk_sp<SkSVGNode>& node, const char* name, const char* value); | 
| 152 | 164 | 
| 153 bool SetStyleAttributes(const sk_sp<SkSVGNode>& node, SkSVGAttribute, | 165 bool SetStyleAttributes(const sk_sp<SkSVGNode>& node, SkSVGAttribute, | 
| 154 const char* stringValue) { | 166 const char* stringValue) { | 
| 155 | 167 | 
| 156 SkString name, value; | 168 SkString name, value; | 
| 157 StyleIterator iter(stringValue); | 169 StyleIterator iter(stringValue); | 
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 294 if (fRoot) { | 306 if (fRoot) { | 
| 295 SkSVGRenderContext ctx(fContainerSize); | 307 SkSVGRenderContext ctx(fContainerSize); | 
| 296 fRoot->render(canvas, ctx); | 308 fRoot->render(canvas, ctx); | 
| 297 } | 309 } | 
| 298 } | 310 } | 
| 299 | 311 | 
| 300 void SkSVGDOM::setContainerSize(const SkSize& containerSize) { | 312 void SkSVGDOM::setContainerSize(const SkSize& containerSize) { | 
| 301 // TODO: inval | 313 // TODO: inval | 
| 302 fContainerSize = containerSize; | 314 fContainerSize = containerSize; | 
| 303 } | 315 } | 
| OLD | NEW |