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