1 /****************************************************************************
2  *
3  * sfnt.h
4  *
5  *   High-level 'sfnt' driver interface (specification).
6  *
7  * Copyright (C) 1996-2020 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 SFNT_H_
20 #define SFNT_H_
21 
22 
23 #include <freetype/internal/ftdrv.h>
24 #include <freetype/internal/tttypes.h>
25 #include <freetype/internal/wofftypes.h>
26 
27 
28 FT_BEGIN_HEADER
29 
30 
31   /**************************************************************************
32    *
33    * @functype:
34    *   TT_Init_Face_Func
35    *
36    * @description:
37    *   First part of the SFNT face object initialization.  This finds the
38    *   face in a SFNT file or collection, and load its format tag in
39    *   face->format_tag.
40    *
41    * @input:
42    *   stream ::
43    *     The input stream.
44    *
45    *   face ::
46    *     A handle to the target face object.
47    *
48    *   face_index ::
49    *     The index of the TrueType font, if we are opening a collection, in
50    *     bits 0-15.  The numbered instance index~+~1 of a GX (sub)font, if
51    *     applicable, in bits 16-30.
52    *
53    *   num_params ::
54    *     The number of additional parameters.
55    *
56    *   params ::
57    *     Optional additional parameters.
58    *
59    * @return:
60    *   FreeType error code.  0 means success.
61    *
62    * @note:
63    *   The stream cursor must be at the font file's origin.
64    *
65    *   This function recognizes fonts embedded in a 'TrueType collection'.
66    *
67    *   Once the format tag has been validated by the font driver, it should
68    *   then call the TT_Load_Face_Func() callback to read the rest of the
69    *   SFNT tables in the object.
70    */
71   typedef FT_Error
72   (*TT_Init_Face_Func)( FT_Stream      stream,
73                         TT_Face        face,
74                         FT_Int         face_index,
75                         FT_Int         num_params,
76                         FT_Parameter*  params );
77 
78 
79   /**************************************************************************
80    *
81    * @functype:
82    *   TT_Load_Face_Func
83    *
84    * @description:
85    *   Second part of the SFNT face object initialization.  This loads the
86    *   common SFNT tables (head, OS/2, maxp, metrics, etc.) in the face
87    *   object.
88    *
89    * @input:
90    *   stream ::
91    *     The input stream.
92    *
93    *   face ::
94    *     A handle to the target face object.
95    *
96    *   face_index ::
97    *     The index of the TrueType font, if we are opening a collection, in
98    *     bits 0-15.  The numbered instance index~+~1 of a GX (sub)font, if
99    *     applicable, in bits 16-30.
100    *
101    *   num_params ::
102    *     The number of additional parameters.
103    *
104    *   params ::
105    *     Optional additional parameters.
106    *
107    * @return:
108    *   FreeType error code.  0 means success.
109    *
110    * @note:
111    *   This function must be called after TT_Init_Face_Func().
112    */
113   typedef FT_Error
114   (*TT_Load_Face_Func)( FT_Stream      stream,
115                         TT_Face        face,
116                         FT_Int         face_index,
117                         FT_Int         num_params,
118                         FT_Parameter*  params );
119 
120 
121   /**************************************************************************
122    *
123    * @functype:
124    *   TT_Done_Face_Func
125    *
126    * @description:
127    *   A callback used to delete the common SFNT data from a face.
128    *
129    * @input:
130    *   face ::
131    *     A handle to the target face object.
132    *
133    * @note:
134    *   This function does NOT destroy the face object.
135    */
136   typedef void
137   (*TT_Done_Face_Func)( TT_Face  face );
138 
139 
140   /**************************************************************************
141    *
142    * @functype:
143    *   TT_Load_Any_Func
144    *
145    * @description:
146    *   Load any font table into client memory.
147    *
148    * @input:
149    *   face ::
150    *     The face object to look for.
151    *
152    *   tag ::
153    *     The tag of table to load.  Use the value 0 if you want to access the
154    *     whole font file, else set this parameter to a valid TrueType table
155    *     tag that you can forge with the MAKE_TT_TAG macro.
156    *
157    *   offset ::
158    *     The starting offset in the table (or the file if tag == 0).
159    *
160    *   length ::
161    *     The address of the decision variable:
162    *
163    *     If `length == NULL`: Loads the whole table.  Returns an error if
164    *     'offset' == 0!
165    *
166    *     If `*length == 0`: Exits immediately; returning the length of the
167    *     given table or of the font file, depending on the value of 'tag'.
168    *
169    *     If `*length != 0`: Loads the next 'length' bytes of table or font,
170    *     starting at offset 'offset' (in table or font too).
171    *
172    * @output:
173    *   buffer ::
174    *     The address of target buffer.
175    *
176    * @return:
177    *   TrueType error code.  0 means success.
178    */
179   typedef FT_Error
180   (*TT_Load_Any_Func)( TT_Face    face,
181                        FT_ULong   tag,
182                        FT_Long    offset,
183                        FT_Byte   *buffer,
184                        FT_ULong*  length );
185 
186 
187   /**************************************************************************
188    *
189    * @functype:
190    *   TT_Find_SBit_Image_Func
191    *
192    * @description:
193    *   Check whether an embedded bitmap (an 'sbit') exists for a given glyph,
194    *   at a given strike.
195    *
196    * @input:
197    *   face ::
198    *     The target face object.
199    *
200    *   glyph_index ::
201    *     The glyph index.
202    *
203    *   strike_index ::
204    *     The current strike index.
205    *
206    * @output:
207    *   arange ::
208    *     The SBit range containing the glyph index.
209    *
210    *   astrike ::
211    *     The SBit strike containing the glyph index.
212    *
213    *   aglyph_offset ::
214    *     The offset of the glyph data in 'EBDT' table.
215    *
216    * @return:
217    *   FreeType error code.  0 means success.  Returns
218    *   SFNT_Err_Invalid_Argument if no sbit exists for the requested glyph.
219    */
220   typedef FT_Error
221   (*TT_Find_SBit_Image_Func)( TT_Face          face,
222                               FT_UInt          glyph_index,
223                               FT_ULong         strike_index,
224                               TT_SBit_Range   *arange,
225                               TT_SBit_Strike  *astrike,
226                               FT_ULong        *aglyph_offset );
227 
228 
229   /**************************************************************************
230    *
231    * @functype:
232    *   TT_Load_SBit_Metrics_Func
233    *
234    * @description:
235    *   Get the big metrics for a given embedded bitmap.
236    *
237    * @input:
238    *   stream ::
239    *     The input stream.
240    *
241    *   range ::
242    *     The SBit range containing the glyph.
243    *
244    * @output:
245    *   big_metrics ::
246    *     A big SBit metrics structure for the glyph.
247    *
248    * @return:
249    *   FreeType error code.  0 means success.
250    *
251    * @note:
252    *   The stream cursor must be positioned at the glyph's offset within the
253    *   'EBDT' table before the call.
254    *
255    *   If the image format uses variable metrics, the stream cursor is
256    *   positioned just after the metrics header in the 'EBDT' table on
257    *   function exit.
258    */
259   typedef FT_Error
260   (*TT_Load_SBit_Metrics_Func)( FT_Stream        stream,
261                                 TT_SBit_Range    range,
262                                 TT_SBit_Metrics  metrics );
263 
264 
265   /**************************************************************************
266    *
267    * @functype:
268    *   TT_Load_SBit_Image_Func
269    *
270    * @description:
271    *   Load a given glyph sbit image from the font resource.  This also
272    *   returns its metrics.
273    *
274    * @input:
275    *   face ::
276    *     The target face object.
277    *
278    *   strike_index ::
279    *     The strike index.
280    *
281    *   glyph_index ::
282    *     The current glyph index.
283    *
284    *   load_flags ::
285    *     The current load flags.
286    *
287    *   stream ::
288    *     The input stream.
289    *
290    * @output:
291    *   amap ::
292    *     The target pixmap.
293    *
294    *   ametrics ::
295    *     A big sbit metrics structure for the glyph image.
296    *
297    * @return:
298    *   FreeType error code.  0 means success.  Returns an error if no glyph
299    *   sbit exists for the index.
300    *
301    * @note:
302    *   The `map.buffer` field is always freed before the glyph is loaded.
303    */
304   typedef FT_Error
305   (*TT_Load_SBit_Image_Func)( TT_Face              face,
306                               FT_ULong             strike_index,
307                               FT_UInt              glyph_index,
308                               FT_UInt              load_flags,
309                               FT_Stream            stream,
310                               FT_Bitmap           *amap,
311                               TT_SBit_MetricsRec  *ametrics );
312 
313 
314   /**************************************************************************
315    *
316    * @functype:
317    *   TT_Set_SBit_Strike_Func
318    *
319    * @description:
320    *   Select an sbit strike for a given size request.
321    *
322    * @input:
323    *   face ::
324    *     The target face object.
325    *
326    *   req ::
327    *     The size request.
328    *
329    * @output:
330    *   astrike_index ::
331    *     The index of the sbit strike.
332    *
333    * @return:
334    *   FreeType error code.  0 means success.  Returns an error if no sbit
335    *   strike exists for the selected ppem values.
336    */
337   typedef FT_Error
338   (*TT_Set_SBit_Strike_Func)( TT_Face          face,
339                               FT_Size_Request  req,
340                               FT_ULong*        astrike_index );
341 
342 
343   /**************************************************************************
344    *
345    * @functype:
346    *   TT_Load_Strike_Metrics_Func
347    *
348    * @description:
349    *   Load the metrics of a given strike.
350    *
351    * @input:
352    *   face ::
353    *     The target face object.
354    *
355    *   strike_index ::
356    *     The strike index.
357    *
358    * @output:
359    *   metrics ::
360    *     the metrics of the strike.
361    *
362    * @return:
363    *   FreeType error code.  0 means success.  Returns an error if no such
364    *   sbit strike exists.
365    */
366   typedef FT_Error
367   (*TT_Load_Strike_Metrics_Func)( TT_Face           face,
368                                   FT_ULong          strike_index,
369                                   FT_Size_Metrics*  metrics );
370 
371 
372   /**************************************************************************
373    *
374    * @functype:
375    *   TT_Get_PS_Name_Func
376    *
377    * @description:
378    *   Get the PostScript glyph name of a glyph.
379    *
380    * @input:
381    *   idx ::
382    *     The glyph index.
383    *
384    *   PSname ::
385    *     The address of a string pointer.  Will be `NULL` in case of error,
386    *     otherwise it is a pointer to the glyph name.
387    *
388    *     You must not modify the returned string!
389    *
390    * @output:
391    *   FreeType error code.  0 means success.
392    */
393   typedef FT_Error
394   (*TT_Get_PS_Name_Func)( TT_Face      face,
395                           FT_UInt      idx,
396                           FT_String**  PSname );
397 
398 
399   /**************************************************************************
400    *
401    * @functype:
402    *   TT_Load_Metrics_Func
403    *
404    * @description:
405    *   Load a metrics table, which is a table with a horizontal and a
406    *   vertical version.
407    *
408    * @input:
409    *   face ::
410    *     A handle to the target face object.
411    *
412    *   stream ::
413    *     The input stream.
414    *
415    *   vertical ::
416    *     A boolean flag.  If set, load the vertical one.
417    *
418    * @return:
419    *   FreeType error code.  0 means success.
420    */
421   typedef FT_Error
422   (*TT_Load_Metrics_Func)( TT_Face    face,
423                            FT_Stream  stream,
424                            FT_Bool    vertical );
425 
426 
427   /**************************************************************************
428    *
429    * @functype:
430    *   TT_Get_Metrics_Func
431    *
432    * @description:
433    *   Load the horizontal or vertical header in a face object.
434    *
435    * @input:
436    *   face ::
437    *     A handle to the target face object.
438    *
439    *   vertical ::
440    *     A boolean flag.  If set, load vertical metrics.
441    *
442    *   gindex ::
443    *     The glyph index.
444    *
445    * @output:
446    *   abearing ::
447    *     The horizontal (or vertical) bearing.  Set to zero in case of error.
448    *
449    *   aadvance ::
450    *     The horizontal (or vertical) advance.  Set to zero in case of error.
451    */
452   typedef void
453   (*TT_Get_Metrics_Func)( TT_Face     face,
454                           FT_Bool     vertical,
455                           FT_UInt     gindex,
456                           FT_Short*   abearing,
457                           FT_UShort*  aadvance );
458 
459 
460   /**************************************************************************
461    *
462    * @functype:
463    *   TT_Set_Palette_Func
464    *
465    * @description:
466    *   Load the colors into `face->palette` for a given palette index.
467    *
468    * @input:
469    *   face ::
470    *     The target face object.
471    *
472    *   idx ::
473    *     The palette index.
474    *
475    * @return:
476    *   FreeType error code.  0 means success.
477    */
478   typedef FT_Error
479   (*TT_Set_Palette_Func)( TT_Face  face,
480                           FT_UInt  idx );
481 
482 
483   /**************************************************************************
484    *
485    * @functype:
486    *   TT_Get_Colr_Layer_Func
487    *
488    * @description:
489    *   Iteratively get the color layer data of a given glyph index.
490    *
491    * @input:
492    *   face ::
493    *     The target face object.
494    *
495    *   base_glyph ::
496    *     The glyph index the colored glyph layers are associated with.
497    *
498    * @inout:
499    *   iterator ::
500    *     An @FT_LayerIterator object.  For the first call you should set
501    *     `iterator->p` to `NULL`.  For all following calls, simply use the
502    *     same object again.
503    *
504    * @output:
505    *   aglyph_index ::
506    *     The glyph index of the current layer.
507    *
508    *   acolor_index ::
509    *     The color index into the font face's color palette of the current
510    *     layer.  The value 0xFFFF is special; it doesn't reference a palette
511    *     entry but indicates that the text foreground color should be used
512    *     instead (to be set up by the application outside of FreeType).
513    *
514    * @return:
515    *   Value~1 if everything is OK.  If there are no more layers (or if there
516    *   are no layers at all), value~0 gets returned.  In case of an error,
517    *   value~0 is returned also.
518    */
519   typedef FT_Bool
520   (*TT_Get_Colr_Layer_Func)( TT_Face            face,
521                              FT_UInt            base_glyph,
522                              FT_UInt           *aglyph_index,
523                              FT_UInt           *acolor_index,
524                              FT_LayerIterator*  iterator );
525 
526 
527   /**************************************************************************
528    *
529    * @functype:
530    *   TT_Blend_Colr_Func
531    *
532    * @description:
533    *   Blend the bitmap in `new_glyph` into `base_glyph` using the color
534    *   specified by `color_index`.  If `color_index` is 0xFFFF, use
535    *   `face->foreground_color` if `face->have_foreground_color` is set.
536    *   Otherwise check `face->palette_data.palette_flags`: If present and
537    *   @FT_PALETTE_FOR_DARK_BACKGROUND is set, use BGRA value 0xFFFFFFFF
538    *   (white opaque).  Otherwise use BGRA value 0x000000FF (black opaque).
539    *
540    * @input:
541    *   face ::
542    *     The target face object.
543    *
544    *   color_index ::
545    *     Color index from the COLR table.
546    *
547    *   base_glyph ::
548    *     Slot for bitmap to be merged into.  The underlying bitmap may get
549    *     reallocated.
550    *
551    *   new_glyph ::
552    *     Slot to be incooperated into `base_glyph`.
553    *
554    * @return:
555    *   FreeType error code.  0 means success.  Returns an error if
556    *   color_index is invalid or reallocation fails.
557    */
558   typedef FT_Error
559   (*TT_Blend_Colr_Func)( TT_Face       face,
560                          FT_UInt       color_index,
561                          FT_GlyphSlot  base_glyph,
562                          FT_GlyphSlot  new_glyph );
563 
564 
565   /**************************************************************************
566    *
567    * @functype:
568    *   TT_Get_Name_Func
569    *
570    * @description:
571    *   From the 'name' table, return a given ENGLISH name record in ASCII.
572    *
573    * @input:
574    *   face ::
575    *     A handle to the source face object.
576    *
577    *   nameid ::
578    *     The name id of the name record to return.
579    *
580    * @inout:
581    *   name ::
582    *     The address of an allocated string pointer.  `NULL` if no name is
583    *     present.
584    *
585    * @return:
586    *   FreeType error code.  0 means success.
587    */
588   typedef FT_Error
589   (*TT_Get_Name_Func)( TT_Face      face,
590                        FT_UShort    nameid,
591                        FT_String**  name );
592 
593 
594   /**************************************************************************
595    *
596    * @functype:
597    *   TT_Get_Name_ID_Func
598    *
599    * @description:
600    *   Search whether an ENGLISH version for a given name ID is in the 'name'
601    *   table.
602    *
603    * @input:
604    *   face ::
605    *     A handle to the source face object.
606    *
607    *   nameid ::
608    *     The name id of the name record to return.
609    *
610    * @output:
611    *   win ::
612    *     If non-negative, an index into the 'name' table with the
613    *     corresponding (3,1) or (3,0) Windows entry.
614    *
615    *   apple ::
616    *     If non-negative, an index into the 'name' table with the
617    *     corresponding (1,0) Apple entry.
618    *
619    * @return:
620    *   1 if there is either a win or apple entry (or both), 0 otheriwse.
621    */
622   typedef FT_Bool
623   (*TT_Get_Name_ID_Func)( TT_Face    face,
624                           FT_UShort  nameid,
625                           FT_Int    *win,
626                           FT_Int    *apple );
627 
628 
629   /**************************************************************************
630    *
631    * @functype:
632    *   TT_Load_Table_Func
633    *
634    * @description:
635    *   Load a given TrueType table.
636    *
637    * @input:
638    *   face ::
639    *     A handle to the target face object.
640    *
641    *   stream ::
642    *     The input stream.
643    *
644    * @return:
645    *   FreeType error code.  0 means success.
646    *
647    * @note:
648    *   The function uses `face->goto_table` to seek the stream to the start
649    *   of the table, except while loading the font directory.
650    */
651   typedef FT_Error
652   (*TT_Load_Table_Func)( TT_Face    face,
653                          FT_Stream  stream );
654 
655 
656   /**************************************************************************
657    *
658    * @functype:
659    *   TT_Free_Table_Func
660    *
661    * @description:
662    *   Free a given TrueType table.
663    *
664    * @input:
665    *   face ::
666    *     A handle to the target face object.
667    */
668   typedef void
669   (*TT_Free_Table_Func)( TT_Face  face );
670 
671 
672   /*
673    * @functype:
674    *    TT_Face_GetKerningFunc
675    *
676    * @description:
677    *    Return the horizontal kerning value between two glyphs.
678    *
679    * @input:
680    *    face ::
681    *      A handle to the source face object.
682    *
683    *    left_glyph ::
684    *      The left glyph index.
685    *
686    *    right_glyph ::
687    *      The right glyph index.
688    *
689    * @return:
690    *    The kerning value in font units.
691    */
692   typedef FT_Int
693   (*TT_Face_GetKerningFunc)( TT_Face  face,
694                              FT_UInt  left_glyph,
695                              FT_UInt  right_glyph );
696 
697 
698   /**************************************************************************
699    *
700    * @struct:
701    *   SFNT_Interface
702    *
703    * @description:
704    *   This structure holds pointers to the functions used to load and free
705    *   the basic tables that are required in a 'sfnt' font file.
706    *
707    * @fields:
708    *   Check the various xxx_Func() descriptions for details.
709    */
710   typedef struct  SFNT_Interface_
711   {
712     TT_Loader_GotoTableFunc      goto_table;
713 
714     TT_Init_Face_Func            init_face;
715     TT_Load_Face_Func            load_face;
716     TT_Done_Face_Func            done_face;
717     FT_Module_Requester          get_interface;
718 
719     TT_Load_Any_Func             load_any;
720 
721     /* these functions are called by `load_face' but they can also  */
722     /* be called from external modules, if there is a need to do so */
723     TT_Load_Table_Func           load_head;
724     TT_Load_Metrics_Func         load_hhea;
725     TT_Load_Table_Func           load_cmap;
726     TT_Load_Table_Func           load_maxp;
727     TT_Load_Table_Func           load_os2;
728     TT_Load_Table_Func           load_post;
729 
730     TT_Load_Table_Func           load_name;
731     TT_Free_Table_Func           free_name;
732 
733     /* this field was called `load_kerning' up to version 2.1.10 */
734     TT_Load_Table_Func           load_kern;
735 
736     TT_Load_Table_Func           load_gasp;
737     TT_Load_Table_Func           load_pclt;
738 
739     /* see `ttload.h'; this field was called `load_bitmap_header' up to */
740     /* version 2.1.10                                                   */
741     TT_Load_Table_Func           load_bhed;
742 
743     TT_Load_SBit_Image_Func      load_sbit_image;
744 
745     /* see `ttpost.h' */
746     TT_Get_PS_Name_Func          get_psname;
747     TT_Free_Table_Func           free_psnames;
748 
749     /* starting here, the structure differs from version 2.1.7 */
750 
751     /* this field was introduced in version 2.1.8, named `get_psname' */
752     TT_Face_GetKerningFunc       get_kerning;
753 
754     /* new elements introduced after version 2.1.10 */
755 
756     /* load the font directory, i.e., the offset table and */
757     /* the table directory                                 */
758     TT_Load_Table_Func           load_font_dir;
759     TT_Load_Metrics_Func         load_hmtx;
760 
761     TT_Load_Table_Func           load_eblc;
762     TT_Free_Table_Func           free_eblc;
763 
764     TT_Set_SBit_Strike_Func      set_sbit_strike;
765     TT_Load_Strike_Metrics_Func  load_strike_metrics;
766 
767     TT_Load_Table_Func           load_cpal;
768     TT_Load_Table_Func           load_colr;
769     TT_Free_Table_Func           free_cpal;
770     TT_Free_Table_Func           free_colr;
771     TT_Set_Palette_Func          set_palette;
772     TT_Get_Colr_Layer_Func       get_colr_layer;
773     TT_Blend_Colr_Func           colr_blend;
774 
775     TT_Get_Metrics_Func          get_metrics;
776 
777     TT_Get_Name_Func             get_name;
778     TT_Get_Name_ID_Func          get_name_id;
779 
780   } SFNT_Interface;
781 
782 
783   /* transitional */
784   typedef SFNT_Interface*   SFNT_Service;
785 
786 
787 #define FT_DEFINE_SFNT_INTERFACE(        \
788           class_,                        \
789           goto_table_,                   \
790           init_face_,                    \
791           load_face_,                    \
792           done_face_,                    \
793           get_interface_,                \
794           load_any_,                     \
795           load_head_,                    \
796           load_hhea_,                    \
797           load_cmap_,                    \
798           load_maxp_,                    \
799           load_os2_,                     \
800           load_post_,                    \
801           load_name_,                    \
802           free_name_,                    \
803           load_kern_,                    \
804           load_gasp_,                    \
805           load_pclt_,                    \
806           load_bhed_,                    \
807           load_sbit_image_,              \
808           get_psname_,                   \
809           free_psnames_,                 \
810           get_kerning_,                  \
811           load_font_dir_,                \
812           load_hmtx_,                    \
813           load_eblc_,                    \
814           free_eblc_,                    \
815           set_sbit_strike_,              \
816           load_strike_metrics_,          \
817           load_cpal_,                    \
818           load_colr_,                    \
819           free_cpal_,                    \
820           free_colr_,                    \
821           set_palette_,                  \
822           get_colr_layer_,               \
823           colr_blend_,                   \
824           get_metrics_,                  \
825           get_name_,                     \
826           get_name_id_ )                 \
827   static const SFNT_Interface  class_ =  \
828   {                                      \
829     goto_table_,                         \
830     init_face_,                          \
831     load_face_,                          \
832     done_face_,                          \
833     get_interface_,                      \
834     load_any_,                           \
835     load_head_,                          \
836     load_hhea_,                          \
837     load_cmap_,                          \
838     load_maxp_,                          \
839     load_os2_,                           \
840     load_post_,                          \
841     load_name_,                          \
842     free_name_,                          \
843     load_kern_,                          \
844     load_gasp_,                          \
845     load_pclt_,                          \
846     load_bhed_,                          \
847     load_sbit_image_,                    \
848     get_psname_,                         \
849     free_psnames_,                       \
850     get_kerning_,                        \
851     load_font_dir_,                      \
852     load_hmtx_,                          \
853     load_eblc_,                          \
854     free_eblc_,                          \
855     set_sbit_strike_,                    \
856     load_strike_metrics_,                \
857     load_cpal_,                          \
858     load_colr_,                          \
859     free_cpal_,                          \
860     free_colr_,                          \
861     set_palette_,                        \
862     get_colr_layer_,                     \
863     colr_blend_,                         \
864     get_metrics_,                        \
865     get_name_,                           \
866     get_name_id_                         \
867   };
868 
869 
870 FT_END_HEADER
871 
872 #endif /* SFNT_H_ */
873 
874 
875 /* END */
876