From 32d65d71564648670ce6f67d9cbd5c6427d4e082 Mon Sep 17 00:00:00 2001 From: "mitz@apple.com" Date: Mon, 2 Jul 2012 00:08:47 +0000 Subject: [PATCH] [mac] Non-BMP characters in vertical text appear as missing glyphs https://bugs.webkit.org/show_bug.cgi?id=90349 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed by Dean Jackson. Source/WebCore: Test: platform/mac/fast/text/vertical-surrogate-pair.html * platform/graphics/mac/GlyphPageTreeNodeMac.cpp: (WebCore::GlyphPage::fill): When calling wkGetVerticalGlyphsForCharacters or CTFontGetGlyphsForCharacters with a buffer consisting of surrogate pair, account for those functions’ behavior of placing glyphs at indices corresponding to the first character of each pair. LayoutTests: * platform/mac/fast/text/vertical-surrogate-pair.html: Added. * platform/mac/platform/mac/fast/text/vertical-surrogate-pair-expected.png: Added. * platform/mac/platform/mac/fast/text/vertical-surrogate-pair-expected.txt: Added. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@121645 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- LayoutTests/ChangeLog | 11 +++++++++++ .../platform/mac/fast/text/vertical-surrogate-pair.html | 8 ++++++++ .../mac/fast/text/vertical-surrogate-pair-expected.png | Bin 0 -> 9837 bytes .../mac/fast/text/vertical-surrogate-pair-expected.txt | 14 ++++++++++++++ Source/WebCore/ChangeLog | 15 +++++++++++++++ .../platform/graphics/mac/GlyphPageTreeNodeMac.cpp | 7 +++++-- 6 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 LayoutTests/platform/mac/fast/text/vertical-surrogate-pair.html create mode 100644 LayoutTests/platform/mac/platform/mac/fast/text/vertical-surrogate-pair-expected.png create mode 100644 LayoutTests/platform/mac/platform/mac/fast/text/vertical-surrogate-pair-expected.txt diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog index c393376..791a27e 100644 --- a/LayoutTests/ChangeLog +++ b/LayoutTests/ChangeLog @@ -1,3 +1,14 @@ +2012-07-01 Dan Bernstein + + [mac] Non-BMP characters in vertical text appear as missing glyphs + https://bugs.webkit.org/show_bug.cgi?id=90349 + + Reviewed by Dean Jackson. + + * platform/mac/fast/text/vertical-surrogate-pair.html: Added. + * platform/mac/platform/mac/fast/text/vertical-surrogate-pair-expected.png: Added. + * platform/mac/platform/mac/fast/text/vertical-surrogate-pair-expected.txt: Added. + 2012-07-01 Kenichi Ishibashi Arabic shaping is incorrect if ZWNJ exist diff --git a/LayoutTests/platform/mac/fast/text/vertical-surrogate-pair.html b/LayoutTests/platform/mac/fast/text/vertical-surrogate-pair.html new file mode 100644 index 0000000..814992f --- /dev/null +++ b/LayoutTests/platform/mac/fast/text/vertical-surrogate-pair.html @@ -0,0 +1,8 @@ + +

+ These two glyphs should look the same: +

+
𠮟
+
𠮟
diff --git a/LayoutTests/platform/mac/platform/mac/fast/text/vertical-surrogate-pair-expected.png b/LayoutTests/platform/mac/platform/mac/fast/text/vertical-surrogate-pair-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..f3460584636b35f433e496439598c3569424812e GIT binary patch literal 9837 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 B5bXc} literal 0 HcmV?d00001 diff --git a/LayoutTests/platform/mac/platform/mac/fast/text/vertical-surrogate-pair-expected.txt b/LayoutTests/platform/mac/platform/mac/fast/text/vertical-surrogate-pair-expected.txt new file mode 100644 index 0000000..48ec2e3 --- /dev/null +++ b/LayoutTests/platform/mac/platform/mac/fast/text/vertical-surrogate-pair-expected.txt @@ -0,0 +1,14 @@ +layer at (0,0) size 800x600 + RenderView at (0,0) size 800x600 +layer at (0,0) size 800x600 + RenderBlock {HTML} at (0,0) size 800x600 + RenderBody {BODY} at (8,8) size 784x584 + RenderBlock {P} at (0,0) size 784x18 + RenderText {#text} at (0,0) size 253x18 + text run at (0,0) width 253: "These two glyphs should look the same:" + RenderBlock {DIV} at (0,34) size 784x72 + RenderText {#text} at (0,12) size 48x48 + text run at (0,12) width 48: "\x{D842}\x{DF9F}" + RenderBlock {DIV} at (0,106) size 72x49 + RenderText {#text} at (12,0) size 48x49 + text run at (12,0) width 49: "\x{D842}\x{DF9F}" diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index 443d101..439d05a 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,18 @@ +2012-07-01 Dan Bernstein + + [mac] Non-BMP characters in vertical text appear as missing glyphs + https://bugs.webkit.org/show_bug.cgi?id=90349 + + Reviewed by Dean Jackson. + + Test: platform/mac/fast/text/vertical-surrogate-pair.html + + * platform/graphics/mac/GlyphPageTreeNodeMac.cpp: + (WebCore::GlyphPage::fill): When calling wkGetVerticalGlyphsForCharacters or + CTFontGetGlyphsForCharacters with a buffer consisting of surrogate pair, account for those + functions’ behavior of placing glyphs at indices corresponding to the first character of + each pair. + 2012-07-01 Kenichi Ishibashi Arabic shaping is incorrect if ZWNJ exist diff --git a/Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp b/Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp index 98a53f9..45a6691 100644 --- a/Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp +++ b/Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp @@ -68,11 +68,14 @@ bool GlyphPage::fill(unsigned offset, unsigned length, UChar* buffer, unsigned b } } else if (!fontData->platformData().isCompositeFontReference() && ((fontData->platformData().widthVariant() == RegularWidth) ? wkGetVerticalGlyphsForCharacters(fontData->platformData().ctFont(), buffer, glyphs.data(), bufferLength) : CTFontGetGlyphsForCharacters(fontData->platformData().ctFont(), buffer, glyphs.data(), bufferLength))) { + // When buffer consists of surrogate pairs, wkGetVerticalGlyphsForCharacters and CTFontGetGlyphsForCharacters + // place the glyphs at indices corresponding to the first character of each pair. + unsigned glyphStep = bufferLength / length; for (unsigned i = 0; i < length; ++i) { - if (!glyphs[i]) + if (!glyphs[i * glyphStep]) setGlyphDataForIndex(offset + i, 0, 0); else { - setGlyphDataForIndex(offset + i, glyphs[i], fontData); + setGlyphDataForIndex(offset + i, glyphs[i * glyphStep], fontData); haveGlyphs = true; } } -- 2.7.4