diff options
author | Tor Andersson <tor@ghostscript.com> | 2009-02-27 18:38:36 +0100 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2009-02-27 18:38:36 +0100 |
commit | 7748646a8394024a4faba66db93a99f81bd5bb89 (patch) | |
tree | c80092728566889cb7482e053fe7f731a5265b9f | |
parent | baf345e38a64e561817a744b14aa597b213e8e7a (diff) | |
download | mupdf-7748646a8394024a4faba66db93a99f81bd5bb89.tar.xz |
Add DroidSansFallback.ttf from Android as a builtin CJK substitute font.
-rw-r--r-- | Jamrules | 5 | ||||
-rw-r--r-- | fonts/Jamfile | 6 | ||||
-rw-r--r-- | fonts/droid/DroidSansFallback.ttf | bin | 0 -> 3081908 bytes | |||
-rw-r--r-- | fonts/droid/NOTICE | 190 | ||||
-rw-r--r-- | mupdf/pdf_cmap.c | 2 | ||||
-rw-r--r-- | mupdf/pdf_cmapfile.c | 2 | ||||
-rw-r--r-- | mupdf/pdf_fontfile.c | 153 |
7 files changed, 225 insertions, 133 deletions
@@ -27,6 +27,11 @@ # -sTHIRDPARTYINC="-Ic:/wherever/include" # -sTHIRDPARTYLIB="-Lc:/wherever/lib" # +# To compile without builtin CJK CMap and font support, and save a few +# megabytes of executable space: +# +# -sDEFINES=NOCJK +# # Workaround for different OS/OSPLAT settings on FTJam and plain jam if $(JAM_TOOLSET) = MINGW { OS = MINGW ; } diff --git a/fonts/Jamfile b/fonts/Jamfile index 2e0067b5..869b4bd7 100644 --- a/fonts/Jamfile +++ b/fonts/Jamfile @@ -1,5 +1,11 @@ SubDir TOP fonts ; +SubDir TOP fonts droid ; +GenFile font_cjk.c : hexdump DroidSansFallback.ttf ; +Library libfonts : font_cjk.c ; + +SubDir TOP fonts ; + GenFile font_dingbats.c : hexdump Dingbats.cff ; GenFile font_symbol.c : hexdump StandardSymL.cff ; GenFile font_script.c : hexdump URWChanceryL-MediItal.cff ; diff --git a/fonts/droid/DroidSansFallback.ttf b/fonts/droid/DroidSansFallback.ttf Binary files differnew file mode 100644 index 00000000..61460b1f --- /dev/null +++ b/fonts/droid/DroidSansFallback.ttf diff --git a/fonts/droid/NOTICE b/fonts/droid/NOTICE new file mode 100644 index 00000000..c5b1efa7 --- /dev/null +++ b/fonts/droid/NOTICE @@ -0,0 +1,190 @@ + + Copyright (c) 2005-2008, The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + diff --git a/mupdf/pdf_cmap.c b/mupdf/pdf_cmap.c index b961e4fd..131bdcea 100644 --- a/mupdf/pdf_cmap.c +++ b/mupdf/pdf_cmap.c @@ -1168,7 +1168,7 @@ pdf_loadsystemcmap(pdf_cmap **cmapp, char *cmapname) if (!strcmp(cmapname, pdf_cmaptable[i].name)) goto found; - return fz_throw("cannot find cmap: %s", cmapname); + return fz_throw("no builtin cmap file: %s", cmapname); found: if (pdf_cmaptable[i].cmap) diff --git a/mupdf/pdf_cmapfile.c b/mupdf/pdf_cmapfile.c index b511ad9b..80fe4d9e 100644 --- a/mupdf/pdf_cmapfile.c +++ b/mupdf/pdf_cmapfile.c @@ -221,6 +221,7 @@ extern const int cmaps_korean_UniKS_UCS2_V_len; struct pdf_cmapentry_s pdf_cmaptable[] = { +#ifndef NOCJK { cmaps_chinese_s_Adobe_GB1_4_name, cmaps_chinese_s_Adobe_GB1_4_buf, @@ -436,6 +437,7 @@ struct pdf_cmapentry_s pdf_cmaptable[] = cmaps_korean_UniKS_UCS2_V_buf, &cmaps_korean_UniKS_UCS2_V_len, 0 }, +#endif { 0, 0, 0, 0 } }; diff --git a/mupdf/pdf_fontfile.c b/mupdf/pdf_fontfile.c index 4ba4dfba..0d4006a2 100644 --- a/mupdf/pdf_fontfile.c +++ b/mupdf/pdf_fontfile.c @@ -16,6 +16,14 @@ enum FD_FORCEBOLD = 1 << 18 }; +enum { CNS, GB, Japan, Korea }; +enum { MINCHO, GOTHIC }; + +#ifndef NOCJK +extern const unsigned char fonts_droid_DroidSansFallback_ttf[]; +extern const unsigned int fonts_droid_DroidSansFallback_ttf_len; +#endif + static const struct { const char *name; @@ -70,42 +78,6 @@ static const struct { 0, 0, 0 } }; -enum { CNS, GB, Japan, Korea }; -enum { MINCHO, GOTHIC }; - -struct subent { int csi; int kind; char *name; }; - -static const struct subent fontsubs[] = -{ - { CNS, MINCHO, "bkai00mp.ttf" }, - { CNS, GOTHIC, "bsmi00lp.ttf" }, - { CNS, MINCHO, "\345\204\267\345\256\213 Pro.ttf" }, /* LiSong Pro */ - { CNS, GOTHIC, "\345\204\267\351\273\221 Pro.ttf" }, /* LiHei Pro */ - { CNS, MINCHO, "simsun.ttc" }, - { CNS, GOTHIC, "simhei.ttf" }, - - { GB, MINCHO, "gkai00mp.ttf" }, - { GB, GOTHIC, "gbsn00lp.ttf" }, - { GB, MINCHO, "\345\215\216\346\226\207\345\256\213\344\275\223.ttf" }, /* STSong */ - { GB, GOTHIC, "\345\215\216\346\226\207\346\245\267\344\275\223.ttf" }, /* STHeiti */ - { GB, MINCHO, "mingliu.ttc" }, - { GB, GOTHIC, "mingliu.ttc" }, - - { Japan, MINCHO, "kochi-mincho.ttf" }, - { Japan, GOTHIC, "kochi-gothic.ttf" }, - { Japan, MINCHO, "\343\203\222\343\203\251\343\202\255\343\202\231\343\203\216\346\230\216\346\234\235 Pro W3.otf" }, - { Japan, GOTHIC, "\343\203\222\343\203\251\343\202\255\343\202\231\343\203\216\350\247\222\343\202\263\343\202\231 Pro W3.otf" }, - { Japan, MINCHO, "msmincho.ttc" }, - { Japan, GOTHIC, "msgothic.ttc" }, - - { Korea, MINCHO, "batang.ttf" }, - { Korea, GOTHIC, "dotum.ttf" }, - { Korea, MINCHO, "AppleMyungjo.dfont" }, - { Korea, GOTHIC, "AppleGothic.dfont" }, - { Korea, MINCHO, "batang.ttc" }, - { Korea, GOTHIC, "dotum.ttc" }, -}; - fz_error * pdf_loadbuiltinfont(pdf_fontdesc *font, char *fontname) { @@ -133,98 +105,23 @@ found: return fz_okay; } -static int -findcidfont(char *filename, char *path, int pathlen) -{ - static const char *dirs[] = - { - "$/.fonts", - "$/Library/Fonts", - "/usr/X11R6/lib/X11/fonts/TTF", - "/usr/X11R6/lib/X11/fonts/TrueType", - "/usr/share/fonts/arphic", - "/usr/share/fonts/baekmuk", - "/usr/share/fonts/kochi", - "/System/Library/Fonts", - "/Library/Fonts", - nil - }; - - char **dirp; - char *home; - char *dir; - - dir = getenv("FONTDIR"); - if (dir) - { - strlcpy(path, dir, pathlen); - strlcat(path, "/", pathlen); - strlcat(path, filename, pathlen); - if (access(path, R_OK) == 0) - return 1; - } - - dir = getenv("WINDIR"); - if (dir) - { - strlcpy(path, dir, pathlen); - strlcat(path, "/Fonts/", pathlen); - strlcat(path, filename, pathlen); - if (access(path, R_OK) == 0) - return 1; - } - - home = getenv("HOME"); - if (!home) - home = "/"; - - for (dirp = (char**)dirs; *dirp; dirp++) - { - dir = *dirp; - if (dir[0] == '$') - { - strlcpy(path, home, pathlen); - strlcat(path, "/", pathlen); - strlcat(path, dir + 1, pathlen); - } - else - { - strlcpy(path, dir, pathlen); - } - strlcat(path, "/", pathlen); - strlcat(path, filename, pathlen); - if (access(path, R_OK) == 0) - return 1; - } - - return 0; -} - static fz_error * loadcidfont(pdf_fontdesc *font, int csi, int kind) { - char path[1024]; +#ifndef NOCJK fz_error *error; - int i; - - for (i = 0; i < nelem(fontsubs); i++) - { - if (fontsubs[i].csi == csi && fontsubs[i].kind == kind) - { - if (findcidfont(fontsubs[i].name, path, sizeof path)) - { - pdf_logfont("load system font '%s'\n", fontsubs[i].name); - - error = fz_newfontfromfile(&font->font, path, 0); - if (error) - return fz_rethrow(error, "cannot load freetype font from file: %s", path); - - return fz_okay; - } - } - } - - return fz_throw("cannot find cid font file"); + /* We only have one builtin fallback font, we'd really like + * to have one for each combination of CSI and Kind + */ + error = fz_newfontfrombuffer(&font->font, + fonts_droid_DroidSansFallback_ttf, + fonts_droid_DroidSansFallback_ttf_len, 0); + if (error) + return fz_rethrow(error, "cannot load builtin CJK font"); + return fz_okay; +#else + return fz_throw("no builtin CJK font file"); +#endif } fz_error * @@ -239,10 +136,6 @@ pdf_loadsystemfont(pdf_fontdesc *font, char *fontname, char *collection) int isscript = 0; int isfixed = 0; -//XXX error = initfontlibs(); -// if (error) -// return fz_rethrow(error, "cannot init font libraries"); - if (strstr(fontname, "Bold")) isbold = 1; if (strstr(fontname, "Italic")) @@ -342,10 +235,6 @@ pdf_loadembeddedfont(pdf_fontdesc *font, pdf_xref *xref, fz_obj *stmref) fz_error *error; fz_buffer *buf; -//XXX error = initfontlibs(); -// if (error) -// return fz_rethrow(error, "cannot init font libraries"); - pdf_logfont("load embedded font\n"); error = pdf_loadstream(&buf, xref, fz_tonum(stmref), fz_togen(stmref)); |