2 afm2.cc -- implement Adobe_font_metric
4 source file of the Flower Library
6 (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
12 Adobe_font_metric::Adobe_font_metric (AFM_Font_info
* fi
)
16 for (int i
= 256; i
--;)
17 ascii_to_metric_idx_
.push (-1);
19 for (int i
=0; i
< fi
->numOfChars
; i
++)
21 AFM_CharMetricInfo
* c
= fi
->cmi
+ i
;
23 ascii_to_metric_idx_
[c
->code
] = i
;
24 name_to_metric_dict_
[c
->name
] = i
;
29 AFM_CharMetricInfo
const *
30 Adobe_font_metric::find_ascii_metric (int a
, bool warn
) const
32 if (ascii_to_metric_idx_
[a
] >=0)
34 int code
= ascii_to_metric_idx_
[a
];
37 return font_inf_
->cmi
+ code
;
42 warning (_f ("Can't find character number: %d", a
));
48 AFM_CharMetricInfo
const *
49 Adobe_font_metric::find_char_metric (String nm
, bool warn
) const
51 if (!name_to_metric_dict_
.elem_b (nm
))
55 warning (_f ("Can't find character called: `%s'", nm
.ch_C()));
60 return font_inf_
->cmi
+ name_to_metric_dict_
[nm
];
65 Adobe_font_metric::get_char (int code
, bool warn
) const
67 AFM_CharMetricInfo
const
68 * c
= find_ascii_metric (code
,warn
);
70 return afm_bbox_to_box (c
->charBBox
);
72 return Box (Interval (0,0),Interval(0,0));
76 read_afm_file (String nm
)
78 FILE *f
= fopen (nm
.ch_C() , "r");
81 int ok
= AFM_parseFile (f
, &fi
, ~1);
85 error (_("Error parsing AFM file"));
90 return new Adobe_font_metric (fi
);
95 afm_bbox_to_box (AFM_BBox bb
)
97 return Box (Interval (bb
.llx
, bb
.urx
)* (1/1000.0),
98 Interval (bb
.lly
, bb
.ury
)* (1/1000.0));
103 Adobe_font_metric::~Adobe_font_metric ()
105 AFM_free (font_inf_
);