1 /*
2  ******************************************************************************
3  * © 2016 and later: Unicode, Inc. and others.                    *
4  * License & terms of use: http://www.unicode.org/copyright.html      *
5  ******************************************************************************
6  ******************************************************************************
7  * Copyright (C) 1998-2003, International Business Machines Corporation and   *
8  * others. All Rights Reserved.                                               *
9  ******************************************************************************
10  */
11 
12 #ifndef __FONTMAP_H
13 #define __FONTMAP_H
14 
15 #include "layout/LETypes.h"
16 #include "layout/LEScripts.h"
17 #include "layout/LEFontInstance.h"
18 
19 #include "GUISupport.h"
20 
21 #define BUFFER_SIZE 128
22 
23 class FontMap
24 {
25 public:
26     FontMap(const char *fileName, le_int16 pointSize, GUISupport *guiSupport, LEErrorCode &status);
27 
28     virtual ~FontMap();
29 
30     virtual const LEFontInstance *getScriptFont(le_int32 scriptCode, LEErrorCode &status);
31 
32     virtual le_int16 getPointSize() const;
33 
34     virtual le_int32 getAscent() const;
35 
36     virtual le_int32 getDescent() const;
37 
38     virtual le_int32 getLeading() const;
39 
40 protected:
41     virtual const LEFontInstance *openFont(const char *fontName, le_int16 pointSize, LEErrorCode &status) = 0;
42 
43     char errorMessage[256];
44 
45 private:
46     static char *strip(char *s);
47     le_int32 getFontIndex(const char *fontName);
48     void getMaxMetrics();
49 
50     le_int16 fPointSize;
51     le_int32 fFontCount;
52 
53     le_int32 fAscent;
54     le_int32 fDescent;
55     le_int32 fLeading;
56 
57     GUISupport *fGUISupport;
58 
59     const LEFontInstance *fFontInstances[scriptCodeCount];
60     const char *fFontNames[scriptCodeCount];
61     le_int32 fFontIndices[scriptCodeCount];
62 };
63 
getPointSize()64 inline le_int16 FontMap::getPointSize() const
65 {
66     return fPointSize;
67 }
68 
69 #endif
70 
71