summaryrefslogtreecommitdiff
path: root/source/fitz
diff options
context:
space:
mode:
Diffstat (limited to 'source/fitz')
-rw-r--r--source/fitz/font.c19
-rw-r--r--source/fitz/noto.c39
2 files changed, 35 insertions, 23 deletions
diff --git a/source/fitz/font.c b/source/fitz/font.c
index f9609aec..733d91da 100644
--- a/source/fitz/font.c
+++ b/source/fitz/font.c
@@ -230,7 +230,7 @@ struct fz_font_context_s
/* Cached fallback fonts */
fz_font *base14[14];
- fz_font *cjk[8];
+ fz_font *cjk[4];
struct { fz_font *serif, *sans; } fallback[256];
fz_font *symbol1, *symbol2;
fz_font *emoji;
@@ -416,7 +416,7 @@ fz_font *fz_load_fallback_font(fz_context *ctx, int script, int language, int se
*fontp = fz_load_system_fallback_font(ctx, script, language, serif, bold, italic);
if (!*fontp)
{
- data = fz_lookup_noto_font(ctx, script, language, serif, &size, &subfont);
+ data = fz_lookup_noto_font(ctx, script, language, &size, &subfont);
if (data)
*fontp = fz_new_font_from_memory(ctx, NULL, data, size, subfont, 0);
}
@@ -697,20 +697,19 @@ fz_new_base14_font(fz_context *ctx, const char *name)
}
fz_font *
-fz_new_cjk_font(fz_context *ctx, int ordering, int serif)
+fz_new_cjk_font(fz_context *ctx, int ordering)
{
const unsigned char *data;
int size, index;
- int x = (ordering * 2) + !!serif;
- if (x >= 0 && x < nelem(ctx->font->cjk))
+ if (ordering >= 0 && ordering < nelem(ctx->font->cjk))
{
- if (ctx->font->cjk[x])
- return fz_keep_font(ctx, ctx->font->cjk[x]);
- data = fz_lookup_cjk_font(ctx, ordering, serif, &size, &index);
+ if (ctx->font->cjk[ordering])
+ return fz_keep_font(ctx, ctx->font->cjk[ordering]);
+ data = fz_lookup_cjk_font(ctx, ordering, &size, &index);
if (data)
{
- ctx->font->cjk[x] = fz_new_font_from_memory(ctx, NULL, data, size, index, 0);
- return fz_keep_font(ctx, ctx->font->cjk[x]);
+ ctx->font->cjk[ordering] = fz_new_font_from_memory(ctx, NULL, data, size, index, 0);
+ return fz_keep_font(ctx, ctx->font->cjk[ordering]);
}
}
fz_throw(ctx, FZ_ERROR_GENERIC, "cannot find builtin CJK font");
diff --git a/source/fitz/noto.c b/source/fitz/noto.c
index 8301929f..c3eea9d6 100644
--- a/source/fitz/noto.c
+++ b/source/fitz/noto.c
@@ -139,18 +139,18 @@ fz_lookup_builtin_font(fz_context *ctx, const char *name, int is_bold, int is_it
}
const unsigned char *
-fz_lookup_cjk_font(fz_context *ctx, int ordering, int serif, int *size, int *subfont)
+fz_lookup_cjk_font(fz_context *ctx, int ordering, int *size, int *subfont)
{
*subfont = 0;
#ifndef TOFU_CJK
#ifndef TOFU_CJK_EXT
#ifndef TOFU_CJK_LANG
switch (ordering) {
- case FZ_ADOBE_JAPAN_1: *subfont=0; RETURN(han, SourceHanSerif_Regular_ttc);
- case FZ_ADOBE_KOREA_1: *subfont=1; RETURN(han, SourceHanSerif_Regular_ttc);
- case FZ_ADOBE_GB_1: *subfont=2; RETURN(han, SourceHanSerif_Regular_ttc);
+ case FZ_ADOBE_JAPAN: *subfont=0; RETURN(han, SourceHanSerif_Regular_ttc);
+ case FZ_ADOBE_KOREA: *subfont=1; RETURN(han, SourceHanSerif_Regular_ttc);
+ case FZ_ADOBE_GB: *subfont=2; RETURN(han, SourceHanSerif_Regular_ttc);
default:
- case FZ_ADOBE_CNS_1: *subfont=3; RETURN(han, SourceHanSerif_Regular_ttc);
+ case FZ_ADOBE_CNS: *subfont=3; RETURN(han, SourceHanSerif_Regular_ttc);
}
#else
RETURN(droid, DroidSansFallbackFull_ttf);
@@ -163,8 +163,21 @@ fz_lookup_cjk_font(fz_context *ctx, int ordering, int serif, int *size, int *sub
#endif
}
+int
+fz_lookup_cjk_ordering_by_language(const char *name)
+{
+ if (!strcmp(name, "zh-Hant")) return FZ_ADOBE_CNS;
+ if (!strcmp(name, "zh-TW")) return FZ_ADOBE_CNS;
+ if (!strcmp(name, "zh-HK")) return FZ_ADOBE_CNS;
+ if (!strcmp(name, "zh-Hans")) return FZ_ADOBE_GB;
+ if (!strcmp(name, "zh-CN")) return FZ_ADOBE_GB;
+ if (!strcmp(name, "ja")) return FZ_ADOBE_JAPAN;
+ if (!strcmp(name, "ko")) return FZ_ADOBE_KOREA;
+ return -1;
+}
+
const unsigned char *
-fz_lookup_noto_font(fz_context *ctx, int script, int language, int serif, int *size, int *subfont)
+fz_lookup_noto_font(fz_context *ctx, int script, int language, int *size, int *subfont)
{
/* TODO: Noto(SansSyriacEstrangela); */
/* TODO: Noto(SansSyriacWestern); */
@@ -180,20 +193,20 @@ fz_lookup_noto_font(fz_context *ctx, int script, int language, int serif, int *s
break;
case UCDN_SCRIPT_HANGUL:
- return fz_lookup_cjk_font(ctx, FZ_ADOBE_KOREA_1, serif, size, subfont);
+ return fz_lookup_cjk_font(ctx, FZ_ADOBE_KOREA, size, subfont);
case UCDN_SCRIPT_HIRAGANA:
case UCDN_SCRIPT_KATAKANA:
- return fz_lookup_cjk_font(ctx, FZ_ADOBE_JAPAN_1, serif, size, subfont);
+ return fz_lookup_cjk_font(ctx, FZ_ADOBE_JAPAN, size, subfont);
case UCDN_SCRIPT_BOPOMOFO:
- return fz_lookup_cjk_font(ctx, FZ_ADOBE_CNS_1, serif, size, subfont);
+ return fz_lookup_cjk_font(ctx, FZ_ADOBE_CNS, size, subfont);
case UCDN_SCRIPT_HAN:
switch (language)
{
- case FZ_LANG_ja: return fz_lookup_cjk_font(ctx, FZ_ADOBE_JAPAN_1, serif, size, subfont);
- case FZ_LANG_ko: return fz_lookup_cjk_font(ctx, FZ_ADOBE_KOREA_1, serif, size, subfont);
- case FZ_LANG_zh_Hans: return fz_lookup_cjk_font(ctx, FZ_ADOBE_GB_1, serif, size, subfont);
+ case FZ_LANG_ja: return fz_lookup_cjk_font(ctx, FZ_ADOBE_JAPAN, size, subfont);
+ case FZ_LANG_ko: return fz_lookup_cjk_font(ctx, FZ_ADOBE_KOREA, size, subfont);
+ case FZ_LANG_zh_Hans: return fz_lookup_cjk_font(ctx, FZ_ADOBE_GB, size, subfont);
default:
- case FZ_LANG_zh_Hant: return fz_lookup_cjk_font(ctx, FZ_ADOBE_CNS_1, serif, size, subfont);
+ case FZ_LANG_zh_Hant: return fz_lookup_cjk_font(ctx, FZ_ADOBE_CNS, size, subfont);
}
case UCDN_SCRIPT_BRAILLE: break; /* no dedicated font; fallback to NotoSansSymbols will cover this */