summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipdfm-x/type0.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvipdfm-x/type0.c')
-rw-r--r--Build/source/texk/dvipdfm-x/type0.c363
1 files changed, 0 insertions, 363 deletions
diff --git a/Build/source/texk/dvipdfm-x/type0.c b/Build/source/texk/dvipdfm-x/type0.c
deleted file mode 100644
index 7dbbd984ad5..00000000000
--- a/Build/source/texk/dvipdfm-x/type0.c
+++ /dev/null
@@ -1,363 +0,0 @@
-/* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
- Copyright (C) 2002-2021 by Jin-Hwan Cho and Shunsaku Hirata,
- the dvipdfmx project team.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
-*/
-
-/*
- * Type0 font support:
- *
- * TODO:
- *
- * Composite font (multiple descendants) - not supported in PDF
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-
-#include "system.h"
-#include "mem.h"
-#include "error.h"
-#include "dpxconf.h"
-#include "dpxfile.h"
-
-#include "pdfobj.h"
-#include "fontmap.h"
-
-#include "cmap.h"
-#include "cidtype0.h"
-#include "cid.h"
-
-#include "type0.h"
-
-
-static pdf_obj *pdf_read_ToUnicode_file (const char *cmap_name);
-
-/* PLEASE FIX THIS */
-#include "tt_cmap.h"
-
-/* Try to load ToUnicode CMap from file system first, if not found fallback to
- * font CMap reverse lookup.
- * CHANGED: CMap here is not always Unicode to CID mapping. Don't use reverse lookup.
- */
-static pdf_obj *
-try_load_ToUnicode_file (char *cmap_base)
-{
- pdf_obj *tounicode;
- char *cmap_name;
-
- cmap_name = NEW(strlen(cmap_base)+strlen("-UTF16")+1, char);
- sprintf(cmap_name, "%s-UTF16", cmap_base);
- tounicode = pdf_read_ToUnicode_file(cmap_name);
- if (!tounicode) {
- sprintf(cmap_name, "%s-UCS2", cmap_base);
- tounicode = pdf_read_ToUnicode_file(cmap_name);
- }
- RELEASE(cmap_name);
-
- return tounicode;
-}
-
-static void
-Type0Font_attach_ToUnicode_stream (pdf_font *font)
-{
- pdf_obj *tounicode;
- pdf_font *cidfont = pdf_get_font_data(font->type0.descendant);
- CIDSysInfo *csi;
- char *fontname;
-
- /*
- * ToUnicode CMap:
- *
- * ToUnicode CMaps are usually not required for standard character
- * collections such as Adobe-Japan1. Identity-H is used for UCS
- * ordering CID-keyed fonts. External resource must be loaded for
- * others.
- */
- ASSERT(cidfont);
-
- if (CIDFont_is_ACCFont(cidfont)) {
- /* No need to embed ToUnicode */
- return;
- } else if (CIDFont_is_UCSFont(cidfont)) {
- /*
- * Old version of dvipdfmx mistakenly used Adobe-Identity as Unicode.
- */
- /* ref returned */
- tounicode = pdf_read_ToUnicode_file("Adobe-Identity-UCS2");
- if (!tounicode) { /* This should work */
- tounicode = pdf_new_name("Identity-H");
- }
- pdf_add_dict(font->resource, pdf_new_name("ToUnicode"), tounicode);
- return;
- }
-
- tounicode = NULL;
- csi = &cidfont->cid.csi;
- if (cidfont->cid.options.embed) {
- fontname = NEW(strlen(cidfont->fontname)+8, char);
- sprintf(fontname, "%s+%s", cidfont->uniqueID, cidfont->fontname);
- } else {
- fontname = NEW(strlen(cidfont->fontname)+1, char);
- strcpy(fontname, cidfont->fontname);
- }
-
- switch (cidfont->subtype) {
- case PDF_FONT_FONTTYPE_CIDTYPE2:
- if (!strcmp(csi->registry, "Adobe") && !strcmp(csi->ordering, "Identity")) {
- tounicode = otf_create_ToUnicode_stream(cidfont->ident, cidfont->index,
- fontname, font->usedchars);
- } else {
- char *cmap_base = NEW(strlen(csi->registry) + strlen(csi->ordering) + 2, char);
- sprintf(cmap_base, "%s-%s", csi->registry, csi->ordering);
- tounicode = try_load_ToUnicode_file(cmap_base);
- RELEASE(cmap_base);
- /* In this case glyphs are re-ordered hance otf_create... won't work */
- }
- break;
- default:
- if (cidfont->flags & CIDFONT_FLAG_TYPE1C) {
- tounicode = otf_create_ToUnicode_stream(cidfont->ident, cidfont->index,
- fontname, font->usedchars);
- } else if (cidfont->flags & CIDFONT_FLAG_TYPE1) {
- tounicode = CIDFont_type0_t1create_ToUnicode_stream(cidfont->ident, fontname, font->usedchars);
- } else {
- tounicode = try_load_ToUnicode_file(cidfont->fontname);
- if (!tounicode) {
- tounicode = otf_create_ToUnicode_stream(cidfont->ident, cidfont->index,
- fontname, font->usedchars);
- }
- }
- }
- RELEASE(fontname);
-
- if (tounicode) {
- pdf_add_dict(font->resource, pdf_new_name("ToUnicode"), tounicode);
- } else {
-#if defined(LIBDPX)
- if (dpx_conf.verbose_level > 0)
- WARN("Failed to load ToUnicode CMap for font \"%s\"", cidfont->fontname);
-#else
- WARN("Failed to load ToUnicode CMap for font \"%s\"", cidfont->filename);
-#endif /* LIBDPX */
- }
-
- return;
-}
-
-void
-pdf_font_load_type0 (pdf_font *font)
-{
- if (!font || !font->reference)
- return;
-
- /* FIXME: Should move to pdffont.c */
- if (!pdf_lookup_dict(font->resource, "ToUnicode")) {
- Type0Font_attach_ToUnicode_stream(font);
- }
-}
-
-int
-pdf_font_open_type0 (pdf_font *font, int cid_id, int wmode)
-{
- pdf_font *cidfont;
- CIDSysInfo *csi;
- char *fontname = NULL;
-
- if (cid_id < 0)
- return -1;
-
- cidfont = pdf_get_font_data(cid_id);
-
- font->type0.wmode = wmode;
- font->type0.descendant = cid_id;
-
- /*
- * PostScript Font name:
- *
- * Type0 font's fontname is usually descendant CID-keyed font's font name
- * appended by -ENCODING.
- */
- if (cidfont->cid.options.embed) {
- fontname = NEW(strlen(cidfont->fontname)+8, char);
- sprintf(fontname, "%s+%s", cidfont->uniqueID, cidfont->fontname);
- } else {
- fontname = NEW(strlen(cidfont->fontname)+1, char);
- strcpy(fontname, cidfont->fontname);
- }
-
- if (dpx_conf.verbose_level > 0) {
- MESG("(CID:%s)", cidfont->fontname);
- }
-
- switch (cidfont->subtype) {
- case PDF_FONT_FONTTYPE_CIDTYPE0:
- font->fontname = NEW(strlen(fontname)+strlen("Identity-V")+2, char);
- sprintf(font->fontname, "%s-%s", fontname, wmode ? "Identity-V" : "Identity-H");
- font->usedchars = CIDFont_get_usedchars(cidfont);
- font->flags |= PDF_FONT_FLAG_USEDCHAR_SHARED;
- if (wmode) {
- cidfont->cid.need_vmetrics = 1;
- }
- break;
- case PDF_FONT_FONTTYPE_CIDTYPE2:
- font->fontname = NEW(strlen(fontname)+1, char);
- strcpy(font->fontname, fontname);
- /* Adobe-Identity here means use GID as CID directly. No need to use GSUB for finding
- * vertical glyphs hence separate used_chars for H and V instances are not needed.
- */
- csi = &cidfont->cid.csi;
- if (!csi || (!strcmp(csi->registry, "Adobe") && !strcmp(csi->ordering, "Identity"))) {
- font->usedchars = CIDFont_get_usedchars(cidfont);
- font->flags |= PDF_FONT_FLAG_USEDCHAR_SHARED;
- } else {
- font->usedchars = wmode ? CIDFont_get_usedchars_v(cidfont) : CIDFont_get_usedchars(cidfont);
- font->flags |= PDF_FONT_FLAG_USEDCHAR_SHARED;
- }
- if (wmode) {
- cidfont->cid.need_vmetrics = 1;
- }
- break;
- }
-
- font->resource = pdf_new_dict();
- pdf_add_dict(font->resource, pdf_new_name ("Type"), pdf_new_name ("Font"));
- pdf_add_dict(font->resource, pdf_new_name ("Subtype"), pdf_new_name ("Type0"));
- pdf_add_dict(font->resource,
- pdf_new_name("BaseFont"), pdf_new_name(font->fontname));
- pdf_add_dict(font->resource,
- pdf_new_name("Encoding"), pdf_new_name(wmode ? "Identity-V" : "Identity-H"));
-
- return 0;
-}
-
-/******************************** COMPAT ********************************/
-
-#ifndef WITHOUT_COMPAT
-
-#include "cmap_read.h"
-#include "cmap_write.h"
-#include "pdfresource.h"
-#include "pdfencoding.h"
-
-static pdf_obj *
-create_dummy_CMap (void)
-{
- pdf_obj *stream;
- char buf[32];
- int i, n;
-
-#define CMAP_PART0 "\
-%!PS-Adobe-3.0 Resource-CMap\n\
-%%DocumentNeededResources: ProcSet (CIDInit)\n\
-%%IncludeResource: ProcSet (CIDInit)\n\
-%%BeginResource: CMap (Adobe-Identity-UCS2)\n\
-%%Title: (Adobe-Identity-UCS2 Adobe UCS2 0)\n\
-%%Version: 1.0\n\
-%%Copyright:\n\
-%% ---\n\
-%%EndComments\n\n\
-"
-#define CMAP_PART1 "\
-/CIDInit /ProcSet findresource begin\n\
-\n\
-12 dict begin\n\nbegincmap\n\n\
-/CIDSystemInfo 3 dict dup begin\n\
- /Registry (Adobe) def\n\
- /Ordering (UCS2) def\n\
- /Supplement 0 def\n\
-end def\n\n\
-/CMapName /Adobe-Identity-UCS2 def\n\
-/CMapVersion 1.0 def\n\
-/CMapType 2 def\n\n\
-2 begincodespacerange\n\
-<0000> <FFFF>\n\
-endcodespacerange\n\
-"
-#define CMAP_PART3 "\
-endcmap\n\n\
-CMapName currentdict /CMap defineresource pop\n\n\
-end\nend\n\n\
-%%EndResource\n\
-%%EOF\n\
-"
-
- stream = pdf_new_stream(STREAM_COMPRESS);
- pdf_add_stream(stream, CMAP_PART0, strlen(CMAP_PART0));
- pdf_add_stream(stream, CMAP_PART1, strlen(CMAP_PART1));
- pdf_add_stream(stream, "\n100 beginbfrange\n", strlen("\n100 beginbfrange\n"));
- for (i = 0; i < 0x64; i++) {
- n = sprintf(buf,
- "<%02X00> <%02XFF> <%02X00>\n", i, i, i);
- pdf_add_stream(stream, buf, n);
- }
- pdf_add_stream(stream, "endbfrange\n\n", strlen("endbfrange\n\n"));
-
- pdf_add_stream(stream, "\n100 beginbfrange\n", strlen("\n100 beginbfrange\n"));
- for (i = 0x64; i < 0xc8; i++) {
- n = sprintf(buf,
- "<%02X00> <%02XFF> <%02X00>\n", i, i, i);
- pdf_add_stream(stream, buf, n);
- }
- pdf_add_stream(stream, "endbfrange\n\n", strlen("endbfrange\n\n"));
-
- pdf_add_stream(stream, "\n48 beginbfrange\n", strlen("\n48 beginbfrange\n"));
- for (i = 0xc8; i <= 0xd7; i++) {
- n = sprintf(buf,
- "<%02X00> <%02XFF> <%02X00>\n", i, i, i);
- pdf_add_stream(stream, buf, n);
- }
- for (i = 0xe0; i <= 0xff; i++) {
- n = sprintf(buf,
- "<%02X00> <%02XFF> <%02X00>\n", i, i, i);
- pdf_add_stream(stream, buf, n);
- }
- pdf_add_stream(stream, "endbfrange\n\n", strlen("endbfrange\n\n"));
-
- pdf_add_stream(stream, CMAP_PART3, strlen(CMAP_PART3));
-
- return stream;
-}
-
-static pdf_obj *
-pdf_read_ToUnicode_file (const char *cmap_name)
-{
- pdf_obj *stream;
- int res_id = -1;
-
- ASSERT(cmap_name);
-
- res_id = pdf_findresource("CMap", cmap_name);
- if (res_id < 0) {
- if (!strcmp(cmap_name, "Adobe-Identity-UCS2"))
- stream = create_dummy_CMap();
- else {
- stream = pdf_load_ToUnicode_stream(cmap_name);
- }
- if (stream) {
- res_id = pdf_defineresource("CMap",
- cmap_name,
- stream, PDF_RES_FLUSH_IMMEDIATE);
- }
- }
-
- return (res_id < 0 ? NULL : pdf_get_resource_reference(res_id));
-}
-#endif /* !WITHOUT_COMPAT */