X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_afm.c;h=01c0dcefeaea5b1bd8325f4655194fcaea6b503c;hb=fff2d8655192db3a32c5f9623832ed3ed1e1f912;hp=61340360ede410ac6acf505695095f8254a25c76;hpb=9393cbae80bfbe84837583b33fa5be93824686bf;p=rrdtool.git diff --git a/src/rrd_afm.c b/src/rrd_afm.c index 6134036..01c0dce 100644 --- a/src/rrd_afm.c +++ b/src/rrd_afm.c @@ -1,15 +1,27 @@ /**************************************************************************** - * RRDtool 1.1.x Copyright Tobias Oetiker, 1997 - 2002 + * RRDtool 1.2.6 Copyright by Tobi Oetiker, 1997-2005 **************************************************************************** * rrd_afm.h Parsing afm tables to find width of strings. ****************************************************************************/ +#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__) +#include "../confignt/config.h" +#else +#include "config.h" +#endif + #include "rrd_afm.h" #include "rrd_afm_data.h" #include #include +#ifdef HAVE_STRING_H +#include +#endif + +#include "unused.h" + #if 0 # define DEBUG 1 # define DLOG(x) fprintf x @@ -24,7 +36,8 @@ */ #define ENABLE_LIGATURES 0 -static const afm_fontinfo *afm_last_used_font; +static const afm_fontinfo *afm_last_used_font = NULL; +static const char *last_unknown_font = NULL; #define is_font(p, name) \ (!strcmp(p->postscript_name, name) || !strcmp(p->fullname, name)) @@ -45,22 +58,47 @@ static const afm_fontinfo *afm_searchfont(const char *name) return NULL; } + +/* returns always a font, never NULL. + The rest of the code depends on the result never being NULL. + See rrd_afm.h */ static const afm_fontinfo *afm_findfont(const char *name) { const afm_fontinfo *p = afm_searchfont(name); if (p) return p; - if (1 || DEBUG) fprintf(stderr, "Can't find font '%s'\n", name); - p = afm_searchfont("Helvetica"); + if (!last_unknown_font || strcmp(name, last_unknown_font)) { + fprintf(stderr, "Can't find font '%s'\n", name); + last_unknown_font = name; + } + p = afm_searchfont(RRD_AFM_DEFAULT_FONT); if (p) return p; - return NULL; + return afm_fontinfolist; /* anything, just anything. */ } const char *afm_get_font_postscript_name(const char* font) { const afm_fontinfo *p = afm_findfont(font); - return p ? p->postscript_name : "Helvetica"; + return p->postscript_name; +} + +const char *afm_get_font_name(const char* font) +{ + const afm_fontinfo *p = afm_findfont(font); + return p->fullname; +} + +double afm_get_ascender(const char* font, double size) +{ + const afm_fontinfo *p = afm_findfont(font); + return size * p->ascender / 1000.0; +} + +double afm_get_descender(const char* font, double size) +{ + const afm_fontinfo *p = afm_findfont(font); + return size * p->descender / 1000.0; } static int afm_find_char_index(const afm_fontinfo *fontinfo, @@ -149,8 +187,8 @@ static long afm_find_kern(const afm_fontinfo *fontinfo, } /* measure width of a text string */ -double afm_get_text_width ( double start, const char* font, double size, - double tabwidth, const char* text) +double afm_get_text_width ( double UNUSED(start), const char* font, double size, + double UNUSED(tabwidth), const char* text) { const afm_fontinfo *fontinfo = afm_findfont(font); long width = 0; @@ -201,21 +239,21 @@ double afm_get_text_width ( double start, const char* font, double size, #ifdef __APPLE__ const unsigned char afm_mac2iso[128] = { - '\xC4', '\xC5', '\xC7', '\xC9', '\xD1', '\xD6', '\xDC', '\xE1', // 80 - '\xE0', '\xE2', '\xE4', '\xE3', '\xE5', '\xE7', '\xE9', '\xE8', // 88 - '\xEA', '\xEB', '\xED', '\xEC', '\xEE', '\xEF', '\xF1', '\xF3', // 90 - '\xF2', '\xF4', '\xF6', '\xF5', '\xFA', '\xF9', '\xFB', '\xFC', // 98 - '\xDD', '\xB0', '\xA2', '\xA3', '\xA7', ' ', '\xB6', '\xDF', // A0 - '\xAE', '\xA9', ' ', '\xB4', '\xA8', ' ', '\xC6', '\xD8', // A8 - ' ', '\xB1', '\xBE', ' ', '\xA5', '\xB5', ' ', ' ', // B0 - '\xBD', '\xBC', ' ', '\xAA', '\xBA', ' ', '\xE6', '\xF8', // B8 - '\xBF', '\xA1', '\xAC', ' ', ' ', ' ', ' ', '\xAB', // C0 - '\xBB', ' ', '\xA0', '\xC0', '\xC3', '\xD5', ' ', '\xA6', // C8 - '\xAD', ' ', '"', '"', '\'', '\'', '\xF7', '\xD7', // D0 - '\xFF', ' ', ' ', '\xA4', '\xD0', '\xF0', '\xDE', '\xFE', // D8 - '\xFD', '\xB7', ' ', ' ', ' ', '\xC2', '\xCA', '\xC1', // E0 - '\xCB', '\xC8', '\xCD', '\xCE', '\xCF', '\xCC', '\xD3', '\xD4', // E8 - ' ', '\xD2', '\xDA', '\xDB', '\xD9', ' ', ' ', ' ', // F0 - '\xAF', ' ', ' ', ' ', '\xB8', ' ', ' ', ' ', // F8 + '\xC4', '\xC5', '\xC7', '\xC9', '\xD1', '\xD6', '\xDC', '\xE1', /* 80 */ + '\xE0', '\xE2', '\xE4', '\xE3', '\xE5', '\xE7', '\xE9', '\xE8', /* 88 */ + '\xEA', '\xEB', '\xED', '\xEC', '\xEE', '\xEF', '\xF1', '\xF3', /* 90 */ + '\xF2', '\xF4', '\xF6', '\xF5', '\xFA', '\xF9', '\xFB', '\xFC', /* 98 */ + '\xDD', '\xB0', '\xA2', '\xA3', '\xA7', ' ', '\xB6', '\xDF', /* A0 */ + '\xAE', '\xA9', ' ', '\xB4', '\xA8', ' ', '\xC6', '\xD8', /* A8 */ + ' ', '\xB1', '\xBE', ' ', '\xA5', '\xB5', ' ', ' ', /* B0 */ + '\xBD', '\xBC', ' ', '\xAA', '\xBA', ' ', '\xE6', '\xF8', /* B8 */ + '\xBF', '\xA1', '\xAC', ' ', ' ', ' ', ' ', '\xAB', /* C0 */ + '\xBB', ' ', '\xA0', '\xC0', '\xC3', '\xD5', ' ', '\xA6', /* C8 */ + '\xAD', ' ', '"', '"', '\'', '\'', '\xF7', '\xD7', /* D0 */ + '\xFF', ' ', ' ', '\xA4', '\xD0', '\xF0', '\xDE', '\xFE', /* D8 */ + '\xFD', '\xB7', ' ', ' ', ' ', '\xC2', '\xCA', '\xC1', /* E0 */ + '\xCB', '\xC8', '\xCD', '\xCE', '\xCF', '\xCC', '\xD3', '\xD4', /* E8 */ + ' ', '\xD2', '\xDA', '\xDB', '\xD9', ' ', ' ', ' ', /* F0 */ + '\xAF', ' ', ' ', ' ', '\xB8', ' ', ' ', ' ', /* F8 */ }; #endif