rpms/openoffice.org/devel openoffice.org-3.0.0.ooo87970.vcl.samenamesubs.patch, 1.5, 1.6 openoffice.org.spec, 1.2142, 1.2143

Caolan McNamara caolanm at fedoraproject.org
Tue Feb 9 12:44:37 UTC 2010


Author: caolanm

Update of /cvs/pkgs/rpms/openoffice.org/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv14724/devel

Modified Files:
	openoffice.org-3.0.0.ooo87970.vcl.samenamesubs.patch 
	openoffice.org.spec 
Log Message:
Resolves: rhbz#445588 improve same name substitution

openoffice.org-3.0.0.ooo87970.vcl.samenamesubs.patch:
 inc/vcl/fontmanager.hxx               |    4 -
 inc/vcl/outfont.hxx                   |   10 +-
 source/gdi/outdev3.cxx                |   37 ++++++----
 unx/source/fontmanager/fontconfig.cxx |  124 ++++++++++++++++++++++------------
 unx/source/gdi/salgdi3.cxx            |   93 +++++++++++++++++++++----
 5 files changed, 191 insertions(+), 77 deletions(-)

Index: openoffice.org-3.0.0.ooo87970.vcl.samenamesubs.patch
===================================================================
RCS file: /cvs/pkgs/rpms/openoffice.org/devel/openoffice.org-3.0.0.ooo87970.vcl.samenamesubs.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -p -r1.5 -r1.6
--- openoffice.org-3.0.0.ooo87970.vcl.samenamesubs.patch	10 Oct 2009 15:48:45 -0000	1.5
+++ openoffice.org-3.0.0.ooo87970.vcl.samenamesubs.patch	9 Feb 2010 12:44:36 -0000	1.6
@@ -1,7 +1,7 @@
-diff -ru vcl/inc/vcl/fontmanager.hxx vcl/inc/vcl/fontmanager.hxx
---- openoffice.org.orig/vcl/inc/vcl/fontmanager.hxx	2008-05-26 15:48:28.000000000 +0100
-+++ openoffice.org/vcl/inc/vcl/fontmanager.hxx	2008-05-26 15:50:13.000000000 +0100
-@@ -765,8 +765,8 @@
+diff -r 2da10c20ba01 vcl/inc/vcl/fontmanager.hxx
+--- a/vcl/inc/vcl/fontmanager.hxx	Mon Feb 08 10:49:42 2010 +0000
++++ b/vcl/inc/vcl/fontmanager.hxx	Tue Feb 09 12:05:15 2010 +0000
+@@ -759,8 +759,8 @@
      FontConfigHints getFontConfigHints(const FastPrintFontInfo& rInfo, int nSize, void (*subcallback)(void *));
  
      rtl::OUString Substitute( const rtl::OUString& rFontName, rtl::OUString& rMissingCodes, 
@@ -12,10 +12,126 @@ diff -ru vcl/inc/vcl/fontmanager.hxx vcl
      bool hasFontconfig() const { return m_bFontconfigSuccess; }
  
      int FreeTypeCharIndex( void *pFace, sal_uInt32 aChar );
-diff -ru vcl/unx/source/fontmanager/fontconfig.cxx vcl/unx/source/fontmanager/fontconfig.cxx
---- openoffice.org.orig/vcl/unx/source/fontmanager/fontconfig.cxx	2008-05-26 15:48:28.000000000 +0100
-+++ openoffice.org/vcl/unx/source/fontmanager/fontconfig.cxx	2008-05-26 16:07:30.000000000 +0100
-@@ -560,6 +560,72 @@
+diff -r 2da10c20ba01 vcl/inc/vcl/outfont.hxx
+--- a/vcl/inc/vcl/outfont.hxx	Mon Feb 08 10:49:42 2010 +0000
++++ b/vcl/inc/vcl/outfont.hxx	Tue Feb 09 12:05:15 2010 +0000
+@@ -339,15 +339,17 @@
+     short               mnOrientation;      // text angle in 3600 system
+     bool                mbInit;             // true if maMetric member is valid
+ 
+-    void                AddFallbackForUnicode( sal_UCS4, const String& rFontName );
+-    bool                GetFallbackForUnicode( sal_UCS4, String* pFontName ) const;
+-    void                IgnoreFallbackForUnicode( sal_UCS4, const String& rFontName );
++    void                AddFallbackForUnicode( sal_UCS4, FontWeight eWeight, const String& rFontName );
++    bool                GetFallbackForUnicode( sal_UCS4, FontWeight eWeight, String* pFontName ) const;
++    void                IgnoreFallbackForUnicode( sal_UCS4, FontWeight eWeight, const String& rFontName );
+ 
+ private:
+     // cache of Unicode characters and replacement font names
+     // TODO: a fallback map can be shared with many other ImplFontEntries
+     // TODO: at least the ones which just differ in orientation, stretching or height
+-    typedef ::std::hash_map<sal_UCS4,String> UnicodeFallbackList;
++    typedef ::std::pair<sal_UCS4,FontWeight> CharDescr;
++    struct CharDescr_Hash{ size_t operator()( const CharDescr& ) const; };
++    typedef ::std::hash_map<CharDescr,String,CharDescr_Hash> UnicodeFallbackList;
+     UnicodeFallbackList* mpUnicodeFallbackList;
+ };
+ 
+diff -r 2da10c20ba01 vcl/source/gdi/outdev3.cxx
+--- a/vcl/source/gdi/outdev3.cxx	Mon Feb 08 10:49:42 2010 +0000
++++ b/vcl/source/gdi/outdev3.cxx	Tue Feb 09 12:05:15 2010 +0000
+@@ -995,21 +995,28 @@
+ 
+ // -----------------------------------------------------------------------
+ 
+-inline void ImplFontEntry::AddFallbackForUnicode( sal_UCS4 cChar, const String& rFontName )
++size_t ImplFontEntry::CharDescr_Hash::operator()( const CharDescr& rData ) const
++{
++    std::hash<sal_UCS4> a;
++    std::hash<int > b;
++    return a(rData.first) | b(rData.second);
++}
++
++inline void ImplFontEntry::AddFallbackForUnicode( sal_UCS4 cChar, FontWeight eWeight, const String& rFontName )
+ {
+     if( !mpUnicodeFallbackList )
+         mpUnicodeFallbackList = new UnicodeFallbackList;
+-    (*mpUnicodeFallbackList)[cChar] = rFontName;
+-}
+-
+-// -----------------------------------------------------------------------
+-
+-inline bool ImplFontEntry::GetFallbackForUnicode( sal_UCS4 cChar, String* pFontName ) const
++    (*mpUnicodeFallbackList)[CharDescr(cChar, eWeight)] = rFontName;
++}
++
++// -----------------------------------------------------------------------
++
++inline bool ImplFontEntry::GetFallbackForUnicode( sal_UCS4 cChar, FontWeight eWeight, String* pFontName ) const
+ {
+     if( !mpUnicodeFallbackList )
+         return false;
+ 
+-    UnicodeFallbackList::const_iterator it = mpUnicodeFallbackList->find( cChar );
++    UnicodeFallbackList::const_iterator it = mpUnicodeFallbackList->find( CharDescr(cChar, eWeight) );
+     if( it == mpUnicodeFallbackList->end() )
+         return false;
+ 
+@@ -1019,10 +1026,10 @@
+ 
+ // -----------------------------------------------------------------------
+ 
+-inline void ImplFontEntry::IgnoreFallbackForUnicode( sal_UCS4 cChar, const String& rFontName )
++inline void ImplFontEntry::IgnoreFallbackForUnicode( sal_UCS4 cChar, FontWeight eWeight, const String& rFontName )
+ {
+ //  DBG_ASSERT( mpUnicodeFallbackList, "ImplFontEntry::IgnoreFallbackForUnicode no list" );
+-    UnicodeFallbackList::iterator it = mpUnicodeFallbackList->find( cChar );
++    UnicodeFallbackList::iterator it = mpUnicodeFallbackList->find( CharDescr(cChar, eWeight) );
+ //  DBG_ASSERT( it != mpUnicodeFallbackList->end(), "ImplFontEntry::IgnoreFallbackForUnicode no match" );
+     if( it == mpUnicodeFallbackList->end() )
+         return;
+@@ -1417,7 +1424,7 @@
+         while( nStrIndex < rMissingCodes.getLength() )
+         {
+             cChar = rMissingCodes.iterateCodePoints( &nStrIndex );
+-            bCached = rFontSelData.mpFontEntry->GetFallbackForUnicode( cChar, &rFontSelData.maSearchName );
++            bCached = rFontSelData.mpFontEntry->GetFallbackForUnicode( cChar, rFontSelData.GetWeight(), &rFontSelData.maSearchName );
+             // ignore entries which don't have a fallback
+             if( !bCached || (rFontSelData.maSearchName.Len() != 0) )
+                 break;
+@@ -1433,7 +1440,7 @@
+             while( nStrIndex < rMissingCodes.getLength() )
+             {
+                 cChar = rMissingCodes.iterateCodePoints( &nStrIndex );
+-                bCached = rFontSelData.mpFontEntry->GetFallbackForUnicode( cChar, &aFontName );
++                bCached = rFontSelData.mpFontEntry->GetFallbackForUnicode( cChar, rFontSelData.GetWeight(), &aFontName );
+                 if( !bCached || (rFontSelData.maSearchName != aFontName) )
+                     pRemainingCodes[ nRemainingLength++ ] = cChar;
+             }
+@@ -1452,8 +1459,8 @@
+             // cache the result even if there was no match
+             for(;;)
+             {
+-                 if( !rFontSelData.mpFontEntry->GetFallbackForUnicode( cChar, &rFontSelData.maSearchName ) )
+-                     rFontSelData.mpFontEntry->AddFallbackForUnicode( cChar, rFontSelData.maSearchName );
++                 if( !rFontSelData.mpFontEntry->GetFallbackForUnicode( cChar, rFontSelData.GetWeight(), &rFontSelData.maSearchName ) )
++                     rFontSelData.mpFontEntry->AddFallbackForUnicode( cChar, rFontSelData.GetWeight(), rFontSelData.maSearchName );
+                  if( nStrIndex >= aOldMissingCodes.getLength() )
+                      break;
+                  cChar = aOldMissingCodes.iterateCodePoints( &nStrIndex );
+@@ -1464,7 +1471,7 @@
+                 for( nStrIndex = 0; nStrIndex < rMissingCodes.getLength(); )
+                 {
+                     cChar = rMissingCodes.iterateCodePoints( &nStrIndex );
+-                    rFontSelData.mpFontEntry->IgnoreFallbackForUnicode( cChar, rFontSelData.maSearchName );
++                    rFontSelData.mpFontEntry->IgnoreFallbackForUnicode( cChar, rFontSelData.GetWeight(), rFontSelData.maSearchName );
+                 }
+             }
+         }
+diff -r 2da10c20ba01 vcl/unx/source/fontmanager/fontconfig.cxx
+--- a/vcl/unx/source/fontmanager/fontconfig.cxx	Mon Feb 08 10:49:42 2010 +0000
++++ b/vcl/unx/source/fontmanager/fontconfig.cxx	Tue Feb 09 12:05:15 2010 +0000
+@@ -572,6 +572,72 @@
      return true;
  }
  
@@ -88,7 +204,7 @@ diff -ru vcl/unx/source/fontmanager/font
  int PrintFontManager::countFontconfigFonts()
  {
      int nFonts = 0;
-@@ -687,47 +753,11 @@
+@@ -699,47 +765,11 @@
                      pUpdate->m_nFamilyName = nFamilyName;
                  }
                  if( eWeightRes == FcResultMatch )
@@ -139,7 +255,7 @@ diff -ru vcl/unx/source/fontmanager/font
                  if( eStyleRes == FcResultMatch )
                  {
                      pUpdate->m_aStyleName = OStringToOUString( OString( (sal_Char*)style ), RTL_TEXTENCODING_UTF8 );
-@@ -867,8 +897,8 @@
+@@ -879,8 +909,8 @@
  
  rtl::OUString PrintFontManager::Substitute(const rtl::OUString& rFontName,
      rtl::OUString& rMissingCodes, const rtl::OString &rLangAttrib,
@@ -150,7 +266,7 @@ diff -ru vcl/unx/source/fontmanager/font
  {
      rtl::OUString aName;
      FontCfgWrapper& rWrapper = FontCfgWrapper::get();
-@@ -903,7 +933,7 @@
+@@ -915,7 +945,7 @@
         rWrapper.FcCharSetDestroy( unicodes );
      }
  
@@ -159,28 +275,27 @@ diff -ru vcl/unx/source/fontmanager/font
  
      // query fontconfig for a substitute
      rWrapper.FcConfigSubstitute( rWrapper.FcConfigGetCurrent(), pPattern, FcMatchPattern );
-@@ -940,6 +970,17 @@
-                 if (aI != rWrapper.m_aFontNameToLocalized.end())
-                     sFamily = aI->second;
+@@ -954,6 +984,16 @@
                  aName = rtl::OStringToOUString( sFamily, RTL_TEXTENCODING_UTF8 );
-+
-+
-+                int val = 0;
-+                if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_WEIGHT, 0, &val))
-+                    rWeight = convertWeight(val);
-+                if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_SLANT, 0, &val))
-+                    rItalic = convertSlant(val);
-+                if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_SPACING, 0, &val))
-+                    rPitch = convertSpacing(val);
-+                if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_WIDTH, 0, &val))
-+                    rWidth = convertWidth(val);
              }
  
