[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