| 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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 | 62 |
| 63 if (!length) | 63 if (!length) |
| 64 return false; | 64 return false; |
| 65 | 65 |
| 66 if (string.is8Bit()) | 66 if (string.is8Bit()) |
| 67 return isCSSTokenizerIdentifier(string.characters8(), length); | 67 return isCSSTokenizerIdentifier(string.characters8(), length); |
| 68 return isCSSTokenizerIdentifier(string.characters16(), length); | 68 return isCSSTokenizerIdentifier(string.characters16(), length); |
| 69 } | 69 } |
| 70 | 70 |
| 71 template <typename CharacterType> | 71 template <typename CharacterType> |
| 72 static inline bool isCSSTokenizerURL(const CharacterType* characters, unsigned l
ength) | |
| 73 { | |
| 74 const CharacterType* end = characters + length; | |
| 75 | |
| 76 for (; characters != end; ++characters) { | |
| 77 CharacterType c = characters[0]; | |
| 78 switch (c) { | |
| 79 case '!': | |
| 80 case '#': | |
| 81 case '$': | |
| 82 case '%': | |
| 83 case '&': | |
| 84 break; | |
| 85 default: | |
| 86 if (c < '*') | |
| 87 return false; | |
| 88 if (c <= '~') | |
| 89 break; | |
| 90 if (c < 128) | |
| 91 return false; | |
| 92 } | |
| 93 } | |
| 94 | |
| 95 return true; | |
| 96 } | |
| 97 | |
| 98 // "url" from the CSS tokenizer, minus backslash-escape sequences | |
| 99 static bool isCSSTokenizerURL(const String& string) | |
| 100 { | |
| 101 unsigned length = string.length(); | |
| 102 | |
| 103 if (!length) | |
| 104 return true; | |
| 105 | |
| 106 if (string.is8Bit()) | |
| 107 return isCSSTokenizerURL(string.characters8(), length); | |
| 108 return isCSSTokenizerURL(string.characters16(), length); | |
| 109 } | |
| 110 | |
| 111 template <typename CharacterType> | |
| 112 static inline String quoteCSSStringInternal(const CharacterType* characters, uns
igned length) | 72 static inline String quoteCSSStringInternal(const CharacterType* characters, uns
igned length) |
| 113 { | 73 { |
| 114 // For efficiency, we first pre-calculate the length of the quoted string, t
hen we build the actual one. | 74 // For efficiency, we first pre-calculate the length of the quoted string, t
hen we build the actual one. |
| 115 // Please see below for the actual logic. | 75 // Please see below for the actual logic. |
| 116 unsigned quotedStringSize = 2; // Two quotes surrounding the entire string. | 76 unsigned quotedStringSize = 2; // Two quotes surrounding the entire string. |
| 117 bool afterEscape = false; | 77 bool afterEscape = false; |
| 118 for (unsigned i = 0; i < length; ++i) { | 78 for (unsigned i = 0; i < length; ++i) { |
| 119 CharacterType ch = characters[i]; | 79 CharacterType ch = characters[i]; |
| 120 if (ch == '\\' || ch == '\'') { | 80 if (ch == '\\' || ch == '\'') { |
| 121 quotedStringSize += 2; | 81 quotedStringSize += 2; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 if (string.is8Bit()) | 134 if (string.is8Bit()) |
| 175 return quoteCSSStringInternal(string.characters8(), length); | 135 return quoteCSSStringInternal(string.characters8(), length); |
| 176 return quoteCSSStringInternal(string.characters16(), length); | 136 return quoteCSSStringInternal(string.characters16(), length); |
| 177 } | 137 } |
| 178 | 138 |
| 179 String quoteCSSStringIfNeeded(const String& string) | 139 String quoteCSSStringIfNeeded(const String& string) |
| 180 { | 140 { |
| 181 return isCSSTokenizerIdentifier(string) ? string : quoteCSSString(string); | 141 return isCSSTokenizerIdentifier(string) ? string : quoteCSSString(string); |
| 182 } | 142 } |
| 183 | 143 |
| 184 String quoteCSSURLIfNeeded(const String& string) | |
| 185 { | |
| 186 return isCSSTokenizerURL(string) ? string : quoteCSSString(string); | |
| 187 } | |
| 188 | |
| 189 static void serializeCharacter(UChar32 c, StringBuilder& appendTo) | 144 static void serializeCharacter(UChar32 c, StringBuilder& appendTo) |
| 190 { | 145 { |
| 191 appendTo.append('\\'); | 146 appendTo.append('\\'); |
| 192 appendTo.append(c); | 147 appendTo.append(c); |
| 193 } | 148 } |
| 194 | 149 |
| 195 static void serializeCharacterAsCodePoint(UChar32 c, StringBuilder& appendTo) | 150 static void serializeCharacterAsCodePoint(UChar32 c, StringBuilder& appendTo) |
| 196 { | 151 { |
| 197 appendTo.append('\\'); | 152 appendTo.append('\\'); |
| 198 appendUnsignedAsHex(c, appendTo, Lowercase); | 153 appendUnsignedAsHex(c, appendTo, Lowercase); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 serializeString(string, builder); | 215 serializeString(string, builder); |
| 261 return builder.toString(); | 216 return builder.toString(); |
| 262 } | 217 } |
| 263 | 218 |
| 264 String serializeURI(const String& string) | 219 String serializeURI(const String& string) |
| 265 { | 220 { |
| 266 return "url(" + serializeString(string) + ")"; | 221 return "url(" + serializeString(string) + ")"; |
| 267 } | 222 } |
| 268 | 223 |
| 269 } // namespace blink | 224 } // namespace blink |
| OLD | NEW |