summaryrefslogtreecommitdiff
path: root/fitz/dev_text.c
diff options
context:
space:
mode:
Diffstat (limited to 'fitz/dev_text.c')
-rw-r--r--fitz/dev_text.c108
1 files changed, 54 insertions, 54 deletions
diff --git a/fitz/dev_text.c b/fitz/dev_text.c
index fb75c944..bf304778 100644
--- a/fitz/dev_text.c
+++ b/fitz/dev_text.c
@@ -17,10 +17,10 @@ struct fz_text_device_s
};
fz_text_span *
-fz_new_text_span(void)
+fz_new_text_span(fz_context *ctx)
{
fz_text_span *span;
- span = fz_malloc(sizeof(fz_text_span));
+ span = fz_malloc(ctx, sizeof(fz_text_span));
span->font = NULL;
span->wmode = 0;
span->size = 0;
@@ -33,28 +33,28 @@ fz_new_text_span(void)
}
void
-fz_free_text_span(fz_text_span *span)
+fz_free_text_span(fz_context *ctx, fz_text_span *span)
{
fz_text_span *next;
while (span)
{
if (span->font)
- fz_drop_font(span->font);
+ fz_drop_font(ctx, span->font);
next = span->next;
- fz_free(span->text);
- fz_free(span);
+ fz_free(ctx, span->text);
+ fz_free(ctx, span);
span = next;
}
}
static void
-fz_add_text_char_imp(fz_text_span *span, int c, fz_bbox bbox)
+fz_add_text_char_imp(fz_context *ctx, fz_text_span *span, int c, fz_bbox bbox)
{
if (span->len + 1 >= span->cap)
{
span->cap = span->cap > 1 ? (span->cap * 3) / 2 : 80;
- span->text = fz_realloc(span->text, span->cap, sizeof(fz_text_char));
+ span->text = fz_resize_array(ctx, span->text, span->cap, sizeof(fz_text_char));
}
span->text[span->len].c = c;
span->text[span->len].bbox = bbox;
@@ -72,7 +72,7 @@ fz_split_bbox(fz_bbox bbox, int i, int n)
}
static void
-fz_add_text_char(fz_text_span **last, fz_font *font, float size, int wmode, int c, fz_bbox bbox)
+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;
@@ -84,7 +84,7 @@ fz_add_text_char(fz_text_span **last, fz_font *font, float size, int wmode, int
if ((span->font != font || span->size != size || span->wmode != wmode) && c != 32)
{
- span = fz_new_text_span();
+ span = fz_new_text_span(ctx);
span->font = fz_keep_font(font);
span->size = size;
span->wmode = wmode;
@@ -97,34 +97,34 @@ fz_add_text_char(fz_text_span **last, fz_font *font, float size, int wmode, int
case -1: /* ignore when one unicode character maps to multiple glyphs */
break;
case 0xFB00: /* ff */
- fz_add_text_char_imp(span, 'f', fz_split_bbox(bbox, 0, 2));
- fz_add_text_char_imp(span, 'f', fz_split_bbox(bbox, 1, 2));
+ 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(span, 'f', fz_split_bbox(bbox, 0, 2));
- fz_add_text_char_imp(span, 'i', fz_split_bbox(bbox, 1, 2));
+ 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(span, 'f', fz_split_bbox(bbox, 0, 2));
- fz_add_text_char_imp(span, 'l', fz_split_bbox(bbox, 1, 2));
+ 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(span, 'f', fz_split_bbox(bbox, 0, 3));
- fz_add_text_char_imp(span, 'f', fz_split_bbox(bbox, 1, 3));
- fz_add_text_char_imp(span, 'i', fz_split_bbox(bbox, 2, 3));
+ 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(span, 'f', fz_split_bbox(bbox, 0, 3));
- fz_add_text_char_imp(span, 'f', fz_split_bbox(bbox, 1, 3));
- fz_add_text_char_imp(span, 'l', fz_split_bbox(bbox, 2, 3));
+ 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(span, 's', fz_split_bbox(bbox, 0, 2));
- fz_add_text_char_imp(span, 't', fz_split_bbox(bbox, 1, 2));
+ 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(span, c, bbox);
+ fz_add_text_char_imp(ctx, span, c, bbox);
break;
}
}
@@ -141,10 +141,10 @@ fz_divide_text_chars(fz_text_span **last, int n, fz_bbox bbox)
}
static void
-fz_add_text_newline(fz_text_span **last, fz_font *font, float size, int wmode)
+fz_add_text_newline(fz_context *ctx, fz_text_span **last, fz_font *font, float size, int wmode)
{
fz_text_span *span;
- span = fz_new_text_span();
+ span = fz_new_text_span(ctx);
span->font = fz_keep_font(font);
span->size = size;
span->wmode = wmode;
@@ -218,7 +218,7 @@ fz_debug_text_span(fz_text_span *span)
}
static void
-fz_text_extract_span(fz_text_span **last, fz_text *text, fz_matrix ctm, fz_point *pen)
+fz_text_extract_span(fz_context *ctx, fz_text_span **last, fz_text *text, fz_matrix ctm, fz_point *pen)
{
fz_font *font = text->font;
FT_Face face = font->ft_face;
@@ -242,7 +242,7 @@ fz_text_extract_span(fz_text_span **last, fz_text *text, fz_matrix ctm, fz_point
{
err = FT_Set_Char_Size(font->ft_face, 64, 64, 72, 72);
if (err)
- fz_warn("freetype set character size: %s", ft_error_string(err));
+ fz_warn(ctx, "freetype set character size: %s", ft_error_string(err));
ascender = (float)face->ascender / face->units_per_EM;
descender = (float)face->descender / face->units_per_EM;
}
@@ -276,7 +276,7 @@ fz_text_extract_span(fz_text_span **last, fz_text *text, fz_matrix ctm, fz_point
{
if (text->items[i].gid < 0)
{
- fz_add_text_char(last, font, size, text->wmode, text->items[i].ucs, fz_round_rect(rect));
+ fz_add_text_char(ctx, last, font, size, text->wmode, text->items[i].ucs, fz_round_rect(rect));
multi ++;
fz_divide_text_chars(last, multi, fz_round_rect(rect));
continue;
@@ -304,7 +304,7 @@ fz_text_extract_span(fz_text_span **last, fz_text *text, fz_matrix ctm, fz_point
if (dist > size * LINE_DIST)
{
- fz_add_text_newline(last, font, size, text->wmode);
+ fz_add_text_newline(ctx, last, font, size, text->wmode);
}
else if (fabsf(dot) > 0.95f && dist > size * SPACE_DIST)
{
@@ -316,7 +316,7 @@ fz_text_extract_span(fz_text_span **last, fz_text *text, fz_matrix ctm, fz_point
spacerect.x1 = 0;
spacerect.y1 = 1;
spacerect = fz_transform_rect(trm, spacerect);
- fz_add_text_char(last, font, size, text->wmode, ' ', fz_round_rect(spacerect));
+ fz_add_text_char(ctx, last, font, size, text->wmode, ' ', fz_round_rect(spacerect));
}
}
}
@@ -351,71 +351,71 @@ fz_text_extract_span(fz_text_span **last, fz_text *text, fz_matrix ctm, fz_point
pen->x = trm.e + dir.x * adv;
pen->y = trm.f + dir.y * adv;
- fz_add_text_char(last, font, size, text->wmode, text->items[i].ucs, fz_round_rect(rect));
+ fz_add_text_char(ctx, last, font, size, text->wmode, text->items[i].ucs, fz_round_rect(rect));
}
}
static void
-fz_text_fill_text(void *user, fz_text *text, fz_matrix ctm,
+fz_text_fill_text(fz_device *dev, fz_text *text, fz_matrix ctm,
fz_colorspace *colorspace, float *color, float alpha)
{
- fz_text_device *tdev = user;
- fz_text_extract_span(&tdev->span, text, ctm, &tdev->point);
+ fz_text_device *tdev = dev->user;
+ fz_text_extract_span(dev->ctx, &tdev->span, text, ctm, &tdev->point);
}
static void
-fz_text_stroke_text(void *user, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm,
+fz_text_stroke_text(fz_device *dev, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm,
fz_colorspace *colorspace, float *color, float alpha)
{
- fz_text_device *tdev = user;
- fz_text_extract_span(&tdev->span, text, ctm, &tdev->point);
+ fz_text_device *tdev = dev->user;
+ fz_text_extract_span(dev->ctx, &tdev->span, text, ctm, &tdev->point);
}
static void
-fz_text_clip_text(void *user, fz_text *text, fz_matrix ctm, int accumulate)
+fz_text_clip_text(fz_device *dev, fz_text *text, fz_matrix ctm, int accumulate)
{
- fz_text_device *tdev = user;
- fz_text_extract_span(&tdev->span, text, ctm, &tdev->point);
+ fz_text_device *tdev = dev->user;
+ fz_text_extract_span(dev->ctx, &tdev->span, text, ctm, &tdev->point);
}
static void
-fz_text_clip_stroke_text(void *user, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm)
+fz_text_clip_stroke_text(fz_device *dev, fz_text *text, fz_stroke_state *stroke, fz_matrix ctm)
{
- fz_text_device *tdev = user;
- fz_text_extract_span(&tdev->span, text, ctm, &tdev->point);
+ fz_text_device *tdev = dev->user;
+ fz_text_extract_span(dev->ctx, &tdev->span, text, ctm, &tdev->point);
}
static void
-fz_text_ignore_text(void *user, fz_text *text, fz_matrix ctm)
+fz_text_ignore_text(fz_device *dev, fz_text *text, fz_matrix ctm)
{
- fz_text_device *tdev = user;
- fz_text_extract_span(&tdev->span, text, ctm, &tdev->point);
+ fz_text_device *tdev = dev->user;
+ fz_text_extract_span(dev->ctx, &tdev->span, text, ctm, &tdev->point);
}
static void
-fz_text_free_user(void *user)
+fz_text_free_user(fz_device *dev)
{
- fz_text_device *tdev = user;
+ fz_text_device *tdev = dev->user;
tdev->span->eol = 1;
/* TODO: unicode NFC normalization */
/* TODO: bidi logical reordering */
- fz_free(tdev);
+ fz_free(dev->ctx, tdev);
}
fz_device *
-fz_new_text_device(fz_text_span *root)
+fz_new_text_device(fz_context *ctx, fz_text_span *root)
{
fz_device *dev;
- fz_text_device *tdev = fz_malloc(sizeof(fz_text_device));
+ fz_text_device *tdev = fz_malloc(ctx, sizeof(fz_text_device));
tdev->head = root;
tdev->span = root;
tdev->point.x = -1;
tdev->point.y = -1;
- dev = fz_new_device(tdev);
+ dev = fz_new_device(ctx, tdev);
dev->hints = FZ_IGNORE_IMAGE | FZ_IGNORE_SHADE;
dev->free_user = fz_text_free_user;
dev->fill_text = fz_text_fill_text;