texlive[56518] Build/source/texk/dvipdfm-x: Simplify text handling.

commits+kakuto at tug.org commits+kakuto at tug.org
Sat Oct 3 00:57:53 CEST 2020


Revision: 56518
          http://tug.org/svn/texlive?view=revision&revision=56518
Author:   kakuto
Date:     2020-10-03 00:57:53 +0200 (Sat, 03 Oct 2020)
Log Message:
-----------
Simplify text handling. (S. Hirara)

Modified Paths:
--------------
    trunk/Build/source/texk/dvipdfm-x/ChangeLog
    trunk/Build/source/texk/dvipdfm-x/cid.c
    trunk/Build/source/texk/dvipdfm-x/cid.h
    trunk/Build/source/texk/dvipdfm-x/cmap.c
    trunk/Build/source/texk/dvipdfm-x/configure
    trunk/Build/source/texk/dvipdfm-x/configure.ac
    trunk/Build/source/texk/dvipdfm-x/dvi.c
    trunk/Build/source/texk/dvipdfm-x/mpost.c
    trunk/Build/source/texk/dvipdfm-x/pdfdev.c
    trunk/Build/source/texk/dvipdfm-x/pdfdev.h
    trunk/Build/source/texk/dvipdfm-x/pdffont.c
    trunk/Build/source/texk/dvipdfm-x/pdffont.h

Modified: trunk/Build/source/texk/dvipdfm-x/ChangeLog
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/ChangeLog	2020-10-02 22:30:13 UTC (rev 56517)
+++ trunk/Build/source/texk/dvipdfm-x/ChangeLog	2020-10-02 22:57:53 UTC (rev 56518)
@@ -1,3 +1,13 @@
+2020-10-03  Shunsaku Hirata  <shunsaku.hirata74 at gmail.com>
+
+	* cid.c, cid.h: Add "const" attribute to arguments fontmap_rec
+	and fmap_opt.
+	* cmap.c: Correct calculation of min-bytes and max-bytes. Fix
+	indentation.
+	* dvi.c, mpost.c, pdfdev.[ch], pdffont.[ch]: Simplify input
+	text handling. The "mapc" option is handled in dvi.c.
+	* configure.ac: Version 20201003.
+
 2020-09-26  Shunsaku Hirata  <shunsaku.hirata74 at gmail.com>
 
 	* pdfobj.c: Fix a bug that the max number of indirect objects

Modified: trunk/Build/source/texk/dvipdfm-x/cid.c
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/cid.c	2020-10-02 22:30:13 UTC (rev 56517)
+++ trunk/Build/source/texk/dvipdfm-x/cid.c	2020-10-02 22:57:53 UTC (rev 56518)
@@ -110,7 +110,7 @@
 };
 
 static void release_opt (cid_opt *opt);
-static int  get_cidsysinfo (CIDSysInfo *csi, const char *map_name, fontmap_opt *fmap_opt);
+static int  get_cidsysinfo (CIDSysInfo *csi, const char *map_name, const fontmap_opt *fmap_opt);
 
 int opt_flags_cidfont = 0;
 
@@ -348,7 +348,8 @@
 }
 
 int
-pdf_font_cidfont_lookup_cache (pdf_font *fonts, int count, const char *map_name, CIDSysInfo *cmap_csi, fontmap_opt *fmap_opt)
+pdf_font_cidfont_lookup_cache (pdf_font *fonts, int count, const char *map_name,
+                               CIDSysInfo *cmap_csi, const fontmap_opt *fmap_opt)
 {
   int       font_id = -1;
   pdf_font *font    = NULL;
@@ -419,7 +420,7 @@
 }
 
 int
-pdf_font_open_cidfont (pdf_font *font, const char *map_name, CIDSysInfo *cmap_csi, fontmap_opt *fmap_opt)
+pdf_font_open_cidfont (pdf_font *font, const char *map_name, CIDSysInfo *cmap_csi, const fontmap_opt *fmap_opt)
 {
   cid_opt opt;
   int     has_csi;
@@ -513,7 +514,7 @@
 }
 
 static int
