summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipdfm-x/pdfdev.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvipdfm-x/pdfdev.c')
-rw-r--r--Build/source/texk/dvipdfm-x/pdfdev.c71
1 files changed, 23 insertions, 48 deletions
diff --git a/Build/source/texk/dvipdfm-x/pdfdev.c b/Build/source/texk/dvipdfm-x/pdfdev.c
index b3bec533cba..dc56050c3ee 100644
--- a/Build/source/texk/dvipdfm-x/pdfdev.c
+++ b/Build/source/texk/dvipdfm-x/pdfdev.c
@@ -176,7 +176,7 @@ struct dev_font {
/* Needs to be big enough to hold name "Fxxx"
* where xxx is number of largest font
*/
- char short_name[7]; /* Resource name */
+ char short_name[16]; /* Resource name */
int used_on_this_page;
char *tex_name; /* String identifier of this font */
@@ -196,9 +196,6 @@ struct dev_font {
int font_id;
int enc_id;
- /* if >= 0, index of a dev_font that really has the resource and used_chars */
- int real_font_index;
-
pdf_obj *resource;
char *used_chars;
@@ -255,7 +252,6 @@ struct pdf_dev {
struct dev_font *fonts;
int num_dev_fonts;
int max_dev_fonts;
- int num_phys_fonts;
char format_buffer[FORMAT_BUF_SIZE+1];
};
@@ -856,7 +852,6 @@ static int
pdf_dev_set_font (pdf_dev *p, int font_id)
{
struct dev_font *font;
- struct dev_font *real_font;
int text_rotate;
double font_scale;
int len;
@@ -870,11 +865,6 @@ pdf_dev_set_font (pdf_dev *p, int font_id)
font = GET_FONT(p, font_id);
ASSERT(font); /* Caller should check font_id. */
- if (font->real_font_index >= 0)
- real_font = GET_FONT(p, font->real_font_index);
- else
- real_font = font;
-
p->text_state.is_mb = (font->format == PDF_FONTTYPE_COMPOSITE) ? 1 : 0;
vert_font = font->wmode ? 1 : 0;
@@ -894,20 +884,20 @@ pdf_dev_set_font (pdf_dev *p, int font_id)
p->text_state.matrix.extend = font->extend;
p->text_state.matrix.rotate = text_rotate;
- if (!real_font->resource) {
- real_font->resource = pdf_get_font_reference(real_font->font_id);
- real_font->used_chars = pdf_get_font_usedchars(real_font->font_id);
+ if (!font->resource) {
+ font->resource = pdf_get_font_reference(font->font_id);
+ font->used_chars = pdf_get_font_usedchars(font->font_id);
}
- if (!real_font->used_on_this_page) {
+ if (!font->used_on_this_page) {
pdf_doc_add_page_resource("Font",
- real_font->short_name,
- pdf_link_obj(real_font->resource));
- real_font->used_on_this_page = 1;
+ font->short_name,
+ pdf_link_obj(font->resource));
+ font->used_on_this_page = 1;
}
font_scale = (double) font->sptsize * p->unit.dvi2pts;
- len = sprintf(p->format_buffer, " /%s", real_font->short_name); /* space not necessary. */
+ len = sprintf(p->format_buffer, " /%s", font->short_name); /* space not necessary. */
p->format_buffer[len++] = ' ';
len += p_dtoa(font_scale, MIN(p->unit.precision+1, DEV_PRECISION_MAX),
p->format_buffer+len);
@@ -1057,7 +1047,6 @@ pdf_dev_set_string (spt_t xpos, spt_t ypos,
{
pdf_dev *p = current_device();
struct dev_font *font;
- struct dev_font *real_font;
const unsigned char *str_ptr; /* Pointer to the reencoded string. */
int length, i, len = 0;
spt_t kern, delh, delv;
@@ -1078,11 +1067,6 @@ pdf_dev_set_string (spt_t xpos, spt_t ypos,
return;
}
- if (font->real_font_index >= 0)
- real_font = GET_FONT(p, font->real_font_index);
- else
- real_font = font;
-
text_xorigin = p->text_state.ref_x;
text_yorigin = p->text_state.ref_y;
@@ -1094,16 +1078,16 @@ pdf_dev_set_string (spt_t xpos, spt_t ypos,
ERROR("Error in converting input string...");
return;
}
- if (real_font->used_chars != NULL) {
+ if (font->used_chars != NULL) {
for (i = 0; i < length; i += 2) {
unsigned short cid = (str_ptr[i] << 8) | str_ptr[i + 1];
- add_to_used_chars2(real_font->used_chars, cid);
+ add_to_used_chars2(font->used_chars, cid);
}
}
} else {
- if (real_font->used_chars != NULL) {
+ if (font->used_chars != NULL) {
for (i = 0; i < length; i++)
- real_font->used_chars[str_ptr[i]] = 1;
+ font->used_chars[str_ptr[i]] = 1;
}
}
@@ -1408,11 +1392,9 @@ pdf_dev_locate_font (const char *font_name, spt_t ptsize)
}
for (i = 0; i < p->num_dev_fonts; i++) {
- if (strcmp(font_name, p->fonts[i].tex_name) == 0) {
- if (ptsize == p->fonts[i].sptsize)
- return i; /* found a dev_font that matches the request */
- if (p->fonts[i].format != PDF_FONTTYPE_BITMAP)
- break; /* new dev_font will share pdf resource with /i/ */
+ if (!strcmp(font_name, p->fonts[i].tex_name) &&
+ ptsize == p->fonts[i].sptsize) {
+ return i; /* found a dev_font that matches the request */
}
}
@@ -1433,22 +1415,15 @@ pdf_dev_locate_font (const char *font_name, spt_t ptsize)
if (dpx_conf.verbose_level > 1)
print_fontmap(font_name, mrec);
- font->font_id = pdf_font_findresource(font_name, ptsize * p->unit.dvi2pts, mrec);
- if (font->font_id < 0)
- return -1;
-
- /* We found device font here. */
- if (i < p->num_dev_fonts) {
- font->real_font_index = i;
- strcpy(font->short_name, p->fonts[i].short_name);
- }
- else {
- font->real_font_index = -1;
- font->short_name[0] = 'F';
- p_itoa(p->num_phys_fonts + 1, &font->short_name[1]); /* NULL terminated here */
- p->num_phys_fonts++;
+ font->font_id = pdf_font_findresource(font_name, ptsize * p->unit.dvi2pts);
+ if (font->font_id < 0) {
+ font->font_id = pdf_font_load_font(font_name, ptsize * p->unit.dvi2pts, mrec);
+ if (font->font_id < 0)
+ return -1;
}
+ pdf_font_resource_name(font->font_id, font->short_name);
+
font->used_on_this_page = 0;
font->tex_name = NEW(strlen(font_name) + 1, char);