• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /****************************************************************************
2  *
3  * pfrload.h
4  *
5  *   FreeType PFR loader (specification).
6  *
7  * Copyright 2002-2018 by
8  * David Turner, Robert Wilhelm, and Werner Lemberg.
9  *
10  * This file is part of the FreeType project, and may only be used,
11  * modified, and distributed under the terms of the FreeType project
12  * license, LICENSE.TXT.  By continuing to use, modify, or distribute
13  * this file you indicate that you have read the license and
14  * understand and accept it fully.
15  *
16  */
17 
18 
19 #ifndef PFRLOAD_H_
20 #define PFRLOAD_H_
21 
22 #include "pfrobjs.h"
23 #include FT_INTERNAL_STREAM_H
24 
25 
26 FT_BEGIN_HEADER
27 
28   /* some size checks should be always done (mainly to prevent */
29   /* excessive allocation for malformed data), ...             */
30 #define PFR_CHECK_SIZE( x )  do                       \
31                              {                        \
32                                if ( p + (x) > limit ) \
33                                  goto Too_Short;      \
34                              } while ( 0 )
35 
36   /* ... and some only if intensive checking is explicitly requested */
37 #ifdef PFR_CONFIG_NO_CHECKS
38 #define PFR_CHECK( x )  do { } while ( 0 )
39 #else
40 #define PFR_CHECK  PFR_CHECK_SIZE
41 #endif
42 
43 #define PFR_NEXT_BYTE( p )    FT_NEXT_BYTE( p )
44 #define PFR_NEXT_INT8( p )    FT_NEXT_CHAR( p )
45 #define PFR_NEXT_SHORT( p )   FT_NEXT_SHORT( p )
46 #define PFR_NEXT_USHORT( p )  FT_NEXT_USHORT( p )
47 #define PFR_NEXT_LONG( p )    FT_NEXT_OFF3( p )
48 #define PFR_NEXT_ULONG( p )   FT_NEXT_UOFF3( p )
49 
50 
51  /* handling extra items */
52 
53   typedef FT_Error
54   (*PFR_ExtraItem_ParseFunc)( FT_Byte*    p,
55                               FT_Byte*    limit,
56                               FT_Pointer  data );
57 
58   typedef struct  PFR_ExtraItemRec_
59   {
60     FT_UInt                  type;
61     PFR_ExtraItem_ParseFunc  parser;
62 
63   } PFR_ExtraItemRec;
64 
65   typedef const struct PFR_ExtraItemRec_*  PFR_ExtraItem;
66 
67 
68   FT_LOCAL( FT_Error )
69   pfr_extra_items_skip( FT_Byte*  *pp,
70                         FT_Byte*  limit );
71 
72   FT_LOCAL( FT_Error )
73   pfr_extra_items_parse( FT_Byte*      *pp,
74                          FT_Byte*       limit,
75                          PFR_ExtraItem  item_list,
76                          FT_Pointer     item_data );
77 
78 
79   /* load a PFR header */
80   FT_LOCAL( FT_Error )
81   pfr_header_load( PFR_Header  header,
82                    FT_Stream   stream );
83 
84   /* check a PFR header */
85   FT_LOCAL( FT_Bool )
86   pfr_header_check( PFR_Header  header );
87 
88 
89   /* return number of logical fonts in this file */
90   FT_LOCAL( FT_Error )
91   pfr_log_font_count( FT_Stream   stream,
92                       FT_UInt32   log_section_offset,
93                       FT_Long    *acount );
94 
95   /* load a pfr logical font entry */
96   FT_LOCAL( FT_Error )
97   pfr_log_font_load( PFR_LogFont  log_font,
98                      FT_Stream    stream,
99                      FT_UInt      face_index,
100                      FT_UInt32    section_offset,
101                      FT_Bool      size_increment );
102 
103 
104   /* load a physical font entry */
105   FT_LOCAL( FT_Error )
106   pfr_phy_font_load( PFR_PhyFont  phy_font,
107                      FT_Stream    stream,
108                      FT_UInt32    offset,
109                      FT_UInt32    size );
110 
111   /* finalize a physical font */
112   FT_LOCAL( void )
113   pfr_phy_font_done( PFR_PhyFont  phy_font,
114                      FT_Memory    memory );
115 
116   /* */
117 
118 FT_END_HEADER
119 
120 #endif /* PFRLOAD_H_ */
121 
122 
123 /* END */
124