-get_cidsysinfo (CIDSysInfo *csi, const char *map_name, fontmap_opt *fmap_opt)
+get_cidsysinfo (CIDSysInfo *csi, const char *map_name, const fontmap_opt *fmap_opt)
 {
   int has_csi = 0;
   int sup_idx;

Modified: trunk/Build/source/texk/dvipdfm-x/cid.h
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/cid.h	2020-10-02 22:30:13 UTC (rev 56517)
+++ trunk/Build/source/texk/dvipdfm-x/cid.h	2020-10-02 22:57:53 UTC (rev 56518)
@@ -27,20 +27,21 @@
 extern CIDSysInfo CSI_UNICODE;
 
 extern int  opt_flags_cidfont;
-extern void CIDFont_set_flags       (int flags);
+extern void CIDFont_set_flags (int flags);
 
 #define CIDFONT_FORCE_FIXEDPITCH (1 << 1)
 
-extern char       *CIDFont_get_usedchars   (pdf_font *font);
-extern char       *CIDFont_get_usedchars_v (pdf_font *font);
+extern char *CIDFont_get_usedchars   (pdf_font *font);
+extern char *CIDFont_get_usedchars_v (pdf_font *font);
 
-extern int         CIDFont_is_ACCFont  (pdf_font *font);
-extern int         CIDFont_is_UCSFont  (pdf_font *font);
+extern int   CIDFont_is_ACCFont  (pdf_font *font);
+extern int   CIDFont_is_UCSFont  (pdf_font *font);
 
 #include "fontmap.h"
-extern int      pdf_font_cidfont_lookup_cache (pdf_font *fonts, int count, const char *map_name, CIDSysInfo *cmap_csi, fontmap_opt *fmap_opt);
+extern int   pdf_font_cidfont_lookup_cache (pdf_font *fonts, int count, const char *map_name,
+                                            CIDSysInfo *cmap_csi, const fontmap_opt *fmap_opt);
+extern int   pdf_font_open_cidfont (pdf_font *font, const char *map_name,
+                                    CIDSysInfo *cmap_csi, const fontmap_opt *fmap_opt);
+extern void  pdf_font_load_cidfont (pdf_font *font);
 
-extern int      pdf_font_open_cidfont (pdf_font *font, const char *map_name, CIDSysInfo *cmap_csi, fontmap_opt *fmap_opt);
-extern void     pdf_font_load_cidfont (pdf_font *font);
-
 #endif /* _CID_H_ */

Modified: trunk/Build/source/texk/dvipdfm-x/cmap.c
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/cmap.c	2020-10-02 22:30:13 UTC (rev 56517)
+++ trunk/Build/source/texk/dvipdfm-x/cmap.c	2020-10-02 22:57:53 UTC (rev 56518)
@@ -62,12 +62,12 @@
 /* Private funcs. */
 static int  bytes_consumed   (CMap *cmap, const unsigned char *instr, int inbytes);
 static void handle_undefined (CMap *cmap,
-			      const unsigned char **inbuf, int *inbytesleft,
-			      unsigned char **outbuf, int *outbytesleft);
+                              const unsigned char **inbuf, int *inbytesleft,
+                              unsigned char **outbuf, int *outbytesleft);
 
 static int  check_range      (CMap *cmap,
-			      const unsigned char *srclo, const unsigned char *srchi, int srcdim,
-			      const unsigned char *dst, int dstdim);
+                              const unsigned char *srclo, const unsigned char *srchi, int srcdim,
+                              const unsigned char *dst, int dstdim);
 
 static unsigned char *get_mem (CMap *cmap, int size);
 static mapDef *mapDef_new     (void);
@@ -86,10 +86,10 @@
   cmap->useCMap  = NULL;
   cmap->CSI      = NULL;
 
-  cmap->profile.minBytesIn  = 2;
-  cmap->profile.maxBytesIn  = 2;
-  cmap->profile.minBytesOut = 2;
-  cmap->profile.maxBytesOut = 2;
+  cmap->profile.minBytesIn  = 65535;
+  cmap->profile.maxBytesIn  = 0;
+  cmap->profile.minBytesOut = 65535;
+  cmap->profile.maxBytesOut = 0;
 
   cmap->flags = 0;
 
@@ -129,7 +129,7 @@
     while (map != NULL) {
       mapData *prev = map->prev;
       if (map->data != NULL)
-	RELEASE(map->data);
+        RELEASE(map->data);
       RELEASE(map);
       map = prev;
     }
@@ -171,9 +171,9 @@
     csi1 = CMap_get_CIDSysInfo(cmap);
     csi2 = CMap_get_CIDSysInfo(cmap->useCMap);
     if (strcmp(csi1->registry, csi2->registry) ||
-	strcmp(csi1->ordering, csi2->ordering)) {
+      strcmp(csi1->ordering, csi2->ordering)) {
       WARN("CIDSystemInfo mismatched %s <--> %s",
-	   CMap_get_name(cmap), CMap_get_name(cmap->useCMap));
+           CMap_get_name(cmap), CMap_get_name(cmap->useCMap));
       return 0;
     }
   }
@@ -212,8 +212,8 @@
  */
 static void
 handle_undefined (CMap *cmap,
-		  const unsigned char **inbuf,  int *inbytesleft,
-		  unsigned char **outbuf, int *outbytesleft)
+                  const unsigned char **inbuf,  int *inbytesleft,
+                  unsigned char **outbuf, int *outbytesleft)
 {
   int len = 0;
 
@@ -243,8 +243,8 @@
 
 void
 CMap_decode_char (CMap *cmap,
-		  const unsigned char **inbuf, int *inbytesleft,
-		  unsigned char **outbuf, int *outbytesleft)
+                  const unsigned char **inbuf, int *inbytesleft,
+                  unsigned char **outbuf, int *outbytesleft)
 {
   mapDef *t;
   const unsigned char *p, *save;
@@ -318,9 +318,9 @@
       /* continue */
     case MAP_IS_CID: case MAP_IS_CODE:
       if (*outbytesleft >= t[c].len)
-	memcpy(*outbuf, t[c].code, t[c].len);
+        memcpy(*outbuf, t[c].code, t[c].len);
       else
-	ERROR("%s: Buffer overflow.", CMAP_DEBUG_STR);
+        ERROR("%s: Buffer overflow.", CMAP_DEBUG_STR);
       *outbuf       += t[c].len;
       *outbytesleft -= t[c].len;
       break;
@@ -341,8 +341,8 @@
  */
 int
 CMap_decode (CMap *cmap,
-	     const unsigned char **inbuf,  int *inbytesleft,
-	     unsigned char **outbuf, int *outbytesleft)
+             const unsigned char **inbuf,  int *inbytesleft,
+             unsigned char **outbuf, int *outbytesleft)
 {
   int count;
 
@@ -445,7 +445,7 @@
 
   if (cmap == ucmap)
     ERROR("%s: Identical CMap object cannot be used for usecmap CMap: 0x%p=0x%p",
-	  CMAP_DEBUG_STR, cmap, ucmap);
+          CMAP_DEBUG_STR, cmap, ucmap);
 
   /* Check if ucmap have neccesary information. */
   if (!CMap_is_valid(ucmap))
