To comment on the following update, log in, then open the issue:
http://www.openoffice.org/issues/show_bug.cgi?id=113312
                 Issue #|113312
                 Summary|filter: 
               Component|framework
                 Version|1.0.0
                Platform|Macintosh
                     URL|
              OS/Version|All
                  Status|UNCONFIRMED
       Status whiteboard|
                Keywords|
              Resolution|
              Issue type|PATCH
                Priority|P3
            Subcomponent|code
             Assigned to|mba
             Reported by|osnola





------- Additional comments from osn...@openoffice.org Wed Jul 21 09:26:00 
+0000 2010 -------
Hello, 
by default,  the text found in a PICT(Apple) seems to be read with 
gsl_getSystemTextEncoding()'s encoding, which can give very odd 
results...

So, a patch to revert to RTL_TEXTENCODING_APPLE_ROMAN if 
gsl_getSystemTextEncoding() is not an apple encoding. 

Note: I also make sure that the good encoding is used for symbol fonts and I 
replace RTL_TEXTENCODING_SYMBOL by 
RTL_TEXTENCODING_ADOBE_SYMBOL.

--- filter/source/graphicfilter/ipict/ipict.cxx.orig    2010-03-13 
00:08:17.000000000 +0100
+++ filter/source/graphicfilter/ipict/ipict.cxx 2010-07-21 11:06:23.000000000 
+0200
@@ -146,9 +146,11 @@
        void SetLineColor( const Color& rColor );
        void SetFillColor( const Color& rColor );
 
+  // OSNOLA: returns the text encoding which must be used for system id
+  static rtl_TextEncoding GetTextEncoding (USHORT fId = 0xFFFF);
 public:
 
-       PictReader() {}
+  PictReader() { aActFont.SetCharSet(GetTextEncoding()); }
 
        void ReadPict( SvStream & rStreamPict, GDIMetaFile & rGDIMetaFile );
                // Liesst aus dem Stream eine Pict-Datei und fuellt das 
GDIMetaFile
@@ -208,6 +210,42 @@
 }
 
 //=================== Methoden von PictReader ==============================
+rtl_TextEncoding PictReader::GetTextEncoding (USHORT fId) {
+  static bool first = true;
+  static rtl_TextEncoding enc = RTL_TEXTENCODING_APPLE_ROMAN;
+  if (first) {
+    rtl_TextEncoding def = gsl_getSystemTextEncoding();
+    // we keep gsl_getSystemTextEncoding only if it is a mac encoding
+    switch(def) {
+    case RTL_TEXTENCODING_APPLE_ROMAN:
+    case RTL_TEXTENCODING_APPLE_ARABIC:
+    case RTL_TEXTENCODING_APPLE_CENTEURO:
+    case RTL_TEXTENCODING_APPLE_CROATIAN:
+    case RTL_TEXTENCODING_APPLE_CYRILLIC:
+    case RTL_TEXTENCODING_APPLE_DEVANAGARI:
+    case RTL_TEXTENCODING_APPLE_FARSI:
+    case RTL_TEXTENCODING_APPLE_GREEK:
+    case RTL_TEXTENCODING_APPLE_GUJARATI:
+    case RTL_TEXTENCODING_APPLE_GURMUKHI:
+    case RTL_TEXTENCODING_APPLE_HEBREW:
+    case RTL_TEXTENCODING_APPLE_ICELAND:
+    case RTL_TEXTENCODING_APPLE_ROMANIAN:
+    case RTL_TEXTENCODING_APPLE_THAI:
+    case RTL_TEXTENCODING_APPLE_TURKISH:
+    case RTL_TEXTENCODING_APPLE_UKRAINIAN:
+    case RTL_TEXTENCODING_APPLE_CHINSIMP:
+    case RTL_TEXTENCODING_APPLE_CHINTRAD:
+    case RTL_TEXTENCODING_APPLE_JAPANESE:
+    case RTL_TEXTENCODING_APPLE_KOREAN:
+      enc = def; break;
+    default: break;
+    }
+    first = false;
+  }
+  if (fId == 13) return RTL_TEXTENCODING_ADOBE_DINGBATS; // CHECKME
+  if (fId == 23) return RTL_TEXTENCODING_ADOBE_SYMBOL;
+  return enc;
+}
 
 void PictReader::SetLineColor( const Color& rColor )
 {
@@ -615,7 +653,7 @@
        while ( nLen > 0 && ( (unsigned char)sText[ nLen - 1 ] ) < 32 )
                        nLen--;
        sText[ nLen ] = 0;
-       String aString( (const sal_Char*)&sText, gsl_getSystemTextEncoding() );
+       String aString( (const sal_Char*)&sText, aActFont.GetCharSet());// 
OSNOLA: previous gsl_getSystemTextEncoding()
        pVirDev->DrawText( Point( aTextPosition.X(), aTextPosition.Y() ), 
aString );
        return nDataLen;
 }
@@ -1129,8 +1167,7 @@
                else if (nUSHORT ==   22) aActFont.SetFamily(FAMILY_MODERN);
                else if (nUSHORT <= 1023) aActFont.SetFamily(FAMILY_SWISS);
                else                      aActFont.SetFamily(FAMILY_ROMAN);
-               if              ( nUSHORT == 23 ) aActFont.SetCharSet( 
RTL_TEXTENCODING_SYMBOL );
-               else    aActFont.SetCharSet( gsl_getSystemTextEncoding() );
+               aActFont.SetCharSet(GetTextEncoding(nUSHORT));
                eActMethod=PDM_UNDEFINED;
                nDataSize=2;
                break;
@@ -1361,8 +1398,7 @@
                else if (nUSHORT ==   22) aActFont.SetFamily(FAMILY_MODERN);
                else if (nUSHORT <= 1023) aActFont.SetFamily(FAMILY_SWISS);
                else                      aActFont.SetFamily(FAMILY_ROMAN);
-               if (nUSHORT==23) aActFont.SetCharSet( RTL_TEXTENCODING_SYMBOL);
-               else aActFont.SetCharSet( gsl_getSystemTextEncoding() );
+               aActFont.SetCharSet(GetTextEncoding(nUSHORT));
                *pPict >> nByteLen; nLen=((USHORT)nByteLen)&0x00ff;
                pPict->Read( &sFName, nLen );
                sFName[ nLen ] = 0;
@@ -1812,7 +1848,7 @@
        eActMethod                      = PDM_UNDEFINED;
        aActOvalSize        = Size(1,1);
 
-       aActFont.SetCharSet( gsl_getSystemTextEncoding() );
+       aActFont.SetCharSet( GetTextEncoding());
        aActFont.SetFamily(FAMILY_SWISS);
        aActFont.SetSize(Size(0,12));
        aActFont.SetAlign(ALIGN_BASELINE);

---------------------------------------------------------------------
Please do not reply to this automatically generated notification from
Issue Tracker. Please log onto the website and enter your comments.
http://qa.openoffice.org/issue_handling/project_issues.html#notification

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@framework.openoffice.org
For additional commands, e-mail: issues-h...@framework.openoffice.org


---------------------------------------------------------------------
To unsubscribe, e-mail: allbugs-unsubscr...@openoffice.org
For additional commands, e-mail: allbugs-h...@openoffice.org

Reply via email to