texlive[64224] Build/source/texk/dvisvgm: dvisvgm 2.14
commits+hironobu at tug.org
commits+hironobu at tug.org
Mon Aug 29 15:52:14 CEST 2022
Revision: 64224
http://tug.org/svn/texlive?view=revision&revision=64224
Author: hironobu
Date: 2022-08-29 15:52:14 +0200 (Mon, 29 Aug 2022)
Log Message:
-----------
dvisvgm 2.14
Modified Paths:
--------------
trunk/Build/source/texk/dvisvgm/ChangeLog
trunk/Build/source/texk/dvisvgm/TLpatches/ChangeLog
trunk/Build/source/texk/dvisvgm/TLpatches/patch-04-configure
trunk/Build/source/texk/dvisvgm/TLpatches/patch-08-makefiles
trunk/Build/source/texk/dvisvgm/aclocal.m4
trunk/Build/source/texk/dvisvgm/configure
trunk/Build/source/texk/dvisvgm/configure.ac
trunk/Build/source/texk/dvisvgm/dvisvgm-src/ChangeLog
trunk/Build/source/texk/dvisvgm/dvisvgm-src/NEWS
trunk/Build/source/texk/dvisvgm/dvisvgm-src/config.h.in
trunk/Build/source/texk/dvisvgm/dvisvgm-src/configure.ac
trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.in
trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.1
trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/Makefile.in
trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/encode.h
trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/output.h
trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.cc
trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.h
trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/normalize.cc
trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/transform.cc
trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_enc.cc
trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_out.cc
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.hpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HashFunction.hpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.hpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ImageToSVG.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.am
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.in
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Opacity.hpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGElement.hpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.hpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/dvisvgm.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/AttributeExtractor.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/AttributeExtractor.hpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/GroupCollapser.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/Makefile.am
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/Makefile.in
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/TextSimplifier.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.hpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/DvisvgmSpecialTest.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.am
trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.in
trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/data/Makefile.in
trunk/Build/source/texk/dvisvgm/version.ac
Added Paths:
-----------
trunk/Build/source/texk/dvisvgm/TLpatches/patch-12-potrace-tl
trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/README.md
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPathParser.hpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.cpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.hpp
trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/GraphicsPathParserTest.cpp
Modified: trunk/Build/source/texk/dvisvgm/ChangeLog
===================================================================
--- trunk/Build/source/texk/dvisvgm/ChangeLog 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/ChangeLog 2022-08-29 13:52:14 UTC (rev 64224)
@@ -1,3 +1,7 @@
+2022-08-29 Hironobu Yamashita <h.y.acetaminophen at gmail.com>
+
+ * dvisvgm-src/*, version.ac: 2.14; update sources and patches.
+
2021-06-26 Karl Berry <karl at freefriends.org>
* dvisvgm-src/libs/ff-woff/Makefile.am (AM_CFLAGS): use ZLIB_INCLUDES
Modified: trunk/Build/source/texk/dvisvgm/TLpatches/ChangeLog
===================================================================
--- trunk/Build/source/texk/dvisvgm/TLpatches/ChangeLog 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/TLpatches/ChangeLog 2022-08-29 13:52:14 UTC (rev 64224)
@@ -1,3 +1,8 @@
+2022-08-29 Hironobu Yamashita <h.y.acetaminophen at gmail.com>
+
+ * Import 2.14.
+ * patch-12-potrace-lib: potrace under common libs (again).
+
2022-01-27 Hironobu Yamashita <h.y.acetaminophen at gmail.com>
* patch-11-oldclang: remove, applied upstream.
Modified: trunk/Build/source/texk/dvisvgm/TLpatches/patch-04-configure
===================================================================
--- trunk/Build/source/texk/dvisvgm/TLpatches/patch-04-configure 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/TLpatches/patch-04-configure 2022-08-29 13:52:14 UTC (rev 64224)
@@ -1,6 +1,6 @@
---- dvisvgm-2.13/configure.ac 2022-01-20 01:52:06.000000000 -0800
-+++ configure.ac 2022-01-21 09:14:30.484086131 -0800
-@@ -1,81 +1,69 @@
+--- dvisvgm-2.14/configure.ac 2022-08-12 16:43:05.000000000 +0900
++++ configure.ac 2022-08-29 21:25:23.000000000 +0900
+@@ -1,149 +1,157 @@
-# This file is part of dvisvgm
-# Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>
-#
@@ -7,8 +7,8 @@
-# Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.59)
--AC_INIT([dvisvgm],[2.13],[martin.gieseking at uos.de])
-+dnl $Id: configure.ac 57804 2021-02-19 23:14:47Z karl $
+-AC_INIT([dvisvgm],[2.14],[martin.gieseking at uos.de])
++dnl $Id: configure.ac 64168 2022-08-22 21:33:05Z lscarso $
+dnl Process this file with autoconf to produce a configure script
+dnl for dvisvgm in TeX Live.
+dnl
@@ -25,7 +25,7 @@
+AC_PREREQ([2.65])
+m4_include([version.ac])[] dnl define dvisvgm_version
+AC_INIT([dvisvgm (TeX Live)], dvisvgm_version, [tex-k at tug.org])
- DATE="January 2022"
+ DATE="August 2022"
-AC_CONFIG_SRCDIR(src)
+AC_CONFIG_SRCDIR([dvisvgm-src/src/dvisvgm.cpp])
AC_CONFIG_HEADERS([config.h])
@@ -108,6 +108,7 @@
+KPSE_KPATHSEA_FLAGS
+KPSE_FREETYPE2_FLAGS
+KPSE_ZLIB_FLAGS
++KPSE_POTRACE_FLAGS
+
+KPSE_SAVE_FLAGS
+
@@ -127,7 +128,7 @@
+fi
AS_IF([test "x$have_libgs" = "xno"],
# Ghostscript not found, check for dlopen
-@@ -83,66 +71,85 @@
+ [AC_CHECK_LIB(dl, dlopen,,
[AC_DEFINE(DISABLE_GS, 1, [Set to 1 if PostScript support should be disabled])]
[AC_MSG_WARN(PostScript support disabled)])])
+fi
@@ -270,7 +271,9 @@
+# emacs-page
# Check for header files.
AC_HEADER_DIRENT
-@@ -159,79 +166,75 @@
+ AC_HEADER_STDC
+@@ -158,80 +166,75 @@
+ AC_FUNC_STAT
AC_CHECK_FUNCS_ONCE([ftime gettimeofday sigaction umask uselocale])
-# add options for selection of "optional" library locations
@@ -406,7 +409,6 @@
+ dvisvgm-src/libs/clipper/Makefile
+ dvisvgm-src/libs/ff-woff/Makefile
+ dvisvgm-src/libs/md5/Makefile
-+ dvisvgm-src/libs/potrace/Makefile
+ dvisvgm-src/libs/variant/Makefile
+ dvisvgm-src/libs/woff2/Makefile
+ dvisvgm-src/libs/xxHash/Makefile
Modified: trunk/Build/source/texk/dvisvgm/TLpatches/patch-08-makefiles
===================================================================
--- trunk/Build/source/texk/dvisvgm/TLpatches/patch-08-makefiles 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/TLpatches/patch-08-makefiles 2022-08-29 13:52:14 UTC (rev 64224)
@@ -1,39 +1,42 @@
-diff --strip-trailing-cr -u1 -r dvisvgm-2.13/Makefile.am dvisvgm-src/Makefile.am
---- dvisvgm-2.13/Makefile.am 2022-01-18 05:39:00.000000000 -0800
-+++ dvisvgm-src/Makefile.am 2022-01-21 09:15:51.800456322 -0800
-@@ -7,3 +7,3 @@
+diff --strip-trailing-cr -ur dvisvgm-2.14/Makefile.am dvisvgm-src/Makefile.am
+--- dvisvgm-2.14/Makefile.am 2022-01-18 22:39:00.000000000 +0900
++++ dvisvgm-src/Makefile.am 2022-08-29 21:34:21.000000000 +0900
+@@ -5,7 +5,7 @@
+
+ AUTOMAKE_OPTIONS = foreign
EXTRA_DIST = COPYING
-SUBDIRS = libs m4 src tests doc
+SUBDIRS = libs src #not for TL: m4 tests doc
ACLOCAL_AMFLAGS = -I m4
-Only in dvisvgm-2.13: aclocal.m4
-Only in dvisvgm-2.13: ar-lib
-Only in dvisvgm-2.13: compile
-Only in dvisvgm-2.13: config.guess
-Only in dvisvgm-2.13: config.sub
-Only in dvisvgm-2.13: configure
-Only in dvisvgm-2.13: depcomp
-Only in dvisvgm-2.13: install-sh
-diff --strip-trailing-cr -u1 -r dvisvgm-2.13/libs/ff-woff/Makefile.am dvisvgm-src/libs/ff-woff/Makefile.am
---- dvisvgm-2.13/libs/ff-woff/Makefile.am 2019-04-12 07:39:46.000000000 -0700
-+++ dvisvgm-src/libs/ff-woff/Makefile.am 2022-01-21 09:15:51.801456314 -0800
-@@ -85,3 +85,3 @@
+ if USE_BUNDLED_LIBS
+diff --strip-trailing-cr -ur dvisvgm-2.14/libs/ff-woff/Makefile.am dvisvgm-src/libs/ff-woff/Makefile.am
+--- dvisvgm-2.14/libs/ff-woff/Makefile.am 2019-04-12 23:39:46.000000000 +0900
++++ dvisvgm-src/libs/ff-woff/Makefile.am 2022-08-29 21:34:21.000000000 +0900
+@@ -83,7 +83,7 @@
+
+ EXTRA_DIST = LICENSE
+
-AM_CFLAGS = -I$(srcdir)/inc -I$(srcdir)/fontforge $(ZLIB_CFLAGS)
+AM_CFLAGS = -I$(srcdir)/inc -I$(srcdir)/fontforge $(ZLIB_INCLUDES)
-Only in dvisvgm-2.13: ltmain.sh
-Only in dvisvgm-2.13: m4
-Only in dvisvgm-2.13: missing
-diff --strip-trailing-cr -u1 -r dvisvgm-2.13/src/Makefile.am dvisvgm-src/src/Makefile.am
---- dvisvgm-2.13/src/Makefile.am 2022-01-18 05:39:00.000000000 -0800
-+++ dvisvgm-src/src/Makefile.am 2022-01-21 09:15:51.801456314 -0800
-@@ -6,3 +6,3 @@
+ @CODE_COVERAGE_RULES@
+
+diff --strip-trailing-cr -ur dvisvgm-2.14/src/Makefile.am dvisvgm-src/src/Makefile.am
+--- dvisvgm-2.14/src/Makefile.am 2022-07-14 16:53:39.000000000 +0900
++++ dvisvgm-src/src/Makefile.am 2022-08-29 21:34:21.000000000 +0900
+@@ -4,7 +4,7 @@
+ ## Process this file with automake.
+
bin_PROGRAMS = dvisvgm
-noinst_LTLIBRARIES = libdvisvgm.la
+noinst_LIBRARIES = libdvisvgm.a
SUBDIRS = optimizer
-@@ -16,9 +16,7 @@
+
+ dvisvgm_SOURCES = \
+@@ -14,13 +14,11 @@
+ include ../libs/defs.am
+
dvisvgm_LDADD = \
- $(noinst_LTLIBRARIES) \
+ $(noinst_LIBRARIES) \
@@ -46,7 +49,11 @@
- $(ZLIB_LIBS)
+ $(XXHASH_LIBS)
-@@ -37,5 +35,13 @@
+ if ENABLE_WOFF
+ dvisvgm_LDADD += \
+@@ -35,9 +33,17 @@
+ dvisvgm_LDADD += $(LIBCRYPTO_LIBS)
+ endif
-dvisvgm_DEPENDENCIES = $(noinst_LTLIBRARIES)
+dvisvgm_LDADD += \
@@ -62,7 +69,11 @@
+
+libdvisvgm_a_SOURCES = \
AGLTable.hpp \
-@@ -164,20 +170,14 @@
+ BasicDVIReader.hpp BasicDVIReader.cpp \
+ Bezier.hpp Bezier.cpp \
+@@ -164,28 +170,32 @@
+ ZLibOutputStream.hpp
+
if ENABLE_WOFF
-libdvisvgm_la_SOURCES += ffwrapper.c ffwrapper.h
+libdvisvgm_a_SOURCES += ffwrapper.c ffwrapper.h
@@ -88,7 +99,7 @@
- $(CODE_COVERAGE_CFLAGS)
+ -I$(dvisvgm_srcdir)/libs/variant/include
-@@ -185,3 +185,13 @@
+ AM_CXXFLAGS += \
$(POTRACE_CFLAGS) \
- $(XXHASH_CFLAGS)
+ $(XXHASH_CFLAGS) \
@@ -103,12 +114,20 @@
+AM_CXXFLAGS += -DTEXLIVEWIN32
+endif WIN32
-@@ -196,4 +206,2 @@
+ AM_LDFLAGS = \
+ $(KPSE_LIBS) \
+@@ -196,8 +206,6 @@
+ -I$(dvisvgm_srcdir)/libs/ff-woff/fontforge \
+ -I$(dvisvgm_srcdir)/libs/ff-woff/inc
-AM_CXXFLAGS += $(TTFAUTOHINT_CFLAGS)
-
AM_CXXFLAGS += \
-@@ -208,5 +216,6 @@
+ $(BROTLI_CFLAGS) \
+ $(WOFF2_CFLAGS)
+@@ -208,9 +216,10 @@
+ AM_CXXFLAGS += $(LIBCRYPTO_CFLAGS)
+ endif
-AM_LDFLAGS += $(TTFAUTOHINT_LIBS)
endif
@@ -116,11 +135,16 @@
+# TL: do not try to rebuild these source files.
+if ! TEXLIVE_BUILD
-@@ -224,2 +233,3 @@
+ # the command-line parser class is generated from options.xml by opt2cpp
+ $(srcdir)/CommandLine.hpp: options.xml
+@@ -224,7 +233,15 @@
+ fi
+
psdefs.ps: ;
+endif ! TEXLIVE_BUILD
-@@ -228 +238,8 @@
+ @CODE_COVERAGE_RULES@
+
CLEANFILES = *.gcda *.gcno
+
+# Rebuild libkpathsea:
@@ -129,11 +153,10 @@
+ at FREETYPE2_RULE@
+# Rebuild libz:
+ at ZLIB_RULE@
-Only in dvisvgm-src/src: Makefile.am~
-diff --strip-trailing-cr -u1 -r dvisvgm-2.13/src/optimizer/Makefile.am dvisvgm-src/src/optimizer/Makefile.am
---- dvisvgm-2.13/src/optimizer/Makefile.am 2019-12-06 00:42:54.000000000 -0800
-+++ dvisvgm-src/src/optimizer/Makefile.am 2022-01-21 09:15:51.801456314 -0800
-@@ -1,4 +1,4 @@
+diff --strip-trailing-cr -ur dvisvgm-2.14/src/optimizer/Makefile.am dvisvgm-src/src/optimizer/Makefile.am
+--- dvisvgm-2.14/src/optimizer/Makefile.am 2022-08-12 15:52:19.000000000 +0900
++++ dvisvgm-src/src/optimizer/Makefile.am 2022-08-29 21:34:21.000000000 +0900
+@@ -1,6 +1,6 @@
-noinst_LTLIBRARIES = liboptimizer.la
+noinst_LIBRARIES = liboptimizer.a
@@ -140,4 +163,5 @@
-liboptimizer_la_SOURCES = \
+liboptimizer_a_SOURCES = \
AttributeExtractor.hpp AttributeExtractor.cpp \
-Only in dvisvgm-2.13: test-driver
+ ClipPathReassigner.hpp ClipPathReassigner.cpp \
+ DependencyGraph.hpp \
Added: trunk/Build/source/texk/dvisvgm/TLpatches/patch-12-potrace-tl
===================================================================
--- trunk/Build/source/texk/dvisvgm/TLpatches/patch-12-potrace-tl (rev 0)
+++ trunk/Build/source/texk/dvisvgm/TLpatches/patch-12-potrace-tl 2022-08-29 13:52:14 UTC (rev 64224)
@@ -0,0 +1,46 @@
+diff --git dvisvgm-2.14/libs/Makefile.am dvisvgm-src/libs/Makefile.am
+index f98732f04ee..89969f44542 100644
+--- dvisvgm-2.14/libs/Makefile.am
++++ dvisvgm-src/libs/Makefile.am
+@@ -3,7 +3,7 @@
+ ##
+ ## Process this file with automake.
+
+-SUBDIRS = clipper md5 potrace variant xxHash
++SUBDIRS = clipper md5 variant xxHash
+
+ if ENABLE_WOFF
+ SUBDIRS += brotli ff-woff woff2
+diff --git dvisvgm-2.14/libs/defs.am dvisvgm-src/libs/defs.am
+index 6e220e43340..7889693bdc6 100644
+--- dvisvgm-2.14/libs/defs.am
++++ dvisvgm-src/libs/defs.am
+@@ -4,8 +4,7 @@ BROTLI_LIBS += ../libs/brotli/libbrotli.a
+ endif
+
+ if !HAVE_POTRACE
+-POTRACE_CFLAGS = -I$(dvisvgm_srcdir)/libs/potrace
+-POTRACE_LIBS = ../libs/potrace/libpotrace.a
++POTRACE_CFLAGS = $(POTRACE_INCLUDES)
+ endif
+
+ if !HAVE_WOFF2
+diff --git dvisvgm-2.14/src/Makefile.am dvisvgm-src/src/Makefile.am
+index d329e35f4a0..065b869d72e 100644
+--- dvisvgm-2.14/src/Makefile.am
++++ dvisvgm-src/src/Makefile.am
+@@ -41,7 +41,7 @@ dvisvgm_LDADD += \
+ $(LIBGS_LIBS)
+
+ dvisvgm_DEPENDENCIES = $(noinst_LIBRARIES)
+-dvisvgm_DEPENDENCIES += $(KPATHSEA_DEPEND) $(ZLIB_DEPEND) $(FREETYPE2_DEPEND)
++dvisvgm_DEPENDENCIES += $(KPATHSEA_DEPEND) $(ZLIB_DEPEND) $(FREETYPE2_DEPEND) $(POTRACE_DEPEND)
+
+ libdvisvgm_a_SOURCES = \
+ AGLTable.hpp \
+@@ -245,3 +245,5 @@ CLEANFILES = *.gcda *.gcno
+ @FREETYPE2_RULE@
+ # Rebuild libz:
+ @ZLIB_RULE@
++# Rebuild potrace:
++ at POTRACE_RULE@
Modified: trunk/Build/source/texk/dvisvgm/aclocal.m4
===================================================================
--- trunk/Build/source/texk/dvisvgm/aclocal.m4 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/aclocal.m4 2022-08-29 13:52:14 UTC (rev 64224)
@@ -20,6 +20,44 @@
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+# ===========================================================================
+# https://www.gnu.org/software/autoconf-archive/ax_require_defined.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_REQUIRE_DEFINED(MACRO)
+#
+# DESCRIPTION
+#
+# AX_REQUIRE_DEFINED is a simple helper for making sure other macros have
+# been defined and thus are available for use. This avoids random issues
+# where a macro isn't expanded. Instead the configure script emits a
+# non-fatal:
+#
+# ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found
+#
+# It's like AC_REQUIRE except it doesn't expand the required macro.
+#
+# Here's an example:
+#
+# AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG])
+#
+# LICENSE
+#
+# Copyright (c) 2014 Mike Frysinger <vapier at gentoo.org>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 2
+
+AC_DEFUN([AX_REQUIRE_DEFINED], [dnl
+ m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])])
+])dnl AX_REQUIRE_DEFINED
+
# Copyright (C) 2002-2021 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
Modified: trunk/Build/source/texk/dvisvgm/configure
===================================================================
--- trunk/Build/source/texk/dvisvgm/configure 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/configure 2022-08-29 13:52:14 UTC (rev 64224)
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for dvisvgm (TeX Live) 2.13.3.
+# Generated by GNU Autoconf 2.71 for dvisvgm (TeX Live) 2.14.
#
# Report bugs to <tex-k at tug.org>.
#
@@ -629,8 +629,8 @@
# Identity of this package.
PACKAGE_NAME='dvisvgm (TeX Live)'
PACKAGE_TARNAME='dvisvgm--tex-live-'
-PACKAGE_VERSION='2.13.3'
-PACKAGE_STRING='dvisvgm (TeX Live) 2.13.3'
+PACKAGE_VERSION='2.14'
+PACKAGE_STRING='dvisvgm (TeX Live) 2.14'
PACKAGE_BUGREPORT='tex-k at tug.org'
PACKAGE_URL=''
@@ -1444,7 +1444,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures dvisvgm (TeX Live) 2.13.3 to adapt to many kinds of systems.
+\`configure' configures dvisvgm (TeX Live) 2.14 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1516,7 +1516,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of dvisvgm (TeX Live) 2.13.3:";;
+ short | recursive ) echo "Configuration of dvisvgm (TeX Live) 2.14:";;
esac
cat <<\_ACEOF
@@ -1654,7 +1654,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-dvisvgm (TeX Live) configure 2.13.3
+dvisvgm (TeX Live) configure 2.14
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2416,7 +2416,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by dvisvgm (TeX Live) $as_me 2.13.3, which was
+It was created by dvisvgm (TeX Live) $as_me 2.14, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -3393,7 +3393,7 @@
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-DATE="February 2022"
+DATE="August 2022"
ac_config_headers="$ac_config_headers config.h"
@@ -9027,7 +9027,7 @@
# Define the identity of the package.
PACKAGE='dvisvgm--tex-live-'
- VERSION='2.13.3'
+ VERSION='2.14'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -21425,7 +21425,7 @@
Report bugs to <bug-libtool at gnu.org>."
lt_cl_version="\
-dvisvgm (TeX Live) config.lt 2.13.3
+dvisvgm (TeX Live) config.lt 2.14
configured by $0, generated by GNU Autoconf 2.71.
Copyright (C) 2011 Free Software Foundation, Inc.
@@ -24873,7 +24873,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by dvisvgm (TeX Live) $as_me 2.13.3, which was
+This file was extended by dvisvgm (TeX Live) $as_me 2.14, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -24941,7 +24941,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-dvisvgm (TeX Live) config.status 2.13.3
+dvisvgm (TeX Live) config.status 2.14
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
Modified: trunk/Build/source/texk/dvisvgm/configure.ac
===================================================================
--- trunk/Build/source/texk/dvisvgm/configure.ac 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/configure.ac 2022-08-29 13:52:14 UTC (rev 64224)
@@ -15,7 +15,7 @@
AC_PREREQ([2.65])
m4_include([version.ac])[] dnl define dvisvgm_version
AC_INIT([dvisvgm (TeX Live)], dvisvgm_version, [tex-k at tug.org])
-DATE="February 2022"
+DATE="August 2022"
AC_CONFIG_SRCDIR([dvisvgm-src/src/dvisvgm.cpp])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIRS([../../m4])dnl not just _DIR
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/ChangeLog
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/ChangeLog 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/ChangeLog 2022-08-29 13:52:14 UTC (rev 64224)
@@ -1,3 +1,167 @@
+2022-08-11 Martin Gieseking <martin.gieseking at uos.de>
+
+ * src/FontWriter.cpp, src/HashFunction.hpp, src/HyperlinkManager.hpp,
+ src/Opacity.hpp, src/SVGElement.hpp, src/TFM.cpp,
+ src/optimizer/Makefile.am, src/utility.hpp:
+ fixed indentations
+
+2022-08-09 Martin Gieseking <martin.gieseking at uos.de>
+
+ * .appveyor.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile,
+ src/version.hpp:
+ set version to 2.14
+
+ * configure.ac:
+ removed redundant macros from configure.ac
+
+2022-07-28 Martin Gieseking <martin.gieseking at uos.de>
+
+ * src/CLCommandLine.cpp, src/CMap.cpp, src/DVIReader.cpp,
+ src/DvisvgmSpecialHandler.cpp, src/FileFinder.cpp, src/FilePath.cpp,
+ src/Font.cpp, src/FontMap.cpp, src/HyperlinkManager.cpp, src/MapLine.cpp,
+ src/MetafontWrapper.cpp, src/PDFParser.cpp, src/PageSize.cpp,
+ src/PapersizeSpecialHandler.cpp, src/PsSpecialHandler.cpp,
+ src/SVGOutput.cpp, src/SVGTree.cpp, src/Unicode.cpp, src/XMLNode.cpp,
+ src/XMLParser.cpp, src/XMLString.cpp, src/dvisvgm.cpp, src/utility.cpp:
+ adapted types of variables used for string positions
+
+ * src/DvisvgmSpecialHandler.cpp:
+ reordered if/else statement
+
+ * src/MiKTeXCom.cpp:
+ replaced C-style cast
+
+2022-07-22 Martin Gieseking <martin.gieseking at uos.de>
+
+ * src/GraphicsPathParser.hpp:
+ updated year in copyright statement
+
+ * src/XMLParser.cpp:
+ handle GraphicsPathParserExceptions in XMLParser
+
+ * src/GraphicsPathParser.hpp:
+ improved position information of GraphicsPathParserException
+
+2022-07-18 Martin Gieseking <martin.gieseking at uos.de>
+
+ * libs/woff2/include/woff2/encode.h, libs/woff2/include/woff2/output.h,
+ libs/woff2/src/font.cc, libs/woff2/src/glyph.cc, libs/woff2/src/glyph.h,
+ libs/woff2/src/normalize.cc, libs/woff2/src/transform.cc,
+ libs/woff2/src/woff2_enc.cc, libs/woff2/src/woff2_out.cc:
+ applied latest upstream changes to woff2
+ library
+https://github.com/google/woff2/commit/62ae7a4c1ec7fb38adbf1294924db5924489889a
+
+ * libs/woff2/src/normalize.cc, libs/woff2/src/woff2_enc.cc:
+ woff2: removed unused variables to prevent compiler warnings
+
+ * libs/woff2/src/font.cc, libs/woff2/src/normalize.cc:
+ woff2: adapted variable types to prevent warnings
+
+ * src/dvisvgm.cpp:
+ added prefix to XML error messages
+
+2022-07-17 Martin Gieseking <martin.gieseking at uos.de>
+
+ * src/MiKTeXCom.cpp:
+ updated output of MiKTeX version number
+
+ * src/PDFParser.cpp:
+ prevent warning about [[nodiscard]] return value
+
+2022-07-11 Martin Gieseking <martin.gieseking at uos.de>
+
+ * src/GraphicsPathParser.hpp:
+ minor code tweaks in GraphicsPathParser
+
+ * src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp,
+ src/Makefile.am, src/XMLParser.cpp, src/XMLParser.hpp,
+ tests/DvisvgmSpecialTest.cpp:
+ moved XMLParser from DvisvgmSpecialHandler to separate class
+
+ * src/XMLParser.cpp:
+ parse and reformat definitions of raw graphics paths
+
+2022-06-30 Martin Gieseking <martin.gieseking at uos.de>
+
+ * src/XMLNode.cpp, src/XMLNode.hpp, src/optimizer/GroupCollapser.cpp:
+ optimizer: improved removal of redundant group elements
+
+ * src/XMLNode.cpp, src/XMLNode.hpp, src/optimizer/AttributeExtractor.cpp,
+ src/optimizer/AttributeExtractor.hpp, src/optimizer/GroupCollapser.cpp,
+ src/optimizer/TextSimplifier.cpp:
+ moved inheritability check of attributes to Attribute struct
+
+2022-06-29 Martin Gieseking <martin.gieseking at uos.de>
+
+ * src/FontWriter.cpp:
+ ensure proper representation of empty glyphs in SFD files
+
+2022-06-25 Martin Gieseking <martin.gieseking at uos.de>
+
+ * src/FileFinder.cpp, src/FontManager.cpp:
+ ignore letter case when looking up file suffixes
+
+ * src/FileFinder.cpp:
+ MiKTeX: handle lookup of TrueType files similar to kpathsea
+Look for
+ .ttf, .ttc, and .dfont suffixes
+
+ * src/FontManager.cpp:
+ XFontDef: lookup font formats rather than specific suffixes
+
+2022-06-24 Martin Gieseking <martin.gieseking at uos.de>
+
+ * src/FontManager.cpp:
+ XFontDef: added support for font filenames without suffix
+
+2022-05-18 Martin Gieseking <martin.gieseking at uos.de>
+
+ * README.md:
+ Removed paragraph about Ghostscript's new PDF interpreter
+
+because the
+ old interpreter is still available in recent GS releases and can be
+ reactivated by dvisvgm.
+
+2022-04-20 Martin Gieseking <martin.gieseking at uos.de>
+
+ * .appveyor.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile,
+ src/version.hpp:
+ set version to 2.13.4
+
+ * NEWS:
+ updated NEWS
+
+2022-04-18 Martin Gieseking <martin.gieseking at uos.de>
+
+ * src/PSInterpreter.cpp:
+ updated URL to GS documentation of -dNEWPDF
+
+2022-04-01 Martin Gieseking <martin.gieseking at uos.de>
+
+ * m4/ax_cxx_compile_stdcxx.m4:
+ updated ax_cxx_compile_stdcxx.m4 to version 14
+
+2022-03-31 Martin Gieseking <martin.gieseking at uos.de>
+
+ * .appveyor.yml:
+ updated FreeType to version 2.12
+
+2022-03-30 Martin Gieseking <martin.gieseking at uos.de>
+
+ * .appveyor.yml:
+ updated zlib to version 1.2.12
+
+ * src/PSInterpreter.cpp:
+ disable new PDF interpreter when using GS >= 9.56.0
+
+2022-03-14 Martin Gieseking <martin.gieseking at uos.de>
+
+ * src/ImageToSVG.cpp:
+ reset bounding box before converting next PDF page
+closes #182
+
2022-02-27 Martin Gieseking <martin.gieseking at uos.de>
* .appveyor.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile,
@@ -1341,6 +1505,12 @@
* doc/dvisvgm.txt.in:
manpage: added info on default values listed by --help
+2020-01-19 Martin Gieseking <martin.gieseking at uos.de>
+
+ * src/GraphicsPathParser.hpp, src/Makefile.am,
+ tests/GraphicsPathParserTest.cpp, tests/Makefile.am:
+ added class to parse SVG path commands
+
2020-01-17 Martin Gieseking <martin.gieseking at uos.de>
* src/GraphicsPath.hpp:
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/NEWS
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/NEWS 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/NEWS 2022-08-29 13:52:14 UTC (rev 64224)
@@ -1,3 +1,18 @@
+dvisvgm-2.14 (2022-08-12)
+- added processing of SVG path elements inserted by "raw" specials in order to
+ treat them similar to generated ones
+- added support for native font references lacking a file name suffix
+- improved lookup of native fonts
+- improved the removal of redundant SVG group elements
+- fixed conversion of empty glyphs to TTF/WOFF
+- updated bundled WOFF2 library
+
+dvisvgm-2.13.4 (2022-04-20)
+- fixed the size of bounding boxes applied when converting multiple pages
+ (GH issue #182)
+- try to enable old PDF interpreter when using Ghostscript >= 9.56.0
+ (dvisvgm does not work with Ghostscript's new PDF interpreter)
+
dvisvgm-2.13.3 (2022-02-27)
- added SVG optimizer module 'reassign-clippaths' that searches for duplicate
clipPath elements, removes them, and updates the clip-path references
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/config.h.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/config.h.in 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/config.h.in 2022-08-29 13:52:14 UTC (rev 64224)
@@ -46,9 +46,6 @@
/* Define to 1 if you have the `z' library (-lz). */
#undef HAVE_LIBZ
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
#undef HAVE_NDIR_H
@@ -68,6 +65,9 @@
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
@@ -146,7 +146,9 @@
/* Define to the version of this package. */
#undef PACKAGE_VERSION
-/* Define to 1 if you have the ANSI C header files. */
+/* Define to 1 if all of the C90 standard headers exist (not just the ones
+ required in a freestanding environment). This macro is provided for
+ backward compatibility; new code need not use it. */
#undef STDC_HEADERS
/* The machine triplet of the target system */
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/configure.ac
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/configure.ac 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/configure.ac 2022-08-29 13:52:14 UTC (rev 64224)
@@ -4,8 +4,8 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
-AC_INIT([dvisvgm],[2.13.3],[martin.gieseking at uos.de])
-DATE="February 2022"
+AC_INIT([dvisvgm],[2.14],[martin.gieseking at uos.de])
+DATE="August 2022"
AC_CONFIG_SRCDIR(src)
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.in 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.in 2022-08-29 13:52:14 UTC (rev 64224)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.2 from Makefile.am.
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2020 Free Software Foundation, Inc.
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -94,12 +94,7 @@
target_triplet = @target@
subdir = doc
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \
- $(top_srcdir)/m4/ax_code_coverage.m4 \
- $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
- $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
- $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
- $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -184,6 +179,8 @@
CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
@@ -199,8 +196,10 @@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
+ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
FREETYPE_LIBS = @FREETYPE_LIBS@
GCOV = @GCOV@
@@ -349,9 +348,9 @@
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/Makefile
+ $(AUTOMAKE) --gnu doc/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@@ -425,7 +424,6 @@
cscope cscopelist:
@BUILD_MANPAGE_TRUE at dist-hook:
-
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.1
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.1 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.1 2022-08-29 13:52:14 UTC (rev 64224)
@@ -4,10 +4,10 @@
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 2022-02-26
.\" Manual: dvisvgm Manual
-.\" Source: dvisvgm 2.13.3
+.\" Source: dvisvgm 2.14
.\" Language: English
.\"
-.TH "DVISVGM" "1" "2022\-02\-26" "dvisvgm 2\&.13\&.3" "dvisvgm Manual"
+.TH "DVISVGM" "1" "2022\-02\-26" "dvisvgm 2\&.14" "dvisvgm Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/Makefile.in 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/Makefile.in 2022-08-29 13:52:14 UTC (rev 64224)
@@ -267,7 +267,7 @@
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
am__DIST_COMMON = $(srcdir)/Makefile.in \
- $(top_srcdir)/../../build-aux/depcomp
+ $(top_srcdir)/../../build-aux/depcomp README.md
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/README.md
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/README.md (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/README.md 2022-08-29 13:52:14 UTC (rev 64224)
@@ -0,0 +1,11 @@
+# Reduced FontForge library for dvisvgm
+
+This is a radically reduced version of the [FontForge](http://fontforge.org) library required to natively
+build [dvisvgm](https://dvisvgm.de) on Windows. Most of the code not needed to create autohinted
+TrueType and WOFF fonts from [SFD](https://fontforge.github.io/sfdformat.html) files has been removed.
+
+The reduced library depends on [zlib](http://www.zlib.net).
+
+---
+Thanks to George Williams and the FontForge project contributors for developing this great font editor and for
+providing it as open source.
Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/encode.h
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/encode.h 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/encode.h 2022-08-29 13:52:14 UTC (rev 64224)
@@ -26,8 +26,8 @@
// Returns an upper bound on the size of the compressed file.
size_t MaxWOFF2CompressedSize(const uint8_t* data, size_t length);
-size_t MaxWOFF2CompressedSize(const uint8_t* data, size_t length,
- const std::string& extended_metadata);
+size_t MaxWOFF2CompressedSize(const uint8_t *data, size_t length,
+ const std::string &extended_metadata);
// Compresses the font into the target buffer. *result_length should be at least
// the value returned by MaxWOFF2CompressedSize(), upon return, it is set to the
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/output.h
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/output.h 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/include/woff2/output.h 2022-08-29 13:52:14 UTC (rev 64224)
@@ -51,7 +51,7 @@
// Create a writer that writes its data to buf.
// buf->size() will grow to at most max_size
// buf may be sized (e.g. using EstimateWOFF2FinalSize) or empty.
- explicit WOFF2StringOut(std::string* buf);
+ explicit WOFF2StringOut(std::string *buf);
bool Write(const void *buf, size_t n) override;
bool Write(const void *buf, size_t offset, size_t n) override;
@@ -59,7 +59,7 @@
size_t MaxSize() { return max_size_; }
void SetMaxSize(size_t max_size);
private:
- std::string* buf_;
+ std::string *buf_;
size_t max_size_;
size_t offset_;
};
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.cc
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.cc 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.cc 2022-08-29 13:52:14 UTC (rev 64224)
@@ -21,6 +21,7 @@
static const int32_t kFLAG_REPEAT = 1 << 3;
static const int32_t kFLAG_XREPEATSIGN = 1 << 4;
static const int32_t kFLAG_YREPEATSIGN = 1 << 5;
+static const int32_t kFLAG_OVERLAP_SIMPLE = 1 << 6;
static const int32_t kFLAG_ARG_1_AND_2_ARE_WORDS = 1 << 0;
static const int32_t kFLAG_WE_HAVE_A_SCALE = 1 << 3;
static const int32_t kFLAG_MORE_COMPONENTS = 1 << 5;
@@ -134,6 +135,10 @@
}
}
+ if (!flags.empty() && !flags[0].empty()) {
+ glyph->overlap_simple_flag_set = (flags[0][0] & kFLAG_OVERLAP_SIMPLE);
+ }
+
// Read the x coordinates.
int prev_x = 0;
for (int i = 0; i < num_contours; ++i) {
@@ -239,7 +244,7 @@
bool StorePoints(const Glyph& glyph, size_t* offset,
uint8_t* dst, size_t dst_size) {
- int last_flag = -1;
+ int previous_flag = -1;
int repeat_count = 0;
int last_x = 0;
int last_y = 0;
@@ -250,6 +255,10 @@
for (const auto& contour : glyph.contours) {
for (const auto& point : contour) {
int flag = point.on_curve ? kFLAG_ONCURVE : 0;
+ if (previous_flag == -1 && glyph.overlap_simple_flag_set) {
+ // First flag needs to have overlap simple bit set.
+ flag = flag | kFLAG_OVERLAP_SIMPLE;
+ }
int dx = point.x - last_x;
int dy = point.y - last_y;
if (dx == 0) {
@@ -268,7 +277,7 @@
} else {
y_bytes += 2;
}
- if (flag == last_flag && repeat_count != 255) {
+ if (flag == previous_flag && repeat_count != 255) {
dst[*offset - 1] |= kFLAG_REPEAT;
repeat_count++;
} else {
@@ -286,7 +295,7 @@
}
last_x = point.x;
last_y = point.y;
- last_flag = flag;
+ previous_flag = flag;
}
}
if (repeat_count != 0) {
@@ -350,7 +359,7 @@
}
} else if (glyph.contours.size() > 0) {
// Simple glyph.
- if (glyph.contours.size() > size_t(std::numeric_limits<int16_t>::max())) {
+ if (glyph.contours.size() > std::numeric_limits<int16_t>::max()) {
return FONT_COMPRESSION_FAILURE();
}
if (*dst_size < ((12ULL + 2 * glyph.contours.size()) +
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.h
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.h 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/glyph.h 2022-08-29 13:52:14 UTC (rev 64224)
@@ -10,8 +10,10 @@
#ifndef WOFF2_GLYPH_H_
#define WOFF2_GLYPH_H_
+#include <inttypes.h>
#include <stddef.h>
-#include <inttypes.h>
+
+#include <cstdint>
#include <vector>
namespace woff2 {
@@ -22,7 +24,10 @@
// is around.
class Glyph {
public:
- Glyph() : instructions_size(0), composite_data_size(0) {}
+ Glyph()
+ : instructions_size(0),
+ overlap_simple_flag_set(false),
+ composite_data_size(0) {}
// Bounding box.
int16_t x_min;
@@ -34,6 +39,9 @@
uint16_t instructions_size;
const uint8_t* instructions_data;
+ // Flags.
+ bool overlap_simple_flag_set;
+
// Data model for simple glyphs.
struct Point {
int x;
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/normalize.cc
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/normalize.cc 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/normalize.cc 2022-08-29 13:52:14 UTC (rev 64224)
@@ -93,7 +93,7 @@
if (table->IsReused()) {
return true;
}
- uint32_t sz = Round4(table->length);
+ unsigned sz = Round4(table->length);
table->buffer.resize(sz);
uint8_t* buf = &table->buffer[0];
memcpy(buf, table->data, table->length);
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/transform.cc
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/transform.cc 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/transform.cc 2022-08-29 13:52:14 UTC (rev 64224)
@@ -22,6 +22,7 @@
const int FLAG_ARG_1_AND_2_ARE_WORDS = 1 << 0;
const int FLAG_WE_HAVE_INSTRUCTIONS = 1 << 8;
+const int FLAG_OVERLAP_SIMPLE_BITMAP = 1 << 0;
void WriteBytes(std::vector<uint8_t>* out, const uint8_t* data, size_t len) {
if (len == 0) return;
@@ -69,7 +70,10 @@
}
void GetTransformedGlyfBytes(std::vector<uint8_t>* result) {
- WriteLong(result, 0); // version
+ WriteUShort(result, 0); // Version
+ WriteUShort(result, overlap_bitmap_.empty()
+ ? 0x00
+ : FLAG_OVERLAP_SIMPLE_BITMAP); // Flags
WriteUShort(result, n_glyphs_);
WriteUShort(result, 0); // index_format, will be set later
WriteLong(result, n_contour_stream_.size());
@@ -87,6 +91,9 @@
WriteBytes(result, bbox_bitmap_);
WriteBytes(result, bbox_stream_);
WriteBytes(result, instruction_stream_);
+ if (!overlap_bitmap_.empty()) {
+ WriteBytes(result, overlap_bitmap_);
+ }
}
private:
@@ -127,6 +134,10 @@
}
void WriteSimpleGlyph(int glyph_id, const Glyph& glyph) {
+ if (glyph.overlap_simple_flag_set) {
+ EnsureOverlapBitmap();
+ overlap_bitmap_[glyph_id >> 3] |= 0x80 >> (glyph_id & 7);
+ }
int num_contours = glyph.contours.size();
WriteUShort(&n_contour_stream_, num_contours);
if (ShouldWriteSimpleGlyphBbox(glyph)) {
@@ -214,6 +225,12 @@
}
}
+ void EnsureOverlapBitmap() {
+ if (overlap_bitmap_.empty()) {
+ overlap_bitmap_.resize((n_glyphs_ + 7) >> 3);
+ }
+ }
+
std::vector<uint8_t> n_contour_stream_;
std::vector<uint8_t> n_points_stream_;
std::vector<uint8_t> flag_byte_stream_;
@@ -222,6 +239,7 @@
std::vector<uint8_t> bbox_stream_;
std::vector<uint8_t> glyph_stream_;
std::vector<uint8_t> instruction_stream_;
+ std::vector<uint8_t> overlap_bitmap_;
int n_glyphs_;
};
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_enc.cc
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_enc.cc 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_enc.cc 2022-08-29 13:52:14 UTC (rev 64224)
@@ -28,13 +28,9 @@
namespace woff2 {
+
namespace {
-
-using std::string;
-using std::vector;
-
-
const size_t kWoff2HeaderSize = 48;
const size_t kWoff2EntrySize = 20;
@@ -183,7 +179,7 @@
}
size_t MaxWOFF2CompressedSize(const uint8_t* data, size_t length,
- const string& extended_metadata) {
+ const std::string& extended_metadata) {
// Except for the header size, which is 32 bytes larger in woff2 format,
// all other parts should be smaller (table header in short format,
// transformations and compression). Just to be sure, we will give some
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_out.cc
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_out.cc 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/src/woff2_out.cc 2022-08-29 13:52:14 UTC (rev 64224)
@@ -8,14 +8,10 @@
#include <woff2/output.h>
-using std::string;
-
namespace woff2 {
-WOFF2StringOut::WOFF2StringOut(string* buf)
- : buf_(buf),
- max_size_(kDefaultMaxSize),
- offset_(0) {}
+WOFF2StringOut::WOFF2StringOut(std::string *buf)
+ : buf_(buf), max_size_(kDefaultMaxSize), offset_(0) {}
bool WOFF2StringOut::Write(const void *buf, size_t n) {
return Write(buf, offset_, n);
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -154,7 +154,7 @@
/** Returns all options that match the given long name. */
vector<Option*> CommandLine::lookupOption (const string &optname) const {
vector<Option*> matches;
- int len = optname.length();
+ auto len = optname.length();
for (OptSectPair optsect : options()) {
if (optsect.first->longName() == optname) { // exact match?
matches.clear();
@@ -187,7 +187,7 @@
string usage = _usage;
int count=0;
while (!usage.empty()) {
- size_t pos = usage.find('\n');
+ auto pos = usage.find('\n');
os << (count++ == 0 ? "Usage: " : " ") << PROGRAM_NAME << ' ' << usage.substr(0, pos) << '\n';
if (pos != string::npos)
usage = usage.substr(pos+1);
@@ -201,7 +201,7 @@
unordered_map<Option*, pair<string,string>> linecols;
size_t col1width=0;
for (const OptSectPair &ospair : options()) {
- size_t pos;
+ string::size_type pos;
string line = ospair.first->helpline();
if ((pos = line.find('\t')) != string::npos) {
linecols.emplace(ospair.first, pair<string,string>(line.substr(0, pos), line.substr(pos+1)));
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -66,7 +66,7 @@
bool SegmentedCMap::mapsToUnicode () const {
vector<string> encstrings = {"UTF8", "UTF16", "UCS2", "UCS4", "UCS32"};
for (const string &encstr : encstrings) {
- size_t pos = _filename.find(encstr);
+ auto pos = _filename.find(encstr);
if (pos != string::npos && (pos == 0 || _filename[pos-1] == '-'))
return true;
}
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -460,7 +460,7 @@
Font *font = fm.getFont(fontnum);
if (!font && !name.empty()) { // font not registered yet?
if (name[0] == '[') { // LuaTeX native font reference?
- size_t last = name.rfind(']');
+ auto last = name.rfind(']');
if (last != string::npos) {
string path = name.substr(1, last-1);
FontStyle style;
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -153,19 +153,19 @@
static void expand_constants (string &str, SpecialActions &actions) {
bool repl_bbox = true;
while (repl_bbox) {
- size_t pos = str.find("{?bbox ");
+ const auto pos = str.find("{?bbox ");
if (pos == string::npos)
repl_bbox = false;
else {
- size_t endpos = pos+7;
+ auto endpos = pos+7;
while (endpos < str.length() && isalnum(str[endpos]))
++endpos;
- if (str[endpos] == '}') {
- BoundingBox &box=actions.bbox(str.substr(pos+7, endpos-pos-7));
+ if (str[endpos] != '}')
+ repl_bbox = false;
+ else {
+ BoundingBox &box = actions.bbox(str.substr(pos+7, endpos-pos-7));
str.replace(pos, endpos-pos+1, box.svgViewBoxString());
}
- else
- repl_bbox = false;
}
}
struct Constant {
@@ -181,7 +181,7 @@
}};
for (const Constant &constant : constants) {
const string pattern = string("{?")+constant.name+"}";
- size_t pos = str.find(pattern);
+ auto pos = str.find(pattern);
while (pos != string::npos) {
str.replace(pos, strlen(constant.name)+3, constant.val);
pos = str.find(pattern, pos+constant.val.length()); // look for further matches
@@ -194,9 +194,9 @@
* and replaces the substring by the computed value.
* @param[in,out] str string to scan for expressions */
static void evaluate_expressions (string &str, const SpecialActions &actions) {
- size_t left = str.find("{?("); // start position of expression macro
+ auto left = str.find("{?("); // start position of expression macro
while (left != string::npos) {
- size_t right = str.find(")}", left+2); // end position of expression macro
+ auto right = str.find(")}", left+2); // end position of expression macro
if (right == string::npos)
break;
Calculator calc;
@@ -232,7 +232,7 @@
if (!xml.empty()) {
evaluate_expressions(xml, actions);
expand_constants(xml, actions);
- _pageParser.parse(xml, actions);
+ _pageParser.parse(xml, actions.svgTree());
}
}
}
@@ -244,7 +244,7 @@
if (!xml.empty()) {
evaluate_expressions(xml, actions);
expand_constants(xml, actions);
- _defsParser.parse(xml, actions);
+ _defsParser.parse(xml, actions.svgTree());
}
}
}
@@ -276,9 +276,9 @@
if ((type == 'P' || type == 'D') && !def.empty()) {
expand_constants(def, actions);
if (type == 'P')
- _pageParser.parse(def, actions);
+ _pageParser.parse(def, actions.svgTree());
else { // type == 'D'
- _defsParser.parse(def, actions);
+ _defsParser.parse(def, actions.svgTree());
type = 'L'; // locked
}
}
@@ -414,8 +414,8 @@
void DvisvgmSpecialHandler::dviEndPage (unsigned, SpecialActions &actions) {
- _defsParser.finish(actions);
- _pageParser.finish(actions);
+ _defsParser.finish(actions.svgTree());
+ _pageParser.finish(actions.svgTree());
actions.bbox().unlock();
for (auto &strvecpair : _macros) {
StringVector &vec = strvecpair.second;
@@ -432,147 +432,3 @@
vector<const char*> pfx {"dvisvgm:"};
return pfx;
}
-
-////////////////////////////////////////////////////////////////////////////////
-
-/** Parses a fragment of XML code, creates corresponding XML nodes and adds them
- * to the SVG tree. The code may be split and processed by several calls of this
- * function. Incomplete chunks that can't be processed yet are stored and picked
- * up again together with the next incoming XML fragment. If a call of this function
- * is supposed to finish the parsing of an XML subtree, parameter 'finish' must be set.
- * @param[in] xml XML fragment to parse
- * @param[in] actions object providing the SVG tree functions
- * @param[in] finish if true, no more XML is expected and parsing is finished */
-void DvisvgmSpecialHandler::XMLParser::parse (const string &xml, SpecialActions &actions, bool finish) {
- // collect/extract an XML fragment that only contains complete tags
- // incomplete tags are held back
- _xmlbuf += xml;
- size_t left=0;
- try {
- while (left != string::npos) {
- size_t right = _xmlbuf.find('<', left);
- if (left < right && left < _xmlbuf.length()) // plain text found?
- (actions.svgTree().*_append)(util::make_unique<XMLText>(_xmlbuf.substr(left, right-left)));
- if (right != string::npos) {
- left = right;
- if (_xmlbuf.compare(left, 9, "<![CDATA[") == 0) {
- right = _xmlbuf.find("]]>", left+9);
- if (right == string::npos) {
- if (finish) throw SpecialException("expected ']]>' at end of CDATA block");
- break;
- }
- (actions.svgTree().*_append)(util::make_unique<XMLCData>(_xmlbuf.substr(left+9, right-left-9)));
- right += 2;
- }
- else if (_xmlbuf.compare(left, 4, "<!--") == 0) {
- right = _xmlbuf.find("-->", left+4);
- if (right == string::npos) {
- if (finish) throw SpecialException("expected '-->' at end of comment");
- break;
- }
- (actions.svgTree().*_append)(util::make_unique<XMLComment>(_xmlbuf.substr(left+4, right-left-4)));
- right += 2;
- }
- else if (_xmlbuf.compare(left, 2, "<?") == 0) {
- right = _xmlbuf.find("?>", left+2);
- if (right == string::npos) {
- if (finish) throw SpecialException("expected '?>' at end of processing instruction");
- break;
- }
- (actions.svgTree().*_append)(util::make_unique<XMLText>(_xmlbuf.substr(left, right-left+2)));
- right++;
- }
- else if (_xmlbuf.compare(left, 2, "</") == 0) {
- right = _xmlbuf.find('>', left+2);
- if (right == string::npos) {
- if (finish) throw SpecialException("missing '>' at end of closing XML tag");
- break;
- }
- closeElement(_xmlbuf.substr(left+2, right-left-2), actions);
- }
- else {
- right = _xmlbuf.find('>', left+1);
- if (right == string::npos) {
- if (finish) throw SpecialException("missing '>' or '/>' at end of opening XML tag");
- break;
- }
- openElement(_xmlbuf.substr(left+1, right-left-1), actions);
- }
- }
- left = right;
- if (right != string::npos)
- left++;
- }
- }
- catch (const SpecialException &e) {
- _error = true;
- throw;
- }
- if (left == string::npos)
- _xmlbuf.clear();
- else
- _xmlbuf.erase(0, left);
-}
-
-
-/** Processes an opening element tag.
- * @param[in] tag tag without leading and trailing angle brackets */
-void DvisvgmSpecialHandler::XMLParser::openElement (const string &tag, SpecialActions &actions) {
- StringInputBuffer ib(tag);
- BufferInputReader ir(ib);
- string name = ir.getString("/ \t\n\r");
- ir.skipSpace();
- auto elemNode = util::make_unique<SVGElement>(name);
- map<string, string> attribs;
- if (ir.parseAttributes(attribs, true, "\"'")) {
- for (const auto &attrpair : attribs)
- elemNode->addAttribute(attrpair.first, attrpair.second);
- }
- ir.skipSpace();
- if (ir.peek() == '/') // end of empty element tag
- (actions.svgTree().*_append)(std::move(elemNode));
- else if (ir.peek() < 0) { // end of opening tag
- _nameStack.push_back(name);
- (actions.svgTree().*_pushContext)(std::move(elemNode));
- }
- else
- throw SpecialException("'>' or '/>' expected at end of opening tag <"+name);
-}
-
-
-/** Processes a closing element tag.
- * @param[in] tag tag without leading and trailing angle brackets */
-void DvisvgmSpecialHandler::XMLParser::closeElement (const string &tag, SpecialActions &actions) {
- StringInputBuffer ib(tag);
- BufferInputReader ir(ib);
- string name = ir.getString(" \t\n\r");
- ir.skipSpace();
- if (ir.peek() >= 0)
- throw SpecialException("'>' expected at end of closing tag </"+name);
- if (_nameStack.empty())
- throw SpecialException("spurious closing tag </" + name + ">");
- if (_nameStack.back() != name)
- throw SpecialException("expected </" + _nameStack.back() + "> but found </" + name + ">");
- (actions.svgTree().*_popContext)();
- _nameStack.pop_back();
-}
-
-
-/** Processes any remaining XML fragments, checks for missing closing tags,
- * and resets the parser state. */
-void DvisvgmSpecialHandler::XMLParser::finish (SpecialActions &actions) {
- if (!_xmlbuf.empty()) {
- if (!_error)
- parse("", actions, true);
- _xmlbuf.clear();
- }
- string tags;
- while (!_nameStack.empty()) {
- tags += "</"+_nameStack.back()+">, ";
- _nameStack.pop_back();
- }
- if (!tags.empty() && !_error) {
- tags.resize(tags.length()-2);
- throw SpecialException("missing closing tag(s): "+tags);
- }
-}
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.hpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.hpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -26,6 +26,7 @@
#include <unordered_map>
#include <vector>
#include "SpecialHandler.hpp"
+#include "XMLParser.hpp"
class InputReader;
class SpecialActions;
@@ -43,32 +44,6 @@
#endif
class DvisvgmSpecialHandler : public SpecialHandler {
- class XMLParser {
- using AppendFunc = void (SVGTree::*)(std::unique_ptr<XMLNode>);
- using PushFunc = void (SVGTree::*)(std::unique_ptr<SVGElement>);
- using PopFunc = void (SVGTree::*)();
- using NameStack = std::vector<std::string>;
-
- public:
- XMLParser (AppendFunc append, PushFunc push, PopFunc pop)
- : _append(append), _pushContext(push), _popContext(pop) {}
-
- void parse (const std::string &xml, SpecialActions &actions, bool finish=false);
- void finish (SpecialActions &actions);
-
- protected:
- void openElement (const std::string &tag, SpecialActions &actions);
- void closeElement (const std::string &tag, SpecialActions &actions);
-
- private:
- AppendFunc _append;
- PushFunc _pushContext;
- PopFunc _popContext;
- std::string _xmlbuf;
- NameStack _nameStack; ///< names of nested elements still missing a closing tag
- bool _error=false;
- };
-
using StringVector = std::vector<std::string>;
using MacroMap = std::unordered_map<std::string, StringVector>;
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -21,7 +21,6 @@
#include <config.h>
#ifdef MIKTEX
#include "MiKTeXCom.hpp"
- #include "utility.hpp"
#else
#ifdef KPSE_CXX_UNSAFE
extern "C" {
@@ -43,6 +42,7 @@
#include "Message.hpp"
#include "MessageException.hpp"
#include "Process.hpp"
+#include "utility.hpp"
std::string FileFinder::_argv0;
std::string FileFinder::_progname;
@@ -120,12 +120,12 @@
if (ftype)
ext = ftype;
else {
- size_t pos = fname.rfind('.');
+ auto pos = fname.rfind('.');
if (pos == std::string::npos)
return nullptr; // no extension and no file type => no search
ext = fname.substr(pos+1);
}
-
+ ext = util::tolower(ext);
#ifdef _WIN32
if (ext == "dll" || ext == "exe")
return lookupExecutable(fname);
@@ -140,7 +140,18 @@
return _pathbuf.empty() ? nullptr : _pathbuf.c_str();
}
try {
- return _miktex->findFile(fname.c_str());
+ if (!ftype) // no file type given?
+ return _miktex->findFile(fname.c_str()); // lookup given filename
+ // handle file type "ttf" similar to kpathsea and look for .ttf, .ttc, and .dfont
+ std::vector<std::string> suffixes{ext};
+ if (ext == "ttf") {
+ suffixes.emplace_back("ttc");
+ suffixes.emplace_back("dfont");
+ }
+ for (const auto &suffix : suffixes) {
+ if (const char *path = _miktex->findFile((fname+"."+suffix).c_str()))
+ return path;
+ }
}
catch (const MessageException &e) {
return nullptr;
@@ -181,8 +192,8 @@
std::free(path);
return _pathbuf.c_str();
}
+#endif // !MIKTEX
return nullptr;
-#endif // !MIKTEX
}
@@ -191,7 +202,7 @@
* @param[in] fname name of file to look up
* @return file path on success, 0 otherwise */
const char* FileFinder::findMappedFile (std::string fname) const {
- size_t pos = fname.rfind('.');
+ auto pos = fname.rfind('.');
if (pos == std::string::npos)
return nullptr;
const std::string ext = fname.substr(pos+1); // file extension
@@ -214,7 +225,7 @@
* @param[in] fname name of file to build
* @return file path on success, 0 otherwise */
const char* FileFinder::mktex (const std::string &fname) const {
- size_t pos = fname.rfind('.');
+ auto pos = fname.rfind('.');
if (!_enableMktex || pos == std::string::npos)
return nullptr;
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -29,7 +29,7 @@
/** Removes redundant slashes from a given path. */
static string& single_slashes (string &str) {
- size_t pos=0;
+ string::size_type pos=0;
while ((pos = str.find("//", pos)) != string::npos)
str.replace(pos, 2, "/");
return str;
@@ -124,7 +124,7 @@
path = FileSystem::ensureForwardSlashes(path);
#endif
if (isfile) {
- size_t pos = path.rfind('/');
+ auto pos = path.rfind('/');
_fname = path.substr((pos == string::npos) ? 0 : pos+1);
// remove filename from path
if (pos == 0 && _fname.length() > 1) // file in root directory?
@@ -163,12 +163,12 @@
* location of a directory (and not of a file) an empty string
* is returned. */
string FilePath::suffix () const {
- size_t start = 0;
+ string::size_type start = 0;
// ignore leading dots
while (start < _fname.length() && _fname[start] == '.')
start++;
string sub = _fname.substr(start);
- size_t pos = sub.rfind('.');
+ auto pos = sub.rfind('.');
if (pos != string::npos && pos < sub.length()-1)
return sub.substr(pos+1);
return "";
@@ -194,7 +194,7 @@
* Example: FilePath("/a/b/c.def", true) == "c" */
string FilePath::basename () const {
if (!_fname.empty()) {
- size_t len = suffix().length();
+ auto len = suffix().length();
if (len > 0)
len++; // strip dot too
return _fname.substr(0, _fname.length()-len);
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -54,7 +54,7 @@
const FontMap::Entry* Font::fontMapEntry () const {
string fontname = name();
- size_t pos = fontname.rfind('.');
+ auto pos = fontname.rfind('.');
if (pos != string::npos)
fontname = fontname.substr(0, pos); // strip extension
return FontMap::instance().lookup(fontname);
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -145,7 +145,7 @@
static unique_ptr<Font> create_font (const string &filename, const string &fontname, int fontindex, uint32_t checksum, double dsize, double ssize) {
string ext;
if (const char *dot = strrchr(filename.c_str(), '.'))
- ext = dot+1;
+ ext = util::tolower(dot+1);
if (!ext.empty() && FileFinder::instance().lookup(filename)) {
if (ext == "pfb")
return PhysicalFont::create(fontname, checksum, dsize, ssize, PhysicalFont::Type::PFB);
@@ -271,8 +271,13 @@
newfont = font->clone(ptsize, style, color);
}
else {
- if (!FileSystem::exists(path))
- path = FileFinder::instance().lookup(filename, false);
+ if (!FileSystem::exists(path)) {
+ const char *fontFormats[] = {nullptr, "otf", "ttf"};
+ for (const char *format : fontFormats) {
+ if ((path = FileFinder::instance().lookup(filename, format, false)) != nullptr)
+ break;
+ }
+ }
if (path) {
newfont.reset(new NativeFontImpl(path, fontIndex, ptsize, style, color));
newfont->findAndAssignBaseFontMap();
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -125,13 +125,13 @@
* @return true if at least one of the given map files was found */
bool FontMap::read (const string &fname_seq) {
bool found = false;
- size_t left=0;
+ string::size_type left=0;
while (left < fname_seq.length()) {
const char modechar = fname_seq[left];
if (strchr("+-=", modechar))
left++;
string fname;
- size_t right = fname_seq.find(',', left);
+ auto right = fname_seq.find(',', left);
if (right != string::npos)
fname = fname_seq.substr(left, right-left);
else {
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -128,7 +128,7 @@
}
ostream &_os;
- Glyph::Point _startPoint, _currentPoint;
+ Glyph::Point _startPoint, _currentPoint;
};
@@ -174,8 +174,12 @@
"SplineSet\n";
Glyph glyph;
if (font.getGlyph(c, glyph, cb)) {
- SFDActions actions(sfd);
- glyph.iterate(actions, false);
+ if (glyph.empty())
+ sfd << "0 0 m 0\n";
+ else {
+ SFDActions actions(sfd);
+ glyph.iterate(actions, false);
+ }
}
sfd <<
"EndSplineSet\n"
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPathParser.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPathParser.hpp (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPathParser.hpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -0,0 +1,299 @@
+/*************************************************************************
+** GraphicsPathParser.hpp **
+** **
+** This file is part of dvisvgm -- a fast DVI to SVG converter **
+** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de> **
+** **
+** 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 3 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, see <http://www.gnu.org/licenses/>. **
+*************************************************************************/
+
+#pragma once
+
+#include <cctype>
+#include <cstring>
+#include <istream>
+#include <sstream>
+#include "GraphicsPath.hpp"
+#include "MessageException.hpp"
+
+
+struct GraphicsPathParserException : public MessageException {
+ explicit GraphicsPathParserException (const std::string &msg) : MessageException(msg) {}
+};
+
+
+template <typename T>
+class GraphicsPathParser {
+ public:
+ GraphicsPath<T> parse (std::istream &is);
+
+ GraphicsPath<T> parse (const std::string &str) {
+ std::istringstream iss(str);
+ return parse(iss);
+ }
+
+ protected:
+ template <typename NumType>
+ NumType parseNumberOfType (std::istream &is) const {
+ is >> std::ws;
+ NumType number;
+ is >> number;
+ if (is.fail())
+ error("number expected", is);
+ is >> std::ws;
+ return number;
+ }
+
+ T parseNumber (std::istream &is) const {
+ return parseNumberOfType<T>(is);
+ }
+
+ Pair<T> parsePair (std::istream &is) {
+ T x = parseNumber(is);
+ skipCommaAndWhitespace(is);
+ T y = parseNumber(is);
+ return Pair<T>(x, y);
+ }
+
+ void skipCommaAndWhitespace (std::istream &is) {
+ is >> std::ws;
+ if (is.peek() == ',') {
+ is.get();
+ is >> std::ws;
+ }
+ }
+
+ void parseMoveTo (std::istream &is, bool relative);
+ void parseClosePath ();
+ void parseLineTo (std::istream &is, bool relative);
+ void parseHorizontalLineTo (std::istream &is, bool relative);
+ void parseVerticalLineTo (std::istream &is, bool relative);
+ void parseCubicTo (std::istream &is, bool relative);
+ void parseShortCubicTo (std::istream &is, bool relative);
+ void parseQuadraticTo (std::istream &is, bool relative);
+ void parseShortQuadraticTo (std::istream &is, bool relative);
+ void parseArcTo (std::istream &is, bool relative);
+
+ void error (const std::string &msg, std::istream &is) const {
+ std::string postext;
+ if (_startpos >= 0) { // valid start position?
+ if (is)
+ postext = " at position "+ std::to_string(is.tellg()-_startpos);
+ else
+ postext = " (premature end of data)";
+ }
+ throw GraphicsPathParserException(msg + postext);
+ }
+
+ private:
+ std::istream::pos_type _startpos=0; ///< stream position where the parsing started
+ GraphicsPath<T> *_path=nullptr; ///< path being parsed
+ Pair<T> _startPoint; ///< start point of current subpath
+ Pair<T> _currentPoint; ///< current point reached by last path command
+ Pair<T> _prevCtrlPoint; ///< last control point of preceding curve command
+};
+
+
+/** Creates a GraphicsPath object from a SVG path data string read from a given input stream.
+ * @param[in] is stream to read from
+ * @return GraphicsPath object created from the SVG path description
+ * @throw GraphicsPathParserException if the path data contains syntax error */
+template <typename T>
+GraphicsPath<T> GraphicsPathParser<T>::parse (std::istream &is) {
+ GraphicsPath<T> path;
+ _path = &path;
+ _startpos = is.tellg();
+ _currentPoint = _startPoint = _prevCtrlPoint = Pair<T>(0, 0);
+ int cmd=0;
+ while (!is.eof()) {
+ is >> std::ws;
+ if (is.peek() < 0)
+ break;
+ if (isalpha(is.peek()))
+ cmd = is.get();
+ else {
+ // further set of parameters appended to preceding command (command letter omitted)
+ skipCommaAndWhitespace(is);
+ // subsequent coordinate pairs of a "moveto" command lead to implicit "lineto" commands
+ // https://www.w3.org/TR/SVG/paths.html#PathDataMovetoCommands
+ if (cmd == 'M')
+ cmd = 'L';
+ else if (cmd == 'm')
+ cmd = 'l';
+ }
+ int lower_cmd = std::tolower(cmd);
+ bool relative = (cmd == lower_cmd);
+ switch (lower_cmd) {
+ case 'm': parseMoveTo(is, relative); break;
+ case 'z': parseClosePath(); break;
+ case 'l': parseLineTo(is, relative); break;
+ case 'h': parseHorizontalLineTo(is, relative); break;
+ case 'v': parseVerticalLineTo(is, relative); break;
+ case 'c': parseCubicTo(is, relative); break;
+ case 's': parseShortCubicTo(is, relative); break;
+ case 'q': parseQuadraticTo(is, relative); break;
+ case 't': parseShortQuadraticTo(is, relative); break;
+ case 'a': parseArcTo(is, relative); break;
+ case 0 : error("missing command at beginning of SVG path", is);
+ default : error("invalid SVG path command '"+std::string(1, char(cmd))+"'", is);
+ }
+ if (strchr("csqt", lower_cmd) == nullptr) // not a Bézier curve command?
+ _prevCtrlPoint = _currentPoint; // => no control point, use current point
+ }
+ _path = nullptr;
+ return path;
+}
+
+
+/** Parses a single parameter pair of a "moveto" command. */
+template <typename T>
+void GraphicsPathParser<T>::parseMoveTo (std::istream &is, bool relative) {
+ Pair<T> p = parsePair(is);
+ if (!relative || _path->empty())
+ _currentPoint = p;
+ else
+ _currentPoint += p;
+ _path->moveto(_currentPoint);
+ _startPoint = _currentPoint;
+}
+
+
+/** Handles a "closepath" command. */
+template <typename T>
+void GraphicsPathParser<T>::parseClosePath () {
+ _path->closepath();
+ _currentPoint = _startPoint;
+}
+
+
+/** Parses a single parameter pair of a "lineto" command. */
+template <typename T>
+void GraphicsPathParser<T>::parseLineTo (std::istream &is, bool relative) {
+ Pair<T> p = parsePair(is);
+ if (relative)
+ _currentPoint += p;
+ else
+ _currentPoint = p;
+ _path->lineto(_currentPoint);
+}
+
+
+/** Parses a single parameter of a horizontal "lineto" command. */
+template <typename T>
+void GraphicsPathParser<T>::parseHorizontalLineTo (std::istream &is, bool relative) {
+ T x = parseNumber(is);
+ if (relative)
+ _currentPoint += Pair<T>(x, 0);
+ else
+ _currentPoint = Pair<T>(x, _currentPoint.y());
+ _path->lineto(_currentPoint);
+}
+
+
+/** Parses a single parameter of a vertical "lineto" command. */
+template <typename T>
+void GraphicsPathParser<T>::parseVerticalLineTo (std::istream &is, bool relative) {
+ T y = parseNumber(is);
+ if (relative)
+ _currentPoint += Pair<T>(0, y);
+ else
+ _currentPoint = Pair<T>(_currentPoint.x(), y);
+ _path->lineto(_currentPoint);
+}
+
+
+/** Parses a single parameter set a "cubicto" (cubic Bézier curve) command. */
+template <typename T>
+void GraphicsPathParser<T>::parseCubicTo (std::istream &is, bool relative) {
+ Pair<T> p1 = parsePair(is);
+ Pair<T> p2 = parsePair(is);
+ Pair<T> pe = parsePair(is);
+ if (!relative)
+ _currentPoint = pe;
+ else {
+ p1 += _currentPoint;
+ p2 += _currentPoint;
+ _currentPoint += pe;
+ }
+ _path->cubicto(p1, p2, _currentPoint);
+ _prevCtrlPoint = p2;
+}
+
+
+/** Parses a single parameter set a shorthand "cubicto" (cubic Bézier curve) command. */
+template <typename T>
+void GraphicsPathParser<T>::parseShortCubicTo (std::istream &is, bool relative) {
+ Pair<T> p1 = _prevCtrlPoint + (_currentPoint-_prevCtrlPoint)*T(2);
+ Pair<T> p2 = parsePair(is);
+ Pair<T> pe = parsePair(is);
+ if (!relative)
+ _currentPoint = pe;
+ else {
+ p2 += _currentPoint;
+ _currentPoint += pe;
+ }
+ _path->cubicto(p1, p2, _currentPoint);
+ _prevCtrlPoint = p2;
+}
+
+
+/** Parses a single parameter set a "quadto" (quadratic Bézier curve) command. */
+template <typename T>
+void GraphicsPathParser<T>::parseQuadraticTo (std::istream &is, bool relative) {
+ Pair<T> p1 = parsePair(is);
+ Pair<T> pe = parsePair(is);
+ if (!relative)
+ _currentPoint = pe;
+ else {
+ p1 += _currentPoint;
+ _currentPoint += pe;
+ }
+ _path->quadto(p1, _currentPoint);
+ _prevCtrlPoint = p1;
+}
+
+
+/** Parses a single parameter set a shorthand "quadto" (quadratic Bézier curve) command. */
+template <typename T>
+void GraphicsPathParser<T>::parseShortQuadraticTo (std::istream &is, bool relative) {
+ Pair<T> p1 = _prevCtrlPoint + (_currentPoint-_prevCtrlPoint)*T(2);
+ Pair<T> pe = parsePair(is);
+ if (relative)
+ _currentPoint += pe;
+ else
+ _currentPoint = pe;
+ _path->quadto(p1, _currentPoint);
+ _prevCtrlPoint = p1;
+}
+
+
+/** Parses a single parameter set an "arcto" command. */
+template <typename T>
+void GraphicsPathParser<T>::parseArcTo (std::istream &is, bool relative) {
+ Pair<T> r = parsePair(is);
+ double xrot = parseNumberOfType<double>(is);
+ int largeArgFlag = parseNumberOfType<int>(is);
+ if (largeArgFlag != 0 && largeArgFlag != 1)
+ error("large-arc-flag must be 0 or 1", is);
+ int sweepFlag = parseNumberOfType<int>(is);
+ if (sweepFlag != 0 && sweepFlag != 1)
+ error("sweep-flag must be 0 or 1", is);
+ T x = parseNumber(is);
+ T y = parseNumber(is);
+ Pair<T> p(x, y);
+ if (relative)
+ p += _currentPoint;
+ _currentPoint = p;
+ _path->arcto(r.x(), r.y(), xrot, bool(largeArgFlag), bool(sweepFlag), _currentPoint);
+}
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HashFunction.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HashFunction.hpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HashFunction.hpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -28,7 +28,7 @@
/** Common base class for all hash functions. */
class HashFunction {
- public:
+ public:
virtual ~HashFunction () =default;
virtual int digestSize () const =0;
virtual void reset () =0;
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -229,7 +229,7 @@
bool HyperlinkManager::setLinkMarker (const string &marker) {
string type; // "none", "box", "line", or a background color specifier
string color; // optional line color specifier
- size_t seppos = marker.find(':');
+ auto seppos = marker.find(':');
if (seppos == string::npos)
type = marker;
else {
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.hpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.hpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -42,7 +42,7 @@
enum class ColorSource {DEFAULT, LINKMARKER, STATIC};
using NamedAnchors = std::unordered_map<std::string, NamedAnchor>;
- public:
+ public:
HyperlinkManager (const HyperlinkManager&) =delete;
HyperlinkManager (HyperlinkManager&&) =delete;
void addHrefAnchor (const std::string &uri);
@@ -68,7 +68,7 @@
static Color LINK_LINECOLOR; ///< line color if linkmark type is LM_LINE or LM_BOX
static ColorSource COLORSOURCE; ///< if true, LINK_LINECOLOR is applied
- private:
+ private:
AnchorType _anchorType=AnchorType::NONE; ///< type of active anchor
int _depthThreshold=0; ///< break anchor box if the DVI stack depth underruns this threshold
double _linewidth=-1; ///< line width of link marker (-1 => compute individual value per link)
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ImageToSVG.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ImageToSVG.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ImageToSVG.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -100,6 +100,7 @@
" x " << XMLString(_bbox.height()*bp2mm) << "mm)\n";
Message::mstream(false, Message::MC_PAGE_WRITTEN) << "output written to " << svgfname << '\n';
}
+ _bbox.invalidate();
_svg.reset();
}
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.am 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.am 2022-08-29 13:52:14 UTC (rev 64224)
@@ -93,6 +93,7 @@
Glyph.hpp \
GlyphTracerMessages.hpp \
GraphicsPath.hpp \
+ GraphicsPathParser.hpp \
HashFunction.hpp HashFunction.cpp \
HtmlSpecialHandler.hpp HtmlSpecialHandler.cpp \
HyperlinkManager.hpp HyperlinkManager.cpp \
@@ -163,6 +164,7 @@
windows.hpp \
XMLDocument.hpp XMLDocument.cpp \
XMLNode.hpp XMLNode.cpp \
+ XMLParser.hpp XMLParser.cpp \
XMLString.hpp XMLString.cpp \
XXHashFunction.hpp \
ZLibOutputStream.hpp
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.in 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.in 2022-08-29 13:52:14 UTC (rev 64224)
@@ -170,8 +170,9 @@
FontStyle.hpp FontWriter.hpp FontWriter.cpp GFGlyphTracer.hpp \
GFGlyphTracer.cpp GFReader.hpp GFReader.cpp GFTracer.hpp \
GFTracer.cpp Ghostscript.hpp Ghostscript.cpp Glyph.hpp \
- GlyphTracerMessages.hpp GraphicsPath.hpp HashFunction.hpp \
- HashFunction.cpp HtmlSpecialHandler.hpp HtmlSpecialHandler.cpp \
+ GlyphTracerMessages.hpp GraphicsPath.hpp \
+ GraphicsPathParser.hpp HashFunction.hpp HashFunction.cpp \
+ HtmlSpecialHandler.hpp HtmlSpecialHandler.cpp \
HyperlinkManager.hpp HyperlinkManager.cpp ImageToSVG.hpp \
ImageToSVG.cpp InputBuffer.hpp InputBuffer.cpp InputReader.hpp \
InputReader.cpp JFM.hpp JFM.cpp Length.hpp Length.cpp \
@@ -209,8 +210,9 @@
Unicode.cpp utility.hpp utility.cpp VectorIterator.hpp \
VectorStream.hpp VFActions.hpp VFReader.hpp VFReader.cpp \
windows.hpp XMLDocument.hpp XMLDocument.cpp XMLNode.hpp \
- XMLNode.cpp XMLString.hpp XMLString.cpp XXHashFunction.hpp \
- ZLibOutputStream.hpp ffwrapper.c ffwrapper.h
+ XMLNode.cpp XMLParser.hpp XMLParser.cpp XMLString.hpp \
+ XMLString.cpp XXHashFunction.hpp ZLibOutputStream.hpp \
+ ffwrapper.c ffwrapper.h
@ENABLE_WOFF_TRUE at am__objects_1 = ffwrapper.$(OBJEXT)
am_libdvisvgm_a_OBJECTS = BasicDVIReader.$(OBJEXT) Bezier.$(OBJEXT) \
BgColorSpecialHandler.$(OBJEXT) Bitmap.$(OBJEXT) \
@@ -252,7 +254,8 @@
TpicSpecialHandler.$(OBJEXT) TriangularPatch.$(OBJEXT) \
TrueTypeFont.$(OBJEXT) TTFAutohint.$(OBJEXT) Unicode.$(OBJEXT) \
utility.$(OBJEXT) VFReader.$(OBJEXT) XMLDocument.$(OBJEXT) \
- XMLNode.$(OBJEXT) XMLString.$(OBJEXT) $(am__objects_1)
+ XMLNode.$(OBJEXT) XMLParser.$(OBJEXT) XMLString.$(OBJEXT) \
+ $(am__objects_1)
libdvisvgm_a_OBJECTS = $(am_libdvisvgm_a_OBJECTS)
am_dvisvgm_OBJECTS = dvisvgm.$(OBJEXT)
dvisvgm_OBJECTS = $(am_dvisvgm_OBJECTS)
@@ -330,9 +333,9 @@
./$(DEPDIR)/TriangularPatch.Po ./$(DEPDIR)/TrueTypeFont.Po \
./$(DEPDIR)/Unicode.Po ./$(DEPDIR)/VFReader.Po \
./$(DEPDIR)/XMLDocument.Po ./$(DEPDIR)/XMLNode.Po \
- ./$(DEPDIR)/XMLString.Po ./$(DEPDIR)/dvisvgm.Po \
- ./$(DEPDIR)/ffwrapper.Po ./$(DEPDIR)/psdefs.Po \
- ./$(DEPDIR)/utility.Po
+ ./$(DEPDIR)/XMLParser.Po ./$(DEPDIR)/XMLString.Po \
+ ./$(DEPDIR)/dvisvgm.Po ./$(DEPDIR)/ffwrapper.Po \
+ ./$(DEPDIR)/psdefs.Po ./$(DEPDIR)/utility.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -636,8 +639,9 @@
FontStyle.hpp FontWriter.hpp FontWriter.cpp GFGlyphTracer.hpp \
GFGlyphTracer.cpp GFReader.hpp GFReader.cpp GFTracer.hpp \
GFTracer.cpp Ghostscript.hpp Ghostscript.cpp Glyph.hpp \
- GlyphTracerMessages.hpp GraphicsPath.hpp HashFunction.hpp \
- HashFunction.cpp HtmlSpecialHandler.hpp HtmlSpecialHandler.cpp \
+ GlyphTracerMessages.hpp GraphicsPath.hpp \
+ GraphicsPathParser.hpp HashFunction.hpp HashFunction.cpp \
+ HtmlSpecialHandler.hpp HtmlSpecialHandler.cpp \
HyperlinkManager.hpp HyperlinkManager.cpp ImageToSVG.hpp \
ImageToSVG.cpp InputBuffer.hpp InputBuffer.cpp InputReader.hpp \
InputReader.cpp JFM.hpp JFM.cpp Length.hpp Length.cpp \
@@ -675,8 +679,9 @@
Unicode.cpp utility.hpp utility.cpp VectorIterator.hpp \
VectorStream.hpp VFActions.hpp VFReader.hpp VFReader.cpp \
windows.hpp XMLDocument.hpp XMLDocument.cpp XMLNode.hpp \
- XMLNode.cpp XMLString.hpp XMLString.cpp XXHashFunction.hpp \
- ZLibOutputStream.hpp $(am__append_8)
+ XMLNode.cpp XMLParser.hpp XMLParser.cpp XMLString.hpp \
+ XMLString.cpp XXHashFunction.hpp ZLibOutputStream.hpp \
+ $(am__append_8)
EXTRA_DIST = options.xml options.dtd iapi.h ierrors.h MiKTeXCom.hpp MiKTeXCom.cpp
AM_CFLAGS = $(WARNING_CFLAGS) $(ZLIB_INCLUDES) $(CODE_COVERAGE_CFLAGS) \
$(am__append_10)
@@ -885,6 +890,7 @@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/VFReader.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/XMLDocument.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/XMLNode.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/XMLParser.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/XMLString.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dvisvgm.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ffwrapper.Po at am__quote@ # am--include-marker
@@ -1245,6 +1251,7 @@
-rm -f ./$(DEPDIR)/VFReader.Po
-rm -f ./$(DEPDIR)/XMLDocument.Po
-rm -f ./$(DEPDIR)/XMLNode.Po
+ -rm -f ./$(DEPDIR)/XMLParser.Po
-rm -f ./$(DEPDIR)/XMLString.Po
-rm -f ./$(DEPDIR)/dvisvgm.Po
-rm -f ./$(DEPDIR)/ffwrapper.Po
@@ -1388,6 +1395,7 @@
-rm -f ./$(DEPDIR)/VFReader.Po
-rm -f ./$(DEPDIR)/XMLDocument.Po
-rm -f ./$(DEPDIR)/XMLNode.Po
+ -rm -f ./$(DEPDIR)/XMLParser.Po
-rm -f ./$(DEPDIR)/XMLString.Po
-rm -f ./$(DEPDIR)/dvisvgm.Po
-rm -f ./$(DEPDIR)/ffwrapper.Po
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -37,7 +37,7 @@
MapLine::MapLine (string str) : MapLine() {
- size_t pos = str.rfind('\n');
+ auto pos = str.rfind('\n');
if (pos != string::npos)
str = str.substr(0, pos);
parse(str.c_str());
@@ -75,9 +75,9 @@
* @param[out] sfdname name of subfont definition
* @return true on success */
static bool split_fontname (string &fontname, string &sfdname) {
- size_t pos1; // index of first '@'
+ string::size_type pos1; // index of first '@'
if ((pos1 = fontname.find('@')) != string::npos && pos1 > 0) {
- size_t pos2; // index of second '@'
+ string::size_type pos2; // index of second '@'
if ((pos2 = fontname.find('@', pos1+1)) != string::npos && pos2 > pos1+1) {
sfdname = fontname.substr(pos1+1, pos2-pos1-1);
fontname = fontname.substr(0, pos1) + fontname.substr(pos2+1);
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -118,7 +118,7 @@
string line = buf;
if (line.substr(0, 18) == "Output written on ") {
line = line.substr(18);
- size_t pos = line.find(' ');
+ auto pos = line.find(' ');
line = line.substr(0, pos);
pos = line.rfind('.');
if (pos != string::npos && line.substr(line.length()-2) == "gf") {
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -66,8 +66,7 @@
MiKTeXSetupInfo info;
_session->GetMiKTeXSetupInfo(&info);
#endif
- _bstr_t version = info.version;
- return string(version);
+ return to_string(info.series/100)+"."+ to_string(info.series%100);
}
@@ -105,6 +104,6 @@
return nullptr;
}
catch (_com_error &e) {
- throw MessageException((const char*)e.Description());
+ throw MessageException(static_cast<const char*>(e.Description()));
}
}
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Opacity.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Opacity.hpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Opacity.hpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -48,11 +48,11 @@
BM_HUE, BM_SATURATION, BM_COLOR, BM_LUMINOSITY
};
- public:
+ public:
Opacity () =default;
Opacity (OpacityAlpha fillalpha, OpacityAlpha strokealpha, BlendMode bm) : _fillalpha(fillalpha), _strokealpha(strokealpha), _blendMode(bm) {}
Opacity (OpacityAlpha fillalpha, OpacityAlpha strokealpha) : Opacity(fillalpha, strokealpha, BM_NORMAL) {}
- explicit Opacity (BlendMode bm) : _blendMode(bm) {}
+ explicit Opacity (BlendMode bm) : _blendMode(bm) {}
OpacityAlpha& fillalpha () {return _fillalpha;}
OpacityAlpha& strokealpha () {return _strokealpha;}
const OpacityAlpha& fillalpha () const {return _fillalpha;}
@@ -66,7 +66,7 @@
bool operator == (const Opacity &opacity) const;
bool operator != (const Opacity &opacity) const;
- private:
+ private:
OpacityAlpha _fillalpha;
OpacityAlpha _strokealpha;
BlendMode _blendMode=BM_NORMAL;
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -207,7 +207,7 @@
if (str.empty())
return false;
try {
- size_t dotpos = str.find('.');
+ auto dotpos = str.find('.');
if (dotpos == string::npos) { // not a real number?
size_t count;
nv = NumberVariant(stoi(str, &count, 10)); // then try to convert str to int
@@ -218,7 +218,7 @@
// which is not allowed in PDF real number constants
if (!postdot.empty() && isdigit(postdot[0])) {
size_t count;
- stoi(postdot, &count, 10);
+ static_cast<void>(stoi(postdot, &count, 10));
if (count != postdot.length())
return false;
}
@@ -310,7 +310,7 @@
/** Replaces all occurences of "#XX" (XX are two hex digits) with the corresponding character. */
static string& subst_numeric_chars (string &str) {
- for (size_t pos=str.find('#'); pos != string::npos; pos=str.find('#', pos+1)) {
+ for (auto pos=str.find('#'); pos != string::npos; pos=str.find('#', pos+1)) {
if (pos > str.length()-3)
throw PDFException("sign character # must be followed by two hexadecimal digits");
if (isxdigit(str[pos+1]) && isxdigit(str[pos+2])) {
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -63,6 +63,12 @@
gsargs.emplace_back("-dDELAYSAFER");
gsargs.emplace_back("-dALLOWPSTRANSPARENCY");
}
+ // GS 9.55.0 introduced a new, C-based PDF interpreter which is enabled by default
+ // as of GS 9.56.0. Since dvisvgm relies on the old PS-based interpreter for its
+ // PDF support, we try to disable the new one.
+ // https://www.ghostscript.com/doc/9.56.0/Use.htm#PDF_switches
+ if (gsrev >= 9560)
+ gsargs.emplace_back("-dNEWPDF=false");
}
_gs.init(gsargs.size(), gsargs.data(), this);
_gs.set_stdio(input, output, error);
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -96,7 +96,7 @@
name = util::tolower(name);
// extract optional suffix
- size_t pos = name.rfind('-');
+ auto pos = name.rfind('-');
bool landscape = false;
if (pos != string::npos) {
string suffix = name.substr(pos);
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -28,7 +28,7 @@
string params;
is >> params;
Length w, h;
- const size_t splitpos = params.find(',');
+ const auto splitpos = params.find(',');
try {
if (splitpos == string::npos) {
w.set(params);
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -190,7 +190,7 @@
static string filename_suffix (const string &fname) {
string ret;
- size_t pos = fname.rfind('.');
+ auto pos = fname.rfind('.');
if (pos != string::npos)
ret = util::tolower(fname.substr(pos+1));
return ret;
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGElement.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGElement.hpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGElement.hpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -33,7 +33,7 @@
enum LineCap {LC_BUTT, LC_ROUND, LC_SQUARE};
enum LineJoin {LJ_BEVEL, LJ_MITER, LJ_ROUND};
- public:
+ public:
explicit SVGElement (std::string name) : XMLElement(std::move(name)) {}
explicit SVGElement (const XMLElement &node) : XMLElement(node) {}
explicit SVGElement (XMLElement &&node) noexcept : XMLElement(std::move(node)) {}
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -108,7 +108,7 @@
string SVGOutput::expandFormatString (string str, int page, int numPages, const HashTriple &hashes) const {
string result;
while (!str.empty()) {
- size_t pos = str.find('%');
+ auto pos = str.find('%');
if (pos == string::npos) {
result += str;
str.clear();
@@ -150,7 +150,7 @@
result += oss.str();
break;
case '(': {
- size_t endpos = str.find(')', pos);
+ auto endpos = str.find(')', pos);
if (endpos == string::npos)
throw MessageException("missing ')' in filename pattern");
else if (endpos-pos-1 > 1) {
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -92,7 +92,7 @@
bool SVGTree::setFontFormat (string formatstr) {
- size_t pos = formatstr.find(',');
+ auto pos = formatstr.find(',');
string opt;
if (pos != string::npos) {
opt = formatstr.substr(pos+1);
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -43,8 +43,8 @@
TFM::TFM (istream &is) : _checksum(0), _firstChar(0), _lastChar(0), _designSize(0), _ascent(0), _descent(0) {
- if (!is)
- return;
+ if (!is)
+ return;
is.seekg(0);
StreamReader reader(is);
uint16_t lf = uint16_t(reader.readUnsigned(2)); // length of entire file in 4 byte words
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -189,7 +189,7 @@
"small", "swash", "superior", "inferior", "numerator", "denominator", "oldstyle",
"display", "text", "big", "bigg", "Big", "Bigg", 0
};
- size_t pos = name.rfind('.');
+ auto pos = name.rfind('.');
if (pos != string::npos) {
string suffix = name.substr(pos+1);
for (const char **p=suffixes; *p; p++)
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -103,6 +103,19 @@
}
+/** Returns true if element has no child nodes or, alternatively, only whitespace children.
+ * @param[in] ignoreWhitespace if true and if there are only whitespace children, the functions returns true */
+bool XMLElement::empty (bool ignoreWhitespace) const {
+ if (!_firstChild || !ignoreWhitespace)
+ return _firstChild == nullptr;
+ for (const XMLNode *node : *this) {
+ if (!node->toWSNode())
+ return false;
+ }
+ return true;
+}
+
+
void XMLElement::addAttribute (const string &name, const string &value) {
if (Attribute *attr = getAttribute(name))
attr->value = value;
@@ -363,7 +376,7 @@
os << attrib.name << "='" << attrib.value << '\'';
else {
os << attrib.name.substr(1) << "='";
- size_t pos = attrib.value.find("base64,");
+ auto pos = attrib.value.find("base64,");
if (pos == string::npos)
os << attrib.value;
else {
@@ -434,6 +447,29 @@
}
+/** Checks whether an SVG attribute A of an element E implicitly propagates its properties
+ * to all child elements of E that don't specify A. For now we only consider a subset of
+ * the inheritable properties.
+ * @return true if the attribute is inheritable */
+bool XMLElement::Attribute::inheritable () const {
+ // subset of inheritable properties listed on https://www.w3.org/TR/SVG11/propidx.html
+ // clip-path is not inheritable but can be moved to the parent element as long as
+ // no child gets an different clip-path attribute
+ // https://www.w3.org/TR/SVG11/styling.html#Inheritance
+ static const char *names[] = {
+ "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile",
+ "color-rendering", "direction", "fill", "fill-opacity", "fill-rule", "font", "font-family", "font-size",
+ "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "glyph-orientation-horizontal",
+ "glyph-orientation-vertical", "letter-spacing", "paint-order", "stroke", "stroke-dasharray", "stroke-dashoffset",
+ "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "transform",
+ "visibility", "word-spacing", "writing-mode"
+ };
+ return binary_search(std::begin(names), std::end(names), name, [](const string &name1, const string &name2) {
+ return name1 < name2;
+ });
+}
+
+
//////////////////////
void XMLText::append (unique_ptr<XMLNode> node) {
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.hpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.hpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -118,6 +118,7 @@
public:
struct Attribute {
Attribute (std::string nam, std::string val) : name(std::move(nam)), value(std::move(val)) {}
+ bool inheritable () const;
std::string name;
std::string value;
};
@@ -146,7 +147,7 @@
XMLNode* firstChild () const {return _firstChild.get();}
XMLNode* lastChild () const {return _lastChild;}
std::ostream& write (std::ostream &os) const override;
- bool empty () const {return !_firstChild;}
+ bool empty (bool ignoreWhitespace=false) const;
Attributes& attributes () {return _attributes;}
const Attributes& attributes () const {return _attributes;}
XMLNodeIterator begin () {return XMLNodeIterator(_firstChild.get());}
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.cpp (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -0,0 +1,182 @@
+/*************************************************************************
+** XMLParser.cpp **
+** **
+** This file is part of dvisvgm -- a fast DVI to SVG converter **
+** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de> **
+** **
+** 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 3 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, see <http://www.gnu.org/licenses/>. **
+*************************************************************************/
+
+#include "InputReader.hpp"
+#include "GraphicsPathParser.hpp"
+#include "XMLParser.hpp"
+
+using namespace std;
+
+/** Parses a fragment of XML code, creates corresponding XML nodes and adds them
+ * to an SVG tree. The code may be split and processed by several calls of this
+ * function. Incomplete chunks that can't be processed yet are stored and picked
+ * up again together with the next incoming XML fragment. If a call of this function
+ * is supposed to finish the parsing of an XML subtree, parameter 'finish' must be set.
+ * @param[in] xml XML fragment to parse
+ * @param[in] svgTree the parsed nodes are added to this SVG tree
+ * @param[in] finish if true, no more XML is expected and parsing is finished */
+void XMLParser::parse (const string &xml, SVGTree &svgTree, bool finish) {
+ // collect/extract an XML fragment that only contains complete tags
+ // incomplete tags are held back
+ _xmlbuf += xml;
+ string::size_type left=0;
+ try {
+ while (left != string::npos) {
+ auto right = _xmlbuf.find('<', left);
+ if (left < right && left < _xmlbuf.length()) // plain text found?
+ (svgTree.*_append)(util::make_unique<XMLText>(_xmlbuf.substr(left, right - left)));
+ if (right != string::npos) {
+ left = right;
+ if (_xmlbuf.compare(left, 9, "<![CDATA[") == 0) {
+ right = _xmlbuf.find("]]>", left+9);
+ if (right == string::npos) {
+ if (finish) throw XMLParserException("expected ']]>' at end of CDATA block");
+ break;
+ }
+ (svgTree.*_append)(util::make_unique<XMLCData>(_xmlbuf.substr(left + 9, right - left - 9)));
+ right += 2;
+ }
+ else if (_xmlbuf.compare(left, 4, "<!--") == 0) {
+ right = _xmlbuf.find("-->", left+4);
+ if (right == string::npos) {
+ if (finish) throw XMLParserException("expected '-->' at end of comment");
+ break;
+ }
+ (svgTree.*_append)(util::make_unique<XMLComment>(_xmlbuf.substr(left + 4, right - left - 4)));
+ right += 2;
+ }
+ else if (_xmlbuf.compare(left, 2, "<?") == 0) {
+ right = _xmlbuf.find("?>", left+2);
+ if (right == string::npos) {
+ if (finish) throw XMLParserException("expected '?>' at end of processing instruction");
+ break;
+ }
+ (svgTree.*_append)(util::make_unique<XMLText>(_xmlbuf.substr(left, right - left + 2)));
+ right++;
+ }
+ else if (_xmlbuf.compare(left, 2, "</") == 0) {
+ right = _xmlbuf.find('>', left+2);
+ if (right == string::npos) {
+ if (finish) throw XMLParserException("missing '>' at end of closing XML tag");
+ break;
+ }
+ closeElement(_xmlbuf.substr(left+2, right-left-2), svgTree);
+ }
+ else {
+ right = _xmlbuf.find('>', left+1);
+ if (right == string::npos) {
+ if (finish) throw XMLParserException("missing '>' or '/>' at end of opening XML tag");
+ break;
+ }
+ openElement(_xmlbuf.substr(left+1, right-left-1), svgTree);
+ }
+ }
+ left = right;
+ if (right != string::npos)
+ left++;
+ }
+ }
+ catch (const XMLParserException &e) {
+ _error = true;
+ throw;
+ }
+ if (left == string::npos)
+ _xmlbuf.clear();
+ else
+ _xmlbuf.erase(0, left);
+}
+
+
+/** Processes an opening element tag.
+ * @param[in] tag tag without leading and trailing angle brackets */
+void XMLParser::openElement (const string &tag, SVGTree &svgTree) {
+ StringInputBuffer ib(tag);
+ BufferInputReader ir(ib);
+ string name = ir.getString("/ \t\n\r");
+ bool isPathElement = (name == "path" || name == "svg:path");
+ ir.skipSpace();
+ auto elemNode = util::make_unique<SVGElement>(name);
+ map<string, string> attribs;
+ if (ir.parseAttributes(attribs, true, "\"'")) {
+ for (const auto &attrpair : attribs) {
+ if (!isPathElement || attrpair.first != "d")
+ elemNode->addAttribute(attrpair.first, attrpair.second);
+ else {
+ try {
+ // parse and reformat path definition
+ auto path = GraphicsPathParser<double>().parse(attrpair.second);
+ ostringstream oss;
+ path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);
+ elemNode->addAttribute("d", oss.str());
+ }
+ catch (const GraphicsPathParserException &e) {
+ throw XMLParserException(string("error in path data: ")+e.what());
+ }
+ }
+ }
+ }
+ ir.skipSpace();
+ if (ir.peek() == '/') // end of empty element tag
+ (svgTree.*_append)(std::move(elemNode));
+ else if (ir.peek() < 0) { // end of opening tag
+ _nameStack.push_back(name);
+ (svgTree.*_pushContext)(std::move(elemNode));
+ }
+ else
+ throw XMLParserException("'>' or '/>' expected at end of opening tag <"+name);
+}
+
+
+/** Processes a closing element tag.
+ * @param[in] tag tag without leading and trailing angle brackets */
+void XMLParser::closeElement (const string &tag, SVGTree &svgTree) {
+ StringInputBuffer ib(tag);
+ BufferInputReader ir(ib);
+ string name = ir.getString(" \t\n\r");
+ ir.skipSpace();
+ if (ir.peek() >= 0)
+ throw XMLParserException("'>' expected at end of closing tag </"+name);
+ if (_nameStack.empty())
+ throw XMLParserException("spurious closing tag </" + name + ">");
+ if (_nameStack.back() != name)
+ throw XMLParserException("expected </" + _nameStack.back() + "> but found </" + name + ">");
+ (svgTree.*_popContext)();
+ _nameStack.pop_back();
+}
+
+
+/** Processes any remaining XML fragments, checks for missing closing tags,
+ * and resets the parser state. */
+void XMLParser::finish (SVGTree &svgTree) {
+ if (!_xmlbuf.empty()) {
+ if (!_error)
+ parse("", svgTree, true);
+ _xmlbuf.clear();
+ }
+ string tags;
+ while (!_nameStack.empty()) {
+ tags += "</"+_nameStack.back()+">, ";
+ _nameStack.pop_back();
+ }
+ if (!tags.empty() && !_error) {
+ tags.resize(tags.length()-2);
+ throw XMLParserException("missing closing tag(s): "+tags);
+ }
+}
Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.hpp (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.hpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -0,0 +1,58 @@
+/*************************************************************************
+** XMLParser.hpp **
+** **
+** This file is part of dvisvgm -- a fast DVI to SVG converter **
+** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de> **
+** **
+** 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 3 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, see <http://www.gnu.org/licenses/>. **
+*************************************************************************/
+
+#ifndef XMLPARSER_HPP
+#define XMLPARSER_HPP
+
+#include <string>
+#include "MessageException.hpp"
+#include "SVGTree.hpp"
+
+struct XMLParserException : MessageException {
+ explicit XMLParserException (const std::string &msg) : MessageException(msg) {}
+};
+
+class XMLParser {
+ using AppendFunc = void (SVGTree::*)(std::unique_ptr<XMLNode>);
+ using PushFunc = void (SVGTree::*)(std::unique_ptr<SVGElement>);
+ using PopFunc = void (SVGTree::*)();
+ using NameStack = std::vector<std::string>;
+
+ public:
+ XMLParser (AppendFunc append, PushFunc push, PopFunc pop)
+ : _append(append), _pushContext(push), _popContext(pop) {}
+
+ void parse (const std::string &xml, SVGTree &svgTree, bool finish=false);
+ void finish (SVGTree &svgTree);
+
+ protected:
+ void openElement (const std::string &tag, SVGTree &svgTree);
+ void closeElement (const std::string &tag, SVGTree &svgTree);
+
+ private:
+ AppendFunc _append;
+ PushFunc _pushContext;
+ PopFunc _popContext;
+ std::string _xmlbuf;
+ NameStack _nameStack; ///< names of nested elements still missing a closing tag
+ bool _error=false;
+};
+
+#endif
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -91,7 +91,7 @@
if (std::abs(x) < 1e-6)
x = 0;
assign(util::to_string(x));
- size_t pos = find("0.");
+ auto pos = find("0.");
if (pos != string::npos && (pos == 0 || at(pos-1) == '-'))
erase(pos, 1);
}
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/dvisvgm.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/dvisvgm.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/dvisvgm.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -48,6 +48,7 @@
#include "optimizer/SVGOptimizer.hpp"
#include "SVGOutput.hpp"
#include "System.hpp"
+#include "XMLParser.hpp"
#include "XXHashFunction.hpp"
#include "utility.hpp"
#include "version.hpp"
@@ -65,7 +66,7 @@
static string remove_path (string fname) {
fname = FileSystem::ensureForwardSlashes(fname);
- size_t slashpos = fname.rfind('/');
+ auto slashpos = fname.rfind('/');
if (slashpos == string::npos)
return fname;
return fname.substr(slashpos+1);
@@ -74,7 +75,7 @@
static string ensure_suffix (string fname, const string &suffix) {
if (!fname.empty()) {
- size_t dotpos = remove_path(fname).rfind('.');
+ auto dotpos = remove_path(fname).rfind('.');
if (dotpos == string::npos)
fname += "." + suffix;
}
@@ -494,6 +495,10 @@
Message::estream() << "\nPostScript error: " << e.what() << '\n';
return -2;
}
+ catch (XMLParserException &e) {
+ Message::estream() << "\nXML error: " << e.what() << '\n';
+ return -5;
+ }
catch (SignalException &e) {
Message::wstream().clearline();
Message::wstream(true) << "execution interrupted by user\n";
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/AttributeExtractor.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/AttributeExtractor.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/AttributeExtractor.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -82,7 +82,7 @@
* @return the new group element if attributes could be grouped, 'elem' otherwise */
XMLNode* AttributeExtractor::extractAttribute (XMLElement *elem) {
for (const auto ¤tAttribute : elem->attributes()) {
- if (!inheritable(currentAttribute) || extracted(currentAttribute))
+ if (!currentAttribute.inheritable() || extracted(currentAttribute))
continue;
AttributeRun run(currentAttribute, elem);
if (run.length() >= MIN_RUN_LENGTH) {
@@ -126,30 +126,6 @@
}
-/** Checks whether an SVG attribute A of an element E implicitly propagates its properties
- * to all child elements of E that don't specify A. For now we only consider a subset of
- * the inheritable properties.
- * @param[in] attrib name of attribute to check
- * @return true if the attribute is inheritable */
-bool AttributeExtractor::inheritable (const Attribute &attrib) {
- // subset of inheritable properties listed on https://www.w3.org/TR/SVG11/propidx.html
- // clip-path is not inheritable but can be moved to the parent element as long as
- // no child gets an different clip-path attribute
- // https://www.w3.org/TR/SVG11/styling.html#Inheritance
- static const char *names[] = {
- "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile",
- "color-rendering", "direction", "fill", "fill-opacity", "fill-rule", "font", "font-family", "font-size",
- "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "glyph-orientation-horizontal",
- "glyph-orientation-vertical", "letter-spacing", "paint-order", "stroke", "stroke-dasharray", "stroke-dashoffset",
- "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "transform",
- "visibility", "word-spacing", "writing-mode"
- };
- return binary_search(begin(names), end(names), attrib.name, [](const string &name1, const string &name2) {
- return name1 < name2;
- });
-}
-
-
/** Checks whether an attribute is allowed to be removed from a given element. */
bool AttributeExtractor::extractable (const Attribute &attrib, XMLElement &element) {
if (element.hasAttribute("id"))
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/AttributeExtractor.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/AttributeExtractor.hpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/AttributeExtractor.hpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -46,7 +46,6 @@
void execute (XMLElement*, XMLElement *context) override {execute(context, true);};
const char* info () const override;
static bool groupable (const XMLElement &elem);
- static bool inheritable (const Attribute &attrib);
static bool extractable (const Attribute &attr, XMLElement &element);
protected:
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/GroupCollapser.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/GroupCollapser.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/GroupCollapser.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -22,7 +22,6 @@
#include <array>
#include <string>
#include <vector>
-#include "AttributeExtractor.hpp"
#include "GroupCollapser.hpp"
#include "TransformSimplifier.hpp"
#include "../XMLNode.hpp"
@@ -83,8 +82,8 @@
XMLNode *next=child->next();
if (XMLElement *childElement = child->toElement()) {
execute(childElement, depth+1);
- // check for groups without attributes and remove them
- if (childElement->name() == "g" && childElement->attributes().empty()) {
+ // remove empty groups and groups without attributes
+ if (childElement->name() == "g" && (childElement->attributes().empty() || (!childElement->hasAttribute("id") && childElement->empty(true)))) {
remove_ws_nodes(childElement);
if (XMLNode *firstUnwrappedNode = XMLElement::unwrap(childElement))
next = firstUnwrappedNode;
@@ -127,7 +126,7 @@
dest.addAttribute("transform", transform);
movedAttributes.emplace_back("transform");
}
- else if (AttributeExtractor::inheritable(attr)) {
+ else if (attr.inheritable()) {
dest.addAttribute(attr.name, attr.value);
movedAttributes.emplace_back(attr.name);
}
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/Makefile.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/Makefile.am 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/Makefile.am 2022-08-29 13:52:14 UTC (rev 64224)
@@ -10,7 +10,7 @@
SVGOptimizer.hpp SVGOptimizer.cpp \
TextSimplifier.hpp TextSimplifier.cpp \
TransformSimplifier.hpp TransformSimplifier.cpp \
- WSNodeRemover.hpp WSNodeRemover.cpp
+ WSNodeRemover.hpp WSNodeRemover.cpp
include ../../libs/defs.am
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/Makefile.in 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/Makefile.in 2022-08-29 13:52:14 UTC (rev 64224)
@@ -386,7 +386,7 @@
SVGOptimizer.hpp SVGOptimizer.cpp \
TextSimplifier.hpp TextSimplifier.cpp \
TransformSimplifier.hpp TransformSimplifier.cpp \
- WSNodeRemover.hpp WSNodeRemover.cpp
+ WSNodeRemover.hpp WSNodeRemover.cpp
@HAVE_POTRACE_FALSE at POTRACE_CFLAGS = $(POTRACE_INCLUDES)
@HAVE_XXHASH_FALSE at XXHASH_CFLAGS = -I$(dvisvgm_srcdir)/libs/xxHash
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/TextSimplifier.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/TextSimplifier.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/TextSimplifier.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -40,7 +40,7 @@
if (intersected)
break;
for (const auto &attrib : elem->attributes()) {
- if (AttributeExtractor::inheritable(attrib))
+ if (attrib.inheritable())
commonAttribs.push_back(attrib);
}
}
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -84,10 +84,10 @@
* @param[in] ws characters treated as whitespace
* @return the trimmed string */
string util::trim (const std::string &str, const char *ws) {
- size_t first = str.find_first_not_of(ws);
+ auto first = str.find_first_not_of(ws);
if (first == string::npos)
return "";
- size_t last = str.find_last_not_of(ws);
+ auto last = str.find_last_not_of(ws);
return str.substr(first, last-first+1);
}
@@ -99,9 +99,9 @@
* @return the normalized string */
string util::normalize_space (string str, const char *ws) {
str = trim(str);
- size_t first = str.find_first_of(ws);
+ auto first = str.find_first_of(ws);
while (first != string::npos) {
- size_t last = str.find_first_not_of(ws, first);
+ auto last = str.find_first_not_of(ws, first);
str.replace(first, last-first, " ");
first = str.find_first_of(ws, first+1);
}
@@ -116,7 +116,7 @@
* @return the resulting string */
string util::replace (string str, const string &find, const string &repl) {
if (!find.empty() && !repl.empty()) {
- size_t first = str.find(find);
+ auto first = str.find(find);
while (first != string::npos) {
str.replace(first, find.length(), repl);
first = str.find(find, first+repl.length());
@@ -136,9 +136,9 @@
if (str.empty() || sep.empty())
parts.push_back(str);
else {
- size_t left=0;
+ string::size_type left=0;
while (left <= str.length()) {
- size_t right = str.find(sep, left);
+ auto right = str.find(sep, left);
if (right == string::npos) {
parts.push_back(str.substr(left));
left = string::npos;
@@ -164,7 +164,7 @@
string util::to_string (double val) {
string str = std::to_string(val);
if (str.find('.') != string::npos) { // double value and not an integer?
- size_t pos = str.find_last_not_of('0');
+ auto pos = str.find_last_not_of('0');
if (pos != string::npos) // trailing zeros
str.erase(pos+1, string::npos);
if (str.back() == '.') // trailing dot?
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.hpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/utility.hpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -137,17 +137,17 @@
* @param[in] args arguments forwarded to an constructor of T */
template<typename T, typename... Args>
std::unique_ptr<T> make_unique (Args&&... args) {
- return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
+ return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
template<typename T, typename U>
std::unique_ptr<T> static_unique_ptr_cast (std::unique_ptr<U> &&old){
- return std::unique_ptr<T>{static_cast<T*>(old.release())};
+ return std::unique_ptr<T>{static_cast<T*>(old.release())};
}
template <typename T>
-struct set_const_of {
+struct set_const_of {
template <typename U>
struct by {
using type = typename std::conditional<
@@ -155,7 +155,7 @@
typename std::add_const<T>::type,
typename std::remove_const<T>::type
>::type;
- };
+ };
};
} // namespace util
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/DvisvgmSpecialTest.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/DvisvgmSpecialTest.cpp 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/DvisvgmSpecialTest.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -189,21 +189,21 @@
TEST_F(DvisvgmSpecialTest, rawPageFail) {
istringstream iss("raw <elem attr1='1' attr2='20'");
- EXPECT_THROW({handler.process("", iss, recorder); handler.finishPage();}, SpecialException); // incomplete opening tag
+ EXPECT_THROW({handler.process("", iss, recorder); handler.finishPage();}, XMLParserException); // incomplete opening tag
iss.clear(); iss.str("raw </elem>");
- EXPECT_THROW(handler.process("", iss, recorder), SpecialException); // spurious closing tag
+ EXPECT_THROW(handler.process("", iss, recorder), XMLParserException); // spurious closing tag
iss.clear(); iss.str("raw <open>text</close>");
- EXPECT_THROW(handler.process("", iss, recorder), SpecialException); // mismatching tags
+ EXPECT_THROW(handler.process("", iss, recorder), XMLParserException); // mismatching tags
}
TEST_F(DvisvgmSpecialTest, rawDefsFail) {
istringstream iss("rawdef <elem attr1='1' attr2='20'");
- EXPECT_THROW({handler.process("", iss, recorder); handler.finishPage();}, SpecialException); // incomplete opening tag
+ EXPECT_THROW({handler.process("", iss, recorder); handler.finishPage();}, XMLParserException); // incomplete opening tag
iss.clear(); iss.str("rawdef </elem>");
- EXPECT_THROW(handler.process("", iss, recorder), SpecialException); // spurious closing tag
+ EXPECT_THROW(handler.process("", iss, recorder), XMLParserException); // spurious closing tag
iss.clear(); iss.str("rawdef <open>text</close>");
- EXPECT_THROW(handler.process("", iss, recorder), SpecialException); // mismatching tags
+ EXPECT_THROW(handler.process("", iss, recorder), XMLParserException); // mismatching tags
}
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/GraphicsPathParserTest.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/GraphicsPathParserTest.cpp (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/GraphicsPathParserTest.cpp 2022-08-29 13:52:14 UTC (rev 64224)
@@ -0,0 +1,163 @@
+/*************************************************************************
+** GraphicsPathParserTest.cpp **
+** **
+** This file is part of dvisvgm -- a fast DVI to SVG converter **
+** Copyright (C) 2005-2020 Martin Gieseking <martin.gieseking at uos.de> **
+** **
+** 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 3 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, see <http://www.gnu.org/licenses/>. **
+*************************************************************************/
+
+#include <gtest/gtest.h>
+#include <sstream>
+#include "GraphicsPathParser.hpp"
+
+using namespace std;
+
+TEST(GraphicsPathParserTest, empty) {
+ GraphicsPathParser<int> parser;
+ auto path = parser.parse("");
+ EXPECT_TRUE(path.empty());
+ path = parser.parse(" \n\t \r ");
+ EXPECT_TRUE(path.empty());
+}
+
+
+TEST(GraphicsPathParserTest, moveto) {
+ GraphicsPathParser<int> parser;
+ auto path = parser.parse("M10 10 20 20 ,30 0 -10 10");
+ ostringstream oss;
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "M10 10L20 20L30 0L-10 10");
+ oss.str("");
+ path = parser.parse("m10 -10 20, 20 ,30 0 -10 10");
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "M10-10L30 10H60L50 20");
+}
+
+
+TEST(GraphicsPathParserTest, lineto) {
+ GraphicsPathParser<int> parser;
+ auto path = parser.parse("L10 10 20 20 ,30 0 -10 10");
+ ostringstream oss;
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "L10 10L20 20L30 0L-10 10");
+ oss.str("");
+ path = parser.parse("l10 -10 20, 20 ,30 0 -10 10");
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "L10-10L30 10H60L50 20");
+}
+
+
+TEST(GraphicsPathParserTest, hvlineto) {
+ GraphicsPathParser<int> parser;
+ auto path = parser.parse("H 10 20 V10 20");
+ ostringstream oss;
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "H10H20V10V20");
+ oss.str("");
+ path = parser.parse("h 10 20 v10 20");
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "H10H30V10V30");
+}
+
+
+TEST(GraphicsPathParserTest, cubicto) {
+ GraphicsPathParser<int> parser;
+ auto path = parser.parse("C 10 20 30 40 50 60 -100 -200 -300 -400 -500 -600");
+ ostringstream oss;
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "C10 20 30 40 50 60C-100-200-300-400-500-600");
+ oss.str("");
+ path = parser.parse("c 10 20 30 40 50 60 -100 -200 -300 -400 -500 -600");
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "C10 20 30 40 50 60C-50-140-250-340-450-540");
+}
+
+
+TEST(GraphicsPathParserTest, quadto) {
+ GraphicsPathParser<int> parser;
+ auto path = parser.parse("Q 10 20 30 40 -100 -200 -300 -400");
+ ostringstream oss;
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "Q10 20 30 40Q-100-200-300-400");
+ oss.str("");
+ path = parser.parse("q 10 20 30 40 -100 -200 -300 -400");
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "Q10 20 30 40Q-70-160-270-360");
+}
+
+
+TEST(GraphicsPathParserTest, scubicto) {
+ GraphicsPathParser<int> parser;
+ auto path = parser.parse("S 10 20 30 40 -100 -200 -300 -400");
+ ostringstream oss;
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "C0 0 10 20 30 40S-100-200-300-400");
+ oss.str("");
+ path = parser.parse("s 10 20 30 40 -100 -200 -300 -400");
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "C0 0 10 20 30 40S-70-160-270-360");
+}
+
+
+TEST(GraphicsPathParserTest, squadto) {
+ GraphicsPathParser<int> parser;
+ auto path = parser.parse("T 10 20 -100 -200");
+ ostringstream oss;
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "Q0 0 10 20T-100-200");
+ oss.str("");
+ path = parser.parse("t 10 20 -100 -200");
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "Q0 0 10 20T-90-180");
+}
+
+
+TEST(GraphicsPathParserTest, arcto) {
+ GraphicsPathParser<int> parser;
+ auto path = parser.parse("A 10 20 90 1 0 100 200, -10 -20 45 0 1 -100 -200");
+ ostringstream oss;
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "A10 20 90 1 0 100 200A10 20 45 0 1-100-200");
+ oss.str("");
+ path = parser.parse("a 10 20 90 1 0 100 200, -10 -20 45 0 1 -100 -200");
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "A10 20 90 1 0 100 200A10 20 45 0 1 0 0");
+}
+
+
+TEST(GraphicsPathParserTest, combined) {
+ GraphicsPathParser<int> parser;
+ auto path = parser.parse("M10 10L20 50Q 100 100 -10 -10 Z C 10 20 30 40 50 60Z");
+ ostringstream oss;
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "M10 10L20 50Q100 100-10-10ZC10 20 30 40 50 60Z");
+ oss.str("");
+ path = parser.parse("m10 10l20 50q 100 100 -10 -10 z c 10 20 30 40 50 60 z");
+ path.writeSVG(oss, false);
+ EXPECT_EQ(oss.str(), "M10 10L30 60Q130 160 20 50ZC20 30 40 50 60 70Z");
+}
+
+
+TEST(GraphicsPathParserTest, error) {
+ GraphicsPathParser<int> parser;
+ EXPECT_THROW(parser.parse("10 20"), GraphicsPathParserException); // missing command
+ EXPECT_THROW(parser.parse("M10 "), GraphicsPathParserException); // missing y-coordinate
+ EXPECT_THROW(parser.parse("M10 20.5"), GraphicsPathParserException); // invalid number type
+ EXPECT_THROW(parser.parse("J 10 20.5"), GraphicsPathParserException); // unknown command
+ EXPECT_THROW(parser.parse("M,10 20"), GraphicsPathParserException); // invalid comma
+ EXPECT_THROW(parser.parse("M10 20,"), GraphicsPathParserException); // missing parameters
+ EXPECT_THROW(parser.parse("A 10 20 45 2 0 100 100"), GraphicsPathParserException); // invalid large-arc-flag
+ EXPECT_THROW(parser.parse("A 10 20 45 0 5 100 100"), GraphicsPathParserException); // invalid sweep-flag
+}
Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/GraphicsPathParserTest.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.am 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.am 2022-08-29 13:52:14 UTC (rev 64224)
@@ -208,6 +208,12 @@
GhostscriptTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)
GhostscriptTest_LDADD = $(TESTLIBS)
+TESTS += GraphicsPathParserTest
+check_PROGRAMS += GraphicsPathParserTest
+GraphicsPathParserTest_SOURCES = GraphicsPathParserTest.cpp testutil.hpp
+GraphicsPathParserTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)
+GraphicsPathParserTest_LDADD = $(TESTLIBS)
+
TESTS += GraphicsPathTest
check_PROGRAMS += GraphicsPathTest
GraphicsPathTest_SOURCES = GraphicsPathTest.cpp testutil.hpp
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.in 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/Makefile.in 2022-08-29 13:52:14 UTC (rev 64224)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.2 from Makefile.am.
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2020 Free Software Foundation, Inc.
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -109,9 +109,9 @@
FontCacheTest$(EXEEXT) FontManagerTest$(EXEEXT) \
FontMapTest$(EXEEXT) GFGlyphTracerTest$(EXEEXT) \
GFReaderTest$(EXEEXT) GhostscriptTest$(EXEEXT) \
- GraphicsPathTest$(EXEEXT) HashFunctionTest$(EXEEXT) \
- JFMReaderTest$(EXEEXT) LengthTest$(EXEEXT) \
- MapLineTest$(EXEEXT) MatrixTest$(EXEEXT) \
+ GraphicsPathParserTest$(EXEEXT) GraphicsPathTest$(EXEEXT) \
+ HashFunctionTest$(EXEEXT) JFMReaderTest$(EXEEXT) \
+ LengthTest$(EXEEXT) MapLineTest$(EXEEXT) MatrixTest$(EXEEXT) \
MessageExceptionTest$(EXEEXT) PageRagesTest$(EXEEXT) \
PageSizeTest$(EXEEXT) PairTest$(EXEEXT) \
PapersizeSpecialTest$(EXEEXT) PDFParserTest$(EXEEXT) \
@@ -140,9 +140,9 @@
FontCacheTest$(EXEEXT) FontManagerTest$(EXEEXT) \
FontMapTest$(EXEEXT) GFGlyphTracerTest$(EXEEXT) \
GFReaderTest$(EXEEXT) GhostscriptTest$(EXEEXT) \
- GraphicsPathTest$(EXEEXT) HashFunctionTest$(EXEEXT) \
- JFMReaderTest$(EXEEXT) LengthTest$(EXEEXT) \
- MapLineTest$(EXEEXT) MatrixTest$(EXEEXT) \
+ GraphicsPathParserTest$(EXEEXT) GraphicsPathTest$(EXEEXT) \
+ HashFunctionTest$(EXEEXT) JFMReaderTest$(EXEEXT) \
+ LengthTest$(EXEEXT) MapLineTest$(EXEEXT) MatrixTest$(EXEEXT) \
MessageExceptionTest$(EXEEXT) PageRagesTest$(EXEEXT) \
PageSizeTest$(EXEEXT) PairTest$(EXEEXT) \
PapersizeSpecialTest$(EXEEXT) PDFParserTest$(EXEEXT) \
@@ -161,12 +161,7 @@
@ENABLE_WOFF_TRUE at am__append_10 = ../libs/ff-woff/libfontforge.a
subdir = tests
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \
- $(top_srcdir)/m4/ax_code_coverage.m4 \
- $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
- $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
- $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
- $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -281,6 +276,10 @@
GhostscriptTest-GhostscriptTest.$(OBJEXT)
GhostscriptTest_OBJECTS = $(am_GhostscriptTest_OBJECTS)
GhostscriptTest_DEPENDENCIES = $(am__DEPENDENCIES_7)
+am_GraphicsPathParserTest_OBJECTS = \
+ GraphicsPathParserTest-GraphicsPathParserTest.$(OBJEXT)
+GraphicsPathParserTest_OBJECTS = $(am_GraphicsPathParserTest_OBJECTS)
+GraphicsPathParserTest_DEPENDENCIES = $(am__DEPENDENCIES_7)
am_GraphicsPathTest_OBJECTS = \
GraphicsPathTest-GraphicsPathTest.$(OBJEXT)
GraphicsPathTest_OBJECTS = $(am_GraphicsPathTest_OBJECTS)
@@ -444,6 +443,7 @@
./$(DEPDIR)/GFGlyphTracerTest-GFGlyphTracerTest.Po \
./$(DEPDIR)/GFReaderTest-GFReaderTest.Po \
./$(DEPDIR)/GhostscriptTest-GhostscriptTest.Po \
+ ./$(DEPDIR)/GraphicsPathParserTest-GraphicsPathParserTest.Po \
./$(DEPDIR)/GraphicsPathTest-GraphicsPathTest.Po \
./$(DEPDIR)/HashFunctionTest-HashFunctionTest.Po \
./$(DEPDIR)/JFMReaderTest-JFMReaderTest.Po \
@@ -531,15 +531,15 @@
$(FontCacheTest_SOURCES) $(FontManagerTest_SOURCES) \
$(FontMapTest_SOURCES) $(GFGlyphTracerTest_SOURCES) \
$(GFReaderTest_SOURCES) $(GhostscriptTest_SOURCES) \
- $(GraphicsPathTest_SOURCES) $(HashFunctionTest_SOURCES) \
- $(JFMReaderTest_SOURCES) $(LengthTest_SOURCES) \
- $(MapLineTest_SOURCES) $(MatrixTest_SOURCES) \
- $(MessageExceptionTest_SOURCES) $(PDFParserTest_SOURCES) \
- $(PSInterpreterTest_SOURCES) $(PageRagesTest_SOURCES) \
- $(PageSizeTest_SOURCES) $(PairTest_SOURCES) \
- $(PapersizeSpecialTest_SOURCES) $(RangeMapTest_SOURCES) \
- $(SVGOutputTest_SOURCES) $(ShadingPatchTest_SOURCES) \
- $(SpecialManagerTest_SOURCES) \
+ $(GraphicsPathParserTest_SOURCES) $(GraphicsPathTest_SOURCES) \
+ $(HashFunctionTest_SOURCES) $(JFMReaderTest_SOURCES) \
+ $(LengthTest_SOURCES) $(MapLineTest_SOURCES) \
+ $(MatrixTest_SOURCES) $(MessageExceptionTest_SOURCES) \
+ $(PDFParserTest_SOURCES) $(PSInterpreterTest_SOURCES) \
+ $(PageRagesTest_SOURCES) $(PageSizeTest_SOURCES) \
+ $(PairTest_SOURCES) $(PapersizeSpecialTest_SOURCES) \
+ $(RangeMapTest_SOURCES) $(SVGOutputTest_SOURCES) \
+ $(ShadingPatchTest_SOURCES) $(SpecialManagerTest_SOURCES) \
$(SplittedCharInputBufferTest_SOURCES) \
$(StreamInputBufferTest_SOURCES) $(StreamReaderTest_SOURCES) \
$(StreamWriterTest_SOURCES) $(StringMatcherTest_SOURCES) \
@@ -563,15 +563,15 @@
$(FontCacheTest_SOURCES) $(FontManagerTest_SOURCES) \
$(FontMapTest_SOURCES) $(GFGlyphTracerTest_SOURCES) \
$(GFReaderTest_SOURCES) $(GhostscriptTest_SOURCES) \
- $(GraphicsPathTest_SOURCES) $(HashFunctionTest_SOURCES) \
- $(JFMReaderTest_SOURCES) $(LengthTest_SOURCES) \
- $(MapLineTest_SOURCES) $(MatrixTest_SOURCES) \
- $(MessageExceptionTest_SOURCES) $(PDFParserTest_SOURCES) \
- $(PSInterpreterTest_SOURCES) $(PageRagesTest_SOURCES) \
- $(PageSizeTest_SOURCES) $(PairTest_SOURCES) \
- $(PapersizeSpecialTest_SOURCES) $(RangeMapTest_SOURCES) \
- $(SVGOutputTest_SOURCES) $(ShadingPatchTest_SOURCES) \
- $(SpecialManagerTest_SOURCES) \
+ $(GraphicsPathParserTest_SOURCES) $(GraphicsPathTest_SOURCES) \
+ $(HashFunctionTest_SOURCES) $(JFMReaderTest_SOURCES) \
+ $(LengthTest_SOURCES) $(MapLineTest_SOURCES) \
+ $(MatrixTest_SOURCES) $(MessageExceptionTest_SOURCES) \
+ $(PDFParserTest_SOURCES) $(PSInterpreterTest_SOURCES) \
+ $(PageRagesTest_SOURCES) $(PageSizeTest_SOURCES) \
+ $(PairTest_SOURCES) $(PapersizeSpecialTest_SOURCES) \
+ $(RangeMapTest_SOURCES) $(SVGOutputTest_SOURCES) \
+ $(ShadingPatchTest_SOURCES) $(SpecialManagerTest_SOURCES) \
$(SplittedCharInputBufferTest_SOURCES) \
$(StreamInputBufferTest_SOURCES) $(StreamReaderTest_SOURCES) \
$(StreamWriterTest_SOURCES) $(StringMatcherTest_SOURCES) \
@@ -619,8 +619,6 @@
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
am__tty_colors_dummy = \
mgn= red= grn= lgn= blu= brg= std=; \
am__color_tests=no
@@ -803,6 +801,7 @@
bases='$(TEST_LOGS)'; \
bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
RECHECK_LOGS = $(TEST_LOGS)
TEST_SUITE_LOG = test-suite.log
TEST_EXTENSIONS = @EXEEXT@ .test
@@ -877,6 +876,8 @@
CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
@@ -892,8 +893,10 @@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
+ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
FREETYPE_LIBS = @FREETYPE_LIBS@
GCOV = @GCOV@
@@ -1116,6 +1119,9 @@
GhostscriptTest_SOURCES = GhostscriptTest.cpp testutil.hpp
GhostscriptTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)
GhostscriptTest_LDADD = $(TESTLIBS)
+GraphicsPathParserTest_SOURCES = GraphicsPathParserTest.cpp testutil.hpp
+GraphicsPathParserTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)
+GraphicsPathParserTest_LDADD = $(TESTLIBS)
GraphicsPathTest_SOURCES = GraphicsPathTest.cpp testutil.hpp
GraphicsPathTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)
GraphicsPathTest_LDADD = $(TESTLIBS)
@@ -1232,9 +1238,9 @@
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign tests/Makefile
+ $(AUTOMAKE) --gnu tests/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@@ -1385,6 +1391,10 @@
@rm -f GhostscriptTest$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(GhostscriptTest_OBJECTS) $(GhostscriptTest_LDADD) $(LIBS)
+GraphicsPathParserTest$(EXEEXT): $(GraphicsPathParserTest_OBJECTS) $(GraphicsPathParserTest_DEPENDENCIES) $(EXTRA_GraphicsPathParserTest_DEPENDENCIES)
+ @rm -f GraphicsPathParserTest$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(GraphicsPathParserTest_OBJECTS) $(GraphicsPathParserTest_LDADD) $(LIBS)
+
GraphicsPathTest$(EXEEXT): $(GraphicsPathTest_OBJECTS) $(GraphicsPathTest_DEPENDENCIES) $(EXTRA_GraphicsPathTest_DEPENDENCIES)
@rm -f GraphicsPathTest$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(GraphicsPathTest_OBJECTS) $(GraphicsPathTest_LDADD) $(LIBS)
@@ -1558,6 +1568,7 @@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GFGlyphTracerTest-GFGlyphTracerTest.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GFReaderTest-GFReaderTest.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GhostscriptTest-GhostscriptTest.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GraphicsPathParserTest-GraphicsPathParserTest.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GraphicsPathTest-GraphicsPathTest.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/HashFunctionTest-HashFunctionTest.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/JFMReaderTest-JFMReaderTest.Po at am__quote@ # am--include-marker
@@ -1990,6 +2001,20 @@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(GhostscriptTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GhostscriptTest-GhostscriptTest.obj `if test -f 'GhostscriptTest.cpp'; then $(CYGPATH_W) 'GhostscriptTest.cpp'; else $(CYGPATH_W) '$(srcdir)/GhostscriptTest.cpp'; fi`
+GraphicsPathParserTest-GraphicsPathParserTest.o: GraphicsPathParserTest.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(GraphicsPathParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GraphicsPathParserTest-GraphicsPathParserTest.o -MD -MP -MF $(DEPDIR)/GraphicsPathParserTest-GraphicsPathParserTest.Tpo -c -o GraphicsPathParserTest-GraphicsPathParserTest.o `test -f 'GraphicsPathParserTest.cpp' || echo '$(srcdir)/'`GraphicsPathParserTest.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/GraphicsPathParserTest-GraphicsPathParserTest.Tpo $(DEPDIR)/GraphicsPathParserTest-GraphicsPathParserTest.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GraphicsPathParserTest.cpp' object='GraphicsPathParserTest-GraphicsPathParserTest.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(GraphicsPathParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GraphicsPathParserTest-GraphicsPathParserTest.o `test -f 'GraphicsPathParserTest.cpp' || echo '$(srcdir)/'`GraphicsPathParserTest.cpp
+
+GraphicsPathParserTest-GraphicsPathParserTest.obj: GraphicsPathParserTest.cpp
+ at am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(GraphicsPathParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GraphicsPathParserTest-GraphicsPathParserTest.obj -MD -MP -MF $(DEPDIR)/GraphicsPathParserTest-GraphicsPathParserTest.Tpo -c -o GraphicsPathParserTest-GraphicsPathParserTest.obj `if test -f 'GraphicsPathParserTest.cpp'; then $(CYGPATH_W) 'GraphicsPathParserTest.cpp'; else $(CYGPATH_W) '$(srcdir)/GraphicsPathParserTest.cpp'; fi`
+ at am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/GraphicsPathParserTest-GraphicsPathParserTest.Tpo $(DEPDIR)/GraphicsPathParserTest-GraphicsPathParserTest.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='GraphicsPathParserTest.cpp' object='GraphicsPathParserTest-GraphicsPathParserTest.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@ $(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(GraphicsPathParserTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GraphicsPathParserTest-GraphicsPathParserTest.obj `if test -f 'GraphicsPathParserTest.cpp'; then $(CYGPATH_W) 'GraphicsPathParserTest.cpp'; else $(CYGPATH_W) '$(srcdir)/GraphicsPathParserTest.cpp'; fi`
+
GraphicsPathTest-GraphicsPathTest.o: GraphicsPathTest.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(GraphicsPathTest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GraphicsPathTest-GraphicsPathTest.o -MD -MP -MF $(DEPDIR)/GraphicsPathTest-GraphicsPathTest.Tpo -c -o GraphicsPathTest-GraphicsPathTest.o `test -f 'GraphicsPathTest.cpp' || echo '$(srcdir)/'`GraphicsPathTest.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/GraphicsPathTest-GraphicsPathTest.Tpo $(DEPDIR)/GraphicsPathTest-GraphicsPathTest.Po
@@ -2717,7 +2742,7 @@
test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
fi; \
echo "$${col}$$br$${std}"; \
- echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
echo "$${col}$$br$${std}"; \
create_testsuite_report --maybe-color; \
echo "$$col$$br$$std"; \
@@ -2933,6 +2958,13 @@
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+GraphicsPathParserTest.log: GraphicsPathParserTest$(EXEEXT)
+ @p='GraphicsPathParserTest$(EXEEXT)'; \
+ b='GraphicsPathParserTest'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
GraphicsPathTest.log: GraphicsPathTest$(EXEEXT)
@p='GraphicsPathTest$(EXEEXT)'; \
b='GraphicsPathTest'; \
@@ -3192,7 +3224,6 @@
@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
-
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
@@ -3325,6 +3356,7 @@
-rm -f ./$(DEPDIR)/GFGlyphTracerTest-GFGlyphTracerTest.Po
-rm -f ./$(DEPDIR)/GFReaderTest-GFReaderTest.Po
-rm -f ./$(DEPDIR)/GhostscriptTest-GhostscriptTest.Po
+ -rm -f ./$(DEPDIR)/GraphicsPathParserTest-GraphicsPathParserTest.Po
-rm -f ./$(DEPDIR)/GraphicsPathTest-GraphicsPathTest.Po
-rm -f ./$(DEPDIR)/HashFunctionTest-HashFunctionTest.Po
-rm -f ./$(DEPDIR)/JFMReaderTest-JFMReaderTest.Po
@@ -3432,6 +3464,7 @@
-rm -f ./$(DEPDIR)/GFGlyphTracerTest-GFGlyphTracerTest.Po
-rm -f ./$(DEPDIR)/GFReaderTest-GFReaderTest.Po
-rm -f ./$(DEPDIR)/GhostscriptTest-GhostscriptTest.Po
+ -rm -f ./$(DEPDIR)/GraphicsPathParserTest-GraphicsPathParserTest.Po
-rm -f ./$(DEPDIR)/GraphicsPathTest-GraphicsPathTest.Po
-rm -f ./$(DEPDIR)/HashFunctionTest-HashFunctionTest.Po
-rm -f ./$(DEPDIR)/JFMReaderTest-JFMReaderTest.Po
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/data/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/data/Makefile.in 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/data/Makefile.in 2022-08-29 13:52:14 UTC (rev 64224)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.2 from Makefile.am.
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2020 Free Software Foundation, Inc.
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -90,12 +90,7 @@
target_triplet = @target@
subdir = tests/data
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \
- $(top_srcdir)/m4/ax_code_coverage.m4 \
- $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
- $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
- $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
- $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -149,6 +144,8 @@
CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
@@ -164,8 +161,10 @@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
+ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
+FILECMD = @FILECMD@
FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
FREETYPE_LIBS = @FREETYPE_LIBS@
GCOV = @GCOV@
@@ -315,9 +314,9 @@
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/data/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/data/Makefile'; \
$(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign tests/data/Makefile
+ $(AUTOMAKE) --gnu tests/data/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@@ -347,7 +346,6 @@
cscope cscopelist:
-
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
Modified: trunk/Build/source/texk/dvisvgm/version.ac
===================================================================
--- trunk/Build/source/texk/dvisvgm/version.ac 2022-08-28 23:49:20 UTC (rev 64223)
+++ trunk/Build/source/texk/dvisvgm/version.ac 2022-08-29 13:52:14 UTC (rev 64224)
@@ -9,4 +9,4 @@
dnl --------------------------------------------------------
dnl
dnl m4-include this file to define the current dvisvgm version
-m4_define([dvisvgm_version], [2.13.3])
+m4_define([dvisvgm_version], [2.14])
More information about the tex-live-commits
mailing list.