File: type1font.c

package info (click to toggle)
dvi2ps 3.2j-15
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 1,380 kB
  • ctags: 1,896
  • sloc: ansic: 12,767; sh: 965; makefile: 270
file content (105 lines) | stat: -rw-r--r-- 2,323 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*
 * type1 font (downlodable PostScript font)
 */
#include	"defs.h"
#include	"global.h"
#include	"bifont.h"
#ifdef KPATHSEA
#include	<kpathsea/tex-file.h>
#endif

void
init_t1_fontinfo(fe)
struct font_entry *fe;
{
    struct font_entry *repfe;
    int	mm_markchar();
    void read_t1_fontinfo();

    if ((repfe = dev_get_repfe(biaccinfo(fe)->bf)) == NULL) {
	biinifinfo(fe) = alloc_biinif(biaccinfo(fe)->bf);
	dev_set_repfe(biinifinfo(fe)->bf, fe);
    } else
	biinifinfo(fe) = biinifinfo(repfe);
    fe->fnt_markchar = mm_markchar;
    fe->fnt_readfontinfo = read_t1_fontinfo;
}

void
read_t1_fontinfo(fe)
struct font_entry *fe;
{
    struct biinitfontinfo *bii;
    struct tfmfntinfo *tfmfi;
    char *fn, *filename;
    FILE *fp;
    void read_tfm_finfo();

    bii = biinifinfo(fe);
    tfmfi = NEW(struct tfmfntinfo, "tfmfont info");
    tfmfi->tfm_bf = bii->bf;
    tfmfinfo(fe) = tfmfi;
    read_tfm_finfo(fe);
    dev_tfm_initfe(fe);

    if (dev_get_repfe(bii->bf) == NULL) {
	dev_t1_initfontdict(fe, bii, NULL, NULL);
	return;
    }
    fn = dev_fontpath(tfmfinfo(fe)->tfm_bf);
#ifdef KPATHSEA
    if ((filename = kpsearch_file(fn, fe->n, kpse_type1_format)) == NULL) {
	Warning("Type1 font file %s not found", fn);
	read_null_fontinfo(fe);
	return;
    }
#else
    filename = fn;
#endif
#ifdef DEBUG
    if (Debuguser)
	fprintf(stderr, "Type1font %s (for %s)\n", filename, fe->n);
#endif
    dev_t1_initfontdict(fe, bii, filename, enc_read(bii->bf));
    dev_set_repfe(bii->bf, NULL);
}

struct encr {
    char *er_filename;
    BOOLEAN *er_done;
    struct encr *er_next;
} *encfiles = NULL;

char *
enc_read(bf)
struct bifont *bf;
{
    char *enc, *encname;
    struct encr *er;

    enc = dev_encfile(bf);
#ifdef KPATHSEA
    if (enc != NULL) {
	encname = kpsearch_file(enc, "8a", kpse_tex_ps_header_format);
#ifdef DEBUG
	if (Debuguser)
	    fprintf(stderr, "encoding file %s\n",
		    encname != NULL ? encname : "(null)");
#endif
    } else
	encname = NULL;
#else
    encname = enc;
#endif
    if (encname == NULL)
	return NULL;
    for (er = encfiles; er != NULL; er = er->er_next)
	if (STREQ(encname, er->er_filename))
	    return encname;
    dev_copyfile(encname);
    er = NEW(struct encr, "encr");
    er->er_filename = encname;
    er->er_next = encfiles;
    encfiles = er;
    return encname;
}