xref: /aoo4110/main/vcl/inc/fontsubset.hxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef _SV_FONTSUBSET_HXX
25*b1cdbd2cSJim Jagielski #define _SV_FONTSUBSET_HXX
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <tools/gen.hxx>
28*b1cdbd2cSJim Jagielski #include <tools/string.hxx>
29*b1cdbd2cSJim Jagielski #include <cstdio>
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #include "salglyphid.hxx"
32*b1cdbd2cSJim Jagielski #include "vcl/dllapi.h"
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski namespace vcl { struct _TrueTypeFont; } // SFT's idea of a TTF font
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski class VCL_DLLPUBLIC FontSubsetInfo
37*b1cdbd2cSJim Jagielski {
38*b1cdbd2cSJim Jagielski public:
39*b1cdbd2cSJim Jagielski 	explicit	FontSubsetInfo( void );
40*b1cdbd2cSJim Jagielski 	virtual		~FontSubsetInfo( void );
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski 	enum FontType {
43*b1cdbd2cSJim Jagielski 		NO_FONT		= 0,
44*b1cdbd2cSJim Jagielski 		SFNT_TTF	= 1<<1,		// SFNT container with TrueType glyphs
45*b1cdbd2cSJim Jagielski 		SFNT_CFF	= 1<<2,		// SFNT container with CFF-container
46*b1cdbd2cSJim Jagielski 		TYPE1_PFA	= 1<<3,		// PSType1 Postscript Font Ascii
47*b1cdbd2cSJim Jagielski 		TYPE1_PFB	= 1<<4,		// PSType1 Postscript Font Binary
48*b1cdbd2cSJim Jagielski 		CFF_FONT	= 1<<5,		// CFF-container with PSType2 glyphs
49*b1cdbd2cSJim Jagielski 		TYPE3_FONT	= 1<<6,		// PSType3 Postscript font
50*b1cdbd2cSJim Jagielski 		TYPE42_FONT	= 1<<7,		// PSType42 wrapper for an SFNT_TTF
51*b1cdbd2cSJim Jagielski 		ANY_SFNT	= SFNT_TTF | SFNT_CFF,
52*b1cdbd2cSJim Jagielski 		ANY_TYPE1	= TYPE1_PFA | TYPE1_PFB,
53*b1cdbd2cSJim Jagielski 		ANY_FONT	= 0xFF
54*b1cdbd2cSJim Jagielski 	};
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski 	bool		LoadFont( FontType eInFontType,
57*b1cdbd2cSJim Jagielski 					const unsigned char* pFontBytes, int nByteLength );
58*b1cdbd2cSJim Jagielski 	bool		LoadFont( vcl::_TrueTypeFont* pSftTrueTypeFont );
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski 	bool		CreateFontSubset( int nOutFontTypeMask,
61*b1cdbd2cSJim Jagielski 					FILE* pOutFile, const char* pOutFontName,
62*b1cdbd2cSJim Jagielski 					const sal_GlyphId* pGlyphIds, const sal_uInt8* pEncodedIds,
63*b1cdbd2cSJim Jagielski 					int nReqGlyphCount, sal_Int32* pOutGlyphWidths = NULL );
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski public: // TODO: make subsetter results private and provide accessor methods instead
66*b1cdbd2cSJim Jagielski 	// subsetter-provided subset details needed by e.g. Postscript or PDF
67*b1cdbd2cSJim Jagielski 	String		m_aPSName;
68*b1cdbd2cSJim Jagielski 	int			m_nAscent; // all metrics in PS font units
69*b1cdbd2cSJim Jagielski 	int			m_nDescent;
70*b1cdbd2cSJim Jagielski 	int			m_nCapHeight;
71*b1cdbd2cSJim Jagielski 	Rectangle	m_aFontBBox;
72*b1cdbd2cSJim Jagielski 	FontType	m_nFontType;	// font-type of subset result
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski private:
75*b1cdbd2cSJim Jagielski 	// input-font-specific details
76*b1cdbd2cSJim Jagielski 	unsigned const char*	mpInFontBytes;
77*b1cdbd2cSJim Jagielski 	int						mnInByteLength;
78*b1cdbd2cSJim Jagielski 	FontType				meInFontType;	// allowed mask of input font-types
79*b1cdbd2cSJim Jagielski 	vcl::_TrueTypeFont*		mpSftTTFont;
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski 	// subset-request details
82*b1cdbd2cSJim Jagielski 	int						mnReqFontTypeMask;	// allowed subset-target font types
83*b1cdbd2cSJim Jagielski 	FILE*					mpOutFile;
84*b1cdbd2cSJim Jagielski 	const char*				mpReqFontName;
85*b1cdbd2cSJim Jagielski 	const sal_GlyphId*		mpReqGlyphIds;
86*b1cdbd2cSJim Jagielski 	const sal_uInt8*		mpReqEncodedIds;
87*b1cdbd2cSJim Jagielski 	int						mnReqGlyphCount;
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski protected:
90*b1cdbd2cSJim Jagielski 	bool	CreateFontSubsetFromCff( sal_Int32* pOutGlyphWidths = NULL );
91*b1cdbd2cSJim Jagielski 	bool	CreateFontSubsetFromSfnt( sal_Int32* pOutGlyphWidths = NULL );
92*b1cdbd2cSJim Jagielski 	bool	CreateFontSubsetFromType1( sal_Int32* pOutGlyphWidths = NULL );
93*b1cdbd2cSJim Jagielski };
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski #endif // _SV_FONTSUBSET_HXX
96*b1cdbd2cSJim Jagielski 
97