summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-fontfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/pdf/pdf-fontfile.c')
-rw-r--r--source/pdf/pdf-fontfile.c153
1 files changed, 153 insertions, 0 deletions
diff --git a/source/pdf/pdf-fontfile.c b/source/pdf/pdf-fontfile.c
new file mode 100644
index 00000000..c9990dad
--- /dev/null
+++ b/source/pdf/pdf-fontfile.c
@@ -0,0 +1,153 @@
+#include "mupdf/pdf.h"
+
+/*
+ Which fonts are embedded is based on a few preprocessor definitions.
+
+ The base 14 fonts are always embedded.
+ For font substitution we embed DroidSans which has good glyph coverage.
+ For CJK font substitution we embed DroidSansFallback.
+
+ Set NOCJK to skip all CJK support (this also omits embedding the CJK CMaps)
+ Set NOCJKFONT to skip the embedded CJK font.
+ Set NOCJKFULL to embed a smaller CJK font without CJK Extension A support.
+
+ Set NODROIDFONT to use the base 14 fonts as substitute fonts.
+*/
+
+#ifdef NOCJK
+#define NOCJKFONT
+#endif
+
+#include "gen_font_base14.h"
+
+#ifndef NODROIDFONT
+#include "gen_font_droid.h"
+#endif
+
+#ifndef NOCJKFONT
+#ifndef NOCJKFULL
+#include "gen_font_cjk_full.h"
+#else
+#include "gen_font_cjk.h"
+#endif
+#endif
+
+unsigned char *
+pdf_lookup_builtin_font(char *name, unsigned int *len)
+{
+ if (!strcmp("Courier", name)) {
+ *len = sizeof pdf_font_NimbusMonL_Regu;
+ return (unsigned char*) pdf_font_NimbusMonL_Regu;
+ }
+ if (!strcmp("Courier-Bold", name)) {
+ *len = sizeof pdf_font_NimbusMonL_Bold;
+ return (unsigned char*) pdf_font_NimbusMonL_Bold;
+ }
+ if (!strcmp("Courier-Oblique", name)) {
+ *len = sizeof pdf_font_NimbusMonL_ReguObli;
+ return (unsigned char*) pdf_font_NimbusMonL_ReguObli;
+ }
+ if (!strcmp("Courier-BoldOblique", name)) {
+ *len = sizeof pdf_font_NimbusMonL_BoldObli;
+ return (unsigned char*) pdf_font_NimbusMonL_BoldObli;
+ }
+ if (!strcmp("Helvetica", name)) {
+ *len = sizeof pdf_font_NimbusSanL_Regu;
+ return (unsigned char*) pdf_font_NimbusSanL_Regu;
+ }
+ if (!strcmp("Helvetica-Bold", name)) {
+ *len = sizeof pdf_font_NimbusSanL_Bold;
+ return (unsigned char*) pdf_font_NimbusSanL_Bold;
+ }
+ if (!strcmp("Helvetica-Oblique", name)) {
+ *len = sizeof pdf_font_NimbusSanL_ReguItal;
+ return (unsigned char*) pdf_font_NimbusSanL_ReguItal;
+ }
+ if (!strcmp("Helvetica-BoldOblique", name)) {
+ *len = sizeof pdf_font_NimbusSanL_BoldItal;
+ return (unsigned char*) pdf_font_NimbusSanL_BoldItal;
+ }
+ if (!strcmp("Times-Roman", name)) {
+ *len = sizeof pdf_font_NimbusRomNo9L_Regu;
+ return (unsigned char*) pdf_font_NimbusRomNo9L_Regu;
+ }
+ if (!strcmp("Times-Bold", name)) {
+ *len = sizeof pdf_font_NimbusRomNo9L_Medi;
+ return (unsigned char*) pdf_font_NimbusRomNo9L_Medi;
+ }
+ if (!strcmp("Times-Italic", name)) {
+ *len = sizeof pdf_font_NimbusRomNo9L_ReguItal;
+ return (unsigned char*) pdf_font_NimbusRomNo9L_ReguItal;
+ }
+ if (!strcmp("Times-BoldItalic", name)) {
+ *len = sizeof pdf_font_NimbusRomNo9L_MediItal;
+ return (unsigned char*) pdf_font_NimbusRomNo9L_MediItal;
+ }
+ if (!strcmp("Symbol", name)) {
+ *len = sizeof pdf_font_StandardSymL;
+ return (unsigned char*) pdf_font_StandardSymL;
+ }
+ if (!strcmp("ZapfDingbats", name)) {
+ *len = sizeof pdf_font_Dingbats;
+ return (unsigned char*) pdf_font_Dingbats;
+ }
+ *len = 0;
+ return NULL;
+}
+
+unsigned char *
+pdf_lookup_substitute_font(int mono, int serif, int bold, int italic, unsigned int *len)
+{
+#ifdef NODROIDFONT
+ if (mono) {
+ if (bold) {
+ if (italic) return pdf_lookup_builtin_font("Courier-BoldOblique", len);
+ else return pdf_lookup_builtin_font("Courier-Bold", len);
+ } else {
+ if (italic) return pdf_lookup_builtin_font("Courier-Oblique", len);
+ else return pdf_lookup_builtin_font("Courier", len);
+ }
+ } else if (serif) {
+ if (bold) {
+ if (italic) return pdf_lookup_builtin_font("Times-BoldItalic", len);
+ else return pdf_lookup_builtin_font("Times-Bold", len);
+ } else {
+ if (italic) return pdf_lookup_builtin_font("Times-Italic", len);
+ else return pdf_lookup_builtin_font("Times-Roman", len);
+ }
+ } else {
+ if (bold) {
+ if (italic) return pdf_lookup_builtin_font("Helvetica-BoldOblique", len);
+ else return pdf_lookup_builtin_font("Helvetica-Bold", len);
+ } else {
+ if (italic) return pdf_lookup_builtin_font("Helvetica-Oblique", len);
+ else return pdf_lookup_builtin_font("Helvetica", len);
+ }
+ }
+#else
+ if (mono) {
+ *len = sizeof pdf_font_DroidSansMono;
+ return (unsigned char*) pdf_font_DroidSansMono;
+ } else {
+ *len = sizeof pdf_font_DroidSans;
+ return (unsigned char*) pdf_font_DroidSans;
+ }
+#endif
+}
+
+unsigned char *
+pdf_lookup_substitute_cjk_font(int ros, int serif, unsigned int *len)
+{
+#ifndef NOCJKFONT
+#ifndef NOCJKFULL
+ *len = sizeof pdf_font_DroidSansFallbackFull;
+ return (unsigned char*) pdf_font_DroidSansFallbackFull;
+#else
+ *len = sizeof pdf_font_DroidSansFallback;
+ return (unsigned char*) pdf_font_DroidSansFallback;
+#endif
+#else
+ *len = 0;
+ return NULL;
+#endif
+}