FONTAINE  1.0
FontFace.h
Go to the documentation of this file.
1 //
2 // The Fontaine Font Analysis Project
3 //
4 // Copyright (c) 2009 by Edward H. Trager
5 // All Rights Reserved
6 //
7 // Released under the GNU GPL version 2.0 or later.
8 //
9 
10 
11 #ifndef FONTFACE_INCLUDED
12 #define FONTFACE_INCLUDED
13 
14 #include <string>
15 #include <set>
16 #include <vector>
17 
18 #include <ft2build.h>
19 #include FT_FREETYPE_H
20 #include FT_SFNT_NAMES_H
21 
22 #include "Utf8String.h"
23 #include "FontLibrary.h"
24 #include "OrthographyResults.h"
25 #include "LicenseData.h"
26 
27 //
28 // Needed by the non-const fillReport() method:
29 //
30 #include "MLR.h"
31 
32 //
33 // This class contains information
34 // about a single font file:
35 //
36 class FontFace{
37 
38 public:
39 
40  //
41  // FontFaces are distinguished uniquely by
42  // using commonName + subFamily as the key:
43  //
44  struct compare{
45  bool operator()(const FontFace *f1,const FontFace *f2) const{
46  std::string t1, t2;
47  t1 = f1->_commonName;
48  t1 += f1->_subFamily ;
49  t2 = f2->_commonName;
50  t2 += f2->_subFamily ;
51  return t1 < t2;
52  }
53  };
54 
55  //
56  // The following enums generally follow the W3C CSS Standard (http://www.w3.org/TR/REC-CSS1):
57  //
59  enum STYLE { NORMAL, ITALIC, OBLIQUE };
61  //
63  //
64  // As the common labels "serif" and "sans" are primarily applicable in typography in the
65  // Western world, the following enum provides a generalization that is applicable across
66  // all scripts:
67  //
69 
70  enum NAMEID {
92  };
93 
94 private:
95 
96  FT_Face _face;
97 
98  std::string _fileName;
99  std::string _commonName; // The English or common Font Family name. e.g. "HanWangKaiMediumPoIn1"
100  std::string _nativeName; // The native Font Family name, e.g. "漢宗中楷體破音一"
101  std::string _subFamily; // As given in the English or common subFamily record.
102 
103  std::string _copyright;
104 
105  std::string _licenseURL; // 2009.07.16.ET addendum
106 
107  // 2011.04.18.ET addenda:
108  std::string _version;
109  std::string _vendor;
110  std::string _designer;
111  std::string _vendorURL;
112  std::string _designerURL;
113 
114  unsigned _glyphCount; // Number of glyphs
115 
121 
122  //
123  // Supported Orthographies
124  //
125  std::vector< const OrthographyResults * > _supportedOrthographies;
126 
127  //
128  // License:
129  //
131 
135 
136  std::set<UTF32> _unicodeValues;
137 
138  UTF8String _getPlatform3Encoding1String( unsigned length, const FT_Byte *string) const;
139  UTF8String _getPlatform1Encoding0String( unsigned length, const FT_Byte *string) const;
140  UTF8String _getStringFromTrueTypeFont(FT_SfntName &fontName) const;
141 
142  unsigned int _getUnicodeValues(void);
143 
144  //
145  // Reporting option state flags:
146  //
151 
152 public:
153 
154  //
155  // Constructor:
156  //
157  FontFace( FontLibrary &library, const std::string &fileName );
158 
159  //
160  // Destructor:
161  //
162  ~FontFace();
163 
164  //
165  // hasUnicodeValue()
166  //
167  bool hasUnicodeValue(UTF32) const;
168 
169  //
170  // getters for reports:
171  //
172  std::string getBasicReport(void) const;
173  std::string getOrthographyReport(void) const;
174 
175  //
176  // Reporting options:
177  //
178  void setReportOnMissing(bool x);
179  void setReportOnFragmentary(bool x);
180  void setReportOnPartial(bool x);
181  void setReportOnFull(bool x);
182 
183 private:
184 
185  bool _checkOrthography( const OrthographyData *pData );
186  void _checkOrthographies(void);
187 
188  bool _checkLicense( const std::string &test, const LicenseData *pData);
189  bool _checkAllKnownLicenses( const std::string &licenseString);
190  void _storeCopyrightSummary(const std::string &copyrightString);
191  void _checkLicenses(void);
192 
193 public:
194 
195  //
196  // getters:
197  //
198  const std::string & getFileName(void) const;
199  const std::string & getCommonName(void) const;
200  const std::string & getNativeName(void) const;
201  const std::string & getSubFamily(void) const;
202 
203  std::string getLicenseReport(void) const;
204  const std::string & getCopyright(void) const;
205 
206  unsigned getGlyphCount(void) const;
207  unsigned getCharacterCount(void) const;
208  FAMILY getFamily(void) const;
209  STYLE getStyle(void) const;
210  VARIANT getVariant(void) const;
211  WEIGHT getWeight(void) const;
212  STROKE getStroke(void) const;
213  bool hasVerticalMetrics(void) const;
214  bool isFixedWidth(void) const;
215  bool hasFixedSizes(void) const;
216 
217  //
218  // Pass in a report object, mlr,
219  // and fill in the report:
220  //
221  void fillReport(MLR *mlr);
222 
223 };
224 
225 #endif
const std::string & getNativeName(void) const
Definition: FontFace.cpp:898
bool hasUnicodeValue(UTF32) const
Definition: FontFace.cpp:636
Definition: MLR.h:49
UTF8String _getPlatform1Encoding0String(unsigned length, const FT_Byte *string) const
Definition: FontFace.cpp:243
STYLE
Definition: FontFace.h:59
void setReportOnFull(bool x)
Definition: FontFace.cpp:873
Definition: FontFace.h:83
Definition: FontFace.h:91
Definition: FontFace.h:71
Definition: FontFace.h:44
FT_Face _face
Definition: FontFace.h:96
Definition: FontFace.h:76
unsigned int _getUnicodeValues(void)
Definition: FontFace.cpp:314
Definition: Utf8String.h:55
UTF8String _getPlatform3Encoding1String(unsigned length, const FT_Byte *string) const
Definition: FontFace.cpp:220
Definition: FontFace.h:62
const std::string & getSubFamily(void) const
Definition: FontFace.cpp:907
std::string _commonName
Definition: FontFace.h:99
Definition: FontFace.h:58
Definition: FontFace.h:62
Definition: FontFace.h:59
Definition: FontFace.h:62
bool _hasFixedSizes
Definition: FontFace.h:134
const std::string & getFileName(void) const
Definition: FontFace.cpp:880
Definition: FontLibrary.h:17
Definition: FontFace.h:60
std::string _copyright
Definition: FontFace.h:103
void setReportOnMissing(bool x)
Definition: FontFace.cpp:852
Definition: FontFace.h:87
Definition: FontFace.h:58
Definition: OrthographyData.h:28
void fillReport(MLR *mlr)
Definition: FontFace.cpp:1033
WEIGHT getWeight(void) const
Definition: FontFace.cpp:988
Definition: FontFace.h:62
std::string _nativeName
Definition: FontFace.h:100
Definition: FontFace.h:73
std::string _designerURL
Definition: FontFace.h:112
std::string _version
Definition: FontFace.h:108
Definition: FontFace.h:58
STROKE _stroke
Definition: FontFace.h:120
bool _checkAllKnownLicenses(const std::string &licenseString)
Definition: FontFace.cpp:775
STROKE getStroke(void) const
Definition: FontFace.cpp:997
unsigned long UTF32
Definition: Utf8String.h:40
void _checkLicenses(void)
Definition: FontFace.cpp:677
std::vector< const OrthographyResults * > _supportedOrthographies
Definition: FontFace.h:125
Definition: FontFace.h:85
bool _isFixedWidth
Definition: FontFace.h:133
Definition: FontFace.h:74
Definition: FontFace.h:59
Definition: FontFace.h:62
bool _hasVerticalMetrics
Definition: FontFace.h:132
std::string getBasicReport(void) const
Definition: FontFace.cpp:291
WEIGHT _weight
Definition: FontFace.h:119
bool _reportFragmentary
Definition: FontFace.h:148
std::string _fileName
Definition: FontFace.h:98
~FontFace()
Definition: FontFace.cpp:211
Definition: FontFace.h:59
bool _reportMissing
Definition: FontFace.h:147
void setReportOnFragmentary(bool x)
Definition: FontFace.cpp:859
FAMILY getFamily(void) const
Definition: FontFace.cpp:961
UTF8String _getStringFromTrueTypeFont(FT_SfntName &fontName) const
Definition: FontFace.cpp:261
Definition: FontFace.h:80
const std::string & getCommonName(void) const
Definition: FontFace.cpp:889
FontFace(FontLibrary &library, const std::string &fileName)
Definition: FontFace.cpp:31
bool _reportPartial
Definition: FontFace.h:149
std::string _vendor
Definition: FontFace.h:109
Definition: FontFace.h:68
Definition: FontFace.h:68
unsigned _glyphCount
Definition: FontFace.h:114
Definition: FontFace.h:78
unsigned getCharacterCount(void) const
Definition: FontFace.cpp:952
STROKE
Definition: FontFace.h:68
bool _checkLicense(const std::string &test, const LicenseData *pData)
Definition: FontFace.cpp:837
const std::string & getCopyright(void) const
Definition: FontFace.cpp:934
Definition: FontFace.h:90
STYLE getStyle(void) const
Definition: FontFace.cpp:970
std::string _vendorURL
Definition: FontFace.h:111
Definition: FontFace.h:62
VARIANT _variant
Definition: FontFace.h:118
bool _reportFull
Definition: FontFace.h:150
bool hasFixedSizes(void) const
Definition: FontFace.cpp:1024
Definition: LicenseData.h:25
std::string getLicenseReport(void) const
Definition: FontFace.cpp:916
Definition: FontFace.h:62
Definition: FontFace.h:68
Definition: FontFace.h:77
Definition: FontFace.h:62
std::string _designer
Definition: FontFace.h:110
std::set< UTF32 > _unicodeValues
Definition: FontFace.h:136
Definition: FontFace.h:79
bool isFixedWidth(void) const
Definition: FontFace.cpp:1015
VARIANT getVariant(void) const
Definition: FontFace.cpp:979
Definition: FontFace.h:89
Definition: FontFace.h:58
Definition: FontFace.h:72
WEIGHT
Definition: FontFace.h:62
const LicenseData * pData
Definition: Aladdin.h:42
Definition: FontFace.h:62
unsigned getGlyphCount(void) const
Definition: FontFace.cpp:943
Definition: FontFace.h:82
Definition: FontFace.h:60
FAMILY
Definition: FontFace.h:58
void setReportOnPartial(bool x)
Definition: FontFace.cpp:866
bool hasVerticalMetrics(void) const
Definition: FontFace.cpp:1006
std::string _licenseURL
Definition: FontFace.h:105
Definition: FontFace.h:75
Definition: FontFace.h:84
Definition: FontFace.h:86
Definition: FontFace.h:88
Definition: FontFace.h:58
STYLE _style
Definition: FontFace.h:117
bool _checkOrthography(const OrthographyData *pData)
Definition: FontFace.cpp:334
void _checkOrthographies(void)
Definition: FontFace.cpp:419
Definition: FontFace.h:36
std::string getOrthographyReport(void) const
Definition: FontFace.cpp:649
NAMEID
Definition: FontFace.h:70
void _storeCopyrightSummary(const std::string &copyrightString)
Definition: FontFace.cpp:762
Definition: FontFace.h:62
const LicenseData * _licenseData
Definition: FontFace.h:130
bool operator()(const FontFace *f1, const FontFace *f2) const
Definition: FontFace.h:45
VARIANT
Definition: FontFace.h:60
FAMILY _genericFamily
Definition: FontFace.h:116
Definition: FontFace.h:81
std::string _subFamily
Definition: FontFace.h:101
Definition: FontFace.h:62