OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2003 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2003 Lars Knoll (knoll@kde.org) |
3 * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) |
4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. | 4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. |
5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> | 5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> |
6 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> | 6 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> |
7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
8 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. | 8 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. |
9 * Copyright (C) 2012 Intel Corporation. All rights reserved. | 9 * Copyright (C) 2012 Intel Corporation. All rights reserved. |
10 * | 10 * |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 appendTo.append(c); | 193 appendTo.append(c); |
194 } | 194 } |
195 | 195 |
196 static void serializeCharacterAsCodePoint(UChar32 c, StringBuilder& appendTo) | 196 static void serializeCharacterAsCodePoint(UChar32 c, StringBuilder& appendTo) |
197 { | 197 { |
198 appendTo.append('\\'); | 198 appendTo.append('\\'); |
199 appendUnsignedAsHex(c, appendTo, Lowercase); | 199 appendUnsignedAsHex(c, appendTo, Lowercase); |
200 appendTo.append(' '); | 200 appendTo.append(' '); |
201 } | 201 } |
202 | 202 |
203 bool serializeIdentifier(const String& identifier, StringBuilder& appendTo) | 203 void serializeIdentifier(const String& identifier, StringBuilder& appendTo) |
204 { | 204 { |
205 bool isFirst = true; | 205 bool isFirst = true; |
206 bool isSecond = false; | 206 bool isSecond = false; |
207 bool isFirstCharHyphen = false; | 207 bool isFirstCharHyphen = false; |
208 unsigned index = 0; | 208 unsigned index = 0; |
209 while (index < identifier.length()) { | 209 while (index < identifier.length()) { |
210 UChar32 c = identifier.characterStartingAt(index); | 210 UChar32 c = identifier.characterStartingAt(index); |
211 if (c == 0) { | 211 if (c == 0) { |
212 // Check for lone surrogate which characterStartingAt does not retur
n. | 212 // Check for lone surrogate which characterStartingAt does not retur
n. |
213 c = identifier[index]; | 213 c = identifier[index]; |
214 if (c == 0) | |
215 return false; | |
216 } | 214 } |
217 | 215 |
218 index += U16_LENGTH(c); | 216 index += U16_LENGTH(c); |
219 | 217 |
220 if (c <= 0x1f || c == 0x7f || (0x30 <= c && c <= 0x39 && (isFirst || (is
Second && isFirstCharHyphen)))) | 218 if (c == 0) |
| 219 appendTo.append(0xfffd); |
| 220 else if (c <= 0x1f || c == 0x7f || (0x30 <= c && c <= 0x39 && (isFirst |
| (isSecond && isFirstCharHyphen)))) |
221 serializeCharacterAsCodePoint(c, appendTo); | 221 serializeCharacterAsCodePoint(c, appendTo); |
222 else if (c == 0x2d && isFirst && index == identifier.length()) | 222 else if (c == 0x2d && isFirst && index == identifier.length()) |
223 serializeCharacter(c, appendTo); | 223 serializeCharacter(c, appendTo); |
224 else if (0x80 <= c || c == 0x2d || c == 0x5f || (0x30 <= c && c <= 0x39)
|| (0x41 <= c && c <= 0x5a) || (0x61 <= c && c <= 0x7a)) | 224 else if (0x80 <= c || c == 0x2d || c == 0x5f || (0x30 <= c && c <= 0x39)
|| (0x41 <= c && c <= 0x5a) || (0x61 <= c && c <= 0x7a)) |
225 appendTo.append(c); | 225 appendTo.append(c); |
226 else | 226 else |
227 serializeCharacter(c, appendTo); | 227 serializeCharacter(c, appendTo); |
228 | 228 |
229 if (isFirst) { | 229 if (isFirst) { |
230 isFirst = false; | 230 isFirst = false; |
231 isSecond = true; | 231 isSecond = true; |
232 isFirstCharHyphen = (c == 0x2d); | 232 isFirstCharHyphen = (c == 0x2d); |
233 } else if (isSecond) { | 233 } else if (isSecond) { |
234 isSecond = false; | 234 isSecond = false; |
235 } | 235 } |
236 } | 236 } |
237 return true; | |
238 } | 237 } |
239 | 238 |
240 void serializeString(const String& string, StringBuilder& appendTo) | 239 void serializeString(const String& string, StringBuilder& appendTo) |
241 { | 240 { |
242 appendTo.append('\"'); | 241 appendTo.append('\"'); |
243 | 242 |
244 unsigned index = 0; | 243 unsigned index = 0; |
245 while (index < string.length()) { | 244 while (index < string.length()) { |
246 UChar32 c = string.characterStartingAt(index); | 245 UChar32 c = string.characterStartingAt(index); |
247 index += U16_LENGTH(c); | 246 index += U16_LENGTH(c); |
(...skipping 14 matching lines...) Expand all Loading... |
262 serializeString(string, builder); | 261 serializeString(string, builder); |
263 return builder.toString(); | 262 return builder.toString(); |
264 } | 263 } |
265 | 264 |
266 String serializeURI(const String& string) | 265 String serializeURI(const String& string) |
267 { | 266 { |
268 return "url(" + serializeString(string) + ")"; | 267 return "url(" + serializeString(string) + ")"; |
269 } | 268 } |
270 | 269 |
271 } // namespace blink | 270 } // namespace blink |
OLD | NEW |