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

Side by Side Diff: Source/core/svg/SVGPreserveAspectRatio.cpp

Issue 144463009: Refactor SVGPreserveAspectRatio::parseInternal() (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org> 2 * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org>
3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> 3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org>
4 * Copyright (C) 2010 Dirk Schulze <krit@webkit.org> 4 * Copyright (C) 2010 Dirk Schulze <krit@webkit.org>
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 RefPtr<SVGPreserveAspectRatio> preserveAspectRatio = create(); 60 RefPtr<SVGPreserveAspectRatio> preserveAspectRatio = create();
61 61
62 preserveAspectRatio->setValueAsString(value, IGNORE_EXCEPTION); 62 preserveAspectRatio->setValueAsString(value, IGNORE_EXCEPTION);
63 63
64 return preserveAspectRatio.release(); 64 return preserveAspectRatio.release();
65 } 65 }
66 66
67 template<typename CharType> 67 template<typename CharType>
68 bool SVGPreserveAspectRatio::parseInternal(const CharType*& ptr, const CharType* end, bool validate) 68 bool SVGPreserveAspectRatio::parseInternal(const CharType*& ptr, const CharType* end, bool validate)
69 { 69 {
70 // FIXME: Rewrite this parser, without gotos! 70 SVGPreserveAspectRatioType align = SVG_PRESERVEASPECTRATIO_XMIDYMID;
71 SVGMeetOrSliceType meetOrSlice = SVG_MEETORSLICE_MEET;
72
73 setAlign(align);
74 setMeetOrSlice(meetOrSlice);
75
71 if (!skipOptionalSVGSpaces(ptr, end)) 76 if (!skipOptionalSVGSpaces(ptr, end))
72 goto bailOut; 77 return false;
73 78
74 if (*ptr == 'd') { 79 if (*ptr == 'd') {
75 if (!skipString(ptr, end, "defer")) 80 if (!skipString(ptr, end, "defer"))
76 goto bailOut; 81 return false;
77 82
78 // FIXME: We just ignore the "defer" here. 83 // FIXME: We just ignore the "defer" here.
79 if (ptr == end) 84 if (ptr == end)
80 return true; 85 return true;
81 86
82 if (!skipOptionalSVGSpaces(ptr, end)) 87 if (!skipOptionalSVGSpaces(ptr, end))
83 goto bailOut; 88 return false;
84 } 89 }
85 90
86 if (*ptr == 'n') { 91 if (*ptr == 'n') {
87 if (!skipString(ptr, end, "none")) 92 if (!skipString(ptr, end, "none"))
88 goto bailOut; 93 return false;
89 m_align = SVG_PRESERVEASPECTRATIO_NONE; 94 align = SVG_PRESERVEASPECTRATIO_NONE;
90 skipOptionalSVGSpaces(ptr, end); 95 skipOptionalSVGSpaces(ptr, end);
91 } else if (*ptr == 'x') { 96 } else if (*ptr == 'x') {
92 if ((end - ptr) < 8) 97 if ((end - ptr) < 8)
93 goto bailOut; 98 return false;
94 if (ptr[1] != 'M' || ptr[4] != 'Y' || ptr[5] != 'M') 99 if (ptr[1] != 'M' || ptr[4] != 'Y' || ptr[5] != 'M')
95 goto bailOut; 100 return false;
96 if (ptr[2] == 'i') { 101 if (ptr[2] == 'i') {
97 if (ptr[3] == 'n') { 102 if (ptr[3] == 'n') {
98 if (ptr[6] == 'i') { 103 if (ptr[6] == 'i') {
99 if (ptr[7] == 'n') 104 if (ptr[7] == 'n')
100 m_align = SVG_PRESERVEASPECTRATIO_XMINYMIN; 105 align = SVG_PRESERVEASPECTRATIO_XMINYMIN;
101 else if (ptr[7] == 'd') 106 else if (ptr[7] == 'd')
102 m_align = SVG_PRESERVEASPECTRATIO_XMINYMID; 107 align = SVG_PRESERVEASPECTRATIO_XMINYMID;
103 else 108 else
104 goto bailOut; 109 return false;
105 } else if (ptr[6] == 'a' && ptr[7] == 'x') 110 } else if (ptr[6] == 'a' && ptr[7] == 'x') {
106 m_align = SVG_PRESERVEASPECTRATIO_XMINYMAX; 111 align = SVG_PRESERVEASPECTRATIO_XMINYMAX;
107 else 112 } else {
108 goto bailOut; 113 return false;
114 }
109 } else if (ptr[3] == 'd') { 115 } else if (ptr[3] == 'd') {
110 if (ptr[6] == 'i') { 116 if (ptr[6] == 'i') {
111 if (ptr[7] == 'n') 117 if (ptr[7] == 'n')
112 m_align = SVG_PRESERVEASPECTRATIO_XMIDYMIN; 118 align = SVG_PRESERVEASPECTRATIO_XMIDYMIN;
113 else if (ptr[7] == 'd') 119 else if (ptr[7] == 'd')
114 m_align = SVG_PRESERVEASPECTRATIO_XMIDYMID; 120 align = SVG_PRESERVEASPECTRATIO_XMIDYMID;
115 else 121 else
116 goto bailOut; 122 return false;
117 } else if (ptr[6] == 'a' && ptr[7] == 'x') 123 } else if (ptr[6] == 'a' && ptr[7] == 'x') {
118 m_align = SVG_PRESERVEASPECTRATIO_XMIDYMAX; 124 align = SVG_PRESERVEASPECTRATIO_XMIDYMAX;
119 else 125 } else {
120 goto bailOut; 126 return false;
121 } else 127 }
122 goto bailOut; 128 } else {
129 return false;
130 }
123 } else if (ptr[2] == 'a' && ptr[3] == 'x') { 131 } else if (ptr[2] == 'a' && ptr[3] == 'x') {
124 if (ptr[6] == 'i') { 132 if (ptr[6] == 'i') {
125 if (ptr[7] == 'n') 133 if (ptr[7] == 'n')
126 m_align = SVG_PRESERVEASPECTRATIO_XMAXYMIN; 134 align = SVG_PRESERVEASPECTRATIO_XMAXYMIN;
127 else if (ptr[7] == 'd') 135 else if (ptr[7] == 'd')
128 m_align = SVG_PRESERVEASPECTRATIO_XMAXYMID; 136 align = SVG_PRESERVEASPECTRATIO_XMAXYMID;
129 else 137 else
130 goto bailOut; 138 return false;
131 } else if (ptr[6] == 'a' && ptr[7] == 'x') 139 } else if (ptr[6] == 'a' && ptr[7] == 'x') {
132 m_align = SVG_PRESERVEASPECTRATIO_XMAXYMAX; 140 align = SVG_PRESERVEASPECTRATIO_XMAXYMAX;
133 else 141 } else {
134 goto bailOut; 142 return false;
135 } else 143 }
136 goto bailOut; 144 } else {
145 return false;
146 }
137 ptr += 8; 147 ptr += 8;
138 skipOptionalSVGSpaces(ptr, end); 148 skipOptionalSVGSpaces(ptr, end);
139 } else 149 } else {
140 goto bailOut; 150 return false;
151 }
141 152
142 if (ptr < end) { 153 if (ptr < end) {
143 if (*ptr == 'm') { 154 if (*ptr == 'm') {
144 if (!skipString(ptr, end, "meet")) 155 if (!skipString(ptr, end, "meet"))
145 goto bailOut; 156 return false;
146 skipOptionalSVGSpaces(ptr, end); 157 skipOptionalSVGSpaces(ptr, end);
147 } else if (*ptr == 's') { 158 } else if (*ptr == 's') {
148 if (!skipString(ptr, end, "slice")) 159 if (!skipString(ptr, end, "slice"))
149 goto bailOut; 160 return false;
150 skipOptionalSVGSpaces(ptr, end); 161 skipOptionalSVGSpaces(ptr, end);
151 if (m_align != SVG_PRESERVEASPECTRATIO_NONE) 162 if (align != SVG_PRESERVEASPECTRATIO_NONE)
gyuyoung-inactive 2014/02/11 13:53:56 This line caused the failure of test. This cl keep
152 m_meetOrSlice = SVG_MEETORSLICE_SLICE; 163 meetOrSlice = SVG_MEETORSLICE_SLICE;
153 } 164 }
154 } 165 }
155 166
156 if (end != ptr && validate) { 167 if (end != ptr && validate)
157 bailOut:
158 m_align = SVG_PRESERVEASPECTRATIO_XMIDYMID;
159 m_meetOrSlice = SVG_MEETORSLICE_MEET;
160 return false; 168 return false;
161 } 169
170 setAlign(align);
171 setMeetOrSlice(meetOrSlice);
172
162 return true; 173 return true;
163 } 174 }
164 175
165 void SVGPreserveAspectRatio::setValueAsString(const String& string, ExceptionSta te& exceptionState) 176 void SVGPreserveAspectRatio::setValueAsString(const String& string, ExceptionSta te& exceptionState)
166 { 177 {
167 setDefault(); 178 setDefault();
168 179
169 if (string.isEmpty()) 180 if (string.isEmpty())
170 return; 181 return;
171 182
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 m_meetOrSlice = preserveAspectRatioToUse->m_meetOrSlice; 415 m_meetOrSlice = preserveAspectRatioToUse->m_meetOrSlice;
405 } 416 }
406 417
407 float SVGPreserveAspectRatio::calculateDistance(PassRefPtr<NewSVGPropertyBase> t oValue, SVGElement* contextElement) 418 float SVGPreserveAspectRatio::calculateDistance(PassRefPtr<NewSVGPropertyBase> t oValue, SVGElement* contextElement)
408 { 419 {
409 // No paced animations for SVGPreserveAspectRatio. 420 // No paced animations for SVGPreserveAspectRatio.
410 return -1; 421 return -1;
411 } 422 }
412 423
413 } 424 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698