• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  */
281 struct GlyphNode {
282     uint32_t unicode;  // GLYPH_UNICODE_OFFSET
283     int16_t left;      // GLYPH_LEFT_OFFSET
284     int16_t top;       // GLYPH_TOP_OFFSET
285     uint16_t advance;  // GLYPH_ADVANCE_OFFSET
286     uint16_t cols;     // GLYPH_COLS_OFFSET
287     uint16_t rows;     // GLYPH_ROWS_OFFSET
288     uint32_t dataOff;  // GLYPH_DATA_OFF_OFFSET
289     uint32_t kernOff;  // GLYPH_KERN_OFF_OFFSET
290     uint16_t kernSize; // GLYPH_KERN_SIZE_OFFSET
291     uint16_t fontId;    // GLYPH_FONT_ID
292     uint16_t dataFlag;  // GLYPH_DATA_HEAD_FLAG
293 #if defined(ENABLE_SPANNABLE_STRING) && ENABLE_SPANNABLE_STRING
294     TextStyle textStyle; // GLYPH_TEXT_STYLE
295 #endif
296 };
297 
298 /**
299  * @brief struct GlyphCacheNode for font
300  * refer to ui_font.h
301  */
302 struct GlyphCacheNode {
303     GlyphNode node;
304     uint16_t cacheType;
305 };
306 
307 enum GlyphCacheType : uint16_t {
308     CACHE_TYPE_NONE = 0, // default value
309     CACHE_TYPE_STATIC,   // static font
310     CACHE_TYPE_DYNAMIC,  // dynamic font
311 };
312 
313 /**
314  * @brief struct LangBinHeader for font
315  * refer to ui_font.h
316  */
317 struct LangBinHeader {
318     char fontVersion[FONT_VERSION_LEN]; // FONT_VERSION_OFFSET
319     char fontMagic[FONT_MAGIC_NUM_LEN]; // FONT_MAGIC_NUM_OFFSET
320 };
321 
322 /**
323  * @brief struct LangFontBinHeader for font
324  * refer to ui_font.h
325  */
326 struct LangFontBinHeader {
327     uint32_t offset; // LANG_OFFSET_LEN
328     uint32_t size;   // LANG_SIZE_LEN
329 };
330 
331 /**
332  * @brief struct LangTexsTableHeader for font
333  * refer to ui_font.h
334  */
335 struct LangTexsTableHeader {
336     uint32_t textParamStart;
337     uint32_t textParamLen; // LANG_TEXTS_PARAM_LEN
338     uint32_t textUtf8ParamStart;
339     uint32_t textUtf8ParamLen; // LANG_TEXTS_UTF8P_LEN
340     uint32_t textUtf8Start;
341     uint32_t textUtf8Len; // LANG_TEXTS_UTF8_LEN
342     uint32_t textUtf8MaxItemLen;
343     uint32_t textCodepointsStart;
344     uint32_t textCodepointsMaxItemLen;
345     uint32_t textCodepointsTotalLen;
346 };
347 
348 /**
349  * @brief struct LangTexsUtf8Param for font
350  * refer to ui_font.h
351  */
352 struct LangTexsUtf8Param {
353     uint32_t offset;
354     uint32_t len;
355     uint32_t codePointOffset;
356     uint32_t codePointLen;
357 };
358 
359 /**
360  * @brief struct KernNode for kerning of font
361  * refer to ui_font.h
362  */
363 struct KernNode {
364     uint32_t unicode;  // GLYPH_UNICODE_LEN
365     int16_t kernValue; // GLYPH_KERN_SIZE_LEN
366     uint8_t found;     // found the kerning or not
367 };
368 
369 /**
370  * @brief struct TtfHeader for header of ttftab.bin
371  * refer to ui_font.h
372  */
373 struct TtfHeader {
374     uint8_t ttfId;
375     uint32_t offset;
376     uint32_t len;
377 };
378 
379 struct UITextLanguageFontParam {
380     uint8_t size; // Invalid value for vector font
381     uint8_t fontWeight;
382     uint8_t shaping;
383     uint8_t ttfId; // auto create during registration for vector font
384     const char* ttfName;
385     uint8_t ttfIndex;
386     uint8_t ttcIndex;
387 }; // UITextLanguageFontParam
388 
389 struct TextIsoHeader {
390     uint16_t paramLen;
391     uint16_t strLen;
392 };
393 
394 struct TextIsoParam {
395     uint16_t offset;
396     uint16_t len;
397 };
398 
399 struct LangTextParam {
400     uint8_t fontDirect; // refer to UITextLanguageDirect
401     uint8_t fontSize;
402     const char* familyName; // such as "Roboto-Medium"
403     const char* langName;   // such as "ar", "zh"
404 };
405 
406 struct FileCommonHeader {
407     const char magicWord[5]; // 5:file identifier's length is 5
408     uint32_t fileLength;
409 };
410 
411 struct TtfInfo {
412     const char* ttfName;
413     uint8_t shaping;
414 };
415 
416 struct UI_STRUCT_ALIGN Metric {
417     int left;
418     int top;
419     int cols;
420     int rows;
421     int advance;
422     uint8_t buf[0];
423 };
424 
425 #pragma pack()
426 } // namespace OHOS
427 #endif /* UI_FONT_HEADER_H */
428