1 /* Copyright (C) 1996, 2000 artofcode LLC. All rights reserved. 2 3 This program is free software; you can redistribute it and/or modify it 4 under the terms of the GNU General Public License as published by the 5 Free Software Foundation; either version 2 of the License, or (at your 6 option) any later version. 7 8 This program is distributed in the hope that it will be useful, but 9 WITHOUT ANY WARRANTY; without even the implied warranty of 10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 General Public License for more details. 12 13 You should have received a copy of the GNU General Public License along 14 with this program; if not, write to the Free Software Foundation, Inc., 15 59 Temple Place, Suite 330, Boston, MA, 02111-1307. 16 17 */ 18 19 /*$Id: gxfont42.h,v 1.4.6.1.2.1 2003/01/17 00:49:03 giles Exp $ */ 20 /* Type 42 font data definition */ 21 22 #ifndef gxfont42_INCLUDED 23 # define gxfont42_INCLUDED 24 25 /* This is the type-specific information for a Type 42 (TrueType) font. */ 26 typedef struct gs_type42_data_s gs_type42_data; 27 #ifndef gs_font_type42_DEFINED 28 # define gs_font_type42_DEFINED 29 typedef struct gs_font_type42_s gs_font_type42; 30 #endif 31 typedef struct gs_type42_mtx_s { 32 uint numMetrics; /* num*Metrics from [hv]hea */ 33 ulong offset; /* offset to [hv]mtx table */ 34 uint length; /* length of [hv]mtx table */ 35 } gs_type42_mtx_t; 36 struct gs_type42_data_s { 37 /* The following are set by the client. */ 38 int (*string_proc) (P4(gs_font_type42 *, ulong, uint, const byte **)); 39 void *proc_data; /* data for procedures */ 40 /* 41 * The following are initialized by ...font_init, but may be reset by 42 * the client. get_outline returns 1 if the string is newly allocated 43 * (using the font's allocator) and can be freed by the client. 44 */ 45 int (*get_outline)(P3(gs_font_type42 *pfont, uint glyph_index, 46 gs_const_string *pgstr)); 47 int (*get_metrics)(P4(gs_font_type42 *pfont, uint glyph_index, int wmode, 48 float sbw[4])); 49 /* The following are cached values. */ 50 ulong glyf; /* offset to glyf table */ 51 uint unitsPerEm; /* from head */ 52 uint indexToLocFormat; /* from head */ 53 gs_type42_mtx_t metrics[2]; /* hhea/hmtx, vhea/vmtx (indexed by WMode) */ 54 ulong loca; /* offset to loca table */ 55 uint numGlyphs; /* from size of loca */ 56 }; 57 #define gs_font_type42_common\ 58 gs_font_base_common;\ 59 gs_type42_data data 60 struct gs_font_type42_s { 61 gs_font_type42_common; 62 }; 63 64 extern_st(st_gs_font_type42); 65 #define public_st_gs_font_type42() /* in gstype42.c */\ 66 gs_public_st_suffix_add1_final(st_gs_font_type42, gs_font_type42,\ 67 "gs_font_type42", font_type42_enum_ptrs, font_type42_reloc_ptrs,\ 68 gs_font_finalize, st_gs_font_base, data.proc_data) 69 70 /* 71 * Because a Type 42 font contains so many cached values, 72 * we provide a procedure to initialize them from the font data. 73 * Note that this initializes get_outline and the font procedures as well. 74 */ 75 int gs_type42_font_init(P1(gs_font_type42 *)); 76 77 /* Append the outline of a TrueType character to a path. */ 78 int gs_type42_append(P7(uint glyph_index, gs_imager_state * pis, 79 gx_path * ppath, const gs_log2_scale_point * pscale, 80 bool charpath_flag, int paint_type, 81 gs_font_type42 * pfont)); 82 83 /* Get the metrics of a TrueType character. */ 84 int gs_type42_get_metrics(P3(gs_font_type42 * pfont, uint glyph_index, 85 float psbw[4])); 86 int gs_type42_wmode_metrics(P4(gs_font_type42 * pfont, uint glyph_index, 87 int wmode, float psbw[4])); 88 89 /* Export the font procedures so they can be called from the interpreter. */ 90 font_proc_enumerate_glyph(gs_type42_enumerate_glyph); 91 font_proc_glyph_info(gs_type42_glyph_info); 92 font_proc_glyph_outline(gs_type42_glyph_outline); 93 94 #endif /* gxfont42_INCLUDED */ 95