OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2002, 2003 The Karbon Developers | 2 * Copyright (C) 2002, 2003 The Karbon Developers |
3 * Copyright (C) 2006 Alexander Kellett <lypanov@kde.org> | 3 * Copyright (C) 2006 Alexander Kellett <lypanov@kde.org> |
4 * Copyright (C) 2006, 2007 Rob Buis <buis@kde.org> | 4 * Copyright (C) 2006, 2007 Rob Buis <buis@kde.org> |
5 * Copyright (C) 2007, 2009, 2013 Apple Inc. All rights reserved. | 5 * Copyright (C) 2007, 2009, 2013 Apple Inc. All rights reserved. |
6 * | 6 * |
7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 const LChar* ptr = string.characters8(); | 231 const LChar* ptr = string.characters8(); |
232 const LChar* end = ptr + string.length(); | 232 const LChar* end = ptr + string.length(); |
233 return genericParseNumberOptionalNumber(ptr, end, x, y); | 233 return genericParseNumberOptionalNumber(ptr, end, x, y); |
234 } | 234 } |
235 const UChar* ptr = string.characters16(); | 235 const UChar* ptr = string.characters16(); |
236 const UChar* end = ptr + string.length(); | 236 const UChar* end = ptr + string.length(); |
237 return genericParseNumberOptionalNumber(ptr, end, x, y); | 237 return genericParseNumberOptionalNumber(ptr, end, x, y); |
238 } | 238 } |
239 | 239 |
240 template<typename CharType> | 240 template<typename CharType> |
241 static bool genericParseRect(const CharType*& ptr, const CharType* end, FloatRec
t& rect) | |
242 { | |
243 skipOptionalSVGSpaces(ptr, end); | |
244 | |
245 float x = 0; | |
246 float y = 0; | |
247 float width = 0; | |
248 float height = 0; | |
249 bool valid = parseNumber(ptr, end, x) && parseNumber(ptr, end, y) && parseNu
mber(ptr, end, width) && parseNumber(ptr, end, height, false); | |
250 rect = FloatRect(x, y, width, height); | |
251 return valid; | |
252 } | |
253 | |
254 bool parseRect(const String& string, FloatRect& rect) | |
255 { | |
256 if (string.isEmpty()) | |
257 return false; | |
258 if (string.is8Bit()) { | |
259 const LChar* ptr = string.characters8(); | |
260 const LChar* end = ptr + string.length(); | |
261 return genericParseRect(ptr, end, rect); | |
262 } | |
263 const UChar* ptr = string.characters16(); | |
264 const UChar* end = ptr + string.length(); | |
265 return genericParseRect(ptr, end, rect); | |
266 } | |
267 | |
268 template<typename CharType> | |
269 static bool genericParsePointsList(SVGPointList& pointsList, const CharType*& pt
r, const CharType* end) | |
270 { | |
271 skipOptionalSVGSpaces(ptr, end); | |
272 | |
273 bool delimParsed = false; | |
274 while (ptr < end) { | |
275 delimParsed = false; | |
276 float xPos = 0.0f; | |
277 if (!parseNumber(ptr, end, xPos)) | |
278 return false; | |
279 | |
280 float yPos = 0.0f; | |
281 if (!parseNumber(ptr, end, yPos, false)) | |
282 return false; | |
283 | |
284 skipOptionalSVGSpaces(ptr, end); | |
285 | |
286 if (ptr < end && *ptr == ',') { | |
287 delimParsed = true; | |
288 ptr++; | |
289 } | |
290 skipOptionalSVGSpaces(ptr, end); | |
291 | |
292 pointsList.append(FloatPoint(xPos, yPos)); | |
293 } | |
294 return ptr == end && !delimParsed; | |
295 } | |
296 | |
297 // FIXME: Why is the out parameter first? | |
298 bool pointsListFromSVGData(SVGPointList& pointsList, const String& points) | |
299 { | |
300 if (points.isEmpty()) | |
301 return true; | |
302 if (points.is8Bit()) { | |
303 const LChar* ptr = points.characters8(); | |
304 const LChar* end = ptr + points.length(); | |
305 return genericParsePointsList(pointsList, ptr, end); | |
306 } | |
307 const UChar* ptr = points.characters16(); | |
308 const UChar* end = ptr + points.length(); | |
309 return genericParsePointsList(pointsList, ptr, end); | |
310 } | |
311 | |
312 template<typename CharType> | |
313 static bool parseGlyphName(const CharType*& ptr, const CharType* end, HashSet<St
ring>& values) | 241 static bool parseGlyphName(const CharType*& ptr, const CharType* end, HashSet<St
ring>& values) |
314 { | 242 { |
315 skipOptionalSVGSpaces(ptr, end); | 243 skipOptionalSVGSpaces(ptr, end); |
316 | 244 |
317 while (ptr < end) { | 245 while (ptr < end) { |
318 // Leading and trailing white space, and white space before and after se
parators, will be ignored. | 246 // Leading and trailing white space, and white space before and after se
parators, will be ignored. |
319 const CharType* inputStart = ptr; | 247 const CharType* inputStart = ptr; |
320 while (ptr < end && *ptr != ',') | 248 while (ptr < end && *ptr != ',') |
321 ++ptr; | 249 ++ptr; |
322 | 250 |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
758 { | 686 { |
759 return parseTransformAttributeInternal(list, ptr, end, mode); | 687 return parseTransformAttributeInternal(list, ptr, end, mode); |
760 } | 688 } |
761 | 689 |
762 bool parseTransformAttribute(SVGTransformList& list, const UChar*& ptr, const UC
har* end, TransformParsingMode mode) | 690 bool parseTransformAttribute(SVGTransformList& list, const UChar*& ptr, const UC
har* end, TransformParsingMode mode) |
763 { | 691 { |
764 return parseTransformAttributeInternal(list, ptr, end, mode); | 692 return parseTransformAttributeInternal(list, ptr, end, mode); |
765 } | 693 } |
766 | 694 |
767 } | 695 } |
OLD | NEW |