summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2018-05-07 13:38:45 +0200
committerTor Andersson <tor.andersson@artifex.com>2018-05-16 12:48:07 +0200
commitda46868e717a246b726d2baeece734d6e28e528c (patch)
treeb4d0316e6259aec68d0c02eab1ce1697e5fd4762
parent4f4cae9812ea4e1f4d78ea8b90a46d8f20519883 (diff)
downloadmupdf-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.
-rw-r--r--include/mupdf/fitz/font.h23
-rw-r--r--platform/win32/libresources.vcproj4
-rw-r--r--resources/fonts/noto/NotoEmoji-Regular.ttfbin0 -> 418804 bytes
-rw-r--r--scripts/fontdump.nmake3
-rw-r--r--source/fitz/font.c40
-rw-r--r--source/fitz/noto.c16
6 files changed, 54 insertions, 32 deletions
diff --git a/include/mupdf/fitz/font.h b/include/mupdf/fitz/font.h
index 43e61a01..85904b02 100644
--- a/include/mupdf/fitz/font.h
+++ b/include/mupdf/fitz/font.h
@@ -318,7 +318,7 @@ const unsigned char *fz_lookup_cjk_font(fz_context *ctx, int registry, int serif
const unsigned char *fz_lookup_noto_font(fz_context *ctx, int script, int lang, int serif, int *len, int *subfont);
/*
- fz_lookup_noto_symbol_font: Search the builtin noto fonts
+ fz_lookup_noto_symbol[12]_font: Search the builtin noto fonts
for a symbol font. Whether a font is present or not will
depend on the configuration in which MuPDF is built.
@@ -327,7 +327,8 @@ const unsigned char *fz_lookup_noto_font(fz_context *ctx, int script, int lang,
Returns a pointer to the font file data, or NULL if not present.
*/
-const unsigned char *fz_lookup_noto_symbol_font(fz_context *ctx, int *len);
+const unsigned char *fz_lookup_noto_symbol1_font(fz_context *ctx, int *len);
+const unsigned char *fz_lookup_noto_symbol2_font(fz_context *ctx, int *len);
/*
fz_lookup_noto_emoji_font: Search the builtin noto fonts
@@ -362,24 +363,6 @@ const unsigned char *fz_lookup_noto_emoji_font(fz_context *ctx, int *len);
fz_font *fz_load_fallback_font(fz_context *ctx, int script, int language, int serif, int bold, int italic);
/*
- fz_load_fallback_symbol_font: Try to load a fallback
- symbol font. Whether a font is present or not will
- depend on the configuration in which MuPDF is built.
-
- Returns a new font handle, or NULL if not available.
-*/
-fz_font *fz_load_fallback_symbol_font(fz_context *ctx);
-
-/*
- fz_load_fallback_emoji_font: Try to load a fallback
- emoji font. Whether a font is present or not will
- depend on the configuration in which MuPDF is built.
-
- Returns a new font handle, or NULL if not available.
-*/
-fz_font *fz_load_fallback_emoji_font(fz_context *ctx);
-
-/*
fz_new_type3_font: Create a new (empty) type3 font.
name: Name of font (or NULL).
diff --git a/platform/win32/libresources.vcproj b/platform/win32/libresources.vcproj
index a543f05b..bdaa820c 100644
--- a/platform/win32/libresources.vcproj
+++ b/platform/win32/libresources.vcproj
@@ -238,6 +238,10 @@
Name="noto"
>
<File
+ RelativePath="..\..\generated\resources\fonts\noto\NotoEmoji-Regular.ttf.c"
+ >
+ </File>
+ <File
RelativePath="..\..\generated\resources\fonts\noto\NotoKufiArabic-Regular.ttf.c"
>
</File>
diff --git a/resources/fonts/noto/NotoEmoji-Regular.ttf b/resources/fonts/noto/NotoEmoji-Regular.ttf
new file mode 100644
index 00000000..19b7badf
--- /dev/null
+++ b/resources/fonts/noto/NotoEmoji-Regular.ttf
Binary files differ
diff --git a/scripts/fontdump.nmake b/scripts/fontdump.nmake
index 13176fe0..ad18f8a0 100644
--- a/scripts/fontdump.nmake
+++ b/scripts/fontdump.nmake
@@ -63,6 +63,9 @@ generated\resources\fonts\droid\DroidSansFallback.ttf.c: resources\fonts\droid\D
generate: generated\resources\fonts\droid\DroidSansFallbackFull.ttf.c
generated\resources\fonts\droid\DroidSansFallbackFull.ttf.c: resources\fonts\droid\DroidSansFallbackFull.ttf generated\resources\fonts\droid hexdump.exe
hexdump.exe generated\resources\fonts\droid\DroidSansFallbackFull.ttf.c resources\fonts\droid\DroidSansFallbackFull.ttf
+generate: generated\resources\fonts\noto\NotoEmoji-Regular.ttf.c
+generated\resources\fonts\noto\NotoEmoji-Regular.ttf.c: resources\fonts\noto\NotoEmoji-Regular.ttf generated\resources\fonts\noto hexdump.exe
+ hexdump.exe generated\resources\fonts\noto\NotoEmoji-Regular.ttf.c resources\fonts\noto\NotoEmoji-Regular.ttf
generate: generated\resources\fonts\noto\NotoKufiArabic-Regular.ttf.c
generated\resources\fonts\noto\NotoKufiArabic-Regular.ttf.c: resources\fonts\noto\NotoKufiArabic-Regular.ttf generated\resources\fonts\noto hexdump.exe
hexdump.exe generated\resources\fonts\noto\NotoKufiArabic-Regular.ttf.c resources\fonts\noto\NotoKufiArabic-Regular.ttf
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