Modest/source/myfont/myosi.h
2017-03-14 23:44:48 +03:00

210 lines
7.9 KiB
C

/*
Copyright (C) 2016-2017 Alexander Borisov
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Author: lex.borisov@gmail.com (Alexander Borisov)
By specification https://www.microsoft.com/typography/otspec/otff.htm
*/
#ifndef MyFONT_BASE_H
#define MyFONT_BASE_H
#pragma once
#include "myhtml/myosi.h"
// Required Tables
#define MyFONT_TABLE_TYPE_cmap 1885433187
#define MyFONT_TABLE_TYPE_head 1684104552
#define MyFONT_TABLE_TYPE_hhea 1634035816
#define MyFONT_TABLE_TYPE_hmtx 2020896104
#define MyFONT_TABLE_TYPE_maxp 1886937453
#define MyFONT_TABLE_TYPE_name 1701667182
#define MyFONT_TABLE_TYPE_OS_2 841962319 // OS/2
#define MyFONT_TABLE_TYPE_post 1953722224
// Tables Related to TrueType Outlines
#define MyFONT_TABLE_TYPE_cvt 1953915648
#define MyFONT_TABLE_TYPE_fpgm 1835495526
#define MyFONT_TABLE_TYPE_glyf 1719233639
#define MyFONT_TABLE_TYPE_loca 1633906540
#define MyFONT_TABLE_TYPE_prep 1885696624
#define MyFONT_TABLE_TYPE_gasp 1886609767
// Tables Related to PostScript Outlines
#define MyFONT_TABLE_TYPE_CFF 1179009792
#define MyFONT_TABLE_TYPE_VORG 1196576598
// Tables Related to SVG
#define MyFONT_TABLE_TYPE_SVG 1196839680
// Tables Related to Bitmap Glyphs
#define MyFONT_TABLE_TYPE_EBDT 1413759557
#define MyFONT_TABLE_TYPE_EBLC 1129071173
#define MyFONT_TABLE_TYPE_EBSC 1129529925
#define MyFONT_TABLE_TYPE_CBDT 1413759555
#define MyFONT_TABLE_TYPE_CBLC 1129071171
// Advanced Typographic Tables
#define MyFONT_TABLE_TYPE_BASE 1163084098
#define MyFONT_TABLE_TYPE_GDEF 1178944583
#define MyFONT_TABLE_TYPE_GPOS 1397706823
#define MyFONT_TABLE_TYPE_GSUB 1112888135
#define MyFONT_TABLE_TYPE_JSTF 1179931466
#define MyFONT_TABLE_TYPE_MATH 1213481293
// Other OpenType Tables
#define MyFONT_TABLE_TYPE_DSIG 1195987780
#define MyFONT_TABLE_TYPE_hdmx 2020435048
#define MyFONT_TABLE_TYPE_kern 1852990827
#define MyFONT_TABLE_TYPE_LTSH 1213420620
#define MyFONT_TABLE_TYPE_PCLT 1414284112
#define MyFONT_TABLE_TYPE_VDMX 1481458774
#define MyFONT_TABLE_TYPE_vhea 1634035830
#define MyFONT_TABLE_TYPE_vmtx 2020896118
#define MyFONT_TABLE_TYPE_COLR 1380732739
#define MyFONT_TABLE_TYPE_CPAL 1279348803
#ifdef __cplusplus
extern "C" {
#endif
// base
/*
Very important!!!
*/
enum myfont_status {
MyFONT_STATUS_OK = 0x000000,
MyFONT_STATUS_ERROR_MEMORY_ALLOCATION = 0x070001,
MyFONT_STATUS_NOT_FOUND = 0x070002,
MyFONT_STATUS_ERROR_TABLE_BROKEN = 0x070003,
MyFONT_STATUS_ERROR_TABLE_UNEXPECTED_ENDING = 0x070004,
MyFONT_STATUS_ERROR_TABLE_LACKS_REQUIRED = 0x070004,
MyFONT_STATUS_ERROR_FILE_OPEN = 0x070030,
MyFONT_STATUS_ERROR_FILE_SEEK = 0x070031,
MyFONT_STATUS_ERROR_FILE_READ = 0x070032,
MyFONT_STATUS_ERROR_FILE_TELL = 0x070033,
MyFONT_STATUS_ERROR_FILE_CLOSE = 0x070034,
MyFONT_STATUS_ERROR_FILE_TOO_SMALL = 0x070035,
MyFONT_STATUS_ERROR_TABLE_LOAD_CMAP = 0x070040,
MyFONT_STATUS_ERROR_TABLE_LOAD_HEAD = 0x070041,
MyFONT_STATUS_ERROR_TABLE_LOAD_HHEA = 0x070042,
MyFONT_STATUS_ERROR_TABLE_LOAD_HMTX = 0x070043,
MyFONT_STATUS_ERROR_TABLE_LOAD_MAXP = 0x070044,
MyFONT_STATUS_ERROR_TABLE_LOAD_NAME = 0x070045,
MyFONT_STATUS_ERROR_TABLE_LOAD_OS_2 = 0x070046,
MyFONT_STATUS_ERROR_TABLE_LOAD_POST = 0x070047,
MyFONT_STATUS_ERROR_TABLE_LOAD_CVT = 0x070048,
MyFONT_STATUS_ERROR_TABLE_LOAD_FPGM = 0x070049,
MyFONT_STATUS_ERROR_TABLE_LOAD_GLYF = 0x07004a,
MyFONT_STATUS_ERROR_TABLE_LOAD_LOCA = 0x07004b,
MyFONT_STATUS_ERROR_TABLE_LOAD_PREP = 0x07004c,
MyFONT_STATUS_ERROR_TABLE_LOAD_GASP = 0x07004d,
MyFONT_STATUS_ERROR_TABLE_LOAD_CFF = 0x07004e,
MyFONT_STATUS_ERROR_TABLE_LOAD_VORG = 0x07004f,
MyFONT_STATUS_ERROR_TABLE_LOAD_SVG = 0x070050,
MyFONT_STATUS_ERROR_TABLE_LOAD_EBDT = 0x070051,
MyFONT_STATUS_ERROR_TABLE_LOAD_EBLC = 0x070052,
MyFONT_STATUS_ERROR_TABLE_LOAD_EBSC = 0x070053,
MyFONT_STATUS_ERROR_TABLE_LOAD_CBDT = 0x070054,
MyFONT_STATUS_ERROR_TABLE_LOAD_CBLC = 0x070055,
MyFONT_STATUS_ERROR_TABLE_LOAD_BASE = 0x070056,
MyFONT_STATUS_ERROR_TABLE_LOAD_GDEF = 0x070057,
MyFONT_STATUS_ERROR_TABLE_LOAD_GPOS = 0x070058,
MyFONT_STATUS_ERROR_TABLE_LOAD_GSUB = 0x070059,
MyFONT_STATUS_ERROR_TABLE_LOAD_JSTF = 0x07005a,
MyFONT_STATUS_ERROR_TABLE_LOAD_MATH = 0x07005b,
MyFONT_STATUS_ERROR_TABLE_LOAD_DSIG = 0x07005c,
MyFONT_STATUS_ERROR_TABLE_LOAD_HDMX = 0x07005d,
MyFONT_STATUS_ERROR_TABLE_LOAD_KERN = 0x07005e,
MyFONT_STATUS_ERROR_TABLE_LOAD_LTSH = 0x07005f,
MyFONT_STATUS_ERROR_TABLE_LOAD_PCLT = 0x070060,
MyFONT_STATUS_ERROR_TABLE_LOAD_VDMX = 0x070061,
MyFONT_STATUS_ERROR_TABLE_LOAD_VHEA = 0x070062,
MyFONT_STATUS_ERROR_TABLE_LOAD_VMTX = 0x070063,
MyFONT_STATUS_ERROR_TABLE_LOAD_COLR = 0x070064,
MyFONT_STATUS_ERROR_TABLE_LOAD_CPAL = 0x070065,
MyFONT_STATUS_ERROR_GLYPH_NOT_FOUND = 0x070100,
}
typedef myfont_status_t;
enum myfont_table_key {
MyFONT_TKEY_cmap = 0x00,
MyFONT_TKEY_head = 0x01,
MyFONT_TKEY_hhea = 0x02,
MyFONT_TKEY_hmtx = 0x03,
MyFONT_TKEY_maxp = 0x04,
MyFONT_TKEY_name = 0x05,
MyFONT_TKEY_OS_2 = 0x06,
MyFONT_TKEY_post = 0x07,
MyFONT_TKEY_cvt = 0x08,
MyFONT_TKEY_fpgm = 0x09,
MyFONT_TKEY_glyf = 0x0A,
MyFONT_TKEY_loca = 0x0B,
MyFONT_TKEY_prep = 0x0C,
MyFONT_TKEY_gasp = 0x0D,
MyFONT_TKEY_CFF = 0x0E,
MyFONT_TKEY_VORG = 0x0F,
MyFONT_TKEY_SVG = 0x10,
MyFONT_TKEY_EBDT = 0x11,
MyFONT_TKEY_EBLC = 0x12,
MyFONT_TKEY_EBSC = 0x13,
MyFONT_TKEY_CBDT = 0x14,
MyFONT_TKEY_CBLC = 0x15,
MyFONT_TKEY_BASE = 0x16,
MyFONT_TKEY_GDEF = 0x17,
MyFONT_TKEY_GPOS = 0x18,
MyFONT_TKEY_GSUB = 0x19,
MyFONT_TKEY_JSTF = 0x1A,
MyFONT_TKEY_MATH = 0x1B,
MyFONT_TKEY_DSIG = 0x1C,
MyFONT_TKEY_hdmx = 0x1D,
MyFONT_TKEY_kern = 0x1E,
MyFONT_TKEY_LTSH = 0x1F,
MyFONT_TKEY_PCLT = 0x20,
MyFONT_TKEY_VDMX = 0x21,
MyFONT_TKEY_vhea = 0x22,
MyFONT_TKEY_vmtx = 0x23,
MyFONT_TKEY_COLR = 0x24,
MyFONT_TKEY_CPAL = 0x25,
MyFONT_TKEY_LAST_KEY = 0x26
}
typedef myfont_table_key_t;
/* base struct typedef */
typedef struct myfont_font myfont_font_t;
int8_t myfont_read_8(uint8_t** data);
uint8_t myfont_read_u8(uint8_t** data);
int16_t myfont_read_16(uint8_t** data);
uint16_t myfont_read_u16(uint8_t** data);
int32_t myfont_read_32(uint8_t** data);
uint32_t myfont_read_u32(uint8_t** data);
uint32_t myfont_read_u32_as_net(uint8_t** data);
uint32_t myfont_htonl(uint32_t data);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* MyFONT_BASE_H */