@@ -457,13 +457,13 @@
    */
   if (cmap->name && strcmp(cmap->name, ucmap->name) == 0)
     ERROR("%s: CMap refering itself not allowed: CMap %s --> %s",
-	  CMAP_DEBUG_STR, cmap->name, ucmap->name);
+          CMAP_DEBUG_STR, cmap->name, ucmap->name);
 
   if (cmap->CSI && cmap->CSI->registry && cmap->CSI->ordering) {
     if (strcmp(cmap->CSI->registry, ucmap->CSI->registry) ||
-	strcmp(cmap->CSI->ordering, ucmap->CSI->ordering))
+        strcmp(cmap->CSI->ordering, ucmap->CSI->ordering))
       ERROR("%s: CMap %s required by %s have different CSI.",
-	    CMAP_DEBUG_STR, CMap_get_name(cmap), CMap_get_name(ucmap));
+            CMAP_DEBUG_STR, CMap_get_name(cmap), CMap_get_name(ucmap));
   }
 
   /* We must copy codespaceranges. */
@@ -488,7 +488,7 @@
       continue;
     for (pos = 0; pos < dim; pos++) {
       if (c[pos] > csr->codeHi[pos] || c[pos] < csr->codeLo[pos])
-	break;
+        break;
     }
     if (pos == dim)
       return 0; /* Valid */
@@ -514,10 +514,10 @@
     csr = cmap->codespace.ranges + i;
     for (j = 0; j < MIN(csr->dim, dim) && overlap; j++) {
       if ((codelo[j] >= csr->codeLo[j] && codelo[j] <= csr->codeHi[j]) ||
-	  (codehi[j] >= csr->codeLo[j] && codehi[j] <= csr->codeHi[j]))
-	overlap = 1;
+          (codehi[j] >= csr->codeLo[j] && codehi[j] <= csr->codeHi[j]))
+        overlap = 1;
       else
