summaryrefslogtreecommitdiff
path: root/Build
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2013-07-10 15:35:21 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2013-07-10 15:35:21 +0000
commit5545f2236f9abc704ba6cc442841363b0ac5eb1b (patch)
treef74b65e87bc2f6be84feb3d5b88915e66ee7b470 /Build
parent233c204ecbc43730d329352806a24be175ced0b3 (diff)
dvipdfm-x: Continue merging dvipdfmx and xdvipdfmx
git-svn-id: svn://tug.org/texlive/trunk@31156 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build')
-rw-r--r--Build/source/texk/dvipdfm-x/ChangeLog13
-rw-r--r--Build/source/texk/dvipdfm-x/Makefile.am18
-rw-r--r--Build/source/texk/dvipdfm-x/Makefile.in185
-rw-r--r--Build/source/texk/dvipdfm-x/cff.c (renamed from Build/source/texk/dvipdfm-x/src/cff.c)12
-rw-r--r--Build/source/texk/dvipdfm-x/dvi.h (renamed from Build/source/texk/dvipdfm-x/xsrc/dvi.h)4
-rw-r--r--Build/source/texk/dvipdfm-x/mpost.c (renamed from Build/source/texk/dvipdfm-x/src/mpost.c)12
-rw-r--r--Build/source/texk/dvipdfm-x/pdfdev.h (renamed from Build/source/texk/dvipdfm-x/xsrc/pdfdev.h)4
-rw-r--r--Build/source/texk/dvipdfm-x/pdfdoc.h (renamed from Build/source/texk/dvipdfm-x/src/pdfdoc.h)14
-rw-r--r--Build/source/texk/dvipdfm-x/pdfdraw.h (renamed from Build/source/texk/dvipdfm-x/xsrc/pdfdraw.h)18
-rw-r--r--Build/source/texk/dvipdfm-x/src/dvi.c603
-rw-r--r--Build/source/texk/dvipdfm-x/src/dvi.h96
-rw-r--r--Build/source/texk/dvipdfm-x/src/dvipdfmx.c145
-rw-r--r--Build/source/texk/dvipdfm-x/src/epdf.c3
-rw-r--r--Build/source/texk/dvipdfm-x/src/pdfdev.h228
-rw-r--r--Build/source/texk/dvipdfm-x/src/pdfdraw.h167
-rw-r--r--Build/source/texk/dvipdfm-x/src/xbb.c31
-rw-r--r--Build/source/texk/dvipdfm-x/xsrc/cff.c1501
-rw-r--r--Build/source/texk/dvipdfm-x/xsrc/dvi.c55
-rw-r--r--Build/source/texk/dvipdfm-x/xsrc/dvipdfmx.c51
-rw-r--r--Build/source/texk/dvipdfm-x/xsrc/epdf.c3
-rw-r--r--Build/source/texk/dvipdfm-x/xsrc/mpost.c1671
-rw-r--r--Build/source/texk/dvipdfm-x/xsrc/pdfdoc.h137
-rw-r--r--Build/source/texk/dvipdfm-x/xsrc/xbb.c57
23 files changed, 897 insertions, 4131 deletions
diff --git a/Build/source/texk/dvipdfm-x/ChangeLog b/Build/source/texk/dvipdfm-x/ChangeLog
index d36393c5ad7..0b1fa9bb906 100644
--- a/Build/source/texk/dvipdfm-x/ChangeLog
+++ b/Build/source/texk/dvipdfm-x/ChangeLog
@@ -1,3 +1,14 @@
+2013-07-10 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * Removed diffs between src/ and xsrc/ version of these files
+ and moved them to the top-level: cff.c, dvi.h, mpost.c,
+ pdfdev.h, pdfdoc.h, pdfdraw.h.
+
+ * Reduced dvipdfmx/xdvipdfmx diffs in these files:
+ dvi.c, dvipdfmx.c, epdf.c, xbb.c.
+
+ * *src/dvipdfmx.c: Use FILESTRCASEEQ instead of !STRN_CMP.
+
2013-07-08 Peter Breitenlohner <peb@mppmu.mpg.de>
* Removed diffs between src/ and xsrc/ version of these files
@@ -10,7 +21,7 @@
2013-07-06 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
- * src/dvi.c, xsrc/dvi.c: Use !FILESTRCASEEQ instead of STR_CMP
+ * xsrc/dvi.c: Use !FILESTRCASEEQ instead of STR_CMP.
2013-07-05 Peter Breitenlohner <peb@mppmu.mpg.de>
diff --git a/Build/source/texk/dvipdfm-x/Makefile.am b/Build/source/texk/dvipdfm-x/Makefile.am
index c650cc326fa..2bacfc0cd31 100644
--- a/Build/source/texk/dvipdfm-x/Makefile.am
+++ b/Build/source/texk/dvipdfm-x/Makefile.am
@@ -35,6 +35,7 @@ common_sources = \
agl.h \
bmpimage.c \
bmpimage.h \
+ cff.c \
cff.h \
cff_dict.h \
cff_limits.h \
@@ -64,6 +65,7 @@ common_sources = \
dpxfile.h \
dpxutil.c \
dpxutil.h \
+ dvi.h \
dvicodes.h \
epdf.h \
error.c \
@@ -75,6 +77,7 @@ common_sources = \
mem.h \
mfileio.c \
mfileio.h \
+ mpost.c \
mpost.h \
numbers.c \
numbers.h \
@@ -83,6 +86,9 @@ common_sources = \
otl_opt.c \
otl_opt.h \
pdfcolor.h \
+ pdfdev.h \
+ pdfdoc.h \
+ pdfdraw.h \
pdfencoding.c \
pdfencoding.h \
pdfencrypt.h \
@@ -146,23 +152,17 @@ common_sources = \
xbb.h
dvipdfmx_sources = \
- src/cff.c \
src/cff_dict.c \
src/cidtype0.c \
src/dvi.c \
- src/dvi.h \
src/dvipdfmx.c \
dvipdfmx.h \
src/epdf.c \
src/jpegimage.c \
- src/mpost.c \
src/pdfcolor.c \
src/pdfdev.c \
- src/pdfdev.h \
src/pdfdoc.c \
- src/pdfdoc.h \
src/pdfdraw.c \
- src/pdfdraw.h \
src/pdfencrypt.c \
src/pdfnames.c \
src/pdfnames.h \
@@ -182,22 +182,16 @@ dvipdfmx_sources = \
src/xbb.c
xdvipdfmx_sources = \
- xsrc/cff.c \
xsrc/cff_dict.c \
xsrc/cidtype0.c \
xsrc/dvi.c \
- xsrc/dvi.h \
xsrc/dvipdfmx.c \
xsrc/epdf.c \
xsrc/jpegimage.c \
- xsrc/mpost.c \
xsrc/pdfcolor.c \
xsrc/pdfdev.c \
- xsrc/pdfdev.h \
xsrc/pdfdoc.c \
- xsrc/pdfdoc.h \
xsrc/pdfdraw.c \
- xsrc/pdfdraw.h \
xsrc/pdfencrypt.c \
xsrc/pdfnames.c \
xsrc/pdfnames.h \
diff --git a/Build/source/texk/dvipdfm-x/Makefile.in b/Build/source/texk/dvipdfm-x/Makefile.in
index 9ebe190797f..10d6a860a6e 100644
--- a/Build/source/texk/dvipdfm-x/Makefile.in
+++ b/Build/source/texk/dvipdfm-x/Makefile.in
@@ -154,13 +154,14 @@ am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
am__objects_1 = dvipdfmx-agl.$(OBJEXT) dvipdfmx-bmpimage.$(OBJEXT) \
- dvipdfmx-cid.$(OBJEXT) dvipdfmx-cidtype2.$(OBJEXT) \
- dvipdfmx-cmap.$(OBJEXT) dvipdfmx-cmap_read.$(OBJEXT) \
- dvipdfmx-cmap_write.$(OBJEXT) dvipdfmx-cs_type2.$(OBJEXT) \
- dvipdfmx-dpxconf.$(OBJEXT) dvipdfmx-dpxcrypt.$(OBJEXT) \
- dvipdfmx-dpxfile.$(OBJEXT) dvipdfmx-dpxutil.$(OBJEXT) \
- dvipdfmx-error.$(OBJEXT) dvipdfmx-fontmap.$(OBJEXT) \
- dvipdfmx-mem.$(OBJEXT) dvipdfmx-mfileio.$(OBJEXT) \
+ dvipdfmx-cff.$(OBJEXT) dvipdfmx-cid.$(OBJEXT) \
+ dvipdfmx-cidtype2.$(OBJEXT) dvipdfmx-cmap.$(OBJEXT) \
+ dvipdfmx-cmap_read.$(OBJEXT) dvipdfmx-cmap_write.$(OBJEXT) \
+ dvipdfmx-cs_type2.$(OBJEXT) dvipdfmx-dpxconf.$(OBJEXT) \
+ dvipdfmx-dpxcrypt.$(OBJEXT) dvipdfmx-dpxfile.$(OBJEXT) \
+ dvipdfmx-dpxutil.$(OBJEXT) dvipdfmx-error.$(OBJEXT) \
+ dvipdfmx-fontmap.$(OBJEXT) dvipdfmx-mem.$(OBJEXT) \
+ dvipdfmx-mfileio.$(OBJEXT) dvipdfmx-mpost.$(OBJEXT) \
dvipdfmx-numbers.$(OBJEXT) dvipdfmx-otl_conf.$(OBJEXT) \
dvipdfmx-otl_opt.$(OBJEXT) dvipdfmx-pdfencoding.$(OBJEXT) \
dvipdfmx-pdffont.$(OBJEXT) dvipdfmx-pdfparse.$(OBJEXT) \
@@ -175,11 +176,10 @@ am__objects_1 = dvipdfmx-agl.$(OBJEXT) dvipdfmx-bmpimage.$(OBJEXT) \
dvipdfmx-tt_table.$(OBJEXT) dvipdfmx-type0.$(OBJEXT) \
dvipdfmx-unicode.$(OBJEXT) dvipdfmx-vf.$(OBJEXT)
am__dirstamp = $(am__leading_dot)dirstamp
-am__objects_2 = src/dvipdfmx-cff.$(OBJEXT) \
- src/dvipdfmx-cff_dict.$(OBJEXT) \
+am__objects_2 = src/dvipdfmx-cff_dict.$(OBJEXT) \
src/dvipdfmx-cidtype0.$(OBJEXT) src/dvipdfmx-dvi.$(OBJEXT) \
src/dvipdfmx-dvipdfmx.$(OBJEXT) src/dvipdfmx-epdf.$(OBJEXT) \
- src/dvipdfmx-jpegimage.$(OBJEXT) src/dvipdfmx-mpost.$(OBJEXT) \
+ src/dvipdfmx-jpegimage.$(OBJEXT) \
src/dvipdfmx-pdfcolor.$(OBJEXT) src/dvipdfmx-pdfdev.$(OBJEXT) \
src/dvipdfmx-pdfdoc.$(OBJEXT) src/dvipdfmx-pdfdraw.$(OBJEXT) \
src/dvipdfmx-pdfencrypt.$(OBJEXT) \
@@ -199,13 +199,14 @@ am__DEPENDENCIES_1 =
dvipdfmx_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am__objects_3 = xdvipdfmx-agl.$(OBJEXT) xdvipdfmx-bmpimage.$(OBJEXT) \
- xdvipdfmx-cid.$(OBJEXT) xdvipdfmx-cidtype2.$(OBJEXT) \
- xdvipdfmx-cmap.$(OBJEXT) xdvipdfmx-cmap_read.$(OBJEXT) \
- xdvipdfmx-cmap_write.$(OBJEXT) xdvipdfmx-cs_type2.$(OBJEXT) \
- xdvipdfmx-dpxconf.$(OBJEXT) xdvipdfmx-dpxcrypt.$(OBJEXT) \
- xdvipdfmx-dpxfile.$(OBJEXT) xdvipdfmx-dpxutil.$(OBJEXT) \
- xdvipdfmx-error.$(OBJEXT) xdvipdfmx-fontmap.$(OBJEXT) \
- xdvipdfmx-mem.$(OBJEXT) xdvipdfmx-mfileio.$(OBJEXT) \
+ xdvipdfmx-cff.$(OBJEXT) xdvipdfmx-cid.$(OBJEXT) \
+ xdvipdfmx-cidtype2.$(OBJEXT) xdvipdfmx-cmap.$(OBJEXT) \
+ xdvipdfmx-cmap_read.$(OBJEXT) xdvipdfmx-cmap_write.$(OBJEXT) \
+ xdvipdfmx-cs_type2.$(OBJEXT) xdvipdfmx-dpxconf.$(OBJEXT) \
+ xdvipdfmx-dpxcrypt.$(OBJEXT) xdvipdfmx-dpxfile.$(OBJEXT) \
+ xdvipdfmx-dpxutil.$(OBJEXT) xdvipdfmx-error.$(OBJEXT) \
+ xdvipdfmx-fontmap.$(OBJEXT) xdvipdfmx-mem.$(OBJEXT) \
+ xdvipdfmx-mfileio.$(OBJEXT) xdvipdfmx-mpost.$(OBJEXT) \
xdvipdfmx-numbers.$(OBJEXT) xdvipdfmx-otl_conf.$(OBJEXT) \
xdvipdfmx-otl_opt.$(OBJEXT) xdvipdfmx-pdfencoding.$(OBJEXT) \
xdvipdfmx-pdffont.$(OBJEXT) xdvipdfmx-pdfparse.$(OBJEXT) \
@@ -219,13 +220,11 @@ am__objects_3 = xdvipdfmx-agl.$(OBJEXT) xdvipdfmx-bmpimage.$(OBJEXT) \
xdvipdfmx-tt_gsub.$(OBJEXT) xdvipdfmx-tt_post.$(OBJEXT) \
xdvipdfmx-tt_table.$(OBJEXT) xdvipdfmx-type0.$(OBJEXT) \
xdvipdfmx-unicode.$(OBJEXT) xdvipdfmx-vf.$(OBJEXT)
-am__objects_4 = xsrc/xdvipdfmx-cff.$(OBJEXT) \
- xsrc/xdvipdfmx-cff_dict.$(OBJEXT) \
+am__objects_4 = xsrc/xdvipdfmx-cff_dict.$(OBJEXT) \
xsrc/xdvipdfmx-cidtype0.$(OBJEXT) xsrc/xdvipdfmx-dvi.$(OBJEXT) \
xsrc/xdvipdfmx-dvipdfmx.$(OBJEXT) \
xsrc/xdvipdfmx-epdf.$(OBJEXT) \
xsrc/xdvipdfmx-jpegimage.$(OBJEXT) \
- xsrc/xdvipdfmx-mpost.$(OBJEXT) \
xsrc/xdvipdfmx-pdfcolor.$(OBJEXT) \
xsrc/xdvipdfmx-pdfdev.$(OBJEXT) \
xsrc/xdvipdfmx-pdfdoc.$(OBJEXT) \
@@ -683,6 +682,7 @@ common_sources = \
agl.h \
bmpimage.c \
bmpimage.h \
+ cff.c \
cff.h \
cff_dict.h \
cff_limits.h \
@@ -712,6 +712,7 @@ common_sources = \
dpxfile.h \
dpxutil.c \
dpxutil.h \
+ dvi.h \
dvicodes.h \
epdf.h \
error.c \
@@ -723,6 +724,7 @@ common_sources = \
mem.h \
mfileio.c \
mfileio.h \
+ mpost.c \
mpost.h \
numbers.c \
numbers.h \
@@ -731,6 +733,9 @@ common_sources = \
otl_opt.c \
otl_opt.h \
pdfcolor.h \
+ pdfdev.h \
+ pdfdoc.h \
+ pdfdraw.h \
pdfencoding.c \
pdfencoding.h \
pdfencrypt.h \
@@ -794,23 +799,17 @@ common_sources = \
xbb.h
dvipdfmx_sources = \
- src/cff.c \
src/cff_dict.c \
src/cidtype0.c \
src/dvi.c \
- src/dvi.h \
src/dvipdfmx.c \
dvipdfmx.h \
src/epdf.c \
src/jpegimage.c \
- src/mpost.c \
src/pdfcolor.c \
src/pdfdev.c \
- src/pdfdev.h \
src/pdfdoc.c \
- src/pdfdoc.h \
src/pdfdraw.c \
- src/pdfdraw.h \
src/pdfencrypt.c \
src/pdfnames.c \
src/pdfnames.h \
@@ -830,22 +829,16 @@ dvipdfmx_sources = \
src/xbb.c
xdvipdfmx_sources = \
- xsrc/cff.c \
xsrc/cff_dict.c \
xsrc/cidtype0.c \
xsrc/dvi.c \
- xsrc/dvi.h \
xsrc/dvipdfmx.c \
xsrc/epdf.c \
xsrc/jpegimage.c \
- xsrc/mpost.c \
xsrc/pdfcolor.c \
xsrc/pdfdev.c \
- xsrc/pdfdev.h \
xsrc/pdfdoc.c \
- xsrc/pdfdoc.h \
xsrc/pdfdraw.c \
- xsrc/pdfdraw.h \
xsrc/pdfencrypt.c \
xsrc/pdfnames.c \
xsrc/pdfnames.h \
@@ -1009,8 +1002,6 @@ src/$(am__dirstamp):
src/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) src/$(DEPDIR)
@: > src/$(DEPDIR)/$(am__dirstamp)
-src/dvipdfmx-cff.$(OBJEXT): src/$(am__dirstamp) \
- src/$(DEPDIR)/$(am__dirstamp)
src/dvipdfmx-cff_dict.$(OBJEXT): src/$(am__dirstamp) \
src/$(DEPDIR)/$(am__dirstamp)
src/dvipdfmx-cidtype0.$(OBJEXT): src/$(am__dirstamp) \
@@ -1023,8 +1014,6 @@ src/dvipdfmx-epdf.$(OBJEXT): src/$(am__dirstamp) \
src/$(DEPDIR)/$(am__dirstamp)
src/dvipdfmx-jpegimage.$(OBJEXT): src/$(am__dirstamp) \
src/$(DEPDIR)/$(am__dirstamp)
-src/dvipdfmx-mpost.$(OBJEXT): src/$(am__dirstamp) \
- src/$(DEPDIR)/$(am__dirstamp)
src/dvipdfmx-pdfcolor.$(OBJEXT): src/$(am__dirstamp) \
src/$(DEPDIR)/$(am__dirstamp)
src/dvipdfmx-pdfdev.$(OBJEXT): src/$(am__dirstamp) \
@@ -1073,8 +1062,6 @@ xsrc/$(am__dirstamp):
xsrc/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) xsrc/$(DEPDIR)
@: > xsrc/$(DEPDIR)/$(am__dirstamp)
-xsrc/xdvipdfmx-cff.$(OBJEXT): xsrc/$(am__dirstamp) \
- xsrc/$(DEPDIR)/$(am__dirstamp)
xsrc/xdvipdfmx-cff_dict.$(OBJEXT): xsrc/$(am__dirstamp) \
xsrc/$(DEPDIR)/$(am__dirstamp)
xsrc/xdvipdfmx-cidtype0.$(OBJEXT): xsrc/$(am__dirstamp) \
@@ -1087,8 +1074,6 @@ xsrc/xdvipdfmx-epdf.$(OBJEXT): xsrc/$(am__dirstamp) \
xsrc/$(DEPDIR)/$(am__dirstamp)
xsrc/xdvipdfmx-jpegimage.$(OBJEXT): xsrc/$(am__dirstamp) \
xsrc/$(DEPDIR)/$(am__dirstamp)
-xsrc/xdvipdfmx-mpost.$(OBJEXT): xsrc/$(am__dirstamp) \
- xsrc/$(DEPDIR)/$(am__dirstamp)
xsrc/xdvipdfmx-pdfcolor.$(OBJEXT): xsrc/$(am__dirstamp) \
xsrc/$(DEPDIR)/$(am__dirstamp)
xsrc/xdvipdfmx-pdfdev.$(OBJEXT): xsrc/$(am__dirstamp) \
@@ -1178,6 +1163,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/call_dvipdfmx-callexe.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvipdfmx-agl.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvipdfmx-bmpimage.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvipdfmx-cff.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvipdfmx-cid.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvipdfmx-cidtype2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvipdfmx-cmap.Po@am__quote@
@@ -1192,6 +1178,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvipdfmx-fontmap.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvipdfmx-mem.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvipdfmx-mfileio.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvipdfmx-mpost.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvipdfmx-numbers.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvipdfmx-otl_conf.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvipdfmx-otl_opt.Po@am__quote@
@@ -1220,6 +1207,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvipdfmx-vf.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-agl.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-bmpimage.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-cff.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-cid.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-cidtype2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-cmap.Po@am__quote@
@@ -1234,6 +1222,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-fontmap.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-mem.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-mfileio.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-mpost.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-numbers.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-otl_conf.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-otl_opt.Po@am__quote@
@@ -1261,14 +1250,12 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-type0.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-unicode.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdvipdfmx-vf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dvipdfmx-cff.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dvipdfmx-cff_dict.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dvipdfmx-cidtype0.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dvipdfmx-dvi.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dvipdfmx-dvipdfmx.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dvipdfmx-epdf.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dvipdfmx-jpegimage.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dvipdfmx-mpost.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dvipdfmx-pdfcolor.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dvipdfmx-pdfdev.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dvipdfmx-pdfdoc.Po@am__quote@
@@ -1288,14 +1275,12 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dvipdfmx-type1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dvipdfmx-type1c.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dvipdfmx-xbb.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@xsrc/$(DEPDIR)/xdvipdfmx-cff.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@xsrc/$(DEPDIR)/xdvipdfmx-cff_dict.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@xsrc/$(DEPDIR)/xdvipdfmx-cidtype0.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@xsrc/$(DEPDIR)/xdvipdfmx-dvi.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@xsrc/$(DEPDIR)/xdvipdfmx-dvipdfmx.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@xsrc/$(DEPDIR)/xdvipdfmx-epdf.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@xsrc/$(DEPDIR)/xdvipdfmx-jpegimage.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@xsrc/$(DEPDIR)/xdvipdfmx-mpost.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@xsrc/$(DEPDIR)/xdvipdfmx-pdfcolor.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@xsrc/$(DEPDIR)/xdvipdfmx-pdfdev.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@xsrc/$(DEPDIR)/xdvipdfmx-pdfdoc.Po@am__quote@
@@ -1382,6 +1367,20 @@ dvipdfmx-bmpimage.obj: bmpimage.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dvipdfmx-bmpimage.obj `if test -f 'bmpimage.c'; then $(CYGPATH_W) 'bmpimage.c'; else $(CYGPATH_W) '$(srcdir)/bmpimage.c'; fi`
+dvipdfmx-cff.o: cff.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dvipdfmx-cff.o -MD -MP -MF $(DEPDIR)/dvipdfmx-cff.Tpo -c -o dvipdfmx-cff.o `test -f 'cff.c' || echo '$(srcdir)/'`cff.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dvipdfmx-cff.Tpo $(DEPDIR)/dvipdfmx-cff.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cff.c' object='dvipdfmx-cff.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dvipdfmx-cff.o `test -f 'cff.c' || echo '$(srcdir)/'`cff.c
+
+dvipdfmx-cff.obj: cff.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dvipdfmx-cff.obj -MD -MP -MF $(DEPDIR)/dvipdfmx-cff.Tpo -c -o dvipdfmx-cff.obj `if test -f 'cff.c'; then $(CYGPATH_W) 'cff.c'; else $(CYGPATH_W) '$(srcdir)/cff.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dvipdfmx-cff.Tpo $(DEPDIR)/dvipdfmx-cff.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cff.c' object='dvipdfmx-cff.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dvipdfmx-cff.obj `if test -f 'cff.c'; then $(CYGPATH_W) 'cff.c'; else $(CYGPATH_W) '$(srcdir)/cff.c'; fi`
+
dvipdfmx-cid.o: cid.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dvipdfmx-cid.o -MD -MP -MF $(DEPDIR)/dvipdfmx-cid.Tpo -c -o dvipdfmx-cid.o `test -f 'cid.c' || echo '$(srcdir)/'`cid.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dvipdfmx-cid.Tpo $(DEPDIR)/dvipdfmx-cid.Po
@@ -1578,6 +1577,20 @@ dvipdfmx-mfileio.obj: mfileio.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dvipdfmx-mfileio.obj `if test -f 'mfileio.c'; then $(CYGPATH_W) 'mfileio.c'; else $(CYGPATH_W) '$(srcdir)/mfileio.c'; fi`
+dvipdfmx-mpost.o: mpost.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dvipdfmx-mpost.o -MD -MP -MF $(DEPDIR)/dvipdfmx-mpost.Tpo -c -o dvipdfmx-mpost.o `test -f 'mpost.c' || echo '$(srcdir)/'`mpost.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dvipdfmx-mpost.Tpo $(DEPDIR)/dvipdfmx-mpost.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mpost.c' object='dvipdfmx-mpost.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dvipdfmx-mpost.o `test -f 'mpost.c' || echo '$(srcdir)/'`mpost.c
+
+dvipdfmx-mpost.obj: mpost.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dvipdfmx-mpost.obj -MD -MP -MF $(DEPDIR)/dvipdfmx-mpost.Tpo -c -o dvipdfmx-mpost.obj `if test -f 'mpost.c'; then $(CYGPATH_W) 'mpost.c'; else $(CYGPATH_W) '$(srcdir)/mpost.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dvipdfmx-mpost.Tpo $(DEPDIR)/dvipdfmx-mpost.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mpost.c' object='dvipdfmx-mpost.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dvipdfmx-mpost.obj `if test -f 'mpost.c'; then $(CYGPATH_W) 'mpost.c'; else $(CYGPATH_W) '$(srcdir)/mpost.c'; fi`
+
dvipdfmx-numbers.o: numbers.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dvipdfmx-numbers.o -MD -MP -MF $(DEPDIR)/dvipdfmx-numbers.Tpo -c -o dvipdfmx-numbers.o `test -f 'numbers.c' || echo '$(srcdir)/'`numbers.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dvipdfmx-numbers.Tpo $(DEPDIR)/dvipdfmx-numbers.Po
@@ -1942,20 +1955,6 @@ dvipdfmx-vf.obj: vf.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dvipdfmx-vf.obj `if test -f 'vf.c'; then $(CYGPATH_W) 'vf.c'; else $(CYGPATH_W) '$(srcdir)/vf.c'; fi`
-src/dvipdfmx-cff.o: src/cff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/dvipdfmx-cff.o -MD -MP -MF src/$(DEPDIR)/dvipdfmx-cff.Tpo -c -o src/dvipdfmx-cff.o `test -f 'src/cff.c' || echo '$(srcdir)/'`src/cff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/dvipdfmx-cff.Tpo src/$(DEPDIR)/dvipdfmx-cff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/cff.c' object='src/dvipdfmx-cff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/dvipdfmx-cff.o `test -f 'src/cff.c' || echo '$(srcdir)/'`src/cff.c
-
-src/dvipdfmx-cff.obj: src/cff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/dvipdfmx-cff.obj -MD -MP -MF src/$(DEPDIR)/dvipdfmx-cff.Tpo -c -o src/dvipdfmx-cff.obj `if test -f 'src/cff.c'; then $(CYGPATH_W) 'src/cff.c'; else $(CYGPATH_W) '$(srcdir)/src/cff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/dvipdfmx-cff.Tpo src/$(DEPDIR)/dvipdfmx-cff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/cff.c' object='src/dvipdfmx-cff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/dvipdfmx-cff.obj `if test -f 'src/cff.c'; then $(CYGPATH_W) 'src/cff.c'; else $(CYGPATH_W) '$(srcdir)/src/cff.c'; fi`
-
src/dvipdfmx-cff_dict.o: src/cff_dict.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/dvipdfmx-cff_dict.o -MD -MP -MF src/$(DEPDIR)/dvipdfmx-cff_dict.Tpo -c -o src/dvipdfmx-cff_dict.o `test -f 'src/cff_dict.c' || echo '$(srcdir)/'`src/cff_dict.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/dvipdfmx-cff_dict.Tpo src/$(DEPDIR)/dvipdfmx-cff_dict.Po
@@ -2040,20 +2039,6 @@ src/dvipdfmx-jpegimage.obj: src/jpegimage.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/dvipdfmx-jpegimage.obj `if test -f 'src/jpegimage.c'; then $(CYGPATH_W) 'src/jpegimage.c'; else $(CYGPATH_W) '$(srcdir)/src/jpegimage.c'; fi`
-src/dvipdfmx-mpost.o: src/mpost.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/dvipdfmx-mpost.o -MD -MP -MF src/$(DEPDIR)/dvipdfmx-mpost.Tpo -c -o src/dvipdfmx-mpost.o `test -f 'src/mpost.c' || echo '$(srcdir)/'`src/mpost.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/dvipdfmx-mpost.Tpo src/$(DEPDIR)/dvipdfmx-mpost.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpost.c' object='src/dvipdfmx-mpost.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/dvipdfmx-mpost.o `test -f 'src/mpost.c' || echo '$(srcdir)/'`src/mpost.c
-
-src/dvipdfmx-mpost.obj: src/mpost.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/dvipdfmx-mpost.obj -MD -MP -MF src/$(DEPDIR)/dvipdfmx-mpost.Tpo -c -o src/dvipdfmx-mpost.obj `if test -f 'src/mpost.c'; then $(CYGPATH_W) 'src/mpost.c'; else $(CYGPATH_W) '$(srcdir)/src/mpost.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/dvipdfmx-mpost.Tpo src/$(DEPDIR)/dvipdfmx-mpost.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/mpost.c' object='src/dvipdfmx-mpost.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/dvipdfmx-mpost.obj `if test -f 'src/mpost.c'; then $(CYGPATH_W) 'src/mpost.c'; else $(CYGPATH_W) '$(srcdir)/src/mpost.c'; fi`
-
src/dvipdfmx-pdfcolor.o: src/pdfcolor.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/dvipdfmx-pdfcolor.o -MD -MP -MF src/$(DEPDIR)/dvipdfmx-pdfcolor.Tpo -c -o src/dvipdfmx-pdfcolor.o `test -f 'src/pdfcolor.c' || echo '$(srcdir)/'`src/pdfcolor.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/dvipdfmx-pdfcolor.Tpo src/$(DEPDIR)/dvipdfmx-pdfcolor.Po
@@ -2348,6 +2333,20 @@ xdvipdfmx-bmpimage.obj: bmpimage.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xdvipdfmx-bmpimage.obj `if test -f 'bmpimage.c'; then $(CYGPATH_W) 'bmpimage.c'; else $(CYGPATH_W) '$(srcdir)/bmpimage.c'; fi`
+xdvipdfmx-cff.o: cff.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xdvipdfmx-cff.o -MD -MP -MF $(DEPDIR)/xdvipdfmx-cff.Tpo -c -o xdvipdfmx-cff.o `test -f 'cff.c' || echo '$(srcdir)/'`cff.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xdvipdfmx-cff.Tpo $(DEPDIR)/xdvipdfmx-cff.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cff.c' object='xdvipdfmx-cff.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xdvipdfmx-cff.o `test -f 'cff.c' || echo '$(srcdir)/'`cff.c
+
+xdvipdfmx-cff.obj: cff.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xdvipdfmx-cff.obj -MD -MP -MF $(DEPDIR)/xdvipdfmx-cff.Tpo -c -o xdvipdfmx-cff.obj `if test -f 'cff.c'; then $(CYGPATH_W) 'cff.c'; else $(CYGPATH_W) '$(srcdir)/cff.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xdvipdfmx-cff.Tpo $(DEPDIR)/xdvipdfmx-cff.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cff.c' object='xdvipdfmx-cff.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xdvipdfmx-cff.obj `if test -f 'cff.c'; then $(CYGPATH_W) 'cff.c'; else $(CYGPATH_W) '$(srcdir)/cff.c'; fi`
+
xdvipdfmx-cid.o: cid.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xdvipdfmx-cid.o -MD -MP -MF $(DEPDIR)/xdvipdfmx-cid.Tpo -c -o xdvipdfmx-cid.o `test -f 'cid.c' || echo '$(srcdir)/'`cid.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xdvipdfmx-cid.Tpo $(DEPDIR)/xdvipdfmx-cid.Po
@@ -2544,6 +2543,20 @@ xdvipdfmx-mfileio.obj: mfileio.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xdvipdfmx-mfileio.obj `if test -f 'mfileio.c'; then $(CYGPATH_W) 'mfileio.c'; else $(CYGPATH_W) '$(srcdir)/mfileio.c'; fi`
+xdvipdfmx-mpost.o: mpost.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xdvipdfmx-mpost.o -MD -MP -MF $(DEPDIR)/xdvipdfmx-mpost.Tpo -c -o xdvipdfmx-mpost.o `test -f 'mpost.c' || echo '$(srcdir)/'`mpost.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xdvipdfmx-mpost.Tpo $(DEPDIR)/xdvipdfmx-mpost.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mpost.c' object='xdvipdfmx-mpost.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xdvipdfmx-mpost.o `test -f 'mpost.c' || echo '$(srcdir)/'`mpost.c
+
+xdvipdfmx-mpost.obj: mpost.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xdvipdfmx-mpost.obj -MD -MP -MF $(DEPDIR)/xdvipdfmx-mpost.Tpo -c -o xdvipdfmx-mpost.obj `if test -f 'mpost.c'; then $(CYGPATH_W) 'mpost.c'; else $(CYGPATH_W) '$(srcdir)/mpost.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xdvipdfmx-mpost.Tpo $(DEPDIR)/xdvipdfmx-mpost.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mpost.c' object='xdvipdfmx-mpost.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xdvipdfmx-mpost.obj `if test -f 'mpost.c'; then $(CYGPATH_W) 'mpost.c'; else $(CYGPATH_W) '$(srcdir)/mpost.c'; fi`
+
xdvipdfmx-numbers.o: numbers.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xdvipdfmx-numbers.o -MD -MP -MF $(DEPDIR)/xdvipdfmx-numbers.Tpo -c -o xdvipdfmx-numbers.o `test -f 'numbers.c' || echo '$(srcdir)/'`numbers.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xdvipdfmx-numbers.Tpo $(DEPDIR)/xdvipdfmx-numbers.Po
@@ -2908,20 +2921,6 @@ xdvipdfmx-vf.obj: vf.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xdvipdfmx-vf.obj `if test -f 'vf.c'; then $(CYGPATH_W) 'vf.c'; else $(CYGPATH_W) '$(srcdir)/vf.c'; fi`
-xsrc/xdvipdfmx-cff.o: xsrc/cff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsrc/xdvipdfmx-cff.o -MD -MP -MF xsrc/$(DEPDIR)/xdvipdfmx-cff.Tpo -c -o xsrc/xdvipdfmx-cff.o `test -f 'xsrc/cff.c' || echo '$(srcdir)/'`xsrc/cff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xsrc/$(DEPDIR)/xdvipdfmx-cff.Tpo xsrc/$(DEPDIR)/xdvipdfmx-cff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xsrc/cff.c' object='xsrc/xdvipdfmx-cff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsrc/xdvipdfmx-cff.o `test -f 'xsrc/cff.c' || echo '$(srcdir)/'`xsrc/cff.c
-
-xsrc/xdvipdfmx-cff.obj: xsrc/cff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsrc/xdvipdfmx-cff.obj -MD -MP -MF xsrc/$(DEPDIR)/xdvipdfmx-cff.Tpo -c -o xsrc/xdvipdfmx-cff.obj `if test -f 'xsrc/cff.c'; then $(CYGPATH_W) 'xsrc/cff.c'; else $(CYGPATH_W) '$(srcdir)/xsrc/cff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xsrc/$(DEPDIR)/xdvipdfmx-cff.Tpo xsrc/$(DEPDIR)/xdvipdfmx-cff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xsrc/cff.c' object='xsrc/xdvipdfmx-cff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsrc/xdvipdfmx-cff.obj `if test -f 'xsrc/cff.c'; then $(CYGPATH_W) 'xsrc/cff.c'; else $(CYGPATH_W) '$(srcdir)/xsrc/cff.c'; fi`
-
xsrc/xdvipdfmx-cff_dict.o: xsrc/cff_dict.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsrc/xdvipdfmx-cff_dict.o -MD -MP -MF xsrc/$(DEPDIR)/xdvipdfmx-cff_dict.Tpo -c -o xsrc/xdvipdfmx-cff_dict.o `test -f 'xsrc/cff_dict.c' || echo '$(srcdir)/'`xsrc/cff_dict.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xsrc/$(DEPDIR)/xdvipdfmx-cff_dict.Tpo xsrc/$(DEPDIR)/xdvipdfmx-cff_dict.Po
@@ -3006,20 +3005,6 @@ xsrc/xdvipdfmx-jpegimage.obj: xsrc/jpegimage.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsrc/xdvipdfmx-jpegimage.obj `if test -f 'xsrc/jpegimage.c'; then $(CYGPATH_W) 'xsrc/jpegimage.c'; else $(CYGPATH_W) '$(srcdir)/xsrc/jpegimage.c'; fi`
-xsrc/xdvipdfmx-mpost.o: xsrc/mpost.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsrc/xdvipdfmx-mpost.o -MD -MP -MF xsrc/$(DEPDIR)/xdvipdfmx-mpost.Tpo -c -o xsrc/xdvipdfmx-mpost.o `test -f 'xsrc/mpost.c' || echo '$(srcdir)/'`xsrc/mpost.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xsrc/$(DEPDIR)/xdvipdfmx-mpost.Tpo xsrc/$(DEPDIR)/xdvipdfmx-mpost.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xsrc/mpost.c' object='xsrc/xdvipdfmx-mpost.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsrc/xdvipdfmx-mpost.o `test -f 'xsrc/mpost.c' || echo '$(srcdir)/'`xsrc/mpost.c
-
-xsrc/xdvipdfmx-mpost.obj: xsrc/mpost.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsrc/xdvipdfmx-mpost.obj -MD -MP -MF xsrc/$(DEPDIR)/xdvipdfmx-mpost.Tpo -c -o xsrc/xdvipdfmx-mpost.obj `if test -f 'xsrc/mpost.c'; then $(CYGPATH_W) 'xsrc/mpost.c'; else $(CYGPATH_W) '$(srcdir)/xsrc/mpost.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xsrc/$(DEPDIR)/xdvipdfmx-mpost.Tpo xsrc/$(DEPDIR)/xdvipdfmx-mpost.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xsrc/mpost.c' object='xsrc/xdvipdfmx-mpost.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xsrc/xdvipdfmx-mpost.obj `if test -f 'xsrc/mpost.c'; then $(CYGPATH_W) 'xsrc/mpost.c'; else $(CYGPATH_W) '$(srcdir)/xsrc/mpost.c'; fi`
-
xsrc/xdvipdfmx-pdfcolor.o: xsrc/pdfcolor.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xdvipdfmx_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xsrc/xdvipdfmx-pdfcolor.o -MD -MP -MF xsrc/$(DEPDIR)/xdvipdfmx-pdfcolor.Tpo -c -o xsrc/xdvipdfmx-pdfcolor.o `test -f 'xsrc/pdfcolor.c' || echo '$(srcdir)/'`xsrc/pdfcolor.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xsrc/$(DEPDIR)/xdvipdfmx-pdfcolor.Tpo xsrc/$(DEPDIR)/xdvipdfmx-pdfcolor.Po
diff --git a/Build/source/texk/dvipdfm-x/src/cff.c b/Build/source/texk/dvipdfm-x/cff.c
index b5e78f5791a..2b8201d985c 100644
--- a/Build/source/texk/dvipdfm-x/src/cff.c
+++ b/Build/source/texk/dvipdfm-x/cff.c
@@ -47,11 +47,13 @@
#define SFONT_OR_STREAM sfont
#define get_card8(s) sfnt_get_byte((s))
#define get_card16(s) sfnt_get_ushort((s))
+#define cff_read(d, l) sfnt_read(d, l, cff->sfont)
#else
#define SFNT_OR_FILE FILE
#define SFONT_OR_STREAM stream
#define get_card8(s) get_unsigned_byte((s))
#define get_card16(s) get_unsigned_pair((s))
+#define cff_read(d, l) fread(d, 1, l, cff->stream)
#endif
static unsigned long get_unsigned (SFNT_OR_FILE *SFONT_OR_STREAM, int n)
@@ -155,7 +157,11 @@ cff_font *cff_open(SFNT_OR_FILE *SFONT_OR_STREAM, long offset, int n)
cff->string = cff_get_index(cff);
/* offset to GSubr */
+#ifdef XETEX
+ cff->gsubr_offset = cff->sfont->loc - offset;
+#else
cff->gsubr_offset = tell_position(cff->stream) - offset;
+#endif
/* Number of glyphs */
offset = (long) cff_dict_get(cff->topdict, "CharStrings", 0);
@@ -369,7 +375,7 @@ cff_get_index (cff_font *cff)
idx->data = NEW(length, card8);
offset = 0;
while (length > 0) {
- nb_read = fread(idx->data + offset, 1, length, cff->stream);
+ nb_read = cff_read(idx->data + offset, length);
offset += nb_read;
length -= nb_read;
}
@@ -1462,7 +1468,7 @@ long cff_read_private (cff_font *cff)
offset = (long) cff_dict_get(cff->fdarray[i], "Private", 1);
cff_seek_set(cff, offset);
data = NEW(size, card8);
- if (fread(data, 1, size, cff->stream) != size)
+ if (cff_read(data, size) != size)
ERROR("reading file failed");
(cff->private)[i] = cff_dict_unpack(data, data+size);
RELEASE(data);
@@ -1479,7 +1485,7 @@ long cff_read_private (cff_font *cff)
offset = (long) cff_dict_get(cff->topdict, "Private", 1);
cff_seek_set(cff, offset);
data = NEW(size, card8);
- if (fread(data, 1, size, cff->stream) != size)
+ if (cff_read(data, size) != size)
ERROR("reading file failed");
cff->private[0] = cff_dict_unpack(data, data+size);
RELEASE(data);
diff --git a/Build/source/texk/dvipdfm-x/xsrc/dvi.h b/Build/source/texk/dvipdfm-x/dvi.h
index 8f6f7e07e59..41944db5504 100644
--- a/Build/source/texk/dvipdfm-x/xsrc/dvi.h
+++ b/Build/source/texk/dvipdfm-x/dvi.h
@@ -30,11 +30,13 @@
/* spt_t */
#include "pdfdev.h"
+#ifdef XETEX
/* instantiated in dvipdfmx.c */
extern double paper_width, paper_height;
extern char landscape_mode;
extern double get_origin (int x);
+#endif
extern void dvi_set_verbose (void);
@@ -99,7 +101,9 @@ extern void dvi_compute_boxes (int flag);
extern void dvi_do_special (const void *buffer, UNSIGNED_QUAD size);
+#ifdef XETEX
/* allow other modules (pdfdev) to ask whether we're collecting box areas */
int dvi_is_tracking_boxes(void);
+#endif
#endif /* _DVI_H_ */
diff --git a/Build/source/texk/dvipdfm-x/src/mpost.c b/Build/source/texk/dvipdfm-x/mpost.c
index 703d0b45a36..c5feb0cb1b6 100644
--- a/Build/source/texk/dvipdfm-x/src/mpost.c
+++ b/Build/source/texk/dvipdfm-x/mpost.c
@@ -1213,8 +1213,12 @@ do_operator (const char *token, double x_user, double y_user)
pdf_color_cmykcolor(&color,
values[0], values[1],
values[2], values[3]);
+#ifdef XETEX
+ pdf_dev_set_color(&color);
+#else
pdf_dev_set_strokingcolor(&color);
pdf_dev_set_nonstrokingcolor(&color);
+#endif
}
break;
case SETGRAY:
@@ -1222,8 +1226,12 @@ do_operator (const char *token, double x_user, double y_user)
error = pop_get_numbers(values, 1);
if (!error) {
pdf_color_graycolor(&color, values[0]);
+#ifdef XETEX
+ pdf_dev_set_color(&color);
+#else
pdf_dev_set_strokingcolor(&color);
pdf_dev_set_nonstrokingcolor(&color);
+#endif
}
break;
case SETRGBCOLOR:
@@ -1231,8 +1239,12 @@ do_operator (const char *token, double x_user, double y_user)
if (!error) {
pdf_color_rgbcolor(&color,
values[0], values[1], values[2]);
+#ifdef XETEX
+ pdf_dev_set_color(&color);
+#else
pdf_dev_set_strokingcolor(&color);
pdf_dev_set_nonstrokingcolor(&color);
+#endif
}
break;
diff --git a/Build/source/texk/dvipdfm-x/xsrc/pdfdev.h b/Build/source/texk/dvipdfm-x/pdfdev.h
index 6df1e91054d..f8a3a3f65b1 100644
--- a/Build/source/texk/dvipdfm-x/xsrc/pdfdev.h
+++ b/Build/source/texk/dvipdfm-x/pdfdev.h
@@ -208,11 +208,13 @@ extern void pdf_dev_set_param (int param_type, int value);
* XFrom (content grabbing) and Metapost support want them.
*/
extern void pdf_dev_reset_fonts (void);
-extern void pdf_dev_reset_color (void);
+#ifdef XETEX
+extern void pdf_dev_reset_color (void);
extern void pdf_dev_set_color (pdf_color *color);
extern void pdf_dev_set_strokingcolor (pdf_color *color);
extern void pdf_dev_set_nonstrokingcolor (pdf_color *color);
+#endif
/* Initialization of transformation matrix with M and others.
* They are called within pdf_doc_begin_page() and pdf_doc_end_page().
diff --git a/Build/source/texk/dvipdfm-x/src/pdfdoc.h b/Build/source/texk/dvipdfm-x/pdfdoc.h
index 2281f036fd2..c42fbd55410 100644
--- a/Build/source/texk/dvipdfm-x/src/pdfdoc.h
+++ b/Build/source/texk/dvipdfm-x/pdfdoc.h
@@ -32,11 +32,18 @@
extern void pdf_doc_set_verbose (void);
+#ifdef XETEX
+extern void pdf_open_document (const char *filename,
+ int do_encryption,
+ double media_width, double media_height,
+ double annot_grow_amount, int bookmark_open_depth);
+#else
extern void pdf_open_document (const char *filename,
int do_encryption,
double media_width, double media_height,
double annot_grow_amount, int bookmark_open_depth,
int check_gotos);
+#endif
extern void pdf_close_document (void);
@@ -56,8 +63,10 @@ extern pdf_obj *pdf_doc_get_reference (const char *category);
#define pdf_doc_names() pdf_doc_get_dictionary("Names")
#define pdf_doc_this_page() pdf_doc_get_dictionary("@THISPAGE")
+#ifndef XETEX
extern pdf_obj *pdf_doc_get_page (pdf_file *pf, long page_no, long *count_p,
pdf_rect *bbox, pdf_obj **resources_p);
+#endif
extern long pdf_doc_current_page_number (void);
extern pdf_obj *pdf_doc_current_page_resources (void);
@@ -113,10 +122,15 @@ extern void pdf_doc_end_grabbing (pdf_obj *attrib);
/* Annotation */
+#ifdef XETEX
+extern void pdf_doc_add_annot (unsigned page_no,
+ const pdf_rect *rect, pdf_obj *annot_dict);
+#else
extern void pdf_doc_add_annot (unsigned page_no,
const pdf_rect *rect,
pdf_obj *annot_dict,
int dest_is_new);
+#endif
/* Annotation with auto- clip and line (or page) break */
extern void pdf_doc_begin_annot (pdf_obj *dict);
diff --git a/Build/source/texk/dvipdfm-x/xsrc/pdfdraw.h b/Build/source/texk/dvipdfm-x/pdfdraw.h
index f24540ef2bf..f27c943b566 100644
--- a/Build/source/texk/dvipdfm-x/xsrc/pdfdraw.h
+++ b/Build/source/texk/dvipdfm-x/pdfdraw.h
@@ -73,7 +73,7 @@ extern int pdf_dev_setdash (int count,
double offset);
#if 0
extern int pdf_dev_setflat (int flatness);
-#endif /* 0 */
+#endif
/* Path Construction */
extern int pdf_dev_moveto (double x , double y);
@@ -85,10 +85,12 @@ extern int pdf_dev_rlineto (double x0 , double y0);
extern int pdf_dev_curveto (double x0 , double y0,
double x1 , double y1,
double x2 , double y2);
+#ifdef XETEX
extern int pdf_dev_vcurveto (double x0 , double y0,
double x1 , double y1);
extern int pdf_dev_ycurveto (double x0 , double y0,
double x1 , double y1);
+#endif
extern int pdf_dev_rcurveto (double x0 , double y0,
double x1 , double y1,
double x2 , double y2);
@@ -111,11 +113,13 @@ extern int pdf_dev_rectstroke (double x, double y,
double w, double h,
const pdf_tmatrix *M /* optional */
);
-#endif /* 0 */
+#endif
extern int pdf_dev_rectfill (double x, double y, double w, double h);
extern int pdf_dev_rectclip (double x, double y, double w, double h);
+#ifdef XETEX
extern int pdf_dev_rectadd (double x, double y, double w, double h);
+#endif
extern int pdf_dev_flushpath (char p_op, int fill_rule);
@@ -131,7 +135,7 @@ extern void pdf_dev_idtransform (pdf_coord *p, const pdf_tmatrix *M);
extern void pdf_dev_transform (pdf_coord *p, const pdf_tmatrix *M);
#if 0
extern void pdf_dev_itransform (pdf_coord *p, const pdf_tmatrix *M);
-#endif /* 0 */
+#endif
extern int pdf_dev_gsave (void);
extern int pdf_dev_grestore (void);
@@ -164,9 +168,17 @@ extern int pdf_dev_current_depth (void);
extern void pdf_dev_grestore_to (int depth);
#define pdf_dev_grestoreall() pdf_dev_grestore_to(0);
+#ifdef XETEX
extern int pdf_dev_currentcolor (pdf_color *color, int is_fill);
extern int pdf_dev_setcolor (const pdf_color *color, int is_fill);
extern void pdf_dev_set_fixed_point (double x, double y);
extern void pdf_dev_get_fixed_point (pdf_coord *p);
+#else
+extern void pdf_dev_set_color (const pdf_color *color, char mask, int force);
+#define pdf_dev_set_strokingcolor(c) pdf_dev_set_color(c, 0, 0);
+#define pdf_dev_set_nonstrokingcolor(c) pdf_dev_set_color(c, 0x20, 0);
+extern void pdf_dev_reset_color (int force);
+#endif
+
#endif /* _PDF_DRAW_H_ */
diff --git a/Build/source/texk/dvipdfm-x/src/dvi.c b/Build/source/texk/dvipdfm-x/src/dvi.c
index 61a8ab8e456..9328866cb16 100644
--- a/Build/source/texk/dvipdfm-x/src/dvi.c
+++ b/Build/source/texk/dvipdfm-x/src/dvi.c
@@ -99,6 +99,13 @@ static struct dvi_header
static double dev_origin_x = 72.0, dev_origin_y = 770.0;
+#ifdef XETEX
+double get_origin (int x)
+{
+ return x ? dev_origin_x : dev_origin_y;
+}
+#endif
+
#define PHYSICAL 1
#define VIRTUAL 2
#define SUBFONT 3
@@ -168,6 +175,234 @@ static int num_def_fonts = 0, max_def_fonts = 0;
static int compute_boxes = 0, link_annot = 1;
static int verbose = 0;
+#ifdef XETEX
+#define DVI_PAGE_BUF_CHUNK 0x10000UL /* 64K should be plenty for most pages */
+
+static unsigned char* dvi_page_buffer;
+static unsigned long dvi_page_buf_size;
+static unsigned long dvi_page_buf_index;
+
+/* functions to read numbers from the dvi file and store them in dvi_page_buffer */
+static UNSIGNED_BYTE get_and_buffer_unsigned_byte (FILE *file)
+{
+ int ch;
+ if ((ch = fgetc (file)) < 0)
+ ERROR ("File ended prematurely\n");
+ if (dvi_page_buf_index >= dvi_page_buf_size) {
+ dvi_page_buf_size += DVI_PAGE_BUF_CHUNK;
+ dvi_page_buffer = RENEW(dvi_page_buffer, dvi_page_buf_size, unsigned char);
+ }
+ dvi_page_buffer[dvi_page_buf_index++] = ch;
+ return (UNSIGNED_BYTE) ch;
+}
+
+#if 0
+/* Not used */
+static SIGNED_BYTE get_and_buffer_signed_byte (FILE *file)
+{
+ int byte;
+ byte = get_and_buffer_unsigned_byte(file);
+ if (byte >= 0x80)
+ byte -= 0x100;
+ return (SIGNED_BYTE) byte;
+}
+#endif
+
+static UNSIGNED_PAIR get_and_buffer_unsigned_pair (FILE *file)
+{
+ int i;
+ UNSIGNED_BYTE byte;
+ UNSIGNED_PAIR pair = 0;
+ for (i=0; i<2; i++) {
+ byte = get_and_buffer_unsigned_byte(file);
+ pair = pair*0x100u + byte;
+ }
+ return pair;
+}
+
+static SIGNED_PAIR get_and_buffer_signed_pair (FILE *file)
+{
+ int i;
+ long pair = 0;
+ for (i=0; i<2; i++) {
+ pair = pair*0x100 + get_and_buffer_unsigned_byte(file);
+ }
+ if (pair >= 0x8000) {
+ pair -= 0x10000l;
+ }
+ return (SIGNED_PAIR) pair;
+}
+
+static UNSIGNED_TRIPLE get_and_buffer_unsigned_triple(FILE *file)
+{
+ int i;
+ long triple = 0;
+ for (i=0; i<3; i++) {
+ triple = triple*0x100u + get_and_buffer_unsigned_byte(file);
+ }
+ return (UNSIGNED_TRIPLE) triple;
+}
+
+static SIGNED_TRIPLE get_and_buffer_signed_triple(FILE *file)
+{
+ int i;
+ long triple = 0;
+ for (i=0; i<3; i++) {
+ triple = triple*0x100 + get_and_buffer_unsigned_byte(file);
+ }
+ if (triple >= 0x800000l)
+ triple -= 0x1000000l;
+ return (SIGNED_TRIPLE) triple;
+}
+
+static SIGNED_QUAD get_and_buffer_signed_quad(FILE *file)
+{
+ int byte, i;
+ long quad = 0;
+
+ /* Check sign on first byte before reading others */
+ byte = get_and_buffer_unsigned_byte(file);
+ quad = byte;
+ if (quad >= 0x80)
+ quad = byte - 0x100;
+ for (i=0; i<3; i++) {
+ quad = quad*0x100 + get_and_buffer_unsigned_byte(file);
+ }
+ return (SIGNED_QUAD) quad;
+}
+
+static UNSIGNED_QUAD get_and_buffer_unsigned_quad(FILE *file)
+{
+ int i;
+ unsigned long quad = 0;
+ for (i=0; i<4; i++) {
+ quad = quad*0x100u + get_and_buffer_unsigned_byte(file);
+ }
+ return (UNSIGNED_QUAD) quad;
+}
+
+static void get_and_buffer_bytes(FILE *file, unsigned int count)
+{
+ if (dvi_page_buf_index + count >= dvi_page_buf_size) {
+ dvi_page_buf_size = dvi_page_buf_index + count + DVI_PAGE_BUF_CHUNK;
+ dvi_page_buffer = RENEW(dvi_page_buffer, dvi_page_buf_size, unsigned char);
+ }
+ if (fread(dvi_page_buffer + dvi_page_buf_index, 1, count, file) != count)
+ ERROR ("File ended prematurely\n");
+ dvi_page_buf_index += count;
+}
+
+/* functions to fetch values from dvi_page_buffer */
+
+static UNSIGNED_BYTE get_buffered_unsigned_byte (void)
+{
+ return dvi_page_buffer[dvi_page_buf_index++];
+}
+
+static SIGNED_BYTE get_buffered_signed_byte (void)
+{
+ int byte;
+ byte = dvi_page_buffer[dvi_page_buf_index++];
+ if (byte >= 0x80)
+ byte -= 0x100;
+ return (SIGNED_BYTE) byte;
+}
+
+static UNSIGNED_PAIR get_buffered_unsigned_pair (void)
+{
+ int i;
+ UNSIGNED_BYTE byte;
+ UNSIGNED_PAIR pair = 0;
+ for (i=0; i<2; i++) {
+ byte = dvi_page_buffer[dvi_page_buf_index++];
+ pair = pair*0x100u + byte;
+ }
+ return pair;
+}
+
+static SIGNED_PAIR get_buffered_signed_pair (void)
+{
+ int i;
+ long pair = 0;
+ for (i=0; i<2; i++) {
+ pair = pair*0x100 + dvi_page_buffer[dvi_page_buf_index++];
+ }
+ if (pair >= 0x8000) {
+ pair -= 0x10000l;
+ }
+ return (SIGNED_PAIR) pair;
+}
+
+static UNSIGNED_TRIPLE get_buffered_unsigned_triple(void)
+{
+ int i;
+ long triple = 0;
+ for (i=0; i<3; i++) {
+ triple = triple*0x100u + dvi_page_buffer[dvi_page_buf_index++];
+ }
+ return (UNSIGNED_TRIPLE) triple;
+}
+
+static SIGNED_TRIPLE get_buffered_signed_triple(void)
+{
+ int i;
+ long triple = 0;
+ for (i=0; i<3; i++) {
+ triple = triple*0x100 + dvi_page_buffer[dvi_page_buf_index++];
+ }
+ if (triple >= 0x800000l)
+ triple -= 0x1000000l;
+ return (SIGNED_TRIPLE) triple;
+}
+
+static SIGNED_QUAD get_buffered_signed_quad(void)
+{
+ int byte, i;
+ long quad = 0;
+
+ /* Check sign on first byte before reading others */
+ byte = dvi_page_buffer[dvi_page_buf_index++];
+ quad = byte;
+ if (quad >= 0x80)
+ quad = byte - 0x100;
+ for (i=0; i<3; i++) {
+ quad = quad*0x100 + dvi_page_buffer[dvi_page_buf_index++];
+ }
+ return (SIGNED_QUAD) quad;
+}
+
+static UNSIGNED_QUAD get_buffered_unsigned_quad(void)
+{
+ int i;
+ unsigned long quad = 0;
+ for (i=0; i<4; i++) {
+ quad = quad*0x100u + dvi_page_buffer[dvi_page_buf_index++];
+ }
+ return (UNSIGNED_QUAD) quad;
+}
+#else
+#define get_and_buffer_unsigned_byte(fp) get_unsigned_byte(fp)
+#if 0
+#define get_and_buffer_signed_byte(fp) get_signed_byte(fp)
+#endif
+#define get_and_buffer_unsigned_pair(fp) get_unsigned_pair(fp)
+#define get_and_buffer_signed_pair(fp) get_signed_pair(fp)
+#define get_and_buffer_unsigned_triple(fp) get_unsigned_triple(fp)
+#define get_and_buffer_signed_triple(fp) get_signed_triple(fp)
+#define get_and_buffer_signed_quad(fp) get_unsigned_quad(fp)
+#define get_and_buffer_unsigned_quad(fp) get_unsigned_quad(fp)
+#define get_and_buffer_bytes(fp, ct) seek_relative(fp, ct)
+
+#define get_buffered_unsigned_byte() get_unsigned_byte(dvi_file)
+#define get_buffered_signed_byte() get_signed_byte(dvi_file)
+#define get_buffered_unsigned_pair() get_unsigned_pair(dvi_file)
+#define get_buffered_signed_pair() get_signed_pair(dvi_file)
+#define get_buffered_unsigned_triple() get_unsigned_triple(dvi_file)
+#define get_buffered_signed_triple() get_signed_triple(dvi_file)
+#define get_buffered_signed_quad() get_signed_quad(dvi_file)
+#define get_buffered_unsigned_quad() get_unsigned_quad(dvi_file)
+#endif
+
void
dvi_set_verbose (void)
{
@@ -211,8 +446,12 @@ find_post (void)
/* file_position now points to last non padding character or
* beginning of file */
- if (dvi_file_size - current < 4 ||
- current == 0 || !(ch == DVI_ID || ch == DVIV_ID)) {
+ if (dvi_file_size - current < 4 || current == 0 ||
+#ifdef XETEX
+ !(ch == DVI_ID || ch == DVIV_ID || ch == XDVI_ID)) {
+#else
+ !(ch == DVI_ID || ch == DVIV_ID)) {
+#endif
MESG("DVI ID = %d\n", ch);
ERROR(invalid_signature);
}
@@ -371,12 +610,20 @@ get_dvi_fonts (long post_location)
tex_id = get_unsigned_triple(dvi_file);
break;
case FNT_DEF4:
+#ifdef XETEX
+ case XDV_NATIVE_FONT_DEF:
+#endif
tex_id = get_signed_quad(dvi_file);
break;
default:
MESG("Unexpected op code: %3d\n", code);
ERROR(invalid_signature);
}
+#ifdef XETEX
+ if (code == XDV_NATIVE_FONT_DEF)
+ read_native_font_record(tex_id);
+ else
+#endif
read_font_record(tex_id);
}
if (verbose > 2) {
@@ -962,19 +1209,19 @@ dvi_dir (UNSIGNED_BYTE dir) /* how? */
static void
do_set1 (void)
{
- dvi_set(get_unsigned_byte(dvi_file));
+ dvi_set(get_buffered_unsigned_byte());
}
static void
do_set2 (void)
{
- dvi_set(get_unsigned_pair(dvi_file));
+ dvi_set(get_buffered_unsigned_pair());
}
static void
do_set3 (void)
{
- dvi_set(get_unsigned_triple(dvi_file));
+ dvi_set(get_buffered_unsigned_triple());
}
static void
@@ -982,8 +1229,8 @@ do_setrule (void)
{
SIGNED_QUAD width, height;
- height = get_signed_quad(dvi_file);
- width = get_signed_quad(dvi_file);
+ height = get_buffered_signed_quad();
+ width = get_buffered_signed_quad();
if (width > 0 && height > 0) {
dvi_rule(width, height);
}
@@ -995,8 +1242,8 @@ do_putrule (void)
{
SIGNED_QUAD width, height;
- height = get_signed_quad (dvi_file);
- width = get_signed_quad (dvi_file);
+ height = get_buffered_signed_quad ();
+ width = get_buffered_signed_quad ();
if (width > 0 && height > 0) {
dvi_rule(width, height);
}
@@ -1005,19 +1252,19 @@ do_putrule (void)
static void
do_put1 (void)
{
- dvi_put(get_unsigned_byte(dvi_file));
+ dvi_put(get_buffered_unsigned_byte());
}
static void
do_put2 (void)
{
- dvi_put(get_unsigned_pair(dvi_file));
+ dvi_put(get_buffered_unsigned_pair());
}
static void
do_put3 (void)
{
- dvi_put(get_unsigned_triple(dvi_file));
+ dvi_put(get_buffered_unsigned_triple());
}
void
@@ -1044,25 +1291,25 @@ dvi_pop (void)
static void
do_right1 (void)
{
- dvi_right(get_signed_byte(dvi_file));
+ dvi_right(get_buffered_signed_byte());
}
static void
do_right2 (void)
{
- dvi_right(get_signed_pair(dvi_file));
+ dvi_right(get_buffered_signed_pair());
}
static void
do_right3 (void)
{
- dvi_right(get_signed_triple(dvi_file));
+ dvi_right(get_buffered_signed_triple());
}
static void
do_right4 (void)
{
- dvi_right(get_signed_quad(dvi_file));
+ dvi_right(get_buffered_signed_quad());
}
void
@@ -1081,25 +1328,25 @@ dvi_w0 (void)
static void
do_w1 (void)
{
- dvi_w(get_signed_byte(dvi_file));
+ dvi_w(get_buffered_signed_byte());
}
static void
do_w2 (void)
{
- dvi_w(get_signed_pair(dvi_file));
+ dvi_w(get_buffered_signed_pair());
}
static void
do_w3 (void)
{
- dvi_w(get_signed_triple(dvi_file));
+ dvi_w(get_buffered_signed_triple());
}
static void
do_w4 (void)
{
- dvi_w(get_signed_quad(dvi_file));
+ dvi_w(get_buffered_signed_quad());
}
void
@@ -1118,49 +1365,49 @@ dvi_x0 (void)
static void
do_x1 (void)
{
- dvi_x(get_signed_byte(dvi_file));
+ dvi_x(get_buffered_signed_byte());
}
static void
do_x2 (void)
{
- dvi_x(get_signed_pair(dvi_file));
+ dvi_x(get_buffered_signed_pair());
}
static void
do_x3 (void)
{
- dvi_x(get_signed_triple(dvi_file));
+ dvi_x(get_buffered_signed_triple());
}
static void
do_x4 (void)
{
- dvi_x(get_signed_quad(dvi_file));
+ dvi_x(get_buffered_signed_quad());
}
static void
do_down1 (void)
{
- dvi_down(get_signed_byte(dvi_file));
+ dvi_down(get_buffered_signed_byte());
}
static void
do_down2 (void)
{
- dvi_down(get_signed_pair(dvi_file));
+ dvi_down(get_buffered_signed_pair());
}
static void
do_down3 (void)
{
- dvi_down(get_signed_triple(dvi_file));
+ dvi_down(get_buffered_signed_triple());
}
static void
do_down4 (void)
{
- dvi_down(get_signed_quad(dvi_file));
+ dvi_down(get_buffered_signed_quad());
}
void
@@ -1179,25 +1426,25 @@ dvi_y0 (void)
static
void do_y1 (void)
{
- dvi_y(get_signed_byte(dvi_file));
+ dvi_y(get_buffered_signed_byte());
}
static
void do_y2 (void)
{
- dvi_y(get_signed_pair(dvi_file));
+ dvi_y(get_buffered_signed_pair());
}
static
void do_y3 (void)
{
- dvi_y(get_signed_triple(dvi_file));
+ dvi_y(get_buffered_signed_triple());
}
static
void do_y4 (void)
{
- dvi_y(get_signed_quad(dvi_file));
+ dvi_y(get_buffered_signed_quad());
}
void
@@ -1216,25 +1463,25 @@ dvi_z0 (void)
static void
do_z1 (void)
{
- dvi_z(get_signed_byte(dvi_file));
+ dvi_z(get_buffered_signed_byte());
}
static void
do_z2 (void)
{
- dvi_z(get_signed_pair(dvi_file));
+ dvi_z(get_buffered_signed_pair());
}
static void
do_z3 (void)
{
- dvi_z(get_signed_triple(dvi_file));
+ dvi_z(get_buffered_signed_triple());
}
static void
do_z4 (void)
{
- dvi_z(get_signed_quad(dvi_file));
+ dvi_z(get_buffered_signed_quad());
}
static void
@@ -1316,7 +1563,7 @@ do_fnt1 (void)
{
SIGNED_QUAD tex_id;
- tex_id = get_unsigned_byte(dvi_file);
+ tex_id = get_buffered_unsigned_byte();
do_fnt(tex_id);
}
@@ -1325,7 +1572,7 @@ do_fnt2 (void)
{
SIGNED_QUAD tex_id;
- tex_id = get_unsigned_pair(dvi_file);
+ tex_id = get_buffered_unsigned_pair();
do_fnt(tex_id);
}
@@ -1334,7 +1581,7 @@ do_fnt3 (void)
{
SIGNED_QUAD tex_id;
- tex_id = get_unsigned_triple(dvi_file);
+ tex_id = get_buffered_unsigned_triple();
do_fnt(tex_id);
}
@@ -1343,22 +1590,27 @@ do_fnt4 (void)
{
SIGNED_QUAD tex_id;
- tex_id = get_signed_quad(dvi_file);
+ tex_id = get_buffered_signed_quad();
do_fnt(tex_id);
}
static void
do_xxx (UNSIGNED_QUAD size)
{
+#ifdef XETEX
+ dvi_do_special(dvi_page_buffer + dvi_page_buf_index, size);
+ dvi_page_buf_index += size;
+#else
UNSIGNED_QUAD i;
Ubyte *buffer;
buffer = NEW(size+1, Ubyte);
for (i = 0; i < size; i++) {
- buffer[i] = get_unsigned_byte(dvi_file);
+ buffer[i] = get_buffered_unsigned_byte();
}
dvi_do_special(buffer, size);
RELEASE(buffer);
+#endif
}
static void
@@ -1366,7 +1618,7 @@ do_xxx1 (void)
{
SIGNED_QUAD size;
- size = get_unsigned_byte(dvi_file);
+ size = get_buffered_unsigned_byte();
do_xxx(size);
}
@@ -1375,7 +1627,7 @@ do_xxx2 (void)
{
SIGNED_QUAD size;
- size = get_unsigned_pair(dvi_file);
+ size = get_buffered_unsigned_pair();
do_xxx(size);
}
@@ -1384,7 +1636,7 @@ do_xxx3 (void)
{
SIGNED_QUAD size;
- size = get_unsigned_triple(dvi_file);
+ size = get_buffered_unsigned_triple();
do_xxx(size);
}
@@ -1393,7 +1645,7 @@ do_xxx4 (void)
{
SIGNED_QUAD size;
- size = get_unsigned_quad(dvi_file);
+ size = get_buffered_unsigned_quad();
do_xxx(size);
}
@@ -1407,12 +1659,12 @@ do_bop (void)
/* For now, ignore TeX's count registers */
for (i = 0; i < 10; i++) {
- get_signed_quad(dvi_file);
+ get_buffered_signed_quad();
}
/* Ignore previous page pointer since we have already
* saved this information
*/
- get_signed_quad(dvi_file);
+ get_buffered_signed_quad();
clear_state();
processing_page = 1;
@@ -1444,6 +1696,168 @@ do_dir (void)
pdf_dev_set_dirmode(dvi_state.d); /* 0: horizontal, 1: vertical */
}
+#ifdef XETEX
+static void
+do_native_font_def (int scanning)
+{
+ if (scanning) {
+ SIGNED_QUAD tex_id = get_signed_quad(dvi_file);
+ if (linear) {
+ read_native_font_record(tex_id);
+ } else {
+ UNSIGNED_PAIR flags;
+ int name_length, nvars, i;
+
+ get_unsigned_quad(dvi_file); /* skip point size */
+ flags = get_unsigned_pair(dvi_file);
+ name_length = (int) get_unsigned_byte(dvi_file);
+ name_length += (int) get_unsigned_byte(dvi_file);
+ name_length += (int) get_unsigned_byte(dvi_file);
+ for (i = 0; i < name_length; ++i)
+ get_unsigned_byte(dvi_file);
+ if (flags & XDV_FLAG_COLORED) {
+ get_unsigned_quad(dvi_file);
+ }
+ if (flags & XDV_FLAG_VARIATIONS) {
+ nvars = get_unsigned_pair(dvi_file);
+ for (i = 0; i < nvars * 2; ++i)
+ get_unsigned_quad(dvi_file); /* skip axis and value for each variation setting */
+ }
+ }
+ --dvi_page_buf_index; /* don't buffer the opcode */
+ }
+}
+
+static void
+do_glyph_array (int yLocsPresent)
+{
+ struct loaded_font *font;
+ spt_t width, height, depth, *xloc, *yloc, glyph_width = 0;
+ unsigned char wbuf[2];
+ unsigned int i, glyph_id, slen = 0;
+
+ if (current_font < 0)
+ ERROR("No font selected!");
+
+ font = &loaded_fonts[current_font];
+
+ width = get_buffered_signed_quad();
+
+ slen = (unsigned int) get_buffered_unsigned_pair();
+ xloc = NEW(slen, spt_t);
+ yloc = NEW(slen, spt_t);
+ for (i = 0; i < slen; i++) {
+ xloc[i] = get_buffered_signed_quad();
+ yloc[i] = yLocsPresent ? get_buffered_signed_quad() : 0;
+ }
+
+ if (font->rgba_color != 0xffffffff) {
+ pdf_color color;
+ pdf_color_rgbcolor(&color,
+ (double)((unsigned char)(font->rgba_color >> 24) & 0xff) / 255,
+ (double)((unsigned char)(font->rgba_color >> 16) & 0xff) / 255,
+ (double)((unsigned char)(font->rgba_color >> 8) & 0xff) / 255);
+ pdf_color_push(&color, &color);
+ }
+
+ for (i = 0; i < slen; i++) {
+ glyph_id = get_buffered_unsigned_pair(); /* freetype glyph index */
+ if (glyph_id < font->ft_face->num_glyphs) {
+ FT_Error error;
+ FT_Fixed advance;
+ int flags = FT_LOAD_NO_SCALE;
+
+ if (font->layout_dir == 1)
+ flags |= FT_LOAD_VERTICAL_LAYOUT;
+
+ error = FT_Get_Advance(font->ft_face, glyph_id, flags, &advance);
+ if (error)
+ advance = 0;
+
+ glyph_width = (double)font->size * (double)advance / (double)font->ft_face->units_per_EM;
+ glyph_width = glyph_width * font->extend;
+ if (compute_boxes && link_annot && marked_depth >= tagged_depth) {
+ pdf_rect rect;
+ height = (double)font->size * (double)font->ft_face->ascender / (double)font->ft_face->units_per_EM;
+ depth = (double)font->size * -(double)font->ft_face->descender / (double)font->ft_face->units_per_EM;
+ pdf_dev_set_rect(&rect, dvi_state.h + xloc[i], -dvi_state.v - yloc[i], glyph_width, height, depth);
+ pdf_doc_expand_box(&rect);
+ }
+ }
+
+ wbuf[0] = glyph_id >> 8;
+ wbuf[1] = glyph_id & 0xff;
+ pdf_dev_set_string(dvi_state.h + xloc[i], -dvi_state.v - yloc[i], wbuf, 2,
+ glyph_width, font->font_id, -1);
+ }
+
+ if (font->rgba_color != 0xffffffff) {
+ pdf_color_pop();
+ }
+ RELEASE(xloc);
+ RELEASE(yloc);
+
+ if (!dvi_state.d) {
+ dvi_state.h += width;
+ } else {
+ dvi_state.v += width;
+ }
+
+ return;
+}
+
+static void
+do_pic_file(void)
+ /* parameters for XDV_PIC_FILE opcode: pdf_box[1] t[4][6] p[2] len[2] path[l] */
+{
+ int page_no;
+ UNSIGNED_PAIR len;
+ char *path;
+ int i;
+ int xobj_id;
+ transform_info ti;
+
+ transform_info_clear(&ti);
+
+ /* pdf_box = */ get_buffered_unsigned_byte();
+
+ ti.matrix.a = get_buffered_signed_quad() / 65536.0; /* convert 16.16 Fixed to floating-point */
+ ti.matrix.b = get_buffered_signed_quad() / 65536.0;
+ ti.matrix.c = get_buffered_signed_quad() / 65536.0;
+ ti.matrix.d = get_buffered_signed_quad() / 65536.0;
+ ti.matrix.e = get_buffered_signed_quad() / 65536.0;
+ ti.matrix.f = get_buffered_signed_quad() / 65536.0;
+
+ page_no = get_buffered_signed_pair();
+ len = get_buffered_unsigned_pair();
+ path = NEW(len + 1, char);
+ for (i = 0; i < len; ++i)
+ path[i] = get_buffered_unsigned_byte();
+ path[len] = 0;
+
+ /*
+ now we need to place page /page_no/ of the graphic file from /path/, applying /transform/
+ if pdf_box=0 the file is a raster image (.jpg, .png, .tif, etc; need to determine format
+ by examining the file)
+ else it is a PDF document, pdf_box tells which PDF box (media, trim, crop, etc) to use
+ page_no is currently only used with PDF documents, though in theory could be used
+ with multi-page TIFFs, etc
+ transform is a 3x2 affine transform matrix expressed in fixed-point values
+ */
+
+ xobj_id = pdf_ximage_findresource(path, page_no, NULL);
+ if (xobj_id >= 0) {
+ /* FIXME: this seems to work for 72dpi JPEGs, but isn't right for others;
+ need to take the actual image resolution into account in pdf_dev_put_image,
+ not just assume the "original" size is 100dpi
+ */
+ pdf_dev_put_image(xobj_id, &ti, dvi_dev_xpos(), dvi_dev_ypos());
+ }
+
+ RELEASE(path);
+}
+#endif
+
/* Note to be absolutely certain that the string escape buffer doesn't
* hit its limit, FORMAT_BUF_SIZE should set to 4 times S_BUFFER_SIZE
* in pdfobj.c. Is there any application that genenerate words with
@@ -1478,7 +1892,7 @@ dvi_do_page (long n,
/* The most likely opcodes are individual setchars.
* These are buffered for speed. */
slen = 0;
- while ((opcode = fgetc(dvi_file)) <= SET_CHAR_127 &&
+ while ((opcode = get_buffered_unsigned_byte()) <= SET_CHAR_127 &&
slen < SBUF_SIZE) {
sbuf[slen++] = opcode;
}
@@ -1604,7 +2018,31 @@ dvi_do_page (long n,
do_dir();
break;
- case PRE: case POST: case POST_POST:
+#ifdef XETEX
+ /* XeTeX extension */
+ case XDV_GLYPH_STRING:
+ do_glyph_array(0);
+ break;
+ case XDV_GLYPH_ARRAY:
+ do_glyph_array(1);
+ break;
+ case XDV_NATIVE_FONT_DEF:
+ do_native_font_def(0); /* should not occur - processed during pre-scanning */
+ break;
+ case XDV_PIC_FILE:
+ do_pic_file();
+ break;
+#endif
+
+ case POST:
+#ifdef XETEX
+ if (linear && !processing_page) {
+ /* for linear processing, this means there are no more pages */
+ num_pages = 0; /* force loop to terminate */
+ return;
+ }
+ /* else fall through to error case */
+#endif
ERROR("Unexpected preamble or postamble in dvi file");
break;
default:
@@ -1614,7 +2052,7 @@ dvi_do_page (long n,
}
double
-dvi_init (const char *dvi_filename, double mag)
+dvi_init (char *dvi_filename, double mag)
{
long post_location;
@@ -1938,50 +2376,50 @@ dvi_scan_specials (long page_no,
UNSIGNED_QUAD size = 0UL;
char buf[1024];
switch (opcode) {
- case XXX1: size = get_unsigned_byte(fp); break;
- case XXX2: size = get_unsigned_pair(fp); break;
- case XXX3: size = get_unsigned_triple(fp); break;
- case XXX4: size = get_unsigned_quad(fp); break;
+ case XXX1: size = get_and_buffer_unsigned_byte(fp); break;
+ case XXX2: size = get_and_buffer_unsigned_pair(fp); break;
+ case XXX3: size = get_and_buffer_unsigned_triple(fp); break;
+ case XXX4: size = get_and_buffer_unsigned_quad(fp); break;
}
size = MIN(size, 1024);
if (fread(buf, sizeof(char), size, fp) != size)
ERROR("Reading DVI file failed!");
if (scan_special(page_width, page_height, x_offset, y_offset, landscape,
minorversion, do_enc, key_bits, permission, owner_pw, user_pw, buf, size))
- WARN("Reading special command failed: \"%.*s\"", size, buf);
+ WARN("Reading special command failed: \"%.*s\"", size, buf);
continue;
}
/* Skipping... */
switch (opcode) {
case BOP:
- seek_relative(fp, 44);
+ get_and_buffer_bytes(fp, 44);
break;
case NOP: case PUSH: case POP:
case W0: case X0: case Y0: case Z0:
break;
case SET1: case PUT1: case RIGHT1: case DOWN1:
case W1: case X1: case Y1: case Z1: case FNT1:
- get_unsigned_byte(fp);
+ get_and_buffer_unsigned_byte(fp);
break;
case SET2: case PUT2: case RIGHT2: case DOWN2:
case W2: case X2: case Y2: case Z2: case FNT2:
- get_signed_pair(fp);
+ get_and_buffer_signed_pair(fp);
break;
case SET3: case PUT3: case RIGHT3: case DOWN3:
case W3: case X3: case Y3: case Z3: case FNT3:
- get_signed_triple(fp);
+ get_and_buffer_signed_triple(fp);
break;
case SET4: case PUT4: case RIGHT4: case DOWN4:
case W4: case X4: case Y4: case Z4: case FNT4:
- get_signed_quad(fp);
+ get_and_buffer_signed_quad(fp);
break;
case SET_RULE: case PUT_RULE:
- seek_relative(fp, 8);
+ get_and_buffer_bytes(fp, 8);
break;
case FNT_DEF1: do_fntdef1(); break;
@@ -1989,11 +2427,50 @@ dvi_scan_specials (long page_no,
case FNT_DEF3: do_fntdef3(); break;
case FNT_DEF4: do_fntdef4(); break;
+#ifdef XETEX
+ case XDV_GLYPH_STRING:
+ {
+ UNSIGNED_PAIR count;
+ get_and_buffer_unsigned_quad(fp); /* width */
+ count = get_and_buffer_unsigned_pair(fp); /* glyph count */
+ get_and_buffer_bytes(fp, count * 6); /* 2 bytes ID + 4 bytes x-location per glyph */
+ }
+ break;
+ case XDV_GLYPH_ARRAY:
+ {
+ UNSIGNED_PAIR count;
+ get_and_buffer_unsigned_quad(fp); /* width */
+ count = get_and_buffer_unsigned_pair(fp); /* glyph count */
+ get_and_buffer_bytes(fp, count * 10); /* 2 bytes ID + 8 bytes x,y-location per glyph */
+ }
+ break;
+ case XDV_NATIVE_FONT_DEF:
+ do_native_font_def(1);
+ break;
+ case XDV_PIC_FILE:
+ /* params: flags[1] t[4][6] p[2] len[2] path[l] */
+ {
+ UNSIGNED_PAIR len;
+ get_and_buffer_bytes(fp, 1 + 4 * 6 + 2);
+ len = get_and_buffer_unsigned_pair(fp); /* length of pathname */
+ get_and_buffer_bytes(fp, len);
+ }
+ break;
+#endif
+
case PTEXDIR:
- get_unsigned_byte(fp);
+ get_and_buffer_unsigned_byte(fp);
break;
- default: /* case PRE: case POST: case POST_POST: and others */
+ case POST:
+#ifdef XETEX
+ if (linear && dvi_page_buf_index == 1) {
+ /* this is actually an indication that we've reached the end of the input */
+ return;
+ }
+ /* else fall through to error case */
+#endif
+ default: /* case PRE: case POST_POST: and others */
ERROR("Unexpected opcode %d at pos=0x%x", opcode, tell_position(fp));
break;
}
diff --git a/Build/source/texk/dvipdfm-x/src/dvi.h b/Build/source/texk/dvipdfm-x/src/dvi.h
deleted file mode 100644
index f827bcafeaf..00000000000
--- a/Build/source/texk/dvipdfm-x/src/dvi.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-
- This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
- Copyright (C) 2002-2012 by Jin-Hwan Cho and Shunsaku Hirata,
- the dvipdfmx project team.
-
- Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu>
-
- 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.
-*/
-
-#ifndef _DVI_H_
-#define _DVI_H_
-
-#include "error.h"
-#include "numbers.h"
-/* spt_t */
-#include "pdfdev.h"
-
-extern void dvi_set_verbose (void);
-
-/* returns scale (dvi2pts) */
-extern double dvi_init (const char *dvi_filename, double mag);
-extern void dvi_close (void); /* Closes data structures created by dvi_open */
-
-extern double dvi_tell_mag (void);
-#ifdef XETEX
-extern double dvi_unit_size (void);
-#endif
-extern double dvi_dev_xpos (void);
-extern double dvi_dev_ypos (void);
-extern unsigned dvi_npages (void);
-extern const char *dvi_comment (void);
-
-extern void dvi_vf_init (int dev_font_id);
-extern void dvi_vf_finish (void);
-
-extern void dvi_set_font (int font_id);
-extern void dvi_set (SIGNED_QUAD ch);
-extern void dvi_rule (SIGNED_QUAD width, SIGNED_QUAD height);
-
-extern void dvi_right (SIGNED_QUAD x);
-extern void dvi_put (SIGNED_QUAD ch);
-extern void dvi_push (void);
-extern void dvi_pop (void);
-extern void dvi_w0 (void);
-extern void dvi_w (SIGNED_QUAD ch);
-extern void dvi_x0 (void);
-extern void dvi_x (SIGNED_QUAD ch);
-extern void dvi_down (SIGNED_QUAD y);
-extern void dvi_y (SIGNED_QUAD ch);
-extern void dvi_y0 (void);
-extern void dvi_z (SIGNED_QUAD ch);
-extern void dvi_z0 (void);
-extern void dvi_dir (UNSIGNED_BYTE dir);
-
-extern void dvi_do_page (long page_no,
- double paper_width, double paper_height,
- double x_offset, double y_offset);
-extern void dvi_scan_specials (long page_no,
- double *width, double *height,
- double *x_offset, double *y_offset,
- char *landscape, unsigned *minorversion,
- int *do_enc, unsigned *key_bits, unsigned *permission, char *owner_pw, char *user_pw);
-extern int dvi_locate_font (const char *name, spt_t ptsize);
-
-/* link or nolink:
- * See dvipdfm (not x) user's manual on pdf:link and pdf:nolink.
- * This is workaround for preventing inclusion of pagenation artifact such as
- * footnote and page number in link annotation.
- */
-extern void dvi_link_annot (int flag);
-/* The followings are for calculating bounding box of text for annotation.
- * DVI uses push/pop to do line-feed-carriage-return. So line breaking is
- * handled by inspecting current depth of DVI register stack.
- */
-extern void dvi_tag_depth (void);
-extern void dvi_untag_depth (void);
-extern void dvi_compute_boxes (int flag);
-
-extern void dvi_do_special (const void *buffer, UNSIGNED_QUAD size);
-
-#endif /* _DVI_H_ */
diff --git a/Build/source/texk/dvipdfm-x/src/dvipdfmx.c b/Build/source/texk/dvipdfm-x/src/dvipdfmx.c
index 9cbfeef9145..0b4ea307fe9 100644
--- a/Build/source/texk/dvipdfm-x/src/dvipdfmx.c
+++ b/Build/source/texk/dvipdfm-x/src/dvipdfmx.c
@@ -3,7 +3,7 @@
This is DVIPDFMx, an eXtended version of DVIPDFM by Mark A. Wicks.
Copyright (C) 2002-2013 by Jin-Hwan Cho, Matthias Franz, and Shunsaku Hirata,
- the dvipdfmx project team.
+ the DVIPDFMx project team.
Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu>
@@ -61,6 +61,10 @@
#include "error.h"
+#ifdef XETEX
+#include "tt_aux.h"
+#endif
+
int compat_mode = 0; /* 0 = dvipdfmx, 1 = dvipdfm */
static int verbose = 0;
@@ -110,12 +114,6 @@ char *dvi_filename = NULL, *pdf_filename = NULL;
static void
read_config_file (const char *config);
-#ifdef WIN32
-#define STRN_CMP strncasecmp
-#else
-#define STRN_CMP strncmp
-#endif
-
static void
set_default_pdf_filename(void)
{
@@ -124,12 +122,16 @@ set_default_pdf_filename(void)
dvi_base = xbasename(dvi_filename);
if (mp_mode &&
strlen(dvi_base) > 4 &&
- !STRN_CMP(".mps", dvi_base + strlen(dvi_base) - 4, 4)) {
+ FILESTRCASEEQ(".mps", dvi_base + strlen(dvi_base) - 4)) {
pdf_filename = NEW(strlen(dvi_base)+1, char);
strncpy(pdf_filename, dvi_base, strlen(dvi_base) - 4);
pdf_filename[strlen(dvi_base)-4] = '\0';
} else if (strlen(dvi_base) > 4 &&
- !STRN_CMP(".dvi", dvi_base+strlen(dvi_base)-4, 4)) {
+ (FILESTRCASEEQ(".dvi", dvi_base+strlen(dvi_base)-4)
+#ifdef XETEX
+ || FILESTRCASEEQ(".xdv", dvi_base+strlen(dvi_base)-4)
+#endif
+ )) {
pdf_filename = NEW(strlen(dvi_base)+1, char);
strncpy(pdf_filename, dvi_base, strlen(dvi_base)-4);
pdf_filename[strlen(dvi_base)-4] = '\0';
@@ -144,61 +146,61 @@ set_default_pdf_filename(void)
static void
show_version (void)
{
- fprintf(stdout, "\nThis is %s-%s by the DVIPDFMx project team,\n", PACKAGE, VERSION);
- fprintf(stdout, "modified for TeX Live,\n");
- fprintf(stdout, "an extended version of dvipdfm-0.13.2c developed by Mark A. Wicks.\n");
- fprintf(stdout, "\nCopyright (C) 2002-2013 by the DVIPDFMx project team\n");
- fprintf(stdout, "\nThis is free software; you can redistribute it and/or modify\n");
- fprintf(stdout, "it under the terms of the GNU General Public License as published by\n");
- fprintf(stdout, "the Free Software Foundation; either version 2 of the License, or\n");
- fprintf(stdout, "(at your option) any later version.\n");
+ fprintf (stdout, "\nThis is dvipdfmx-%s by the DVIPDFMx project team,\n", VERSION);
+ fprintf (stdout, "modified for TeX Live,\n");
+ fprintf (stdout, "an extended version of dvipdfm-0.13.2c developed by Mark A. Wicks.\n");
+ fprintf (stdout, "\nCopyright (C) 2002-2013 by the DVIPDFMx project team\n");
+ fprintf (stdout, "\nThis is free software; you can redistribute it and/or modify\n");
+ fprintf (stdout, "it under the terms of the GNU General Public License as published by\n");
+ fprintf (stdout, "the Free Software Foundation; either version 2 of the License, or\n");
+ fprintf (stdout, "(at your option) any later version.\n");
}
static void
show_usage (void)
{
- fprintf(stdout, "\nUsage: dvipdfmx [options] dvifile\n");
- fprintf(stdout, "-c \t\tIgnore color specials (for B&W printing)\n");
- fprintf(stdout, "-d number\tSet PDF decimal digits (0-5) [2]\n");
- fprintf(stdout, "-f filename\tSet font map file name [cid-x.map]\n");
- fprintf(stdout, "-g dimension\tAnnotation \"grow\" amount [0.0in]\n");
- fprintf(stdout, "-l \t\tLandscape mode\n");
- fprintf(stdout, "-m number\tSet additional magnification\n");
- fprintf(stdout, "-o filename\tSet output file name [dvifile.pdf]\n");
- fprintf(stdout, "-p papersize\tSet papersize [a4]\n");
- fprintf(stdout, "-q \t\tBe quiet\n");
- fprintf(stdout, "-r resolution\tSet resolution (in DPI) for raster fonts [600]\n");
- fprintf(stdout, "-s pages\tSelect page ranges (-)\n");
- fprintf(stdout, "-t \t\tEmbed thumbnail images of PNG format [dvifile.1] \n");
- fprintf(stdout, "-x dimension\tSet horizontal offset [1.0in]\n");
- fprintf(stdout, "-y dimension\tSet vertical offset [1.0in]\n");
- fprintf(stdout, "-z number \tSet zlib compression level (0-9) [9]\n");
-
- fprintf(stdout, "-v \t\tBe verbose\n");
- fprintf(stdout, "-vv\t\tBe more verbose\n");
- fprintf(stdout, "-C number\tSpecify miscellaneous option flags [0]:\n");
- fprintf(stdout, "\t\t 0x0001 reserved\n");
- fprintf(stdout, "\t\t 0x0002 Use semi-transparent filling for tpic shading command,\n");
- fprintf(stdout, "\t\t\t instead of opaque gray color. (requires PDF 1.4)\n");
- fprintf(stdout, "\t\t 0x0004 Treat all CIDFont as fixed-pitch font.\n");
- fprintf(stdout, "\t\t 0x0008 Do not replace duplicate fontmap entries.\n");
- fprintf(stdout, "\t\t 0x0010 Do not optimize PDF destinations.\n");
- fprintf(stdout, "\t\tPositive values are always ORed with previously given flags.\n");
- fprintf(stdout, "\t\tAnd negative values replace old values.\n");
- fprintf(stdout, "-D template\tPS->PDF conversion command line template [none]\n");
- fprintf(stdout, "-E \t\tEnable DVIPDFM emulation mode\n");
- fprintf(stdout, "-I number\tImage cache life in hours [-2]\n");
- fprintf(stdout, " \t 0: erase all old images and leave new images\n");
- fprintf(stdout, " \t-1: erase all old images and also erase new images\n");
- fprintf(stdout, " \t-2: ignore image cache\n");
- fprintf(stdout, "-K number\tEncryption key length [40]\n");
- fprintf(stdout, "-O number\tSet maximum depth of open bookmark items [0]\n");
- fprintf(stdout, "-P number\tSet permission flags for PDF encryption [0x003C]\n");
- fprintf(stdout, "-S \t\tEnable PDF encryption\n");
- fprintf(stdout, "-V number\tSet PDF minor version [4]\n");
- fprintf(stdout, "\nAll dimensions entered on the command line are \"true\" TeX dimensions.\n");
- fprintf(stdout, "Argument of \"-s\" lists physical page ranges separated by commas, e.g., \"-s 1-3,5-6\"\n");
- fprintf(stdout, "Papersize is specified by paper format (e.g., \"a4\") or by w<unit>,h<unit> (e.g., \"20cm,30cm\").\n");
+ fprintf (stdout, "\nUsage: dvipdfmx [options] dvifile\n");
+ fprintf (stdout, "-c \t\tIgnore color specials (for B&W printing)\n");
+ fprintf (stdout, "-d number\tSet PDF decimal digits (0-5) [2]\n");
+ fprintf (stdout, "-f filename\tSet font map file name [cid-x.map]\n");
+ fprintf (stdout, "-g dimension\tAnnotation \"grow\" amount [0.0in]\n");
+ fprintf (stdout, "-l \t\tLandscape mode\n");
+ fprintf (stdout, "-m number\tSet additional magnification\n");
+ fprintf (stdout, "-o filename\tSet output file name [dvifile.pdf]\n");
+ fprintf (stdout, "-p papersize\tSet papersize [a4]\n");
+ fprintf (stdout, "-q \t\tBe quiet\n");
+ fprintf (stdout, "-r resolution\tSet resolution (in DPI) for raster fonts [600]\n");
+ fprintf (stdout, "-s pages\tSelect page ranges (-)\n");
+ fprintf (stdout, "-t \t\tEmbed thumbnail images of PNG format [dvifile.1] \n");
+ fprintf (stdout, "-x dimension\tSet horizontal offset [1.0in]\n");
+ fprintf (stdout, "-y dimension\tSet vertical offset [1.0in]\n");
+ fprintf (stdout, "-z number \tSet zlib compression level (0-9) [9]\n");
+
+ fprintf (stdout, "-v \t\tBe verbose\n");
+ fprintf (stdout, "-vv\t\tBe more verbose\n");
+ fprintf (stdout, "-C number\tSpecify miscellaneous option flags [0]:\n");
+ fprintf (stdout, "\t\t 0x0001 reserved\n");
+ fprintf (stdout, "\t\t 0x0002 Use semi-transparent filling for tpic shading command,\n");
+ fprintf (stdout, "\t\t\t instead of opaque gray color. (requires PDF 1.4)\n");
+ fprintf (stdout, "\t\t 0x0004 Treat all CIDFont as fixed-pitch font.\n");
+ fprintf (stdout, "\t\t 0x0008 Do not replace duplicate fontmap entries.\n");
+ fprintf (stdout, "\t\t 0x0010 Do not optimize PDF destinations.\n");
+ fprintf (stdout, "\t\tPositive values are always ORed with previously given flags.\n");
+ fprintf (stdout, "\t\tAnd negative values replace old values.\n");
+ fprintf (stdout, "-D template\tPS->PDF conversion command line template [none]\n");
+ fprintf (stdout, "-E \t\tEnable DVIPDFM emulation mode\n");
+ fprintf (stdout, "-I number\tImage cache life in hours [-2]\n");
+ fprintf (stdout, " \t 0: erase all old images and leave new images\n");
+ fprintf (stdout, " \t-1: erase all old images and also erase new images\n");
+ fprintf (stdout, " \t-2: ignore image cache\n");
+ fprintf (stdout, "-K number\tEncryption key length [40]\n");
+ fprintf (stdout, "-O number\tSet maximum depth of open bookmark items [0]\n");
+ fprintf (stdout, "-P number\tSet permission flags for PDF encryption [0x003C]\n");
+ fprintf (stdout, "-S \t\tEnable PDF encryption\n");
+ fprintf (stdout, "-V number\tSet PDF minor version [4]\n");
+ fprintf (stdout, "\nAll dimensions entered on the command line are \"true\" TeX dimensions.\n");
+ fprintf (stdout, "Argument of \"-s\" lists physical page ranges separated by commas, e.g., \"-s 1-3,5-6\"\n");
+ fprintf (stdout, "Papersize is specified by paper format (e.g., \"a4\") or by w<unit>,h<unit> (e.g., \"20cm,30cm\").\n");
}
static void
@@ -618,7 +620,7 @@ do_args (int argc, char *argv[])
* do_args was called from config file. In that case, there is
* no dvi file name. Check for that case .
*/
- if (!mp_mode && STRN_CMP(".dvi", argv[0] + strlen(argv[0]) - 4, 4)) {
+ if (!mp_mode && !FILESTRCASEEQ(".dvi", argv[0] + strlen(argv[0]) - 4)) {
dvi_filename = NEW(strlen(argv[0]) + 5, char);
strcpy(dvi_filename, argv[0]);
strcat(dvi_filename, ".dvi");
@@ -865,18 +867,17 @@ main (int argc, char *argv[])
{
double dvi2pts;
- {
- const char *base = xbasename(argv[0]);
+ char *base = kpse_program_basename (argv[0]);
+
+ if (FILESTRCASEEQ (base, "extractbb") || FILESTRCASEEQ (base, "xbb"))
+ return extractbb (argc, argv, XBB_OUTPUT);
+ if (FILESTRCASEEQ (base, "ebb"))
+ return extractbb (argc, argv, EBB_OUTPUT);
+
+ if (FILESTRCASEEQ (base, "dvipdfm"))
+ compat_mode = 1;
- if (STRN_CMP(base, "dvipdfmx", 8) != 0 &&
- (STRN_CMP(base, "dvipdfm",7) == 0 || STRN_CMP(base, "ebb", 3) == 0))
- compat_mode = 1;
-
- if (STRN_CMP(base, "extractbb", 9) == 0 ||
- STRN_CMP(base, "xbb", 3) == 0 ||
- STRN_CMP(base, "ebb", 3) == 0)
- return extractbb(argc, argv, 0);
- }
+ free (base);
if (argc < 2) {
if (!really_quiet)
@@ -888,7 +889,7 @@ main (int argc, char *argv[])
#ifdef MIKTEX
miktex_initialize();
#else
- kpse_set_program_name(argv[0], PACKAGE);
+ kpse_set_program_name(argv[0], "dvipdfmx"); /* we pretend to be dvipdfmx for kpse purposes */
#endif
paperinit();
diff --git a/Build/source/texk/dvipdfm-x/src/epdf.c b/Build/source/texk/dvipdfm-x/src/epdf.c
index edb4ee6f5e4..46e1a75d15c 100644
--- a/Build/source/texk/dvipdfm-x/src/epdf.c
+++ b/Build/source/texk/dvipdfm-x/src/epdf.c
@@ -39,10 +39,7 @@
#include "mem.h"
#include "mfileio.h"
#include "error.h"
-
-#ifndef XETEX
#include "dvipdfmx.h"
-#endif
#include "pdfobj.h"
#include "pdfdev.h"
diff --git a/Build/source/texk/dvipdfm-x/src/pdfdev.h b/Build/source/texk/dvipdfm-x/src/pdfdev.h
deleted file mode 100644
index 6b3d5bb65e8..00000000000
--- a/Build/source/texk/dvipdfm-x/src/pdfdev.h
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
-
- This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
- Copyright (C) 2002-2012 by Jin-Hwan Cho and Shunsaku Hirata,
- the dvipdfmx project team.
-
- Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu>
-
- 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.
-*/
-
-#ifndef _PDFDEV_H_
-#define _PDFDEV_H_
-
-#include "numbers.h"
-#include "pdfobj.h"
-#include "pdfcolor.h"
-
-typedef signed long spt_t;
-
-typedef struct pdf_tmatrix
-{
- double a, b, c, d, e, f;
-} pdf_tmatrix;
-
-typedef struct pdf_rect
-{
- double llx, lly, urx, ury;
-} pdf_rect;
-
-typedef struct pdf_coord
-{
- double x, y;
-} pdf_coord;
-
-/* The name transform_info is misleading.
- * I'll put this here for a moment...
- */
-typedef struct
-{
- /* Physical dimensions
- *
- * If those values are given, images will be scaled
- * and/or shifted to fit within a box described by
- * those values.
- */
- double width;
- double height;
- double depth;
-
- pdf_tmatrix matrix; /* transform matrix */
- pdf_rect bbox; /* user_bbox */
-
- int flags;
-} transform_info;
-#define INFO_HAS_USER_BBOX (1 << 0)
-#define INFO_HAS_WIDTH (1 << 1)
-#define INFO_HAS_HEIGHT (1 << 2)
-#define INFO_DO_CLIP (1 << 3)
-#define INFO_DO_HIDE (1 << 4)
-extern void transform_info_clear (transform_info *info);
-
-
-extern void pdf_dev_set_verbose (void);
-
-/* Not in spt_t. */
-extern int pdf_sprint_matrix (char *buf, const pdf_tmatrix *p);
-extern int pdf_sprint_rect (char *buf, const pdf_rect *p);
-extern int pdf_sprint_coord (char *buf, const pdf_coord *p);
-extern int pdf_sprint_length (char *buf, double value);
-extern int pdf_sprint_number (char *buf, double value);
-
-/* unit_conv: multiplier for input unit (spt_t) to bp conversion.
- * precision: How many fractional digits preserved in output (not real
- * accuracy control).
- * is_bw: Ignore color related special instructions.
- */
-extern void pdf_init_device (double unit_conv, int precision, int is_bw);
-extern void pdf_close_device (void);
-
-/* returns 1.0/unit_conv */
-extern double dev_unit_dviunit (void);
-
-#if 0
-/* DVI interpreter knows text positioning in relative motion.
- * However, pdf_dev_set_string() recieves text string with placement
- * in absolute position in user space, and it convert absolute
- * positioning back to relative positioning. It is quite wasteful.
- *
- * TeX using DVI register stack operation to do CR and then use down
- * command for LF. DVI interpreter knows hint for current leading
- * and others (raised or lowered), but they are mostly lost in
- * pdf_dev_set_string().
- */
-
-typedef struct
-{
- int argc;
-
- struct {
- int is_kern; /* kern or string */
-
- spt_t kern; /* negative kern means space */
-
- int offset; /* offset to sbuf */
- int length; /* length of string */
- } args[];
-
- unsigned char sbuf[PDF_STRING_LEN_MAX];
-
-} pdf_text_string;
-
-/* Something for handling raise, leading, etc. here. */
-
-#endif
-
-/* Draw texts and rules:
- *
- * xpos, ypos, width, and height are all fixed-point numbers
- * converted to big-points by multiplying unit_conv (dvi2pts).
- * They must be position in the user space.
- *
- * ctype:
- * 0 - input string is in multi-byte encoding.
- * 1 - input string is in 8-bit encoding.
- * 2 - input string is in 16-bit encoding.
- */
-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);
-extern void pdf_dev_set_rule (spt_t xpos, spt_t ypos,
- spt_t width, spt_t height);
-
-/* Place XObject */
-extern int pdf_dev_put_image (int xobj_id,
- transform_info *p, double ref_x, double ref_y);
-
-/* The design_size and ptsize required by PK font support...
- */
-extern int pdf_dev_locate_font (const char *font_name, spt_t ptsize);
-
-extern int pdf_dev_setfont (const char *font_name, spt_t ptsize);
-
-/* The following two routines are NOT WORKING.
- * Dvipdfmx doesn't manage gstate well..
- */
-#ifdef XETEX
-/* pdf_dev_translate() or pdf_dev_concat() should be used. */
-extern void pdf_dev_set_origin (double orig_x, double orig_y);
-#endif
-/* Always returns 1.0, please rename this. */
-extern double pdf_dev_scale (void);
-
-/* Access text state parameters. */
-#if 0
-extern int pdf_dev_currentfont (void); /* returns font_id */
-extern double pdf_dev_get_font_ptsize (int font_id);
-#endif
-extern int pdf_dev_get_font_wmode (int font_id); /* ps: special support want this (pTeX). */
-
-/* Text composition (direction) mode
- * This affects only when auto_rotate is enabled.
- */
-extern int pdf_dev_get_dirmode (void);
-extern void pdf_dev_set_dirmode (int dir_mode);
-
-/* Set rect to rectangle in device space.
- * Unit conversion spt_t to bp and transformation applied within it.
- */
-extern void pdf_dev_set_rect (pdf_rect *rect,
- spt_t x_pos, spt_t y_pos,
- spt_t width, spt_t height, spt_t depth);
-
-/* Accessor to various device parameters.
- */
-#define PDF_DEV_PARAM_AUTOROTATE 1
-#define PDF_DEV_PARAM_COLORMODE 2
-
-extern int pdf_dev_get_param (int param_type);
-extern void pdf_dev_set_param (int param_type, int value);
-
-/* Text composition mode is ignored (always same as font's
- * writing mode) and glyph rotation is not enabled if
- * auto_rotate is unset.
- */
-#define pdf_dev_set_autorotate(v) pdf_dev_set_param(PDF_DEV_PARAM_AUTOROTATE, (v))
-#define pdf_dev_set_colormode(v) pdf_dev_set_param(PDF_DEV_PARAM_COLORMODE, (v))
-
-/*
- * For pdf_doc, pdf_draw and others.
- */
-
-/* Force reselecting font:
- * XFrom (content grabbing) and Metapost support want them.
- */
-extern void pdf_dev_reset_fonts (void);
-
-/* Initialization of transformation matrix with M and others.
- * They are called within pdf_doc_begin_page() and pdf_doc_end_page().
- */
-extern void pdf_dev_bop (const pdf_tmatrix *M);
-extern void pdf_dev_eop (void);
-
-/* Text is normal and line art is not normal in dvipdfmx. So we don't have
- * begin_text (BT in PDF) and end_text (ET), but instead we have graphics_mode()
- * to terminate text section. pdf_dev_flushpath() and others call this.
- */
-extern void graphics_mode (void);
-
-extern void pdf_dev_get_coord(double *xpos, double *ypos);
-extern void pdf_dev_push_coord(double xpos, double ypos);
-extern void pdf_dev_pop_coord(void);
-
-#endif /* _PDFDEV_H_ */
diff --git a/Build/source/texk/dvipdfm-x/src/pdfdraw.h b/Build/source/texk/dvipdfm-x/src/pdfdraw.h
deleted file mode 100644
index a2b8638a742..00000000000
--- a/Build/source/texk/dvipdfm-x/src/pdfdraw.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
-
- This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
- Copyright (C) 2002-2012 by Jin-Hwan Cho and Shunsaku Hirata,
- the dvipdfmx project team.
-
- Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu>
-
- 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.
-*/
-
-#ifndef _PDF_DRAW_H_
-#define _PDF_DRAW_H_
-
-#include "pdfcolor.h"
-#include "pdfdev.h"
-
-#define PDF_DASH_SIZE_MAX 16
-#define PDF_GSAVE_MAX 256
-
-extern void pdf_dev_init_gstates (void);
-extern void pdf_dev_clear_gstates (void);
-
-#define pdf_copymatrix(m,n) do {\
- (m)->a = (n)->a; (m)->b = (n)->b;\
- (m)->c = (n)->c; (m)->d = (n)->d;\
- (m)->e = (n)->e; (m)->f = (n)->f;\
-} while (0)
-
-#define pdf_setmatrix(m,p,q,r,s,t,u) do {\
- (m)->a = (p); (m)->b = (q);\
- (m)->c = (r); (m)->d = (s);\
- (m)->e = (t); (m)->f = (u);\
-} while (0)
-
-/* m -> n x m */
-#define pdf_concatmatrix(m,n) do {\
- double _tmp_a, _tmp_b, _tmp_c, _tmp_d; \
- _tmp_a = (m)->a; _tmp_b = (m)->b; \
- _tmp_c = (m)->c; _tmp_d = (m)->d; \
- (m)->a = ((n)->a) * _tmp_a + ((n)->b) * _tmp_c; \
- (m)->b = ((n)->a) * _tmp_b + ((n)->b) * _tmp_d; \
- (m)->c = ((n)->c) * _tmp_a + ((n)->d) * _tmp_c; \
- (m)->d = ((n)->c) * _tmp_b + ((n)->d) * _tmp_d; \
- (m)->e += ((n)->e) * _tmp_a + ((n)->f) * _tmp_c; \
- (m)->f += ((n)->e) * _tmp_b + ((n)->f) * _tmp_d; \
-} while (0)
-
-typedef struct pdf_path_ pdf_path;
-
-extern int pdf_dev_currentmatrix (pdf_tmatrix *M);
-extern int pdf_dev_currentpoint (pdf_coord *cp);
-
-extern int pdf_dev_setlinewidth (double width);
-extern int pdf_dev_setmiterlimit (double mlimit);
-extern int pdf_dev_setlinecap (int style);
-extern int pdf_dev_setlinejoin (int style);
-extern int pdf_dev_setdash (int count,
- double *pattern,
- double offset);
-#if 0
-extern int pdf_dev_setflat (int flatness);
-#endif
-
-/* Path Construction */
-extern int pdf_dev_moveto (double x , double y);
-extern int pdf_dev_rmoveto (double x , double y);
-extern int pdf_dev_closepath (void);
-
-extern int pdf_dev_lineto (double x0 , double y0);
-extern int pdf_dev_rlineto (double x0 , double y0);
-extern int pdf_dev_curveto (double x0 , double y0,
- double x1 , double y1,
- double x2 , double y2);
-extern int pdf_dev_rcurveto (double x0 , double y0,
- double x1 , double y1,
- double x2 , double y2);
-extern int pdf_dev_arc (double c_x, double c_y, double r,
- double a_0, double a_1);
-extern int pdf_dev_arcn (double c_x, double c_y, double r,
- double a_0, double a_1);
-
-#define PDF_FILL_RULE_NONZERO 0
-#define PDF_FILL_RULE_EVENODD 1
-
-extern int pdf_dev_newpath (void);
-
-/* Path Painting */
-extern int pdf_dev_clip (void);
-extern int pdf_dev_eoclip (void);
-
-
-#if 0
-extern int pdf_dev_rectstroke (double x, double y,
- double w, double h,
- const pdf_tmatrix *M /* optional */
- );
-#endif
-extern int pdf_dev_rectfill (double x, double y, double w, double h);
-extern int pdf_dev_rectclip (double x, double y, double w, double h);
-
-extern int pdf_dev_flushpath (char p_op, int fill_rule);
-
-#define pdf_dev_fill() pdf_dev_flushpath('f', PDF_FILL_RULE_NONZERO)
-#define pdf_dev_eofill() pdf_dev_flushpath('f', PDF_FILL_RULE_EVENODD)
-#define pdf_dev_stroke() pdf_dev_flushpath('S', PDF_FILL_RULE_NONZERO)
-#define pdf_dev_fillstroke() pdf_dev_flushpath('B', PDF_FILL_RULE_NONZERO)
-
-extern int pdf_dev_concat (const pdf_tmatrix *M);
-/* NULL pointer of M mean apply current transformation */
-extern void pdf_dev_dtransform (pdf_coord *p, const pdf_tmatrix *M);
-extern void pdf_dev_idtransform (pdf_coord *p, const pdf_tmatrix *M);
-extern void pdf_dev_transform (pdf_coord *p, const pdf_tmatrix *M);
-#if 0
-extern void pdf_dev_itransform (pdf_coord *p, const pdf_tmatrix *M);
-#endif
-
-extern int pdf_dev_gsave (void);
-extern int pdf_dev_grestore (void);
-
-/* Requires from mpost.c because new MetaPost graphics must initialize
- * the current gstate. */
-extern int pdf_dev_push_gstate (void);
-extern int pdf_dev_pop_gstate (void);
-
-
-/* extension */
-extern int pdf_dev_arcx (double c_x, double c_y,
- double r_x, double r_y,
- double a_0, double a_1,
- int a_d, /* arc direction */
- double xar /* x-axis-rotation */
- );
-extern int pdf_dev_bspline (double x0, double y0,
- double x1, double y1,
- double x2, double y2);
-
-
-extern void pdf_invertmatrix (pdf_tmatrix *M);
-
-/* The depth here is the depth of q/Q nesting.
- * We must remember current depth of nesting when starting a page or xform,
- * and must recover until that depth at the end of page/xform.
- */
-extern int pdf_dev_current_depth (void);
-extern void pdf_dev_grestore_to (int depth);
-#define pdf_dev_grestoreall() pdf_dev_grestore_to(0);
-
-extern void pdf_dev_set_color (const pdf_color *color, char mask, int force);
-#define pdf_dev_set_strokingcolor(c) pdf_dev_set_color(c, 0, 0);
-#define pdf_dev_set_nonstrokingcolor(c) pdf_dev_set_color(c, 0x20, 0);
-extern void pdf_dev_reset_color (int force);
-
-#endif /* _PDF_DRAW_H_ */
diff --git a/Build/source/texk/dvipdfm-x/src/xbb.c b/Build/source/texk/dvipdfm-x/src/xbb.c
index c074ef40cff..f11640e6b17 100644
--- a/Build/source/texk/dvipdfm-x/src/xbb.c
+++ b/Build/source/texk/dvipdfm-x/src/xbb.c
@@ -54,28 +54,29 @@ static void show_version(void)
{
if (really_quiet) return;
- fprintf(stdout, "%s, version %s, Copyright (C) 2009 by Jin-Hwan Cho and Matthias Franz\n", XBB_PROGRAM, XBB_VERSION);
- fprintf(stdout, "A bounding box extraction utility from PDF, PNG, and JPEG.\n");
- fprintf(stdout, "\nThis is free software; you can redistribute it and/or modify\n");
- fprintf(stdout, "it under the terms of the GNU General Public License as published by\n");
- fprintf(stdout, "the Free Software Foundation; either version 2 of the License, or\n");
- fprintf(stdout, "(at your option) any later version.\n");
+ fprintf (stdout, "%s, version %s, Copyright (C) 2009 by Jin-Hwan Cho and Matthias Franz\n",
+ XBB_PROGRAM, XBB_VERSION);
+ fprintf (stdout, "A bounding box extraction utility from PDF, PNG, and JPEG.\n");
+ fprintf (stdout, "\nThis is free software; you can redistribute it and/or modify\n");
+ fprintf (stdout, "it under the terms of the GNU General Public License as published by\n");
+ fprintf (stdout, "the Free Software Foundation; either version 2 of the License, or\n");
+ fprintf (stdout, "(at your option) any later version.\n");
}
static void show_usage(void)
{
if (really_quiet) return;
- fprintf(stdout, "\nUsage: %s [-v|-q] [-O] [-m|-x] [files]\n", XBB_PROGRAM);
- fprintf(stdout, "\t-v\tBe verbose\n");
- fprintf(stdout, "\t-q\tBe quiet\n");
- fprintf(stdout, "\t-O\tWrite output to stdout\n");
+ fprintf (stdout, "\nUsage: %s [-v|-q] [-O] [-m|-x] [files]\n", XBB_PROGRAM);
+ fprintf (stdout, "\t-v\tBe verbose\n");
+ fprintf (stdout, "\t-q\tBe quiet\n");
+ fprintf (stdout, "\t-O\tWrite output to stdout\n");
if(compat_mode) {
- fprintf(stdout, "\t-m\tOutput .bb file used in DVIPDFM (default)\n");
- fprintf(stdout, "\t-x\tOutput .xbb file used in DVIPDFMx\n");
+ fprintf (stdout, "\t-m\tOutput .bb file used in DVIPDFM (default)\n");
+ fprintf (stdout, "\t-x\tOutput .xbb file used in DVIPDFMx\n");
} else {
- fprintf(stdout, "\t-m\tOutput .bb file used in DVIPDFM\n");
- fprintf(stdout, "\t-x\tOutput .xbb file used in DVIPDFMx (default)\n");
+ fprintf (stdout, "\t-m\tOutput .bb file used in DVIPDFM\n");
+ fprintf (stdout, "\t-x\tOutput .xbb file used in DVIPDFMx (default)\n");
}
}
@@ -244,6 +245,8 @@ static void do_pdf (FILE *fp, char *filename)
int extractbb (int argc, char *argv[], int mode)
{
+ compat_mode = (mode == EBB_OUTPUT);
+
pdf_files_init();
pdf_set_version(5);
diff --git a/Build/source/texk/dvipdfm-x/xsrc/cff.c b/Build/source/texk/dvipdfm-x/xsrc/cff.c
deleted file mode 100644
index 082d3d873e9..00000000000
--- a/Build/source/texk/dvipdfm-x/xsrc/cff.c
+++ /dev/null
@@ -1,1501 +0,0 @@
-/*
-
- This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
- Copyright (C) 2002-2012 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.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <string.h>
-
-#include "system.h"
-#include "mem.h"
-#include "error.h"
-#include "mfileio.h"
-
-#include "cff_limits.h"
-#include "cff_types.h"
-#include "cff_stdstr.h"
-#include "cff_dict.h"
-
-#include "cff.h"
-
-#define CFF_DEBUG 5
-#define CFF_DEBUG_STR "CFF"
-
-#ifdef XETEX
-#define SFNT_OR_FILE sfnt
-#define SFONT_OR_STREAM sfont
-#define get_card8(s) sfnt_get_byte((s))
-#define get_card16(s) sfnt_get_ushort((s))
-#else
-#define SFNT_OR_FILE FILE
-#define SFONT_OR_STREAM stream
-#define get_card8(s) get_unsigned_byte((s))
-#define get_card16(s) get_unsigned_pair((s))
-#endif
-
-static unsigned long get_unsigned (SFNT_OR_FILE *SFONT_OR_STREAM, int n)
-{
- unsigned long v = 0;
-
- while (n-- > 0)
- v = v*0x100u + get_card8(SFONT_OR_STREAM);
-
- return v;
-}
-
-#define get_offset(s, n) get_unsigned((s), (n))
-
-/*
- * Read Header, Name INDEX, Top DICT INDEX, and String INDEX.
- */
-cff_font *cff_open(SFNT_OR_FILE *SFONT_OR_STREAM, long offset, int n)
-{
- cff_font *cff;
- cff_index *idx;
-
- cff = NEW(1, cff_font);
-
- cff->fontname = NULL;
- cff->index = n;
- cff->SFONT_OR_STREAM = SFONT_OR_STREAM;
- cff->offset = offset;
- cff->filter = 0; /* not used */
- cff->flag = 0;
-
- cff->name = NULL;
- cff->gsubr = NULL;
- cff->encoding = NULL;
- cff->charsets = NULL;
- cff->fdselect = NULL;
- cff->cstrings = NULL;
- cff->fdarray = NULL;
- cff->private = NULL;
- cff->subrs = NULL;
-
- cff->num_glyphs = 0;
- cff->num_fds = 0;
- cff->_string = NULL;
-
- cff_seek_set(cff, 0);
- cff->header.major = get_card8(cff->SFONT_OR_STREAM);
- cff->header.minor = get_card8(cff->SFONT_OR_STREAM);
- cff->header.hdr_size = get_card8(cff->SFONT_OR_STREAM);
- cff->header.offsize = get_card8(cff->SFONT_OR_STREAM);
- if (cff->header.offsize < 1 ||
- cff->header.offsize > 4)
- ERROR("invalid offsize data");
-
- if (cff->header.major > 1 ||
- cff->header.minor > 0) {
- WARN("%s: CFF version %u.%u not supported.",
- CFF_DEBUG_STR, cff->header.major, cff->header.minor);
- cff_close(cff);
- return NULL;
- }
-
- cff_seek_set(cff, (cff->header).hdr_size);
-
- /* Name INDEX */
- idx = cff_get_index(cff);
- if (n > idx->count - 1) {
- WARN("%s: Invalid CFF fontset index number.", CFF_DEBUG_STR);
- cff_close(cff);
- return NULL;
- }
-
- cff->name = idx;
-
- cff->fontname = cff_get_name(cff);
-
- /* Top DICT INDEX */
- idx = cff_get_index(cff);
- if (n > idx->count - 1)
- ERROR("CFF Top DICT not exist...");
- cff->topdict = cff_dict_unpack(idx->data + idx->offset[n] - 1,
- idx->data + idx->offset[n + 1] - 1);
- if (!cff->topdict)
- ERROR("Parsing CFF Top DICT data failed...");
- cff_release_index(idx);
-
- if (cff_dict_known(cff->topdict, "CharstringType") &&
- cff_dict_get(cff->topdict, "CharstringType", 0) != 2) {
- WARN("Only Type 2 Charstrings supported...");
- cff_close(cff);
- return NULL;
- }
-
- if (cff_dict_known(cff->topdict, "SyntheticBase")) {
- WARN("CFF Synthetic font not supported.");
- cff_close(cff);
- return NULL;
- }
-
- /* String INDEX */
- cff->string = cff_get_index(cff);
-
- /* offset to GSubr */
- cff->gsubr_offset = cff->sfont->loc - offset;
-
- /* Number of glyphs */
- offset = (long) cff_dict_get(cff->topdict, "CharStrings", 0);
- cff_seek_set(cff, offset);
- cff->num_glyphs = get_card16(cff->SFONT_OR_STREAM);
-
- /* Check for font type */
- if (cff_dict_known(cff->topdict, "ROS")) {
- cff->flag |= FONTTYPE_CIDFONT;
- } else {
- cff->flag |= FONTTYPE_FONT;
- }
-
- /* Check for encoding */
- if (cff_dict_known(cff->topdict, "Encoding")) {
- offset = (long) cff_dict_get(cff->topdict, "Encoding", 0);
- if (offset == 0) { /* predefined */
- cff->flag |= ENCODING_STANDARD;
- } else if (offset == 1) {
- cff->flag |= ENCODING_EXPERT;
- }
- } else {
- cff->flag |= ENCODING_STANDARD;
- }
-
- /* Check for charset */
- if (cff_dict_known(cff->topdict, "charset")) {
- offset = (long) cff_dict_get(cff->topdict, "charset", 0);
- if (offset == 0) { /* predefined */
- cff->flag |= CHARSETS_ISOADOBE;
- } else if (offset == 1) {
- cff->flag |= CHARSETS_EXPERT;
- } else if (offset == 2) {
- cff->flag |= CHARSETS_EXPSUB;
- }
- } else {
- cff->flag |= CHARSETS_ISOADOBE;
- }
-
- cff_seek_set(cff, cff->gsubr_offset); /* seek back to GSubr */
-
-#ifdef XETEX
- cff->ft_to_gid = NULL;
-#endif
-
- return cff;
-}
-
-void
-cff_close (cff_font *cff)
-{
- card16 i;
-
- if (cff) {
- if (cff->fontname) RELEASE(cff->fontname);
- if (cff->name) cff_release_index(cff->name);
- if (cff->topdict) cff_release_dict(cff->topdict);
- if (cff->string) cff_release_index(cff->string);
- if (cff->gsubr) cff_release_index(cff->gsubr);
- if (cff->encoding) cff_release_encoding(cff->encoding);
- if (cff->charsets) cff_release_charsets(cff->charsets);
- if (cff->fdselect) cff_release_fdselect(cff->fdselect);
- if (cff->cstrings) cff_release_index(cff->cstrings);
- if (cff->fdarray) {
- for (i=0;i<cff->num_fds;i++) {
- if (cff->fdarray[i]) cff_release_dict(cff->fdarray[i]);
- }
- RELEASE(cff->fdarray);
- }
- if (cff->private) {
- for (i=0;i<cff->num_fds;i++) {
- if (cff->private[i]) cff_release_dict(cff->private[i]);
- }
- RELEASE(cff->private);
- }
- if (cff->subrs) {
- for (i=0;i<cff->num_fds;i++) {
- if (cff->subrs[i]) cff_release_index(cff->subrs[i]);
- }
- RELEASE(cff->subrs);
- }
- if (cff->_string)
- cff_release_index(cff->_string);
-
-#ifdef XETEX
- if (cff->ft_to_gid)
- RELEASE(cff->ft_to_gid);
-#endif
-
- RELEASE(cff);
- }
-
- return;
-}
-
-char *
-cff_get_name (cff_font *cff)
-{
- char *fontname;
- l_offset len;
- cff_index *idx;
-
- idx = cff->name;
- len = idx->offset[cff->index + 1] - idx->offset[cff->index];
- fontname = NEW(len + 1, char);
- memcpy(fontname, idx->data + idx->offset[cff->index] - 1, len);
- fontname[len] = '\0';
-
- return fontname;
-}
-
-long
-cff_set_name (cff_font *cff, char *name)
-{
- cff_index *idx;
-
- if (strlen(name) > 127)
- ERROR("FontName string length too large...");
-
- if (cff->name)
- cff_release_index(cff->name);
-
- cff->name = idx = NEW(1, cff_index);
- idx->count = 1;
- idx->offsize = 1;
- idx->offset = NEW(2, l_offset);
- (idx->offset)[0] = 1;
- (idx->offset)[1] = strlen(name) + 1;
- idx->data = NEW(strlen(name), card8);
- memmove(idx->data, name, strlen(name)); /* no trailing '\0' */
-
- return 5 + strlen(name);
-}
-
-long
-cff_put_header (cff_font *cff, card8 *dest, long destlen)
-{
- if (destlen < 4)
- ERROR("Not enough space available...");
-
- *(dest++) = cff->header.major;
- *(dest++) = cff->header.minor;
- *(dest++) = 4; /* Additional data in between header and
- * Name INDEX ignored.
- */
- /* We will set all offset (0) to four-byte integer. */
- *(dest++) = 4;
- cff->header.offsize = 4;
-
- return 4;
-}
-
-/* Only read header part but not body */
-cff_index *
-cff_get_index_header (cff_font *cff)
-{
- cff_index *idx;
- card16 i, count;
-
- idx = NEW(1, cff_index);
-
- idx->count = count = get_card16(cff->SFONT_OR_STREAM);
- if (count > 0) {
- idx->offsize = get_card8(cff->SFONT_OR_STREAM);
- if (idx->offsize < 1 || idx->offsize > 4)
- ERROR("invalid offsize data");
-
- idx->offset = NEW(count+1, l_offset);
- for (i=0;i<count+1;i++) {
- (idx->offset)[i] = get_offset(cff->SFONT_OR_STREAM, idx->offsize);
- }
-
- if (idx->offset[0] != 1)
- ERROR("cff_get_index(): invalid index data");
-
- idx->data = NULL;
- } else {
- idx->offsize = 0;
- idx->offset = NULL;
- idx->data = NULL;
- }
-
- return idx;
-}
-
-cff_index *
-cff_get_index (cff_font *cff)
-{
- cff_index *idx;
- card16 i, count;
- long length, nb_read, offset;
-
- idx = NEW(1, cff_index);
-
- idx->count = count = get_card16(cff->SFONT_OR_STREAM);
- if (count > 0) {
- idx->offsize = get_card8(cff->SFONT_OR_STREAM);
- if (idx->offsize < 1 || idx->offsize > 4)
- ERROR("invalid offsize data");
-
- idx->offset = NEW(count + 1, l_offset);
- for (i = 0 ; i < count + 1; i++) {
- idx->offset[i] = get_offset(cff->SFONT_OR_STREAM, idx->offsize);
- }
-
- if (idx->offset[0] != 1)
- ERROR("Invalid CFF Index offset data");
-
- length = idx->offset[count] - idx->offset[0];
-
- idx->data = NEW(length, card8);
- offset = 0;
- while (length > 0) {
- nb_read = sfnt_read(idx->data + offset, length, cff->sfont);
- offset += nb_read;
- length -= nb_read;
- }
- } else {
- idx->offsize = 0;
- idx->offset = NULL;
- idx->data = NULL;
- }
-
- return idx;
-}
-
-long
-cff_pack_index (cff_index *idx, card8 *dest, long destlen)
-{
- long len = 0;
- long datalen;
- card16 i;
-
- if (idx->count < 1) {
- if (destlen < 2)
- ERROR("Not enough space available...");
- memset(dest, 0, 2);
- return 2;
- }
-
- len = cff_index_size(idx);
- datalen = idx->offset[idx->count] - 1;
-
- if (destlen < len)
- ERROR("Not enough space available...");
-
- *(dest++) = (idx->count >> 8) & 0xff;
- *(dest++) = idx->count & 0xff;
-
- if (datalen < 0xffUL) {
- idx->offsize = 1;
- *(dest++) = 1;
- for (i = 0; i <= idx->count; i++) {
- *(dest++) = (card8) (idx->offset[i] & 0xff);
- }
- } else if (datalen < 0xffffUL) {
- idx->offsize = 2;
- *(dest++) = 2;
- for (i = 0; i <= idx->count; i++) {
- *(dest++) = (card8) ((idx->offset[i] >> 8) & 0xff);
- *(dest++) = (card8) ( idx->offset[i] & 0xff);
- }
- } else if (datalen < 0xffffffUL) {
- idx->offsize = 3;
- *(dest++) = 3;
- for (i = 0; i <= idx->count; i++) {
- *(dest++) = (card8)((idx->offset[i] >> 16) & 0xff);
- *(dest++) = (card8)((idx->offset[i] >> 8) & 0xff);
- *(dest++) = (card8)(idx->offset[i] & 0xff);
- }
- } else {
- idx->offsize = 4;
- *(dest++) = 4;
- for (i = 0; i <= idx->count; i++) {
- *(dest++) = (card8)((idx->offset[i] >> 24) & 0xff);
- *(dest++) = (card8)((idx->offset[i] >> 16) & 0xff);
- *(dest++) = (card8)((idx->offset[i] >> 8) & 0xff);
- *(dest++) = (card8)(idx->offset[i] & 0xff);
- }
- }
-
- memmove(dest, idx->data, idx->offset[idx->count] - 1);
-
- return len;
-}
-
-long
-cff_index_size (cff_index *idx)
-{
- if (idx->count > 0) {
- l_offset datalen;
-
- datalen = idx->offset[idx->count] - 1;
- if (datalen < 0xffUL) {
- idx->offsize = 1;
- } else if (datalen < 0xffffUL) {
- idx->offsize = 2;
- } else if (datalen < 0xffffffUL) {
- idx->offsize = 3;
- } else {
- idx->offsize = 4;
- }
- return (3 + (idx->offsize)*(idx->count + 1) + datalen);
- } else {
- return 2;
- }
-}
-
-
-cff_index *cff_new_index (card16 count)
-{
- cff_index *idx;
-
- idx = NEW(1, cff_index);
- idx->count = count;
- idx->offsize = 0;
-
- if (count > 0) {
- idx->offset = NEW(count + 1, l_offset);
- (idx->offset)[0] = 1;
- } else {
- idx->offset = NULL;
- }
- idx->data = NULL;
-
- return idx;
-}
-
-void cff_release_index (cff_index *idx)
-{
- if (idx) {
- if (idx->data) {
- RELEASE(idx->data);
- }
- if (idx->offset) {
- RELEASE(idx->offset);
- }
- RELEASE(idx);
- }
-}
-
-/* Strings */
-char *cff_get_string (cff_font *cff, s_SID id)
-{
- char *result = NULL;
- long len;
-
- if (id < CFF_STDSTR_MAX) {
- len = strlen(cff_stdstr[id]);
- result = NEW(len+1, char);
- memcpy(result, cff_stdstr[id], len);
- result[len] = '\0';
- } else if (cff && cff->string) {
- cff_index *strings = cff->string;
- id -= CFF_STDSTR_MAX;
- if (id < strings->count) {
- len = (strings->offset)[id+1] - (strings->offset)[id];
- result = NEW(len + 1, char);
- memmove(result, strings->data + (strings->offset)[id] - 1, len);
- result[len] = '\0';
- }
- }
-
- return result;
-}
-
-long cff_get_sid (cff_font *cff, const char *str)
-{
- card16 i;
-
- if (!cff || !str)
- return -1;
-
- /* I search String INDEX first. */
- if (cff && cff->string) {
- cff_index *idx = cff->string;
- for (i = 0; i < idx->count; i++) {
- if (strlen(str) == (idx->offset)[i+1] - (idx->offset)[i] &&
- !memcmp(str, (idx->data)+(idx->offset)[i]-1, strlen(str)))
- return (i + CFF_STDSTR_MAX);
- }
- }
-
- for (i = 0; i < CFF_STDSTR_MAX; i++) {
- if (!strcmp(str, cff_stdstr[i]))
- return i;
- }
-
- return -1;
-}
-
-long cff_get_seac_sid (cff_font *cff, const char *str)
-{
- card16 i;
-
- if (!cff || !str)
- return -1;
-
- for (i = 0; i < CFF_STDSTR_MAX; i++) {
- if (!strcmp(str, cff_stdstr[i]))
- return i;
- }
-
- return -1;
-}
-
-int cff_match_string (cff_font *cff, const char *str, s_SID sid)
-{
- card16 i;
-
- if (sid < CFF_STDSTR_MAX) {
- return ((!strcmp(str, cff_stdstr[sid])) ? 1 : 0);
- } else {
- i = sid - CFF_STDSTR_MAX;
- if (cff == NULL || cff->string == NULL || i >= cff->string->count)
- ERROR("Invalid SID");
- if (strlen(str) == (cff->string->offset)[i+1] - (cff->string->offset)[i])
- return (!memcmp(str,
- (cff->string->data)+(cff->string->offset)[i]-1,
- strlen(str))) ? 1 : 0;
- }
-
- return 0;
-}
-
-void cff_update_string (cff_font *cff)
-{
- if (cff == NULL)
- ERROR("CFF font not opened.");
-
- if (cff->string)
- cff_release_index(cff->string);
- cff->string = cff->_string;
- cff->_string = NULL;
-}
-
-s_SID cff_add_string (cff_font *cff, const char *str, int unique)
-/* Setting unique == 1 eliminates redundant or predefined strings. */
-{
- card16 idx;
- cff_index *strings;
- l_offset offset, size;
- long len = strlen(str);
-
- if (cff == NULL)
- ERROR("CFF font not opened.");
-
- if (cff->_string == NULL)
- cff->_string = cff_new_index(0);
- strings = cff->_string;
-
- if (unique) {
- /* TODO: do binary search to speed things up */
- for (idx = 0; idx < CFF_STDSTR_MAX; idx++) {
- if (cff_stdstr[idx] && !strcmp(cff_stdstr[idx], str))
- return idx;
- }
- for (idx = 0; idx < strings->count; idx++) {
- size = strings->offset[idx+1] - strings->offset[idx];
- offset = strings->offset[idx];
- if (size == len && !memcmp(strings->data+offset-1, str, len))
- return (idx + CFF_STDSTR_MAX);
- }
- }
-
- offset = (strings->count > 0) ? strings->offset[strings->count] : 1;
- strings->offset = RENEW(strings->offset, strings->count+2, l_offset);
- if (strings->count == 0)
- strings->offset[0] = 1;
- idx = strings->count;
- strings->count += 1;
- strings->offset[strings->count] = offset + len;
- strings->data = RENEW(strings->data, offset+len-1, card8);
- memcpy(strings->data+offset-1, str, len);
-
- return (idx + CFF_STDSTR_MAX);
-}
-
-/*
- * Encoding and Charset
- *
- * Encoding and Charset arrays always begin with GID = 1.
- */
-long cff_read_encoding (cff_font *cff)
-{
- cff_encoding *encoding;
- long offset, length;
- card8 i;
-
- if (cff->topdict == NULL) {
- ERROR("Top DICT data not found");
- }
-
- if (!cff_dict_known(cff->topdict, "Encoding")) {
- cff->flag |= ENCODING_STANDARD;
- cff->encoding = NULL;
- return 0;
- }
-
- offset = (long) cff_dict_get(cff->topdict, "Encoding", 0);
- if (offset == 0) { /* predefined */
- cff->flag |= ENCODING_STANDARD;
- cff->encoding = NULL;
- return 0;
- } else if (offset == 1) {
- cff->flag |= ENCODING_EXPERT;
- cff->encoding = NULL;
- return 0;
- }
-
- cff_seek_set(cff, offset);
- cff->encoding = encoding = NEW(1, cff_encoding);
- encoding->format = get_card8(cff->SFONT_OR_STREAM);
- length = 1;
-
- switch (encoding->format & (~0x80)) {
- case 0:
- encoding->num_entries = get_card8(cff->SFONT_OR_STREAM);
- (encoding->data).codes = NEW(encoding->num_entries, card8);
- for (i=0;i<(encoding->num_entries);i++) {
- (encoding->data).codes[i] = get_card8(cff->SFONT_OR_STREAM);
- }
- length += encoding->num_entries + 1;
- break;
- case 1:
- {
- cff_range1 *ranges;
- encoding->num_entries = get_card8(cff->SFONT_OR_STREAM);
- encoding->data.range1 = ranges
- = NEW(encoding->num_entries, cff_range1);
- for (i=0;i<(encoding->num_entries);i++) {
- ranges[i].first = get_card8(cff->SFONT_OR_STREAM);
- ranges[i].n_left = get_card8(cff->SFONT_OR_STREAM);
- }
- length += (encoding->num_entries) * 2 + 1;
- }
- break;
- default:
- RELEASE(encoding);
- ERROR("Unknown Encoding format");
- break;
- }
-
- /* Supplementary data */
- if ((encoding->format) & 0x80) {
- cff_map *map;
- encoding->num_supps = get_card8(cff->SFONT_OR_STREAM);
- encoding->supp = map = NEW(encoding->num_supps, cff_map);
- for (i=0;i<(encoding->num_supps);i++) {
- map[i].code = get_card8(cff->SFONT_OR_STREAM);
- map[i].glyph = get_card16(cff->SFONT_OR_STREAM); /* SID */
- }
- length += (encoding->num_supps) * 3 + 1;
- } else {
- encoding->num_supps = 0;
- encoding->supp = NULL;
- }
-
- return length;
-}
-
-long cff_pack_encoding (cff_font *cff, card8 *dest, long destlen)
-{
- long len = 0;
- cff_encoding *encoding;
- card16 i;
-
- if (cff->flag & HAVE_STANDARD_ENCODING || cff->encoding == NULL)
- return 0;
-
- if (destlen < 2)
- ERROR("in cff_pack_encoding(): Buffer overflow");
-
- encoding = cff->encoding;
-
- dest[len++] = encoding->format;
- dest[len++] = encoding->num_entries;
- switch (encoding->format & (~0x80)) {
- case 0:
- if (destlen < len + encoding->num_entries)
- ERROR("in cff_pack_encoding(): Buffer overflow");
- for (i=0;i<(encoding->num_entries);i++) {
- dest[len++] = (encoding->data).codes[i];
- }
- break;
- case 1:
- {
- if (destlen < len + (encoding->num_entries)*2)
- ERROR("in cff_pack_encoding(): Buffer overflow");
- for (i=0;i<(encoding->num_entries);i++) {
- dest[len++] = (encoding->data).range1[i].first & 0xff;
- dest[len++] = (encoding->data).range1[i].n_left;
- }
- }
- break;
- default:
- ERROR("Unknown Encoding format");
- break;
- }
-
- if ((encoding->format) & 0x80) {
- if (destlen < len + (encoding->num_supps)*3 + 1)
- ERROR("in cff_pack_encoding(): Buffer overflow");
- dest[len++] = encoding->num_supps;
- for (i=0;i<(encoding->num_supps);i++) {
- dest[len++] = (encoding->supp)[i].code;
- dest[len++] = ((encoding->supp)[i].glyph >> 8) & 0xff;
- dest[len++] = (encoding->supp)[i].glyph & 0xff;
- }
- }
-
- return len;
-}
-
-/* input: code, output: glyph index */
-card16 cff_encoding_lookup (cff_font *cff, card8 code)
-{
- card16 gid = 0;
- cff_encoding *encoding;
- card16 i;
-
- if (cff->flag & (ENCODING_STANDARD|ENCODING_EXPERT)) {
- ERROR("Predefined CFF encoding not supported yet");
- } else if (cff->encoding == NULL) {
- ERROR("Encoding data not available");
- }
-
- encoding = cff->encoding;
-
- gid = 0;
- switch (encoding->format & (~0x80)) {
- case 0:
- for (i = 0; i < encoding->num_entries; i++) {
- if (code == (encoding->data).codes[i]) {
- gid = i + 1;
- break;
- }
- }
- break;
- case 1:
- for (i = 0; i < encoding->num_entries; i++) {
- if (code >= (encoding->data).range1[i].first &&
- code <= (encoding->data).range1[i].first + (encoding->data).range1[i].n_left) {
- gid += code - (encoding->data).range1[i].first + 1;
- break;
- }
- gid += (encoding->data).range1[i].n_left + 1;
- }
- if (i == encoding->num_entries)
- gid = 0;
- break;
- default:
- ERROR("Unknown Encoding format.");
- }
-
- /* Supplementary data */
- if (gid == 0 && ((encoding->format) & 0x80)) {
- cff_map *map;
- if (!encoding->supp)
- ERROR("No CFF supplementary encoding data read.");
- map = encoding->supp;
- for (i=0;i<(encoding->num_supps);i++) {
- if (code == map[i].code) {
- gid = cff_charsets_lookup(cff, map[i].glyph);
- break;
- }
- }
- }
-
- return gid;
-}
-
-void cff_release_encoding (cff_encoding *encoding)
-{
- if (encoding) {
- switch (encoding->format & (~0x80)) {
- case 0:
- if (encoding->data.codes)
- RELEASE(encoding->data.codes);
- break;
- case 1:
- if (encoding->data.range1)
- RELEASE(encoding->data.range1);
- break;
- default:
- ERROR("Unknown Encoding format.");
- }
- if (encoding->format & 0x80) {
- if (encoding->supp)
- RELEASE(encoding->supp);
- }
- RELEASE(encoding);
- }
-}
-
-long cff_read_charsets (cff_font *cff)
-{
- cff_charsets *charset;
- long offset, length;
- card16 count, i;
-
- if (cff->topdict == NULL)
- ERROR("Top DICT not available");
-
- if (!cff_dict_known(cff->topdict, "charset")) {
- cff->flag |= CHARSETS_ISOADOBE;
- cff->charsets = NULL;
- return 0;
- }
-
- offset = (long) cff_dict_get(cff->topdict, "charset", 0);
-
- if (offset == 0) { /* predefined */
- cff->flag |= CHARSETS_ISOADOBE;
- cff->charsets = NULL;
- return 0;
- } else if (offset == 1) {
- cff->flag |= CHARSETS_EXPERT;
- cff->charsets = NULL;
- return 0;
- } else if (offset == 2) {
- cff->flag |= CHARSETS_EXPSUB;
- cff->charsets = NULL;
- return 0;
- }
-
- cff_seek_set(cff, offset);
- cff->charsets = charset = NEW(1, cff_charsets);
- charset->format = get_card8(cff->SFONT_OR_STREAM);
- charset->num_entries = 0;
-
- count = cff->num_glyphs - 1;
- length = 1;
-
- /* Not sure. Not well documented. */
- switch (charset->format) {
- case 0:
- charset->num_entries = cff->num_glyphs - 1; /* no .notdef */
- charset->data.glyphs = NEW(charset->num_entries, s_SID);
- length += (charset->num_entries) * 2;
- for (i=0;i<(charset->num_entries);i++) {
- charset->data.glyphs[i] = get_card16(cff->SFONT_OR_STREAM);
- }
- count = 0;
- break;
- case 1:
- {
- cff_range1 *ranges = NULL;
- while (count > 0 && charset->num_entries < cff->num_glyphs) {
- ranges = RENEW(ranges, charset->num_entries + 1, cff_range1);
- ranges[charset->num_entries].first = get_card16(cff->SFONT_OR_STREAM);
- ranges[charset->num_entries].n_left = get_card8(cff->SFONT_OR_STREAM);
- count -= ranges[charset->num_entries].n_left + 1; /* no-overrap */
- charset->num_entries += 1;
- charset->data.range1 = ranges;
- }
- length += (charset->num_entries) * 3;
- }
- break;
- case 2:
- {
- cff_range2 *ranges = NULL;
- while (count > 0 && charset->num_entries < cff->num_glyphs) {
- ranges = RENEW(ranges, charset->num_entries + 1, cff_range2);
- ranges[charset->num_entries].first = get_card16(cff->SFONT_OR_STREAM);
- ranges[charset->num_entries].n_left = get_card16(cff->SFONT_OR_STREAM);
- count -= ranges[charset->num_entries].n_left + 1; /* non-overrapping */
- charset->num_entries += 1;
- }
- charset->data.range2 = ranges;
- length += (charset->num_entries) * 4;
- }
- break;
- default:
- RELEASE(charset);
- ERROR("Unknown Charset format");
- break;
- }
-
- if (count > 0)
- ERROR("Charset data possibly broken");
-
- return length;
-}
-
-long cff_pack_charsets (cff_font *cff, card8 *dest, long destlen)
-{
- long len = 0;
- card16 i;
- cff_charsets *charset;
-
- if (cff->flag & HAVE_STANDARD_CHARSETS || cff->charsets == NULL)
- return 0;
-
- if (destlen < 1)
- ERROR("in cff_pack_charsets(): Buffer overflow");
-
- charset = cff->charsets;
-
- dest[len++] = charset->format;
- switch (charset->format) {
- case 0:
- if (destlen < len + (charset->num_entries)*2)
- ERROR("in cff_pack_charsets(): Buffer overflow");
- for (i=0;i<(charset->num_entries);i++) {
- s_SID sid = (charset->data).glyphs[i]; /* or CID */
- dest[len++] = (sid >> 8) & 0xff;
- dest[len++] = sid & 0xff;
- }
- break;
- case 1:
- {
- if (destlen < len + (charset->num_entries)*3)
- ERROR("in cff_pack_charsets(): Buffer overflow");
- for (i=0;i<(charset->num_entries);i++) {
- dest[len++] = ((charset->data).range1[i].first >> 8) & 0xff;
- dest[len++] = (charset->data).range1[i].first & 0xff;
- dest[len++] = (charset->data).range1[i].n_left;
- }
- }
- break;
- case 2:
- {
- if (destlen < len + (charset->num_entries)*4)
- ERROR("in cff_pack_charsets(): Buffer overflow");
- for (i=0;i<(charset->num_entries);i++) {
- dest[len++] = ((charset->data).range2[i].first >> 8) & 0xff;
- dest[len++] = (charset->data).range2[i].first & 0xff;
- dest[len++] = ((charset->data).range2[i].n_left >> 8) & 0xff;
- dest[len++] = (charset->data).range2[i].n_left & 0xff;
- }
- }
- break;
- default:
- ERROR("Unknown Charset format");
- break;
- }
-
- return len;
-}
-
-card16 cff_glyph_lookup (cff_font *cff, const char *glyph)
-{
- card16 gid;
- cff_charsets *charset;
- card16 i, n;
-
- if (cff->flag & (CHARSETS_ISOADOBE|CHARSETS_EXPERT|CHARSETS_EXPSUB)) {
- ERROR("Predefined CFF charsets not supported yet");
- } else if (cff->charsets == NULL) {
- ERROR("Charsets data not available");
- }
-
- /* .notdef always have glyph index 0 */
- if (!glyph || !strcmp(glyph, ".notdef")) {
- return 0;
- }
-
- charset = cff->charsets;
-
- gid = 0;
- switch (charset->format) {
- case 0:
- for (i = 0; i < charset->num_entries; i++) {
- gid++;
- if (cff_match_string(cff, glyph, charset->data.glyphs[i])) {
- return gid;
- }
- }
- break;
- case 1:
- for (i = 0; i < charset->num_entries; i++) {
- for (n = 0;
- n <= charset->data.range1[i].n_left; n++) {
- gid++;
- if (cff_match_string(cff, glyph,
- (s_SID)(charset->data.range1[i].first + n))) {
- return gid;
- }
- }
- }
- break;
- case 2:
- for (i = 0; i <charset->num_entries; i++) {
- for (n = 0;
- n <= charset->data.range2[i].n_left; n++) {
- gid++;
- if (cff_match_string(cff, glyph,
- (s_SID)(charset->data.range2[i].first + n))) {
- return gid;
- }
- }
- }
- break;
- default:
- ERROR("Unknown Charset format");
- }
-
- return 0; /* not found, returns .notdef */
-}
-
-/* Input : SID or CID (16-bit unsigned int)
- * Output: glyph index
- */
-card16
-cff_charsets_lookup (cff_font *cff, card16 cid)
-{
- card16 gid = 0;
- cff_charsets *charset;
- card16 i;
-
- if (cff->flag & (CHARSETS_ISOADOBE|CHARSETS_EXPERT|CHARSETS_EXPSUB)) {
- ERROR("Predefined CFF charsets not supported yet");
- } else if (cff->charsets == NULL) {
- ERROR("Charsets data not available");
- }
-
- if (cid == 0) {
- return 0; /* GID 0 (.notdef) */
- }
-
- charset = cff->charsets;
-
- gid = 0;
- switch (charset->format) {
- case 0:
- for (i = 0; i <charset->num_entries; i++) {
- if (cid == charset->data.glyphs[i]) {
- gid = i + 1;
- return gid;
- }
- }
- break;
- case 1:
- for (i = 0; i < charset->num_entries; i++) {
- if (cid >= charset->data.range1[i].first &&
- cid <= charset->data.range1[i].first + charset->data.range1[i].n_left) {
- gid += cid - charset->data.range1[i].first + 1;
- return gid;
- }
- gid += charset->data.range1[i].n_left + 1;
- }
- break;
- case 2:
- for (i = 0; i < charset->num_entries; i++) {
- if (cid >= charset->data.range2[i].first &&
- cid <= charset->data.range2[i].first + charset->data.range2[i].n_left) {
- gid += cid - charset->data.range2[i].first + 1;
- return gid;
- }
- gid += charset->data.range2[i].n_left + 1;
- }
- break;
- default:
- ERROR("Unknown Charset format");
- }
-
- return 0; /* not found */
-}
-
-/* Input : GID
- * Output: SID/CID (card16)
- */
-card16
-cff_charsets_lookup_inverse (cff_font *cff, card16 gid)
-{
- card16 sid = 0;
- cff_charsets *charset;
- card16 i;
-
- if (cff->flag & (CHARSETS_ISOADOBE|CHARSETS_EXPERT|CHARSETS_EXPSUB)) {
- ERROR("Predefined CFF charsets not supported yet");
- } else if (cff->charsets == NULL) {
- ERROR("Charsets data not available");
- }
-
- if (gid == 0) {
- return 0; /* .notdef */
- }
-
- charset = cff->charsets;
-
- sid = 0;
- switch (charset->format) {
- case 0:
- if (gid - 1 >= charset->num_entries)
- ERROR("Invalid GID.");
- sid = charset->data.glyphs[gid - 1];
- break;
- case 1:
- for (i = 0; i < charset->num_entries; i++) {
- if (gid <= charset->data.range1[i].n_left + 1) {
- sid = gid + charset->data.range1[i].first - 1;
- break;
- }
- gid -= charset->data.range1[i].n_left + 1;
- }
- if (i == charset->num_entries)
- ERROR("Invalid GID");
- break;
- case 2:
- for (i = 0; i < charset->num_entries; i++) {
- if (gid <= charset->data.range2[i].n_left + 1) {
- sid = gid + charset->data.range2[i].first - 1;
- break;
- }
- gid -= charset->data.range2[i].n_left + 1;
- }
- if (i == charset->num_entries)
- ERROR("Invalid GID");
- break;
- default:
- ERROR("Unknown Charset format");
- }
-
- return sid;
-}
-
-void
-cff_release_charsets (cff_charsets *charset)
-{
- if (charset) {
- switch (charset->format) {
- case 0:
- if (charset->data.glyphs)
- RELEASE(charset->data.glyphs);
- break;
- case 1:
- if (charset->data.range1)
- RELEASE(charset->data.range1);
- break;
- case 2:
- if (charset->data.range2)
- RELEASE(charset->data.range2);
- break;
- default:
- break;
- }
- RELEASE(charset);
- }
-}
-
-/* CID-Keyed font specific */
-long cff_read_fdselect (cff_font *cff)
-{
- cff_fdselect *fdsel;
- long offset, length;
- card16 i;
-
- if (cff->topdict == NULL)
- ERROR("Top DICT not available");
-
- if (!(cff->flag & FONTTYPE_CIDFONT))
- return 0;
-
- offset = (long) cff_dict_get(cff->topdict, "FDSelect", 0);
- cff_seek_set(cff, offset);
- cff->fdselect = fdsel = NEW(1, cff_fdselect);
- fdsel->format = get_card8(cff->SFONT_OR_STREAM);
-
- length = 1;
-
- switch (fdsel->format) {
- case 0:
- fdsel->num_entries = cff->num_glyphs;
- (fdsel->data).fds = NEW(fdsel->num_entries, card8);
- for (i=0;i<(fdsel->num_entries);i++) {
- (fdsel->data).fds[i] = get_card8(cff->SFONT_OR_STREAM);
- }
- length += fdsel->num_entries;
- break;
- case 3:
- {
- cff_range3 *ranges;
- fdsel->num_entries = get_card16(cff->SFONT_OR_STREAM);
- fdsel->data.ranges = ranges = NEW(fdsel->num_entries, cff_range3);
- for (i=0;i<(fdsel->num_entries);i++) {
- ranges[i].first = get_card16(cff->SFONT_OR_STREAM);
- ranges[i].fd = get_card8(cff->SFONT_OR_STREAM);
- }
- if (ranges[0].first != 0)
- ERROR("Range not starting with 0.");
- if (cff->num_glyphs != get_card16(cff->SFONT_OR_STREAM))
- ERROR("Sentinel value mismatched with number of glyphs.");
- length += (fdsel->num_entries) * 3 + 4;
- }
- break;
- default:
- RELEASE(fdsel);
- ERROR("Unknown FDSelect format.");
- break;
- }
-
- return length;
-}
-
-long cff_pack_fdselect (cff_font *cff, card8 *dest, long destlen)
-{
- cff_fdselect *fdsel;
- long len = 0;
- card16 i;
-
- if (cff->fdselect == NULL)
- return 0;
-
- if (destlen < 1)
- ERROR("in cff_pack_fdselect(): Buffur overflow");
-
- fdsel = cff->fdselect;
-
- dest[len++] = fdsel->format;
- switch (fdsel->format) {
- case 0:
- if (fdsel->num_entries != cff->num_glyphs)
- ERROR("in cff_pack_fdselect(): Invalid data");
- if (destlen < len + fdsel->num_entries)
- ERROR("in cff_pack_fdselect(): Buffer overflow");
- for (i=0;i<fdsel->num_entries;i++) {
- dest[len++] = (fdsel->data).fds[i];
- }
- break;
- case 3:
- {
- if (destlen < len + 2)
- ERROR("in cff_pack_fdselect(): Buffer overflow");
- len += 2;
- for (i=0;i<(fdsel->num_entries);i++) {
- if (destlen < len + 3)
- ERROR("in cff_pack_fdselect(): Buffer overflow");
- dest[len++] = ((fdsel->data).ranges[i].first >> 8) & 0xff;
- dest[len++] = (fdsel->data).ranges[i].first & 0xff;
- dest[len++] = (fdsel->data).ranges[i].fd;
- }
- if (destlen < len + 2)
- ERROR("in cff_pack_fdselect(): Buffer overflow");
- dest[len++] = (cff->num_glyphs >> 8) & 0xff;
- dest[len++] = cff->num_glyphs & 0xff;
- dest[1] = ((len/3 - 1) >> 8) & 0xff;
- dest[2] = (len/3 - 1) & 0xff;
- }
- break;
- default:
- ERROR("Unknown FDSelect format.");
- break;
- }
-
- return len;
-}
-
-void cff_release_fdselect (cff_fdselect *fdselect)
-{
- if (fdselect) {
- if (fdselect->format == 0) {
- if (fdselect->data.fds) RELEASE(fdselect->data.fds);
- } else if (fdselect->format == 3) {
- if (fdselect->data.ranges) RELEASE(fdselect->data.ranges);
- }
- RELEASE(fdselect);
- }
-}
-
-card8 cff_fdselect_lookup (cff_font *cff, card16 gid)
-{
- card8 fd = 0xff;
- cff_fdselect *fdsel;
-
- if (cff->fdselect == NULL)
- ERROR("in cff_fdselect_lookup(): FDSelect not available");
-
- fdsel = cff->fdselect;
-
- if (gid >= cff->num_glyphs)
- ERROR("in cff_fdselect_lookup(): Invalid glyph index");
-
- switch (fdsel->format) {
- case 0:
- fd = fdsel->data.fds[gid];
- break;
- case 3:
- {
- if (gid == 0) {
- fd = (fdsel->data).ranges[0].fd;
- } else {
- card16 i;
- for (i=1;i<(fdsel->num_entries);i++) {
- if (gid < (fdsel->data).ranges[i].first)
- break;
- }
- fd = (fdsel->data).ranges[i-1].fd;
- }
- }
- break;
- default:
- ERROR("in cff_fdselect_lookup(): Invalid FDSelect format");
- break;
- }
-
- if (fd >= cff->num_fds)
- ERROR("in cff_fdselect_lookup(): Invalid Font DICT index");
-
- return fd;
-}
-
-long cff_read_subrs (cff_font *cff)
-{
- long len = 0;
- long offset;
- int i;
-
- if ((cff->flag & FONTTYPE_CIDFONT) && cff->fdarray == NULL) {
- cff_read_fdarray(cff);
- }
-
- if (cff->private == NULL)
- cff_read_private(cff);
-
- if (cff->gsubr == NULL) {
- cff_seek_set(cff, cff->gsubr_offset);
- cff->gsubr = cff_get_index(cff);
- }
-
- cff->subrs = NEW(cff->num_fds, cff_index *);
- if (cff->flag & FONTTYPE_CIDFONT) {
- for (i=0;i<cff->num_fds;i++) {
- if (cff->private[i] == NULL ||
- !cff_dict_known(cff->private[i], "Subrs")) {
- (cff->subrs)[i] = NULL;
- } else {
- offset = (long) cff_dict_get(cff->fdarray[i], "Private", 1);
- offset += (long) cff_dict_get(cff->private[i], "Subrs", 0);
- cff_seek_set(cff, offset);
- (cff->subrs)[i] = cff_get_index(cff);
- len += cff_index_size((cff->subrs)[i]);
- }
- }
- } else {
- if (cff->private[0] == NULL ||
- !cff_dict_known(cff->private[0], "Subrs")) {
- (cff->subrs)[0] = NULL;
- } else {
- offset = (long) cff_dict_get(cff->topdict, "Private", 1);
- offset += (long) cff_dict_get(cff->private[0], "Subrs", 0);
- cff_seek_set(cff, offset);
- (cff->subrs)[0] = cff_get_index(cff);
- len += cff_index_size((cff->subrs)[0]);
- }
- }
-
- return len;
-}
-
-long cff_read_fdarray (cff_font *cff)
-{
- long len = 0;
- cff_index *idx;
- long offset, size;
- card16 i;
-
- if (cff->topdict == NULL)
- ERROR("in cff_read_fdarray(): Top DICT not found");
-
- if (!(cff->flag & FONTTYPE_CIDFONT))
- return 0;
-
- /* must exist */
- offset = (long) cff_dict_get(cff->topdict, "FDArray", 0);
- cff_seek_set(cff, offset);
- idx = cff_get_index(cff);
- cff->num_fds = (card8)idx->count;
- cff->fdarray = NEW(idx->count, cff_dict *);
- for (i=0;i<idx->count;i++) {
- card8 *data = idx->data + (idx->offset)[i] - 1;
- size = (idx->offset)[i+1] - (idx->offset)[i];
- if (size > 0) {
- (cff->fdarray)[i] = cff_dict_unpack(data, data+size);
- } else {
- (cff->fdarray)[i] = NULL;
- }
- }
- len = cff_index_size(idx);
- cff_release_index(idx);
-
- return len;
-}
-
-long cff_read_private (cff_font *cff)
-{
- long len = 0;
- card8 *data;
- long offset, size;
-
- if (cff->flag & FONTTYPE_CIDFONT) {
- int i;
-
- if (cff->fdarray == NULL)
- cff_read_fdarray(cff);
-
- cff->private = NEW(cff->num_fds, cff_dict *);
- for (i=0;i<cff->num_fds;i++) {
- if (cff->fdarray[i] != NULL &&
- cff_dict_known(cff->fdarray[i], "Private") &&
- (size = (long) cff_dict_get(cff->fdarray[i], "Private", 0))
- > 0) {
- offset = (long) cff_dict_get(cff->fdarray[i], "Private", 1);
- cff_seek_set(cff, offset);
- data = NEW(size, card8);
- if (sfnt_read(data, size, cff->sfont) != size)
- ERROR("reading file failed");
- (cff->private)[i] = cff_dict_unpack(data, data+size);
- RELEASE(data);
- len += size;
- } else {
- (cff->private)[i] = NULL;
- }
- }
- } else {
- cff->num_fds = 1;
- cff->private = NEW(1, cff_dict *);
- if (cff_dict_known(cff->topdict, "Private") &&
- (size = (long) cff_dict_get(cff->topdict, "Private", 0)) > 0) {
- offset = (long) cff_dict_get(cff->topdict, "Private", 1);
- cff_seek_set(cff, offset);
- data = NEW(size, card8);
- if (sfnt_read(data, size, cff->sfont) != size)
- ERROR("reading file failed");
- cff->private[0] = cff_dict_unpack(data, data+size);
- RELEASE(data);
- len += size;
- } else {
- (cff->private)[0] = NULL;
- len = 0;
- }
- }
-
- return len;
-}
-
-#ifdef XETEX
-unsigned short* cff_get_ft_to_gid(cff_font *cff)
-{
- return cff->ft_to_gid;
-}
-#endif
diff --git a/Build/source/texk/dvipdfm-x/xsrc/dvi.c b/Build/source/texk/dvipdfm-x/xsrc/dvi.c
index c540706e6d6..3e7f5e3cdd0 100644
--- a/Build/source/texk/dvipdfm-x/xsrc/dvi.c
+++ b/Build/source/texk/dvipdfm-x/xsrc/dvi.c
@@ -96,10 +96,12 @@ static struct dvi_header
static double dev_origin_x = 72.0, dev_origin_y = 770.0;
+#ifdef XETEX
double get_origin (int x)
{
return x ? dev_origin_x : dev_origin_y;
}
+#endif
#define PHYSICAL 1
#define VIRTUAL 2
@@ -170,6 +172,7 @@ static int num_def_fonts = 0, max_def_fonts = 0;
static int compute_boxes = 0, link_annot = 1;
static int verbose = 0;
+#ifdef XETEX
#define DVI_PAGE_BUF_CHUNK 0x10000UL /* 64K should be plenty for most pages */
static unsigned char* dvi_page_buffer;
@@ -374,8 +377,28 @@ static UNSIGNED_QUAD get_buffered_unsigned_quad(void)
}
return (UNSIGNED_QUAD) quad;
}
-
-
+#else
+#define get_and_buffer_unsigned_byte(fp) get_unsigned_byte(fp)
+#if 0
+#define get_and_buffer_signed_byte(fp) get_signed_byte(fp)
+#endif
+#define get_and_buffer_unsigned_pair(fp) get_unsigned_pair(fp)
+#define get_and_buffer_signed_pair(fp) get_signed_pair(fp)
+#define get_and_buffer_unsigned_triple(fp) get_unsigned_triple(fp)
+#define get_and_buffer_signed_triple(fp) get_signed_triple(fp)
+#define get_and_buffer_signed_quad(fp) get_unsigned_quad(fp)
+#define get_and_buffer_unsigned_quad(fp) get_unsigned_quad(fp)
+#define get_and_buffer_bytes(fp, ct) seek_relative(fp, ct)
+
+#define get_buffered_unsigned_byte() get_unsigned_byte(dvi_file)
+#define get_buffered_signed_byte() get_signed_byte(dvi_file)
+#define get_buffered_unsigned_pair() get_unsigned_pair(dvi_file)
+#define get_buffered_signed_pair() get_signed_pair(dvi_file)
+#define get_buffered_unsigned_triple() get_unsigned_triple(dvi_file)
+#define get_buffered_signed_triple() get_signed_triple(dvi_file)
+#define get_buffered_signed_quad() get_signed_quad(dvi_file)
+#define get_buffered_unsigned_quad() get_unsigned_quad(dvi_file)
+#endif
void
dvi_set_verbose (void)
@@ -717,14 +740,11 @@ get_dvi_fonts (long post_location)
ERROR(invalid_signature);
}
#ifdef XETEX
- if (code != XDV_NATIVE_FONT_DEF) {
- read_font_record(tex_id);
- } else {
+ if (code == XDV_NATIVE_FONT_DEF)
read_native_font_record(tex_id);
- }
-#else
- read_font_record(tex_id);
+ else
#endif
+ read_font_record(tex_id);
}
if (verbose > 2) {
unsigned i;
@@ -1749,9 +1769,12 @@ do_fnt4 (void)
static void
do_xxx (UNSIGNED_QUAD size)
{
-#if 0
+#ifdef XETEX
+ dvi_do_special(dvi_page_buffer + dvi_page_buf_index, size);
+ dvi_page_buf_index += size;
+#else
UNSIGNED_QUAD i;
- Ubyte *buffer; /* FIXME - no need for new buffer here */
+ Ubyte *buffer;
buffer = NEW(size+1, Ubyte);
for (i = 0; i < size; i++) {
@@ -1759,9 +1782,6 @@ do_xxx (UNSIGNED_QUAD size)
}
dvi_do_special(buffer, size);
RELEASE(buffer);
-#else
- dvi_do_special(dvi_page_buffer + dvi_page_buf_index, size);
- dvi_page_buf_index += size;
#endif
}
@@ -2185,13 +2205,16 @@ dvi_do_page (long n,
do_pic_file();
break;
#endif
+
case POST:
+#ifdef XETEX
if (linear && !processing_page) {
/* for linear processing, this means there are no more pages */
num_pages = 0; /* force loop to terminate */
return;
}
/* else fall through to error case */
+#endif
case PRE: case POST_POST:
ERROR("Unexpected preamble or postamble in dvi file");
break;
@@ -2435,7 +2458,7 @@ scan_special (double *wd, double *ht, double *xo, double *yo, char *lm,
const char *buf, UNSIGNED_QUAD size)
{
char *q;
- const char *p = buf, *endptr;
+ const char *p = buf, *endptr;
int ns_pdf = 0, error = 0;
double tmp;
@@ -2707,17 +2730,19 @@ dvi_scan_specials (long page_no,
}
break;
#endif
+
case PTEXDIR:
get_and_buffer_unsigned_byte(fp);
break;
case POST:
+#ifdef XETEX
if (linear && dvi_page_buf_index == 1) {
/* this is actually an indication that we've reached the end of the input */
return;
}
/* else fall through to error case */
-
+#endif
default: /* case PRE: case POST_POST: and others */
ERROR("Unexpected opcode %d at pos=0x%x", opcode, tell_position(fp));
break;
diff --git a/Build/source/texk/dvipdfm-x/xsrc/dvipdfmx.c b/Build/source/texk/dvipdfm-x/xsrc/dvipdfmx.c
index b8656256df1..61a81057cc6 100644
--- a/Build/source/texk/dvipdfm-x/xsrc/dvipdfmx.c
+++ b/Build/source/texk/dvipdfm-x/xsrc/dvipdfmx.c
@@ -60,11 +60,16 @@
#include "pdfximage.h"
#include "cid.h"
+#include "dvipdfmx.h"
#include "xbb.h"
+#include "error.h"
+
+#ifdef XETEX
#include "tt_aux.h"
+#endif
-#include "error.h"
+int compat_mode = 0; /* 0 = dvipdfmx, 1 = dvipdfm */
static int verbose = 0;
@@ -114,12 +119,6 @@ char *dvi_filename = NULL, *pdf_filename = NULL;
static void
read_config_file (const char *config);
-#ifdef WIN32
-#define STRN_CMP strncasecmp
-#else
-#define STRN_CMP strncmp
-#endif
-
static void
set_default_pdf_filename(void)
{
@@ -128,17 +127,16 @@ set_default_pdf_filename(void)
dvi_base = xbasename(dvi_filename);
if (mp_mode &&
strlen(dvi_base) > 4 &&
- !STRN_CMP(".mps", dvi_base + strlen(dvi_base) - 4, 4)) {
+ FILESTRCASEEQ(".mps", dvi_base + strlen(dvi_base) - 4)) {
pdf_filename = NEW(strlen(dvi_base)+1, char);
strncpy(pdf_filename, dvi_base, strlen(dvi_base) - 4);
pdf_filename[strlen(dvi_base)-4] = '\0';
} else if (strlen(dvi_base) > 4 &&
+ (FILESTRCASEEQ(".dvi", dvi_base+strlen(dvi_base)-4)
#ifdef XETEX
- (!STRN_CMP(".dvi", dvi_base+strlen(dvi_base)-4, 4) ||
- !STRN_CMP(".xdv", dvi_base+strlen(dvi_base)-4, 4))) {
-#else
- !STRN_CMP(".dvi", dvi_base+strlen(dvi_base)-4, 4)) {
+ || FILESTRCASEEQ(".xdv", dvi_base+strlen(dvi_base)-4)
#endif
+ )) {
pdf_filename = NEW(strlen(dvi_base)+1, char);
strncpy(pdf_filename, dvi_base, strlen(dvi_base)-4);
pdf_filename[strlen(dvi_base)-4] = '\0';
@@ -151,9 +149,10 @@ set_default_pdf_filename(void)
}
static void
-usage (int exit_code)
+show_version (void)
{
- fprintf (stdout, "\nThis is %s-%s by Jonathan Kew and Jin-Hwan Cho,\n", PACKAGE, VERSION);
+ fprintf (stdout, "\nThis is xdvipdfmx-%s by Jonathan Kew and Jin-Hwan Cho,\n", VERSION);
+ fprintf (stdout, "modified for TeX Live,\n");
fprintf (stdout, "an extended version of DVIPDFMx, which in turn was\n");
fprintf (stdout, "an extended version of dvipdfm-0.13.2c developed by Mark A. Wicks.\n");
fprintf (stdout, "\nCopyright (c) 2006-2013 SIL International and Jin-Hwan Cho.\n");
@@ -161,6 +160,11 @@ usage (int exit_code)
fprintf (stdout, "it under the terms of the GNU General Public License as published by\n");
fprintf (stdout, "the Free Software Foundation; either version 2 of the License, or\n");
fprintf (stdout, "(at your option) any later version.\n");
+}
+
+static void
+show_usage (void)
+{
fprintf (stdout, "\nUsage: xdvipdfmx [options] xdvfile\n");
fprintf (stdout, "-c \t\tIgnore color specials (for B&W printing)\n");
fprintf (stdout, "-d number\tSet PDF decimal digits (0-5) [2]\n");
@@ -203,7 +207,13 @@ usage (int exit_code)
fprintf (stdout, "\nAll dimensions entered on the command line are \"true\" TeX dimensions.\n");
fprintf (stdout, "Argument of \"-s\" lists physical page ranges separated by commas, e.g., \"-s 1-3,5-6\"\n");
fprintf (stdout, "Papersize is specified by paper format (e.g., \"a4\") or by w<unit>,h<unit> (e.g., \"20cm,30cm\").\n");
+}
+static void
+usage (int exit_code)
+{
+ show_version();
+ show_usage();
exit(exit_code);
}
@@ -842,11 +852,14 @@ main (int argc, char *argv[])
{
double dvi2pts;
- const char *av0 = xbasename(argv[0]);
- if (STRN_CMP(av0, "ebb", 3) == 0)
- return extractbb(argc, argv, EBB_OUTPUT);
- else if (STRN_CMP(av0, "xbb", 3) == 0 || STRN_CMP(av0, "extractbb", 9) == 0)
- return extractbb(argc, argv, XBB_OUTPUT);
+ char *base = kpse_program_basename (argv[0]);
+
+ if (FILESTRCASEEQ (base, "extractbb") || FILESTRCASEEQ (base, "xbb"))
+ return extractbb (argc, argv, XBB_OUTPUT);
+ if (FILESTRCASEEQ (base, "ebb"))
+ return extractbb (argc, argv, EBB_OUTPUT);
+
+ free (base);
#ifdef MIKTEX
miktex_initialize();
diff --git a/Build/source/texk/dvipdfm-x/xsrc/epdf.c b/Build/source/texk/dvipdfm-x/xsrc/epdf.c
index 2984f83df3b..cef72ee0c39 100644
--- a/Build/source/texk/dvipdfm-x/xsrc/epdf.c
+++ b/Build/source/texk/dvipdfm-x/xsrc/epdf.c
@@ -39,10 +39,7 @@
#include "mem.h"
#include "mfileio.h"
#include "error.h"
-
-#ifndef XETEX
#include "dvipdfmx.h"
-#endif
#include "pdfobj.h"
#include "pdfdev.h"
diff --git a/Build/source/texk/dvipdfm-x/xsrc/mpost.c b/Build/source/texk/dvipdfm-x/xsrc/mpost.c
deleted file mode 100644
index ab0f87b91e1..00000000000
--- a/Build/source/texk/dvipdfm-x/xsrc/mpost.c
+++ /dev/null
@@ -1,1671 +0,0 @@
-/*
-
- This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
- Copyright (C) 2007-2012 by Jin-Hwan Cho and Shunsaku Hirata,
- the dvipdfmx project team.
-
- Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu>
-
- 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.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <ctype.h>
-#include <string.h>
-#include <math.h>
-
-#include "system.h"
-#include "mem.h"
-#include "error.h"
-#include "mfileio.h"
-#include "numbers.h"
-
-#include "tfm.h"
-
-#include "pdfobj.h"
-#include "pdfparse.h"
-#include "pdfdev.h"
-#include "pdfdoc.h"
-
-#include "pdfcolor.h"
-#include "pdfdraw.h"
-
-#include "fontmap.h"
-#include "subfont.h"
-
-#include "pdfximage.h"
-
-#include "mpost.h"
-
-/*
- * In PDF, current path is not a part of graphics state parameter.
- * Hence, current path is not saved by the "q" operator and is not
- * recovered by the "Q" operator. This means that the following PS
- * code
- *
- * <path construction> gsave <path painting> grestore ...
- *
- * can't be translated to PDF code
- *
- * <path construction> q <path painting> Q ...
- *
- * . Only clipping path (which is graphics state parameter in PDF
- * too) is treated in the same way. So, we write clipping path
- * immediately and forget about it but remember current path.
- */
-
-static int mp_parse_body (const char **start, const char *end, double x_user, double y_user);
-
-static struct mp_font
-{
- char *font_name;
- int font_id;
- int tfm_id; /* Used for text width calculation */
- int subfont_id;
- double pt_size;
-} font_stack[PDF_GSAVE_MAX] = {
- {NULL, -1, -1, -1, 0}
-};
-static int currentfont = -1;
-
-#define CURRENT_FONT() ((currentfont < 0) ? NULL : &font_stack[currentfont])
-
-/* Compatibility */
-#define MP_CMODE_MPOST 0
-#define MP_CMODE_DVIPSK 1
-#define MP_CMODE_PTEXVERT 2
-static int mp_cmode = MP_CMODE_MPOST;
-
-static int
-mp_setfont (const char *font_name, double pt_size)
-{
- const char *name = font_name;
- struct mp_font *font;
- int subfont_id = -1;
- fontmap_rec *mrec;
-
- font = CURRENT_FONT();
-
- if (font) {
- if (!strcmp(font->font_name, font_name) &&
- font->pt_size == pt_size)
- return 0;
- } else { /* No currentfont */
-/* ***TODO*** Here some problem exists! */
- font = &font_stack[0];
- font->font_name = NULL;
- currentfont = 0;
- }
-
- mrec = pdf_lookup_fontmap_record(font_name);
- if (mrec && mrec->charmap.sfd_name && mrec->charmap.subfont_id) {
- subfont_id = sfd_load_record(mrec->charmap.sfd_name, mrec->charmap.subfont_id);
- }
-
- /* See comments in dvi_locate_font() in dvi.c. */
- if (mrec && mrec->map_name) {
- name = mrec->map_name;
- } else {
- name = font_name;
- }
-
- if (font->font_name)
- RELEASE(font->font_name);
- font->font_name = NEW(strlen(font_name) + 1, char);
- strcpy(font->font_name, font_name);
- font->subfont_id = subfont_id;
- font->pt_size = pt_size;
- font->tfm_id = tfm_open(font_name, 0); /* Need not exist in MP mode */
- font->font_id = pdf_dev_locate_font(name,
- (spt_t) (pt_size * dev_unit_dviunit()));
-
- if (font->font_id < 0) {
- ERROR("MPOST: No physical font assigned for \"%s\".", font_name);
- return 1;
- }
-
- return 0;
-}
-
-static void
-save_font (void)
-{
- struct mp_font *current, *next;
-
- if (currentfont < 0) {
- font_stack[0].font_name = NEW(strlen("Courier") + 1, char);
- strcpy(font_stack[0].font_name, "Courier");
- font_stack[0].pt_size = 1;
- font_stack[0].tfm_id = 0;
- font_stack[0].subfont_id = 0;
- currentfont = 0;
- }
-
- current = &font_stack[currentfont++];
- next = &font_stack[currentfont ];
- next->font_name = NEW(strlen(current->font_name)+1, char);
- strcpy(next->font_name, current->font_name);
- next->pt_size = current->pt_size;
-
- next->subfont_id = current->subfont_id;
- next->tfm_id = current->tfm_id;
-}
-
-static void
-restore_font (void)
-{
- struct mp_font *current;
-
- current = CURRENT_FONT();
- if (current) {
- if (current->font_name)
- RELEASE(current->font_name);
- current->font_name = NULL;
- } else {
- ERROR("No currentfont...");
- }
-
- currentfont--;
-}
-
-static void
-clear_fonts (void)
-{
- while (currentfont >= 0) {
- if (font_stack[currentfont].font_name)
- RELEASE(font_stack[currentfont].font_name);
- currentfont--;
- }
-}
-
-static int
-is_fontname (const char *token)
-{
- fontmap_rec *mrec;
-
- mrec = pdf_lookup_fontmap_record(token);
- if (mrec)
- return 1;
-
- return tfm_exists(token);
-}
-
-int
-mps_scan_bbox (const char **pp, const char *endptr, pdf_rect *bbox)
-{
- char *number;
- double values[4];
- int i;
-
- /* skip_white() skips lines starting '%'... */
- while (*pp < endptr && isspace(**pp))
- (*pp)++;
-
- /* Scan for bounding box record */
- while (*pp < endptr && **pp == '%') {
- if (*pp + 14 < endptr &&
- !strncmp(*pp, "%%BoundingBox:", 14)) {
-
- *pp += 14;
-
- for (i = 0; i < 4; i++) {
- skip_white(pp, endptr);
- number = parse_number(pp, endptr);
- if (!number) {
- break;
- }
- values[i] = atof(number);
- RELEASE(number);
- }
- if (i < 4) {
- return -1;
- } else {
- bbox->llx = values[0];
- bbox->lly = values[1];
- bbox->urx = values[2];
- bbox->ury = values[3];
-
- return 0;
- }
- }
- skip_line (pp, endptr);
- while (*pp < endptr && isspace(**pp))
- (*pp)++;
- }
-
- return -1;
-}
-
-static void
-skip_prolog (const char **start, const char *end)
-{
- int found_prolog = 0;
- const char *save;
-
- save = *start;
- while (*start < end) {
- if (**start != '%')
- skip_white(start, end);
- if (*start >= end)
- break;
- if (!strncmp(*start, "%%EndProlog", 11)) {
- found_prolog = 1;
- skip_line(start, end);
- break;
- } else if (!strncmp(*start, "%%Page:", 7)) {
- skip_line(start, end);
- break;
- }
- skip_line(start, end);
- }
- if (!found_prolog) {
- *start = save;
- }
-
- return;
-}
-
-/* PostScript Operators */
-
-#define ADD 1
-#define SUB 2
-#define MUL 3
-#define DIV 4
-#define NEG 5
-#define TRUNCATE 6
-
-#define CLEAR 10
-#define EXCH 11
-#define POP 12
-
-#define NEWPATH 31
-#define CLOSEPATH 32
-#define MOVETO 33
-#define RMOVETO 34
-#define CURVETO 35
-#define RCURVETO 36
-#define LINETO 37
-#define RLINETO 38
-#define ARC 39
-#define ARCN 40
-
-#define FILL 41
-#define STROKE 42
-#define SHOW 43
-
-#define CLIP 44
-#define EOCLIP 45
-
-#define SHOWPAGE 49
-
-#define GSAVE 50
-#define GRESTORE 51
-
-#define CONCAT 52
-#define SCALE 53
-#define TRANSLATE 54
-#define ROTATE 55
-
-#define SETLINEWIDTH 60
-#define SETDASH 61
-#define SETLINECAP 62
-#define SETLINEJOIN 63
-#define SETMITERLIMIT 64
-
-#define SETGRAY 70
-#define SETRGBCOLOR 71
-#define SETCMYKCOLOR 72
-
-#define CURRENTPOINT 80
-#define IDTRANSFORM 81
-#define DTRANSFORM 82
-
-#define FINDFONT 201
-#define SCALEFONT 202
-#define SETFONT 203
-#define CURRENTFONT 204
-
-#define STRINGWIDTH 210
-
-#define DEF 999
-
-#define FSHOW 1001
-#define STEXFIG 1002
-#define ETEXFIG 1003
-#define HLW 1004
-#define VLW 1005
-#define RD 1006
-#define B 1007
-
-static struct operators
-{
- const char *token;
- int opcode;
-} ps_operators[] = {
- {"add", ADD},
- {"mul", MUL},
- {"div", DIV},
- {"neg", NEG},
- {"sub", SUB},
- {"truncate", TRUNCATE},
-
- {"clear", CLEAR},
- {"exch", EXCH},
- {"pop", POP},
-
- {"clip", CLIP},
- {"eoclip", EOCLIP},
- {"closepath", CLOSEPATH},
- {"concat", CONCAT},
-
- {"newpath", NEWPATH},
- {"moveto", MOVETO},
- {"rmoveto", RMOVETO},
- {"lineto", LINETO},
- {"rlineto", RLINETO},
- {"curveto", CURVETO},
- {"rcurveto", RCURVETO},
- {"arc", ARC},
- {"arcn", ARCN},
-
- {"stroke", STROKE},
- {"fill", FILL},
- {"show", SHOW},
- {"showpage", SHOWPAGE},
-
- {"gsave", GSAVE},
- {"grestore", GRESTORE},
- {"translate", TRANSLATE},
- {"rotate", ROTATE},
- {"scale", SCALE},
-
- {"setlinecap", SETLINECAP},
- {"setlinejoin", SETLINEJOIN},
- {"setlinewidth", SETLINEWIDTH},
- {"setmiterlimit", SETMITERLIMIT},
- {"setdash", SETDASH},
-
- {"setgray", SETGRAY},
- {"setrgbcolor", SETRGBCOLOR},
- {"setcmykcolor", SETCMYKCOLOR},
-
- {"currentpoint", CURRENTPOINT}, /* This is here for rotate support
- in graphics package-not MP support */
- {"dtransform", DTRANSFORM},
- {"idtransform", IDTRANSFORM},
-
- {"findfont", FINDFONT},
- {"scalefont", SCALEFONT},
- {"setfont", SETFONT},
- {"currentfont", CURRENTFONT},
-
- {"stringwidth", STRINGWIDTH},
-
- {"def", DEF} /* not implemented yet; just work with mptopdf */
-};
-
-static struct operators mps_operators[] = {
- {"fshow", FSHOW}, /* exch findfont exch scalefont setfont show */
- {"startTexFig", STEXFIG},
- {"endTexFig", ETEXFIG},
- {"hlw", HLW}, /* 0 dtransform exch truncate exch idtransform pop setlinewidth */
- {"vlw", VLW}, /* 0 exch dtransform truncate idtransform pop setlinewidth pop */
- {"l", LINETO},
- {"r", RLINETO},
- {"c", CURVETO},
- {"m", MOVETO},
- {"p", CLOSEPATH},
- {"n", NEWPATH},
- {"C", SETCMYKCOLOR},
- {"G", SETGRAY},
- {"R", SETRGBCOLOR},
- {"lj", SETLINEJOIN},
- {"ml", SETMITERLIMIT},
- {"lc", SETLINECAP},
- {"S", STROKE},
- {"F", FILL},
- {"q", GSAVE},
- {"Q", GRESTORE},
- {"s", SCALE},
- {"t", CONCAT},
- {"sd", SETDASH},
- {"rd", RD}, /* [] 0 setdash */
- {"P", SHOWPAGE},
- {"B", B}, /* gsave fill grestore */
- {"W", CLIP}
-};
-
-#define NUM_PS_OPERATORS (sizeof(ps_operators)/sizeof(ps_operators[0]))
-#define NUM_MPS_OPERATORS (sizeof(mps_operators)/sizeof(mps_operators[0]))
-static int
-get_opcode (const char *token)
-{
- int i;
-
- for (i = 0; i < NUM_PS_OPERATORS; i++) {
- if (!strcmp(token, ps_operators[i].token)) {
- return ps_operators[i].opcode;
- }
- }
-
- for (i = 0; i < NUM_MPS_OPERATORS; i++) {
- if (!strcmp(token, mps_operators[i].token)) {
- return mps_operators[i].opcode;
- }
- }
-
- return -1;
-}
-
-#define PS_STACK_SIZE 1024
-
-static pdf_obj *stack[PS_STACK_SIZE];
-static unsigned top_stack = 0;
-
-#define POP_STACK() ((top_stack > 0) ? stack[--top_stack] : NULL)
-#define PUSH_STACK(o,e) { \
- if (top_stack < PS_STACK_SIZE) { \
- stack[top_stack++] = (o); \
- } else { \
- WARN("PS stack overflow including MetaPost file or inline PS code"); \
- *(e) = 1; \
- } \
-}
-
-static int
-do_exch (void)
-{
- pdf_obj *tmp;
-
- if (top_stack < 2)
- return -1;
-
- tmp = stack[top_stack-1];
- stack[top_stack-1] = stack[top_stack-2];
- stack[top_stack-2] = tmp;
-
- return 0;
-}
-
-static int
-do_clear (void)
-{
- pdf_obj *tmp;
-
- while (top_stack > 0) {
- tmp = POP_STACK();
- if (tmp)
- pdf_release_obj(tmp);
- }
-
- return 0;
-}
-
-/* This should be set_bottom and clear (or
- * have independent stack) to ensure stack
- * depth do not go below real stack bottom.
- */
-static void
-mps_stack_clear_to (int depth)
-{
- pdf_obj *tmp;
-
- while (top_stack > depth) {
- tmp = POP_STACK();
- if (tmp)
- pdf_release_obj(tmp);
- }
-
- return;
-}
-
-static int
-pop_get_numbers (double *values, int count)
-{
- pdf_obj *tmp;
-
- while (count-- > 0) {
- tmp = POP_STACK();
- if (!tmp) {
- WARN("mpost: Stack underflow.");
- break;
- } else if (!PDF_OBJ_NUMBERTYPE(tmp)) {
- WARN("mpost: Not a number!");
- pdf_release_obj(tmp);
- break;
- }
- values[count] = pdf_number_value(tmp);
- pdf_release_obj(tmp);
- }
-
- return (count + 1);
-}
-
-static int
-cvr_array (pdf_obj *array, double *values, int count)
-{
- if (!PDF_OBJ_ARRAYTYPE(array)) {
- WARN("mpost: Not an array!");
- } else {
- pdf_obj *tmp;
-
- while (count-- > 0) {
- tmp = pdf_get_array(array, count);
- if (!PDF_OBJ_NUMBERTYPE(tmp)) {
- WARN("mpost: Not a number!");
- break;
- }
- values[count] = pdf_number_value(tmp);
- }
- }
- if (array)
- pdf_release_obj(array);
-
- return (count + 1);
-}
-
-static int
-is_fontdict (pdf_obj *dict)
-{
- pdf_obj *tmp;
-
- if (!PDF_OBJ_DICTTYPE(dict))
- return 0;
-
- tmp = pdf_lookup_dict(dict, "Type");
- if (!tmp || !PDF_OBJ_NAMETYPE(tmp) ||
- strcmp(pdf_name_value(tmp), "Font")) {
- return 0;
- }
-
- tmp = pdf_lookup_dict(dict, "FontName");
- if (!tmp || !PDF_OBJ_NAMETYPE(tmp)) {
- return 0;
- }
-
- tmp = pdf_lookup_dict(dict, "FontScale");
- if (!tmp || !PDF_OBJ_NUMBERTYPE(tmp)) {
- return 0;
- }
-
- return 1;
-}
-
-static int
-do_findfont (void)
-{
- int error = 0;
- pdf_obj *font_dict, *font_name;
-
- font_name = POP_STACK();
- if (!font_name)
- return 1;
- else if (PDF_OBJ_STRINGTYPE(font_name) ||
- PDF_OBJ_NAMETYPE(font_name)) {
- /* Do not check the existence...
- * The reason for this is that we cannot locate PK font without
- * font scale.
- */
- font_dict = pdf_new_dict();
- pdf_add_dict(font_dict,
- pdf_new_name("Type"), pdf_new_name("Font"));
- if (PDF_OBJ_STRINGTYPE(font_name)) {
- pdf_add_dict(font_dict,
- pdf_new_name("FontName"),
- pdf_new_name(pdf_string_value(font_name)));
- pdf_release_obj(font_name);
- } else {
- pdf_add_dict(font_dict,
- pdf_new_name("FontName"), font_name);
- }
- pdf_add_dict(font_dict,
- pdf_new_name("FontScale"), pdf_new_number(1.0));
-
- if (top_stack < PS_STACK_SIZE) {
- stack[top_stack++] = font_dict;
- } else {
- WARN("PS stack overflow including MetaPost file or inline PS code");
- pdf_release_obj(font_dict);
- error = 1;
- }
- } else {
- error = 1;
- }
-
- return error;
-}
-
-static int
-do_scalefont (void)
-{
- int error = 0;
- pdf_obj *font_dict;
- pdf_obj *font_scale;
- double scale;
-
- error = pop_get_numbers(&scale, 1);
- if (error)
- return error;
-
- font_dict = POP_STACK();
- if (!font_dict)
- error = 1;
- else if (is_fontdict(font_dict)) {
- font_scale = pdf_lookup_dict(font_dict, "FontScale");
- pdf_set_number(font_scale, pdf_number_value(font_scale)*scale);
- if (top_stack < PS_STACK_SIZE) {
- stack[top_stack++] = font_dict;
- } else {
- WARN("PS stack overflow including MetaPost file or inline PS code");
- pdf_release_obj(font_dict);
- error = 1;
- }
- } else {
- error = 1;
- }
-
- return error;
-}
-
-static int
-do_setfont (void)
-{
- int error = 0;
- char *font_name;
- double font_scale;
- pdf_obj *font_dict;
-
- font_dict = POP_STACK();
- if (!is_fontdict(font_dict))
- error = 1;
- else {
- /* Subfont support prevent us from managing
- * font in a single place...
- */
- font_name = pdf_name_value (pdf_lookup_dict(font_dict, "FontName"));
- font_scale = pdf_number_value(pdf_lookup_dict(font_dict, "FontScale"));
-
- error = mp_setfont(font_name, font_scale);
- }
- pdf_release_obj(font_dict);
-
- return error;
-}
-
-/* Push dummy font dict onto PS stack */
-static int
-do_currentfont (void)
-{
- int error = 0;
- struct mp_font *font;
- pdf_obj *font_dict;
-
- font = CURRENT_FONT();
- if (!font) {
- WARN("Currentfont undefined...");
- return 1;
- } else {
- font_dict = pdf_new_dict();
- pdf_add_dict(font_dict,
- pdf_new_name("Type"),
- pdf_new_name("Font"));
- pdf_add_dict(font_dict,
- pdf_new_name("FontName"),
- pdf_new_name(font->font_name));
- pdf_add_dict(font_dict,
- pdf_new_name("FontScale"),
- pdf_new_number(font->pt_size));
- if (top_stack < PS_STACK_SIZE) {
- stack[top_stack++] = font_dict;
- } else {
- WARN("PS stack overflow...");
- pdf_release_obj(font_dict);
- error = 1;
- }
- }
-
- return error;
-}
-
-static int
-do_show (void)
-{
- struct mp_font *font;
- pdf_coord cp;
- pdf_obj *text_str;
- int length;
- unsigned char *strptr;
- double text_width;
-
- font = CURRENT_FONT();
- if (!font) {
- WARN("Currentfont not set."); /* Should not be error... */
- return 1;
- }
-
- pdf_dev_currentpoint(&cp);
-
- text_str = POP_STACK();
- if (!PDF_OBJ_STRINGTYPE(text_str)) {
- if (text_str)
- pdf_release_obj(text_str);
- return 1;
- }
- if (font->font_id < 0) {
- WARN("mpost: not set."); /* Should not be error... */
- pdf_release_obj(text_str);
- return 1;
- }
-
- strptr = pdf_string_value (text_str);
- length = pdf_string_length(text_str);
-
- if (font->tfm_id < 0) {
- WARN("mpost: TFM not found for \"%s\".", font->font_name);
- WARN("mpost: Text width not calculated...");
- }
-
- text_width = 0.0;
- if (font->subfont_id >= 0) {
- unsigned short uch;
- unsigned char *ustr;
- int i;
-
- ustr = NEW(length * 2, unsigned char);
- for (i = 0; i < length; i++) {
- uch = lookup_sfd_record(font->subfont_id, strptr[i]);
- ustr[2*i ] = uch >> 8;
- ustr[2*i+1] = uch & 0xff;
- if (font->tfm_id >= 0) {
- text_width += tfm_get_width(font->tfm_id, strptr[i]);
- }
- }
- text_width *= font->pt_size;
-
- pdf_dev_set_string((spt_t)(cp.x * dev_unit_dviunit()),
- (spt_t)(cp.y * dev_unit_dviunit()),
- ustr, length * 2,
- (spt_t)(text_width*dev_unit_dviunit()),
- font->font_id, 0);
- RELEASE(ustr);
- } else {
-#define FWBASE ((double) (1<<20))
- if (font->tfm_id >= 0) {
- text_width = (double) tfm_string_width(font->tfm_id, strptr, length)/FWBASE;
- text_width *= font->pt_size;
- }
- pdf_dev_set_string((spt_t)(cp.x * dev_unit_dviunit()),
- (spt_t)(cp.y * dev_unit_dviunit()),
- strptr, length,
- (spt_t)(text_width*dev_unit_dviunit()),
- font->font_id, 0);
- }
-
- if (pdf_dev_get_font_wmode(font->font_id)) {
- pdf_dev_rmoveto(0.0, -text_width);
- } else {
- pdf_dev_rmoveto(text_width, 0.0);
- }
-
- graphics_mode();
- pdf_release_obj(text_str);
-
- return 0;
-}
-
-static int
-do_mpost_bind_def (const char *ps_code, double x_user, double y_user)
-{
- int error = 0;
- const char *start, *end;
-
- start = ps_code;
- end = start + strlen(start);
-
- error = mp_parse_body(&start, end, x_user, y_user);
-
- return error;
-}
-
-static int
-do_texfig_operator (int opcode, double x_user, double y_user)
-{
- static transform_info fig_p;
- static int in_tfig = 0;
- static int xobj_id = -1;
- static int count = 0;
- double values[6];
- int error = 0;
-
- switch (opcode) {
- case STEXFIG:
- error = pop_get_numbers(values, 6);
- if (!error) {
- double dvi2pts;
- char resname[256];
-
- transform_info_clear(&fig_p);
- dvi2pts = 1.0/dev_unit_dviunit();
-
- fig_p.width = values[0] * dvi2pts;
- fig_p.height = values[1] * dvi2pts;
- fig_p.bbox.llx = values[2] * dvi2pts;
- fig_p.bbox.lly = -values[3] * dvi2pts;
- fig_p.bbox.urx = values[4] * dvi2pts;
- fig_p.bbox.ury = -values[5] * dvi2pts;
- fig_p.flags |= INFO_HAS_USER_BBOX;
-
- sprintf(resname, "__tf%d__", count);
- xobj_id = pdf_doc_begin_grabbing(resname,
- fig_p.bbox.llx, fig_p.bbox.ury, &fig_p.bbox);
-
- in_tfig = 1;
- count++;
- }
- break;
- case ETEXFIG:
- if (!in_tfig)
- ERROR("endTexFig without valid startTexFig!.");
-
- pdf_doc_end_grabbing(NULL);
- pdf_dev_put_image(xobj_id, &fig_p, x_user, y_user);
- in_tfig = 0;
- break;
- default:
- error = 1;
- }
-
- return error;
-}
-
-/*
- * buggy...
- */
-
-/*
- * CTM(Current Transformation Matrix) means the transformation of User Space
- * to Device Space coordinates. Because DVIPDFMx does not know the resolution
- * of Device Space, we assume that the resolution is 1/1000.
- */
-#define DEVICE_RESOLUTION 1000
-static int
-ps_dev_CTM (pdf_tmatrix *M)
-{
- pdf_dev_currentmatrix(M);
- M->a *= DEVICE_RESOLUTION; M->b *= DEVICE_RESOLUTION;
- M->c *= DEVICE_RESOLUTION; M->d *= DEVICE_RESOLUTION;
- M->e *= DEVICE_RESOLUTION; M->f *= DEVICE_RESOLUTION;
-
- return 0;
-}
-
-/*
- * Again, the only piece that needs x_user and y_user is
- * that piece dealing with texfig.
- */
-static int
-do_operator (const char *token, double x_user, double y_user)
-{
- int error = 0;
- int opcode = 0;
- double values[12];
- pdf_obj *tmp = NULL;
- pdf_tmatrix matrix;
- pdf_coord cp;
- pdf_color color;
-
-#define PUSH(o) { \
- if (top_stack < PS_STACK_SIZE) { \
- stack[top_stack++] = (o); \
- } else { \
- WARN("PS stack overflow including MetaPost file or inline PS code"); \
- error=1; \
- break;\
- } \
-}
-
- opcode = get_opcode(token);
-
- switch (opcode) {
-
- /*
- * Arithmetic operators
- */
- case ADD:
- error = pop_get_numbers(values, 2);
- if (!error)
- PUSH(pdf_new_number(values[0] + values[1]));
- break;
- case MUL:
- error = pop_get_numbers(values, 2);
- if (!error)
- PUSH(pdf_new_number(values[0]*values[1]));
- break;
- case NEG:
- error = pop_get_numbers(values, 1);
- if (!error)
- PUSH(pdf_new_number(-values[0]));
- break;
- case SUB:
- error = pop_get_numbers(values, 2);
- if (!error)
- PUSH(pdf_new_number(values[0] - values[1]));
- break;
- case DIV:
- error = pop_get_numbers(values, 2);
- if (!error)
- PUSH(pdf_new_number(values[0]/values[1]));
- break;
- case TRUNCATE: /* Round toward zero. */
- error = pop_get_numbers(values, 1);
- if (!error)
- PUSH(pdf_new_number(((values[0] > 0) ? floor(values[0]) : ceil(values[0]))));
- break;
-
- /* Stack operation */
- case CLEAR:
- error = do_clear();
- break;
- case POP:
- tmp = POP_STACK();
- if (tmp)
- pdf_release_obj(tmp);
- break;
- case EXCH:
- error = do_exch();
- break;
-
- /* Path construction */
- case MOVETO:
- error = pop_get_numbers(values, 2);
- if (!error)
- error = pdf_dev_moveto(values[0], values[1]);
- break;
- case RMOVETO:
- error = pop_get_numbers(values, 2);
- if (!error)
- error = pdf_dev_rmoveto(values[0], values[1]);
- break;
- case LINETO:
- error = pop_get_numbers(values, 2);
- if (!error)
- error = pdf_dev_lineto(values[0], values[1]);
- break;
- case RLINETO:
- error = pop_get_numbers(values, 2);
- if (!error)
- error = pdf_dev_rlineto(values[0], values[1]);
- break;
- case CURVETO:
- error = pop_get_numbers(values, 6);
- if (!error)
- error = pdf_dev_curveto(values[0], values[1],
- values[2], values[3],
- values[4], values[5]);
- break;
- case RCURVETO:
- error = pop_get_numbers(values, 6);
- if (!error)
- error = pdf_dev_rcurveto(values[0], values[1],
- values[2], values[3],
- values[4], values[5]);
- break;
- case CLOSEPATH:
- error = pdf_dev_closepath();
- break;
- case ARC:
- error = pop_get_numbers(values, 5);
- if (!error)
- error = pdf_dev_arc(values[0], values[1],
- values[2], /* rad */
- values[3], values[4]);
- break;
- case ARCN:
- error = pop_get_numbers(values, 5);
- if (!error)
- error = pdf_dev_arcn(values[0], values[1],
- values[2], /* rad */
- values[3], values[4]);
- break;
-
- case NEWPATH:
- pdf_dev_newpath();
- break;
- case STROKE:
- /* fill rule not supported yet */
- pdf_dev_flushpath('S', PDF_FILL_RULE_NONZERO);
- break;
- case FILL:
- pdf_dev_flushpath('f', PDF_FILL_RULE_NONZERO);
- break;
-
- case CLIP:
- error = pdf_dev_clip();
- break;
- case EOCLIP:
- error = pdf_dev_eoclip();
- break;
-
- /* Graphics state operators: */
- case GSAVE:
- error = pdf_dev_gsave();
- save_font();
- break;
- case GRESTORE:
- error = pdf_dev_grestore();
- restore_font();
- break;
-
- case CONCAT:
- tmp = POP_STACK();
- error = cvr_array(tmp, values, 6); /* This does pdf_release_obj() */
- tmp = NULL;
- if (error)
- WARN("Missing array before \"concat\".");
- else {
- pdf_setmatrix(&matrix,
- values[0], values[1],
- values[2], values[3],
- values[4], values[5]);
- error = pdf_dev_concat(&matrix);
- }
- break;
- case SCALE:
- error = pop_get_numbers(values, 2);
- if (!error) {
- switch (mp_cmode) {
-#ifndef WITHOUT_ASCII_PTEX
- case MP_CMODE_PTEXVERT:
- pdf_setmatrix(&matrix,
- values[1], 0.0,
- 0.0 , values[0],
- 0.0 , 0.0);
- break;
-#endif /* !WITHOUT_ASCII_PTEX */
- default:
- pdf_setmatrix(&matrix,
- values[0], 0.0,
- 0.0 , values[1],
- 0.0 , 0.0);
- break;
- }
-
- error = pdf_dev_concat(&matrix);
- }
- break;
- /* Positive angle means clock-wise direction in graphicx-dvips??? */
- case ROTATE:
- error = pop_get_numbers(values, 1);
- if (!error) {
- values[0] = values[0] * M_PI / 180;
-
- switch (mp_cmode) {
- case MP_CMODE_DVIPSK:
- case MP_CMODE_MPOST: /* Really? */
-#ifndef WITHOUT_ASCII_PTEX
- case MP_CMODE_PTEXVERT:
-#endif /* !WITHOUT_ASCII_PTEX */
- pdf_setmatrix(&matrix,
- cos(values[0]), -sin(values[0]),
- sin(values[0]), cos(values[0]),
- 0.0, 0.0);
- break;
- default:
- pdf_setmatrix(&matrix,
- cos(values[0]) , sin(values[0]),
- -sin(values[0]), cos(values[0]),
- 0.0, 0.0);
- break;
- }
- error = pdf_dev_concat(&matrix);
- }
- break;
- case TRANSLATE:
- error = pop_get_numbers(values, 2);
- if (!error) {
- pdf_setmatrix(&matrix,
- 1.0, 0.0,
- 0.0, 1.0,
- values[0], values[1]);
- error = pdf_dev_concat(&matrix);
- }
- break;
-
- case SETDASH:
- error = pop_get_numbers(values, 1);
- if (!error) {
- pdf_obj *pattern, *dash;
- int i, num_dashes;
- double dash_values[PDF_DASH_SIZE_MAX];
- double offset;
-
- offset = values[0];
- pattern = POP_STACK();
- if (!PDF_OBJ_ARRAYTYPE(pattern)) {
- if (pattern)
- pdf_release_obj(pattern);
- error = 1;
- break;
- }
- num_dashes = pdf_array_length(pattern);
- if (num_dashes > PDF_DASH_SIZE_MAX) {
- WARN("Too many dashes...");
- pdf_release_obj(pattern);
- error = 1;
- break;
- }
- for (i = 0;
- i < num_dashes && !error ; i++) {
- dash = pdf_get_array(pattern, i);
- if (!PDF_OBJ_NUMBERTYPE(dash))
- error = 1;
- else {
- dash_values[i] = pdf_number_value(dash);
- }
- }
- pdf_release_obj(pattern);
- if (!error) {
- error = pdf_dev_setdash(num_dashes, dash_values, offset);
- }
- }
- break;
- case SETLINECAP:
- error = pop_get_numbers(values, 1);
- if (!error)
- error = pdf_dev_setlinecap((int)values[0]);
- break;
- case SETLINEJOIN:
- error = pop_get_numbers(values, 1);
- if (!error)
- error = pdf_dev_setlinejoin((int)values[0]);
- break;
- case SETLINEWIDTH:
- error = pop_get_numbers(values, 1);
- if (!error)
- error = pdf_dev_setlinewidth(values[0]);
- break;
- case SETMITERLIMIT:
- error = pop_get_numbers(values, 1);
- if (!error)
- error = pdf_dev_setmiterlimit(values[0]);
- break;
-
- case SETCMYKCOLOR:
- error = pop_get_numbers(values, 4);
- /* Not handled properly */
- if (!error) {
- pdf_color_cmykcolor(&color,
- values[0], values[1],
- values[2], values[3]);
- pdf_dev_set_color(&color);
- }
- break;
- case SETGRAY:
- /* Not handled properly */
- error = pop_get_numbers(values, 1);
- if (!error) {
- pdf_color_graycolor(&color, values[0]);
- pdf_dev_set_color(&color);
- }
- break;
- case SETRGBCOLOR:
- error = pop_get_numbers(values, 3);
- if (!error) {
- pdf_color_rgbcolor(&color,
- values[0], values[1], values[2]);
- pdf_dev_set_color(&color);
- }
- break;
-
- case SHOWPAGE: /* Let's ignore this for now */
- break;
-
- case CURRENTPOINT:
- error = pdf_dev_currentpoint(&cp);
- if (!error) {
- PUSH(pdf_new_number(cp.x));
- PUSH(pdf_new_number(cp.y));
- }
- break;
-
- case DTRANSFORM:
- {
- int has_matrix = 0;
-
- tmp = POP_STACK();
- if (PDF_OBJ_ARRAYTYPE(tmp)) {
- error = cvr_array(tmp, values, 6); /* This does pdf_release_obj() */
- tmp = NULL;
- if (error)
- break;
- pdf_setmatrix(&matrix,
- values[0], values[1],
- values[2], values[3],
- values[4], values[5]);
- tmp = POP_STACK();
- has_matrix = 1;
- }
-
- if (!PDF_OBJ_NUMBERTYPE(tmp)) {
- error = 1;
- break;
- }
- cp.y = pdf_number_value(tmp);
- pdf_release_obj(tmp);
-
- tmp = POP_STACK();
- if (!PDF_OBJ_NUMBERTYPE(tmp)) {
- error = 1;
- break;
- }
- cp.x = pdf_number_value(tmp);
- pdf_release_obj(tmp);
-
- if (!has_matrix) {
- ps_dev_CTM(&matrix); /* Here, we need real PostScript CTM */
- }
- pdf_dev_dtransform(&cp, &matrix);
- PUSH(pdf_new_number(cp.x));
- PUSH(pdf_new_number(cp.y));
- }
- break;
-
- case IDTRANSFORM:
- {
- int has_matrix = 0;
-
- tmp = POP_STACK();
- if (PDF_OBJ_ARRAYTYPE(tmp)) {
- error = cvr_array(tmp, values, 6); /* This does pdf_release_obj() */
- tmp = NULL;
- if (error)
- break;
- pdf_setmatrix(&matrix,
- values[0], values[1],
- values[2], values[3],
- values[4], values[5]);
- tmp = POP_STACK();
- has_matrix = 1;
- }
-
- if (!PDF_OBJ_NUMBERTYPE(tmp)) {
- error = 1;
- break;
- }
- cp.y = pdf_number_value(tmp);
- pdf_release_obj(tmp);
-
- tmp = POP_STACK();
- if (!PDF_OBJ_NUMBERTYPE(tmp)) {
- error = 1;
- break;
- }
- cp.x = pdf_number_value(tmp);
- pdf_release_obj(tmp);
-
- if (!has_matrix) {
- ps_dev_CTM(&matrix); /* Here, we need real PostScript CTM */
- }
- pdf_dev_idtransform(&cp, &matrix);
- PUSH(pdf_new_number(cp.x));
- PUSH(pdf_new_number(cp.y));
- break;
- }
-
- case FINDFONT:
- error = do_findfont();
- break;
- case SCALEFONT:
- error = do_scalefont();
- break;
- case SETFONT:
- error = do_setfont();
- break;
- case CURRENTFONT:
- error = do_currentfont();
- break;
-
- case SHOW:
- error = do_show();
- break;
-
- case STRINGWIDTH:
- error = 1;
- break;
-
- /* Extensions */
- case FSHOW:
- error = do_mpost_bind_def("exch findfont exch scalefont setfont show", x_user, y_user);
- break;
- case STEXFIG:
- case ETEXFIG:
- error = do_texfig_operator(opcode, x_user, y_user);
- break;
- case HLW:
- error = do_mpost_bind_def("0 dtransform exch truncate exch idtransform pop setlinewidth", x_user, y_user);
- break;
- case VLW:
- error = do_mpost_bind_def("0 exch dtransform truncate idtransform setlinewidth pop", x_user, y_user);
- break;
- case RD:
- error = do_mpost_bind_def("[] 0 setdash", x_user, y_user);
- break;
- case B:
- error = do_mpost_bind_def("gsave fill grestore", x_user, y_user);
- break;
-
- case DEF:
- tmp = POP_STACK();
- tmp = POP_STACK();
- /* do nothing; not implemented yet */
- break;
-
- default:
- if (is_fontname(token)) {
- PUSH(pdf_new_name(token));
- } else {
- WARN("Unknown token \"%s\"", token);
- error = 1;
- }
- break;
- }
-
- return error;
-}
-
-/*
- * The only sections that need to know x_user and y _user are those
- * dealing with texfig.
- */
-static int
-mp_parse_body (const char **start, const char *end, double x_user, double y_user)
-{
- char *token;
- pdf_obj *obj;
- int error = 0;
-
- skip_white(start, end);
- while (*start < end && !error) {
- if (isdigit(**start) ||
- (*start < end - 1 &&
- (**start == '+' || **start == '-' || **start == '.' ))) {
- double value;
- char *next;
-
- value = strtod(*start, &next);
- if (next < end && !strchr("<([{/%", *next) && !isspace(*next)) {
- WARN("Unkown PostScript operator.");
- dump(*start, next);
- error = 1;
- } else {
- PUSH(pdf_new_number(value));
- *start = next;
- }
- /*
- * PDF parser can't handle PS operator inside arrays.
- * This shouldn't use parse_pdf_array().
- */
- } else if (**start == '[' &&
- (obj = parse_pdf_array(start, end, NULL))) {
- PUSH(obj);
- /* This cannot handle ASCII85 string. */
- } else if (*start < end - 1 &&
- (**start == '<' && *(*start+1) == '<') &&
- (obj = parse_pdf_dict(start, end, NULL))) {
- PUSH(obj);
- } else if ((**start == '(' || **start == '<') &&
- (obj = parse_pdf_string (start, end))) {
- PUSH(obj);
- } else if (**start == '/' &&
- (obj = parse_pdf_name(start, end))) {
- PUSH(obj);
- } else {
- token = parse_ident(start, end);
- if (!token)
- error = 1;
- else {
- error = do_operator(token, x_user, y_user);
- RELEASE(token);
- }
- }
- skip_white(start, end);
- }
-
- return error;
-}
-
-void
-mps_eop_cleanup (void)
-{
- clear_fonts();
- do_clear();
-}
-
-int
-mps_stack_depth (void)
-{
- return top_stack;
-}
-
-int
-mps_exec_inline (const char **p, const char *endptr,
- double x_user, double y_user)
-{
- int error;
- int dirmode, autorotate;
-
- /* Compatibility for dvipsk. */
- dirmode = pdf_dev_get_dirmode();
- if (dirmode) {
- mp_cmode = MP_CMODE_PTEXVERT;
- } else {
- mp_cmode = MP_CMODE_DVIPSK;
- }
-
- autorotate = pdf_dev_get_param(PDF_DEV_PARAM_AUTOROTATE);
- pdf_dev_set_param(PDF_DEV_PARAM_AUTOROTATE, 0);
- //pdf_color_push(); /* ... */
-
- /* Comment in dvipdfm:
- * Remember that x_user and y_user are off by 0.02 %
- */
- pdf_dev_moveto(x_user, y_user);
- error = mp_parse_body(p, endptr, x_user, y_user);
-
- //pdf_color_pop(); /* ... */
- pdf_dev_set_param(PDF_DEV_PARAM_AUTOROTATE, autorotate);
- pdf_dev_set_dirmode(dirmode);
-
- return error;
-}
-
-/* mp inclusion is a bit of a hack. The routine
- * starts a form at the lower left corner of
- * the page and then calls begin_form_xobj telling
- * it to record the image drawn there and bundle it
- * up in an xojbect. This allows us to use the coordinates
- * in the MP file directly. This appears to be the
- * easiest way to be able to use the pdf_dev_set_string()
- * command (with its scaled and extended fonts) without
- * getting all confused about the coordinate system.
- * After the xobject is created, the whole thing can
- * be scaled any way the user wants
- */
-
-/* Should implement save and restore. */
-int
-mps_include_page (const char *ident, FILE *fp)
-{
- int form_id;
- xform_info info;
- int st_depth, gs_depth;
- char *buffer;
- const char *p, *endptr;
- long length, nb_read;
- int dirmode, autorotate, error;
-
- rewind(fp);
-
- length = file_size(fp);
- if (length < 1) {
- WARN("Can't read any byte in the MPS file.");
- return -1;
- }
-
- buffer = NEW(length + 1, char);
- buffer[length] = '\0';
- p = buffer;
- endptr = p + length;
-
- while (length > 0) {
- nb_read = fread(buffer, sizeof(char), length, fp);
- if (nb_read < 0) {
- RELEASE(buffer);
- WARN("Reading file failed...");
- return -1;
- }
- length -= nb_read;
- }
-
- error = mps_scan_bbox(&p, endptr, &(info.bbox));
- if (error) {
- WARN("Error occured while scanning MetaPost file headers: Could not find BoundingBox.");
- RELEASE(buffer);
- return -1;
- }
- skip_prolog(&p, endptr);
-
- dirmode = pdf_dev_get_dirmode();
- autorotate = pdf_dev_get_param(PDF_DEV_PARAM_AUTOROTATE);
- pdf_dev_set_param(PDF_DEV_PARAM_AUTOROTATE, 0);
- //pdf_color_push();
-
- form_id = pdf_doc_begin_grabbing(ident, 0.0, 0.0, &(info.bbox));
-
- mp_cmode = MP_CMODE_MPOST;
- gs_depth = pdf_dev_current_depth();
- st_depth = mps_stack_depth();
- /* At this point the gstate must be initialized, since it starts a new
- * XObject. Note that it increase gs_depth by 1. */
- pdf_dev_push_gstate();
-
- error = mp_parse_body(&p, endptr, 0.0, 0.0);
- RELEASE(buffer);
-
- if (error) {
- WARN("Errors occured while interpreting MPS file.");
- /* WARN("Leaving garbage in output PDF file."); */
- form_id = -1;
- }
-
- /* It's time to pop the new gstate above. */
- pdf_dev_pop_gstate();
- mps_stack_clear_to (st_depth);
- pdf_dev_grestore_to(gs_depth);
-
- pdf_doc_end_grabbing(NULL);
-
- //pdf_color_pop();
- pdf_dev_set_param(PDF_DEV_PARAM_AUTOROTATE, autorotate);
- pdf_dev_set_dirmode(dirmode);
-
- return form_id;
-}
-
-int
-mps_do_page (FILE *image_file)
-{
- int error = 0;
- pdf_rect bbox;
- char *buffer;
- const char *start, *end;
- long size;
- int dir_mode;
-
- rewind(image_file);
- if ((size = file_size(image_file)) == 0) {
- WARN("Can't read any byte in the MPS file.");
- return -1;
- }
-
- buffer = NEW(size+1, char);
- fread(buffer, sizeof(char), size, image_file);
- buffer[size] = 0;
- start = buffer;
- end = buffer + size;
-
- error = mps_scan_bbox(&start, end, &bbox);
- if (error) {
- WARN("Error occured while scanning MetaPost file headers: Could not find BoundingBox.");
- RELEASE(buffer);
- return -1;
- }
-
- mp_cmode = MP_CMODE_MPOST;
-
- pdf_doc_begin_page (1.0, 0.0, 0.0); /* scale, xorig, yorig */
- pdf_doc_set_mediabox(pdf_doc_current_page_number(), &bbox);
-
- dir_mode = pdf_dev_get_dirmode();
- pdf_dev_set_autorotate(0);
-
- skip_prolog(&start, end);
-
- error = mp_parse_body(&start, end, 0.0, 0.0);
-
- if (error) {
- WARN("Errors occured while interpreting MetaPost file.");
- }
-
- pdf_dev_set_autorotate(1);
- pdf_dev_set_dirmode(dir_mode);
-
- pdf_doc_end_page();
-
- RELEASE(buffer);
-
- /*
- * The reason why we don't return XObject itself is
- * PDF inclusion may not be made so.
- */
- return (error ? -1 : 0);
-}
-
-int
-check_for_mp (FILE *image_file)
-{
- int try_count = 10;
-
- rewind (image_file);
- mfgets(work_buffer, WORK_BUFFER_SIZE, image_file);
- if (strncmp(work_buffer, "%!PS", 4))
- return 0;
-
- while (try_count > 0) {
- mfgets(work_buffer, WORK_BUFFER_SIZE, image_file);
- if (!strncmp(work_buffer, "%%Creator:", 10)) {
- if (strlen(work_buffer+10) >= 8 &&
- strstr(work_buffer+10, "MetaPost"))
- break;
- }
- try_count--;
- }
-
- return ((try_count > 0) ? 1 : 0);
-}
diff --git a/Build/source/texk/dvipdfm-x/xsrc/pdfdoc.h b/Build/source/texk/dvipdfm-x/xsrc/pdfdoc.h
deleted file mode 100644
index 5e65da405e3..00000000000
--- a/Build/source/texk/dvipdfm-x/xsrc/pdfdoc.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
-
- This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
-
- Copyright (C) 2007-2012 by Jin-Hwan Cho and Shunsaku Hirata,
- the dvipdfmx project team.
-
- Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu>
-
- 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.
-*/
-
-#ifndef _PDFDOC_H_
-#define _PDFDOC_H_
-
-#include "pdfobj.h"
-#include "pdfdev.h"
-
-#define PDF_DOC_GRABBING_NEST_MAX 4
-
-extern void pdf_doc_set_verbose (void);
-
-extern void pdf_open_document (const char *filename,
- int do_encryption,
- double media_width, double media_height,
- double annot_grow_amount, int bookmark_open_depth);
-extern void pdf_close_document (void);
-
-
-/* PDF document metadata */
-extern void pdf_doc_set_creator (const char *creator);
-
-
-/* They just return PDF dictionary object.
- * Callers are completely responsible for doing right thing...
- */
-extern pdf_obj *pdf_doc_get_dictionary (const char *category);
-extern pdf_obj *pdf_doc_get_reference (const char *category);
-
-#define pdf_doc_page_tree() pdf_doc_get_dictionary("Pages")
-#define pdf_doc_catalog() pdf_doc_get_dictionary("Catalog")
-#define pdf_doc_docinfo() pdf_doc_get_dictionary("Info")
-#define pdf_doc_names() pdf_doc_get_dictionary("Names")
-#define pdf_doc_this_page() pdf_doc_get_dictionary("@THISPAGE")
-
-extern long pdf_doc_current_page_number (void);
-extern pdf_obj *pdf_doc_current_page_resources (void);
-
-extern pdf_obj *pdf_doc_ref_page (unsigned long page_no);
-#define pdf_doc_this_page_ref() pdf_doc_get_reference("@THISPAGE")
-#define pdf_doc_next_page_ref() pdf_doc_get_reference("@NEXTPAGE")
-#define pdf_doc_prev_page_ref() pdf_doc_get_reference("@PREVPAGE")
-
-/* Not really managing tree...
- * There should be something for number tree.
- */
-extern int pdf_doc_add_names (const char *category,
- const void *key, int keylen, pdf_obj *value);
-
-extern void pdf_doc_set_bop_content (const char *str, unsigned length);
-extern void pdf_doc_set_eop_content (const char *str, unsigned length);
-
-/* Page */
-extern void pdf_doc_begin_page (double scale, double x_origin, double y_origin);
-extern void pdf_doc_end_page (void);
-
-extern void pdf_doc_set_mediabox (unsigned page_no, const pdf_rect *mediabox);
-extern void pdf_doc_get_mediabox (unsigned page_no, pdf_rect *mediabox);
-
-extern void pdf_doc_add_page_content (const char *buffer, unsigned length);
-extern void pdf_doc_add_page_resource (const char *category,
- const char *resource_name, pdf_obj *resources);
-
-/* Article thread */
-extern void pdf_doc_begin_article (const char *article_id, pdf_obj *info);
-#if 0
-extern void pdf_doc_end_article (const char *article_id); /* Do nothing... */
-#endif
-extern void pdf_doc_make_article (const char *article_id,
- const char **bead_order, int num_beads);
-extern void pdf_doc_add_bead (const char *article_id,
- const char *bead_id,
- long page_no, const pdf_rect *rect);
-
-/* Bookmarks */
-extern int pdf_doc_bookmarks_up (void);
-extern int pdf_doc_bookmarks_down (void);
-extern void pdf_doc_bookmarks_add (pdf_obj *dict, int is_open);
-extern int pdf_doc_bookmarks_depth (void);
-
-
-/* Returns xobj_id of started xform. */
-extern int pdf_doc_begin_grabbing (const char *ident,
- double ref_x, double ref_y,
- const pdf_rect *cropbox);
-extern void pdf_doc_end_grabbing (pdf_obj *attrib);
-
-
-/* Annotation */
-extern void pdf_doc_add_annot (unsigned page_no,
- const pdf_rect *rect, pdf_obj *annot_dict);
-
-/* Annotation with auto- clip and line (or page) break */
-extern void pdf_doc_begin_annot (pdf_obj *dict);
-extern void pdf_doc_end_annot (void);
-
-extern void pdf_doc_break_annot (void);
-extern void pdf_doc_expand_box (const pdf_rect *rect);
-
-/* Manual thumbnail */
-extern void pdf_doc_enable_manual_thumbnails (void);
-
-#if 0
-/* PageLabels - */
-extern void pdf_doc_set_pagelabel (long page_start,
- const char *type,
- const void *prefix, int pfrx_len,
- long counter_start);
-#endif
-
-/* Similar to bop_content */
-#include "pdfcolor.h"
-extern void pdf_doc_set_bgcolor (const pdf_color *color);
-
-#endif /* _PDFDOC_H_ */
diff --git a/Build/source/texk/dvipdfm-x/xsrc/xbb.c b/Build/source/texk/dvipdfm-x/xsrc/xbb.c
index d93840b97ff..6820b3af4c5 100644
--- a/Build/source/texk/dvipdfm-x/xsrc/xbb.c
+++ b/Build/source/texk/dvipdfm-x/xsrc/xbb.c
@@ -26,11 +26,12 @@
#include <stdio.h>
#include <time.h>
#include <string.h>
+
+#include "numbers.h"
#include "system.h"
#include "mem.h"
#include "error.h"
#include "mfileio.h"
-#include "numbers.h"
#include "pdfobj.h"
#include "pdfparse.h"
@@ -40,32 +41,43 @@
#include <png.h>
#endif
+#include "dvipdfmx.h"
#include "xbb.h"
#define XBB_PROGRAM "extractbb"
-#define XBB_VERSION "Version 0.2"
+#define XBB_VERSION VERSION
static int xbb_output_mode = XBB_OUTPUT;
-static void usage(void)
+static void show_version(void)
{
- fprintf (stderr, "%s, version %s, Copyright (C) 2008 by Jin-Hwan Cho\n",
+ fprintf (stdout, "%s, version %s, Copyright (C) 2008 by Jin-Hwan Cho\n",
XBB_PROGRAM, XBB_VERSION);
- fprintf (stderr, "A bounding box extraction utility from PDF, PNG, and JPG.\n");
+ fprintf (stdout, "A bounding box extraction utility from PDF, PNG, and JPEG.\n");
fprintf (stdout, "\nThis is free software; you can redistribute it and/or modify\n");
fprintf (stdout, "it under the terms of the GNU General Public License as published by\n");
fprintf (stdout, "the Free Software Foundation; either version 2 of the License, or\n");
fprintf (stdout, "(at your option) any later version.\n");
- fprintf (stderr, "\nUsage: %s [-v] [-b] [-m|-x] [files]\n", XBB_PROGRAM);
- fprintf (stderr, "\t-b\tWrite output file in binary mode\n");
+}
+
+static void show_usage(void)
+{
+ fprintf (stdout, "\nUsage: %s [-v] [-b] [-m|-x] [files]\n", XBB_PROGRAM);
+ fprintf (stdout, "\t-v\tBe verbose\n");
+ fprintf (stdout, "\t-b\tWrite output file in binary mode\n");
if(xbb_output_mode == EBB_OUTPUT) {
- fprintf (stderr, "\t-m\tOutput .bb file used in DVIPDFM (default)\n");
- fprintf (stderr, "\t-x\tOutput .xbb file used in DVIPDFMx\n");
+ fprintf (stdout, "\t-m\tOutput .bb file used in DVIPDFM (default)\n");
+ fprintf (stdout, "\t-x\tOutput .xbb file used in DVIPDFMx\n");
} else {
- fprintf (stderr, "\t-m\tOutput .bb file used in DVIPDFM\n");
- fprintf (stderr, "\t-x\tOutput .xbb file used in DVIPDFMx (default)\n");
+ fprintf (stdout, "\t-m\tOutput .bb file used in DVIPDFM\n");
+ fprintf (stdout, "\t-x\tOutput .xbb file used in DVIPDFMx (default)\n");
}
- fprintf (stderr, "\t-v\tVerbose\n");
+}
+
+static void usage(void)
+{
+ show_version();
+ show_usage();
exit(1);
}
@@ -96,11 +108,11 @@ static char *make_xbb_filename(const char *name)
break;
}
if (i == sizeof(extensions) / sizeof(extensions[0])) {
- fprintf(stderr, "Warning: %s: Filename does not end in a recognizeable extension.\n", name);
- result = NEW(strlen(name)+3, char);
+ WARN("%s: Filename does not end in a recognizable extension.\n", name);
+ result = NEW(strlen(name)+5, char); /* 5 = ".xbb" + trailing 0 */
strcpy(result, name);
} else { /* Remove extension */
- result = NEW(strlen(name)+3-strlen(extensions[i])+1, char);
+ result = NEW(strlen(name)-strlen(extensions[i])+5, char); /* 5 = ".xbb" + trailing 0 */
strncpy(result, name, strlen(name)-strlen(extensions[i]));
result[strlen(name)-strlen(extensions[i])] = 0;
}
@@ -122,12 +134,12 @@ static void write_xbb(char *fname, int bbllx, int bblly, int bburx, int bbury)
return;
}
if (verbose) {
- fprintf(stderr, "Writing to %s: ", outname);
- fprintf(stderr, "Bounding box: %d %d %d %d\n", bbllx, bblly, bburx, bbury);
+ MESG("Writing to %s: ", outname);
+ MESG("Bounding box: %d %d %d %d\n", bbllx, bblly, bburx, bbury);
}
- fprintf(fp,"%%%%Title: %s\n", fname);
- fprintf(fp,"%%%%Creator: %s %s\n", XBB_PROGRAM, XBB_VERSION);
- fprintf(fp,"%%%%BoundingBox: %d %d %d %d\n", bbllx, bblly, bburx, bbury);
+ fprintf(fp, "%%%%Title: %s\n", fname);
+ fprintf(fp, "%%%%Creator: %s %s\n", XBB_PROGRAM, XBB_VERSION);
+ fprintf(fp, "%%%%BoundingBox: %d %d %d %d\n", bbllx, bblly, bburx, bbury);
do_time(fp);
RELEASE(outname);
MFCLOSE(fp);
@@ -480,12 +492,13 @@ int extractbb (int argc, char *argv[], int mode)
usage();
}
}
+
for (; argc > 0; argc--, argv++) {
FILE *infile = NULL;
char *kpse_file_name;
if (!(kpse_file_name = kpse_find_pict(argv[0])) ||
(infile = MFOPEN(kpse_file_name, FOPEN_RBIN_MODE)) == NULL) {
- fprintf(stderr, "Can't find file (%s)...skipping\n", argv[0]);
+ WARN("Can't find file (%s)...skipping\n", argv[0]);
goto cont;
}
if (check_for_jpeg(infile)) {
@@ -502,7 +515,7 @@ int extractbb (int argc, char *argv[], int mode)
goto cont;
}
#endif /* HAVE_LIBPNG */
- fprintf(stderr, "Can't handle file type for file named %s\n", argv[0]);
+ WARN("Can't handle file type for file named %s\n", argv[0]);
cont:
if (kpse_file_name)
RELEASE(kpse_file_name);