[webkit-changes] cvs commit: WebKit/WebCoreSupport.subproj
WebTextRenderer.m
Adele
adele at opensource.apple.com
Fri Aug 12 01:36:47 PDT 2005
adele 05/08/12 01:36:47
Modified: . Tag: Safari-2-0-branch ChangeLog
WebCoreSupport.subproj Tag: Safari-2-0-branch
WebTextRenderer.m
Log:
Merged fix from TOT to Safari-2-0-branch
<rdar://problem/4214024> Several improvements to WebKit's ability to render international text
Revision Changes Path
No revision
No revision
1.3118.4.43 +55 -0 WebKit/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /cvs/root/WebKit/ChangeLog,v
retrieving revision 1.3118.4.42
retrieving revision 1.3118.4.43
diff -u -r1.3118.4.42 -r1.3118.4.43
--- ChangeLog 12 Aug 2005 08:27:11 -0000 1.3118.4.42
+++ ChangeLog 12 Aug 2005 08:36:42 -0000 1.3118.4.43
@@ -1,5 +1,60 @@
2005-08-12 Adele Peterson <adele at apple.com>
+ Merged fixes from TOT to Safari-2-0-branch
+ <rdar://problem/4214024> Several improvements to WebKit's ability to render international text
+
+ 2005-07-08 Geoffrey Garen <ggaren at apple.com>
+
+ Rolled in patch by opendarwin.org at mitzpettel.com
+
+ -fixes http://bugzilla.opendarwin.org/show_bug.cgi?id=3818
+ Fallback font doesn't have requested weight in ATSUI-rendered text
+
+ Reviewed by mjs.
+
+ * WebCoreSupport.subproj/WebTextRenderer.m:
+ (-[WebTextRenderer _createATSUTextLayoutForRun:style:]):
+
+ 2005-06-22 Darin Adler <darin at apple.com>
+
+ Change by Mitz Pettel.
+ Reviewed by me.
+
+ - fixed <http://bugzilla.opendarwin.org/show_bug.cgi?id=3618>
+ RTL runs drawn by CG not reversed properly
+
+ * WebCoreSupport.subproj/WebTextRenderer.m: (-[WebTextRenderer _CG_drawRun:style:geometry:]):
+ Fix off-by-one mistake in order-swapping loops.
+
+ 2005-06-17 Richard Williamson <rjw at apple.com>
+
+ Changes by Mitz Pettel
+ Reviewed by Richard Williamson.
+
+ Fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=3545
+
+ * WebCoreSupport.subproj/WebTextRenderer.m:
+ (reverseCharactersInRun):
+ (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:includePartialGlyphs:]):
+
+ 2005-07-23 Justin Garcia <justin.garcia at apple.com>
+
+ Patch by <opendarwin.org at mitzpettel.com>
+
+ Reviewed by darin and hyatt
+
+ Fixes <http://bugzilla.opendarwin.org/show_bug.cgi?id=3862>
+ The fix for <http://bugzilla.opendarwin.org/show_bug.cgi?id=3545> enclosed each run of visually ordered
+ hebrew with LRO and PDF control characters, but adjusted the run's to and from to include those characters,
+ so that they would be rendered if the font includes a glyph for bidi control characters.
+
+ Also adding a manual test
+
+ * WebCoreSupport.subproj/WebTextRenderer.m:
+ (reverseCharactersInRun):
+
+2005-08-12 Adele Peterson <adele at apple.com>
+
Merged fix from TOT to Safari-2-0-branch
<rdar://problem/4205174> Hebrew or Arabic text on long pages becomes garbled
No revision
No revision
1.165.8.5 +30 -12 WebKit/WebCoreSupport.subproj/WebTextRenderer.m
Index: WebTextRenderer.m
===================================================================
RCS file: /cvs/root/WebKit/WebCoreSupport.subproj/WebTextRenderer.m,v
retrieving revision 1.165.8.4
retrieving revision 1.165.8.5
diff -u -r1.165.8.4 -r1.165.8.5
--- WebTextRenderer.m 12 Aug 2005 08:27:15 -0000 1.165.8.4
+++ WebTextRenderer.m 12 Aug 2005 08:36:46 -0000 1.165.8.5
@@ -48,6 +48,8 @@
#define SPACE 0x0020
#define NO_BREAK_SPACE 0x00A0
#define ZERO_WIDTH_SPACE 0x200B
+#define POP_DIRECTIONAL_FORMATTING 0x202C
+#define LEFT_TO_RIGHT_OVERRIDE 0x202D
// MAX_GLYPH_EXPANSION is the maximum numbers of glyphs that may be
// use to represent a single Unicode code point.
@@ -1105,19 +1107,19 @@
CGSize aswap1, aswap2;
NSFont *fswap1, *fswap2;
- for (i = pos, end = numGlyphs-1; i < (numGlyphs - pos)/2; i++){
+ for (i = pos, end = numGlyphs; i < (numGlyphs - pos)/2; i++){
gswap1 = glyphBuffer[i];
gswap2 = glyphBuffer[--end];
glyphBuffer[i] = gswap2;
glyphBuffer[end] = gswap1;
}
- for (i = pos, end = numGlyphs - 1; i < (numGlyphs - pos)/2; i++){
+ for (i = pos, end = numGlyphs; i < (numGlyphs - pos)/2; i++){
aswap1 = advances[i];
aswap2 = advances[--end];
advances[i] = aswap2;
advances[end] = aswap1;
}
- for (i = pos, end = numGlyphs - 1; i < (numGlyphs - pos)/2; i++){
+ for (i = pos, end = numGlyphs; i < (numGlyphs - pos)/2; i++){
fswap1 = fontBuffer[i];
fswap2 = fontBuffer[--end];
fontBuffer[i] = fswap2;
@@ -1495,6 +1497,9 @@
ATSUTextLayout layout;
UniCharCount runLength;
+ ATSUFontID ATSUSubstituteFont;
+ UniCharArrayOffset substituteOffset;
+ UniCharCount substituteLength;
OSStatus status;
[self _initializeATSUStyle];
@@ -1531,6 +1536,20 @@
status = ATSUSetTransientFontMatching (layout, YES);
if(status != noErr)
FATAL_ALWAYS ("ATSUSetTransientFontMatching failed(%d)", status);
+
+ substituteOffset = run->from;
+ while ((status = ATSUMatchFontsToText(layout, substituteOffset, kATSUToTextEnd, &ATSUSubstituteFont, &substituteOffset, &substituteLength)) == kATSUFontsMatched || status == kATSUFontsNotMatched) {
+ NSFont *substituteFont = [self _substituteFontForCharacters:run->characters+substituteOffset length:substituteLength families:style->families];
+ if (substituteFont) {
+ WebTextRenderer *substituteRenderer = [[WebTextRendererFactory sharedFactory] rendererWithFont:substituteFont usingPrinterFont:usingPrinterFont];
+ [substituteRenderer _initializeATSUStyle];
+ if (substituteRenderer && substituteRenderer->_ATSUSstyle)
+ ATSUSetRunStyle(layout, substituteRenderer->_ATSUSstyle, substituteOffset, substituteLength);
+ // ignoring errors
+ }
+ substituteOffset += substituteLength;
+ };
+ // ignoring errors in font substitution
return layout;
}
@@ -1582,16 +1601,15 @@
static WebCoreTextRun reverseCharactersInRun(const WebCoreTextRun *run)
{
WebCoreTextRun swappedRun;
- unsigned int i;
- UniChar *swappedCharacters = (UniChar *)malloc(sizeof(UniChar)*run->length);
- for (i = 0; i < run->length; i++) {
- swappedCharacters[i] = run->characters[run->length-i-1];
- }
+ UniChar *swappedCharacters = (UniChar *)malloc(sizeof(UniChar)*(run->length+2));
+ memcpy(swappedCharacters+1, run->characters, sizeof(UniChar)*run->length);
+ swappedRun.from = (run->from == -1 ? 0 : run->from) + 1;
+ swappedRun.to = (run->to == -1 ? (int)run->length - 1 : run->to + 1);
+ swappedRun.length = run->length+2;
+ swappedCharacters[swappedRun.from - 1] = LEFT_TO_RIGHT_OVERRIDE;
+ swappedCharacters[swappedRun.to] = POP_DIRECTIONAL_FORMATTING;
swappedRun.characters = swappedCharacters;
- swappedRun.from = run->length - (run->to == -1 ? (int)run->length : run->to);
- swappedRun.to = run->length - (run->from == -1 ? 0 : run->from);
- swappedRun.length = run->length;
return swappedRun;
}
@@ -1745,7 +1763,7 @@
const WebCoreTextRun *aRun = run;
WebCoreTextRun swappedRun;
- // Reverse the visually ordered characters. ATSU will re-reverse. Ick!
+ // Enclose in LRO-PDF to force ATSU to render visually.
if (style->visuallyOrdered) {
swappedRun = reverseCharactersInRun(run);
aRun = &swappedRun;
More information about the webkit-changes
mailing list