1 /****************************************************************************
2  *
3  * ftheader.h
4  *
5  *   Build macros of the FreeType 2 library.
6  *
7  * Copyright (C) 1996-2022 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 #ifndef FTHEADER_H_
19 #define FTHEADER_H_
20 
21 
22   /*@***********************************************************************/
23   /*                                                                       */
24   /* <Macro>                                                               */
25   /*    FT_BEGIN_HEADER                                                    */
26   /*                                                                       */
27   /* <Description>                                                         */
28   /*    This macro is used in association with @FT_END_HEADER in header    */
29   /*    files to ensure that the declarations within are properly          */
30   /*    encapsulated in an `extern "C" { .. }` block when included from a  */
31   /*    C++ compiler.                                                      */
32   /*                                                                       */
33 #ifndef FT_BEGIN_HEADER
34 #  ifdef __cplusplus
35 #    define FT_BEGIN_HEADER  extern "C" {
36 #  else
37 #  define FT_BEGIN_HEADER  /* nothing */
38 #  endif
39 #endif
40 
41 
42   /*@***********************************************************************/
43   /*                                                                       */
44   /* <Macro>                                                               */
45   /*    FT_END_HEADER                                                      */
46   /*                                                                       */
47   /* <Description>                                                         */
48   /*    This macro is used in association with @FT_BEGIN_HEADER in header  */
49   /*    files to ensure that the declarations within are properly          */
50   /*    encapsulated in an `extern "C" { .. }` block when included from a  */
51   /*    C++ compiler.                                                      */
52   /*                                                                       */
53 #ifndef FT_END_HEADER
54 #  ifdef __cplusplus
55 #    define FT_END_HEADER  }
56 #  else
57 #   define FT_END_HEADER  /* nothing */
58 #  endif
59 #endif
60 
61 
62   /**************************************************************************
63    *
64    * Aliases for the FreeType 2 public and configuration files.
65    *
66    */
67 
68   /**************************************************************************
69    *
70    * @section:
71    *   header_file_macros
72    *
73    * @title:
74    *   Header File Macros
75    *
76    * @abstract:
77    *   Macro definitions used to `#include` specific header files.
78    *
79    * @description:
80    *   In addition to the normal scheme of including header files like
81    *
82    *   ```
83    *     #include <freetype/freetype.h>
84    *     #include <freetype/ftmm.h>
85    *     #include <freetype/ftglyph.h>
86    *   ```
87    *
88    *   it is possible to used named macros instead.  They can be used
89    *   directly in `#include` statements as in
90    *
91    *   ```
92    *     #include FT_FREETYPE_H
93    *     #include FT_MULTIPLE_MASTERS_H
94    *     #include FT_GLYPH_H
95    *   ```
96    *
97    *   These macros were introduced to overcome the infamous 8.3~naming rule
98    *   required by DOS (and `FT_MULTIPLE_MASTERS_H` is a lot more meaningful
99    *   than `ftmm.h`).
100    *
101    */
102 
103 
104   /* configuration files */
105 
106   /**************************************************************************
107    *
108    * @macro:
109    *   FT_CONFIG_CONFIG_H
110    *
111    * @description:
112    *   A macro used in `#include` statements to name the file containing
113    *   FreeType~2 configuration data.
114    *
115    */
116 #ifndef FT_CONFIG_CONFIG_H
117 #define FT_CONFIG_CONFIG_H  <freetype/config/ftconfig.h>
118 #endif
119 
120 
121   /**************************************************************************
122    *
123    * @macro:
124    *   FT_CONFIG_STANDARD_LIBRARY_H
125    *
126    * @description:
127    *   A macro used in `#include` statements to name the file containing
128    *   FreeType~2 interface to the standard C library functions.
129    *
130    */
131 #ifndef FT_CONFIG_STANDARD_LIBRARY_H
132 #define FT_CONFIG_STANDARD_LIBRARY_H  <freetype/config/ftstdlib.h>
133 #endif
134 
135 
136   /**************************************************************************
137    *
138    * @macro:
139    *   FT_CONFIG_OPTIONS_H
140    *
141    * @description:
142    *   A macro used in `#include` statements to name the file containing
143    *   FreeType~2 project-specific configuration options.
144    *
145    */
146 #ifndef FT_CONFIG_OPTIONS_H
147 #define FT_CONFIG_OPTIONS_H  <freetype/config/ftoption.h>
148 #endif
149 
150 
151   /**************************************************************************
152    *
153    * @macro:
154    *   FT_CONFIG_MODULES_H
155    *
156    * @description:
157    *   A macro used in `#include` statements to name the file containing the
158    *   list of FreeType~2 modules that are statically linked to new library
159    *   instances in @FT_Init_FreeType.
160    *
161    */
162 #ifndef FT_CONFIG_MODULES_H
163 #define FT_CONFIG_MODULES_H  <freetype/config/ftmodule.h>
164 #endif
165 
166   /* */
167 
168   /* public headers */
169 
170   /**************************************************************************
171    *
172    * @macro:
173    *   FT_FREETYPE_H
174    *
175    * @description:
176    *   A macro used in `#include` statements to name the file containing the
177    *   base FreeType~2 API.
178    *
179    */
180 #define FT_FREETYPE_H  <freetype/freetype.h>
181 
182 
183   /**************************************************************************
184    *
185    * @macro:
186    *   FT_ERRORS_H
187    *
188    * @description:
189    *   A macro used in `#include` statements to name the file containing the
190    *   list of FreeType~2 error codes (and messages).
191    *
192    *   It is included by @FT_FREETYPE_H.
193    *
194    */
195 #define FT_ERRORS_H  <freetype/fterrors.h>
196 
197 
198   /**************************************************************************
199    *
200    * @macro:
201    *   FT_MODULE_ERRORS_H
202    *
203    * @description:
204    *   A macro used in `#include` statements to name the file containing the
205    *   list of FreeType~2 module error offsets (and messages).
206    *
207    */
208 #define FT_MODULE_ERRORS_H  <freetype/ftmoderr.h>
209 
210 
211   /**************************************************************************
212    *
213    * @macro:
214    *   FT_SYSTEM_H
215    *
216    * @description:
217    *   A macro used in `#include` statements to name the file containing the
218    *   FreeType~2 interface to low-level operations (i.e., memory management
219    *   and stream i/o).
220    *
221    *   It is included by @FT_FREETYPE_H.
222    *
223    */
224 #define FT_SYSTEM_H  <freetype/ftsystem.h>
225 
226 
227   /**************************************************************************
228    *
229    * @macro:
230    *   FT_IMAGE_H
231    *
232    * @description:
233    *   A macro used in `#include` statements to name the file containing type
234    *   definitions related to glyph images (i.e., bitmaps, outlines,
235    *   scan-converter parameters).
236    *
237    *   It is included by @FT_FREETYPE_H.
238    *
239    */
240 #define FT_IMAGE_H  <freetype/ftimage.h>
241 
242 
243   /**************************************************************************
244    *
245    * @macro:
246    *   FT_TYPES_H
247    *
248    * @description:
249    *   A macro used in `#include` statements to name the file containing the
250    *   basic data types defined by FreeType~2.
251    *
252    *   It is included by @FT_FREETYPE_H.
253    *
254    */
255 #define FT_TYPES_H  <freetype/fttypes.h>
256 
257 
258   /**************************************************************************
259    *
260    * @macro:
261    *   FT_LIST_H
262    *
263    * @description:
264    *   A macro used in `#include` statements to name the file containing the
265    *   list management API of FreeType~2.
266    *
267    *   (Most applications will never need to include this file.)
268    *
269    */
270 #define FT_LIST_H  <freetype/ftlist.h>
271 
272 
273   /**************************************************************************
274    *
275    * @macro:
276    *   FT_OUTLINE_H
277    *
278    * @description:
279    *   A macro used in `#include` statements to name the file containing the
280    *   scalable outline management API of FreeType~2.
281    *
282    */
283 #define FT_OUTLINE_H  <freetype/ftoutln.h>
284 
285 
286   /**************************************************************************
287    *
288    * @macro:
289    *   FT_SIZES_H
290    *
291    * @description:
292    *   A macro used in `#include` statements to name the file containing the
293    *   API which manages multiple @FT_Size objects per face.
294    *
295    */
296 #define FT_SIZES_H  <freetype/ftsizes.h>
297 
298 
299   /**************************************************************************
300    *
301    * @macro:
302    *   FT_MODULE_H
303    *
304    * @description:
305    *   A macro used in `#include` statements to name the file containing the
306    *   module management API of FreeType~2.
307    *
308    */
309 #define FT_MODULE_H  <freetype/ftmodapi.h>
310 
311 
312   /**************************************************************************
313    *
314    * @macro:
315    *   FT_RENDER_H
316    *
317    * @description:
318    *   A macro used in `#include` statements to name the file containing the
319    *   renderer module management API of FreeType~2.
320    *
321    */
322 #define FT_RENDER_H  <freetype/ftrender.h>
323 
324 
325   /**************************************************************************
326    *
327    * @macro:
328    *   FT_DRIVER_H
329    *
330    * @description:
331    *   A macro used in `#include` statements to name the file containing
332    *   structures and macros related to the driver modules.
333    *
334    */
335 #define FT_DRIVER_H  <freetype/ftdriver.h>
336 
337 
338   /**************************************************************************
339    *
340    * @macro:
341    *   FT_AUTOHINTER_H
342    *
343    * @description:
344    *   A macro used in `#include` statements to name the file containing
345    *   structures and macros related to the auto-hinting module.
346    *
347    *   Deprecated since version~2.9; use @FT_DRIVER_H instead.
348    *
349    */
350 #define FT_AUTOHINTER_H  FT_DRIVER_H
351 
352 
353   /**************************************************************************
354    *
355    * @macro:
356    *   FT_CFF_DRIVER_H
357    *
358    * @description:
359    *   A macro used in `#include` statements to name the file containing
360    *   structures and macros related to the CFF driver module.
361    *
362    *   Deprecated since version~2.9; use @FT_DRIVER_H instead.
363    *
364    */
365 #define FT_CFF_DRIVER_H  FT_DRIVER_H
366 
367 
368   /**************************************************************************
369    *
370    * @macro:
371    *   FT_TRUETYPE_DRIVER_H
372    *
373    * @description:
374    *   A macro used in `#include` statements to name the file containing
375    *   structures and macros related to the TrueType driver module.
376    *
377    *   Deprecated since version~2.9; use @FT_DRIVER_H instead.
378    *
379    */
380 #define FT_TRUETYPE_DRIVER_H  FT_DRIVER_H
381 
382 
383   /**************************************************************************
384    *
385    * @macro:
386    *   FT_PCF_DRIVER_H
387    *
388    * @description:
389    *   A macro used in `#include` statements to name the file containing
390    *   structures and macros related to the PCF driver module.
391    *
392    *   Deprecated since version~2.9; use @FT_DRIVER_H instead.
393    *
394    */
395 #define FT_PCF_DRIVER_H  FT_DRIVER_H
396 
397 
398   /**************************************************************************
399    *
400    * @macro:
401    *   FT_TYPE1_TABLES_H
402    *
403    * @description:
404    *   A macro used in `#include` statements to name the file containing the
405    *   types and API specific to the Type~1 format.
406    *
407    */
408 #define FT_TYPE1_TABLES_H  <freetype/t1tables.h>
409 
410 
411   /**************************************************************************
412    *
413    * @macro:
414    *   FT_TRUETYPE_IDS_H
415    *
416    * @description:
417    *   A macro used in `#include` statements to name the file containing the
418    *   enumeration values which identify name strings, languages, encodings,
419    *   etc.  This file really contains a _large_ set of constant macro
420    *   definitions, taken from the TrueType and OpenType specifications.
421    *
422    */
423 #define FT_TRUETYPE_IDS_H  <freetype/ttnameid.h>
424 
425 
426   /**************************************************************************
427    *
428    * @macro:
429    *   FT_TRUETYPE_TABLES_H
430    *
431    * @description:
432    *   A macro used in `#include` statements to name the file containing the
433    *   types and API specific to the TrueType (as well as OpenType) format.
434    *
435    */
436 #define FT_TRUETYPE_TABLES_H  <freetype/tttables.h>
437 
438 
439   /**************************************************************************
440    *
441    * @macro:
442    *   FT_TRUETYPE_TAGS_H
443    *
444    * @description:
445    *   A macro used in `#include` statements to name the file containing the
446    *   definitions of TrueType four-byte 'tags' which identify blocks in
447    *   SFNT-based font formats (i.e., TrueType and OpenType).
448    *
449    */
450 #define FT_TRUETYPE_TAGS_H  <freetype/tttags.h>
451 
452 
453   /**************************************************************************
454    *
455    * @macro:
456    *   FT_BDF_H
457    *
458    * @description:
459    *   A macro used in `#include` statements to name the file containing the
460    *   definitions of an API which accesses BDF-specific strings from a face.
461    *
462    */
463 #define FT_BDF_H  <freetype/ftbdf.h>
464 
465 
466   /**************************************************************************
467    *
468    * @macro:
469    *   FT_CID_H
470    *
471    * @description:
472    *   A macro used in `#include` statements to name the file containing the
473    *   definitions of an API which access CID font information from a face.
474    *
475    */
476 #define FT_CID_H  <freetype/ftcid.h>
477 
478 
479   /**************************************************************************
480    *
481    * @macro:
482    *   FT_GZIP_H
483    *
484    * @description:
485    *   A macro used in `#include` statements to name the file containing the
486    *   definitions of an API which supports gzip-compressed files.
487    *
488    */
489 #define FT_GZIP_H  <freetype/ftgzip.h>
490 
491 
492   /**************************************************************************
493    *
494    * @macro:
495    *   FT_LZW_H
496    *
497    * @description:
498    *   A macro used in `#include` statements to name the file containing the
499    *   definitions of an API which supports LZW-compressed files.
500    *
501    */
502 #define FT_LZW_H  <freetype/ftlzw.h>
503 
504 
505   /**************************************************************************
506    *
507    * @macro:
508    *   FT_BZIP2_H
509    *
510    * @description:
511    *   A macro used in `#include` statements to name the file containing the
512    *   definitions of an API which supports bzip2-compressed files.
513    *
514    */
515 #define FT_BZIP2_H  <freetype/ftbzip2.h>
516 
517 
518   /**************************************************************************
519    *
520    * @macro:
521    *   FT_WINFONTS_H
522    *
523    * @description:
524    *   A macro used in `#include` statements to name the file containing the
525    *   definitions of an API which supports Windows FNT files.
526    *
527    */
528 #define FT_WINFONTS_H   <freetype/ftwinfnt.h>
529 
530 
531   /**************************************************************************
532    *
533    * @macro:
534    *   FT_GLYPH_H
535    *
536    * @description:
537    *   A macro used in `#include` statements to name the file containing the
538    *   API of the optional glyph management component.
539    *
540    */
541 #define FT_GLYPH_H  <freetype/ftglyph.h>
542 
543 
544   /**************************************************************************
545    *
546    * @macro:
547    *   FT_BITMAP_H
548    *
549    * @description:
550    *   A macro used in `#include` statements to name the file containing the
551    *   API of the optional bitmap conversion component.
552    *
553    */
554 #define FT_BITMAP_H  <freetype/ftbitmap.h>
555 
556 
557   /**************************************************************************
558    *
559    * @macro:
560    *   FT_BBOX_H
561    *
562    * @description:
563    *   A macro used in `#include` statements to name the file containing the
564    *   API of the optional exact bounding box computation routines.
565    *
566    */
567 #define FT_BBOX_H  <freetype/ftbbox.h>
568 
569 
570   /**************************************************************************
571    *
572    * @macro:
573    *   FT_CACHE_H
574    *
575    * @description:
576    *   A macro used in `#include` statements to name the file containing the
577    *   API of the optional FreeType~2 cache sub-system.
578    *
579    */
580 #define FT_CACHE_H  <freetype/ftcache.h>
581 
582 
583   /**************************************************************************
584    *
585    * @macro:
586    *   FT_MAC_H
587    *
588    * @description:
589    *   A macro used in `#include` statements to name the file containing the
590    *   Macintosh-specific FreeType~2 API.  The latter is used to access fonts
591    *   embedded in resource forks.
592    *
593    *   This header file must be explicitly included by client applications
594    *   compiled on the Mac (note that the base API still works though).
595    *
596    */
597 #define FT_MAC_H  <freetype/ftmac.h>
598 
599 
600   /**************************************************************************
601    *
602    * @macro:
603    *   FT_MULTIPLE_MASTERS_H
604    *
605    * @description:
606    *   A macro used in `#include` statements to name the file containing the
607    *   optional multiple-masters management API of FreeType~2.
608    *
609    */
610 #define FT_MULTIPLE_MASTERS_H  <freetype/ftmm.h>
611 
612 
613   /**************************************************************************
614    *
615    * @macro:
616    *   FT_SFNT_NAMES_H
617    *
618    * @description:
619    *   A macro used in `#include` statements to name the file containing the
620    *   optional FreeType~2 API which accesses embedded 'name' strings in
621    *   SFNT-based font formats (i.e., TrueType and OpenType).
622    *
623    */
624 #define FT_SFNT_NAMES_H  <freetype/ftsnames.h>
625 
626 
627   /**************************************************************************
628    *
629    * @macro:
630    *   FT_OPENTYPE_VALIDATE_H
631    *
632    * @description:
633    *   A macro used in `#include` statements to name the file containing the
634    *   optional FreeType~2 API which validates OpenType tables ('BASE',
635    *   'GDEF', 'GPOS', 'GSUB', 'JSTF').
636    *
637    */
638 #define FT_OPENTYPE_VALIDATE_H  <freetype/ftotval.h>
639 
640 
641   /**************************************************************************
642    *
643    * @macro:
644    *   FT_GX_VALIDATE_H
645    *
646    * @description:
647    *   A macro used in `#include` statements to name the file containing the
648    *   optional FreeType~2 API which validates TrueTypeGX/AAT tables ('feat',
649    *   'mort', 'morx', 'bsln', 'just', 'kern', 'opbd', 'trak', 'prop').
650    *
651    */
652 #define FT_GX_VALIDATE_H  <freetype/ftgxval.h>
653 
654 
655   /**************************************************************************
656    *
657    * @macro:
658    *   FT_PFR_H
659    *
660    * @description:
661    *   A macro used in `#include` statements to name the file containing the
662    *   FreeType~2 API which accesses PFR-specific data.
663    *
664    */
665 #define FT_PFR_H  <freetype/ftpfr.h>
666 
667 
668   /**************************************************************************
669    *
670    * @macro:
671    *   FT_STROKER_H
672    *
673    * @description:
674    *   A macro used in `#include` statements to name the file containing the
675    *   FreeType~2 API which provides functions to stroke outline paths.
676    */
677 #define FT_STROKER_H  <freetype/ftstroke.h>
678 
679 
680   /**************************************************************************
681    *
682    * @macro:
683    *   FT_SYNTHESIS_H
684    *
685    * @description:
686    *   A macro used in `#include` statements to name the file containing the
687    *   FreeType~2 API which performs artificial obliquing and emboldening.
688    */
689 #define FT_SYNTHESIS_H  <freetype/ftsynth.h>
690 
691 
692   /**************************************************************************
693    *
694    * @macro:
695    *   FT_FONT_FORMATS_H
696    *
697    * @description:
698    *   A macro used in `#include` statements to name the file containing the
699    *   FreeType~2 API which provides functions specific to font formats.
700    */
701 #define FT_FONT_FORMATS_H  <freetype/ftfntfmt.h>
702 
703   /* deprecated */
704 #define FT_XFREE86_H  FT_FONT_FORMATS_H
705 
706 
707   /**************************************************************************
708    *
709    * @macro:
710    *   FT_TRIGONOMETRY_H
711    *
712    * @description:
713    *   A macro used in `#include` statements to name the file containing the
714    *   FreeType~2 API which performs trigonometric computations (e.g.,
715    *   cosines and arc tangents).
716    */
717 #define FT_TRIGONOMETRY_H  <freetype/fttrigon.h>
718 
719 
720   /**************************************************************************
721    *
722    * @macro:
723    *   FT_LCD_FILTER_H
724    *
725    * @description:
726    *   A macro used in `#include` statements to name the file containing the
727    *   FreeType~2 API which performs color filtering for subpixel rendering.
728    */
729 #define FT_LCD_FILTER_H  <freetype/ftlcdfil.h>
730 
731 
732   /**************************************************************************
733    *
734    * @macro:
735    *   FT_INCREMENTAL_H
736    *
737    * @description:
738    *   A macro used in `#include` statements to name the file containing the
739    *   FreeType~2 API which performs incremental glyph loading.
740    */
741 #define FT_INCREMENTAL_H  <freetype/ftincrem.h>
742 
743 
744   /**************************************************************************
745    *
746    * @macro:
747    *   FT_GASP_H
748    *
749    * @description:
750    *   A macro used in `#include` statements to name the file containing the
751    *   FreeType~2 API which returns entries from the TrueType GASP table.
752    */
753 #define FT_GASP_H  <freetype/ftgasp.h>
754 
755 
756   /**************************************************************************
757    *
758    * @macro:
759    *   FT_ADVANCES_H
760    *
761    * @description:
762    *   A macro used in `#include` statements to name the file containing the
763    *   FreeType~2 API which returns individual and ranged glyph advances.
764    */
765 #define FT_ADVANCES_H  <freetype/ftadvanc.h>
766 
767 
768   /**************************************************************************
769    *
770    * @macro:
771    *   FT_COLOR_H
772    *
773    * @description:
774    *   A macro used in `#include` statements to name the file containing the
775    *   FreeType~2 API which handles the OpenType 'CPAL' table.
776    */
777 #define FT_COLOR_H  <freetype/ftcolor.h>
778 
779 
780   /**************************************************************************
781    *
782    * @macro:
783    *   FT_OTSVG_H
784    *
785    * @description:
786    *   A macro used in `#include` statements to name the file containing the
787    *   FreeType~2 API which handles the OpenType 'SVG~' glyphs.
788    */
789 #define FT_OTSVG_H  <freetype/otsvg.h>
790 
791 
792   /* */
793 
794   /* These header files don't need to be included by the user. */
795 #define FT_ERROR_DEFINITIONS_H  <freetype/fterrdef.h>
796 #define FT_PARAMETER_TAGS_H     <freetype/ftparams.h>
797 
798   /* Deprecated macros. */
799 #define FT_UNPATENTED_HINTING_H   <freetype/ftparams.h>
800 #define FT_TRUETYPE_UNPATENTED_H  <freetype/ftparams.h>
801 
802   /* `FT_CACHE_H` is the only header file needed for the cache subsystem. */
803 #define FT_CACHE_IMAGE_H          FT_CACHE_H
804 #define FT_CACHE_SMALL_BITMAPS_H  FT_CACHE_H
805 #define FT_CACHE_CHARMAP_H        FT_CACHE_H
806 
807   /* The internals of the cache sub-system are no longer exposed.  We */
808   /* default to `FT_CACHE_H` at the moment just in case, but we know  */
809   /* of no rogue client that uses them.                               */
810   /*                                                                  */
811 #define FT_CACHE_MANAGER_H           FT_CACHE_H
812 #define FT_CACHE_INTERNAL_MRU_H      FT_CACHE_H
813 #define FT_CACHE_INTERNAL_MANAGER_H  FT_CACHE_H
814 #define FT_CACHE_INTERNAL_CACHE_H    FT_CACHE_H
815 #define FT_CACHE_INTERNAL_GLYPH_H    FT_CACHE_H
816 #define FT_CACHE_INTERNAL_IMAGE_H    FT_CACHE_H
817 #define FT_CACHE_INTERNAL_SBITS_H    FT_CACHE_H
818 
819 /* TODO(david): Move this section below to a different header */
820 #ifdef FT2_BUILD_LIBRARY
821 #if defined( _MSC_VER )      /* Visual C++ (and Intel C++) */
822 
823   /* We disable the warning `conditional expression is constant' here */
824   /* in order to compile cleanly with the maximum level of warnings.  */
825   /* In particular, the warning complains about stuff like `while(0)' */
826   /* which is very useful in macro definitions.  There is no benefit  */
827   /* in having it enabled.                                            */
828 #pragma warning( disable : 4127 )
829 
830 #endif /* _MSC_VER */
831 #endif /* FT2_BUILD_LIBRARY */
832 
833 #endif /* FTHEADER_H_ */
834 
835 
836 /* END */
837