From 480740693bb3723dcabf3ddddd9cd3e4d690a20c Mon Sep 17 00:00:00 2001 From: John Ellson Date: Wed, 6 Nov 2013 13:22:48 -0500 Subject: [PATCH] move postscript_alias into htmlfont_t --- lib/common/fontmetrics.c | 2 +- lib/common/htmltable.c | 4 ++-- lib/common/textspan.h | 28 ++++++++++++++-------------- plugin/core/gvrender_core_dia.c | 2 +- plugin/core/gvrender_core_fig.c | 6 ++++-- plugin/core/gvrender_core_svg.c | 2 +- plugin/core/gvrender_core_tk.c | 6 ++++-- plugin/core/gvrender_core_vml.c | 18 ++++++++++-------- plugin/gd/gvrender_gd.c | 6 ++++-- plugin/gd/gvtextlayout_gd.c | 6 ++++-- plugin/lasi/gvrender_lasi.cpp | 12 +++++++----- plugin/pango/gvtextlayout_pango.c | 8 +++++--- 12 files changed, 57 insertions(+), 43 deletions(-) diff --git a/lib/common/fontmetrics.c b/lib/common/fontmetrics.c index 5e5da52be..41cc839de 100644 --- a/lib/common/fontmetrics.c +++ b/lib/common/fontmetrics.c @@ -198,7 +198,7 @@ pointf textspan_size(GVC_t *gvc, textspan_t * span) assert(span->font); font = span->font; - span->postscript_alias = translate_postscript_fontname(font->name); + font->postscript_alias = translate_postscript_fontname(font->name); if (Verbose && emit_once(font->name)) fpp = &fontpath; diff --git a/lib/common/htmltable.c b/lib/common/htmltable.c index 38f468644..b7f331bb8 100644 --- a/lib/common/htmltable.c +++ b/lib/common/htmltable.c @@ -172,7 +172,7 @@ emit_htextspans(GVJ_t * job, int nspans, htextspan_t * spans, pointf p, tl.yoffset_centerline = ti->yoffset_centerline; else tl.yoffset_centerline = 1; - tl.postscript_alias = ti->postscript_alias; + tl.font->postscript_alias = ti->font->postscript_alias; tl.layout = ti->layout; tl.size.x = ti->size.x; tl.size.y = spans[i].lfsize; @@ -1063,7 +1063,7 @@ static int size_html_txt(graph_t * g, htmltxt_t * ftxt, htmlenv_t * env) ftxt->spans[i].items[j].size.x = sz.x; ftxt->spans[i].items[j].yoffset_layout = lp.yoffset_layout; ftxt->spans[i].items[j].yoffset_centerline = lp.yoffset_centerline; - ftxt->spans[i].items[j].postscript_alias = lp.postscript_alias; + ftxt->spans[i].items[j].font->postscript_alias = lp.font->postscript_alias; ftxt->spans[i].items[j].layout = lp.layout; ftxt->spans[i].items[j].free_layout = lp.free_layout; width += sz.x; diff --git a/lib/common/textspan.h b/lib/common/textspan.h index ac3db81be..6d8e92c16 100644 --- a/lib/common/textspan.h +++ b/lib/common/textspan.h @@ -26,18 +26,6 @@ extern "C" { #define HTML_SUB 16 #define HTML_S 32 - /* font information - * If name or color is NULL, or size < 0, that attribute - * is unspecified. - */ - typedef struct { - char* name; - char* color; - int flags:7; /* HTML_UL, HTML_IF, HTML_BF, etc. */ - int cnt:(sizeof(int) * 8 - 7); /* reference count */ - double size; - } htmlfont_t; - typedef struct _PostscriptAlias { char* name; char* family; @@ -50,13 +38,25 @@ extern "C" { char* svg_font_style; } PostscriptAlias; + /* font information + * If name or color is NULL, or size < 0, that attribute + * is unspecified. + */ + typedef struct { + char* name; + double size; + char* color; + int flags:7; /* HTML_UL, HTML_IF, HTML_BF, etc. */ + PostscriptAlias *postscript_alias; + int cnt:(sizeof(int) * 8 - 7); /* reference count */ + } htmlfont_t; + /* atomic unit of text emitted using a single htmlfont_t */ typedef struct { char *str; /* stored in utf-8 */ - PostscriptAlias *postscript_alias; + htmlfont_t *font; void *layout; void (*free_layout) (void *layout); /* FIXME - this is ugly */ - htmlfont_t *font; double yoffset_layout, yoffset_centerline; pointf size; char just; /* 'l' 'n' 'r' */ /* FIXME */ diff --git a/plugin/core/gvrender_core_dia.c b/plugin/core/gvrender_core_dia.c index 77d9a0f31..563730df2 100644 --- a/plugin/core/gvrender_core_dia.c +++ b/plugin/core/gvrender_core_dia.c @@ -455,7 +455,7 @@ static void dia_textspan(GVJ_t * job, pointf p, textspan_t * span) } p.y += span->yoffset_centerline; - pA = span->postscript_alias; + pA = span->font->postscript_alias; if (pA) { switch(GD_fontnames(job->gvc->g)) { case PSFONTS: diff --git a/plugin/core/gvrender_core_fig.c b/plugin/core/gvrender_core_fig.c index e21e1983f..67b82112d 100644 --- a/plugin/core/gvrender_core_fig.c +++ b/plugin/core/gvrender_core_fig.c @@ -245,6 +245,7 @@ static void fig_end_edge(GVJ_t * job) static void fig_textspan(GVJ_t * job, pointf p, textspan_t * span) { obj_state_t *obj = job->obj; + PostscriptAlias *pA; int object_code = 4; /* always 4 for text */ int sub_type = 0; /* text justification */ @@ -262,8 +263,9 @@ static void fig_textspan(GVJ_t * job, pointf p, textspan_t * span) double height = 0.0; double length = 0.0; - if (span->postscript_alias) /* if it is a standard postscript font */ - font = span->postscript_alias->xfig_code; + pA = span->font->postscript_alias; + if (pA) /* if it is a standard postscript font */ + font = pA->xfig_code; switch (span->just) { case 'l': diff --git a/plugin/core/gvrender_core_svg.c b/plugin/core/gvrender_core_svg.c index ff6fdfbd3..4fd33990e 100644 --- a/plugin/core/gvrender_core_svg.c +++ b/plugin/core/gvrender_core_svg.c @@ -365,7 +365,7 @@ static void svg_textspan(GVJ_t * job, pointf p, textspan_t * span) } p.y += span->yoffset_centerline; gvprintf(job, " x=\"%g\" y=\"%g\"", p.x, -p.y); - pA = span->postscript_alias; + pA = span->font->postscript_alias; if (pA) { switch (GD_fontnames(job->gvc->g)) { case PSFONTS: diff --git a/plugin/core/gvrender_core_tk.c b/plugin/core/gvrender_core_tk.c index b8e2d3313..be78eaa8c 100644 --- a/plugin/core/gvrender_core_tk.c +++ b/plugin/core/gvrender_core_tk.c @@ -165,6 +165,7 @@ static void tkgen_textspan(GVJ_t * job, pointf p, textspan_t * span) { obj_state_t *obj = job->obj; const char *font; + PostscriptAlias *pA; int size; if (obj->pen != PEN_NONE) { @@ -185,8 +186,9 @@ static void tkgen_textspan(GVJ_t * job, pointf p, textspan_t * span) gvputs(job, " -font {"); /* tk doesn't like PostScript font names like "Times-Roman" */ /* so use family names */ - if (span->postscript_alias) - font = span->postscript_alias->family; + pA = span->font->postscript_alias; + if (pA) + font = pA->family; else font = span->font->name; gvputs(job, "\""); diff --git a/plugin/core/gvrender_core_vml.c b/plugin/core/gvrender_core_vml.c index 32eb6258d..ca1f26d88 100644 --- a/plugin/core/gvrender_core_vml.c +++ b/plugin/core/gvrender_core_vml.c @@ -372,6 +372,7 @@ static void vml_textspan(GVJ_t * job, pointf p, textspan_t * span) { pointf p1,p2; obj_state_t *obj = job->obj; + PostscriptAlias *pA; switch (span->just) { case 'l': @@ -411,14 +412,15 @@ static void vml_textspan(GVJ_t * job, pointf p, textspan_t * span) gvputs(job, " stroked=\"false\" filled=\"false\">\n"); gvputs(job, "postscript_alias) { - gvprintf(job, "font-family: '%s';", span->postscript_alias->family); - if (span->postscript_alias->weight) - gvprintf(job, "font-weight: %s;", span->postscript_alias->weight); - if (span->postscript_alias->stretch) - gvprintf(job, "font-stretch: %s;", span->postscript_alias->stretch); - if (span->postscript_alias->style) - gvprintf(job, "font-style: %s;", span->postscript_alias->style); + pA = span->font->postscript_alias; + if (pA) { + gvprintf(job, "font-family: '%s';", pA->family); + if (pA->weight) + gvprintf(job, "font-weight: %s;", pA->weight); + if (pA->stretch) + gvprintf(job, "font-stretch: %s;", pA->stretch); + if (pA->style) + gvprintf(job, "font-style: %s;", pA->style); } else { gvprintf(job, "font-family: \'%s\';", span->font->name); diff --git a/plugin/gd/gvrender_gd.c b/plugin/gd/gvrender_gd.c index d7dc35cf9..a57dfcd4a 100644 --- a/plugin/gd/gvrender_gd.c +++ b/plugin/gd/gvrender_gd.c @@ -368,6 +368,7 @@ static void gdgen_textspan(GVJ_t * job, pointf p, textspan_t * span) pointf spf, epf; double spanwidth = span->size.x * job->zoom * job->dpi.x / POINTS_PER_INCH; char* fontname; + PostscriptAlias *pA; if (!im) return; @@ -398,8 +399,9 @@ static void gdgen_textspan(GVJ_t * job, pointf p, textspan_t * span) } #ifdef HAVE_GD_FONTCONFIG - if (span->postscript_alias) - fontname = gd_psfontResolve (span->postscript_alias); + pA = span->font->postscript_alias; + if (pA) + fontname = gd_psfontResolve (pA); else #endif fontname = span->font->name; diff --git a/plugin/gd/gvtextlayout_gd.c b/plugin/gd/gvtextlayout_gd.c index 24facf08a..1ba6df9cc 100644 --- a/plugin/gd/gvtextlayout_gd.c +++ b/plugin/gd/gvtextlayout_gd.c @@ -125,6 +125,7 @@ static boolean gd_textlayout(textspan_t * span, char **fontpath) double fontsize; int brect[8]; gdFTStringExtra strex; + PostscriptAlias *pA; fontname = span->font->name; fontsize = span->font->size; @@ -158,8 +159,9 @@ static boolean gd_textlayout(textspan_t * span, char **fontpath) /* call gdImageStringFT with null *im to get brect and to set font cache */ #ifdef HAVE_GD_FONTCONFIG gdFTUseFontConfig(1); /* tell gd that we really want to use fontconfig, 'cos it s not the default */ - if (span->postscript_alias) - fontlist = gd_psfontResolve (span->postscript_alias); + pA = span->font->postscript_alias; + if (pA) + fontlist = gd_psfontResolve (pA); else fontlist = fontname; #else diff --git a/plugin/lasi/gvrender_lasi.cpp b/plugin/lasi/gvrender_lasi.cpp index b334fe237..87d8807c0 100644 --- a/plugin/lasi/gvrender_lasi.cpp +++ b/plugin/lasi/gvrender_lasi.cpp @@ -341,6 +341,7 @@ static void lasi_textspan(GVJ_t * job, pointf p, textspan_t * span) FontStyle style; FontVariant variant; FontWeight weight; + PostscriptAlias *pA; if (job->obj->pencolor.u.HSVA[3] < .5) return; /* skip transparent text */ @@ -379,16 +380,17 @@ static void lasi_textspan(GVJ_t * job, pointf p, textspan_t * span) } } else { - font = span->postscript_alias->svg_font_family; + pA = span->font->postscript_alias; + font = pA->svg_font_family; stretch = NORMAL_STRETCH; - if (span->postscript_alias->svg_font_style - && strcmp(span->postscript_alias->svg_font_style, "italic") == 0) + if (pA->svg_font_style + && strcmp(pA->svg_font_style, "italic") == 0) style = ITALIC; else style = NORMAL_STYLE; variant = NORMAL_VARIANT; - if (span->postscript_alias->svg_font_weight - && strcmp(span->postscript_alias->svg_font_weight, "bold") == 0) + if (pA->svg_font_weight + && strcmp(pA->svg_font_weight, "bold") == 0) weight = BOLD; else weight = NORMAL_WEIGHT; diff --git a/plugin/pango/gvtextlayout_pango.c b/plugin/pango/gvtextlayout_pango.c index 9227718d2..5940fbd45 100644 --- a/plugin/pango/gvtextlayout_pango.c +++ b/plugin/pango/gvtextlayout_pango.c @@ -84,6 +84,7 @@ static boolean pango_textlayout(textspan_t * span, char **fontpath) #endif char *text; double textlayout_scale; + PostscriptAlias *pA; if (!context) { fontmap = pango_cairo_font_map_new(); @@ -109,10 +110,11 @@ static boolean pango_textlayout(textspan_t * span, char **fontpath) fontsize = span->font->size; pango_font_description_free (desc); - if (span->postscript_alias) { - psfnt = fnt = gv_fmap[span->postscript_alias->xfig_code].gv_font; + pA = span->font->postscript_alias; + if (pA) { + psfnt = fnt = gv_fmap[pA->xfig_code].gv_font; if(!psfnt) - psfnt = fnt = pango_psfontResolve (span->postscript_alias); + psfnt = fnt = pango_psfontResolve (pA); } else fnt = fontname; -- 2.40.0