1 /*
2 Copyright (C) 2016-2017 Alexander Borisov
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
15 License along with this library; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
18 Author: lex.borisov@gmail.com (Alexander Borisov)
19 */
20
21 #include "myfont/hhea.h"
22
myfont_load_table_hhea(myfont_font_t * mf,uint8_t * font_data,size_t data_size)23 mystatus_t myfont_load_table_hhea(myfont_font_t* mf, uint8_t* font_data, size_t data_size)
24 {
25 memset(&mf->table_hhea, 0, sizeof(myfont_table_hhea_t));
26
27 if(mf->cache.tables_offset[MyFONT_TKEY_hhea] == 0)
28 return MyFONT_STATUS_OK;
29
30 myfont_table_hhea_t *thhea = &mf->table_hhea;
31 const uint32_t table_offset = mf->cache.tables_offset[MyFONT_TKEY_hhea];
32
33 if(data_size < (table_offset + 8 + 6 + 2 + 22 + 2))
34 return MyFONT_STATUS_ERROR_TABLE_UNEXPECTED_ENDING;
35
36 /* get current data */
37 uint8_t *data = &font_data[table_offset];
38
39 thhea->version = myfont_read_u32(&data);
40
41 thhea->Ascender = myfont_read_16(&data);
42 thhea->Descender = myfont_read_16(&data);
43 thhea->LineGap = myfont_read_16(&data);
44
45 thhea->advanceWidthMax = myfont_read_u16(&data);
46
47 thhea->minLeftSideBearing = myfont_read_16(&data);
48 thhea->minRightSideBearing = myfont_read_16(&data);
49 thhea->xMaxExtent = myfont_read_16(&data);
50 thhea->caretSlopeRise = myfont_read_16(&data);
51 thhea->caretSlopeRun = myfont_read_16(&data);
52 thhea->caretOffset = myfont_read_16(&data);
53 thhea->reserved1 = myfont_read_16(&data);
54 thhea->reserved2 = myfont_read_16(&data);
55 thhea->reserved3 = myfont_read_16(&data);
56 thhea->reserved4 = myfont_read_16(&data);
57 thhea->metricDataFormat = myfont_read_16(&data);
58
59 thhea->numberOfHMetrics = myfont_read_u16(&data);
60
61 return MyFONT_STATUS_OK;
62 }
63