1 /*
2  * Copyright (c) 2020-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef GRAPHIC_LITE_UI_FONT_HEADER_H
17 #define GRAPHIC_LITE_UI_FONT_HEADER_H
18 
19 #include <string>
20 #include "graphic_config.h"
21 #include "gfx_utils/common_macros.h"
22 namespace OHOS {
23 #pragma pack(1)
24 #define BIT_TO_BYTE(x) (((x) + 0x7) >> 3)
25 
26 enum UITextWildcardStaticType : uint8_t { TEXT_STATIC_STR1 = 0, TEXT_STATIC_STR2, TEXT_STATIC_STR3 };
27 
28 struct UITextLanguageTextParam {
29     uint16_t textId;
30     uint16_t fontId;
31     uint8_t align : 2;  // UITextLanguageAlignment
32     uint8_t direct : 1; // UITextLanguageDirect
33     uint8_t shaping : 1;
34     uint8_t wildCard1 : 1;
35     uint8_t wildCard2 : 1;
36     uint8_t reserve : 2;
37     uint32_t strOff1;
38     uint16_t strLen1;
39     uint16_t strLen2;
40     uint16_t strLen3;
41     uint32_t codePointsOff;
42     uint16_t codePointsLen;
43 }; // UITextLanguageTextParam
44 
45 // bin header
46 constexpr uint8_t FONT_VERSION_OFFSET = 0;
47 constexpr uint8_t FONT_VERSION_LEN = 10;
48 constexpr uint8_t FONT_MAGIC_NUM_OFFSET = FONT_VERSION_OFFSET + FONT_VERSION_LEN;
49 constexpr uint8_t FONT_MAGIC_NUM_LEN = 6;
50 constexpr uint8_t FONT_NUMBER_OFFSET = FONT_MAGIC_NUM_OFFSET + FONT_MAGIC_NUM_LEN;
51 constexpr uint8_t FONT_NUMBER_LEN = 2;
52 constexpr uint8_t BIN_HEAD_RES_OFFSET = FONT_NUMBER_OFFSET + FONT_NUMBER_LEN;
53 constexpr uint8_t BIN_HEAD_RES_LEN = 2;
54 constexpr uint8_t FONT_DATA_OFFSET = BIN_HEAD_RES_OFFSET + BIN_HEAD_RES_LEN;
55 constexpr uint8_t BIN_HEAD_TOTAL_LEN = FONT_VERSION_LEN + FONT_MAGIC_NUM_LEN + FONT_NUMBER_LEN + BIN_HEAD_RES_LEN;
56 
57 // font header
58 constexpr uint8_t FONT_ID_OFFSET = 0;
59 constexpr uint8_t FONT_ID_LEN = 1;
60 constexpr uint8_t GLYPH_NUM_OFFSET = FONT_ID_OFFSET + FONT_ID_LEN;
61 constexpr uint8_t GLYPH_NUM_LEN = 2;
62 constexpr uint8_t FONT_HEIGHT_OFFSET = GLYPH_NUM_OFFSET + GLYPH_NUM_LEN;
63 constexpr uint8_t FONT_HEIGHT_LEN = 2;
64 constexpr uint8_t FONT_ASCEND_OFFSET = FONT_HEIGHT_OFFSET + FONT_HEIGHT_LEN;
65 constexpr uint8_t FONT_ASCEND_LEN = 2;
66 constexpr uint8_t FONT_DESCEND_OFFSET = FONT_ASCEND_OFFSET + FONT_ASCEND_LEN;
67 constexpr uint8_t FONT_DESCEND_LEN = 2;
68 constexpr uint8_t FONT_INDEX_OFF_OFFSET = FONT_DESCEND_OFFSET + FONT_DESCEND_LEN;
69 constexpr uint8_t FONT_INDEX_OFF_LEN = 4;
70 constexpr uint8_t FONT_INDEX_LEN_OFFSET = FONT_INDEX_OFF_OFFSET + FONT_INDEX_OFF_LEN;
71 constexpr uint8_t FONT_INDEX_LEN_LEN = 4;
72 constexpr uint8_t GLYPH_OFF_OFFSET = FONT_INDEX_LEN_OFFSET + FONT_INDEX_LEN_LEN;
73 constexpr uint8_t GLYPH_OFF_LEN = 4;
74 constexpr uint8_t GLYPH_LEN_OFFSET = GLYPH_OFF_OFFSET + GLYPH_OFF_LEN;
75 constexpr uint8_t GLYPH_LEN_LEN = 4;
76 constexpr uint8_t FONT_HEAD_RES_OFFSET = GLYPH_LEN_OFFSET + GLYPH_LEN_LEN;
77 constexpr uint8_t FONT_HEAD_RES_LEN = 2;
78 constexpr uint8_t FONT_HEAD_TOTAL_LEN = FONT_ID_LEN + GLYPH_NUM_LEN + FONT_HEIGHT_LEN + FONT_ASCEND_LEN +
79                                         FONT_DESCEND_LEN + GLYPH_OFF_LEN + GLYPH_LEN_LEN + FONT_HEAD_RES_LEN;
80 
81 // glyph header, internal using, not write to bin file
82 constexpr uint8_t FONT_G_HEIGHT_OFFSET = 0;
83 constexpr uint8_t FONT_G_HEIGHT_LEN = 2;
84 constexpr uint8_t GLYPH_G_NUM_OFFSET = FONT_G_HEIGHT_OFFSET + FONT_G_HEIGHT_LEN;
85 constexpr uint8_t GLYPH_G_NUM_LEN = 2;
86 constexpr uint8_t GLYPH_G_ASCEND_OFFSET = GLYPH_G_NUM_OFFSET + GLYPH_G_NUM_LEN;
87 constexpr uint8_t GLYPH_G_ASCEND_LEN = 2;
88 constexpr uint8_t GLYPH_G_DESCEND_OFFSET = GLYPH_G_ASCEND_OFFSET + GLYPH_G_ASCEND_LEN;
89 constexpr uint8_t GLYPH_G_DESCEND_LEN = 2;
90 constexpr uint8_t GLYPH_G_INDEX_OFF_OFFSET = GLYPH_G_DESCEND_OFFSET + GLYPH_G_DESCEND_LEN;
91 constexpr uint8_t GLYPH_G_INDEX_OFF_LEN = 4;
92 constexpr uint8_t GLYPH_G_INDEX_LEN_OFFSET = GLYPH_G_INDEX_OFF_OFFSET + GLYPH_G_INDEX_OFF_LEN;
93 constexpr uint8_t GLYPH_G_INDEX_LEN_LEN = 4;
94 constexpr uint8_t GLYPH_G_OFF_OFFSET = GLYPH_G_INDEX_LEN_OFFSET + GLYPH_G_INDEX_LEN_LEN;
95 constexpr uint8_t GLYPH_G_OFF_LEN = 4;
96 constexpr uint8_t GLYPH_G_LEN_OFFSET = GLYPH_G_OFF_OFFSET + GLYPH_G_OFF_LEN;
97 constexpr uint8_t GLYPH_G_LEN_LEN = 4;
98 constexpr uint8_t FONT_G_HEAD_TOTAL_LEN =
99     FONT_G_HEIGHT_LEN + GLYPH_G_NUM_LEN + GLYPH_G_ASCEND_LEN + GLYPH_G_DESCEND_LEN + GLYPH_G_OFF_LEN + GLYPH_G_LEN_LEN;
100 
101 // glyph node
102 constexpr uint8_t GLYPH_UNICODE_OFFSET = GLYPH_G_NUM_OFFSET + GLYPH_G_NUM_LEN;
103 constexpr uint8_t GLYPH_UNICODE_LEN = 4;
104 constexpr uint8_t GLYPH_LEFT_OFFSET = GLYPH_UNICODE_OFFSET + GLYPH_UNICODE_LEN;
105 constexpr uint8_t GLYPH_LEFT_LEN = 2;
106 constexpr uint8_t GLYPH_TOP_OFFSET = GLYPH_LEFT_OFFSET + GLYPH_LEFT_LEN;
107 constexpr uint8_t GLYPH_TOP_LEN = 2;
108 constexpr uint8_t GLYPH_ADVANCE_OFFSET = GLYPH_TOP_OFFSET + GLYPH_TOP_LEN;
109 constexpr uint8_t GLYPH_ADVANCE_LEN = 2;
110 constexpr uint8_t GLYPH_COLS_OFFSET = GLYPH_ADVANCE_OFFSET + GLYPH_ADVANCE_LEN;
111 constexpr uint8_t GLYPH_COLS_LEN = 2;
112 constexpr uint8_t GLYPH_ROWS_OFFSET = GLYPH_COLS_OFFSET + GLYPH_COLS_LEN;
113 constexpr uint8_t GLYPH_ROWS_LEN = 2;
114 constexpr uint8_t GLYPH_DATA_OFF_OFFSET = GLYPH_ROWS_OFFSET + GLYPH_ROWS_LEN;
115 constexpr uint8_t GLYPH_DATA_OFF_LEN = 4;
116 constexpr uint8_t GLYPH_KERN_OFF_OFFSET = GLYPH_DATA_OFF_OFFSET + GLYPH_DATA_OFF_LEN;
117 constexpr uint8_t GLYPH_KERN_OFF_LEN = 4;
118 constexpr uint8_t GLYPH_KERN_SIZE_OFFSET = GLYPH_KERN_OFF_OFFSET + GLYPH_KERN_OFF_LEN;
119 constexpr uint8_t GLYPH_KERN_SIZE_LEN = 2;
120 constexpr uint8_t GLYPH_HEAD_RES_OFFSET = GLYPH_KERN_SIZE_OFFSET + GLYPH_KERN_SIZE_LEN;
121 constexpr uint8_t GLYPH_HEAD_RES_LEN = 2;
122 constexpr uint8_t GLYPH_HEAD_TOTAL_LEN = GLYPH_UNICODE_LEN + GLYPH_LEFT_LEN + GLYPH_TOP_LEN + GLYPH_ADVANCE_LEN +
123                                          GLYPH_COLS_LEN + GLYPH_ROWS_LEN + GLYPH_DATA_OFF_LEN + GLYPH_KERN_OFF_LEN +
124                                          GLYPH_KERN_SIZE_LEN + GLYPH_HEAD_RES_LEN;
125 
126 // language texts table header
127 constexpr uint8_t LANG_TEXTS_PARAM_OFF = 0;
128 constexpr uint8_t LANG_TEXTS_PARAM_LEN = 4;
129 constexpr uint8_t LANG_TEXTS_UTF8P_OFF = LANG_TEXTS_PARAM_OFF + LANG_TEXTS_PARAM_LEN;
130 constexpr uint8_t LANG_TEXTS_UTF8P_LEN = 4;
131 constexpr uint8_t LANG_TEXTS_UTF8_OFF = LANG_TEXTS_UTF8P_OFF + LANG_TEXTS_UTF8P_LEN;
132 constexpr uint8_t LANG_TEXTS_UTF8_LEN = 4;
133 constexpr uint8_t LANG_TEXTS_TOTAL_LEN = LANG_TEXTS_PARAM_LEN + LANG_TEXTS_UTF8P_LEN + LANG_TEXTS_UTF8_LEN;
134 
135 // language texts utf-8 param header
136 constexpr uint8_t LANG_UTF8_PARAM_TOTAL_LEN = 8; // 4B offset + 4B len
137 
138 // language bin header
139 constexpr uint8_t LANG_OFFSET_OFF = 0;
140 constexpr uint8_t LANG_OFFSET_LEN = 4;
141 constexpr uint8_t LANG_SIZE_OFF = LANG_OFFSET_OFF + LANG_OFFSET_LEN;
142 constexpr uint8_t LANG_SIZE_LEN = 4;
143 constexpr uint8_t LANG_HEAD_TOTAL_LEN = LANG_OFFSET_LEN + LANG_SIZE_LEN;
144 
145 // dynamic font
146 constexpr uint32_t GLYPH_HEADER_LENGTH = 0xD7C00;                  // 860 K, almost 33870 glyph header
147 constexpr uint32_t FONT_HEADER_LENGTH = FONT_HEAD_TOTAL_LEN * 150; // 150 font, almost 3K
148 constexpr uint32_t DYNAMIC_FONT_HEADER_TOTAL_LENGTH = GLYPH_HEADER_LENGTH + FONT_HEADER_LENGTH;
149 
150 // static font psram
151 constexpr uint32_t UTF8_PARAM_LENGTH = LANG_UTF8_PARAM_TOTAL_LEN * 100;          // 100 lang, almost 1K
152 constexpr uint32_t STATIC_PARAM_LENGTH = sizeof(UITextLanguageTextParam) * 3218; // 3218 texts, 44K
153 constexpr uint32_t STATIC_UTF8_LENGTH = 0xC800;                                  // 50 * 1024 = 50K
154 constexpr uint32_t STATIC_FONT_HEADER_LENGTH = FONT_HEAD_TOTAL_LEN * 150;        // 150 font, almost 3K
155 constexpr uint32_t STATIC_GLYPH_HEADER_LENGTH = 0x15C00;                         // 87K, almost 26 * 3426 glyph header
156 constexpr uint32_t STATIC_FONT_HEADER_TOTAL_LENGTH = UTF8_PARAM_LENGTH + STATIC_PARAM_LENGTH + STATIC_UTF8_LENGTH +
157                                                      STATIC_FONT_HEADER_LENGTH + STATIC_GLYPH_HEADER_LENGTH;
158 
159 constexpr uint8_t MAX_CACHE_CHAR_NUMBER = 50;        // cache 50 letters
160 constexpr uint32_t DYNAMIC_ONE_CHAR_LENGTH = 0x5000; // 20 K means w200:h200:bpp4, 200 x 200 / 2
161 
162 // 50 * 20K = 1000K
163 constexpr uint32_t DYNAMIC_TEXT_CACHE_LENGTH = MAX_CACHE_CHAR_NUMBER * DYNAMIC_ONE_CHAR_LENGTH;
164 constexpr uint32_t MIN_FONT_PSRAM_LENGTH = 0x380000;
165 
166 // text shaping psram
167 constexpr uint32_t SHAPING_TTF_TABLE_LENGTH         = 0x4B000; // 307K
168 constexpr uint32_t SHAPING_WORD_DICT_LENGTH         = 0xD000; // 53K
169 constexpr uint32_t SHAPING_CACHE_LENGTH             = 0x50000; // 328K
170 constexpr uint32_t MIN_SHAPING_PSRAM_LENGTH =
171     SHAPING_TTF_TABLE_LENGTH + SHAPING_WORD_DICT_LENGTH + SHAPING_CACHE_LENGTH + HARFBUZ_CACHE_LENGTH;
172 
173 // other definition
174 constexpr uint8_t FONT_DPI = 100;
175 constexpr uint8_t FONT_PIXEL_IN_POINT = 64;
176 constexpr uint8_t BPP_BIT_1 = 1;
177 constexpr uint8_t BPP_MASK_1 = 7;
178 constexpr uint8_t BPP_SHIFT_1 = 3;
179 constexpr uint8_t BPP_MASK_NUM_1 = 0x80;
180 constexpr uint8_t BPP_BIT_2 = 2;
181 constexpr uint8_t BPP_MASK_2 = 3;
182 constexpr uint8_t BPP_SHIFT_2 = 2;
183 constexpr uint8_t BPP_MASK_NUM_2 = 0xC0;
184 constexpr uint8_t BPP_BIT_4 = 4;
185 constexpr uint8_t BPP_MASK_4 = 1;
186 constexpr uint8_t BPP_SHIFT_4 = 1;
187 constexpr uint8_t BPP_MASK_NUM_4 = 0xF0;
188 constexpr uint8_t BPP_BIT_8 = 8;
189 constexpr uint8_t BPP_BIT_16 = 16;
190 constexpr uint8_t BPP_BIT_32 = 32;
191 constexpr uint32_t DEFAULT_FONT_SIZE = 10;
192 constexpr uint32_t MAX_CHAR_MB_LEN = 16;
193 constexpr uint32_t MAX_CHAR_NUM = 512;
194 constexpr uint8_t BITS_PER_BYTE = 8;
195 constexpr uint8_t BITS_MASK_IN_BYTE = 7;
196 constexpr uint32_t MAX_MONO_ADVANCE = 128;
197 constexpr uint8_t BIT0 = 0;
198 constexpr uint8_t BIT1 = 1;
199 constexpr uint8_t BIT2 = 2;
200 constexpr uint8_t BIT3 = 3;
201 constexpr uint8_t BIT4 = 4;
202 constexpr uint8_t BIT5 = 5;
203 constexpr uint8_t BIT6 = 6;
204 constexpr uint8_t BIT7 = 7;
205 constexpr uint8_t BIT8 = 8;
206 constexpr uint8_t BIT12 = 12;
207 constexpr uint8_t BIT18 = 18;
208 constexpr uint8_t GLYPH_KERN_ITEM_LEN = 2;
209 constexpr uint8_t UTF_TO_UNICODE_MASK1 = 0x80;
210 constexpr uint8_t UTF_TO_UNICODE_MASK2 = 0xC0;
211 constexpr uint8_t UTF_TO_UNICODE_MASK3 = 0xE0;
212 constexpr uint8_t UTF_TO_UNICODE_MASK4 = 0xF0;
213 constexpr uint8_t UTF_TO_UNICODE_MASK5 = 0xF8;
214 constexpr uint8_t UTF_TO_UNICODE_MASK6 = 0x3F;
215 constexpr uint8_t UTF_TO_UNICODE_MASK7 = 0x1F;
216 constexpr uint8_t UTF_TO_UNICODE_MASK8 = 0x07;
217 constexpr uint8_t UTF_TO_UNICODE_MASK9 = 0x0F;
218 constexpr uint8_t MAX_FILE_NAME_LEN = 255;
219 constexpr uint8_t GPU_FONT_ALIGN_BIT = 16;
220 constexpr uint8_t INVALID_UCHAR_ID = 0xFF;
221 constexpr uint16_t INVALID_USHORT_ID = 0xFFFF;
222 constexpr uint32_t INVALID_UINT_ID = 0xFFFFFFFF;
223 constexpr int8_t INVALID_RET_VALUE = -1;
224 constexpr int8_t RET_VALUE_OK = 0;
225 constexpr const char* FONT_MAGIC_NUMBER = const_cast<char *>("OHOS.");
226 
227 /**
228  * @brief struct BinHeader for font
229  * refer to ui_font.h
230  */
231 struct BinHeader {
232     char fontVersion[FONT_VERSION_LEN]; // FONT_VERSION_OFFSET
233     char fontMagic[FONT_MAGIC_NUM_LEN]; // FONT_MAGIC_NUM_OFFSET
234     uint16_t fontNum;                   // FONT_NUMBER_OFFSET
235     uint16_t reserve;                   // BIN_HEAD_RES_OFFSET
236 };
237 
238 /**
239  * @brief struct FontHeader
240  * refer to ui_font.h
241  */
242 struct FontHeader {
243     uint16_t fontId;      // FONT_ID_OFFSET
244     uint16_t glyphNum;   // GLYPH_NUM_OFFSET
245     uint16_t fontHeight; // FONT_HEIGHT_OFFSET
246     int16_t ascender;    // FONT_ASCEND_LEN
247     int16_t descender;   // FONT_DESCEND_LEN
248     uint32_t indexOffset;
249     uint32_t indexLen;
250     uint32_t glyphOffset; // GLYPH_G_OFF_OFFSET
251     uint32_t glyphLen;    // GLYPH_OFF_OFFSET
252     uint16_t reserve;     // GLYPH_LEN_OFFSET
253 };
254 
255 /**
256  * @brief struct GlyphHeader for font, font tool using, not for bin file
257  * refer to ui_font.h
258  */
259 struct GlyphHeader {
260     uint16_t fontHeight; // FONT_G_HEIGHT_OFFSET
261     uint16_t glyphNum;   // GLYPH_G_NUM_OFFSET
262     int16_t ascender;    // GLYPH_G_ASCEND_LEN
263     int16_t descender;   // GLYPH_G_DESCEND_LEN
264     uint32_t indexOffset;
265     uint32_t indexLen;
266     uint32_t glyphOffset; // GLYPH_G_OFF_OFFSET
267     uint32_t glyphLen;    // GLYPH_G_LEN_OFFSET
268 };
269 
270 enum TextStyle : uint8_t {
271     TEXT_STYLE_NORMAL = 0,  // default value
272     TEXT_STYLE_ITALIC,       // text style italic
273     TEXT_STYLE_BOLD,        // text style bold
274     TEXT_STYLE_BOLD_ITALIC   // text style bold and italic
275 };
276 
277 /**
278  * @brief struct GlyphNode for font
279  * refer to ui_font.h
280  * be careful about glyphNode struct's size, if ENABLE_TEXT_STYLE changes, glyphs.bin shall be reconstruct.
281  */
282 struct GlyphNode {
283     uint32_t unicode;  // GLYPH_UNICODE_OFFSET
284     int16_t left;      // GLYPH_LEFT_OFFSET
285     int16_t top;       // GLYPH_TOP_OFFSET
286     uint16_t advance;  // GLYPH_ADVANCE_OFFSET
287     uint16_t cols;     // GLYPH_COLS_OFFSET
288     uint16_t rows;     // GLYPH_ROWS_OFFSET
289     uint32_t dataOff;  // GLYPH_DATA_OFF_OFFSET
290     uint32_t kernOff;  // GLYPH_KERN_OFF_OFFSET
291     uint16_t kernSize; // GLYPH_KERN_SIZE_OFFSET
292     uint16_t fontId;    // GLYPH_FONT_ID
293     uint16_t dataFlag;  // GLYPH_DATA_HEAD_FLAG
294 #if defined(ENABLE_TEXT_STYLE) && ENABLE_TEXT_STYLE
295     TextStyle textStyle; // GLYPH_TEXT_STYLE
296 #endif
297 };
298 
299 /**
300  * @brief struct GlyphCacheNode for font
301  * refer to ui_font.h
302  */
303 struct GlyphCacheNode {
304     GlyphNode node;
305     uint16_t cacheType;
306 };
307 
308 enum GlyphCacheType : uint16_t {
309     CACHE_TYPE_NONE = 0, // default value
310     CACHE_TYPE_STATIC,   // static font
311     CACHE_TYPE_DYNAMIC,  // dynamic font
312 };
313 
314 /**
315  * @brief struct LangBinHeader for font
316  * refer to ui_font.h
317  */
318 struct LangBinHeader {
319     char fontVersion[FONT_VERSION_LEN]; // FONT_VERSION_OFFSET
320     char fontMagic[FONT_MAGIC_NUM_LEN]; // FONT_MAGIC_NUM_OFFSET
321 };
322 
323 /**
324  * @brief struct LangFontBinHeader for font
325  * refer to ui_font.h
326  */
327 struct LangFontBinHeader {
328     uint32_t offset; // LANG_OFFSET_LEN
329     uint32_t size;   // LANG_SIZE_LEN
330 };
331 
332 /**
333  * @brief struct LangTexsTableHeader for font
334  * refer to ui_font.h
335  */
336 struct LangTexsTableHeader {
337     uint32_t textParamStart;
338     uint32_t textParamLen; // LANG_TEXTS_PARAM_LEN
339     uint32_t textUtf8ParamStart;
340     uint32_t textUtf8ParamLen; // LANG_TEXTS_UTF8P_LEN
341     uint32_t textUtf8Start;
342     uint32_t textUtf8Len; // LANG_TEXTS_UTF8_LEN
343     uint32_t textUtf8MaxItemLen;
344     uint32_t textCodepointsStart;
345     uint32_t textCodepointsMaxItemLen;
346     uint32_t textCodepointsTotalLen;
347 };
348 
349 /**
350  * @brief struct LangTexsUtf8Param for font
351  * refer to ui_font.h
352  */
353 struct LangTexsUtf8Param {
354     uint32_t offset;
355     uint32_t len;
356     uint32_t codePointOffset;
357     uint32_t codePointLen;
358 };
359 
360 /**
361  * @brief struct KernNode for kerning of font
362  * refer to ui_font.h
363  */
364 struct KernNode {
365     uint32_t unicode;  // GLYPH_UNICODE_LEN
366     int16_t kernValue; // GLYPH_KERN_SIZE_LEN
367     uint8_t found;     // found the kerning or not
368 };
369 
370 /**
371  * @brief struct TtfHeader for header of ttftab.bin
372  * refer to ui_font.h
373  */
374 struct TtfHeader {
375     uint8_t ttfId;
376     uint32_t offset;
377     uint32_t len;
378 };
379 
380 struct UITextLanguageFontParam {
381     uint8_t size; // Invalid value for vector font
382     uint8_t fontWeight;
383     uint8_t shaping;
384     uint8_t ttfId; // auto create during registration for vector font
385     const char* ttfName;
386     uint8_t ttfIndex;
387     uint8_t ttcIndex;
388 }; // UITextLanguageFontParam
389 
390 struct TextIsoHeader {
391     uint16_t paramLen;
392     uint16_t strLen;
393 };
394 
395 struct TextIsoParam {
396     uint16_t offset;
397     uint16_t len;
398 };
399 
400 struct LangTextParam {
401     uint8_t fontDirect; // refer to UITextLanguageDirect
402     uint8_t fontSize;
403     const char* familyName; // such as "Roboto-Medium"
404     const char* langName;   // such as "ar", "zh"
405 };
406 
407 struct FileCommonHeader {
408     const char magicWord[5]; // 5:file identifier's length is 5
409     uint32_t fileLength;
410 };
411 
412 struct TtfInfo {
413     const char* ttfName;
414     uint8_t shaping;
415 };
416 
417 struct UI_STRUCT_ALIGN Metric {
418     int left;
419     int top;
420     int cols;
421     int rows;
422     int advance;
423     uint8_t buf[0];
424 };
425 
426 #pragma pack()
427 } // namespace OHOS
428 #endif /* UI_FONT_HEADER_H */
429