1ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/***************************************************************************/ 2ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* */ 3ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* afblue.h */ 4ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* */ 5ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* Auto-fitter data for blue strings (specification). */ 6ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* */ 79c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod/* Copyright 2013, 2014 by */ 8ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* */ 10ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* This file is part of the FreeType project, and may only be used, */ 11ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* modified, and distributed under the terms of the FreeType project */ 12ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* this file you indicate that you have read the license and */ 14ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* understand and accept it fully. */ 15ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* */ 16ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/***************************************************************************/ 17ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 18ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 19ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#ifndef __AFBLUE_H__ 20ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define __AFBLUE_H__ 21ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 22ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 23ec0bab5697bb31ba980810145f62e3799946ec60Victoria LeaseFT_BEGIN_HEADER 24ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 25ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 26ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* an auxiliary macro to decode a UTF-8 character -- since we only use */ 27ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* hard-coded, self-converted data, no error checking is performed */ 28ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define GET_UTF8_CHAR( ch, p ) \ 29ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease ch = (unsigned char)*p++; \ 30ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease if ( ch >= 0x80 ) \ 31ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease { \ 32ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_UInt len; \ 33ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease \ 34ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease \ 35ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease if ( ch < 0xE0 ) \ 36ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease { \ 37ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease len = 1; \ 38ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease ch &= 0x1F; \ 39ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease } \ 40ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease else if ( ch < 0xF0 ) \ 41ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease { \ 42ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease len = 2; \ 43ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease ch &= 0x0F; \ 44ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease } \ 45ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease else \ 46ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease { \ 47ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease len = 3; \ 48ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease ch &= 0x07; \ 49ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease } \ 50ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease \ 51ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease for ( ; len > 0; len-- ) \ 52ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease ch = ( ch << 6 ) | ( *p++ & 0x3F ); \ 53ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease } 54ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 55ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 56ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 57ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 58ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /***** *****/ 59ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /***** B L U E S T R I N G S *****/ 60ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /***** *****/ 61ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 62ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 63ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 64ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* At the bottommost level, we define strings for finding blue zones. */ 65ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 66ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 67ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define AF_BLUE_STRING_MAX_LEN @AF_BLUE_STRING_MAX_LEN@ 68ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 69ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* The AF_Blue_String enumeration values are offsets into the */ 70ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* `af_blue_strings' array. */ 71ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 72ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease typedef enum AF_Blue_String_ 73ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease { 74ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease@AF_BLUE_STRING_ENUM@ 75ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 76ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease AF_BLUE_STRING_MAX /* do not remove */ 77ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 78ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease } AF_Blue_String; 79ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 80ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 81ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_LOCAL_ARRAY( char ) 82ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease af_blue_strings[]; 83ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 84ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 85ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 86ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 87ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /***** *****/ 88ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /***** B L U E S T R I N G S E T S *****/ 89ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /***** *****/ 90ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 91ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /*************************************************************************/ 92ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 939c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod /* The next level is to group blue strings into style-specific sets. */ 94ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 95ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 96ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* Properties are specific to a writing system. We assume that a given */ 97ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* blue string can't be used in more than a single writing system, which */ 98ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* is a safe bet. */ 999c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_BLUE_PROPERTY_LATIN_TOP ( 1 << 0 ) /* must have value 1 */ 1009c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_BLUE_PROPERTY_LATIN_NEUTRAL ( 1 << 1 ) 1019c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_BLUE_PROPERTY_LATIN_X_HEIGHT ( 1 << 2 ) 1029c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_BLUE_PROPERTY_LATIN_LONG ( 1 << 3 ) 103ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 1049c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_BLUE_PROPERTY_CJK_TOP ( 1 << 0 ) /* must have value 1 */ 1059c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod#define AF_BLUE_PROPERTY_CJK_HORIZ ( 1 << 1 ) /* must have value 2 */ 106ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define AF_BLUE_PROPERTY_CJK_RIGHT AF_BLUE_PROPERTY_CJK_TOP 107ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 108ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 109ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#define AF_BLUE_STRINGSET_MAX_LEN @AF_BLUE_STRINGSET_MAX_LEN@ 110ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 111ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* The AF_Blue_Stringset enumeration values are offsets into the */ 112ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease /* `af_blue_stringsets' array. */ 113ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 114ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease typedef enum AF_Blue_Stringset_ 115ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease { 116ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease@AF_BLUE_STRINGSET_ENUM@ 117ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 118ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease AF_BLUE_STRINGSET_MAX /* do not remove */ 119ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 120ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease } AF_Blue_Stringset; 121ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 122ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 123ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease typedef struct AF_Blue_StringRec_ 124ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease { 125ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease AF_Blue_String string; 126ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_UShort properties; 127ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 128ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease } AF_Blue_StringRec; 129ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 130ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 131ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease FT_LOCAL_ARRAY( AF_Blue_StringRec ) 132ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease af_blue_stringsets[]; 133ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 134ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* */ 135ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 136ec0bab5697bb31ba980810145f62e3799946ec60Victoria LeaseFT_END_HEADER 137ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 138ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 139ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease#endif /* __AFBLUE_H__ */ 140ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 141ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease 142ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease/* END */ 143