aboutsummaryrefslogtreecommitdiffhomepage
path: root/experimental/svg/model/SkSVGDOM.cpp
diff options
context:
space:
mode:
authorGravatar fmalita <fmalita@chromium.org>2016-08-08 13:58:50 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-08-08 13:58:50 -0700
commit61f36b37084e7b1c80cfc485825588604a401c9a (patch)
tree335bf7fd27c8950b339f5757f47b86daca0ccfd6 /experimental/svg/model/SkSVGDOM.cpp
parent0adbd3e0a61c039fea1d47c006daa462bae42318 (diff)
[SVGDom] Improve whitespace handling in style parsing
Handle whitespace-padded style names/values. R=stephana@google.com,robertphillips@google.com GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2225623002 Review-Url: https://codereview.chromium.org/2225623002
Diffstat (limited to 'experimental/svg/model/SkSVGDOM.cpp')
-rw-r--r--experimental/svg/model/SkSVGDOM.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/experimental/svg/model/SkSVGDOM.cpp b/experimental/svg/model/SkSVGDOM.cpp
index 9b67484fbc..c4fdcb172b 100644
--- a/experimental/svg/model/SkSVGDOM.cpp
+++ b/experimental/svg/model/SkSVGDOM.cpp
@@ -82,6 +82,18 @@ bool SetViewBoxAttribute(const sk_sp<SkSVGNode>& node, SkSVGAttribute attr,
return true;
}
+SkString TrimmedString(const char* first, const char* last) {
+ SkASSERT(first);
+ SkASSERT(last);
+ SkASSERT(first <= last);
+
+ while (first <= last && *first <= ' ') { first++; }
+ while (first <= last && *last <= ' ') { last--; }
+
+ SkASSERT(last - first + 1 >= 0);
+ return SkString(first, SkTo<size_t>(last - first + 1));
+}
+
// Breaks a "foo: bar; baz: ..." string into key:value pairs.
class StyleIterator {
public:
@@ -96,8 +108,8 @@ public:
const char* valueSep = strchr(fPos, ':');
if (valueSep && valueSep < sep) {
- name.set(fPos, valueSep - fPos);
- value.set(valueSep + 1, sep - valueSep - 1);
+ name = TrimmedString(fPos, valueSep - 1);
+ value = TrimmedString(valueSep + 1, sep - 1);
}
fPos = *sep ? sep + 1 : nullptr;