-	overlap = 0;
+        overlap = 0;
     }
     if (overlap) {
       WARN("Overlapping codespace found. (ingored)");
@@ -576,7 +576,7 @@
   for (c = srclo[srcdim-1]; c <= srchi[srcdim-1]; c++) {
     if (MAP_DEFINED(cur[c].flag)) {
       if (!__silent)
-	WARN("Trying to redefine already defined code mapping. (ignored)");
+        WARN("Trying to redefine already defined code mapping. (ignored)");
     } else {
       cur[c].flag = (MAP_LOOKUP_END|MAP_IS_NOTDEF);
       cur[c].code = get_mem(cmap, 2);
@@ -592,8 +592,8 @@
 
 int
 CMap_add_bfchar (CMap *cmap,
-		 const unsigned char *src, int srcdim,
-		 const unsigned char *dst, int dstdim)
+                 const unsigned char *src, int srcdim,
+                 const unsigned char *dst, int dstdim)
 {
   return CMap_add_bfrange(cmap, src, src, srcdim, dst, dstdim);
 }
@@ -600,8 +600,8 @@
 
 int
 CMap_add_bfrange (CMap *cmap,
-		  const unsigned char *srclo, const unsigned char *srchi, int srcdim,
-		  const unsigned char *base, int dstdim)
+                  const unsigned char *srclo, const unsigned char *srchi, int srcdim,
+                  const unsigned char *base, int dstdim)
 {
   int     c, last_byte, i;
   mapDef *cur;
@@ -680,7 +680,7 @@
   for (c = srclo[srcdim-1]; c <= srchi[srcdim-1]; c++) {
     if (cur[c].flag != 0) {
       if (!__silent)
-	WARN("Trying to redefine already defined CID mapping. (ignored)");
+        WARN("Trying to redefine already defined CID mapping. (ignored)");
     } else {
       cur[c].flag = (MAP_LOOKUP_END|MAP_IS_CID);
       cur[c].len  = 2;
@@ -783,7 +783,7 @@
     rangeDef *csr = cmap->codespace.ranges + i;
     for (pos = 0; pos < MIN(csr->dim, inbytes); pos++) {
       if (instr[pos] > csr->codeHi[pos] || instr[pos] < csr->codeLo[pos])
-	break;
+        break;
     }
     if (pos == csr->dim) /* part of instr is totally valid in this codespace. */
       return csr->dim;
@@ -798,7 +798,7 @@
     for (i = 0; i< cmap->codespace.num; i++) {
       rangeDef *csr = cmap->codespace.ranges + i;
       if (csr->dim > longest && csr->dim < bytesconsumed)
-	bytesconsumed = csr->dim;
+        bytesconsumed = csr->dim;
     }
   }
 
@@ -807,8 +807,8 @@
 
 static int
 check_range (CMap *cmap,
-	     const unsigned char *srclo, const unsigned char *srchi, int srcdim,
-	     const unsigned char *dst, int dstdim)
+             const unsigned char *srclo, const unsigned char *srchi, int srcdim,
+             const unsigned char *dst, int dstdim)
 {
   if ((srcdim < 1 || dstdim < 1) ||
       (!srclo || !srchi || !dst) ||

Modified: trunk/Build/source/texk/dvipdfm-x/configure
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/configure	2020-10-02 22:30:13 UTC (rev 56517)
+++ trunk/Build/source/texk/dvipdfm-x/configure	2020-10-02 22:57:53 UTC (rev 56518)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for dvipdfm-x (TeX Live) 20200926.
+# Generated by GNU Autoconf 2.69 for dvipdfm-x (TeX Live) 20201003.
 #
 # Report bugs to <dvipdfmx at tug.org>.
 #
@@ -590,8 +590,8 @@
 # Identity of this package.
 PACKAGE_NAME='dvipdfm-x (TeX Live)'
 PACKAGE_TARNAME='dvipdfm-x--tex-live-'
-PACKAGE_VERSION='20200926'
-PACKAGE_STRING='dvipdfm-x (TeX Live) 20200926'
+PACKAGE_VERSION='20201003'
+PACKAGE_STRING='dvipdfm-x (TeX Live) 20201003'
 PACKAGE_BUGREPORT='dvipdfmx at tug.org'
 PACKAGE_URL=''
 
@@ -1350,7 +1350,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures dvipdfm-x (TeX Live) 20200926 to adapt to many kinds of systems.
+\`configure' configures dvipdfm-x (TeX Live) 20201003 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1421,7 +1421,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of dvipdfm-x (TeX Live) 20200926:";;
+     short | recursive ) echo "Configuration of dvipdfm-x (TeX Live) 20201003:";;
    esac
   cat <<\_ACEOF
 
@@ -1551,7 +1551,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-dvipdfm-x (TeX Live) configure 20200926
+dvipdfm-x (TeX Live) configure 20201003
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2390,7 +2390,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by dvipdfm-x (TeX Live) $as_me 20200926, which was
+It was created by dvipdfm-x (TeX Live) $as_me 20201003, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -8077,7 +8077,7 @@
 
 # Define the identity of the package.
  PACKAGE='dvipdfm-x--tex-live-'
- VERSION='20200926'
+ VERSION='20201003'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -14746,7 +14746,7 @@
 Report bugs to <bug-libtool at gnu.org>."
 
 lt_cl_version="\
-dvipdfm-x (TeX Live) config.lt 20200926
+dvipdfm-x (TeX Live) config.lt 20201003
 configured by $0, generated by GNU Autoconf 2.69.
 
 Copyright (C) 2011 Free Software Foundation, Inc.
@@ -16636,7 +16636,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by dvipdfm-x (TeX Live) $as_me 20200926, which was
+This file was extended by dvipdfm-x (TeX Live) $as_me 20201003, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -16706,7 +16706,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-dvipdfm-x (TeX Live) config.status 20200926
+dvipdfm-x (TeX Live) config.status 20201003
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/texk/dvipdfm-x/configure.ac
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/configure.ac	2020-10-02 22:30:13 UTC (rev 56517)
+++ trunk/Build/source/texk/dvipdfm-x/configure.ac	2020-10-02 22:57:53 UTC (rev 56518)
@@ -8,7 +8,7 @@
 dnl   gives unlimited permission to copy and/or distribute it,
 dnl   with or without modifications, as long as this notice is preserved.
 dnl
-AC_INIT([dvipdfm-x (TeX Live)], [20200926], [dvipdfmx at tug.org])
+AC_INIT([dvipdfm-x (TeX Live)], [20201003], [dvipdfmx at tug.org])
 AC_PREREQ([2.65])
 AC_CONFIG_SRCDIR([agl.c])
 AC_CONFIG_AUX_DIR([../../build-aux])

Modified: trunk/Build/source/texk/dvipdfm-x/dvi.c
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/dvi.c	2020-10-02 22:30:13 UTC (rev 56517)
+++ trunk/Build/source/texk/dvipdfm-x/dvi.c	2020-10-02 22:57:53 UTC (rev 56518)
@@ -138,30 +138,34 @@
 
 static struct loaded_font
 {
-  int    type;     /* Type is physical or virtual */
-  int    font_id;  /* id returned by dev (for PHYSICAL fonts)
-                    * or by vf module for (VIRTUAL fonts)
-                    */
-  int   subfont_id; /* id returned by subfont_locate_font() */
-  int   tfm_id;
-  spt_t size;
-  int   source;     /* Source is either DVI or VF */
+  int      type;      /* Type is physical or virtual */
+  int      font_id;   /* id returned by dev (for PHYSICAL fonts)
+                       * or by vf module for (VIRTUAL fonts)
+                       */
+  int      subfont_id; /* id returned by subfont_locate_font() */
+  int      tfm_id;
+  spt_t    size;
+  int      source;     /* Source is either DVI or VF */
   uint32_t rgba_color;
   uint8_t  rgba_used;
-                    /* Indicates that rgba_color is used or not.
-                     * It enables full range of opacity: 0-255.
-                     */
-  int      xgs_id;  /* Transparency ExtGState */
+                       /* Indicates that rgba_color is used or not.
+                        * It enables full range of opacity: 0-255.
+                        */
+  int      xgs_id;     /* Transparency ExtGState */
   struct tt_longMetrics *hvmt;
-  int   ascent;
-  int   descent;
+  int      ascent;
+  int      descent;
   unsigned unitsPerEm;
   cff_font *cffont;
   unsigned numGlyphs;
-  int   layout_dir;
-  float extend;
-  float slant;
-  float embolden;
+  int      layout_dir;
+
+  float    extend;
+  float    slant;
+  float    embolden;
+
+  int      minbytes;
+  char     padbytes[4];
 } *loaded_fonts = NULL;
 static int num_loaded_fonts = 0, max_loaded_fonts = 0;
 
@@ -176,13 +180,13 @@
 
 static struct font_def
 {
-  int32_t tex_id;
-  spt_t  point_size;
-  spt_t  design_size;
-  char  *font_name;
-  int    font_id;   /* index of _loaded_ font in loaded_fonts array */
-  int    used;
-  int    native; /* boolean */
+  int32_t  tex_id;
+  spt_t    point_size;
+  spt_t    design_size;
+  char    *font_name;
+  int      font_id;   /* index of _loaded_ font in loaded_fonts array */
+  int      used;
+  int      native; /* boolean */
   uint32_t rgba_color;   /* only used for native fonts in XeTeX */
   uint8_t  rgba_used;
                     /* Indicates that rgba_color is used or not.
@@ -189,10 +193,10 @@
                      * It enables full range of opacity: 0-255.
                      */
   uint32_t face_index;
-  int    layout_dir; /* 1 = vertical, 0 = horizontal */
-  int    extend;
-  int    slant;
-  int    embolden;
+  int      layout_dir; /* 1 = vertical, 0 = horizontal */
+  int      extend;
+  int      slant;
+  int      embolden;
 } *def_fonts = NULL;
 
 #define XDV_FLAG_VERTICAL       0x0100
@@ -836,7 +840,7 @@
 {
   xpos -= compensation.x;
   ypos -= compensation.y;
-  pdf_dev_set_string(xpos, ypos, instr_ptr, instr_len, width, font_id, ctype);
+  pdf_dev_set_string(xpos, ypos, instr_ptr, instr_len, width, font_id);
 }
 
 static void
@@ -1029,8 +1033,21 @@
     }
     ERROR("Cannot proceed without .vf or \"physical\" font for PDF output...");
   }
-  loaded_fonts[cur_id].type    = PHYSICAL;
-  loaded_fonts[cur_id].font_id = font_id;
+  memset(loaded_fonts[cur_id].padbytes, 0, 4);
+  if (mrec) {
+    if (mrec->opt.mapc >= 0) {
+      loaded_fonts[cur_id].padbytes[2] = (mrec->opt.mapc >> 8) & 0xff; 
+    }
+    if (mrec->enc_name && !strcmp(mrec->enc_name, "unicode")) {
+      if (mrec->opt.mapc >= 0) {
+        loaded_fonts[cur_id].padbytes[0] = (mrec->opt.mapc >> 24) & 0xff;
+        loaded_fonts[cur_id].padbytes[1] = (mrec->opt.mapc >> 16) & 0xff;
+      }
+    }
+  }
+  loaded_fonts[cur_id].minbytes = pdf_dev_font_minbytes(font_id);
+  loaded_fonts[cur_id].type     = PHYSICAL;
+  loaded_fonts[cur_id].font_id  = font_id;
 
   if (dpx_conf.verbose_level > 0)
     MESG(">");
@@ -1086,9 +1103,10 @@
 
   memset(&loaded_fonts[cur_id], 0, sizeof (struct loaded_font));
 
-  loaded_fonts[cur_id].font_id = pdf_dev_locate_font(fontmap_key, ptsize);
-  loaded_fonts[cur_id].size    = ptsize;
-  loaded_fonts[cur_id].type    = NATIVE;
+  loaded_fonts[cur_id].font_id  = pdf_dev_locate_font(fontmap_key, ptsize);
+  loaded_fonts[cur_id].size     = ptsize;
+  loaded_fonts[cur_id].type     = NATIVE;
+  loaded_fonts[cur_id].minbytes = pdf_dev_font_minbytes(loaded_fonts[cur_id].font_id);
   free(fontmap_key);
 
   if (is_type1) {
@@ -1260,6 +1278,7 @@
   struct loaded_font *font;
   spt_t               width, height, depth;
   unsigned char       wbuf[4];
+  int                 cbytes = 1;
 
   if (current_font < 0) {
     ERROR("No font selected!");
@@ -1284,27 +1303,35 @@
   if (lr_mode == RTYPESETTING)
     dvi_right(width); /* Will actually move left */
 
+  memcpy(wbuf, font->padbytes, 4);
+  cbytes = font->minbytes;
   switch (font->type) {
   case  PHYSICAL:
-    if (ch > 65535) { /* _FIXME_ */
-      wbuf[0] = (UTF32toUTF16HS(ch) >> 8) & 0xff;
-      wbuf[1] =  UTF32toUTF16HS(ch)       & 0xff;
-      wbuf[2] = (UTF32toUTF16LS(ch) >> 8) & 0xff;
-      wbuf[3] =  UTF32toUTF16LS(ch)       & 0xff;
-      set_string(dvi_state.h, -dvi_state.v, wbuf, 4, width, font->font_id, 2);
-    } else if (ch > 255) { /* _FIXME_ */
-      wbuf[0] = (ch >> 8) & 0xff;
-      wbuf[1] =  ch & 0xff;
-      set_string(dvi_state.h, -dvi_state.v, wbuf, 2, width, font->font_id, 2);
+    if (ch > 65535) {
+      /* FIXME: uptex specific undocumented */
+      if (tfm_is_jfm(font->tfm_id)) {
+        wbuf[0] = (UTF32toUTF16HS(ch) >> 8) & 0xff;
+        wbuf[1] =  UTF32toUTF16HS(ch)       & 0xff;
+        wbuf[2] = (UTF32toUTF16LS(ch) >> 8) & 0xff;
+        wbuf[3] =  UTF32toUTF16LS(ch)       & 0xff;
+      } else {
+        wbuf[0] = (ch >> 24) & 0xff;
+        wbuf[1] = (ch >> 16) & 0xff;
+        wbuf[2] = (ch >>  8) & 0xff;
+        wbuf[3] =  ch        & 0xff;
+      }
+      cbytes  = 4;
+    } else if (ch > 255) {
+      wbuf[2] = (ch >> 8) & 0xff;
+      wbuf[3] =  ch       & 0xff;
     } else if (font->subfont_id >= 0) {
-      unsigned short uch = lookup_sfd_record(font->subfont_id, (unsigned char) ch);
-      wbuf[0] = (uch >> 8) & 0xff;
-      wbuf[1] =  uch & 0xff;
-      set_string(dvi_state.h, -dvi_state.v, wbuf, 2, width, font->font_id, 2);
+      uint16_t uch = lookup_sfd_record(font->subfont_id, (unsigned char) ch);
+      wbuf[2] = (uch >> 8) & 0xff;
+      wbuf[3] =  uch       & 0xff;
     } else {
-      wbuf[0] = (unsigned char) ch;
-      set_string(dvi_state.h, -dvi_state.v, wbuf, 1, width, font->font_id, 1);
+      wbuf[3] = (unsigned char) ch;
     }
+    set_string(dvi_state.h, -dvi_state.v, wbuf + 4 - cbytes, cbytes, width, font->font_id, 0);
     if (dvi_is_tracking_boxes()) {
       pdf_rect rect;
 
@@ -1338,6 +1365,7 @@
   struct loaded_font *font;
   spt_t               width, height, depth;
   unsigned char       wbuf[4];
+  int                 cbytes = 1;
 
   if (current_font < 0) {
     ERROR("No font selected!");
@@ -1345,36 +1373,40 @@
 
   font = &loaded_fonts[current_font];
 
+  memcpy(wbuf, font->padbytes, 4);
+  cbytes = font->minbytes;
   switch (font->type) {
   case  PHYSICAL:
     width = tfm_get_fw_width(font->tfm_id, ch);
-    width = sqxfw(font->size, width);
-
+    width = sqxfw(font->size, width);  
     /* Treat a single character as a one byte string and use the
      * string routine.
-     */
+     */    
     if (ch > 65535) {
-      /* FIXME: This is a private extension made by someone... */
-      wbuf[0] = (UTF32toUTF16HS(ch) >> 8) & 0xff;
-      wbuf[1] =  UTF32toUTF16HS(ch)       & 0xff;
-      wbuf[2] = (UTF32toUTF16LS(ch) >> 8) & 0xff;
-      wbuf[3] =  UTF32toUTF16LS(ch)       & 0xff;
-      set_string(dvi_state.h, -dvi_state.v, wbuf, 4, width, font->font_id, 2);
-    } else if (ch > 255) { /* _FIXME_ */
-      wbuf[0] = (ch >> 8) & 0xff;
-      wbuf[1] =  ch & 0xff;
-      set_string(dvi_state.h, -dvi_state.v, wbuf, 2, width, font->font_id, 2);
+      /* FIXME: uptex specific undocumented */
+      if (tfm_is_jfm(font->tfm_id)) {
+        wbuf[0] = (UTF32toUTF16HS(ch) >> 8) & 0xff;
+        wbuf[1] =  UTF32toUTF16HS(ch)       & 0xff;
+        wbuf[2] = (UTF32toUTF16LS(ch) >> 8) & 0xff;
+        wbuf[3] =  UTF32toUTF16LS(ch)       & 0xff;
+      } else {
+        wbuf[0] = (ch >> 24) & 0xff;
+        wbuf[1] = (ch >> 16) & 0xff;
+        wbuf[2] = (ch >>  8) & 0xff;
+        wbuf[3] =  ch        & 0xff;
+      }
+      cbytes  = 4;
+    } else if (ch > 255) {
+      wbuf[2] = (ch >> 8) & 0xff;
+      wbuf[3] =  ch       & 0xff;
     } else if (font->subfont_id >= 0) {
-      unsigned int uch;
-
-      uch = lookup_sfd_record(font->subfont_id, (unsigned char) ch);
-      wbuf[0] = (uch >> 8) & 0xff;
-      wbuf[1] =  uch & 0xff;
-      set_string(dvi_state.h, -dvi_state.v, wbuf, 2, width, font->font_id, 2);
+      uint16_t uch = lookup_sfd_record(font->subfont_id, (unsigned char) ch);
+      wbuf[2] = (uch >> 8) & 0xff;
+      wbuf[3] =  uch       & 0xff;
     } else {
-      wbuf[0] = (unsigned char) ch;
-      set_string(dvi_state.h, -dvi_state.v, wbuf, 1, width, font->font_id, 1);
+      wbuf[3] = (unsigned char) ch;
     }
+    set_string(dvi_state.h, -dvi_state.v, wbuf + 4 - cbytes, cbytes, width, font->font_id, 0);
     if (dvi_is_tracking_boxes()) {
       pdf_rect rect;
 

Modified: trunk/Build/source/texk/dvipdfm-x/mpost.c
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/mpost.c	2020-10-02 22:30:13 UTC (rev 56517)
+++ trunk/Build/source/texk/dvipdfm-x/mpost.c	2020-10-02 22:57:53 UTC (rev 56518)
@@ -831,7 +831,7 @@
 		       (spt_t)(cp.y * dev_unit_dviunit()),
 		       ustr, length * 2,
 		       (spt_t)(text_width*dev_unit_dviunit()),
-		       font->font_id, 0);
+		       font->font_id);
     RELEASE(ustr);
   } else {
 #define FWBASE ((double) (1<<20))
@@ -843,7 +843,7 @@
 		       (spt_t)(cp.y * dev_unit_dviunit()),
 		       strptr, length,
 		       (spt_t)(text_width*dev_unit_dviunit()),
-		       font->font_id, 0);
+		       font->font_id);
   }
 
   if (pdf_dev_get_font_wmode(font->font_id)) {

Modified: trunk/Build/source/texk/dvipdfm-x/pdfdev.c
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/pdfdev.c	2020-10-02 22:30:13 UTC (rev 56517)
+++ trunk/Build/source/texk/dvipdfm-x/pdfdev.c	2020-10-02 22:57:53 UTC (rev 56518)
@@ -218,18 +218,6 @@
   double   extend;
   double   slant;
   double   bold;  /* Boldness prameter */
-
-  /* Compatibility */
-  int      mapc;  /* Nasty workaround for Omega */
-
-  /* There are no font metric format supporting four-bytes
-   * charcter code. So we should provide an option to specify
-   * UCS group and plane.
-   */
-  int      ucs_group;
-  int      ucs_plane;
-
-  int      is_unicode;
 };
 
 /*
@@ -924,77 +912,16 @@
  * used as the return value of handle_multibyte_string(): str_ptr can point these.
  */
 static unsigned char sbuf0[FORMAT_BUF_SIZE];
-static unsigned char sbuf1[FORMAT_BUF_SIZE];
 
 static int
-handle_multibyte_string (struct dev_font *font,
-                         const unsigned char **str_ptr, int *str_len, int ctype)
+handle_multibyte_string (struct dev_font *font, const unsigned char **str_ptr, int *str_len)
 {
   const unsigned char *p;
-  int            i, length;
+  int                  length;
 
   p      = *str_ptr;
   length = *str_len;
 
-  /* _FIXME_ */
-  if (font->is_unicode) { /* UCS-4 */
-    if (ctype == 1) {
-      if (length * 4 >= FORMAT_BUF_SIZE) {
-        WARN("Too long string...");
-        return -1;
-      }
-      for (i = 0; i < length; i++) {
-        sbuf1[i*4  ] = font->ucs_group;
-        sbuf1[i*4+1] = font->ucs_plane;
-        sbuf1[i*4+2] = '\0';
-        sbuf1[i*4+3] = p[i];
-      }
-      length *= 4;
-    } else if (ctype == 2) {
-      int len = 0;
-
-      if (length * 2 >= FORMAT_BUF_SIZE) {
-        WARN("Too long string...");
-        return -1;
-      }
-      for (i = 0; i < length; i += 2, len += 4) {
-        sbuf1[len  ] = font->ucs_group;
-        if ((p[i] & 0xf8) == 0xd8) {
-          int c;
-          /* Check for valid surrogate pair.  */ 
-          if ((p[i] & 0xfc) != 0xd8 || i + 2 >= length || (p[i+2] & 0xfc) != 0xdc) {
-            WARN("Invalid surrogate p[%d]=%02X...", i, p[i]);
-            return -1;
-          }
-          c = (((p[i] & 0x03) << 10) | (p[i+1] << 2) | (p[i+2] & 0x03)) + 0x100;
-          sbuf1[len+1] = (c >> 8) & 0xff;
-          sbuf1[len+2] = c & 0xff;
-          i += 2;
-        } else {
-          sbuf1[len+1] = font->ucs_plane;
-          sbuf1[len+2] = p[i];
-        }
-        sbuf1[len+3] = p[i+1];
-      }
-      length = len;
-    }
-    p = sbuf1;
-  } else if (ctype == 1 && font->mapc >= 0) {
-    /* Omega workaround...
-     * Translate single-byte chars to double byte code space.
-     */
-    if (length * 2 >= FORMAT_BUF_SIZE) {
-      WARN("Too long string...");
-      return -1;
-    }
-    for (i = 0; i < length; i++) {
-      sbuf1[i*2  ] = (font->mapc & 0xff);
-      sbuf1[i*2+1] = p[i];
-    }
-    length *= 2;
-    p       = sbuf1;
-  }
-
   /*
    * Font is double-byte font. Output is assumed to be 16-bit fixed length
    * encoding.
@@ -1002,9 +929,9 @@
    */
   if (font->enc_id >= 0) {
     const unsigned char *inbuf;
-    unsigned char *outbuf;
-    int            inbytesleft, outbytesleft;
-    CMap          *cmap;
+    unsigned char       *outbuf;
+    int                  inbytesleft, outbytesleft;
+    CMap                *cmap;
 
     cmap         = CMap_cache_get(font->enc_id);
     inbuf        = p;
@@ -1012,8 +939,7 @@
     inbytesleft  = length;
     outbytesleft = FORMAT_BUF_SIZE;
 
-    CMap_decode(cmap,
-                &inbuf, &inbytesleft, &outbuf, &outbytesleft);
+    CMap_decode(cmap, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
     if (inbytesleft != 0) {
       WARN("CMap conversion failed. (%d bytes remains)", inbytesleft);
       return -1;
@@ -1027,23 +953,9 @@
   return 0;
 }
 
-/*
- * ctype:
- *  -1 input string contains 2-byte Freetype glyph index values
- *     (XeTeX only)
- *  0  byte-width of char can be variable and input string
- *     is properly encoded.
- *  n  Single character cosumes n bytes in input string.
- *
- * _FIXME_
- * -->
- * selectfont(font_name, point_size) and show_string(pos, string)
- */
 void
 pdf_dev_set_string (spt_t xpos, spt_t ypos,
-                    const void *instr_ptr, int instr_len,
-                    spt_t width,
-                    int   font_id, int ctype)
+                    const void *instr_ptr, int instr_len, spt_t width, int font_id)
 {
   pdf_dev             *p = current_device();
   struct dev_font     *font;
@@ -1074,7 +986,7 @@
   length  = instr_len;
 
   if (font->format == PDF_FONTTYPE_COMPOSITE) {
-    if (handle_multibyte_string(font, &str_ptr, &length, ctype) < 0) {
+    if (handle_multibyte_string(font, &str_ptr, &length) < 0) {
       ERROR("Error in converting input string...");
       return;
     }
@@ -1451,33 +1363,10 @@
   font->extend     = 1.0;
   font->slant      = 0.0;
   font->bold       = 0.0;
-  font->mapc       = -1;
-  font->is_unicode = 0;
-  font->ucs_group  = 0;
-  font->ucs_plane  = 0;
-
   if (mrec) {
     font->extend = mrec->opt.extend;
     font->slant  = mrec->opt.slant;
     font->bold   = mrec->opt.bold;
-    if (mrec->opt.mapc >= 0)
-      font->mapc = (mrec->opt.mapc >> 8) & 0xff;
-    else {
-      font->mapc = -1;
-    }
-    if (mrec->enc_name &&
-        !strcmp(mrec->enc_name, "unicode")) {
-      font->is_unicode   = 1;
-      if (mrec->opt.mapc >= 0) {
-        font->ucs_group  = (mrec->opt.mapc >> 24) & 0xff;
-        font->ucs_plane  = (mrec->opt.mapc >> 16) & 0xff;
-      } else {
-        font->ucs_group  = 0;
-        font->ucs_plane  = 0;
-      }
-    } else {
-      font->is_unicode   = 0;
-    }
   }
 
   return  p->num_dev_fonts++;
@@ -1940,3 +1829,21 @@
 
   return 0;
 }
+
+int
+pdf_dev_font_minbytes (int font_id)
+{
+  pdf_dev         *p        = current_device();
+  struct dev_font *font;
+  int              minbytes = 1;
+
+  font = GET_FONT(p, font_id);
+  if (font && font->format == PDF_FONTTYPE_COMPOSITE) {
+    CMap *cmap;
+
+    cmap     = CMap_cache_get(font->enc_id);
+    minbytes = CMap_get_profile(cmap, CMAP_PROF_TYPE_INBYTES_MIN);
+  }
+
+  return minbytes;
+}

Modified: trunk/Build/source/texk/dvipdfm-x/pdfdev.h
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/pdfdev.h	2020-10-02 22:30:13 UTC (rev 56517)
+++ trunk/Build/source/texk/dvipdfm-x/pdfdev.h	2020-10-02 22:57:53 UTC (rev 56518)
@@ -104,7 +104,7 @@
  */
 extern void   pdf_dev_set_string (spt_t xpos, spt_t ypos,
                                   const void *instr_ptr, int instr_len,
-                                  spt_t text_width, int font_id, int ctype);
+                                  spt_t text_width, int font_id);
 extern void   pdf_dev_set_rule   (spt_t xpos, spt_t ypos, spt_t width, spt_t height);
 
 /* Place XObject: rect returned */
@@ -174,4 +174,5 @@
 extern void   pdf_dev_begin_actualtext (uint16_t *unicodes, int len);
 extern void   pdf_dev_end_actualtext   (void);
 
+extern int    pdf_dev_font_minbytes    (int font_id);
 #endif /* _PDFDEV_H_ */

Modified: trunk/Build/source/texk/dvipdfm-x/pdffont.c
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/pdffont.c	2020-10-02 22:30:13 UTC (rev 56517)
+++ trunk/Build/source/texk/dvipdfm-x/pdffont.c	2020-10-02 22:57:53 UTC (rev 56518)
@@ -689,37 +689,6 @@
   return found ? font_id : -1;
 }
 
-#if 1
-static void
-compat_set_mapchar (int cmap_id, fontmap_rec *mrec)
-{
-  CMap *cmap;
-  int   cmap_type, minbytes;
-
-  cmap      = CMap_cache_get(cmap_id);
-  cmap_type = CMap_get_type(cmap);
-  minbytes  = CMap_get_profile(cmap, CMAP_PROF_TYPE_INBYTES_MIN);
-
-  if (cmap_type != CMAP_TYPE_IDENTITY &&
-      cmap_type != CMAP_TYPE_CODE_TO_CID &&
-      cmap_type != CMAP_TYPE_TO_UNICODE) {
-    WARN("Only 16-bit encoding supported for output encoding.");
-  }
-  /* Turn on map option. */
-  if (minbytes == 2 && mrec->opt.mapc < 0) {
-    if (dpx_conf.verbose_level > 0) {
-      MESG("\n");
-      MESG("pdf_font>> Input encoding \"%s\" requires at least 2 bytes.\n", CMap_get_name(cmap));
-      MESG("pdf_font>> The -m <00> option will be assumed for \"%s\".\n", mrec->font_name);
-    }
-    /* FIXME: The following code modifies mrec. */
-    mrec->opt.mapc = 0;
-  }
-
-  return;
-}
-#endif
-
 static int
 create_font_alias (const char *ident, int font_id)
 {
@@ -779,7 +748,7 @@
 }
 
 int
-pdf_font_load_font (const char *ident, double font_scale, fontmap_rec *mrec)
+pdf_font_load_font (const char *ident, double font_scale, const fontmap_rec *mrec)
 {
   int         font_id = -1;
   pdf_font   *font;
@@ -831,11 +800,6 @@
       }
     } else if (!strstr(mrec->enc_name, ".enc") || strstr(mrec->enc_name, ".cmap")) {
       cmap_id = CMap_cache_find(mrec->enc_name);
-#if 1
-      if (cmap_id >= 0) {
-        compat_set_mapchar(cmap_id, mrec);
-      }
-#endif
     }
     if (cmap_id < 0) {
       encoding_id = pdf_encoding_findresource(mrec->enc_name);

Modified: trunk/Build/source/texk/dvipdfm-x/pdffont.h
===================================================================
--- trunk/Build/source/texk/dvipdfm-x/pdffont.h	2020-10-02 22:30:13 UTC (rev 56517)
+++ trunk/Build/source/texk/dvipdfm-x/pdffont.h	2020-10-02 22:57:53 UTC (rev 56518)
@@ -133,7 +133,7 @@
  * various optical sizes supported in the future.
  */
 extern int      pdf_font_findresource  (const char *tex_name, double font_scale);
-extern int      pdf_font_load_font     (const char *tex_name, double font_scale, fontmap_rec *mrec);
+extern int      pdf_font_load_font     (const char *tex_name, double font_scale, const fontmap_rec *mrec);
 
 extern pdf_font *pdf_get_font_data      (int font_id);
 



More information about the tex-live-commits mailing list.