pdc_encodingvector * fnt_create_font_ev(pdc_core *pdc, fnt_font *font) { pdc_encodingvector *ev = NULL; char encname[PDC_GEN_BUFSIZE]; pdc->uniqueno++; pdc_sprintf(pdc, pdc_false, encname, "encoding_%s_%d", font->name, pdc->uniqueno); ev = pdc_new_encoding(pdc, encname); pdc_insert_encoding_vector(pdc, ev); font->enc = pdc_find_encoding(pdc, encname); ev->flags |= PDC_ENC_FONT; return ev; }
pdc_bool pdf_check_pfm_encoding(PDF *p, pdf_font *font, pdc_encoding enc) { const char *encname = pdc_errprintf(p->pdc, "%.*s", PDC_ERR_MAXSTRLEN, pdf_get_encoding_name(p, enc, font)); const char *intencname = NULL; pdc_encoding intenc = pdc_invalidenc; pdc_bool issymbfont = pdc_undef; pdc_logg_cond(p->pdc, 2, trc_font, "\tFont internal charset (dfCharSet): %d\n", font->ft.enc); /* Font encoding */ intencname = pdc_get_keyword(font->ft.enc, pdf_charset_keylist); if (intencname == NULL) { pdc_set_errmsg(p->pdc, PDF_E_T1_BADCHARSET, pdc_errprintf(p->pdc, "%d", font->ft.enc), 0, 0, 0); return pdc_false; } if (strlen(intencname)) { int codepage = 0; pdc_logg_cond(p->pdc, 2, trc_font, "\tFont internal encoding \"%s\" found\n", intencname); intenc = pdc_find_encoding(p->pdc, intencname); if (intenc == pdc_invalidenc) intenc = pdc_insert_encoding(p->pdc, intencname, &codepage, pdc_true); font->ft.issymbfont = pdc_false; } else { pdc_logg_cond(p->pdc, 2, trc_font, "\tSymbol font\n"); font->ft.issymbfont = pdc_true; intenc = pdc_builtin; /* auto */ if (!strcmp(font->encapiname, "auto")) { issymbfont = pdc_true; enc = pdc_builtin; } } /* builtin */ if (enc == pdc_builtin) issymbfont = pdc_true; /* unicode */ if (enc == pdc_unicode) { font->unibyte = pdc_true; issymbfont = pdc_false; enc = intenc; } /* encoding is subset of 8-bit encoding */ if (enc >= pdc_winansi && intenc >= pdc_winansi) { if (pdc_is_encoding_subset(p->pdc, pdc_get_encoding_vector(p->pdc, enc), pdc_get_encoding_vector(p->pdc, intenc))) { if (enc != pdc_winansi && intenc == pdc_winansi && strcmp(encname, "iso8859-1")) { font->towinansi = intenc; } else { enc = intenc; } issymbfont = pdc_false; } } /* illegal encoding */ if (issymbfont == pdc_undef || font->ft.issymbfont == pdc_undef) { pdc_set_errmsg(p->pdc, PDF_E_FONT_BADENC, 0, 0, 0, 0); return pdc_false; } font->ft.enc = enc; if (issymbfont && !font->ft.issymbfont) { pdc_warning(p->pdc, PDF_E_FONT_FORCEENC, pdf_get_encoding_name(p, intenc, NULL), 0, 0, 0); font->ft.enc = intenc; } if (!issymbfont && font->ft.issymbfont) { pdc_warning(p->pdc, PDF_E_FONT_FORCEENC, pdf_get_encoding_name(p, pdc_builtin, NULL), 0, 0, 0); font->ft.enc = pdc_builtin; font->towinansi = pdc_invalidenc; } if (font->towinansi != pdc_invalidenc) pdf_transform_fontwidths(p, font, pdc_get_encoding_vector(p->pdc, font->ft.enc), pdc_get_encoding_vector(p->pdc, font->towinansi)); return pdc_true; }