summaryrefslogtreecommitdiff
path: root/source/fitz/font.c
diff options
context:
space:
mode:
authorSimon Bünzli <zeniko@gmail.com>2013-12-20 00:21:53 +0100
committerRobin Watts <robin.watts@artifex.com>2014-01-13 17:22:03 +0000
commit056a8de560419eedaf097703893c798284ebb0a2 (patch)
tree8313aee783ea9aaa55baa8eaac147ff061a5191e /source/fitz/font.c
parent51d9a5673e367f03677d9ec684ec0e79fe445dd1 (diff)
downloadmupdf-056a8de560419eedaf097703893c798284ebb0a2.tar.xz
Bug 694851: enhance fz_load_system_font
For SumatraPDF, the following changes are required: * fz_load_system_font is called from pdf_load_builtin_font as well so that Arial, Courier New, etc. can be loaded from the system instead of their Nimbus replacements. In order to distinguish between calls from pdf_load_builtin_font and pdf_load_substitute_font, an is_substitute argument is added. * fz_load_system_cjk_font is added and called from pdf_load_substitute_cjk_font so that a better replacement font can be loaded instead of DroidSansFallback. * Both fz_load_system_font and fz_load_system_cjk_font return fz_font* instead of fz_buffer* so that implementers aren't required to load fonts into memory (SumatraPDF uses fz_new_font_from_file for system fonts). In addition to that, fz_load_system_font_func is renamed to fz_load_system_font_funcs since it now accepts two functions, and the PDF_ROS_* constants are renamed to FZ_ADOBE_* (collection names aren't passed as const char* so that implementers know which collections to expect). For convenience, fz_load_*_font also never throws since currently all callers have further fallbacks available.
Diffstat (limited to 'source/fitz/font.c')
-rw-r--r--source/fitz/font.c41
1 files changed, 37 insertions, 4 deletions
diff --git a/source/fitz/font.c b/source/fitz/font.c
index b1ba1b02..6027164c 100644
--- a/source/fitz/font.c
+++ b/source/fitz/font.c
@@ -188,6 +188,7 @@ struct fz_font_context_s {
FT_Library ftlib;
int ftlib_refs;
fz_load_system_font_func load_font;
+ fz_load_system_cjk_font_func load_cjk_font;
};
#undef __FTERRORS_H__
@@ -233,16 +234,48 @@ void fz_drop_font_context(fz_context *ctx)
fz_free(ctx, ctx->font);
}
-void fz_install_load_system_font_func(fz_context *ctx, fz_load_system_font_func f)
+void fz_install_load_system_font_funcs(fz_context *ctx, fz_load_system_font_func f, fz_load_system_cjk_font_func f_cjk)
{
ctx->font->load_font = f;
+ ctx->font->load_cjk_font = f_cjk;
}
-fz_buffer *fz_load_system_font(fz_context *ctx, const char *name)
+fz_font *fz_load_system_font(fz_context *ctx, const char *name, int is_substitute)
{
+ fz_font *font = NULL;
+
if (ctx->font->load_font)
- return ctx->font->load_font(ctx, name);
- return NULL;
+ {
+ fz_try(ctx)
+ {
+ font = ctx->font->load_font(ctx, name, is_substitute);
+ }
+ fz_catch(ctx)
+ {
+ font = NULL;
+ }
+ }
+
+ return font;
+}
+
+fz_font *fz_load_system_cjk_font(fz_context *ctx, const char *name, int ros, int serif)
+{
+ fz_font *font = NULL;
+
+ if (ctx->font->load_cjk_font)
+ {
+ fz_try(ctx)
+ {
+ font = ctx->font->load_cjk_font(ctx, name, ros, serif);
+ }
+ fz_catch(ctx)
+ {
+ font = NULL;
+ }
+ }
+
+ return font;
}
static const struct ft_error ft_errors[] =