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) 2000 Dirk Mueller (mueller@kde.org) | 4 * (C) 2000 Dirk Mueller (mueller@kde.org) |
5 * Copyright (C) 2003, 2006, 2010, 2011 Apple Inc. All rights reserved. | 5 * Copyright (C) 2003, 2006, 2010, 2011 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 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 if (data.glyph != verticalRightData.glyph) | 420 if (data.glyph != verticalRightData.glyph) |
421 return std::make_pair(data, page); | 421 return std::make_pair(data, page); |
422 // The glyphs are identical, meaning that we should just use the hor
izontal glyph. | 422 // The glyphs are identical, meaning that we should just use the hor
izontal glyph. |
423 if (verticalRightData.fontData) | 423 if (verticalRightData.fontData) |
424 return std::make_pair(verticalRightData, verticalRightPage); | 424 return std::make_pair(verticalRightData, verticalRightPage); |
425 } | 425 } |
426 } | 426 } |
427 return std::make_pair(data, page); | 427 return std::make_pair(data, page); |
428 } | 428 } |
429 | 429 |
430 std::pair<GlyphData, GlyphPage*> Font::glyphDataAndPageForCharacter(UChar32 c, b
ool mirror, FontDataVariant variant) const | 430 std::pair<GlyphData, GlyphPage*> Font::glyphDataAndPageForCharacter(UChar32& c,
bool mirror, bool normalizeSpace, FontDataVariant variant) const |
431 { | 431 { |
432 ASSERT(isMainThread()); | 432 ASSERT(isMainThread()); |
433 | 433 |
434 if (variant == AutoVariant) { | 434 if (variant == AutoVariant) { |
435 if (m_fontDescription.variant() == FontVariantSmallCaps && !primaryFont(
)->isSVGFont()) { | 435 if (m_fontDescription.variant() == FontVariantSmallCaps && !primaryFont(
)->isSVGFont()) { |
436 UChar32 upperC = toUpper(c); | 436 UChar32 upperC = toUpper(c); |
437 if (upperC != c) { | 437 if (upperC != c) { |
438 c = upperC; | 438 c = upperC; |
439 variant = SmallCapsVariant; | 439 variant = SmallCapsVariant; |
440 } else { | 440 } else { |
441 variant = NormalVariant; | 441 variant = NormalVariant; |
442 } | 442 } |
443 } else { | 443 } else { |
444 variant = NormalVariant; | 444 variant = NormalVariant; |
445 } | 445 } |
446 } | 446 } |
447 | 447 |
| 448 if (normalizeSpace && Character::isNormalizedCanvasSpaceCharacter(c)) |
| 449 c = space; |
| 450 |
448 if (mirror) | 451 if (mirror) |
449 c = mirroredChar(c); | 452 c = mirroredChar(c); |
450 | 453 |
451 unsigned pageNumber = (c / GlyphPage::size); | 454 unsigned pageNumber = (c / GlyphPage::size); |
452 | 455 |
453 GlyphPageTreeNode* node = m_fontFallbackList->getPageNode(pageNumber); | 456 GlyphPageTreeNode* node = m_fontFallbackList->getPageNode(pageNumber); |
454 if (!node) { | 457 if (!node) { |
455 node = GlyphPageTreeNode::getRootChild(fontDataAt(0), pageNumber); | 458 node = GlyphPageTreeNode::getRootChild(fontDataAt(0), pageNumber); |
456 m_fontFallbackList->setPageNode(pageNumber, node); | 459 m_fontFallbackList->setPageNode(pageNumber, node); |
457 } | 460 } |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
595 if (mark.length() < 2) | 598 if (mark.length() < 2) |
596 return false; | 599 return false; |
597 | 600 |
598 UChar low = mark[1]; | 601 UChar low = mark[1]; |
599 if (!U16_IS_TRAIL(low)) | 602 if (!U16_IS_TRAIL(low)) |
600 return false; | 603 return false; |
601 | 604 |
602 character = U16_GET_SUPPLEMENTARY(character, low); | 605 character = U16_GET_SUPPLEMENTARY(character, low); |
603 } | 606 } |
604 | 607 |
605 glyphData = glyphDataForCharacter(character, false, EmphasisMarkVariant); | 608 bool normalizeSpace = false; |
| 609 glyphData = glyphDataForCharacter(character, false, normalizeSpace, Emphasis
MarkVariant); |
606 return true; | 610 return true; |
607 } | 611 } |
608 | 612 |
609 int Font::emphasisMarkAscent(const AtomicString& mark) const | 613 int Font::emphasisMarkAscent(const AtomicString& mark) const |
610 { | 614 { |
611 FontCachePurgePreventer purgePreventer; | 615 FontCachePurgePreventer purgePreventer; |
612 | 616 |
613 GlyphData markGlyphData; | 617 GlyphData markGlyphData; |
614 if (!getEmphasisMarkGlyphData(mark, markGlyphData)) | 618 if (!getEmphasisMarkGlyphData(mark, markGlyphData)) |
615 return 0; | 619 return 0; |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
892 if (delta <= 0) | 896 if (delta <= 0) |
893 break; | 897 break; |
894 } | 898 } |
895 } | 899 } |
896 } | 900 } |
897 | 901 |
898 return offset; | 902 return offset; |
899 } | 903 } |
900 | 904 |
901 } // namespace blink | 905 } // namespace blink |
OLD | NEW |