You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.3 KiB
66 lines
1.3 KiB
//========================================================================
|
|
//
|
|
// BuiltinFont.cpp
|
|
//
|
|
// Copyright 2001-2003 Glyph & Cog, LLC
|
|
//
|
|
//========================================================================
|
|
|
|
#include <aconf.h>
|
|
|
|
#ifdef USE_GCC_PRAGMAS
|
|
#pragma implementation
|
|
#endif
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include "gmem.h"
|
|
#include "FontEncodingTables.h"
|
|
#include "BuiltinFont.h"
|
|
|
|
//------------------------------------------------------------------------
|
|
|
|
BuiltinFontWidths::BuiltinFontWidths(BuiltinFontWidth *widths, int sizeA) {
|
|
int i, h;
|
|
|
|
size = sizeA;
|
|
tab = (BuiltinFontWidth **)gmallocn(size, sizeof(BuiltinFontWidth *));
|
|
for (i = 0; i < size; ++i) {
|
|
tab[i] = NULL;
|
|
}
|
|
for (i = 0; i < sizeA; ++i) {
|
|
h = hash(widths[i].name);
|
|
widths[i].next = tab[h];
|
|
tab[h] = &widths[i];
|
|
}
|
|
}
|
|
|
|
BuiltinFontWidths::~BuiltinFontWidths() {
|
|
gfree(tab);
|
|
}
|
|
|
|
GBool BuiltinFontWidths::getWidth(char *name, Gushort *width) {
|
|
int h;
|
|
BuiltinFontWidth *p;
|
|
|
|
h = hash(name);
|
|
for (p = tab[h]; p; p = p->next) {
|
|
if (!strcmp(p->name, name)) {
|
|
*width = p->width;
|
|
return gTrue;
|
|
}
|
|
}
|
|
return gFalse;
|
|
}
|
|
|
|
int BuiltinFontWidths::hash(char *name) {
|
|
char *p;
|
|
unsigned int h;
|
|
|
|
h = 0;
|
|
for (p = name; *p; ++p) {
|
|
h = 17 * h + (int)(*p & 0xff);
|
|
}
|
|
return (int)(h % size);
|
|
}
|