1 /* tex-glyph.h: look for a TeX glyph font (GF or PK).
2 
3    Copyright 1993, 2008, 2009, 2011 Karl Berry.
4    Copyright 1999, 2005 Olaf Weber.
5 
6    This library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
10 
11    This library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15 
16    You should have received a copy of the GNU Lesser General Public License
17    along with this library; if not, see <http://www.gnu.org/licenses/>.  */
18 
19 #ifndef KPATHSEA_TEX_GLYPH_H
20 #define KPATHSEA_TEX_GLYPH_H
21 
22 #include <kpathsea/tex-file.h>
23 
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 /* This type describes the origination of a glyph font.  */
30 
31 typedef enum
32 {
33   kpse_glyph_source_normal,  /* the searched-for font: already existed */
34   kpse_glyph_source_alias,   /* : was an alias for an existing file */
35   kpse_glyph_source_maketex, /* : was created on the fly */
36   kpse_glyph_source_fallback /* : wasn't found, but the fallback font was */
37 } kpse_glyph_source_type;
38 
39 
40 typedef struct
41 {
42   const_string name;            /* font name found */
43   unsigned dpi;                 /* size found, for glyphs */
44   kpse_file_format_type format; /* glyph format found */
45   kpse_glyph_source_type source;        /* where we found it */
46 } kpse_glyph_file_type;
47 
48 #define KPSE_GLYPH_FILE_NAME(f) ((f).name)
49 #define KPSE_GLYPH_FILE_DPI(f) ((f).dpi)
50 #define KPSE_GLYPH_FILE_FORMAT(f) ((f).format)
51 #define KPSE_GLYPH_FILE_SOURCE(f) ((f).source)
52 
53 
54 /* Search first for the font named FONT_NAME at resolution DPI in the
55    glyph format FORMAT (see `try_size' for details of format searching).
56    Then try resolutions within KPSE_BITMAP_TOLERANCE of DPI.  Then if
57    FONT_NAME is an alias defined in a texfonts.map do all the above for
58    its real name.  If not an alias, try creating it on the fly with
59    mktexpk.  Then try the resolutions in `kpse_fallback_sizes', then
60    within the tolerance of each of those.  Then try the above for
61    kpse_fallback_name.  Then fail.  Return either the filename found, or
62    NULL.  Also return information about the file found in
63    *GLYPH_FILE.  */
64 extern KPSEDLL string kpathsea_find_glyph (kpathsea kpse,
65                                   const_string font_name, unsigned dpi,
66                                   kpse_file_format_type format,
67                                   kpse_glyph_file_type *glyph_file);
68 
69 
70 /* Defines how far away a pixel file can be found from its stated size.
71    The DVI standard says any resolution within 0.2% of the stated size
72    is ok, but we are more forgiving.  */
73 #define KPSE_BITMAP_TOLERANCE(r) ((r) / 500.0 + 1)
74 
75 /* Check whether DPI1 is within KPSE_BITMAP_TOLERANCE of DPI2. */
76 extern KPSEDLL boolean kpathsea_bitmap_tolerance (kpathsea kpse,
77                                   double dpi1, double dpi2);
78 
79 
80 #if defined (KPSE_COMPAT_API)
81 extern KPSEDLL string kpse_find_glyph (const_string font_name, unsigned dpi,
82                                   kpse_file_format_type format,
83                                   kpse_glyph_file_type *glyph_file);
84 
85 /* Look for a specific format only.  */
86 #define kpse_find_pk(font_name, dpi, glyph_file) \
87   kpse_find_glyph (font_name, dpi, kpse_pk_format, glyph_file)
88 #define kpse_find_gf(font_name, dpi, glyph_file) \
89   kpse_find_glyph (font_name, dpi, kpse_gf_format, glyph_file)
90 
91 extern KPSEDLL boolean kpse_bitmap_tolerance (double dpi1, double dpi2);
92 #endif
93 
94 #ifdef __cplusplus
95 }
96 #endif
97 
98 #endif /* not KPATHSEA_TEX_GLYPH_H */
99