diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2018-05-07 13:38:45 +0200 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2018-05-16 12:48:07 +0200 |
commit | da46868e717a246b726d2baeece734d6e28e528c (patch) | |
tree | b4d0316e6259aec68d0c02eab1ce1697e5fd4762 /source | |
parent | 4f4cae9812ea4e1f4d78ea8b90a46d8f20519883 (diff) | |
download | mupdf-da46868e717a246b726d2baeece734d6e28e528c.tar.xz |
Restore Emoji font.
The Noto symbol font has been split into two. The second symbol font only
contains a subset of the emojis, so reinstate the real emoji font and add
both symbol fonts to the fallback chain.
Diffstat (limited to 'source')
-rw-r--r-- | source/fitz/font.c | 40 | ||||
-rw-r--r-- | source/fitz/noto.c | 16 |
2 files changed, 44 insertions, 12 deletions
diff --git a/source/fitz/font.c b/source/fitz/font.c index 2e5630bd..f4098c9f 100644 --- a/source/fitz/font.c +++ b/source/fitz/font.c @@ -230,7 +230,7 @@ struct fz_font_context_s /* Cached fallback fonts */ struct { fz_font *serif, *sans; } fallback[256]; - fz_font *symbol; + fz_font *symbol1, *symbol2; fz_font *emoji; }; @@ -307,7 +307,8 @@ void fz_drop_font_context(fz_context *ctx) fz_drop_font(ctx, ctx->font->fallback[i].serif); fz_drop_font(ctx, ctx->font->fallback[i].sans); } - fz_drop_font(ctx, ctx->font->symbol); + fz_drop_font(ctx, ctx->font->symbol1); + fz_drop_font(ctx, ctx->font->symbol2); fz_drop_font(ctx, ctx->font->emoji); fz_free(ctx, ctx->font); ctx->font = NULL; @@ -418,20 +419,33 @@ fz_font *fz_load_fallback_font(fz_context *ctx, int script, int language, int se return *fontp; } -fz_font *fz_load_fallback_symbol_font(fz_context *ctx) +static fz_font *fz_load_fallback_symbol1_font(fz_context *ctx) { const unsigned char *data; int size; - if (!ctx->font->symbol) + if (!ctx->font->symbol1) { - data = fz_lookup_noto_symbol_font(ctx, &size); + data = fz_lookup_noto_symbol1_font(ctx, &size); if (data) - ctx->font->symbol = fz_new_font_from_memory(ctx, NULL, data, size, 0, 0); + ctx->font->symbol1 = fz_new_font_from_memory(ctx, NULL, data, size, 0, 0); } - return ctx->font->symbol; + return ctx->font->symbol1; } -fz_font *fz_load_fallback_emoji_font(fz_context *ctx) +static fz_font *fz_load_fallback_symbol2_font(fz_context *ctx) +{ + const unsigned char *data; + int size; + if (!ctx->font->symbol2) + { + data = fz_lookup_noto_symbol2_font(ctx, &size); + if (data) + ctx->font->symbol2 = fz_new_font_from_memory(ctx, NULL, data, size, 0, 0); + } + return ctx->font->symbol2; +} + +static fz_font *fz_load_fallback_emoji_font(fz_context *ctx) { const unsigned char *data; int size; @@ -1679,7 +1693,15 @@ fz_encode_character_with_fallback(fz_context *ctx, fz_font *user_font, int unico } #endif - font = fz_load_fallback_symbol_font(ctx); + font = fz_load_fallback_symbol1_font(ctx); + if (font) + { + gid = fz_encode_character(ctx, font, unicode); + if (gid > 0) + return *out_font = font, gid; + } + + font = fz_load_fallback_symbol2_font(ctx); if (font) { gid = fz_encode_character(ctx, font, unicode); diff --git a/source/fitz/noto.c b/source/fitz/noto.c index 02a90839..140f3aa8 100644 --- a/source/fitz/noto.c +++ b/source/fitz/noto.c @@ -17,7 +17,7 @@ Define TOFU_CJK to skip DroidSansFallback (and the above). Define TOFU_NOTO to skip ALL non-CJK noto fonts. - Define TOFU_SYMBOL to skip symbol font. + Define TOFU_SYMBOL to skip symbol fonts. Define TOFU_EMOJI to skip emoji/extended symbol font. Define TOFU_SIL to skip the SIL fonts (warning: makes EPUB documents ugly). @@ -343,7 +343,7 @@ fz_lookup_noto_font(fz_context *ctx, int script, int language, int serif, int *s } const unsigned char * -fz_lookup_noto_symbol_font(fz_context *ctx, int *size) +fz_lookup_noto_symbol1_font(fz_context *ctx, int *size) { #ifndef TOFU_SYMBOL RETURN(noto_NotoSansSymbols_Regular_otf); @@ -353,10 +353,20 @@ fz_lookup_noto_symbol_font(fz_context *ctx, int *size) } const unsigned char * +fz_lookup_noto_symbol2_font(fz_context *ctx, int *size) +{ +#ifndef TOFU_SYMBOL + RETURN(noto_NotoSansSymbols2_Regular_otf); +#else + return *size = 0, NULL; +#endif +} + +const unsigned char * fz_lookup_noto_emoji_font(fz_context *ctx, int *size) { #ifndef TOFU_EMOJI - RETURN(noto_NotoSansSymbols2_Regular_otf); + RETURN(noto_NotoEmoji_Regular_ttf); #else return *size = 0, NULL; #endif |