static void fz_add_text_char(fz_context *ctx, fz_text_span **last, fz_font *font, float size, int wmode, int c, fz_bbox bbox) { fz_text_span *span = *last; if (!span->font) { span->font = fz_keep_font(ctx, font); span->size = size; } if ((span->font != font || span->size != size || span->wmode != wmode) && c != 32) { span = fz_new_text_span(ctx); span->font = fz_keep_font(ctx, font); span->size = size; span->wmode = wmode; (*last)->next = span; *last = span; } switch (c) { case -1: /* ignore when one unicode character maps to multiple glyphs */ break; case 0xFB00: /* ff */ fz_add_text_char_imp(ctx, span, 'f', fz_split_bbox(bbox, 0, 2)); fz_add_text_char_imp(ctx, span, 'f', fz_split_bbox(bbox, 1, 2)); break; case 0xFB01: /* fi */ fz_add_text_char_imp(ctx, span, 'f', fz_split_bbox(bbox, 0, 2)); fz_add_text_char_imp(ctx, span, 'i', fz_split_bbox(bbox, 1, 2)); break; case 0xFB02: /* fl */ fz_add_text_char_imp(ctx, span, 'f', fz_split_bbox(bbox, 0, 2)); fz_add_text_char_imp(ctx, span, 'l', fz_split_bbox(bbox, 1, 2)); break; case 0xFB03: /* ffi */ fz_add_text_char_imp(ctx, span, 'f', fz_split_bbox(bbox, 0, 3)); fz_add_text_char_imp(ctx, span, 'f', fz_split_bbox(bbox, 1, 3)); fz_add_text_char_imp(ctx, span, 'i', fz_split_bbox(bbox, 2, 3)); break; case 0xFB04: /* ffl */ fz_add_text_char_imp(ctx, span, 'f', fz_split_bbox(bbox, 0, 3)); fz_add_text_char_imp(ctx, span, 'f', fz_split_bbox(bbox, 1, 3)); fz_add_text_char_imp(ctx, span, 'l', fz_split_bbox(bbox, 2, 3)); break; case 0xFB05: /* long st */ case 0xFB06: /* st */ fz_add_text_char_imp(ctx, span, 's', fz_split_bbox(bbox, 0, 2)); fz_add_text_char_imp(ctx, span, 't', fz_split_bbox(bbox, 1, 2)); break; default: fz_add_text_char_imp(ctx, span, c, bbox); break; } }
static void fz_add_text_char(fz_context *ctx, fz_text_device *dev, fz_text_style *style, int c, fz_matrix *trm, float adv, int wmode) { switch (c) { case -1: /* ignore when one unicode character maps to multiple glyphs */ break; case 0xFB00: /* ff */ fz_add_text_char_imp(ctx, dev, style, 'f', trm, adv/2, wmode); fz_add_text_char_imp(ctx, dev, style, 'f', trm, adv/2, wmode); break; case 0xFB01: /* fi */ fz_add_text_char_imp(ctx, dev, style, 'f', trm, adv/2, wmode); fz_add_text_char_imp(ctx, dev, style, 'i', trm, adv/2, wmode); break; case 0xFB02: /* fl */ fz_add_text_char_imp(ctx, dev, style, 'f', trm, adv/2, wmode); fz_add_text_char_imp(ctx, dev, style, 'l', trm, adv/2, wmode); break; case 0xFB03: /* ffi */ fz_add_text_char_imp(ctx, dev, style, 'f', trm, adv/3, wmode); fz_add_text_char_imp(ctx, dev, style, 'f', trm, adv/3, wmode); fz_add_text_char_imp(ctx, dev, style, 'i', trm, adv/3, wmode); break; case 0xFB04: /* ffl */ fz_add_text_char_imp(ctx, dev, style, 'f', trm, adv/3, wmode); fz_add_text_char_imp(ctx, dev, style, 'f', trm, adv/3, wmode); fz_add_text_char_imp(ctx, dev, style, 'l', trm, adv/3, wmode); break; case 0xFB05: /* long st */ case 0xFB06: /* st */ fz_add_text_char_imp(ctx, dev, style, 's', trm, adv/2, wmode); fz_add_text_char_imp(ctx, dev, style, 't', trm, adv/2, wmode); break; default: fz_add_text_char_imp(ctx, dev, style, c, trm, adv, wmode); break; } }
static void fz_add_text_char(fz_context *ctx, fz_text_device *dev, fz_text_style *style, int c, fz_rect bbox) { switch (c) { case -1: /* ignore when one unicode character maps to multiple glyphs */ break; case 0xFB00: /* ff */ fz_add_text_char_imp(ctx, dev, style, 'f', fz_split_bbox(bbox, 0, 2)); fz_add_text_char_imp(ctx, dev, style, 'f', fz_split_bbox(bbox, 1, 2)); break; case 0xFB01: /* fi */ fz_add_text_char_imp(ctx, dev, style, 'f', fz_split_bbox(bbox, 0, 2)); fz_add_text_char_imp(ctx, dev, style, 'i', fz_split_bbox(bbox, 1, 2)); break; case 0xFB02: /* fl */ fz_add_text_char_imp(ctx, dev, style, 'f', fz_split_bbox(bbox, 0, 2)); fz_add_text_char_imp(ctx, dev, style, 'l', fz_split_bbox(bbox, 1, 2)); break; case 0xFB03: /* ffi */ fz_add_text_char_imp(ctx, dev, style, 'f', fz_split_bbox(bbox, 0, 3)); fz_add_text_char_imp(ctx, dev, style, 'f', fz_split_bbox(bbox, 1, 3)); fz_add_text_char_imp(ctx, dev, style, 'i', fz_split_bbox(bbox, 2, 3)); break; case 0xFB04: /* ffl */ fz_add_text_char_imp(ctx, dev, style, 'f', fz_split_bbox(bbox, 0, 3)); fz_add_text_char_imp(ctx, dev, style, 'f', fz_split_bbox(bbox, 1, 3)); fz_add_text_char_imp(ctx, dev, style, 'l', fz_split_bbox(bbox, 2, 3)); break; case 0xFB05: /* long st */ case 0xFB06: /* st */ fz_add_text_char_imp(ctx, dev, style, 's', fz_split_bbox(bbox, 0, 2)); fz_add_text_char_imp(ctx, dev, style, 't', fz_split_bbox(bbox, 1, 2)); break; default: fz_add_text_char_imp(ctx, dev, style, c, bbox); break; } }