[project @ 2004-01-28 23:08:28 by bursa]

Improve font-family.

svn path=/import/netsurf/; revision=515
This commit is contained in:
James Bursa 2004-01-28 23:08:28 +00:00
parent 1ee029cee6
commit ae4cb4c56d
4 changed files with 18 additions and 51 deletions

View File

@ -52,16 +52,6 @@ typedef enum {
CSS_TEXT_DECORATION_UNKNOWN = 0x1000
} css_text_decoration;
typedef enum {
CSS_FONT_FAMILY_INHERIT = 0x1,
CSS_FONT_FAMILY_SANS_SERIF = 0x2,
CSS_FONT_FAMILY_SERIF = 0x4,
CSS_FONT_FAMILY_MONOSPACE = 0x8,
CSS_FONT_FAMILY_CURSIVE = 0x10,
CSS_FONT_FAMILY_FANTASY = 0x20,
CSS_FONT_FAMILY_UNKNOWN = 0x1000
} css_font_family;
/** Representation of a complete CSS 2 style. */
struct css_style {
colour background_color;

View File

@ -7,6 +7,7 @@ css_border_style inherit none dashed dotted double groove inset outset ridge sol
css_clear inherit none both left right
css_display inherit inline block list-item run-in inline-block table inline-table table-row-group table-header-group table-footer-group table-row table-column-group table-column table-cell table-caption none
css_float inherit none left right
css_font_family inherit sans-serif serif monospace cursive fantasy
css_font_style inherit normal italic oblique
css_font_variant normal smallcaps
css_font_weight inherit normal bold bolder lighter 100 200 300 400 500 600 700 800 900

View File

@ -44,7 +44,7 @@ static void parse_color(struct css_style * const s, const struct css_node * cons
static void parse_display(struct css_style * const s, const struct css_node * const v);
static void parse_float(struct css_style * const s, const struct css_node * const v);
static void parse_font(struct css_style * const s, const struct css_node * v);
static void parse_font_family(struct css_style * const s, const struct css_node * const v);
static void parse_font_family(struct css_style * const s, const struct css_node * v);
static void parse_font_size(struct css_style * const s, const struct css_node * const v);
static void parse_font_style(struct css_style * const s, const struct css_node * const v);
static void parse_font_weight(struct css_style * const s, const struct css_node * const v);
@ -56,7 +56,6 @@ static void parse_visibility(struct css_style * const s, const struct css_node *
static void parse_width(struct css_style * const s, const struct css_node * const v);
static void parse_white_space(struct css_style * const s, const struct css_node * const v);
static css_text_decoration css_text_decoration_parse(const char * const s);
static css_font_family css_font_family_parse(const char * const s);
/* table of property parsers: MUST be sorted by property name */
@ -398,7 +397,7 @@ void parse_float(struct css_style * const s, const struct css_node * const v)
void parse_font(struct css_style * const s, const struct css_node * v)
{
css_font_family ff;
css_font_family ff;
css_font_style fs;
css_font_weight fw;
s->font_family = CSS_FONT_FAMILY_SANS_SERIF;
@ -444,30 +443,22 @@ void parse_font(struct css_style * const s, const struct css_node * v)
}
}
void parse_font_family(struct css_style * const s, const struct css_node * const v)
void parse_font_family(struct css_style * const s, const struct css_node * v)
{
/* TODO - font-family values are found in a comma separated list.
* Each list element should be considered in turn.
* The first match should be used.
* White space in a quoted string should be left alone,
* other white space should be reduced to a single space.*/
struct css_node *temp;
css_font_family z;
if (v->type != CSS_NODE_IDENT)
return;
z = css_font_family_parse(v->data);
if (z == CSS_FONT_FAMILY_INHERIT) {
if (v->next != 0)
return;
s->font_family = z;
for (; v; v = v->next) {
switch (v->type) {
case CSS_NODE_IDENT:
z = css_font_family_parse(v->data);
if (z != CSS_FONT_FAMILY_UNKNOWN) {
s->font_family = z;
return;
}
break;
default:
break;
}
}
if (z != CSS_FONT_FAMILY_UNKNOWN)
s->font_family = z;
/* for now, take the first item */
/*for (temp = v->next; temp; temp=temp->next) {
z = css_font_family_parse(temp->data);
s->font_family |= z;
}*/
}
void parse_font_size(struct css_style * const s, const struct css_node * const v)
@ -519,7 +510,7 @@ void parse_font_style(struct css_style * const s, const struct css_node * const
void parse_font_weight(struct css_style * const s, const struct css_node * const v)
{
css_font_weight z;
if (v->type != CSS_NODE_IDENT || v->next != 0)
if ((v->type != CSS_NODE_IDENT && v->type != CSS_NODE_NUMBER) || v->next != 0)
return;
z = css_font_weight_parse(v->data);
if (z != CSS_FONT_WEIGHT_UNKNOWN)
@ -624,13 +615,3 @@ css_text_decoration css_text_decoration_parse(const char * const s)
return CSS_TEXT_DECORATION_UNKNOWN;
}
css_font_family css_font_family_parse(const char * const s)
{
if (strcasecmp(s, "inherit") == 0) return CSS_FONT_FAMILY_INHERIT;
if (strcasecmp(s, "sans-serif") == 0) return CSS_FONT_FAMILY_SANS_SERIF;
if (strcasecmp(s, "serif") == 0) return CSS_FONT_FAMILY_SERIF;
if (strcasecmp(s, "monospace") == 0) return CSS_FONT_FAMILY_MONOSPACE;
if (strcasecmp(s, "cursive") == 0) return CSS_FONT_FAMILY_CURSIVE;
if (strcasecmp(s, "fantasy") == 0) return CSS_FONT_FAMILY_FANTASY;
return CSS_TEXT_DECORATION_UNKNOWN;
}

View File

@ -112,7 +112,6 @@ struct font_data *font_open(struct font_set *set, struct css_style *style)
unsigned int f = 0;
font_f handle;
os_error *error;
bool bold=false, italic=false;
assert(set);
assert(style);
@ -147,7 +146,6 @@ struct font_data *font_open(struct font_set *set, struct css_style *style)
case CSS_FONT_WEIGHT_800:
case CSS_FONT_WEIGHT_900:
f += FONT_BOLD;
bold = true;
break;
default:
break;
@ -157,7 +155,6 @@ struct font_data *font_open(struct font_set *set, struct css_style *style)
case CSS_FONT_STYLE_ITALIC:
case CSS_FONT_STYLE_OBLIQUE:
f += FONT_SLANTED;
italic = true;
break;
default:
break;
@ -174,9 +171,7 @@ struct font_data *font_open(struct font_set *set, struct css_style *style)
if (error) { /* fall back to Homerton */
LOG(("font_find_font failed; falling back to Homerton"));
f = 0 + (bold ? FONT_BOLD : 0) + (italic ? FONT_SLANTED: 0);
error = xfont_find_font(font_table[f], (int)size, (int)size,
error = xfont_find_font(font_table[f % 4], (int)size, (int)size,
0, 0, &handle, 0, 0);
if (error) {
LOG(("%i: %s\n", error->errnum, error->errmess));