Changeset 62778 in webkit
- Timestamp:
- Jul 8, 2010 4:48:10 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r62776 r62778 1 2010-07-08 Xiaomei Ji <xji@chromium.org> 2 3 Reviewed by David Levin. 4 5 Fix characters with unicode-bidi-mirror property are not correctly 6 mirrored in Linux. 7 https://bugs.webkit.org/show_bug.cgi?id=41305 8 9 Since harfbuzz does not do mirroring, chromium should iterate each 10 character in the string and mirror it if needed before passing the 11 string to harfbuzz for shaping. 12 13 * fast/text/international/bidi-mirror-he-ar.html: Added. 14 * platform/mac/fast/text/international/bidi-mirror-he-ar-expected.checksum: Added. 15 * platform/mac/fast/text/international/bidi-mirror-he-ar-expected.png: Added. 16 * platform/mac/fast/text/international/bidi-mirror-he-ar-expected.txt: Added. 17 1 18 2010-07-08 Nikolas Zimmermann <nzimmermann@rim.com> 2 19 -
trunk/WebCore/ChangeLog
r62776 r62778 1 2010-07-08 Xiaomei Ji <xji@chromium.org> 2 3 Reviewed by David Levin. 4 5 Fix characters with unicode-bidi-mirror property are not correctly 6 mirrored in Linux. 7 https://bugs.webkit.org/show_bug.cgi?id=41305 8 9 Since harfbuzz does not do mirroring, chromium should iterate each 10 character in the string and mirror it if needed before passing the 11 string to harfbuzz for shaping. 12 13 Test: fast/text/international/bidi-mirror-he-ar.html 14 15 * platform/graphics/chromium/FontLinux.cpp: 16 (WebCore::TextRunWalker::TextRunWalker): 17 (WebCore::TextRunWalker::~TextRunWalker): 18 1 19 2010-07-08 Nikolas Zimmermann <nzimmermann@rim.com> 2 20 -
trunk/WebCore/platform/graphics/chromium/FontLinux.cpp
r61795 r62778 50 50 #include <wtf/OwnArrayPtr.h> 51 51 #include <wtf/OwnPtr.h> 52 #include <wtf/unicode/Unicode.h> 52 53 53 54 namespace WebCore { … … 181 182 m_item.font = allocHarfbuzzFont(); 182 183 183 m_item.string = m_run.characters();184 m_item.stringLength = m_run.length();185 184 m_item.item.bidiLevel = m_run.rtl(); 185 186 int length = m_run.length(); 187 m_item.stringLength = length; 188 189 if (!m_item.item.bidiLevel) 190 m_item.string = m_run.characters(); 191 else { 192 // Assume mirrored character is in the same multilingual plane as the original one. 193 UChar* string = new UChar[length]; 194 mirrorCharacters(string, m_run.characters(), length); 195 m_item.string = string; 196 } 186 197 187 198 reset(); … … 193 204 deleteGlyphArrays(); 194 205 delete[] m_item.log_clusters; 206 if (m_item.item.bidiLevel) 207 delete[] m_item.string; 195 208 } 196 209 … … 456 469 } 457 470 471 void mirrorCharacters(UChar* destination, const UChar* source, int length) const 472 { 473 int position = 0; 474 bool error; 475 // Iterate characters in source and mirror character if needed. 476 while (position < length) { 477 UChar32 character; 478 int nextPosition = position; 479 U16_NEXT(source, nextPosition, length, character); 480 character = u_charMirror(character); 481 U16_APPEND(destination, position, length, character, error); 482 ASSERT(!error); 483 position = nextPosition; 484 } 485 } 486 458 487 const Font* const m_font; 459 488 HB_ShaperItem m_item;
Note: See TracChangeset
for help on using the changeset viewer.