summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vcl/inc/sft.hxx46
-rw-r--r--vcl/inc/unx/fontmanager.hxx36
-rw-r--r--vcl/source/fontsubset/sft.cxx77
-rw-r--r--vcl/unx/generic/fontmanager/fontcache.cxx9
-rw-r--r--vcl/unx/generic/fontmanager/fontmanager.cxx112
5 files changed, 4 insertions, 276 deletions
diff --git a/vcl/inc/sft.hxx b/vcl/inc/sft.hxx
index 2efe115c7ccd..fe50a95b59f6 100644
--- a/vcl/inc/sft.hxx
+++ b/vcl/inc/sft.hxx
@@ -437,43 +437,6 @@ namespace vcl
*/
TTSimpleGlyphMetrics *GetTTSimpleGlyphMetrics(TrueTypeFont *ttf, sal_uInt16 *glyphArray, int nGlyphs, bool vertical);
-/**
- * Queries glyph metrics. Allocates an array of TTSimpleGlyphMetrics structs and returns it.
- * This function behaves just like GetTTSimpleGlyphMetrics() but it takes a range of Unicode
- * characters instead of an array of glyphs.
- *
- * @param ttf pointer to the TrueTypeFont structure
- * @param firstChar Unicode value of the first character in the range
- * @param nChars number of Unicode characters in the range
- * @param vertical writing mode: false - horizontal, true - vertical
- *
- * @see GetTTSimpleGlyphMetrics
- * @ingroup sft
- *
- */
- TTSimpleGlyphMetrics *GetTTSimpleCharMetrics(TrueTypeFont *ttf, sal_uInt16 firstChar, int nChars, bool vertical);
-
-/**
- * Maps a Unicode (UCS-2) string to a glyph array. Returns the number of glyphs in the array,
- * which for TrueType fonts is always the same as the number of input characters.
- *
- * @param ttf pointer to the TrueTypeFont structure
- * @param str pointer to a UCS-2 string
- * @param nchars number of characters in <b>str</b>
- * @param glyphArray pointer to the glyph array where glyph IDs are to be recorded.
- * @param bvertical vertical text
- *
- * @return MapString() returns -1 if the TrueType font has no usable 'cmap' tables.
- * Otherwise it returns the number of characters processed: <b>nChars</b>
- *
- * glyphIDs of TrueType fonts are 2 byte positive numbers. glyphID of 0 denotes a missing
- * glyph and traditionally defaults to an empty square.
- * glyphArray should be at least sizeof(sal_uInt16) * nchars bytes long. If glyphArray is NULL
- * MapString() replaces the UCS-2 characters in str with glyphIDs.
- * @ingroup sft
- */
- int VCL_DLLPUBLIC MapString(TrueTypeFont *ttf, sal_uInt16 *str, int nchars, sal_uInt16 *glyphArray, bool bvertical);
-
#if defined(_WIN32) || defined(MACOSX) || defined(IOS)
/**
* Maps a Unicode (UCS-2) character to a glyph ID and returns it. Missing glyph has
@@ -490,15 +453,6 @@ namespace vcl
#endif
/**
- * Returns 0 when the font does not substitute vertical glyphs
- *
- * @param ttf pointer to the TrueTypeFont structure
- * @param bvertical flag to function that we want to find the vertical
- * GlobalSUBstitution attribute
- */
- int DoesVerticalSubstitution( TrueTypeFont *ttf, int bvertical);
-
-/**
* Returns global font information about the TrueType font.
* @see TTGlobalFontInfo
*
diff --git a/vcl/inc/unx/fontmanager.hxx b/vcl/inc/unx/fontmanager.hxx
index 0a2de15ba3a6..86d946a46536 100644
--- a/vcl/inc/unx/fontmanager.hxx
+++ b/vcl/inc/unx/fontmanager.hxx
@@ -130,32 +130,6 @@ class VCL_PLUGIN_PUBLIC PrintFontManager
friend struct PrintFont;
friend class FontCache;
- struct PrintFontMetrics
- {
- // character metrics are stored by the following keys:
- // lower two bytes contain a sal_Unicode (a UCS2 character)
- // upper byte contains: 0 for horizontal metric
- // 1 for vertical metric
- // highest byte: 0 for now
- std::unordered_map< int, CharacterMetric > m_aMetrics;
- // contains the unicode blocks for which metrics were queried
- // this implies that metrics should be queried in terms of
- // unicode blocks. here a unicode block is identified
- // by the upper byte of the UCS2 encoding.
- // note that the corresponding bit should be set even
- // if the font does not support a single character of that page
- // this map shows, which pages were queried already
- // if (like in AFM metrics) all metrics are queried in
- // a single pass, then all bits should be set
- char m_aPages[32];
-
- std::unordered_map< sal_Unicode, bool > m_bVerticalSubstitutions;
-
- PrintFontMetrics() {}
-
- bool isEmpty() const { return m_aMetrics.empty(); }
- };
-
struct PrintFont
{
// font attributes
@@ -170,7 +144,6 @@ class VCL_PLUGIN_PUBLIC PrintFontManager
rtl_TextEncoding m_aEncoding;
CharacterMetric m_aGlobalMetricX;
CharacterMetric m_aGlobalMetricY;
- PrintFontMetrics* m_pMetrics;
int m_nAscend;
int m_nDescend;
int m_nLeading;
@@ -178,7 +151,6 @@ class VCL_PLUGIN_PUBLIC PrintFontManager
int m_nYMin;
int m_nXMax;
int m_nYMax;
- bool m_bHaveVerticalSubstitutedGlyphs;
bool m_bUserOverride;
int m_nDirectory; // atom containing system dependent path
@@ -187,8 +159,6 @@ class VCL_PLUGIN_PUBLIC PrintFontManager
unsigned int m_nTypeFlags; // copyright bits and PS-OpenType flag
explicit PrintFont();
- ~PrintFont();
- bool queryMetricPage(int nPage, utl::MultiAtomProvider* pProvider);
};
fontID m_nNextFontID;
@@ -328,12 +298,6 @@ public:
// get a fonts glyph bounding box
void getFontBoundingBox( fontID nFont, int& xMin, int& yMin, int& xMax, int& yMax );
- // get a specific fonts metrics
-
- // get metrics for an array of sal_Unicode characters
- // the user is responsible to allocate pArray large enough
- bool getMetrics( fontID nFontID, const sal_Unicode* pString, int nLen, CharacterMetric* pArray ) const;
-
// creates a new font subset of an existing SFNT font
// returns true in case of success, else false
// nFont: the font to be subsetted
diff --git a/vcl/source/fontsubset/sft.cxx b/vcl/source/fontsubset/sft.cxx
index d4a8b5a764a6..69220268aaa0 100644
--- a/vcl/source/fontsubset/sft.cxx
+++ b/vcl/source/fontsubset/sft.cxx
@@ -2344,57 +2344,6 @@ int CreateT42FromTTGlyphs(TrueTypeFont *ttf,
return SF_OK;
}
-int MapString(TrueTypeFont *ttf, sal_uInt16 *str, int nchars, sal_uInt16 *glyphArray, bool bvertical)
-{
- int i;
- sal_uInt16 *cp;
-
- if (ttf->cmapType == CMAP_NOT_USABLE ) return -1;
- if (!nchars) return 0;
-
- if (glyphArray == nullptr) {
- cp = str;
- } else {
- cp = glyphArray;
- }
-
- switch (ttf->cmapType) {
- case CMAP_MS_Symbol:
- if( ttf->mapper == getGlyph0 ) {
- sal_uInt16 aChar;
- for( i = 0; i < nchars; i++ ) {
- aChar = str[i];
- if( ( aChar & 0xf000 ) == 0xf000 )
- aChar &= 0x00ff;
- cp[i] = aChar;
- }
- }
- else if( glyphArray )
- memcpy(glyphArray, str, nchars * 2);
- break;
-
- case CMAP_MS_Unicode:
- if (glyphArray != nullptr) {
- memcpy(glyphArray, str, nchars * 2);
- }
- break;
-
- case CMAP_MS_ShiftJIS: TranslateString12(str, cp, nchars); break;
- case CMAP_MS_Big5: TranslateString13(str, cp, nchars); break;
- case CMAP_MS_PRC: TranslateString14(str, cp, nchars); break;
- case CMAP_MS_Wansung: TranslateString15(str, cp, nchars); break;
- case CMAP_MS_Johab: TranslateString16(str, cp, nchars); break;
- }
-
- const sal_uInt32 nMaxCmapSize = ttf->ptr + ttf->fsize - ttf->cmap;
- for (i = 0; i < nchars; i++) {
- cp[i] = (sal_uInt16)ttf->mapper(ttf->cmap, nMaxCmapSize, cp[i]);
- if (cp[i]!=0 && bvertical)
- cp[i] = (sal_uInt16)UseGSUB(ttf,cp[i]);
- }
- return nchars;
-}
-
#if defined(_WIN32) || defined(MACOSX) || defined(IOS)
sal_uInt16 MapChar(TrueTypeFont *ttf, sal_uInt16 ch, bool bvertical)
{
@@ -2424,14 +2373,6 @@ sal_uInt16 MapChar(TrueTypeFont *ttf, sal_uInt16 ch, bool bvertical)
#endif
-int DoesVerticalSubstitution( TrueTypeFont *ttf, int bvertical)
-{
- int nRet = 0;
- if( bvertical)
- nRet = HasVerticalGSUB( ttf);
- return nRet;
-}
-
int GetTTGlyphCount( TrueTypeFont* ttf )
{
return ttf->nglyphs;
@@ -2502,24 +2443,6 @@ TTSimpleGlyphMetrics *GetTTSimpleGlyphMetrics(TrueTypeFont *ttf, sal_uInt16 *gly
return res;
}
-TTSimpleGlyphMetrics *GetTTSimpleCharMetrics(TrueTypeFont * ttf, sal_uInt16 firstChar, int nChars, bool vertical)
-{
- TTSimpleGlyphMetrics *res = nullptr;
- int i, n;
-
- sal_uInt16* str = static_cast<sal_uInt16*>(malloc(nChars * 2));
- assert(str != nullptr);
-
- for (i=0; i<nChars; i++) str[i] = (sal_uInt16)(firstChar + i);
- if ((n = MapString(ttf, str, nChars, nullptr, vertical)) != -1) {
- res = GetTTSimpleGlyphMetrics(ttf, str, n, vertical);
- }
-
- free(str);
-
- return res;
-}
-
// TODO, clean up table parsing and re-use it elsewhere in this file.
void GetTTFontMterics(const std::vector<uint8_t>& hhea,
const std::vector<uint8_t>& os2,
diff --git a/vcl/unx/generic/fontmanager/fontcache.cxx b/vcl/unx/generic/fontmanager/fontcache.cxx
index 7407efbaab1d..4c26e4e95f8d 100644
--- a/vcl/unx/generic/fontmanager/fontcache.cxx
+++ b/vcl/unx/generic/fontmanager/fontcache.cxx
@@ -37,7 +37,7 @@
#include <cstdio>
#endif
-#define CACHE_MAGIC "LibreOffice PspFontCacheFile format 8"
+#define CACHE_MAGIC "LibreOffice PspFontCacheFile format 9"
using namespace std;
using namespace psp;
@@ -183,7 +183,7 @@ void FontCache::flush()
aLine.append(';');
aLine.append(static_cast<sal_Int32>((*it)->m_nLeading));
aLine.append(';');
- aLine.append((*it)->m_bHaveVerticalSubstitutedGlyphs ? '1' : '0');
+ aLine.append('0');
aLine.append(';');
aLine.append(static_cast<sal_Int32>((*it)->m_aGlobalMetricX.width ));
aLine.append(';');
@@ -359,8 +359,7 @@ void FontCache::read()
pFont->m_nAscend = atoi( pLine + nTokenPos[7] );
pFont->m_nDescend = atoi( pLine + nTokenPos[8] );
pFont->m_nLeading = atoi( pLine + nTokenPos[9] );
- pFont->m_bHaveVerticalSubstitutedGlyphs
- = (atoi( pLine + nTokenPos[10] ) != 0);
+ /* removed */ (void)atoi( pLine + nTokenPos[10] );
pFont->m_aGlobalMetricX.width
= atoi( pLine + nTokenPos[11] );
pFont->m_aGlobalMetricX.height
@@ -449,7 +448,6 @@ void FontCache::copyPrintFont( const PrintFontManager::PrintFont* pFrom, PrintFo
pTo->m_nYMin = pFrom->m_nYMin;
pTo->m_nXMax = pFrom->m_nXMax;
pTo->m_nYMax = pFrom->m_nYMax;
- pTo->m_bHaveVerticalSubstitutedGlyphs = pFrom->m_bHaveVerticalSubstitutedGlyphs;
pTo->m_bUserOverride = pFrom->m_bUserOverride;
}
@@ -479,7 +477,6 @@ bool FontCache::equalsPrintFont( const PrintFontManager::PrintFont* pLeft, Print
pRight->m_nYMin != pLeft->m_nYMin ||
pRight->m_nXMax != pLeft->m_nXMax ||
pRight->m_nYMax != pLeft->m_nYMax ||
- pRight->m_bHaveVerticalSubstitutedGlyphs != pLeft->m_bHaveVerticalSubstitutedGlyphs ||
pRight->m_bUserOverride != pLeft->m_bUserOverride
)
return false;
diff --git a/vcl/unx/generic/fontmanager/fontmanager.cxx b/vcl/unx/generic/fontmanager/fontmanager.cxx
index dbd816efb2dc..30f1d0aca799 100644
--- a/vcl/unx/generic/fontmanager/fontmanager.cxx
+++ b/vcl/unx/generic/fontmanager/fontmanager.cxx
@@ -102,7 +102,6 @@ PrintFontManager::PrintFont::PrintFont()
, m_eWeight(WEIGHT_DONTKNOW)
, m_ePitch(PITCH_DONTKNOW)
, m_aEncoding(RTL_TEXTENCODING_DONTKNOW)
-, m_pMetrics(nullptr)
, m_nAscend(0)
, m_nDescend(0)
, m_nLeading(0)
@@ -110,7 +109,6 @@ PrintFontManager::PrintFont::PrintFont()
, m_nYMin(0)
, m_nXMax(0)
, m_nYMax(0)
-, m_bHaveVerticalSubstitutedGlyphs(false)
, m_bUserOverride( false )
, m_nDirectory(0)
, m_nCollectionEntry(0)
@@ -118,76 +116,6 @@ PrintFontManager::PrintFont::PrintFont()
{
}
-PrintFontManager::PrintFont::~PrintFont()
-{
- delete m_pMetrics;
-}
-
-bool PrintFontManager::PrintFont::queryMetricPage( int nPage, MultiAtomProvider* /*pProvider*/ )
-{
- bool bSuccess = false;
-
- OString aFile( PrintFontManager::get().getFontFile( this ) );
-
- TrueTypeFont* pTTFont = nullptr;
-
- if( OpenTTFontFile( aFile.getStr(), m_nCollectionEntry, &pTTFont ) == SF_OK )
- {
- if( ! m_pMetrics )
- {
- m_pMetrics = new PrintFontMetrics;
- memset (m_pMetrics->m_aPages, 0, sizeof(m_pMetrics->m_aPages));
- }
- m_pMetrics->m_aPages[ nPage/8 ] |= (1 << ( nPage & 7 ));
- int i;
- sal_uInt16 table[256], table_vert[256];
-
- for( i = 0; i < 256; i++ )
- table[ i ] = 256*nPage + i;
-
- int nCharacters = nPage < 255 ? 256 : 254;
- MapString( pTTFont, table, nCharacters, nullptr, false );
- TTSimpleGlyphMetrics* pMetrics = GetTTSimpleCharMetrics( pTTFont, nPage*256, nCharacters, false );
- if( pMetrics )
- {
- for( i = 0; i < nCharacters; i++ )
- {
- if( table[i] )
- {
- CharacterMetric& rChar = m_pMetrics->m_aMetrics[ nPage*256 + i ];
- rChar.width = pMetrics[ i ].adv;
- rChar.height = m_aGlobalMetricX.height;
- }
- }
-
- free( pMetrics );
- }
-
- for( i = 0; i < 256; i++ )
- table_vert[ i ] = 256*nPage + i;
- MapString( pTTFont, table_vert, nCharacters, nullptr, true );
- pMetrics = GetTTSimpleCharMetrics( pTTFont, nPage*256, nCharacters, true );
- if( pMetrics )
- {
- for( i = 0; i < nCharacters; i++ )
- {
- if( table_vert[i] )
- {
- CharacterMetric& rChar = m_pMetrics->m_aMetrics[ nPage*256 + i + ( 1 << 16 ) ];
- rChar.width = m_aGlobalMetricY.width;
- rChar.height = pMetrics[ i ].adv;
- if( table_vert[i] != table[i] )
- m_pMetrics->m_bVerticalSubstitutions[ nPage*256 + i ] = true;
- }
- }
- free( pMetrics );
- }
- CloseTTFont( pTTFont );
- bSuccess = true;
- }
- return bSuccess;
-}
-
/*
* one instance only
*/
@@ -788,9 +716,6 @@ bool PrintFontManager::analyzeSfntFile( PrintFont* pFont ) const
// get type flags
pFont->m_nTypeFlags = (unsigned int)aInfo.typeFlags;
- // get vertical substitutions flag
- pFont->m_bHaveVerticalSubstitutedGlyphs = DoesVerticalSubstitution( pTTFont, 1 );
-
CloseTTFont( pTTFont );
bSuccess = true;
}
@@ -989,9 +914,7 @@ void PrintFontManager::fillPrintFontInfo( PrintFont* pFont, FastPrintFontInfo& r
void PrintFontManager::fillPrintFontInfo( PrintFont* pFont, PrintFontInfo& rInfo ) const
{
- if( ( pFont->m_nAscend == 0 && pFont->m_nDescend == 0 ) ||
- ! pFont->m_pMetrics || pFont->m_pMetrics->isEmpty()
- )
+ if (pFont->m_nAscend == 0 && pFont->m_nDescend == 0)
{
analyzeSfntFile(pFont);
}
@@ -1162,39 +1085,6 @@ int PrintFontManager::getFontDescend( fontID nFontID ) const
return pFont ? pFont->m_nDescend : 0;
}
-bool PrintFontManager::getMetrics( fontID nFontID, const sal_Unicode* pString, int nLen, CharacterMetric* pArray ) const
-{
- PrintFont* pFont = getFont( nFontID );
- if( ! pFont )
- return false;
-
- if( ( pFont->m_nAscend == 0 && pFont->m_nDescend == 0 )
- || ! pFont->m_pMetrics || pFont->m_pMetrics->isEmpty()
- )
- {
- analyzeSfntFile(pFont);
- }
-
- for( int i = 0; i < nLen; i++ )
- {
- if( ! pFont->m_pMetrics ||
- ! ( pFont->m_pMetrics->m_aPages[ pString[i] >> 11 ] & ( 1 << ( ( pString[i] >> 8 ) & 7 ) ) ) )
- pFont->queryMetricPage( pString[i] >> 8, m_pAtoms );
- pArray[i].width = pArray[i].height = -1;
- if( pFont->m_pMetrics )
- {
- int effectiveCode = pString[i];
- std::unordered_map< int, CharacterMetric >::const_iterator it =
- pFont->m_pMetrics->m_aMetrics.find( effectiveCode );
- // the character metrics are in it->second
- if( it != pFont->m_pMetrics->m_aMetrics.end() )
- pArray[ i ] = it->second;
- }
- }
-
- return true;
-}
-
// TODO: move most of this stuff into the central font-subsetting code
bool PrintFontManager::createFontSubset(
FontSubsetInfo& rInfo,