++            int val = 0;
++            if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_WEIGHT, 0, &val))
++                rWeight = convertWeight(val);
++            if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_SLANT, 0, &val))
++                rItalic = convertSlant(val);
++            if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_SPACING, 0, &val))
++                rPitch = convertSpacing(val);
++            if ( FcResultMatch == rWrapper.FcPatternGetInteger( pSet->fonts[0], FC_WIDTH, 0, &val))
++                rWidth = convertWidth(val);
++
  			// update rMissingCodes by removing resolved unicodes
-diff -ru vcl/unx/source/gdi/salgdi3.cxx vcl/unx/source/gdi/salgdi3.cxx
---- openoffice.org.orig/vcl/unx/source/gdi/salgdi3.cxx	2008-05-26 16:46:52.000000000 +0100
-+++ openoffice.org/vcl/unx/source/gdi/salgdi3.cxx	2008-05-26 16:46:28.000000000 +0100
-@@ -2069,8 +2069,10 @@
+ 	    	if( rMissingCodes.getLength() > 0 )
+             {
+diff -r 2da10c20ba01 vcl/unx/source/gdi/salgdi3.cxx
+--- a/vcl/unx/source/gdi/salgdi3.cxx	Mon Feb 08 10:49:42 2010 +0000
++++ b/vcl/unx/source/gdi/salgdi3.cxx	Tue Feb 09 12:05:15 2010 +0000
+@@ -1876,8 +1876,10 @@
  
  // -----------------------------------------------------------------------
  
@@ -192,7 +307,7 @@ diff -ru vcl/unx/source/gdi/salgdi3.cxx 
      const rtl::OString aLangAttrib; //TODO: = MsLangId::convertLanguageToIsoByteString( rFontSelData.meLanguage );
  
      psp::italic::type eItalic = psp::italic::Unknown;
-@@ -2138,7 +2140,72 @@
+@@ -1945,7 +1947,72 @@
      }
  
      const psp::PrintFontManager& rMgr = psp::PrintFontManager::get();
