/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef _SV_FONTSUBSET_HXX #define _SV_FONTSUBSET_HXX #include #include #include #include "salglyphid.hxx" #include "vcl/dllapi.h" namespace vcl { struct _TrueTypeFont; } // SFT's idea of a TTF font class VCL_DLLPUBLIC FontSubsetInfo { public: explicit FontSubsetInfo( void ); virtual ~FontSubsetInfo( void ); enum FontType { NO_FONT = 0, SFNT_TTF = 1<<1, // SFNT container with TrueType glyphs SFNT_CFF = 1<<2, // SFNT container with CFF-container TYPE1_PFA = 1<<3, // PSType1 Postscript Font Ascii TYPE1_PFB = 1<<4, // PSType1 Postscript Font Binary CFF_FONT = 1<<5, // CFF-container with PSType2 glyphs TYPE3_FONT = 1<<6, // PSType3 Postscript font TYPE42_FONT = 1<<7, // PSType42 wrapper for an SFNT_TTF ANY_SFNT = SFNT_TTF | SFNT_CFF, ANY_TYPE1 = TYPE1_PFA | TYPE1_PFB, ANY_FONT = 0xFF }; bool LoadFont( FontType eInFontType, const unsigned char* pFontBytes, int nByteLength ); bool LoadFont( vcl::_TrueTypeFont* pSftTrueTypeFont ); bool CreateFontSubset( int nOutFontTypeMask, FILE* pOutFile, const char* pOutFontName, const sal_GlyphId* pGlyphIds, const sal_uInt8* pEncodedIds, int nReqGlyphCount, sal_Int32* pOutGlyphWidths = NULL ); public: // TODO: make subsetter results private and provide accessor methods instead // subsetter-provided subset details needed by e.g. Postscript or PDF String m_aPSName; int m_nAscent; // all metrics in PS font units int m_nDescent; int m_nCapHeight; Rectangle m_aFontBBox; FontType m_nFontType; // font-type of subset result private: // input-font-specific details unsigned const char* mpInFontBytes; int mnInByteLength; FontType meInFontType; // allowed mask of input font-types vcl::_TrueTypeFont* mpSftTTFont; // subset-request details int mnReqFontTypeMask; // allowed subset-target font types FILE* mpOutFile; const char* mpReqFontName; const sal_GlyphId* mpReqGlyphIds; const sal_uInt8* mpReqEncodedIds; int mnReqGlyphCount; protected: bool CreateFontSubsetFromCff( sal_Int32* pOutGlyphWidths = NULL ); bool CreateFontSubsetFromSfnt( sal_Int32* pOutGlyphWidths = NULL ); bool CreateFontSubsetFromType1( sal_Int32* pOutGlyphWidths = NULL ); }; #endif // _SV_FONTSUBSET_HXX