diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2020-09-22 01:13:44 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2020-09-22 01:13:44 +0000 |
commit | 80096425836c7c322a5ffb3dd7e96e2247d062d0 (patch) | |
tree | 8ae4ac314bfc16df9612ea963ea89b2d43f77c75 /Build/source/texk/dvipdfm-x/pdfdev.c | |
parent | 8094b6f91848cffa0cc19c67ee75413307b2b264 (diff) |
Simplify font related code. Fix a bug in determinant calculation. (S. Hirata)
git-svn-id: svn://tug.org/texlive/trunk@56400 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dvipdfm-x/pdfdev.c')
-rw-r--r-- | Build/source/texk/dvipdfm-x/pdfdev.c | 71 |
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); |