OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All |
7 * rights reserved. | 7 * rights reserved. |
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. |
9 * (http://www.torchmobile.com/) | 9 * (http://www.torchmobile.com/) |
10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. | 10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 #include "wtf/Functional.h" | 254 #include "wtf/Functional.h" |
255 #include "wtf/HashFunctions.h" | 255 #include "wtf/HashFunctions.h" |
256 #include "wtf/PtrUtil.h" | 256 #include "wtf/PtrUtil.h" |
257 #include "wtf/StdLibExtras.h" | 257 #include "wtf/StdLibExtras.h" |
258 #include "wtf/text/CharacterNames.h" | 258 #include "wtf/text/CharacterNames.h" |
259 #include "wtf/text/StringBuffer.h" | 259 #include "wtf/text/StringBuffer.h" |
260 #include "wtf/text/TextEncodingRegistry.h" | 260 #include "wtf/text/TextEncodingRegistry.h" |
261 | 261 |
262 #include <memory> | 262 #include <memory> |
263 | 263 |
264 using namespace WTF; | |
265 using namespace Unicode; | |
266 | |
267 #ifndef NDEBUG | 264 #ifndef NDEBUG |
268 using WeakDocumentSet = | 265 using WeakDocumentSet = |
269 blink::PersistentHeapHashSet<blink::WeakMember<blink::Document>>; | 266 blink::PersistentHeapHashSet<blink::WeakMember<blink::Document>>; |
270 static WeakDocumentSet& liveDocumentSet(); | 267 static WeakDocumentSet& liveDocumentSet(); |
271 #endif | 268 #endif |
272 | 269 |
273 namespace blink { | 270 namespace blink { |
274 | 271 |
275 using namespace HTMLNames; | 272 using namespace HTMLNames; |
276 | 273 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 static inline bool isValidNameStart(UChar32 c) { | 307 static inline bool isValidNameStart(UChar32 c) { |
311 // rule (e) above | 308 // rule (e) above |
312 if ((c >= 0x02BB && c <= 0x02C1) || c == 0x559 || c == 0x6E5 || c == 0x6E6) | 309 if ((c >= 0x02BB && c <= 0x02C1) || c == 0x559 || c == 0x6E5 || c == 0x6E6) |
313 return true; | 310 return true; |
314 | 311 |
315 // rule (i) above | 312 // rule (i) above |
316 if (c == ':' || c == '_') | 313 if (c == ':' || c == '_') |
317 return true; | 314 return true; |
318 | 315 |
319 // rules (a) and (f) above | 316 // rules (a) and (f) above |
320 const uint32_t nameStartMask = Letter_Lowercase | Letter_Uppercase | | 317 const uint32_t nameStartMask = |
321 Letter_Other | Letter_Titlecase | | 318 WTF::Unicode::Letter_Lowercase | WTF::Unicode::Letter_Uppercase | |
322 Number_Letter; | 319 WTF::Unicode::Letter_Other | WTF::Unicode::Letter_Titlecase | |
323 if (!(Unicode::category(c) & nameStartMask)) | 320 WTF::Unicode::Number_Letter; |
| 321 if (!(WTF::Unicode::category(c) & nameStartMask)) |
324 return false; | 322 return false; |
325 | 323 |
326 // rule (c) above | 324 // rule (c) above |
327 if (c >= 0xF900 && c < 0xFFFE) | 325 if (c >= 0xF900 && c < 0xFFFE) |
328 return false; | 326 return false; |
329 | 327 |
330 // rule (d) above | 328 // rule (d) above |
331 CharDecompositionType decompType = decompositionType(c); | 329 WTF::Unicode::CharDecompositionType decompType = |
332 if (decompType == DecompositionFont || decompType == DecompositionCompat) | 330 WTF::Unicode::decompositionType(c); |
| 331 if (decompType == WTF::Unicode::DecompositionFont || |
| 332 decompType == WTF::Unicode::DecompositionCompat) |
333 return false; | 333 return false; |
334 | 334 |
335 return true; | 335 return true; |
336 } | 336 } |
337 | 337 |
338 static inline bool isValidNamePart(UChar32 c) { | 338 static inline bool isValidNamePart(UChar32 c) { |
339 // rules (a), (e), and (i) above | 339 // rules (a), (e), and (i) above |
340 if (isValidNameStart(c)) | 340 if (isValidNameStart(c)) |
341 return true; | 341 return true; |
342 | 342 |
343 // rules (g) and (h) above | 343 // rules (g) and (h) above |
344 if (c == 0x00B7 || c == 0x0387) | 344 if (c == 0x00B7 || c == 0x0387) |
345 return true; | 345 return true; |
346 | 346 |
347 // rule (j) above | 347 // rule (j) above |
348 if (c == '-' || c == '.') | 348 if (c == '-' || c == '.') |
349 return true; | 349 return true; |
350 | 350 |
351 // rules (b) and (f) above | 351 // rules (b) and (f) above |
352 const uint32_t otherNamePartMask = Mark_NonSpacing | Mark_Enclosing | | 352 const uint32_t otherNamePartMask = |
353 Mark_SpacingCombining | Letter_Modifier | | 353 WTF::Unicode::Mark_NonSpacing | WTF::Unicode::Mark_Enclosing | |
354 Number_DecimalDigit; | 354 WTF::Unicode::Mark_SpacingCombining | WTF::Unicode::Letter_Modifier | |
355 if (!(Unicode::category(c) & otherNamePartMask)) | 355 WTF::Unicode::Number_DecimalDigit; |
| 356 if (!(WTF::Unicode::category(c) & otherNamePartMask)) |
356 return false; | 357 return false; |
357 | 358 |
358 // rule (c) above | 359 // rule (c) above |
359 if (c >= 0xF900 && c < 0xFFFE) | 360 if (c >= 0xF900 && c < 0xFFFE) |
360 return false; | 361 return false; |
361 | 362 |
362 // rule (d) above | 363 // rule (d) above |
363 CharDecompositionType decompType = decompositionType(c); | 364 WTF::Unicode::CharDecompositionType decompType = |
364 if (decompType == DecompositionFont || decompType == DecompositionCompat) | 365 WTF::Unicode::decompositionType(c); |
| 366 if (decompType == WTF::Unicode::DecompositionFont || |
| 367 decompType == WTF::Unicode::DecompositionCompat) |
365 return false; | 368 return false; |
366 | 369 |
367 return true; | 370 return true; |
368 } | 371 } |
369 | 372 |
370 static FrameViewBase* frameViewBaseForElement(const Element& focusedElement) { | 373 static FrameViewBase* frameViewBaseForElement(const Element& focusedElement) { |
371 LayoutObject* layoutObject = focusedElement.layoutObject(); | 374 LayoutObject* layoutObject = focusedElement.layoutObject(); |
372 if (!layoutObject || !layoutObject->isLayoutPart()) | 375 if (!layoutObject || !layoutObject->isLayoutPart()) |
373 return 0; | 376 return 0; |
374 return toLayoutPart(layoutObject)->frameViewBase(); | 377 return toLayoutPart(layoutObject)->frameViewBase(); |
(...skipping 1071 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1446 unsigned length = title.length(); | 1449 unsigned length = title.length(); |
1447 unsigned builderIndex = 0; | 1450 unsigned builderIndex = 0; |
1448 const CharacterType* characters = title.getCharacters<CharacterType>(); | 1451 const CharacterType* characters = title.getCharacters<CharacterType>(); |
1449 | 1452 |
1450 StringBuffer<CharacterType> buffer(length); | 1453 StringBuffer<CharacterType> buffer(length); |
1451 | 1454 |
1452 // Replace control characters with spaces and collapse whitespace. | 1455 // Replace control characters with spaces and collapse whitespace. |
1453 bool pendingWhitespace = false; | 1456 bool pendingWhitespace = false; |
1454 for (unsigned i = 0; i < length; ++i) { | 1457 for (unsigned i = 0; i < length; ++i) { |
1455 UChar32 c = characters[i]; | 1458 UChar32 c = characters[i]; |
1456 if ((c <= spaceCharacter && c != lineTabulationCharacter) || | 1459 if ((c <= WTF::Unicode::spaceCharacter && |
1457 c == deleteCharacter) { | 1460 c != WTF::Unicode::lineTabulationCharacter) || |
| 1461 c == WTF::Unicode::deleteCharacter) { |
1458 if (builderIndex != 0) | 1462 if (builderIndex != 0) |
1459 pendingWhitespace = true; | 1463 pendingWhitespace = true; |
1460 } else { | 1464 } else { |
1461 if (pendingWhitespace) { | 1465 if (pendingWhitespace) { |
1462 buffer[builderIndex++] = ' '; | 1466 buffer[builderIndex++] = ' '; |
1463 pendingWhitespace = false; | 1467 pendingWhitespace = false; |
1464 } | 1468 } |
1465 buffer[builderIndex++] = c; | 1469 buffer[builderIndex++] = c; |
1466 } | 1470 } |
1467 } | 1471 } |
(...skipping 3547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5015 // portion of the document. There isn't much user-visible content in the | 5019 // portion of the document. There isn't much user-visible content in the |
5016 // <head>, but there is the <title> element. This function detects that | 5020 // <head>, but there is the <title> element. This function detects that |
5017 // situation and re-decodes the document's title so that the user doesn't see | 5021 // situation and re-decodes the document's title so that the user doesn't see |
5018 // an incorrectly decoded title in the title bar. | 5022 // an incorrectly decoded title in the title bar. |
5019 if (m_titleElement && encoding() != newData.encoding() && | 5023 if (m_titleElement && encoding() != newData.encoding() && |
5020 !ElementTraversal::firstWithin(*m_titleElement) && | 5024 !ElementTraversal::firstWithin(*m_titleElement) && |
5021 encoding() == Latin1Encoding() && | 5025 encoding() == Latin1Encoding() && |
5022 m_titleElement->textContent().containsOnlyLatin1()) { | 5026 m_titleElement->textContent().containsOnlyLatin1()) { |
5023 CString originalBytes = m_titleElement->textContent().latin1(); | 5027 CString originalBytes = m_titleElement->textContent().latin1(); |
5024 std::unique_ptr<TextCodec> codec = newTextCodec(newData.encoding()); | 5028 std::unique_ptr<TextCodec> codec = newTextCodec(newData.encoding()); |
5025 String correctlyDecodedTitle = | 5029 String correctlyDecodedTitle = codec->decode( |
5026 codec->decode(originalBytes.data(), originalBytes.length(), DataEOF); | 5030 originalBytes.data(), originalBytes.length(), WTF::DataEOF); |
5027 m_titleElement->setTextContent(correctlyDecodedTitle); | 5031 m_titleElement->setTextContent(correctlyDecodedTitle); |
5028 } | 5032 } |
5029 | 5033 |
5030 DCHECK(newData.encoding().isValid()); | 5034 DCHECK(newData.encoding().isValid()); |
5031 m_encodingData = newData; | 5035 m_encodingData = newData; |
5032 | 5036 |
5033 // FIXME: Should be removed as part of | 5037 // FIXME: Should be removed as part of |
5034 // https://code.google.com/p/chromium/issues/detail?id=319643 | 5038 // https://code.google.com/p/chromium/issues/detail?id=319643 |
5035 bool shouldUseVisualOrdering = m_encodingData.encoding().usesVisualOrdering(); | 5039 bool shouldUseVisualOrdering = m_encodingData.encoding().usesVisualOrdering(); |
5036 if (shouldUseVisualOrdering != m_visuallyOrdered) { | 5040 if (shouldUseVisualOrdering != m_visuallyOrdered) { |
(...skipping 1592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6629 } | 6633 } |
6630 | 6634 |
6631 void showLiveDocumentInstances() { | 6635 void showLiveDocumentInstances() { |
6632 WeakDocumentSet& set = liveDocumentSet(); | 6636 WeakDocumentSet& set = liveDocumentSet(); |
6633 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); | 6637 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); |
6634 for (blink::Document* document : set) | 6638 for (blink::Document* document : set) |
6635 fprintf(stderr, "- Document %p URL: %s\n", document, | 6639 fprintf(stderr, "- Document %p URL: %s\n", document, |
6636 document->url().getString().utf8().data()); | 6640 document->url().getString().utf8().data()); |
6637 } | 6641 } |
6638 #endif | 6642 #endif |
OLD | NEW |