@@ -266,7 +381,7 @@ diff -ru vcl/unx/source/gdi/salgdi3.cxx 
  }
  
  //--------------------------------------------------------------------------
-@@ -2154,20 +2221,19 @@
+@@ -1961,20 +2028,19 @@
          return false;
  
      rtl::OUString aDummy;
@@ -292,7 +407,7 @@ diff -ru vcl/unx/source/gdi/salgdi3.cxx 
      return true;
  }
  
-@@ -2184,21 +2250,20 @@
+@@ -1991,21 +2057,20 @@
      ||  0 == rFontSelData.maSearchName.CompareIgnoreCaseToAscii( "opensymbol", 10) )
          return false;
  


Index: openoffice.org.spec
===================================================================
RCS file: /cvs/pkgs/rpms/openoffice.org/devel/openoffice.org.spec,v
retrieving revision 1.2142
retrieving revision 1.2143
diff -u -p -r1.2142 -r1.2143
--- openoffice.org.spec	6 Feb 2010 12:28:15 -0000	1.2142
+++ openoffice.org.spec	9 Feb 2010 12:44:37 -0000	1.2143
@@ -1,6 +1,6 @@
 %define oootag OOO320
 %define ooomilestone 12
-%define rh_rpm_release 3
+%define rh_rpm_release 4
 
 # rhbz#465664 jar-repacking breaks help by reordering META-INF/MANIFEST.MF
 %define __jar_repack %{nil}
@@ -4183,6 +4183,9 @@ fi
 %endif
 
 %changelog
+* Sat Feb 06 2010 Caolán McNamara <caolanm at redhat.com> - 1:3.2.0-12.4
+- Resolves: rhbz#445588 improve same name substitution
+
 * Sat Feb 06 2010 Caolán McNamara <caolanm at redhat.com> - 1:3.2.0-12.3
 - Resolves: rhbz#561989 openoffice.org-3.2.0.ooo109009.sc.tooltipcrash.patch
 



More information about the scm-commits mailing list