texlive[65593] Build/source/texk/dvisvgm: dvisvgm-3.0.1 + patches

commits+karl at tug.org commits+karl at tug.org
Fri Jan 20 02:55:05 CET 2023


Revision: 65593
          http://tug.org/svn/texlive?view=revision&revision=65593
Author:   karl
Date:     2023-01-20 02:55:04 +0100 (Fri, 20 Jan 2023)
Log Message:
-----------
dvisvgm-3.0.1 + patches linked from https://github.com/TeX-Live/texlive-source/pull/59#issuecomment-1397666966

Modified Paths:
--------------
    trunk/Build/source/texk/dvisvgm/Makefile.in
    trunk/Build/source/texk/dvisvgm/TLpatches/TL-Changes
    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/config.h.in
    trunk/Build/source/texk/dvisvgm/configure
    trunk/Build/source/texk/dvisvgm/configure.ac
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.am
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/NEWS
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/README
    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.am
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-man.xsl
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-pdf.xsl
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.1
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.txt.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/tweak-db-refentry.xsl
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/tweak-dblatex-pdf.xsl
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.am
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.am
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/clipper/Makefile.am
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/clipper/Makefile.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/defs.am
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/md5/Makefile.am
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/md5/Makefile.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/Makefile.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.am
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/Makefile.am
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/Makefile.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/AGLTable.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLOption.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Character.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CommandLine.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIActions.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.hpp
    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/EPSFile.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSFile.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSToSVG.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EllipticalArc.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EllipticalArc.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FixWord.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontStyle.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Glyph.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GlyphTracerMessages.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPath.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPathParser.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HashFunction.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HashFunction.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.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/ImageToSVG.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MD5HashFunction.hpp
    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/MapLine.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MessageException.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/NumericRanges.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Opacity.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/PDFParser.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFToSVG.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSFilter.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Pair.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGElement.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/SVGOutput.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SourceInput.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SourceInput.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialActions.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialHandler.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/System.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/System.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VFActions.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorIterator.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorStream.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.hpp
    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/XMLParser.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XXHashFunction.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ZLibOutputStream.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/dvisvgm.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/macros.hpp
    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/ClipPathReassigner.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/ClipPathReassigner.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/DependencyGraph.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/GroupCollapser.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/GroupCollapser.hpp
    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/OptimizerModule.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/RedundantElementRemover.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/RedundantElementRemover.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/SVGOptimizer.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/SVGOptimizer.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/TextSimplifier.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/TextSimplifier.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/TransformSimplifier.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/TransformSimplifier.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/WSNodeRemover.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/optimizer/WSNodeRemover.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/options.dtd
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/options.xml
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/psdefs.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/src/version.hpp.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/windows.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/BezierTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/BitmapTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/BoundingBoxTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/CMapManagerTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/CMapReaderTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/CMapTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/CalculatorTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/ColorSpecialTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/ColorTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/CommandLineTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/DVIReaderTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/DependencyGraphTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/DirectoryTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/DvisvgmSpecialTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/EllipticalArcTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/EmSpecialTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/FileFinderTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/FilePathTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/FileSystemTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/FontCacheTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/FontManagerTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/FontMapTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/GFGlyphTracerTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/GFReaderTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/GhostscriptTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/GraphicsPathParserTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/GraphicsPathTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/HashFunctionTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/JFMReaderTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/LengthTest.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/MapLineTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/MatrixTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/MessageExceptionTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/PDFParserTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/PSInterpreterTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/PageRagesTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/PageSizeTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/PairTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/PapersizeSpecialTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/RangeMapTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/SVGOutputTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/ShadingPatchTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/SpecialManagerTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/SplittedCharInputBufferTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/StreamInputBufferTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/StreamReaderTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/StreamWriterTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/StringMatcherTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/SubfontTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/TFMReaderTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/TensorProductPatchTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/ToUnicodeMapTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/TpicSpecialTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/TriangularPatchTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/UnicodeTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/UtilityTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/VectorIteratorTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/VectorStreamTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/XMLNodeTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/XMLStringTest.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/check-conv
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/data/Makefile.am
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/data/Makefile.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/genhashcheck.py
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/normalize.xsl
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/tests/testmain.cpp
    trunk/Build/source/texk/dvisvgm/version.ac

Added Paths:
-----------
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/aminclude_static.am
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/LICENSE.txt
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/Makefile.am
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/Makefile.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/boost-vectorstream.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/vectorstream.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/Makefile.am
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/Makefile.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/auxiliary.h
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/bitmap.h
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/config.h
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/curve.c
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/curve.h
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/decompose.c
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/decompose.h
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/lists.h
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/potracelib.c
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/potracelib.h
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/progress.h
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/trace.c
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/trace.h
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFHandler.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFHandler.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFToSVG.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/Base14Fonts.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/Base14Fonts.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/Dingbats.cff.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/Makefile.am
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/Makefile.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/NimbusMonoPS-Bold.cff.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/NimbusMonoPS-BoldItalic.cff.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/NimbusMonoPS-Italic.cff.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/NimbusMonoPS-Regular.cff.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/NimbusRoman-Bold.cff.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/NimbusRoman-BoldItalic.cff.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/NimbusRoman-Italic.cff.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/NimbusRoman-Regular.cff.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/NimbusSans-Bold.cff.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/NimbusSans-BoldItalic.cff.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/NimbusSans-Italic.cff.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/NimbusSans-Regular.cff.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/StandardSymbolsPS.cff.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/CmapTable.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/CmapTable.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/GlyfTable.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/GlyfTable.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/HeadTable.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/HeadTable.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/HheaTable.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/HheaTable.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/HmtxTable.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/HmtxTable.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/LocaTable.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/Makefile.am
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/Makefile.in
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/MaxpTable.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/MaxpTable.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/NameTable.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/NameTable.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/OS2Table.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/OS2Table.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/PostTable.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/PostTable.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/TTFAutohint.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/TTFAutohint.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/TTFTable.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/TTFTable.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/TTFWriter.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/TTFWriter.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/VheaTable.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/VheaTable.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/VmtxTable.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ttf/VmtxTable.hpp

Removed Paths:
-------------
    trunk/Build/source/texk/dvisvgm/TLpatches/patch-12-potrace-tl
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/ChangeLog
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/ff-woff/
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TTFAutohint.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TTFAutohint.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TrueTypeFont.cpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TrueTypeFont.hpp
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.c
    trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.h

Modified: trunk/Build/source/texk/dvisvgm/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/Makefile.in	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/Makefile.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -98,7 +98,8 @@
 host_triplet = @host@
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/dvisvgm-src/m4/ax_gcc_builtin.m4 \
+	$(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
 	$(top_srcdir)/../../m4/kpse-common.m4 \
 	$(top_srcdir)/../../m4/kpse-cxx-hack.m4 \
 	$(top_srcdir)/../../m4/kpse-freetype2-flags.m4 \

Modified: trunk/Build/source/texk/dvisvgm/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/texk/dvisvgm/TLpatches/TL-Changes	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/TLpatches/TL-Changes	2023-01-20 01:55:04 UTC (rev 65593)
@@ -32,11 +32,16 @@
 
 Update our ./configure.ac from upstream dvisvgm-src/configure.ac.
 See patch-04-configure for reference, but they won't apply as-is.
-Probably easiest to check the previous original dvisvgm/configure.ac
-vs. the new, and then install the changes in our configure.ac by hand.
+Probably easiest to check dvisvgm-prev/configure.ac
+vs. new, and then install the changes in our configure.ac by hand.
 
 # patch to integrate into TL build; will likely need adjusting also.
 patch -d dvisvgm-src -p1 <TLpatches/patch-08-makefiles 
 
-# remake autostuff (then make, etc., as usual).
+# remake autostuff (then make, etc., with fingers crossed).
 autoreconf
+
+# before committing, update patches:
+diff -u2 dvisvgm-3.0.1/configure.ac ./ >TLpatches/patch-04-configure
+for m in `(cd ./dvisvgm-src && find -name Makefile.am)`; do \
+  diff -u2 dvisvgm-{3.0.1,src}/$m; done >TLpatches/patch-08-makefiles

Modified: trunk/Build/source/texk/dvisvgm/TLpatches/patch-04-configure
===================================================================
--- trunk/Build/source/texk/dvisvgm/TLpatches/patch-04-configure	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/TLpatches/patch-04-configure	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,18 +1,18 @@
---- 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 @@
+--- dvisvgm-3.0.1/configure.ac	2023-01-10 05:23:42.000000000 -0800
++++ ./configure.ac	2023-01-19 15:35:24.739713575 -0800
+@@ -1,15 +1,32 @@
 -# This file is part of dvisvgm
--# Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>
+-# Copyright (C) 2005-2023 Martin Gieseking <martin.gieseking at uos.de>
 -#
 -# Process this file with autoconf to produce a configure script.
 -
--AC_PREREQ(2.59)
--AC_INIT([dvisvgm],[2.14],[martin.gieseking at uos.de])
-+dnl $Id: configure.ac 64168 2022-08-22 21:33:05Z lscarso $
+-AC_PREREQ([2.69])
+-AC_INIT([dvisvgm],[3.0.1],[martin.gieseking at uos.de])
++dnl $Id: configure.ac 64941 2022-11-05 15:43:53Z karl $
 +dnl Process this file with autoconf to produce a configure script
 +dnl for dvisvgm in TeX Live.
 +dnl
-+dnl   Copyright 2015-2022 Karl Berry <tex-live at tug.org>
++dnl   Copyright 2015-2023 Karl Berry <tex-live at tug.org>
 +dnl   Copyright 2009-2014 Peter Breitenlohner <tex-live at tug.org>
 +dnl
 +dnl   This file is free software; the copyright holder
@@ -20,20 +20,20 @@
 +dnl   with or without modifications, as long as this notice is preserved.
 +dnl
 +dnl  Adapted for TeX Live from original dvisvgm configure.ac
-+dnl  Copyright 2005-2022 Martin Gieseking
++dnl  Copyright 2005-2023 Martin Gieseking
 +dnl
 +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="August 2022"
+ DATE="January 2023"
 -AC_CONFIG_SRCDIR(src)
 +AC_CONFIG_SRCDIR([dvisvgm-src/src/dvisvgm.cpp])
  AC_CONFIG_HEADERS([config.h])
 -AC_CONFIG_MACRO_DIR([m4])
 -AC_CANONICAL_HOST
--AC_CANONICAL_TARGET
--AM_INIT_AUTOMAKE([subdir-objects])
+-AM_INIT_AUTOMAKE([subdir-objects dist-xz])
 +AC_CONFIG_MACRO_DIRS([../../m4])dnl not just _DIR
++AC_CONFIG_MACRO_DIRS([dvisvgm-src/m4])dnl ax_gcc_builtin
 +AC_CONFIG_AUX_DIR([../../build-aux])
 +
 +AM_CONDITIONAL([TEXLIVE_BUILD], [test "x$enable_texlive_build" = xyes])
@@ -43,19 +43,15 @@
 +AM_PROG_AR
 +KPSE_COMMON([dvisvgm])
  
- AH_TEMPLATE([TARGET_SYSTEM], [The machine triplet of the target system])
- AC_DEFINE_UNQUOTED([TARGET_SYSTEM], ["$target"])
- 
--# Checks for programs.
- AC_PROG_CC
- AC_PROG_CC_C99
+ AH_TEMPLATE([HOST_SYSTEM], [The machine triplet of the host system])
+@@ -20,60 +37,35 @@
  AC_PROG_CXX
  AX_CXX_COMPILE_STDCXX([11])
 -AM_PROG_AR
++dnl AM_PROG_AR is above.
  LT_INIT
 +KPSE_CXX_HACK
  
- AC_PROG_RANLIB
  AC_LANG(C)
  
 -AX_CHECK_COMPILE_FLAG([-Wmismatched-tags -Wno-mismatched-tags], [CXXFLAGS="$CXXFLAGS -Wno-mismatched-tags"])
@@ -86,6 +82,7 @@
 -
 -AC_MSG_CHECKING([kpathsea version])
 -AC_RUN_IFELSE([AC_LANG_SOURCE([#include <stdio.h>
+-	#include <stdlib.h>
 -	#include <kpathsea/kpathsea.h>
 -	int main() {
 -		FILE *f;
@@ -128,7 +125,7 @@
 +fi
  AS_IF([test "x$have_libgs" = "xno"],
  	# Ghostscript not found, check for dlopen
- 	[AC_CHECK_LIB(dl, dlopen,,
+@@ -81,69 +73,89 @@
  		[AC_DEFINE(DISABLE_GS, 1, [Set to 1 if PostScript support should be disabled])]
  		[AC_MSG_WARN(PostScript support disabled)])])
 +fi
@@ -138,6 +135,17 @@
 -
 -# Check for libraries.
 -PKG_CHECK_MODULES([FREETYPE], [freetype2])
+-
+-AC_ARG_ENABLE([woff],
+-	[AS_HELP_STRING([--disable-woff], [Disable WOFF support @<:@default=no@:>@])],
+-	[],
+-	[enable_woff=yes])
+-AM_CONDITIONAL([ENABLE_WOFF], [test "x$enable_woff" = "xyes"])
+-
+-AC_ARG_WITH([ttfautohint],
+-	[AS_HELP_STRING([--with-ttfautohint@<:@=prefix@:>@], [enable ttfautohint support (disabled by default)])],
+-	[with_ttfautohint="$withval"],
+-	[with_ttfautohint=no])
 +if test -z "$HAVE_LIBGS" || test "$HAVE_LIBGS" -eq 0; then
 +  AC_MSG_NOTICE([not linking to libgs, trying to arrange for dynamic loading])
 +  # Windows (native or MinGW32) has neither <dlfcn.h> nor dlopen().
@@ -159,6 +167,7 @@
 +	# query Ghostscript version
 +	AC_MSG_CHECKING([Ghostscript version])
 +	AC_RUN_IFELSE([AC_LANG_SOURCE([#include <stdio.h>
++		#include <stdlib.h>
 +		#include <ghostscript/iapi.h>
 +		int main () {
 +			gsapi_revision_t r;
@@ -201,17 +210,6 @@
 +AC_CHECK_FUNC([kpse_set_program_name], [],
 +              [AC_MSG_ERROR([cannot find/use libkpathsea])])
  
--AC_ARG_ENABLE([woff],
--	[AS_HELP_STRING([--disable-woff], [Disable WOFF support @<:@default=no@:>@])],
--	[],
--	[enable_woff=yes])
--AM_CONDITIONAL([ENABLE_WOFF], [test "x$enable_woff" = "xyes"])
--
--AC_ARG_WITH([ttfautohint],
--	[AS_HELP_STRING([--with-ttfautohint@<:@=prefix@:>@], [enable ttfautohint support (disabled by default)])],
--	[with_ttfautohint="$withval"],
--	[with_ttfautohint=no])
--
 -# Add option to enable linking of bundled libraries (brotli, potrace, woff2, xxhash).
 -AC_ARG_ENABLE([bundled-libs],
 -	[AS_HELP_STRING([--enable-bundled-libs], [use bundled libraries instead of the system ones @<:@default=no@:>@])])
@@ -271,11 +269,13 @@
 +# emacs-page
  # Check for header files.
  AC_HEADER_DIRENT
- AC_HEADER_STDC
-@@ -158,80 +166,75 @@
- AC_FUNC_STAT
- AC_CHECK_FUNCS_ONCE([ftime gettimeofday sigaction umask uselocale])
+-
++AC_HEADER_STDC
+ AC_CHECK_HEADERS_ONCE([libintl.h stdlib.h string.h strings.h unistd.h])
  
+@@ -158,81 +170,82 @@
+ AX_GCC_BUILTIN(__builtin_clz)
+ 
 -# add options for selection of "optional" library locations
 -# currently these libraries are mandatory; the --with-foo options
 -# are used to specify the locations explicitely
@@ -307,6 +307,11 @@
 -                AC_DEFINE([KPSE_CXX_UNSAFE], 1,
 -                          [Define to 1 if the kpathsea headers are not C++ safe.])])
 -AC_LANG_POP([C++])
++AC_ARG_WITH([ttfautohint],
++	[AS_HELP_STRING([--with-ttfautohint@<:@=prefix@:>@], [enable ttfautohint support (disabled by default)])],
++	[with_ttfautohint="$withval"],
++	[with_ttfautohint=no])
++
 +AC_DEFINE([HAVE_LIBKPATHSEA], 1, [Define to 1 if you have the `kpathsea' library (-lkpathsea).])
 +AC_DEFINE([HAVE_LIBFREETYPE], 1, [Define to 1 if you have the `freetype2' library (-lfreetype).])
 +AC_DEFINE([HAVE_LIBZ], 1, [Define to 1 if you have the `z' library (-lz).])
@@ -314,9 +319,8 @@
 +  AC_DEFINE([KPSE_CXX_UNSAFE], 1, [Define to 1 if the kpathsea headers are not C++ safe.])
 +fi
 +
-+# TL: skip ttfautohint?
-+
-+# Add option to enable linking of bundled libraries (brotli, potrace, woff2, xxhash).
++# Add option to enable linking of bundled libraries (brotli, woff2, xxhash).
++# TL: potrace not bundled.
 +AC_ARG_ENABLE([bundled-libs],
 +	[AS_HELP_STRING([--enable-bundled-libs], [use bundled libraries instead of the system ones @<:@default=no@:>@])],
 +	[use_bundled_libs=yes])
@@ -328,11 +332,13 @@
 +AM_CONDITIONAL([USE_BUNDLED_MD5], true)
 +
 +# TL: these conditionals for system libraries are in the Makefile.am's.
-+AM_CONDITIONAL(HAVE_POTRACE, false)
 +AM_CONDITIONAL(HAVE_BROTLI, false)
 +AM_CONDITIONAL(HAVE_WOFF2, false)
 +AM_CONDITIONAL(HAVE_XXHASH, false)
 +
++# TL: now includes potrace in libs, so always true.
++AM_CONDITIONAL(HAVE_POTRACE, true)
++
 +# TL: not going to build_manpage (which is the default).
 +# TL: not going to attempt code coverage; need to subst it away.
 +AM_CONDITIONAL([CODE_COVERAGE_ENABLED], false)
@@ -370,6 +376,7 @@
 -AM_CONDITIONAL([BUILD_MANPAGE], [test "x$enable_manpage" = "xyes"])
 -
 -AX_CODE_COVERAGE
+-
 -AS_IF([ test "$enable_code_coverage" = "yes" ], [
 -	# disable optimization
 -	changequote({,})
@@ -387,18 +394,19 @@
 -AC_CONFIG_FILES([
 -	Makefile
 -	libs/Makefile
+-	libs/boost/Makefile
 -	libs/brotli/Makefile
 -	libs/clipper/Makefile
--	libs/ff-woff/Makefile
 -	libs/md5/Makefile
 -	libs/potrace/Makefile
 -	libs/variant/Makefile
 -	libs/woff2/Makefile
 -	libs/xxHash/Makefile
--	m4/Makefile
 -	src/Makefile
 -	src/version.hpp
+-	src/fonts/Makefile
 -	src/optimizer/Makefile
+-	src/ttf/Makefile
 -	tests/Makefile
 -	tests/data/Makefile
 -	doc/Makefile])
@@ -405,9 +413,9 @@
 +AC_CONFIG_FILES([Makefile
 +	dvisvgm-src/Makefile
 +	dvisvgm-src/libs/Makefile
++	dvisvgm-src/libs/boost/Makefile
 +	dvisvgm-src/libs/brotli/Makefile
 +	dvisvgm-src/libs/clipper/Makefile
-+	dvisvgm-src/libs/ff-woff/Makefile
 +	dvisvgm-src/libs/md5/Makefile
 +	dvisvgm-src/libs/variant/Makefile
 +	dvisvgm-src/libs/woff2/Makefile
@@ -414,6 +422,8 @@
 +	dvisvgm-src/libs/xxHash/Makefile
 +	dvisvgm-src/src/Makefile
 +	dvisvgm-src/src/version.hpp
++	dvisvgm-src/src/fonts/Makefile
 +	dvisvgm-src/src/optimizer/Makefile
++	dvisvgm-src/src/ttf/Makefile
 +])dnl TL: skipping tests/* and doc/*
  AC_OUTPUT

Modified: trunk/Build/source/texk/dvisvgm/TLpatches/patch-08-makefiles
===================================================================
--- trunk/Build/source/texk/dvisvgm/TLpatches/patch-08-makefiles	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/TLpatches/patch-08-makefiles	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,49 +1,36 @@
-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 @@
+--- dvisvgm-3.0.1/./Makefile.am	2023-01-10 05:22:18.000000000 -0800
++++ dvisvgm-src/./Makefile.am	2023-01-19 15:27:47.262096221 -0800
+@@ -4,9 +4,9 @@
+ ## Process this file with automake.
  
+-include $(top_srcdir)/aminclude_static.am
++include $(top_srcdir)/dvisvgm-src/aminclude_static.am
+ 
  AUTOMAKE_OPTIONS = foreign
  EXTRA_DIST = COPYING
--SUBDIRS = libs m4 src tests doc
+-SUBDIRS = libs src tests doc
 +SUBDIRS = libs src #not for TL: m4 tests doc
  ACLOCAL_AMFLAGS = -I m4
  
- 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)
- 
- @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 @@
+--- dvisvgm-3.0.1/./libs/Makefile.am	2023-01-10 05:22:18.000000000 -0800
++++ dvisvgm-src/./libs/Makefile.am	2023-01-19 15:14:57.121900128 -0800
+@@ -4,5 +4,9 @@
  ## Process this file with automake.
  
- bin_PROGRAMS     = dvisvgm
--noinst_LTLIBRARIES = libdvisvgm.la
-+noinst_LIBRARIES = libdvisvgm.a
- SUBDIRS = optimizer
+-SUBDIRS = boost clipper md5 potrace variant xxHash
++SUBDIRS = boost clipper md5 variant xxHash
++
++if !TEXLIVE_BUILD
++SUBDIRS += potrace
++endif
  
- dvisvgm_SOURCES = \
-@@ -14,13 +14,11 @@
- include ../libs/defs.am
- 
- dvisvgm_LDADD = \
--	$(noinst_LTLIBRARIES) \
-+	$(noinst_LIBRARIES) \
-+	optimizer/liboptimizer.a \
+ if ENABLE_WOFF
+--- dvisvgm-3.0.1/./src/Makefile.am	2023-01-10 05:22:18.000000000 -0800
++++ dvisvgm-src/./src/Makefile.am	2023-01-19 15:45:32.415222210 -0800
+@@ -17,8 +17,6 @@
+ 	$(noinst_LTLIBRARIES) \
  	../libs/clipper/libclipper.a \
 -	$(FREETYPE_LIBS) \
--	$(FONTFORGE_LIBS) \
  	$(POTRACE_LIBS) \
 -	$(XXHASH_LIBS) \
 -	$(ZLIB_LIBS)
@@ -50,37 +37,24 @@
 +	$(XXHASH_LIBS)
  
  if ENABLE_WOFF
- dvisvgm_LDADD += \
-@@ -35,9 +33,17 @@
- dvisvgm_LDADD += $(LIBCRYPTO_LIBS)
+@@ -36,5 +34,16 @@
  endif
  
--dvisvgm_DEPENDENCIES = $(noinst_LTLIBRARIES)
 +dvisvgm_LDADD += \
 +	$(KPATHSEA_LIBS) \
 +	$(FREETYPE2_LIBS) \
-+	$(FONTFORGE_LIBS) \
 +	$(ZLIB_LIBS) \
 +	$(LIBGS_LIBS)
- 
--libdvisvgm_la_SOURCES = \
-+dvisvgm_DEPENDENCIES = $(noinst_LIBRARIES)
++
+ dvisvgm_DEPENDENCIES = $(noinst_LTLIBRARIES)
 +dvisvgm_DEPENDENCIES += $(KPATHSEA_DEPEND) $(ZLIB_DEPEND) $(FREETYPE2_DEPEND)
 +
-+libdvisvgm_a_SOURCES = \
- 	AGLTable.hpp \
- 	BasicDVIReader.hpp           BasicDVIReader.cpp \
- 	Bezier.hpp                   Bezier.cpp \
-@@ -164,28 +170,32 @@
- 	ZLibOutputStream.hpp
++if TEXLIVE_BUILD
++dvisvgm_DEPENDENCIES += $(POTRACE_DEPEND)
++endif
  
- if ENABLE_WOFF
--libdvisvgm_la_SOURCES += ffwrapper.c ffwrapper.h
-+libdvisvgm_a_SOURCES += ffwrapper.c ffwrapper.h
- endif
- 
--libdvisvgm_la_LIBADD = optimizer/liboptimizer.la
--
+ libdvisvgm_la_SOURCES = \
+@@ -171,19 +180,25 @@
  EXTRA_DIST = options.xml options.dtd iapi.h ierrors.h MiKTeXCom.hpp MiKTeXCom.cpp
  
 -AM_CFLAGS = -Wall \
@@ -115,38 +89,22 @@
 +endif WIN32
  
  AM_LDFLAGS = \
- 	$(KPSE_LIBS) \
-@@ -196,8 +206,6 @@
- 	-I$(dvisvgm_srcdir)/libs/ff-woff/fontforge \
- 	-I$(dvisvgm_srcdir)/libs/ff-woff/inc
+@@ -207,5 +222,6 @@
+ endif
  
--AM_CXXFLAGS += $(TTFAUTOHINT_CFLAGS)
 -
- AM_CXXFLAGS +=  \
- 	$(BROTLI_CFLAGS) \
- 	$(WOFF2_CFLAGS)
-@@ -208,9 +216,10 @@
- AM_CXXFLAGS += $(LIBCRYPTO_CFLAGS)
- endif
- 
--AM_LDFLAGS += $(TTFAUTOHINT_LIBS)
- endif
- 
 +# TL: do not try to rebuild these source files.
-+if ! TEXLIVE_BUILD
++if !TEXLIVE_BUILD
  
  # the command-line parser class is generated from options.xml by opt2cpp
- $(srcdir)/CommandLine.hpp: options.xml
-@@ -224,7 +233,15 @@
- 	fi
+@@ -221,4 +237,16 @@
  
  psdefs.ps: ;
-+endif ! TEXLIVE_BUILD
++endif !TEXLIVE_BUILD
  
- @CODE_COVERAGE_RULES@
- 
  CLEANFILES = *.gcda *.gcno
 +
++if TEXLIVE_BUILD
 +# Rebuild libkpathsea:
 + at KPATHSEA_RULE@
 +# Rebuild libfreetype:
@@ -153,15 +111,6 @@
 + at FREETYPE2_RULE@
 +# Rebuild libz:
 + at ZLIB_RULE@
-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
- 
--liboptimizer_la_SOURCES = \
-+liboptimizer_a_SOURCES = \
- 	AttributeExtractor.hpp      AttributeExtractor.cpp \
- 	ClipPathReassigner.hpp      ClipPathReassigner.cpp \
- 	DependencyGraph.hpp \
++# Rebuild potrace:
++ at POTRACE_RULE@
++endif TEXLIVE_BUILD

Deleted: trunk/Build/source/texk/dvisvgm/TLpatches/patch-12-potrace-tl
===================================================================
--- trunk/Build/source/texk/dvisvgm/TLpatches/patch-12-potrace-tl	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/TLpatches/patch-12-potrace-tl	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,46 +0,0 @@
-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	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/aclocal.m4	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1244,6 +1244,7 @@
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
+m4_include([dvisvgm-src/m4/ax_gcc_builtin.m4])
 m4_include([../../m4/ax_cxx_compile_stdcxx.m4])
 m4_include([../../m4/kpse-common.m4])
 m4_include([../../m4/kpse-cxx-hack.m4])

Modified: trunk/Build/source/texk/dvisvgm/config.h.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/config.h.in	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/config.h.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -164,6 +164,12 @@
 /* Define to 1 if the system has the type `_Bool'. */
 #undef HAVE__BOOL
 
+/* Define to 1 if the system has the `__builtin_clz' built-in function */
+#undef HAVE___BUILTIN_CLZ
+
+/* The machine triplet of the host system */
+#undef HOST_SYSTEM
+
 /* Define to 1 if the kpathsea headers are not C++ safe. */
 #undef KPSE_CXX_UNSAFE
 
@@ -200,9 +206,6 @@
    backward compatibility; new code need not use it. */
 #undef STDC_HEADERS
 
-/* The machine triplet of the target system */
-#undef TARGET_SYSTEM
-
 /* Define to 1 if your <sys/time.h> declares `struct tm'. */
 #undef TM_IN_SYS_TIME
 

Modified: trunk/Build/source/texk/dvisvgm/configure
===================================================================
--- trunk/Build/source/texk/dvisvgm/configure	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/configure	2023-01-20 01:55:04 UTC (rev 65593)
@@ -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.14.
+# Generated by GNU Autoconf 2.71 for dvisvgm (TeX Live) 3.0.1.
 #
 # 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.14'
-PACKAGE_STRING='dvisvgm (TeX Live) 2.14'
+PACKAGE_VERSION='3.0.1'
+PACKAGE_STRING='dvisvgm (TeX Live) 3.0.1'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL=''
 
@@ -683,6 +683,8 @@
 CODE_COVERAGE_RULES
 CODE_COVERAGE_ENABLED_FALSE
 CODE_COVERAGE_ENABLED_TRUE
+HAVE_POTRACE_FALSE
+HAVE_POTRACE_TRUE
 HAVE_XXHASH_FALSE
 HAVE_XXHASH_TRUE
 HAVE_WOFF2_FALSE
@@ -689,8 +691,6 @@
 HAVE_WOFF2_TRUE
 HAVE_BROTLI_FALSE
 HAVE_BROTLI_TRUE
-HAVE_POTRACE_FALSE
-HAVE_POTRACE_TRUE
 USE_BUNDLED_MD5_FALSE
 USE_BUNDLED_MD5_TRUE
 USE_BUNDLED_LIBS_FALSE
@@ -880,6 +880,7 @@
 with_potrace_includes
 with_potrace_libdir
 enable_woff
+with_ttfautohint
 enable_bundled_libs
 '
       ac_precious_vars='build_alias
@@ -1444,7 +1445,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.14 to adapt to many kinds of systems.
+\`configure' configures dvisvgm (TeX Live) 3.0.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1516,7 +1517,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of dvisvgm (TeX Live) 2.14:";;
+     short | recursive ) echo "Configuration of dvisvgm (TeX Live) 3.0.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1571,6 +1572,8 @@
                           potrace headers installed in DIR
   --with-potrace-libdir=DIR
                           potrace library installed in DIR
+  --with-ttfautohint[=prefix]
+                          enable ttfautohint support (disabled by default)
 
 Some influential environment variables:
   CC          C compiler command
@@ -1654,7 +1657,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-dvisvgm (TeX Live) configure 2.14
+dvisvgm (TeX Live) configure 3.0.1
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2416,7 +2419,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.14, which was
+It was created by dvisvgm (TeX Live) $as_me 3.0.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3393,7 +3396,7 @@
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-DATE="August 2022"
+DATE="January 2023"
 
 ac_config_headers="$ac_config_headers config.h"
 
@@ -9027,7 +9030,7 @@
 
 # Define the identity of the package.
  PACKAGE='dvisvgm--tex-live-'
- VERSION='2.14'
+ VERSION='3.0.1'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -14860,9 +14863,10 @@
 
 
 
-printf "%s\n" "#define TARGET_SYSTEM \"$target\"" >>confdefs.h
+printf "%s\n" "#define HOST_SYSTEM \"$host\"" >>confdefs.h
 
 
+# Checks for programs.
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -15661,7 +15665,6 @@
 
 
 
-
 ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -20634,108 +20637,6 @@
 
 
 
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_RANLIB+y}
-then :
-  printf %s "(cached) " >&6
-else $as_nop
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  case $as_dir in #(((
-    '') as_dir=./ ;;
-    */) ;;
-    *) as_dir=$as_dir/ ;;
-  esac
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-printf "%s\n" "$RANLIB" >&6; }
-else
-  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_ac_ct_RANLIB+y}
-then :
-  printf %s "(cached) " >&6
-else $as_nop
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  case $as_dir in #(((
-    '') as_dir=./ ;;
-    */) ;;
-    *) as_dir=$as_dir/ ;;
-  esac
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
-    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-printf "%s\n" "$ac_ct_RANLIB" >&6; }
-else
-  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-fi
-
-  if test "x$ac_ct_RANLIB" = x; then
-    RANLIB=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    RANLIB=$ac_ct_RANLIB
-  fi
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-fi
-
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -21425,7 +21326,7 @@
 Report bugs to <bug-libtool at gnu.org>."
 
 lt_cl_version="\
-dvisvgm (TeX Live) config.lt 2.14
+dvisvgm (TeX Live) config.lt 3.0.1
 configured by $0, generated by GNU Autoconf 2.71.
 
 Copyright (C) 2011 Free Software Foundation, Inc.
@@ -24116,6 +24017,51 @@
 
 
 
+
+
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __builtin_clz" >&5
+printf %s "checking for __builtin_clz... " >&6; }
+if test ${ax_cv_have___builtin_clz+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main (void)
+{
+
+            __builtin_clz(0)
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+  ax_cv_have___builtin_clz=yes
+else $as_nop
+  ax_cv_have___builtin_clz=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_have___builtin_clz" >&5
+printf "%s\n" "$ax_cv_have___builtin_clz" >&6; }
+
+    if test yes = $ax_cv_have___builtin_clz
+then :
+
+printf "%s\n" "#define HAVE___BUILTIN_CLZ 1" >>confdefs.h
+
+fi
+
+
+
+
 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
 printf %s "checking for library containing clock_gettime... " >&6; }
 if test ${ac_cv_search_clock_gettime+y}
@@ -24193,6 +24139,16 @@
 
 
 
+# Check whether --with-ttfautohint was given.
+if test ${with_ttfautohint+y}
+then :
+  withval=$with_ttfautohint; with_ttfautohint="$withval"
+else $as_nop
+  with_ttfautohint=no
+fi
+
+
+
 printf "%s\n" "#define HAVE_LIBKPATHSEA 1" >>confdefs.h
 
 
@@ -24207,9 +24163,8 @@
 
 fi
 
-# TL: skip ttfautohint?
-
-# Add option to enable linking of bundled libraries (brotli, potrace, woff2, xxhash).
+# Add option to enable linking of bundled libraries (brotli, woff2, xxhash).
+# TL: potrace not bundled.
 # Check whether --enable-bundled-libs was given.
 if test ${enable_bundled_libs+y}
 then :
@@ -24238,14 +24193,6 @@
 
 # TL: these conditionals for system libraries are in the Makefile.am's.
  if false; then
-  HAVE_POTRACE_TRUE=
-  HAVE_POTRACE_FALSE='#'
-else
-  HAVE_POTRACE_TRUE='#'
-  HAVE_POTRACE_FALSE=
-fi
-
- if false; then
   HAVE_BROTLI_TRUE=
   HAVE_BROTLI_FALSE='#'
 else
@@ -24270,6 +24217,16 @@
 fi
 
 
+# TL: now includes potrace in libs, so always true.
+ if true; then
+  HAVE_POTRACE_TRUE=
+  HAVE_POTRACE_FALSE='#'
+else
+  HAVE_POTRACE_TRUE='#'
+  HAVE_POTRACE_FALSE=
+fi
+
+
 # TL: not going to build_manpage (which is the default).
 # TL: not going to attempt code coverage; need to subst it away.
  if false; then
@@ -24302,7 +24259,7 @@
 
 
 
-ac_config_files="$ac_config_files Makefile dvisvgm-src/Makefile dvisvgm-src/libs/Makefile dvisvgm-src/libs/brotli/Makefile dvisvgm-src/libs/clipper/Makefile dvisvgm-src/libs/ff-woff/Makefile dvisvgm-src/libs/md5/Makefile dvisvgm-src/libs/variant/Makefile dvisvgm-src/libs/woff2/Makefile dvisvgm-src/libs/xxHash/Makefile dvisvgm-src/src/Makefile dvisvgm-src/src/version.hpp dvisvgm-src/src/optimizer/Makefile"
+ac_config_files="$ac_config_files Makefile dvisvgm-src/Makefile dvisvgm-src/libs/Makefile dvisvgm-src/libs/boost/Makefile dvisvgm-src/libs/brotli/Makefile dvisvgm-src/libs/clipper/Makefile dvisvgm-src/libs/md5/Makefile dvisvgm-src/libs/variant/Makefile dvisvgm-src/libs/woff2/Makefile dvisvgm-src/libs/xxHash/Makefile dvisvgm-src/src/Makefile dvisvgm-src/src/version.hpp dvisvgm-src/src/fonts/Makefile dvisvgm-src/src/optimizer/Makefile dvisvgm-src/src/ttf/Makefile"
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
 # tests run on this system so they can be shared between configure
@@ -24464,10 +24421,6 @@
   as_fn_error $? "conditional \"USE_BUNDLED_MD5\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${HAVE_POTRACE_TRUE}" && test -z "${HAVE_POTRACE_FALSE}"; then
-  as_fn_error $? "conditional \"HAVE_POTRACE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${HAVE_BROTLI_TRUE}" && test -z "${HAVE_BROTLI_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_BROTLI\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -24480,6 +24433,10 @@
   as_fn_error $? "conditional \"HAVE_XXHASH\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${HAVE_POTRACE_TRUE}" && test -z "${HAVE_POTRACE_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_POTRACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${CODE_COVERAGE_ENABLED_TRUE}" && test -z "${CODE_COVERAGE_ENABLED_FALSE}"; then
   as_fn_error $? "conditional \"CODE_COVERAGE_ENABLED\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -24874,7 +24831,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.14, which was
+This file was extended by dvisvgm (TeX Live) $as_me 3.0.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -24942,7 +24899,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.14
+dvisvgm (TeX Live) config.status 3.0.1
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
@@ -25463,9 +25420,9 @@
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
     "dvisvgm-src/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/Makefile" ;;
     "dvisvgm-src/libs/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/Makefile" ;;
+    "dvisvgm-src/libs/boost/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/boost/Makefile" ;;
     "dvisvgm-src/libs/brotli/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/brotli/Makefile" ;;
     "dvisvgm-src/libs/clipper/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/clipper/Makefile" ;;
-    "dvisvgm-src/libs/ff-woff/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/ff-woff/Makefile" ;;
     "dvisvgm-src/libs/md5/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/md5/Makefile" ;;
     "dvisvgm-src/libs/variant/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/variant/Makefile" ;;
     "dvisvgm-src/libs/woff2/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/woff2/Makefile" ;;
@@ -25472,7 +25429,9 @@
     "dvisvgm-src/libs/xxHash/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/libs/xxHash/Makefile" ;;
     "dvisvgm-src/src/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/src/Makefile" ;;
     "dvisvgm-src/src/version.hpp") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/src/version.hpp" ;;
+    "dvisvgm-src/src/fonts/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/src/fonts/Makefile" ;;
     "dvisvgm-src/src/optimizer/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/src/optimizer/Makefile" ;;
+    "dvisvgm-src/src/ttf/Makefile") CONFIG_FILES="$CONFIG_FILES dvisvgm-src/src/ttf/Makefile" ;;
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac

Modified: trunk/Build/source/texk/dvisvgm/configure.ac
===================================================================
--- trunk/Build/source/texk/dvisvgm/configure.ac	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/configure.ac	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 dnl Process this file with autoconf to produce a configure script
 dnl for dvisvgm in TeX Live.
 dnl
-dnl   Copyright 2015-2022 Karl Berry <tex-live at tug.org>
+dnl   Copyright 2015-2023 Karl Berry <tex-live at tug.org>
 dnl   Copyright 2009-2014 Peter Breitenlohner <tex-live at tug.org>
 dnl
 dnl   This file is free software; the copyright holder
@@ -10,15 +10,16 @@
 dnl   with or without modifications, as long as this notice is preserved.
 dnl
 dnl  Adapted for TeX Live from original dvisvgm configure.ac
-dnl  Copyright 2005-2022 Martin Gieseking
+dnl  Copyright 2005-2023 Martin Gieseking
 dnl
 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="August 2022"
+DATE="January 2023"
 AC_CONFIG_SRCDIR([dvisvgm-src/src/dvisvgm.cpp])
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_MACRO_DIRS([../../m4])dnl not just _DIR
+AC_CONFIG_MACRO_DIRS([dvisvgm-src/m4])dnl ax_gcc_builtin
 AC_CONFIG_AUX_DIR([../../build-aux])
 
 AM_CONDITIONAL([TEXLIVE_BUILD], [test "x$enable_texlive_build" = xyes])
@@ -28,17 +29,17 @@
 AM_PROG_AR
 KPSE_COMMON([dvisvgm])
 
-AH_TEMPLATE([TARGET_SYSTEM], [The machine triplet of the target system])
-AC_DEFINE_UNQUOTED([TARGET_SYSTEM], ["$target"])
+AH_TEMPLATE([HOST_SYSTEM], [The machine triplet of the host system])
+AC_DEFINE_UNQUOTED([HOST_SYSTEM], ["$host"])
 
+# Checks for programs.
 AC_PROG_CC
-AC_PROG_CC_C99
 AC_PROG_CXX
 AX_CXX_COMPILE_STDCXX([11])
+dnl AM_PROG_AR is above.
 LT_INIT
 KPSE_CXX_HACK
 
-AC_PROG_RANLIB
 AC_LANG(C)
 
 AC_CHECK_HEADERS([sys/time.h sys/timeb.h xlocale.h])
@@ -166,6 +167,7 @@
 # Check for library functions.
 AC_FUNC_STAT
 AC_CHECK_FUNCS_ONCE([ftime gettimeofday sigaction umask uselocale])
+AX_GCC_BUILTIN(__builtin_clz)
 
 AC_SEARCH_LIBS(clock_gettime, rt)dnl for Solaris 10 and other old libc
 
@@ -175,6 +177,11 @@
 	[enable_woff=yes])
 AM_CONDITIONAL([ENABLE_WOFF], [test "x$enable_woff" = "xyes"])
 
+AC_ARG_WITH([ttfautohint],
+	[AS_HELP_STRING([--with-ttfautohint@<:@=prefix@:>@], [enable ttfautohint support (disabled by default)])],
+	[with_ttfautohint="$withval"],
+	[with_ttfautohint=no])
+
 AC_DEFINE([HAVE_LIBKPATHSEA], 1, [Define to 1 if you have the `kpathsea' library (-lkpathsea).])
 AC_DEFINE([HAVE_LIBFREETYPE], 1, [Define to 1 if you have the `freetype2' library (-lfreetype).])
 AC_DEFINE([HAVE_LIBZ], 1, [Define to 1 if you have the `z' library (-lz).])
@@ -182,9 +189,8 @@
   AC_DEFINE([KPSE_CXX_UNSAFE], 1, [Define to 1 if the kpathsea headers are not C++ safe.])
 fi
 
-# TL: skip ttfautohint?
-
-# Add option to enable linking of bundled libraries (brotli, potrace, woff2, xxhash).
+# Add option to enable linking of bundled libraries (brotli, woff2, xxhash).
+# TL: potrace not bundled.
 AC_ARG_ENABLE([bundled-libs],
 	[AS_HELP_STRING([--enable-bundled-libs], [use bundled libraries instead of the system ones @<:@default=no@:>@])],
 	[use_bundled_libs=yes])
@@ -196,11 +202,13 @@
 AM_CONDITIONAL([USE_BUNDLED_MD5], true)
 
 # TL: these conditionals for system libraries are in the Makefile.am's.
-AM_CONDITIONAL(HAVE_POTRACE, false)
 AM_CONDITIONAL(HAVE_BROTLI, false)
 AM_CONDITIONAL(HAVE_WOFF2, false)
 AM_CONDITIONAL(HAVE_XXHASH, false)
 
+# TL: now includes potrace in libs, so always true.
+AM_CONDITIONAL(HAVE_POTRACE, true)
+
 # TL: not going to build_manpage (which is the default).
 # TL: not going to attempt code coverage; need to subst it away.
 AM_CONDITIONAL([CODE_COVERAGE_ENABLED], false)
@@ -227,9 +235,9 @@
 AC_CONFIG_FILES([Makefile
 	dvisvgm-src/Makefile
 	dvisvgm-src/libs/Makefile
+	dvisvgm-src/libs/boost/Makefile
 	dvisvgm-src/libs/brotli/Makefile
 	dvisvgm-src/libs/clipper/Makefile
-	dvisvgm-src/libs/ff-woff/Makefile
 	dvisvgm-src/libs/md5/Makefile
 	dvisvgm-src/libs/variant/Makefile
 	dvisvgm-src/libs/woff2/Makefile
@@ -236,6 +244,8 @@
 	dvisvgm-src/libs/xxHash/Makefile
 	dvisvgm-src/src/Makefile
 	dvisvgm-src/src/version.hpp
+	dvisvgm-src/src/fonts/Makefile
 	dvisvgm-src/src/optimizer/Makefile
+	dvisvgm-src/src/ttf/Makefile
 ])dnl TL: skipping tests/* and doc/*
 AC_OUTPUT

Deleted: trunk/Build/source/texk/dvisvgm/dvisvgm-src/ChangeLog
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/ChangeLog	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/ChangeLog	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,11166 +0,0 @@
-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, 
-    src/version.hpp: 
-  set version to 2.13.3 
-
-  * NEWS: 
-  updated NEWS 
-
-2022-02-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.1, doc/dvisvgm.txt.in, src/optimizer/ClipPathReassigner.cpp, 
-    src/optimizer/ClipPathReassigner.hpp, src/optimizer/Makefile.am, 
-    src/optimizer/SVGOptimizer.cpp: 
-  added optimizer module to remove identical clipPath elements 
-
-  * doc/dvisvgm.1, doc/dvisvgm.txt.in, src/optimizer/SVGOptimizer.cpp: 
-  renamed optimizer module 'remove-clippath' to 'remove-clippaths' 
-
-  * src/optimizer/Makefile.am: 
-  added missing include path 
-
-2022-02-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BoundingBox.cpp, src/BoundingBox.hpp, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.hpp: 
-  avoid adding clip-path attributes to all elements created from EPS/PDF 
-  files 
-
-2022-02-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  moved 'transform' attribute of 'svg' element to wrapping group
-closes 
-  #178 
-
-  * src/PsSpecialHandler.cpp: 
-  properly wrap 'svg' element with group 
-
-2022-02-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile, 
-    src/version.hpp: 
-  set version to 2.13.2 
-
-  * NEWS: 
-  updated NEWS 
-
-2022-02-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  removed redundant space is PS code 
-
-  * src/BoundingBox.cpp, src/BoundingBox.hpp, src/DvisvgmSpecialHandler.cpp, 
-    src/PSPattern.cpp, src/PsSpecialHandler.cpp, src/SVGTree.cpp, 
-    tests/BoundingBoxTest.cpp, tests/DvisvgmSpecialTest.cpp, 
-    tests/EmSpecialTest.cpp, tests/PapersizeSpecialTest.cpp: 
-  renamed BoundingBox::toSVGViewBox to BoundingBox::svgViewBoxString 
-
-2022-02-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  use overflow='hidden' to clip included EPS/PDF graphics 
-
-2022-01-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile, 
-    src/version.hpp: 
-  set version to 2.13.1 
-
-  * NEWS: 
-  updated NEWS 
-
-  * README.md: 
-  added Copr status badge to README 
-
-2022-01-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PSPattern.cpp: 
-  added explicit std::move to fix build issues with older compilers
-closes 
-  #173 
-
-2022-01-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README.md: 
-  removed Travis badge from README 
-
-  * libs/xxHash/xxhash.h: 
-  do no longer depend on <assert.h> for 
-  XXH_STATIC_ASSERT
-https://github.com/Cyan4973/xxHash/commit/6189ecd3d44a693460f86280ccf49d33cb4b18e1 
-
-2022-01-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  apply bounding box parameters given with pdffile special
-closes #174 
-
-  * src/DvisvgmSpecialHandler.cpp: 
-  added evaluation of {?(...)} to dvisvgm:rawdef special
-closes #175 
-
-2022-01-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .github/workflows/c-cpp.yml: 
-  CI: ensure latest package updates are installed 
-
-  * README.md: 
-  updated README 
-
-2022-01-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.1, doc/dvisvgm.txt.in: 
-  reworded some sentences of the manual page
-closes #159 
-
-  * .appveyor.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile, 
-    src/version.hpp: 
-  set version to 2.13 
-
-2022-01-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS: 
-  updated NEWS 
-
-2022-01-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * Makefile.am, README, README.md, configure.ac, doc/Makefile.am, 
-    doc/conf-dblatex-man.xsl, doc/conf-dblatex-pdf.xsl, doc/db2html.xsl, 
-    doc/dvisvgm.txt.in, doc/tweak-db-article.xsl, doc/tweak-db-refentry.xsl, 
-    doc/tweak-dblatex-pdf.xsl, libs/Makefile.am, 
-    libs/ff-woff/fontforge/tmpfile2.cpp, src/AGLTable.hpp, 
-    src/BasicDVIReader.cpp, src/BasicDVIReader.hpp, src/Bezier.cpp, 
-    src/Bezier.hpp, src/BgColorSpecialHandler.cpp, 
-    src/BgColorSpecialHandler.hpp, src/Bitmap.cpp, src/Bitmap.hpp, 
-    src/BoundingBox.cpp, src/BoundingBox.hpp, src/CLCommandLine.cpp, 
-    src/CLCommandLine.hpp, src/CLOption.hpp, src/CMap.cpp, src/CMap.hpp, 
-    src/CMapManager.cpp, src/CMapManager.hpp, src/CMapReader.cpp, 
-    src/CMapReader.hpp, src/Calculator.cpp, src/Calculator.hpp, 
-    src/CharMapID.cpp, src/CharMapID.hpp, src/Character.hpp, src/Color.cpp, 
-    src/Color.hpp, src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.hpp, 
-    src/CommandLine.hpp, src/DLLoader.cpp, src/DLLoader.hpp, 
-    src/DVIActions.hpp, src/DVIReader.cpp, src/DVIReader.hpp, 
-    src/DVIToSVG.cpp, src/DVIToSVG.hpp, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.hpp, src/Directory.cpp, src/Directory.hpp, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp, 
-    src/EPSFile.cpp, src/EPSFile.hpp, src/EPSToSVG.hpp, 
-    src/EllipticalArc.cpp, src/EllipticalArc.hpp, src/EmSpecialHandler.cpp, 
-    src/EmSpecialHandler.hpp, src/EncFile.cpp, src/EncFile.hpp, 
-    src/FileFinder.cpp, src/FileFinder.hpp, src/FilePath.cpp, 
-    src/FilePath.hpp, src/FileSystem.cpp, src/FileSystem.hpp, 
-    src/FixWord.hpp, src/Font.cpp, src/Font.hpp, src/FontCache.cpp, 
-    src/FontCache.hpp, src/FontEncoding.cpp, src/FontEncoding.hpp, 
-    src/FontEngine.cpp, src/FontEngine.hpp, src/FontManager.cpp, 
-    src/FontManager.hpp, src/FontMap.cpp, src/FontMap.hpp, 
-    src/FontMetrics.cpp, src/FontMetrics.hpp, src/FontStyle.hpp, 
-    src/FontWriter.cpp, src/FontWriter.hpp, src/GFGlyphTracer.cpp, 
-    src/GFGlyphTracer.hpp, src/GFReader.cpp, src/GFReader.hpp, 
-    src/GFTracer.cpp, src/GFTracer.hpp, src/Ghostscript.cpp, 
-    src/Ghostscript.hpp, src/Glyph.hpp, src/GlyphTracerMessages.hpp, 
-    src/GraphicsPath.hpp, src/HashFunction.cpp, src/HashFunction.hpp, 
-    src/HtmlSpecialHandler.cpp, src/HtmlSpecialHandler.hpp, 
-    src/HyperlinkManager.cpp, src/HyperlinkManager.hpp, src/ImageToSVG.cpp, 
-    src/ImageToSVG.hpp, src/InputBuffer.cpp, src/InputBuffer.hpp, 
-    src/InputReader.cpp, src/InputReader.hpp, src/JFM.cpp, src/JFM.hpp, 
-    src/Length.cpp, src/Length.hpp, src/MD5HashFunction.hpp, src/Makefile.am, 
-    src/MapLine.cpp, src/MapLine.hpp, src/Matrix.cpp, src/Matrix.hpp, 
-    src/Message.cpp, src/Message.hpp, src/MessageException.hpp, 
-    src/MetafontWrapper.cpp, src/MetafontWrapper.hpp, src/MiKTeXCom.cpp, 
-    src/MiKTeXCom.hpp, src/NoPsSpecialHandler.cpp, 
-    src/NoPsSpecialHandler.hpp, src/NumericRanges.hpp, src/Opacity.cpp, 
-    src/Opacity.hpp, src/PDFParser.cpp, src/PDFParser.hpp, src/PDFToSVG.hpp, 
-    src/PSFilter.hpp, src/PSInterpreter.cpp, src/PSInterpreter.hpp, 
-    src/PSPattern.cpp, src/PSPattern.hpp, src/PSPreviewFilter.cpp, 
-    src/PSPreviewFilter.hpp, src/PageRanges.cpp, src/PageRanges.hpp, 
-    src/PageSize.cpp, src/PageSize.hpp, src/Pair.hpp, 
-    src/PapersizeSpecialHandler.cpp, src/PapersizeSpecialHandler.hpp, 
-    src/PathClipper.cpp, src/PathClipper.hpp, src/PdfSpecialHandler.cpp, 
-    src/PdfSpecialHandler.hpp, src/PreScanDVIReader.cpp, 
-    src/PreScanDVIReader.hpp, src/Process.cpp, src/Process.hpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, src/RangeMap.cpp, 
-    src/RangeMap.hpp, src/SVGCharHandler.cpp, src/SVGCharHandler.hpp, 
-    src/SVGCharHandlerFactory.cpp, src/SVGCharHandlerFactory.hpp, 
-    src/SVGCharPathHandler.cpp, src/SVGCharPathHandler.hpp, 
-    src/SVGCharTspanTextHandler.cpp, src/SVGCharTspanTextHandler.hpp, 
-    src/SVGElement.cpp, src/SVGElement.hpp, src/SVGOutput.cpp, 
-    src/SVGOutput.hpp, src/SVGSingleCharTextHandler.cpp, 
-    src/SVGSingleCharTextHandler.hpp, src/SVGTree.cpp, src/SVGTree.hpp, 
-    src/ShadingPatch.cpp, src/ShadingPatch.hpp, src/SignalHandler.cpp, 
-    src/SignalHandler.hpp, src/SourceInput.cpp, src/SourceInput.hpp, 
-    src/SpecialActions.hpp, src/SpecialHandler.hpp, src/SpecialManager.cpp, 
-    src/SpecialManager.hpp, src/StreamReader.cpp, src/StreamReader.hpp, 
-    src/StreamWriter.cpp, src/StreamWriter.hpp, src/Subfont.cpp, 
-    src/Subfont.hpp, src/System.cpp, src/System.hpp, src/TFM.cpp, 
-    src/TFM.hpp, src/TTFAutohint.cpp, src/TTFAutohint.hpp, 
-    src/TensorProductPatch.cpp, src/TensorProductPatch.hpp, src/Terminal.cpp, 
-    src/Terminal.hpp, src/ToUnicodeMap.cpp, src/ToUnicodeMap.hpp, 
-    src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.hpp, 
-    src/TriangularPatch.cpp, src/TriangularPatch.hpp, src/TrueTypeFont.cpp, 
-    src/TrueTypeFont.hpp, src/Unicode.cpp, src/Unicode.hpp, 
-    src/VFActions.hpp, src/VFReader.cpp, src/VFReader.hpp, 
-    src/VectorIterator.hpp, src/VectorStream.hpp, src/XMLDocument.cpp, 
-    src/XMLDocument.hpp, src/XMLNode.cpp, src/XMLNode.hpp, src/XMLString.cpp, 
-    src/XMLString.hpp, src/XXHashFunction.hpp, src/ZLibOutputStream.hpp, 
-    src/dvisvgm.cpp, src/ffwrapper.c, src/ffwrapper.h, src/macros.hpp, 
-    src/optimizer/AttributeExtractor.cpp, 
-    src/optimizer/AttributeExtractor.hpp, src/optimizer/DependencyGraph.hpp, 
-    src/optimizer/GroupCollapser.cpp, src/optimizer/GroupCollapser.hpp, 
-    src/optimizer/OptimizerModule.hpp, 
-    src/optimizer/RedundantElementRemover.cpp, 
-    src/optimizer/RedundantElementRemover.hpp, 
-    src/optimizer/SVGOptimizer.cpp, src/optimizer/SVGOptimizer.hpp, 
-    src/optimizer/TextSimplifier.cpp, src/optimizer/TextSimplifier.hpp, 
-    src/optimizer/TransformSimplifier.cpp, 
-    src/optimizer/TransformSimplifier.hpp, src/optimizer/WSNodeRemover.cpp, 
-    src/optimizer/WSNodeRemover.hpp, src/options.dtd, src/options.xml, 
-    src/psdefs.cpp, src/utility.cpp, src/utility.hpp, src/version.hpp.in, 
-    src/windows.hpp, tests/BezierTest.cpp, tests/BitmapTest.cpp, 
-    tests/BoundingBoxTest.cpp, tests/CMapManagerTest.cpp, 
-    tests/CMapReaderTest.cpp, tests/CMapTest.cpp, tests/CalculatorTest.cpp, 
-    tests/ColorSpecialTest.cpp, tests/ColorTest.cpp, 
-    tests/CommandLineTest.cpp, tests/DVIReaderTest.cpp, 
-    tests/DependencyGraphTest.cpp, tests/DirectoryTest.cpp, 
-    tests/DvisvgmSpecialTest.cpp, tests/EllipticalArcTest.cpp, 
-    tests/EmSpecialTest.cpp, tests/FileFinderTest.cpp, 
-    tests/FilePathTest.cpp, tests/FileSystemTest.cpp, 
-    tests/FontCacheTest.cpp, tests/FontManagerTest.cpp, 
-    tests/FontMapTest.cpp, tests/GFGlyphTracerTest.cpp, 
-    tests/GFReaderTest.cpp, tests/GhostscriptTest.cpp, 
-    tests/GraphicsPathTest.cpp, tests/HashFunctionTest.cpp, 
-    tests/JFMReaderTest.cpp, tests/LengthTest.cpp, tests/Makefile.am, 
-    tests/MapLineTest.cpp, tests/MatrixTest.cpp, 
-    tests/MessageExceptionTest.cpp, tests/PDFParserTest.cpp, 
-    tests/PSInterpreterTest.cpp, tests/PageRagesTest.cpp, 
-    tests/PageSizeTest.cpp, tests/PairTest.cpp, 
-    tests/PapersizeSpecialTest.cpp, tests/RangeMapTest.cpp, 
-    tests/SVGOutputTest.cpp, tests/ShadingPatchTest.cpp, 
-    tests/SpecialManagerTest.cpp, tests/SplittedCharInputBufferTest.cpp, 
-    tests/StreamInputBufferTest.cpp, tests/StreamReaderTest.cpp, 
-    tests/StreamWriterTest.cpp, tests/StringMatcherTest.cpp, 
-    tests/SubfontTest.cpp, tests/TFMReaderTest.cpp, 
-    tests/TensorProductPatchTest.cpp, tests/ToUnicodeMapTest.cpp, 
-    tests/TpicSpecialTest.cpp, tests/TriangularPatchTest.cpp, 
-    tests/UnicodeTest.cpp, tests/UtilityTest.cpp, 
-    tests/VectorIteratorTest.cpp, tests/VectorStreamTest.cpp, 
-    tests/XMLNodeTest.cpp, tests/XMLStringTest.cpp, tests/check-conv, 
-    tests/create-makefile, tests/data/Makefile.am, tests/genhashcheck.py, 
-    tests/normalize.xsl, tests/testmain.cpp: 
-  updated year in copyright statements to 2022 
-
-2022-01-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/Makefile.am: 
-  don't build manpage in parallel
-closes #171 
-
-2021-12-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/brotli/enc/encode.c: 
-  fixed parameter type warning in Brotli library 
-
-2021-12-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml: 
-  updated Windows platform toolset to version 143 
-
-2021-12-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.1, doc/dvisvgm.txt.in, src/dvisvgm.cpp: 
-  allow for conversion of multiple given EPS files 
-
-  * src/DVIToSVG.cpp: 
-  fixed setting of hash algorithm given on command-line 
-
-  * doc/dvisvgm.1, doc/dvisvgm.txt.in, src/SVGOutput.cpp, src/SVGOutput.hpp, 
-    src/dvisvgm.cpp: 
-  added variables n and N to option --output 
-
-2021-12-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/InputReader.cpp: 
-  replaced deprecated std::ptr_fun 
-
-2021-11-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/xxHash/xxh3.h, libs/xxHash/xxhash.h: 
-  updated xxHash to version 0.8.1 
-
-  * doc/dvisvgm.1, doc/dvisvgm.txt.in: 
-  manpage: extended introduction of section 'supported specials' 
-
-2021-11-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Font.cpp, src/FontEngine.cpp, src/FontEngine.hpp: 
-  use glyph metrics from font file to compute height and depth 
-
-  * doc/dvisvgm.1, doc/dvisvgm.txt.in: 
-  manpage: slightly changed wording regarding the bgcolor handler 
-
-2021-11-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml: 
-  removed Travis configuration 
-
-2021-10-30  Naveen M K  <naveen521kk at gmail.com>
-
-  * src/FileSystem.cpp: 
-  mingw: fix for gcc 11 
-
-2021-09-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/optimizer/GroupCollapser.cpp, src/optimizer/GroupCollapser.hpp, 
-    src/optimizer/SVGOptimizer.cpp: 
-  simplify transform attributes only if 'simplify-transform' is given 
-
-2021-09-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/UtilityTest.cpp: 
-  prevent creating temporaries in test loop 
-
-2021-09-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/gtest/include/gtest/gtest-death-test.h, 
-    tests/gtest/include/gtest/gtest-matchers.h, 
-    tests/gtest/include/gtest/gtest-message.h, 
-    tests/gtest/include/gtest/gtest-param-test.h, 
-    tests/gtest/include/gtest/gtest-printers.h, 
-    tests/gtest/include/gtest/gtest-spi.h, 
-    tests/gtest/include/gtest/gtest-test-part.h, 
-    tests/gtest/include/gtest/gtest-typed-test.h, 
-    tests/gtest/include/gtest/gtest.h, 
-    tests/gtest/include/gtest/gtest_pred_impl.h, 
-    tests/gtest/include/gtest/gtest_prod.h, 
-    tests/gtest/include/gtest/internal/custom/gtest-port.h, 
-    tests/gtest/include/gtest/internal/custom/gtest-printers.h, 
-    tests/gtest/include/gtest/internal/custom/gtest.h, 
-    tests/gtest/include/gtest/internal/gtest-death-test-internal.h, 
-    tests/gtest/include/gtest/internal/gtest-filepath.h, 
-    tests/gtest/include/gtest/internal/gtest-internal.h, 
-    tests/gtest/include/gtest/internal/gtest-param-util.h, 
-    tests/gtest/include/gtest/internal/gtest-port-arch.h, 
-    tests/gtest/include/gtest/internal/gtest-port.h, 
-    tests/gtest/include/gtest/internal/gtest-string.h, 
-    tests/gtest/include/gtest/internal/gtest-type-util.h, 
-    tests/gtest/src/gtest-death-test.cc, tests/gtest/src/gtest-filepath.cc, 
-    tests/gtest/src/gtest-internal-inl.h, tests/gtest/src/gtest-matchers.cc, 
-    tests/gtest/src/gtest-port.cc, tests/gtest/src/gtest-printers.cc, 
-    tests/gtest/src/gtest-test-part.cc, tests/gtest/src/gtest-typed-test.cc, 
-    tests/gtest/src/gtest.cc, tests/gtest/src/gtest_main.cc, 
-    tests/testutil.hpp: 
-  updated gtest to version 1.11 
-
-2021-08-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/optimizer/GroupCollapser.cpp, src/optimizer/GroupCollapser.hpp: 
-  GroupCollapser: simplify transform attributes after combining them 
-
-2021-08-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile, 
-    src/version.hpp: 
-  set version to 2.12 
-
-  * NEWS: 
-  updated NEWS 
-
-2021-08-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  skip fill actions if colorspace with unsupported pattern type is active 
-
-2021-08-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp: 
-  ensure adding color attribute to tiling patterns
-(closes #158) 
-
-2021-07-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml: 
-  updated FreeType to version 2.11 
-
-2021-07-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FilePath.cpp: 
-  prevent out-of-bounds access 
-
-  * src/InputBuffer.hpp: 
-  delete unused assignment operator 
-
-2021-06-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .gitattributes: 
-  Update .gitattributes
-
-marked all files in libs and its subfolders as 
-  vendored code 
-
-2021-06-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FilePath.cpp: 
-  fixed handling of root directories in file paths 
-
-  * src/FilePath.cpp, src/FileSystem.cpp, tests/FilePathTest.cpp: 
-  improved handling of drive letters on Windows 
-
-2021-06-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  fixed displaced graphics if PDF MediaBox isn't located at origin 
-
-  * tests/data/Makefile.am: 
-  added missing test data file to Makefile 
-
-2021-06-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * m4/ax_cxx_compile_stdcxx.m4: 
-  ax_cxx_compile_stdcxx.m4 to version 12 
-
-2021-05-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Font.hpp: 
-  simplified boolean expression 
-
-  * src/Font.hpp, src/SVGCharPathHandler.cpp: 
-  removed default parameter from virtual methods 
-
-2021-05-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PSPattern.hpp, src/PsSpecialHandler.cpp: 
-  removed dynamic casting in processing of PS patterns 
-
-  * src/PdfSpecialHandler.cpp: 
-  replaced dynamic_cast with static_cast as type is unambiguous 
-
-  * src/TensorProductPatch.cpp, src/TriangularPatch.cpp: 
-  replaced dynamic casts of shading patches with PS type comparisons 
-
-  * src/CMapManager.cpp: 
-  replaced dynamic cast of CMap type test with existing method 
-  mapsToUnicode() 
-
-2021-05-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp, src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, 
-    src/Font.cpp, src/Font.hpp, src/FontEngine.cpp, src/FontManager.cpp, 
-    src/SVGCharHandler.cpp, src/SVGCharPathHandler.cpp, 
-    src/SVGCharTspanTextHandler.cpp, src/SVGTree.cpp, src/utility.hpp, 
-    tests/FontManagerTest.cpp, tests/data/lmmono12-regular.otf: 
-  added font_cast to replace dynamic casts of Font pointers 
-
-2021-05-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp, src/FontMetrics.hpp, src/JFM.hpp: 
-  replaced dynamic cast to test for JFM with dedicated method 
-
-2021-04-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  fixed PS error thrown when trying to set a shading pattern 
-
-  * src/PsSpecialHandler.cpp, src/SVGElement.cpp, src/SVGElement.hpp: 
-  always add fill attribute to pattern paths 
-
-2021-04-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.1, doc/dvisvgm.txt.in: 
-  reworded few parts of the manual page 
-
-2021-04-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  restore proper context node at end of pattern definition 
-
-2021-03-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GraphicsPath.hpp: 
-  use std::equal to check equality of GraphicsPaths 
-
-  * src/EllipticalArc.cpp, src/Matrix.cpp, src/Matrix.hpp, 
-    tests/MatrixTest.cpp: 
-  Matrix: added default constructor; explicit init list constructor 
-
-  * src/GFReader.cpp, src/Message.cpp, src/VectorIterator.hpp: 
-  removed redundant index checks 
-
-  * src/DVIToSVG.cpp, src/DVIToSVG.hpp: 
-  initialize basic members outside constructor body 
-
-  * src/DvisvgmSpecialHandler.cpp: 
-  two small code improvements 
-
-  * src/FontManager.cpp: 
-  removed redundant check 
-
-  * src/GFGlyphTracer.cpp, src/GFGlyphTracer.hpp, src/HyperlinkManager.hpp, 
-    src/PSInterpreter.cpp, src/PsSpecialHandler.cpp: 
-  added missing const to reference parameters 
-
-  * src/InputBuffer.hpp: 
-  prevent unwanted copying of input buffers 
-
-2021-03-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.1: 
-  fixed typo in manual 
-
-  * src/PSInterpreter.cpp: 
-  fixed expression to check current GS running mode 
-
-  * src/SVGSingleCharTextHandler.cpp: 
-  reset change flag of color and opacity properties unconditionally 
-
-  * src/SVGCharTspanTextHandler.cpp: 
-  create initial tspan if opacity values differ from defaults 
-
-  * src/Ghostscript.cpp, src/Ghostscript.hpp, src/PSInterpreter.cpp, 
-    src/PSInterpreter.hpp, src/psdefs.cpp, tests/PSInterpreterTest.cpp: 
-  update opacity settings on grestore
-Requires GS >= 9.52 because earlier 
-  versions only provide operators to set the
-opacity/blendmode values and 
-  none to retrieve them. 
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.hpp, src/PsSpecialHandler.hpp, 
-    src/psdefs.cpp, tests/PSInterpreterTest.cpp: 
-  renamed PS operator setisshapealpha 
-
-  * src/dvisvgm.cpp: 
-  added missing parenthesis in info message 
-
-2021-03-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/optimizer/GroupCollapser.cpp, src/optimizer/TextSimplifier.cpp: 
-  minor loop optimizations 
-
-  * src/XMLNode.cpp: 
-  don't create newlines inside text elements
-since they may lead to 
-  additional whitespace, e.g. between tspans that lack absolute coordinates 
-
-  * src/SVGCharPathHandler.cpp, src/SVGElement.cpp, src/SVGElement.hpp: 
-  don't add style attributes to groups because they're not inheritable 
-
-2021-03-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Makefile.am, src/Opacity.cpp, src/Opacity.hpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp: 
-  combined alpha and blendmode values into dedicated class 
-
-  * src/SVGCharHandler.hpp: 
-  added default and move constructor to CharProperty 
-
-  * src/DVIToSVGActions.hpp, src/ImageToSVG.hpp, src/Opacity.hpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, 
-    src/SVGCharHandler.hpp, src/SVGCharPathHandler.cpp, 
-    src/SVGCharTspanTextHandler.cpp, src/SVGSingleCharTextHandler.cpp, 
-    src/SVGTree.hpp, src/SpecialActions.hpp: 
-  added opacity properties to text elements 
-
-  * src/SVGCharHandler.cpp, src/SVGCharHandler.hpp, 
-    src/SVGCharPathHandler.cpp, src/SVGCharTspanTextHandler.cpp, 
-    src/SVGSingleCharTextHandler.cpp: 
-  added shorthand operator for CharProperty::get() 
-
-  * src/Opacity.hpp, src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp: 
-  PS handler: replaced isolated opacity variables with Opacity class 
-
-  * src/Makefile.am, src/Opacity.hpp, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.hpp, src/SVGElement.cpp, src/SVGElement.hpp, 
-    src/XMLNode.hpp: 
-  added class to handle SVG attributes in a uniform manner 
-
-  * src/DVIToSVGActions.cpp, src/DVIToSVGActions.hpp, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp, 
-    src/EmSpecialHandler.cpp, src/HyperlinkManager.cpp, src/ImageToSVG.hpp, 
-    src/PSPattern.cpp, src/PsSpecialHandler.cpp, src/SVGCharHandler.cpp, 
-    src/SVGCharHandler.hpp, src/SVGCharPathHandler.cpp, 
-    src/SVGCharPathHandler.hpp, src/SVGCharTspanTextHandler.cpp, 
-    src/SVGCharTspanTextHandler.hpp, src/SVGElement.cpp, src/SVGElement.hpp, 
-    src/SVGSingleCharTextHandler.cpp, src/SVGTree.cpp, src/SVGTree.hpp, 
-    src/SpecialActions.hpp, src/TpicSpecialHandler.cpp, 
-    tests/TpicSpecialTest.cpp: 
-  added opacity properties to graphics elements created outside the PS 
-  handler
-(closes #148) 
-
-  * src/EmSpecialHandler.cpp, src/SVGElement.cpp, src/SVGElement.hpp, 
-    src/TpicSpecialHandler.cpp, tests/EmSpecialTest.cpp, 
-    tests/TpicSpecialTest.cpp: 
-  unified handling of "point" attributes 
-
-  * src/EmSpecialHandler.cpp, src/SVGCharHandler.cpp, 
-    src/SVGCharPathHandler.cpp, src/SVGElement.cpp, src/SVGTree.cpp, 
-    src/TpicSpecialHandler.cpp: 
-  removed redundant casts to XMLString 
-
-2021-03-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .github/workflows/c-cpp.yml: 
-  added GitHub CI configuration 
-
-  * .github/workflows/c-cpp.yml: 
-  removed distcheck from CI 
-
-  * README.md: 
-  added GitHub CI badge; removed Copr badge 
-
-2021-03-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BgColorSpecialHandler.cpp, src/BoundingBox.cpp, 
-    src/DvisvgmSpecialHandler.cpp, src/EllipticalArc.cpp, 
-    src/EmSpecialHandler.cpp, src/FontCache.cpp, src/FontEngine.cpp, 
-    src/FontManager.cpp, src/FontWriter.cpp, src/PSInterpreter.cpp, 
-    src/PapersizeSpecialHandler.cpp, src/RangeMap.cpp, src/Subfont.cpp, 
-    src/TpicSpecialHandler.cpp, src/TrueTypeFont.cpp, src/XMLDocument.cpp, 
-    src/XMLNode.cpp, src/dvisvgm.cpp, src/utility.cpp: 
-  avoid copying objects in emplace methods 
-
-2021-02-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .gitignore: 
-  added .pyc to ignored file suffixes 
-
-2021-02-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FilePath.cpp, src/FileSystem.cpp, src/FileSystem.hpp: 
-  improved handling of differing drive letters in Windows file paths 
-
-2021-01-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in: 
-  fixed typo in manual 
-
-2021-01-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/tweak-dblatex-tex.py: 
-  updated tweak-dblatex-tex to Python 3 
-
-2021-01-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile, 
-    src/version.hpp: 
-  set version to 2.11.1 
-
-  * NEWS: 
-  updated NEWS 
-
-2021-01-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * Makefile.am, README, README.md, configure.ac, doc/Makefile.am, 
-    doc/conf-dblatex-man.xsl, doc/conf-dblatex-pdf.xsl, doc/db2html.xsl, 
-    doc/dvisvgm.1, doc/dvisvgm.txt.in, doc/tweak-db-article.xsl, 
-    doc/tweak-db-refentry.xsl, doc/tweak-dblatex-pdf.xsl, libs/Makefile.am, 
-    libs/ff-woff/fontforge/tmpfile2.cpp, src/AGLTable.hpp, 
-    src/BasicDVIReader.cpp, src/BasicDVIReader.hpp, src/Bezier.cpp, 
-    src/Bezier.hpp, src/BgColorSpecialHandler.cpp, 
-    src/BgColorSpecialHandler.hpp, src/Bitmap.cpp, src/Bitmap.hpp, 
-    src/BoundingBox.cpp, src/BoundingBox.hpp, src/CLCommandLine.cpp, 
-    src/CLCommandLine.hpp, src/CLOption.hpp, src/CMap.cpp, src/CMap.hpp, 
-    src/CMapManager.cpp, src/CMapManager.hpp, src/CMapReader.cpp, 
-    src/CMapReader.hpp, src/Calculator.cpp, src/Calculator.hpp, 
-    src/CharMapID.cpp, src/CharMapID.hpp, src/Character.hpp, src/Color.cpp, 
-    src/Color.hpp, src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.hpp, 
-    src/CommandLine.hpp, src/DLLoader.cpp, src/DLLoader.hpp, 
-    src/DVIActions.hpp, src/DVIReader.cpp, src/DVIReader.hpp, 
-    src/DVIToSVG.cpp, src/DVIToSVG.hpp, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.hpp, src/Directory.cpp, src/Directory.hpp, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp, 
-    src/EPSFile.cpp, src/EPSFile.hpp, src/EPSToSVG.hpp, 
-    src/EllipticalArc.cpp, src/EllipticalArc.hpp, src/EmSpecialHandler.cpp, 
-    src/EmSpecialHandler.hpp, src/EncFile.cpp, src/EncFile.hpp, 
-    src/FileFinder.cpp, src/FileFinder.hpp, src/FilePath.cpp, 
-    src/FilePath.hpp, src/FileSystem.cpp, src/FileSystem.hpp, 
-    src/FixWord.hpp, src/Font.cpp, src/Font.hpp, src/FontCache.cpp, 
-    src/FontCache.hpp, src/FontEncoding.cpp, src/FontEncoding.hpp, 
-    src/FontEngine.cpp, src/FontEngine.hpp, src/FontManager.cpp, 
-    src/FontManager.hpp, src/FontMap.cpp, src/FontMap.hpp, 
-    src/FontMetrics.cpp, src/FontMetrics.hpp, src/FontStyle.hpp, 
-    src/FontWriter.cpp, src/FontWriter.hpp, src/GFGlyphTracer.cpp, 
-    src/GFGlyphTracer.hpp, src/GFReader.cpp, src/GFReader.hpp, 
-    src/GFTracer.cpp, src/GFTracer.hpp, src/Ghostscript.cpp, 
-    src/Ghostscript.hpp, src/Glyph.hpp, src/GlyphTracerMessages.hpp, 
-    src/GraphicsPath.hpp, src/HashFunction.cpp, src/HashFunction.hpp, 
-    src/HtmlSpecialHandler.cpp, src/HtmlSpecialHandler.hpp, 
-    src/HyperlinkManager.cpp, src/HyperlinkManager.hpp, src/ImageToSVG.cpp, 
-    src/ImageToSVG.hpp, src/InputBuffer.cpp, src/InputBuffer.hpp, 
-    src/InputReader.cpp, src/InputReader.hpp, src/JFM.cpp, src/JFM.hpp, 
-    src/Length.cpp, src/Length.hpp, src/MD5HashFunction.hpp, src/Makefile.am, 
-    src/MapLine.cpp, src/MapLine.hpp, src/Matrix.cpp, src/Matrix.hpp, 
-    src/Message.cpp, src/Message.hpp, src/MessageException.hpp, 
-    src/MetafontWrapper.cpp, src/MetafontWrapper.hpp, src/MiKTeXCom.cpp, 
-    src/MiKTeXCom.hpp, src/NoPsSpecialHandler.cpp, 
-    src/NoPsSpecialHandler.hpp, src/NumericRanges.hpp, src/PDFParser.cpp, 
-    src/PDFParser.hpp, src/PDFToSVG.hpp, src/PSFilter.hpp, 
-    src/PSInterpreter.cpp, src/PSInterpreter.hpp, src/PSPattern.cpp, 
-    src/PSPattern.hpp, src/PSPreviewFilter.cpp, src/PSPreviewFilter.hpp, 
-    src/PageRanges.cpp, src/PageRanges.hpp, src/PageSize.cpp, 
-    src/PageSize.hpp, src/Pair.hpp, src/PapersizeSpecialHandler.cpp, 
-    src/PapersizeSpecialHandler.hpp, src/PathClipper.cpp, 
-    src/PathClipper.hpp, src/PdfSpecialHandler.cpp, 
-    src/PdfSpecialHandler.hpp, src/PreScanDVIReader.cpp, 
-    src/PreScanDVIReader.hpp, src/Process.cpp, src/Process.hpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, src/RangeMap.cpp, 
-    src/RangeMap.hpp, src/SVGCharHandler.cpp, src/SVGCharHandler.hpp, 
-    src/SVGCharHandlerFactory.cpp, src/SVGCharHandlerFactory.hpp, 
-    src/SVGCharPathHandler.cpp, src/SVGCharPathHandler.hpp, 
-    src/SVGCharTspanTextHandler.cpp, src/SVGCharTspanTextHandler.hpp, 
-    src/SVGOutput.cpp, src/SVGOutput.hpp, src/SVGSingleCharTextHandler.cpp, 
-    src/SVGSingleCharTextHandler.hpp, src/SVGTree.cpp, src/SVGTree.hpp, 
-    src/ShadingPatch.cpp, src/ShadingPatch.hpp, src/SignalHandler.cpp, 
-    src/SignalHandler.hpp, src/SourceInput.cpp, src/SourceInput.hpp, 
-    src/SpecialActions.hpp, src/SpecialHandler.hpp, src/SpecialManager.cpp, 
-    src/SpecialManager.hpp, src/StreamReader.cpp, src/StreamReader.hpp, 
-    src/StreamWriter.cpp, src/StreamWriter.hpp, src/Subfont.cpp, 
-    src/Subfont.hpp, src/System.cpp, src/System.hpp, src/TFM.cpp, 
-    src/TFM.hpp, src/TTFAutohint.cpp, src/TTFAutohint.hpp, 
-    src/TensorProductPatch.cpp, src/TensorProductPatch.hpp, src/Terminal.cpp, 
-    src/Terminal.hpp, src/ToUnicodeMap.cpp, src/ToUnicodeMap.hpp, 
-    src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.hpp, 
-    src/TriangularPatch.cpp, src/TriangularPatch.hpp, src/TrueTypeFont.cpp, 
-    src/TrueTypeFont.hpp, src/Unicode.cpp, src/Unicode.hpp, 
-    src/VFActions.hpp, src/VFReader.cpp, src/VFReader.hpp, 
-    src/VectorIterator.hpp, src/VectorStream.hpp, src/XMLDocument.cpp, 
-    src/XMLDocument.hpp, src/XMLNode.cpp, src/XMLNode.hpp, src/XMLString.cpp, 
-    src/XMLString.hpp, src/XXHashFunction.hpp, src/ZLibOutputStream.hpp, 
-    src/dvisvgm.cpp, src/ffwrapper.c, src/ffwrapper.h, src/macros.hpp, 
-    src/optimizer/AttributeExtractor.cpp, 
-    src/optimizer/AttributeExtractor.hpp, src/optimizer/DependencyGraph.hpp, 
-    src/optimizer/GroupCollapser.cpp, src/optimizer/GroupCollapser.hpp, 
-    src/optimizer/OptimizerModule.hpp, 
-    src/optimizer/RedundantElementRemover.cpp, 
-    src/optimizer/RedundantElementRemover.hpp, 
-    src/optimizer/SVGOptimizer.cpp, src/optimizer/SVGOptimizer.hpp, 
-    src/optimizer/TextSimplifier.cpp, src/optimizer/TextSimplifier.hpp, 
-    src/optimizer/TransformSimplifier.cpp, 
-    src/optimizer/TransformSimplifier.hpp, src/optimizer/WSNodeRemover.cpp, 
-    src/optimizer/WSNodeRemover.hpp, src/options.dtd, src/options.xml, 
-    src/psdefs.cpp, src/utility.cpp, src/utility.hpp, src/version.hpp, 
-    src/version.hpp.in, src/windows.hpp, tests/BezierTest.cpp, 
-    tests/BitmapTest.cpp, tests/BoundingBoxTest.cpp, 
-    tests/CMapManagerTest.cpp, tests/CMapReaderTest.cpp, tests/CMapTest.cpp, 
-    tests/CalculatorTest.cpp, tests/ColorSpecialTest.cpp, 
-    tests/ColorTest.cpp, tests/CommandLineTest.cpp, tests/DVIReaderTest.cpp, 
-    tests/DependencyGraphTest.cpp, tests/DirectoryTest.cpp, 
-    tests/DvisvgmSpecialTest.cpp, tests/EllipticalArcTest.cpp, 
-    tests/EmSpecialTest.cpp, tests/FileFinderTest.cpp, 
-    tests/FilePathTest.cpp, tests/FileSystemTest.cpp, 
-    tests/FontCacheTest.cpp, tests/FontManagerTest.cpp, 
-    tests/FontMapTest.cpp, tests/GFGlyphTracerTest.cpp, 
-    tests/GFReaderTest.cpp, tests/GhostscriptTest.cpp, 
-    tests/GraphicsPathTest.cpp, tests/HashFunctionTest.cpp, 
-    tests/JFMReaderTest.cpp, tests/LengthTest.cpp, tests/Makefile.am, 
-    tests/MapLineTest.cpp, tests/MatrixTest.cpp, 
-    tests/MessageExceptionTest.cpp, tests/PDFParserTest.cpp, 
-    tests/PSInterpreterTest.cpp, tests/PageRagesTest.cpp, 
-    tests/PageSizeTest.cpp, tests/PairTest.cpp, 
-    tests/PapersizeSpecialTest.cpp, tests/RangeMapTest.cpp, 
-    tests/SVGOutputTest.cpp, tests/ShadingPatchTest.cpp, 
-    tests/SpecialManagerTest.cpp, tests/SplittedCharInputBufferTest.cpp, 
-    tests/StreamInputBufferTest.cpp, tests/StreamReaderTest.cpp, 
-    tests/StreamWriterTest.cpp, tests/StringMatcherTest.cpp, 
-    tests/SubfontTest.cpp, tests/TFMReaderTest.cpp, 
-    tests/TensorProductPatchTest.cpp, tests/ToUnicodeMapTest.cpp, 
-    tests/TpicSpecialTest.cpp, tests/TriangularPatchTest.cpp, 
-    tests/UnicodeTest.cpp, tests/UtilityTest.cpp, 
-    tests/VectorIteratorTest.cpp, tests/VectorStreamTest.cpp, 
-    tests/XMLNodeTest.cpp, tests/XMLStringTest.cpp, tests/check-conv, 
-    tests/create-makefile, tests/data/Makefile.am, tests/genhashcheck.py, 
-    tests/normalize.xsl, tests/testmain.cpp: 
-  updated year in copyright statements to 2021 
-
-2020-12-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Calculator.cpp, tests/CalculatorTest.cpp: 
-  fixed a comment and added minor calculator tests 
-
-  * src/Calculator.cpp, src/Calculator.hpp, tests/CalculatorTest.cpp: 
-  use variant type for token objects in class Calculator 
-
-2020-12-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontEngine.cpp: 
-  renamed some local variables 
-
-2020-12-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontEngine.cpp: 
-  ensure unambiguity of GID to charcode mappings
-(fixes #147) 
-
-  * src/Font.cpp, src/FontEngine.cpp, src/FontEngine.hpp: 
-  Renamed FontEngine::buildCharMap() 
-
-2020-11-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile, 
-    src/version.hpp: 
-  set version to 2.11 
-
-  * NEWS: 
-  updated NEWS 
-
-2020-11-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BasicDVIReader.cpp, src/BasicDVIReader.hpp, src/DVIReader.cpp, 
-    src/DVIReader.hpp: 
-  moved low-level DVIReader functions to BasicDVIReader
-and some code 
-  cleanup 
-
-  * src/BasicDVIReader.cpp, src/BasicDVIReader.hpp, src/DVIReader.cpp, 
-    src/DVIToSVG.cpp, src/PdfSpecialHandler.cpp, src/PdfSpecialHandler.hpp: 
-  process mapline specials before fontdefs
-to ensure all mapline 
-  definitions are present when registering fonts 
-
-2020-11-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontMap.cpp, src/Subfont.cpp, src/Subfont.hpp, 
-    tests/SubfontTest.cpp: 
-  SubfontDefinition: replaced reference parameter with return value 
-
-2020-11-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CMap.cpp, src/CMap.hpp, src/Font.cpp, src/FontEncoding.cpp, 
-    src/FontEncoding.hpp: 
-  keep selected Unicode fontmap if assigned CMap maps to Unicode 
-
-  * src/DVIReader.cpp, src/FontManager.cpp, src/FontManager.hpp: 
-  added fallback for missing characters in JFM-based virtual fonts
-(closes 
-  #144) 
-
-2020-11-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Unicode.cpp, src/Unicode.hpp, tests/UnicodeTest.cpp: 
-  added functions to convert surrogate pairs 
-
-  * src/CMap.cpp, src/CMap.hpp, src/CMapReader.cpp: 
-  consider surrogates when reading CMap files 
-
-2020-10-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml: 
-  updated FreeType to version 2.10.4 
-
-2020-10-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml: 
-  updated FreeType to version 2.10.3 
-
-2020-09-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile, 
-    src/version.hpp: 
-  set version to 2.10.1 
-
-  * NEWS: 
-  updated NEWS 
-
-2020-09-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.hpp, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.hpp, src/psdefs.cpp, tests/PSInterpreterTest.cpp: 
-  added support for new GS transparency operators
-.setfillconstantalpha 
-  and .setstrokeconstantalpha 
-
-2020-09-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/XMLNode.cpp: 
-  renamed local variable 
-
-2020-08-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/brotli/common/version.h: 
-  updated brotli to version 1.0.9
-the encoder is not affected by this 
-  update so the bundled subset
-only bumps the version number. 
-
-2020-08-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/brotli/Makefile.am, libs/brotli/common/constants.c, 
-    libs/brotli/common/constants.h, libs/brotli/common/context.c, 
-    libs/brotli/common/context.h, libs/brotli/common/dictionary.c, 
-    libs/brotli/common/platform.c, libs/brotli/common/platform.h, 
-    libs/brotli/common/transform.c, libs/brotli/common/transform.h, 
-    libs/brotli/common/version.h, libs/brotli/enc/backward_references.c, 
-    libs/brotli/enc/backward_references.h, 
-    libs/brotli/enc/backward_references_hq.c, 
-    libs/brotli/enc/backward_references_hq.h, 
-    libs/brotli/enc/backward_references_inc.h, 
-    libs/brotli/enc/block_splitter.c, libs/brotli/enc/block_splitter_inc.h, 
-    libs/brotli/enc/brotli_bit_stream.c, libs/brotli/enc/cluster_inc.h, 
-    libs/brotli/enc/command.c, libs/brotli/enc/command.h, 
-    libs/brotli/enc/compress_fragment_two_pass.c, 
-    libs/brotli/enc/dictionary_hash.c, libs/brotli/enc/dictionary_hash.h, 
-    libs/brotli/enc/encode.c, libs/brotli/enc/encoder_dict.c, 
-    libs/brotli/enc/encoder_dict.h, libs/brotli/enc/entropy_encode.c, 
-    libs/brotli/enc/entropy_encode.h, libs/brotli/enc/fast_log.c, 
-    libs/brotli/enc/fast_log.h, libs/brotli/enc/find_match_length.h, 
-    libs/brotli/enc/hash.h, libs/brotli/enc/hash_composite_inc.h, 
-    libs/brotli/enc/hash_forgetful_chain_inc.h, 
-    libs/brotli/enc/hash_longest_match64_inc.h, 
-    libs/brotli/enc/hash_longest_match_inc.h, 
-    libs/brotli/enc/hash_longest_match_quickly_inc.h, 
-    libs/brotli/enc/hash_rolling_inc.h, 
-    libs/brotli/enc/hash_to_binary_tree_inc.h, libs/brotli/enc/memory.h, 
-    libs/brotli/enc/metablock.c, libs/brotli/enc/metablock_inc.h, 
-    libs/brotli/enc/params.h, libs/brotli/enc/ringbuffer.h, 
-    libs/brotli/enc/utf8_util.c, libs/brotli/enc/write_bits.h, 
-    libs/brotli/include/brotli/encode.h, libs/brotli/include/brotli/port.h: 
-  updated brotli to version 1.0.8 
-
-2020-08-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.1, doc/dvisvgm.txt.in: 
-  manpage: few additions to --bbox and --font-format 
-
-2020-08-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .mailmap: 
-  removed redundant file 
-
-2020-08-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Ghostscript.cpp: 
-  updated GS versioning scheme introduced with GS 
-  9.53.0
-http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=0e98e2a27ed19fcc138215afe17ab1a173aeed7b 
-
-2020-08-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile, 
-    src/version.hpp: 
-  set version to 2.10 
-
-  * NEWS: 
-  updated NEWS 
-
-2020-07-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.1, doc/dvisvgm.txt.in, libs/xxHash/xxh3.h, 
-    libs/xxHash/xxhash.h: 
-  updated xxHash to version 0.8 
-
-2020-07-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  redefine internal GS operators .fillstroke and .eofillstroke
-They are 
-  used to implement PDF operators B and B*.
-(closes #139) 
-
-2020-07-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/optimizer/TransformSimplifier.cpp: 
-  don't unwind transform attributes of image elements 
-
-  * src/optimizer/GroupCollapser.cpp: 
-  collapse groups w/o attributes first
-in order to recurse into their 
-  descendants. 
-
-  * src/optimizer/TransformSimplifier.cpp: 
-  optimizer: unwind transform attributes of image elements
-if it consists 
-  only of scaling and translations. Merge the scaled translation
-into x and 
-  y, and simplify the remaining matrix(...) expression to scale(...) 
-
-2020-07-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/XMLNode.cpp, src/XMLNode.hpp, src/optimizer/GroupCollapser.cpp, 
-    src/optimizer/RedundantElementRemover.cpp, 
-    src/optimizer/WSNodeRemover.cpp: 
-  renamed XMLNode::remove to XMLNode::detach 
-
-2020-07-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/optimizer/GroupCollapser.cpp: 
-  don't move inner transforms to outer clipping paths 
-
-  * src/XMLNode.cpp: 
-  fixed XMLElement::unwrap 
-
-  * src/optimizer/GroupCollapser.cpp: 
-  improved optimizer module GroupCollapser 
-
-2020-07-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/optimizer/SVGOptimizer.cpp: 
-  simplify transforms before optimizing groups 
-
-  * src/DvisvgmSpecialHandler.cpp: 
-  fixed error message about invalid closing tags 
-
-  * src/DVIToSVGActions.cpp: 
-  handle XML parser errors thrown in EOP 
-
-  * src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp: 
-  reduced number of successive XML error messages 
-
-  * src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp: 
-  renamed XMLParser::flush to XMLParser::finish 
-
-2020-07-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontCache.cpp, src/HashFunction.cpp, src/HashFunction.hpp, 
-    src/MD5HashFunction.hpp, src/XXHashFunction.hpp, 
-    tests/HashFunctionTest.cpp: 
-  renamed HashFunction::digestValue() to HashFunction::digestBytes() 
-
-  * src/XXHashFunction.hpp: 
-  added XXHashFunction::digestValue() to get the value as encoded by 
-  xxhash 
-
-  * src/FileSystem.cpp, src/FileSystem.hpp: 
-  create dedicated temp folders with each call of dvisvgm 
-
-2020-06-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/xxHash/xxh3.h, libs/xxHash/xxhash.c, libs/xxHash/xxhash.h: 
-  updated xxHash to version 0.7.4 
-
-2020-06-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DvisvgmSpecialHandler.cpp, tests/DvisvgmSpecialTest.cpp: 
-  fixed computation of string boundaries after expanding {?(...)}
-(closes 
-  #136) 
-
-2020-05-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml: 
-  updated FreeType to version 2.10.2 
-
-2020-05-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/dvisvgm.cpp: 
-  fixed indentation 
-
-2020-04-24  John Bowman  <bowman at ualberta.ca>
-
-  * src/dvisvgm.cpp: 
-  Fix indentation. 
-
-2020-04-23  John Bowman  <bowman at ualberta.ca>
-
-  * src/dvisvgm.cpp: 
-  Return error codes to shell. 
-
-2020-04-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PathClipper.cpp, src/PathClipper.hpp, src/PsSpecialHandler.cpp: 
-  changed signature of PathClipper::intersect() 
-
-  * src/PathClipper.cpp, src/PathClipper.hpp: 
-  added unite operation to PathClipper 
-
-  * src/GraphicsPath.hpp, src/PsSpecialHandler.cpp: 
-  fixed handling of clippath/eoclip combinations 
-
-2020-04-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVGActions.cpp: 
-  fixed bbox debug rectangles 
-
-  * src/Font.cpp, src/Font.hpp: 
-  added italic correction for fake slant 
-
-  * src/DVIReader.cpp, src/DVIReader.hpp, src/FontManager.cpp: 
-  added evaluation of LuaTeX native font definitions 
-
-  * src/DVIReader.cpp: 
-  minor code improvements 
-
-2020-04-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  fixed PS operator 'eoclip' 
-
-2020-03-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/optimizer/TransformSimplifier.cpp: 
-  optimizer: fixed omission of second scale() parameter 
-
-2020-03-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Matrix.cpp: 
-  fixed parsing of "scale(s)"
-fixes #131 
-
-  * .appveyor.yml, .travis.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile, 
-    src/version.hpp: 
-  set version to 2.9.1 
-
-  * NEWS: 
-  updated NEWS 
-
-2020-03-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Calculator.cpp, tests/CalculatorTest.cpp: 
-  calculator: allow to omit '*' before '(' 
-
-2020-03-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.1, doc/dvisvgm.txt.in, src/DvisvgmSpecialHandler.cpp, 
-    tests/DvisvgmSpecialTest.cpp: 
-  added macro {?(expr)} to enable math expressions in raw specials
-closes 
-  #130 
-
-2020-03-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/Makefile.am, doc/conf-dblatex-pdf.xsl, doc/dvisvgm.txt.in, 
-    doc/generate-dvisvgm-sty.xsl, doc/tweak-dblatex-tex.py: 
-  optimize line breaks and code blocks in pdf manpage 
-
-2020-03-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/conf-dblatex-pdf.xsl: 
-  small font changes in pdf version of manual page
-- changed body font to 
-  Source Serif Pro
-- scaled monospace font by 0.9 
-
-  * src/PageRanges.cpp, src/PageRanges.hpp: 
-  removed redundant #includes 
-
-  * src/NumericRanges.hpp: 
-  replaced explicit iterator type with auto 
-
-2020-03-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS: 
-  updated NEWS and vc/README 
-
-2020-03-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.1: 
-  added generated man page to repo 
-
-2020-03-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  fixed xshow, yshow, and xyshow for multi-byte characters 
-
-2020-03-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Matrix.cpp: 
-  replaced istream::ignore() with istream::get()
-to make gcc on NetBSD 
-  happy 
-
-  * .travis.yml: 
-  travis: added packages required to build man page 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.9 
-
-2020-03-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  create image files in tmpdir instead of cwd 
-
-  * src/PsSpecialHandler.cpp: 
-  fixed mime type of JPEG images 
-
-  * src/utility.hpp: 
-  base64_copy: added parameter to set line length 
-
-  * src/XMLNode.cpp: 
-  wrap lines with base64 image data (200 chars/line) 
-
-  * doc/Makefile.am: 
-  make install: use existing dvisvgm.1 if it can't be rebuilt
-However, 
-  "make dist" and "make distcheck" should still fail if the man page
-can't 
-  be built in order to ensure the tarball always contains a recent version. 
-
-  * src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp: 
-  some code cleanup 
-
-2020-03-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/PSInterpreter.cpp: 
-  added bitmap format 'none' to disable image processing 
-
-2020-03-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.hpp, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.hpp, src/psdefs.cpp: 
-  added image support for various JPEG and PNG variants 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.hpp, src/dvisvgm.cpp, 
-    src/options.xml: 
-  added command-line option --bitmap-format 
-
-  * doc/generate-dvisvgm-sty.xsl: 
-  manual page: reduce distance of table rows 
-
-2020-03-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/xxHash/xxh3.h, libs/xxHash/xxhash.c, libs/xxHash/xxhash.h, 
-    tests/HashFunctionTest.cpp: 
-  updated xxhash to version 0.7.3 
-
-2020-03-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GlyphTracerMessages.hpp: 
-  suppress tracer messages if no font info available 
-
-  * src/MetafontWrapper.cpp, src/MetafontWrapper.hpp: 
-  added fallback method to get GF resolution applied by Metafont 
-
-2020-02-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  fixed potential segfault 
-
-  * src/Bezier.cpp, src/BoundingBox.cpp, src/Font.cpp, src/FontWriter.cpp, 
-    src/Matrix.cpp, src/TensorProductPatch.cpp, src/TriangularPatch.cpp: 
-  replaced fabs() with std::abs() 
-
-2020-02-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/XMLNode.cpp: 
-  fixed copy constructor of XMLElement 
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.hpp, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.hpp, src/psdefs.cpp, tests/PSInterpreterTest.cpp: 
-  fixed broken handling of PS tiling patterns 
-
-  * src/PSPattern.cpp: 
-  simplified loop expression 
-
-  * src/XMLNode.cpp, src/optimizer/RedundantElementRemover.cpp: 
-  don't remove clipPath elements if referenced in patterns 
-
-  * src/PsSpecialHandler.cpp: 
-  don't add clip path to path elements in pattern definitions 
-
-2020-02-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  store image counter in globaldict 
-
-  * src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, src/XMLNode.cpp, 
-    src/XMLNode.hpp, src/dvisvgm.cpp: 
-  don't keep encoded image data in memory
-To prevent memory issues, add 
-  the base64-encoded image data when serializing
-the XML tree. 
-
-  * src/PsSpecialHandler.cpp: 
-  prevent access to invalid vector component 
-
-  * src/XMLNode.cpp, src/XMLNode.hpp: 
-  prevent deep destructor recursion of XML nodes 
-
-  * src/psdefs.cpp: 
-  PS handler: prevent write access to protected pattern dictionary 
-
-2020-02-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  don't access DataSource for shading types < 4 
-
-2020-02-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  apply clip path to image if present 
-
-  * src/optimizer/TransformSimplifier.cpp: 
-  TransformSimplifier: prevent width/height from getting negative 
-
-  * src/Font.cpp, src/GraphicsPath.hpp, src/PsSpecialHandler.cpp, 
-    tests/GraphicsPathTest.cpp: 
-  changed signature of GraphicsPath::computeBBox() 
-
-2020-02-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  image operator: reset output device correctly 
-
-2020-02-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp, src/psdefs.cpp: 
-  stop image processing if PNG devices are unavailable
-Handling of PS 
-  operator 'image' relies on the GS output devices 'png16m' and
-'pnggray' 
-  (depending on the current color space). If they are unavailable, 
-  the
-image processing is stopped now instead of leaving GS with an 
-  internal error. 
-
-  * src/PsSpecialHandler.cpp: 
-  adapt bounding box to enclose embedded bitmaps 
-
-2020-02-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/EPSToSVG.hpp, src/ImageToSVG.cpp, src/ImageToSVG.hpp, 
-    src/PDFToSVG.hpp: 
-  fixed getCurrentPageNumber() for EPS and PDF files 
-
-  * src/FilePath.cpp, src/FilePath.hpp, tests/FilePathTest.cpp: 
-  FilePath::suffix("") now removes the suffix if present 
-
-  * src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, src/psdefs.cpp: 
-  sync location and base name of temporary PNG files with SVG file 
-
-  * src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, src/dvisvgm.cpp, 
-    src/psdefs.cpp: 
-  remove temporary PNG files if --keep is not given 
-
-2020-02-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  added evaluation of PS Level 1 image operators 
-
-2020-02-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Matrix.cpp, tests/MatrixTest.cpp: 
-  fixed row/column issue in Matrix::invert() 
-
-  * src/FontWriter.cpp, src/utility.hpp: 
-  added wrapper function for util::base64_copy() 
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.hpp, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.hpp, src/psdefs.cpp, tests/PSInterpreterTest.cpp: 
-  added processing of PS image operator 
-
-2020-02-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * 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: 
-  arcto: use template type for rx and ry instead of double 
-
-2020-01-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PageSize.cpp: 
-  replaced floor(x+0.5) with round(x) 
-
-2020-01-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Ghostscript.cpp: 
-  added check for libgs.dylib.N (Mac only) 
-
-2020-01-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * Makefile.am, README, README.md, configure.ac, doc/Makefile.am, 
-    doc/conf-dblatex-man.xsl, doc/conf-dblatex-pdf.xsl, doc/db2html.xsl, 
-    doc/dvisvgm.txt.in, doc/tweak-db-article.xsl, doc/tweak-db-refentry.xsl, 
-    doc/tweak-dblatex-pdf.xsl, libs/Makefile.am, 
-    libs/ff-woff/fontforge/tmpfile2.cpp, src/AGLTable.hpp, 
-    src/BasicDVIReader.cpp, src/BasicDVIReader.hpp, src/Bezier.cpp, 
-    src/Bezier.hpp, src/BgColorSpecialHandler.cpp, 
-    src/BgColorSpecialHandler.hpp, src/Bitmap.cpp, src/Bitmap.hpp, 
-    src/BoundingBox.cpp, src/BoundingBox.hpp, src/CLCommandLine.cpp, 
-    src/CLCommandLine.hpp, src/CLOption.hpp, src/CMap.cpp, src/CMap.hpp, 
-    src/CMapManager.cpp, src/CMapManager.hpp, src/CMapReader.cpp, 
-    src/CMapReader.hpp, src/Calculator.cpp, src/Calculator.hpp, 
-    src/CharMapID.cpp, src/CharMapID.hpp, src/Character.hpp, src/Color.cpp, 
-    src/Color.hpp, src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.hpp, 
-    src/CommandLine.hpp, src/DLLoader.cpp, src/DLLoader.hpp, 
-    src/DVIActions.hpp, src/DVIReader.cpp, src/DVIReader.hpp, 
-    src/DVIToSVG.cpp, src/DVIToSVG.hpp, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.hpp, src/Directory.cpp, src/Directory.hpp, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp, 
-    src/EPSFile.cpp, src/EPSFile.hpp, src/EPSToSVG.hpp, 
-    src/EllipticalArc.cpp, src/EllipticalArc.hpp, src/EmSpecialHandler.cpp, 
-    src/EmSpecialHandler.hpp, src/EncFile.cpp, src/EncFile.hpp, 
-    src/FileFinder.cpp, src/FileFinder.hpp, src/FilePath.cpp, 
-    src/FilePath.hpp, src/FileSystem.cpp, src/FileSystem.hpp, 
-    src/FixWord.hpp, src/Font.cpp, src/Font.hpp, src/FontCache.cpp, 
-    src/FontCache.hpp, src/FontEncoding.cpp, src/FontEncoding.hpp, 
-    src/FontEngine.cpp, src/FontEngine.hpp, src/FontManager.cpp, 
-    src/FontManager.hpp, src/FontMap.cpp, src/FontMap.hpp, 
-    src/FontMetrics.cpp, src/FontMetrics.hpp, src/FontStyle.hpp, 
-    src/FontWriter.cpp, src/FontWriter.hpp, src/GFGlyphTracer.cpp, 
-    src/GFGlyphTracer.hpp, src/GFReader.cpp, src/GFReader.hpp, 
-    src/GFTracer.cpp, src/GFTracer.hpp, src/Ghostscript.cpp, 
-    src/Ghostscript.hpp, src/Glyph.hpp, src/GlyphTracerMessages.hpp, 
-    src/GraphicsPath.hpp, src/HashFunction.cpp, src/HashFunction.hpp, 
-    src/HtmlSpecialHandler.cpp, src/HtmlSpecialHandler.hpp, 
-    src/HyperlinkManager.cpp, src/HyperlinkManager.hpp, src/ImageToSVG.cpp, 
-    src/ImageToSVG.hpp, src/InputBuffer.cpp, src/InputBuffer.hpp, 
-    src/InputReader.cpp, src/InputReader.hpp, src/JFM.cpp, src/JFM.hpp, 
-    src/Length.cpp, src/Length.hpp, src/MD5HashFunction.hpp, src/Makefile.am, 
-    src/MapLine.cpp, src/MapLine.hpp, src/Matrix.cpp, src/Matrix.hpp, 
-    src/Message.cpp, src/Message.hpp, src/MessageException.hpp, 
-    src/MetafontWrapper.cpp, src/MetafontWrapper.hpp, src/MiKTeXCom.cpp, 
-    src/MiKTeXCom.hpp, src/NoPsSpecialHandler.cpp, 
-    src/NoPsSpecialHandler.hpp, src/NumericRanges.hpp, src/PDFParser.cpp, 
-    src/PDFParser.hpp, src/PDFToSVG.hpp, src/PSFilter.hpp, 
-    src/PSInterpreter.cpp, src/PSInterpreter.hpp, src/PSPattern.cpp, 
-    src/PSPattern.hpp, src/PSPreviewFilter.cpp, src/PSPreviewFilter.hpp, 
-    src/PageRanges.cpp, src/PageRanges.hpp, src/PageSize.cpp, 
-    src/PageSize.hpp, src/Pair.hpp, src/PapersizeSpecialHandler.cpp, 
-    src/PapersizeSpecialHandler.hpp, src/PathClipper.cpp, 
-    src/PathClipper.hpp, src/PdfSpecialHandler.cpp, 
-    src/PdfSpecialHandler.hpp, src/PreScanDVIReader.cpp, 
-    src/PreScanDVIReader.hpp, src/Process.cpp, src/Process.hpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, src/RangeMap.cpp, 
-    src/RangeMap.hpp, src/SVGCharHandler.cpp, src/SVGCharHandler.hpp, 
-    src/SVGCharHandlerFactory.cpp, src/SVGCharHandlerFactory.hpp, 
-    src/SVGCharPathHandler.cpp, src/SVGCharPathHandler.hpp, 
-    src/SVGCharTspanTextHandler.cpp, src/SVGCharTspanTextHandler.hpp, 
-    src/SVGOutput.cpp, src/SVGOutput.hpp, src/SVGSingleCharTextHandler.cpp, 
-    src/SVGSingleCharTextHandler.hpp, src/SVGTree.cpp, src/SVGTree.hpp, 
-    src/ShadingPatch.cpp, src/ShadingPatch.hpp, src/SignalHandler.cpp, 
-    src/SignalHandler.hpp, src/SourceInput.cpp, src/SourceInput.hpp, 
-    src/SpecialActions.hpp, src/SpecialHandler.hpp, src/SpecialManager.cpp, 
-    src/SpecialManager.hpp, src/StreamReader.cpp, src/StreamReader.hpp, 
-    src/StreamWriter.cpp, src/StreamWriter.hpp, src/Subfont.cpp, 
-    src/Subfont.hpp, src/System.cpp, src/System.hpp, src/TFM.cpp, 
-    src/TFM.hpp, src/TTFAutohint.cpp, src/TTFAutohint.hpp, 
-    src/TensorProductPatch.cpp, src/TensorProductPatch.hpp, src/Terminal.cpp, 
-    src/Terminal.hpp, src/ToUnicodeMap.cpp, src/ToUnicodeMap.hpp, 
-    src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.hpp, 
-    src/TriangularPatch.cpp, src/TriangularPatch.hpp, src/TrueTypeFont.cpp, 
-    src/TrueTypeFont.hpp, src/Unicode.cpp, src/Unicode.hpp, 
-    src/VFActions.hpp, src/VFReader.cpp, src/VFReader.hpp, 
-    src/VectorIterator.hpp, src/VectorStream.hpp, src/XMLDocument.cpp, 
-    src/XMLDocument.hpp, src/XMLNode.cpp, src/XMLNode.hpp, src/XMLString.cpp, 
-    src/XMLString.hpp, src/XXHashFunction.hpp, src/ZLibOutputStream.hpp, 
-    src/dvisvgm.cpp, src/ffwrapper.c, src/ffwrapper.h, src/macros.hpp, 
-    src/optimizer/AttributeExtractor.cpp, 
-    src/optimizer/AttributeExtractor.hpp, src/optimizer/DependencyGraph.hpp, 
-    src/optimizer/GroupCollapser.cpp, src/optimizer/GroupCollapser.hpp, 
-    src/optimizer/OptimizerModule.hpp, 
-    src/optimizer/RedundantElementRemover.cpp, 
-    src/optimizer/RedundantElementRemover.hpp, 
-    src/optimizer/SVGOptimizer.cpp, src/optimizer/SVGOptimizer.hpp, 
-    src/optimizer/TextSimplifier.cpp, src/optimizer/TextSimplifier.hpp, 
-    src/optimizer/TransformSimplifier.cpp, 
-    src/optimizer/TransformSimplifier.hpp, src/optimizer/WSNodeRemover.cpp, 
-    src/optimizer/WSNodeRemover.hpp, src/options.dtd, src/options.xml, 
-    src/psdefs.cpp, src/utility.cpp, src/utility.hpp, src/version.hpp, 
-    src/version.hpp.in, src/windows.hpp, tests/BezierTest.cpp, 
-    tests/BitmapTest.cpp, tests/BoundingBoxTest.cpp, 
-    tests/CMapManagerTest.cpp, tests/CMapReaderTest.cpp, tests/CMapTest.cpp, 
-    tests/CalculatorTest.cpp, tests/ColorSpecialTest.cpp, 
-    tests/ColorTest.cpp, tests/CommandLineTest.cpp, tests/DVIReaderTest.cpp, 
-    tests/DependencyGraphTest.cpp, tests/DirectoryTest.cpp, 
-    tests/DvisvgmSpecialTest.cpp, tests/EllipticalArcTest.cpp, 
-    tests/EmSpecialTest.cpp, tests/FileFinderTest.cpp, 
-    tests/FilePathTest.cpp, tests/FileSystemTest.cpp, 
-    tests/FontCacheTest.cpp, tests/FontManagerTest.cpp, 
-    tests/FontMapTest.cpp, tests/GFGlyphTracerTest.cpp, 
-    tests/GFReaderTest.cpp, tests/GhostscriptTest.cpp, 
-    tests/GraphicsPathTest.cpp, tests/HashFunctionTest.cpp, 
-    tests/JFMReaderTest.cpp, tests/LengthTest.cpp, tests/Makefile.am, 
-    tests/MapLineTest.cpp, tests/MatrixTest.cpp, 
-    tests/MessageExceptionTest.cpp, tests/PDFParserTest.cpp, 
-    tests/PSInterpreterTest.cpp, tests/PageRagesTest.cpp, 
-    tests/PageSizeTest.cpp, tests/PairTest.cpp, 
-    tests/PapersizeSpecialTest.cpp, tests/RangeMapTest.cpp, 
-    tests/SVGOutputTest.cpp, tests/ShadingPatchTest.cpp, 
-    tests/SpecialManagerTest.cpp, tests/SplittedCharInputBufferTest.cpp, 
-    tests/StreamInputBufferTest.cpp, tests/StreamReaderTest.cpp, 
-    tests/StreamWriterTest.cpp, tests/StringMatcherTest.cpp, 
-    tests/SubfontTest.cpp, tests/TFMReaderTest.cpp, 
-    tests/TensorProductPatchTest.cpp, tests/ToUnicodeMapTest.cpp, 
-    tests/TpicSpecialTest.cpp, tests/TriangularPatchTest.cpp, 
-    tests/UnicodeTest.cpp, tests/UtilityTest.cpp, 
-    tests/VectorIteratorTest.cpp, tests/VectorStreamTest.cpp, 
-    tests/XMLNodeTest.cpp, tests/XMLStringTest.cpp, tests/check-conv, 
-    tests/create-makefile, tests/data/Makefile.am, tests/genhashcheck.py, 
-    tests/normalize.xsl, tests/testmain.cpp: 
-  updated year in copyright statements to 2020 
-
-2019-12-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in: 
-  few additions to the manual page 
-
-2019-12-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS: 
-  updated NEWS 
-
-2019-12-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.8.2 
-
-2019-12-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FileSystem.cpp: 
-  convert path separators only in Windows binaries 
-
-  * src/Process.cpp: 
-  Subprocess: handle absolute path to executable correctly 
-
-  * src/FileFinder.cpp, src/FileFinder.hpp: 
-  added FileFinder::lookupExecutable() 
-
-  * src/MetafontWrapper.cpp: 
-  call 'mf-nowin' instead of 'mf' if available (closes #121) 
-
-2019-12-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PSInterpreter.cpp: 
-  adapt path separators before passing them to Ghostscript
-closes #123 
-
-  * src/FilePath.cpp, src/FileSystem.cpp, src/FileSystem.hpp, 
-    src/PSInterpreter.cpp, src/PsSpecialHandler.cpp, src/dvisvgm.cpp: 
-  renamed adaptPathSeperators() to ensureForwardSlashes() 
-
-  * src/Calculator.hpp, src/CharMapID.hpp, src/Color.hpp, src/Directory.cpp, 
-    src/Directory.hpp, src/FixWord.hpp, src/FontStyle.hpp, 
-    src/GFGlyphTracer.cpp, src/GFGlyphTracer.hpp, src/GFReader.cpp, 
-    src/GFReader.hpp, src/GFTracer.cpp, src/GFTracer.hpp, 
-    src/GlyphTracerMessages.hpp, src/HtmlSpecialHandler.hpp, 
-    src/HyperlinkManager.hpp, src/Length.hpp, src/NoPsSpecialHandler.hpp, 
-    src/PSPreviewFilter.cpp, src/PSPreviewFilter.hpp, src/PathClipper.hpp, 
-    src/PreScanDVIReader.cpp, src/PreScanDVIReader.hpp, src/Process.cpp, 
-    src/PsSpecialHandler.hpp, src/RangeMap.hpp, src/SVGOutput.cpp, 
-    src/SVGOutput.hpp, src/SignalHandler.cpp, src/SignalHandler.hpp, 
-    src/TFM.hpp, src/VFReader.cpp, src/VFReader.hpp, src/VectorStream.hpp: 
-  simplified constructors, avoid constant initializers 
-
-  * src/FileSystem.cpp, src/FileSystem.hpp: 
-  removed redundant class variable 
-
-  * src/MiKTeXCom.cpp: 
-  fixed type mismatch of FindFile expression 
-
-2019-12-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  fixed handling of 'nulldevice' in PS operator 'restore'
-closes #122 
-
-2019-11-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GraphicsPath.hpp: 
-  added missing namespace prefix to pow() 
-
-2019-11-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, README.md: 
-  updated NEWS and README 
-
-2019-11-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.8.1 
-
-  * doc/dvisvgm.txt.in: 
-  some minor changes of the manual page 
-
-2019-11-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  added newline at end of file 
-
-2019-11-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/optimizer/GroupCollapser.hpp: 
-  made GroupCollapser::moveAttributes() static 
-
-  * doc/dvisvgm.txt.in, src/optimizer/Makefile.am, 
-    src/optimizer/SVGOptimizer.cpp, src/optimizer/TextSimplifier.cpp, 
-    src/optimizer/TextSimplifier.hpp: 
-  added optimizer module TextSimplifier 
-
-  * doc/dvisvgm.txt.in, src/XMLNode.hpp, 
-    src/optimizer/AttributeExtractor.hpp, src/optimizer/TextSimplifier.cpp: 
-  extended functionality of optimizer module 'simplify-text'
-- common 
-  attributes of tspans are moved to the enclosing text element
-- tspans 
-  without attributes are unwrapped 
-
-2019-11-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVGActions.cpp, src/DVIToSVGActions.hpp, 
-    src/EmSpecialHandler.cpp, src/EmSpecialHandler.hpp: 
-  removed some constant initializers from constructors 
-
-  * src/DVIToSVGActions.cpp, src/DVIToSVGActions.hpp, 
-    src/EmSpecialHandler.cpp, src/PSInterpreter.cpp, src/PSInterpreter.hpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, 
-    src/SpecialActions.hpp, src/TpicSpecialHandler.cpp, src/psdefs.cpp, 
-    tests/PSInterpreterTest.cpp: 
-  added support for PS operator 'nulldevice' 
-
-2019-10-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FileFinder.cpp: 
-  added PNG, JPEG, and SVG to supported formats of FileFinder 
-
-  * src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp: 
-  psfile: create absolute or relative paths to reference images
-depending 
-  on the file location and the file path given by the user 
-
-2019-10-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FilePath.cpp, src/FilePath.hpp: 
-  added method to check if a path is absolute or relative 
-
-2019-10-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CMapReader.cpp, src/CMapReader.hpp, tests/CMapReaderTest.cpp: 
-  CMapReader: extracted common code; added test for 'begincidchar' 
-
-2019-10-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/Makefile.am, tests/create-makefile: 
-  added missing gtest file to distribution 
-
-  * tests/FontCacheTest.cpp: 
-  remove temporary files created by FontCacheTest 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.8 
-
-  * NEWS: 
-  updated NEWS 
-
-2019-10-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CMapReader.cpp, src/CMapReader.hpp: 
-  CMapReader: added support for operator 'begincidchar' (patch by Akira 
-  Kakuto) 
-
-2019-10-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVG.cpp, src/DVIToSVG.hpp, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.hpp, src/FilePath.cpp, src/FilePath.hpp, 
-    src/HyperlinkManager.cpp, src/ImageToSVG.cpp, src/ImageToSVG.hpp, 
-    src/PDFToSVG.hpp, src/SVGOutput.cpp, src/SVGOutput.hpp, 
-    src/SpecialActions.hpp, tests/FilePathTest.cpp, tests/SVGOutputTest.cpp: 
-  SVGOutput: renamed 'filename' to 'filepath'; changed return type to 
-  FilePath 
-
-2019-10-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/gtest/include/gtest/gtest-death-test.h, 
-    tests/gtest/include/gtest/gtest-matchers.h, 
-    tests/gtest/include/gtest/gtest-message.h, 
-    tests/gtest/include/gtest/gtest-param-test.h, 
-    tests/gtest/include/gtest/gtest-printers.h, 
-    tests/gtest/include/gtest/gtest-spi.h, 
-    tests/gtest/include/gtest/gtest-test-part.h, 
-    tests/gtest/include/gtest/gtest-typed-test.h, 
-    tests/gtest/include/gtest/gtest.h, 
-    tests/gtest/include/gtest/gtest_pred_impl.h, 
-    tests/gtest/include/gtest/internal/gtest-death-test-internal.h, 
-    tests/gtest/include/gtest/internal/gtest-filepath.h, 
-    tests/gtest/include/gtest/internal/gtest-internal.h, 
-    tests/gtest/include/gtest/internal/gtest-param-util.h, 
-    tests/gtest/include/gtest/internal/gtest-port-arch.h, 
-    tests/gtest/include/gtest/internal/gtest-port.h, 
-    tests/gtest/include/gtest/internal/gtest-string.h, 
-    tests/gtest/include/gtest/internal/gtest-type-util.h, 
-    tests/gtest/src/gtest-all.cc, tests/gtest/src/gtest-death-test.cc, 
-    tests/gtest/src/gtest-filepath.cc, tests/gtest/src/gtest-internal-inl.h, 
-    tests/gtest/src/gtest-matchers.cc, tests/gtest/src/gtest-port.cc, 
-    tests/gtest/src/gtest-printers.cc, tests/gtest/src/gtest-test-part.cc, 
-    tests/gtest/src/gtest-typed-test.cc, tests/gtest/src/gtest.cc, 
-    tests/gtest/src/gtest_main.cc, tests/testutil.hpp: 
-  updated gtest to version 1.10 
-
-  * src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp: 
-  psfile: added support for PDF, JPG, PNG, and SVG files 
-
-  * src/optimizer/TransformSimplifier.cpp, 
-    src/optimizer/TransformSimplifier.hpp: 
-  try to incorporate transformations into positional and size attributes 
-
-  * src/PsSpecialHandler.cpp: 
-  PS handler: minor code enhancements 
-
-2019-10-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PSInterpreter.cpp: 
-  call GS with -dDELAYSAFER if GS version >= 9.50
-Ghostscript 9.50 
-  introduced incompatible changes regarding SAFER which is now
-active by 
-  default. This conflicts with DELAYBIND and WRITESYSTEMDICT, which 
-  are
-necessary for dvisvgm to work 
-  correctly.
-https://www.ghostscript.com/doc/9.50/Use.htm#Safer 
-
-  * tests/HashFunctionTest.cpp: 
-  adapted XXH128 tests to changes in xxhash 0.7.2 
-
-2019-10-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/xxHash/xxh3.h, libs/xxHash/xxhash.c, libs/xxHash/xxhash.h: 
-  updated xxhash to version 0.7.2 
-
-2019-10-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/EllipticalArc.cpp: 
-  minor changes in EllipticalArc.cpp 
-
-2019-09-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PathClipper.cpp: 
-  prevent warnings about uninitialized variables 
-
-2019-09-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/potrace/auxiliary.h, libs/potrace/bitmap.h, libs/potrace/config.h, 
-    libs/potrace/curve.c, libs/potrace/curve.h, libs/potrace/decompose.c, 
-    libs/potrace/decompose.h, libs/potrace/lists.h, 
-    libs/potrace/potracelib.c, libs/potrace/potracelib.h, 
-    libs/potrace/progress.h, libs/potrace/trace.c, libs/potrace/trace.h: 
-  updated potrace to version 1.16 
-
-  * src/Bitmap.cpp, src/Bitmap.hpp: 
-  minor code cleanup of Bitmap class 
-
-2019-09-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GraphicsPath.hpp: 
-  renamed misspelled variables 'largeArgFlag' to 'largeArcFlag' 
-
-  * src/EllipticalArc.cpp: 
-  removed #include "debug.h" 
-
-2019-09-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/woff2/src/glyph.cc, libs/woff2/src/normalize.cc: 
-  fixed two compiler warnings in libwoff2
-regarding signed/unsigned 
-  comparison 
-
-2019-08-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/XXHashFunction.hpp, tests/HashFunctionTest.cpp: 
-  simplified implementation of XXHashFunction::digestValue() and tests 
-
-2019-08-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/StreamReader.cpp, src/StreamReader.hpp, src/VFReader.cpp, 
-    tests/StreamReaderTest.cpp: 
-  removed vector reference from StreamReader::readBytes() 
-
-  * src/CRC32.cpp, src/CRC32.hpp, src/FontCache.cpp, src/FontCache.hpp, 
-    src/HashFunction.cpp, src/HashFunction.hpp, src/Makefile.am, 
-    src/StreamReader.cpp, src/StreamReader.hpp, src/StreamWriter.cpp, 
-    src/StreamWriter.hpp, src/XXHashFunction.hpp, src/utility.hpp, 
-    tests/CRC32Test.cpp, tests/FontCacheTest.cpp, tests/Makefile.am, 
-    tests/StreamReaderTest.cpp, tests/StreamWriterTest.cpp: 
-  replaced CRC32 cache checksums with XXH32 hashes 
-
-2019-08-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, libs/xxHash/xxhash.h, src/HashFunction.cpp, 
-    src/XXHashFunction.hpp, tests/HashFunctionTest.cpp: 
-  added support for the experimental 128-bit XXH3 algorithm 
-
-2019-08-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GraphicsPath.hpp: 
-  avoid redundant sequences of closepath (z/Z) commands 
-
-2019-08-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GraphicsPath.hpp, tests/GraphicsPathTest.cpp: 
-  added short versions of 'quadto' and 'cubicto' to GraphicsPath 
-
-2019-08-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/TpicSpecialHandler.cpp, tests/TpicSpecialTest.cpp: 
-  use class EllipticalArc to process arcs in tpic handler 
-
-2019-08-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/xxHash/Makefile.am, libs/xxHash/xxh3.h, libs/xxHash/xxhash.c, 
-    libs/xxHash/xxhash.h: 
-  updated xxhash to version 0.7.1 
-
-  * src/DVIToSVG.cpp: 
-  print error message on wrong page hash arguments 
-
-2019-08-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/EllipticalArc.cpp, src/EllipticalArc.hpp, src/GraphicsPath.hpp, 
-    tests/EllipticalArcTest.cpp, tests/GraphicsPathTest.cpp: 
-  added GraphicsPath::approximateArcs() 
-
-2019-08-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Bezier.cpp, src/Bezier.hpp, src/EllipticalArc.cpp, 
-    src/EllipticalArc.hpp, src/GraphicsPath.hpp, src/Makefile.am, 
-    src/Pair.hpp, src/utility.cpp, src/utility.hpp, 
-    tests/EllipticalArcTest.cpp, tests/Makefile.am: 
-  added support of 'arcto' command to class GraphicsPath 
-
-2019-08-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Bezier.cpp, src/Bezier.hpp, src/PsSpecialHandler.cpp, 
-    src/ShadingPatch.hpp, src/TensorProductPatch.cpp, 
-    src/TensorProductPatch.hpp, src/TriangularPatch.cpp, 
-    src/TriangularPatch.hpp, tests/BezierTest.cpp, 
-    tests/TensorProductPatchTest.cpp, tests/TriangularPatchTest.cpp: 
-  getBBox(): replaced reference parameter with return value 
-
-  * src/PsSpecialHandler.cpp, src/ShadingPatch.hpp, 
-    src/TensorProductPatch.cpp, src/TensorProductPatch.hpp, 
-    src/TriangularPatch.cpp, src/TriangularPatch.hpp, 
-    tests/TensorProductPatchTest.cpp, tests/TriangularPatchTest.cpp: 
-  getBoundaryPath(): replaced reference parameter with return value 
-
-2019-08-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Color.cpp, src/Pair.hpp: 
-  use std::hypot() to compute length of vector 
-
-2019-08-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/MD5HashFunction.hpp: 
-  removed 'explicit' from default constructor
-Work around for C++11 bug in 
-  GCC 4.8:
-https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58255 
-
-  * src/FontCache.cpp, src/FontEngine.cpp, src/FontWriter.cpp, 
-    src/GraphicsPath.hpp, src/Pair.hpp, src/PathClipper.cpp, 
-    src/TpicSpecialHandler.cpp, src/optimizer/CMakeLists.txt, 
-    src/optimizer/Makefile.am, tests/FontCacheTest.cpp, 
-    tests/GraphicsPathTest.cpp: 
-  redesigned implementation of class GraphicsPath
-- use variant instances 
-  to store path commands instead of plain structs
-- process commands in 
-  visitor objects
-- removed GraphicsPath::Actions::draw() that exposed 
-  implemenation details
-- simplify iterate() method 
-
-2019-07-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontCache.cpp: 
-  use direct string concatenation instead of temporary string stream 
-
-2019-07-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/Makefile.am: 
-  added missing dependency to Makefile rule 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.7.4 
-
-  * NEWS: 
-  updated NEWS 
-
-2019-07-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/Makefile.am: 
-  moved generation of dvisvgm.sty to separate rule 
-
-2019-07-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Color.cpp: 
-  use std::round to round color value (fixes #116) 
-
-  * doc/Makefile.am, doc/dvisvgm.sty, doc/dvisvgm.txt.in, 
-    doc/generate-dvisvgm-sty.xsl, doc/tweak-db-article.xsl, 
-    doc/tweak-db-refentry.xsl: 
-  show revision date given in doc/dvisvgm.txt on manual page
-rather than 
-  the build date 
-
-2019-07-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/TrueTypeFont.cpp: 
-  call ofstream constructor with std::string instead of C string 
-
-2019-07-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/MetafontWrapper.cpp: 
-  replaced atoi() with stoi() 
-
-2019-07-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/MetafontWrapper.cpp: 
-  don't access moved string 
-
-  * doc/dvisvgm.txt.in, src/dvisvgm.cpp: 
-  changed cache location to $XDG_CACHE_HOME/dvisvgm
-or ~/.cache/dvisvgm if 
-  $XDG_CACHE_HOME is not set (closes #112) 
-
-2019-07-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.7.3 
-
-  * NEWS: 
-  updated NEWS 
-
-2019-07-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/XMLString.cpp, src/utility.cpp, src/utility.hpp, 
-    tests/UtilityTest.cpp: 
-  added util::to_string(double) that strips trailing zeros
-(in contrast to 
-  std::to_string) 
-
-  * src/CMapManager.cpp, src/CMapReader.cpp, src/DVIReader.cpp, 
-    src/GFReader.cpp, src/JFM.cpp, src/Length.cpp, src/MapLine.cpp, 
-    src/Matrix.cpp, src/PDFParser.cpp, src/SVGOutput.cpp, src/VFReader.cpp: 
-  replaced some string streams with plain strings 
-
-2019-07-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README.md: 
-  updated badges in README 
-
-  * src/Font.cpp, src/Font.hpp, src/dvisvgm.cpp: 
-  changed type of CACHE_PATH to std::string 
-
-2019-07-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .github/FUNDING.yml: 
-  added funding.yml 
-
-2019-07-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVG.cpp: 
-  properly assign collected chars to unique fonts (fixes #110) 
-
-2019-06-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in: 
-  manpage: updated \special example 
-
-2019-06-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BasicDVIReader.cpp: 
-  replaced string streams with plain strings 
-
-2019-06-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/genhashcheck.py: 
-  use range-based loop to iterate over C array 
-
-2019-06-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.7.2 
-
-  * NEWS: 
-  updated NEWS 
-
-2019-05-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  'GS_PDF_ProcSet' and 'pdfdict' are private as of GS 9.27
-As a workaround 
-  'runpdfbegin' and 'runpdfend' can be used to enter/leave the 
-  dictionaries. 
-
-2019-05-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.7.1 
-
-  * NEWS: 
-  updated NEWS 
-
-2019-05-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .gitignore, src/MiKTeXCom.hpp: 
-  added files required to access the MiKTeX session object 
-
-2019-05-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  pop unused operand in PS operator 'setmatrix'  (closes #106) 
-
-2019-04-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/optimizer/AttributeExtractor.cpp, src/optimizer/GroupCollapser.cpp, 
-    src/utility.hpp: 
-  removed util::make_array() due to compatibility 
-  issues
-https://trac.macports.org/ticket/58347 
-
-2019-04-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README, README.md: 
-  updated URL of FontForge website 
-
-2019-04-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README.md: 
-  removed Coverity badge as the service seems to be dead 
-
-2019-04-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Makefile.am: 
-  add file windows.hpp to source tarball 
-
-2019-04-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.7 
-
-  * NEWS: 
-  updated NEWS 
-
-2019-04-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/DvisvgmSpecialHandler.cpp: 
-  added specials "bbox lock" and "bbox unlock" to lock/unlock the page 
-  bbox
-(closes #105) 
-
-  * doc/dvisvgm.txt.in, src/DvisvgmSpecialHandler.cpp: 
-  added optional modifier 'transform' to the dvisvgm:bbox specials 
-
-  * doc/dvisvgm.txt.in, src/DvisvgmSpecialHandler.cpp: 
-  added macro {?matrix} to raw specials 
-
-2019-04-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Bezier.cpp, src/BoundingBox.hpp, src/CMap.hpp, src/CMapReader.hpp, 
-    src/Character.hpp, src/Color.hpp, src/DLLoader.hpp, src/Directory.cpp, 
-    src/Directory.hpp, src/DvisvgmSpecialHandler.cpp, src/EPSFile.hpp, 
-    src/EncFile.hpp, src/FilePath.hpp, src/Font.hpp, src/FontEncoding.hpp, 
-    src/FontMap.hpp, src/FontWriter.cpp, src/FontWriter.hpp, 
-    src/GFTracer.hpp, src/GlyphTracerMessages.hpp, src/GraphicsPath.hpp, 
-    src/InputBuffer.hpp, src/InputReader.hpp, src/JFM.hpp, src/Length.hpp, 
-    src/MD5HashFunction.hpp, src/MapLine.hpp, src/Matrix.cpp, src/Matrix.hpp, 
-    src/Message.hpp, src/PDFParser.cpp, src/PDFParser.hpp, src/PSPattern.hpp, 
-    src/PSPreviewFilter.hpp, src/PageSize.hpp, src/Pair.hpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, 
-    src/SVGCharHandler.hpp, src/SVGCharTspanTextHandler.hpp, 
-    src/SVGOutput.hpp, src/SVGSingleCharTextHandler.hpp, 
-    src/ShadingPatch.hpp, src/SourceInput.hpp, src/StreamReader.hpp, 
-    src/StreamWriter.hpp, src/TFM.hpp, src/TensorProductPatch.hpp, 
-    src/TriangularPatch.hpp, src/TrueTypeFont.hpp, src/VFReader.cpp, 
-    src/VFReader.hpp, src/VectorIterator.hpp, src/VectorStream.hpp, 
-    src/XMLDocument.hpp, src/XMLString.hpp, src/XXHashFunction.hpp, 
-    src/optimizer/DependencyGraph.hpp: 
-  marked most constructors 'explicit' if they may be called with a single 
-  parameter 
-
-  * src/DVIReader.cpp, src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, 
-    src/Font.cpp, src/FontEngine.cpp, src/FontManager.cpp, 
-    src/HyperlinkManager.cpp, src/ImageToSVG.cpp, src/PDFParser.hpp, 
-    src/PSInterpreter.cpp, src/PdfSpecialHandler.cpp, 
-    src/PsSpecialHandler.cpp, src/SVGCharHandler.cpp, 
-    src/SVGCharPathHandler.cpp, src/SVGCharTspanTextHandler.cpp, 
-    src/SVGTree.cpp, src/TensorProductPatch.cpp, src/TriangularPatch.cpp, 
-    src/TrueTypeFont.cpp: 
-  use automatic type deduction in conjunction with casts 
-
-  * src/EPSFile.cpp, src/EmSpecialHandler.cpp, src/EncFile.cpp, 
-    src/InputReader.cpp, src/PSInterpreter.cpp, src/PsSpecialHandler.cpp, 
-    src/SpecialManager.cpp, src/StreamReader.cpp, src/Subfont.cpp, 
-    src/Unicode.cpp, src/dvisvgm.cpp: 
-  explicitly cast integers representing characeters to char 
-
-  * src/CLCommandLine.hpp, src/DvisvgmSpecialHandler.cpp, 
-    src/DvisvgmSpecialHandler.hpp, src/EncFile.cpp, src/Font.cpp, 
-    src/Font.hpp, src/MetafontWrapper.cpp, src/MetafontWrapper.hpp, 
-    src/Process.cpp, src/Process.hpp, src/SVGOutput.cpp, src/SVGOutput.hpp, 
-    src/Subfont.cpp, src/Subfont.hpp: 
-  if possible, move string parameters instead of copying them 
-
-  * src/Color.cpp, src/FontEngine.cpp, src/PathClipper.cpp: 
-  use std::lround() rather than truncation 
-
-  * src/DVIActions.hpp, src/DVIToSVGActions.hpp, src/Font.hpp, 
-    src/PSInterpreter.cpp, src/SignalHandler.cpp, src/System.cpp: 
-  replaced 0 and NULL with nullptr 
-
-  * src/Message.cpp, src/Message.hpp: 
-  drop 'const' from char parameter 
-
-  * src/EPSFile.cpp: 
-  replaced C array with std::array 
-
-  * src/SpecialManager.hpp, src/ZLibOutputStream.hpp: 
-  made deleted constructor public; use 'default' with default constructor 
-
-  * src/PageSize.cpp: 
-  removed redundant semicolons 
-
-2019-04-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/RangeMap.cpp, tests/RangeMapTest.cpp: 
-  use std::accumulate() to compute the number of values mapped by a 
-  RangeMap 
-
-2019-04-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in: 
-  reworded some paragraphs on the manpage 
-
-2019-04-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DvisvgmSpecialHandler.cpp, src/HtmlSpecialHandler.cpp, 
-    src/InputReader.cpp, src/InputReader.hpp, src/PsSpecialHandler.cpp, 
-    tests/StreamInputBufferTest.cpp: 
-  optionally allow 'flags' (attributes w/o values) in attribute lists 
-
-  * src/PsSpecialHandler.cpp: 
-  psfile/pdffile: evaluate boolean attribute 'clip'
-If given, the drawing 
-  region is clipped to the bounding box of the
-EPS/PDF page being 
-  processed.
-(closes #104) 
-
-  * .appveyor.yml: 
-  AppVeyor: switched build image to VS 2019 Preview 
-
-2019-04-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml: 
-  AppVeyor: updated release number of ttfautohint-dll 
-
-  * m4/ax_cxx_compile_stdcxx.m4: 
-  updated ax_cxx_compile_stdcxx.m4 to version 11 
-
-2019-04-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml: 
-  AppVeyor: set freetype version to 2.10.0; use current image of VS 2017 
-  again 
-
-  * src/SVGTree.cpp: 
-  fixed gcc 5 failure regarding initializer lists 
-
-  * src/FileFinder.cpp: 
-  pdffile special: look for pdf files in texmf tree too (closes #103) 
-
-2019-04-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/optimizer/GroupCollapser.cpp: 
-  group collapser: unwrap groups without attributes 
-
-  * src/DVIToSVGActions.hpp, src/DvisvgmSpecialHandler.cpp, 
-    src/DvisvgmSpecialHandler.hpp, src/EmSpecialHandler.cpp, 
-    src/HyperlinkManager.cpp, src/ImageToSVG.hpp, src/PSPattern.cpp, 
-    src/PsSpecialHandler.cpp, src/SpecialActions.hpp, 
-    src/TpicSpecialHandler.cpp, tests/DvisvgmSpecialTest.cpp, 
-    tests/EmSpecialTest.cpp, tests/TpicSpecialTest.cpp: 
-  reduced interface of SpecialActions
-- removed append/prepend and context 
-  functions
-- added direct access to the SVGTree object 
-
-2019-03-31  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/XMLNode.cpp, src/XMLNode.hpp, src/optimizer/AttributeExtractor.cpp, 
-    src/optimizer/AttributeExtractor.hpp, src/optimizer/GroupCollapser.cpp, 
-    src/optimizer/RedundantElementRemover.cpp, 
-    src/optimizer/TransformSimplifier.cpp, src/optimizer/WSNodeRemover.cpp, 
-    tests/BoundingBoxTest.cpp, tests/TpicSpecialTest.cpp, 
-    tests/XMLNodeTest.cpp: 
-  refactored the implementation of the XML node classes
-for easier 
-  modifications of the XML tree 
-
-2019-03-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/ff-woff/Makefile.am: 
-  added missing zlib include path to ff-woff 
-
-  * src/CMapReader.cpp: 
-  properly release memory if CMap throws an exception 
-
-2019-03-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GraphicsPath.hpp: 
-  skip redundant line drawing commands in path elements 
-
-2019-03-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/XMLString.cpp, tests/DVIReaderTest.cpp, tests/GFGlyphTracerTest.cpp, 
-    tests/MatrixTest.cpp: 
-  replace "0." by "." in floating point numbers |x| < 1 
-
-  * src/GraphicsPath.hpp, tests/GFGlyphTracerTest.cpp: 
-  avoid redundant space characters in SVG paths 
-
-  * src/GraphicsPath.hpp, tests/TpicSpecialTest.cpp: 
-  take precision into account when checking for reflection points 
-
-2019-03-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Matrix.cpp, src/Matrix.hpp, tests/MatrixTest.cpp: 
-  made Matrix::parse() a static member 
-
-  * configure.ac, doc/dvisvgm.txt.in, src/CommandLine.hpp, src/DVIToSVG.cpp, 
-    src/DependencyGraph.hpp, src/ImageToSVG.cpp, src/Makefile.am, 
-    src/SVGOptimizer.cpp, src/SVGOptimizer.hpp, src/SVGTree.cpp, 
-    src/XMLNode.cpp, src/dvisvgm.cpp, src/optimizer/AttributeExtractor.cpp, 
-    src/optimizer/AttributeExtractor.hpp, src/optimizer/CMakeLists.txt, 
-    src/optimizer/DependencyGraph.hpp, src/optimizer/GroupCollapser.cpp, 
-    src/optimizer/GroupCollapser.hpp, src/optimizer/Makefile.am, 
-    src/optimizer/OptimizerModule.hpp, 
-    src/optimizer/RedundantElementRemover.cpp, 
-    src/optimizer/RedundantElementRemover.hpp, 
-    src/optimizer/SVGOptimizer.cpp, src/optimizer/SVGOptimizer.hpp, 
-    src/optimizer/TransformSimplifier.cpp, 
-    src/optimizer/TransformSimplifier.hpp, src/optimizer/WSNodeRemover.cpp, 
-    src/optimizer/WSNodeRemover.hpp, src/options.xml, 
-    tests/DependencyGraphTest.cpp, tests/Makefile.am, tests/create-makefile: 
-  moved optimizer classes to subdirectory 
-
-2019-03-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Matrix.cpp, src/Matrix.hpp, src/PsSpecialHandler.cpp, 
-    tests/MatrixTest.cpp: 
-  swapped Matrix::lmultiply and Matrix::rmultiply 
-
-  * src/Matrix.cpp, src/Matrix.hpp, src/SVGOptimizer.cpp, 
-    src/SVGOptimizer.hpp, src/utility.hpp, tests/MatrixTest.cpp: 
-  added optimizer to simplify 'transform' attributes 
-
-2019-03-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/SVGOptimizer.cpp, src/SVGOptimizer.hpp, src/XMLNode.cpp, 
-    src/XMLNode.hpp: 
-  remove whitespace nodes before collapsing group elements 
-
-2019-03-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/InputBuffer.hpp: 
-  added StringInputBuffer::assign() to assign a different string 
-
-  * src/InputReader.cpp, tests/StreamInputBufferTest.cpp: 
-  replaced constraints for attribute names
-- must start with a letter
-- 
-  may contain selected non-alphanumeric characters, like '-', '_', and '.' 
-
-  * doc/dvisvgm.txt.in, src/DvisvgmSpecialHandler.cpp, 
-    src/DvisvgmSpecialHandler.hpp, src/SVGTree.cpp, src/XMLNode.cpp, 
-    tests/DvisvgmSpecialTest.cpp: 
-  allow split tags distributed over several dvisvgm:raw specials 
-
-2019-03-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BgColorSpecialHandler.cpp, src/PSPattern.cpp, src/PageRanges.cpp, 
-    src/PathClipper.cpp, src/RangeMap.cpp: 
-  use type 'auto' for local iterator variables 
-
-  * src/FilePath.hpp, src/Font.hpp, src/ImageToSVG.hpp, src/PDFParser.hpp, 
-    src/SVGOutput.hpp, src/Subfont.hpp, src/XMLNode.cpp, src/XMLNode.hpp: 
-  use move semantics to initialize string members 
-
-2019-03-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BasicDVIReader.hpp, src/DVIToSVG.hpp, src/Subfont.hpp: 
-  deleted constructors should be public 
-
-  * src/Bezier.cpp, src/Bezier.hpp, src/CMap.hpp, src/CMapReader.cpp, 
-    src/Color.cpp, src/DVIToSVG.hpp, src/DVIToSVGActions.cpp, 
-    src/EmSpecialHandler.cpp, src/EncFile.cpp, src/FileFinder.cpp, 
-    src/FileFinder.hpp, src/FileSystem.cpp, src/Font.cpp, src/FontCache.cpp, 
-    src/FontEncoding.cpp, src/FontEncoding.hpp, src/FontEngine.cpp, 
-    src/FontEngine.hpp, src/FontManager.cpp, src/FontManager.hpp, 
-    src/FontWriter.hpp, src/GFGlyphTracer.cpp, src/GFGlyphTracer.hpp, 
-    src/Ghostscript.cpp, src/Ghostscript.hpp, src/ImageToSVG.cpp, 
-    src/MapLine.cpp, src/MapLine.hpp, src/Message.cpp, src/Message.hpp, 
-    src/NoPsSpecialHandler.hpp, src/PDFParser.cpp, src/PSInterpreter.cpp, 
-    src/PSInterpreter.hpp, src/PathClipper.cpp, src/Process.hpp, 
-    src/SVGCharHandler.hpp, src/SVGCharPathHandler.cpp, 
-    src/SVGCharPathHandler.hpp, src/SVGCharTspanTextHandler.cpp, 
-    src/SVGTree.hpp, src/VFReader.cpp, src/VFReader.hpp, src/XMLNode.cpp, 
-    src/dvisvgm.cpp: 
-  use nullptr instead of 0 
-
-  * src/BoundingBox.hpp, src/CLCommandLine.hpp, src/CMapReader.hpp, 
-    src/Calculator.hpp, src/Font.hpp, src/FontMetrics.hpp, 
-    src/FontWriter.hpp, src/GFReader.hpp, src/Length.hpp, src/MapLine.hpp, 
-    src/Matrix.hpp, src/MessageException.hpp, src/PDFParser.hpp, 
-    src/PSInterpreter.hpp, src/PageSize.hpp, src/ShadingPatch.hpp, 
-    src/SpecialHandler.hpp, src/StreamReader.hpp, src/TrueTypeFont.hpp, 
-    src/VFReader.hpp, src/VectorIterator.hpp, src/ZLibOutputStream.hpp: 
-  made constructors of exception classes explicit 
-
-  * src/ZLibOutputStream.hpp: 
-  few modifications of class ZLibOutputStream 
-
-  * src/CharMapID.hpp, src/Color.hpp, src/FontCache.hpp, src/Message.cpp, 
-    src/Message.hpp: 
-  ensure initializations of static members don't throw exceptions 
-
-  * src/BoundingBox.cpp, src/CMapManager.cpp, src/ColorSpecialHandler.cpp, 
-    src/DvisvgmSpecialHandler.cpp, src/PathClipper.cpp, src/RangeMap.cpp: 
-  replaced some index-based loops with range-based ones 
-
-  * src/FilePath.cpp, src/FilePath.hpp: 
-  fixed type used to store directories in class FilePath 
-
-  * src/CLCommandLine.cpp: 
-  use emplace_back() instead of push_back() 
-
-  * src/FileFinder.cpp, src/Font.hpp, src/TensorProductPatch.hpp, 
-    src/dvisvgm.cpp: 
-  removed redundant 'virtual' modifiers and calls of c_str() 
-
-  * src/FontManager.cpp, src/HyperlinkManager.cpp, src/PageSize.cpp: 
-  use spezialized string::find() to look for single characters 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.hpp, src/dvisvgm.cpp, 
-    src/options.xml, tests/CommandLineTest.cpp: 
-  renamed option --exact to --exact-bbox
-This change is downward 
-  compatible due to partial matching of long options. 
-
-  * src/DVIToSVGActions.cpp, src/DvisvgmSpecialHandler.cpp, src/Matrix.cpp, 
-    src/Matrix.hpp, src/PSPattern.cpp, src/PsSpecialHandler.cpp, 
-    src/SVGCharHandler.cpp, src/SVGCharPathHandler.cpp, src/SVGTree.cpp, 
-    tests/MatrixTest.cpp: 
-  renamed and slightly refactored Matrix::getSVG() 
-
-2019-03-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/DVIToSVGActions.hpp, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp, 
-    src/HyperlinkManager.cpp, src/ImageToSVG.hpp, src/SVGTree.cpp, 
-    src/SVGTree.hpp, src/SpecialActions.hpp, tests/DvisvgmSpecialTest.cpp: 
-  added context stack for SVG defs section 
-
-  * src/DVIToSVG.cpp, src/ImageToSVG.cpp, src/SVGOptimizer.cpp, 
-    src/SVGOptimizer.hpp, src/SVGTree.cpp, src/SVGTree.hpp: 
-  moved removal of redundant clipPath elements to SVGOptimizer 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.hpp, src/SVGOptimizer.cpp, 
-    src/SVGOptimizer.hpp, src/dvisvgm.cpp, src/options.xml: 
-  added command-line option --group-attributes 
-
-2019-03-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Makefile.am: 
-  reformatted file list in Makefile 
-
-2019-03-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  added processing of PS operators xshow, yshow, and xyshow 
-
-2019-03-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/xxHash/xxhash.c, libs/xxHash/xxhash.h: 
-  updated xxhash to version 0.7.0 
-
-2019-03-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Makefile.am, src/SVGOptimizer.cpp, src/SVGOptimizer.hpp, 
-    src/SVGTree.cpp, src/XMLNode.cpp, src/XMLNode.hpp, src/utility.hpp: 
-  added algorithms to move common attributes to group elements 
-
-2019-03-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVGActions.hpp, src/ImageToSVG.hpp, src/PSPattern.cpp, 
-    src/PSPattern.hpp, src/SVGCharHandler.cpp, src/SVGCharHandler.hpp, 
-    src/SVGTree.cpp, src/SVGTree.hpp, src/SpecialActions.hpp, 
-    src/SpecialManager.cpp, src/SpecialManager.hpp, src/XMLDocument.cpp, 
-    src/XMLDocument.hpp, src/XMLNode.cpp, src/XMLNode.hpp, 
-    tests/DvisvgmSpecialTest.cpp, tests/EmSpecialTest.cpp, 
-    tests/TpicSpecialTest.cpp: 
-  take unique_ptrs by value instead of rvalue reference 
-
-2019-03-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BoundingBox.cpp, src/BoundingBox.hpp, src/DVIToSVG.cpp, 
-    src/DVIToSVG.hpp, src/DVIToSVGActions.cpp, src/DVIToSVGActions.hpp, 
-    src/DvisvgmSpecialHandler.cpp, src/EmSpecialHandler.cpp, 
-    src/HyperlinkManager.cpp, src/ImageToSVG.cpp, src/ImageToSVG.hpp, 
-    src/PSPattern.cpp, src/PSPattern.hpp, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.hpp, src/SVGCharHandler.cpp, src/SVGCharHandler.hpp, 
-    src/SVGCharPathHandler.cpp, src/SVGCharPathHandler.hpp, 
-    src/SVGCharTspanTextHandler.cpp, src/SVGCharTspanTextHandler.hpp, 
-    src/SVGTree.cpp, src/SVGTree.hpp, src/SpecialActions.hpp, 
-    src/TpicSpecialHandler.cpp, src/XMLDocument.cpp, src/XMLDocument.hpp, 
-    src/XMLNode.cpp, src/XMLNode.hpp, tests/DvisvgmSpecialTest.cpp, 
-    tests/EmSpecialTest.cpp, tests/TpicSpecialTest.cpp, 
-    tests/XMLNodeTest.cpp: 
-  renamed XML node classes 
-
-  * src/XMLDocument.cpp, src/XMLNode.cpp, src/XMLNode.hpp, 
-    tests/XMLNodeTest.cpp: 
-  replaced dynamic casts of XML nodes with dedicated cast methods 
-
-2019-03-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/Makefile.am: 
-  rebuild manpage if configure.ac was updated
-A potential change of the 
-  version number should be propagated to the manpage. 
-
-  * doc/dvisvgm.txt.in: 
-  manpage: added link to SVG color names 
-
-2019-03-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  imgfile: improved and simplifed code
-- compute transformation matrix 
-  only once (for image and bbox)
-- compute and update bbox only if 
-  necessary 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.6.3 
-
-  * NEWS: 
-  updated NEWS 
-
-2019-03-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/dvisvgm.cpp: 
-  option --bbox: check validity of paper format arguments corretcly 
-
-  * src/PsSpecialHandler.cpp: 
-  ensure forward slashes in file paths passed to PS oparator 'run' 
-
-  * src/PsSpecialHandler.cpp, src/psdefs.cpp: 
-  psfile/pdffile: adapt opposite orientation of y-coordinates properly 
-
-2019-02-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/InputReader.cpp, src/InputReader.hpp, 
-    tests/StreamInputBufferTest.cpp, tests/StringMatcherTest.cpp: 
-  added StringMatcher::read() 
-
-  * src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp, 
-    src/InputReader.cpp, tests/DvisvgmSpecialTest.cpp: 
-  parse raw specials and create proper XML nodes 
-
-2019-02-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DvisvgmSpecialHandler.cpp, src/FontWriter.cpp: 
-  replaced lookup loops with std::find_if 
-
-2019-02-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * m4/Makefile.am: 
-  add ax_check_compile_flag.m4 to distributed source archives 
-
-2019-02-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, m4/ax_check_compile_flag.m4, src/Makefile.am: 
-  add -Wno-mismatched-tags only if compiler supports 
-  -Wmismatched-tags
-(closes #101) 
-
-2019-02-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Calculator.hpp, src/HtmlSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.hpp, src/InputReader.cpp, src/InputReader.hpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, 
-    tests/StreamInputBufferTest.cpp: 
-  replaced some unordered maps with ordered ones 
-
-  * src/HtmlSpecialHandler.cpp, src/InputReader.cpp, src/InputReader.hpp, 
-    src/MapLine.cpp, src/PsSpecialHandler.cpp, 
-    tests/StreamInputBufferTest.cpp: 
-  accept alternative bounding chars in getQuotedString() 
-
-2019-02-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/XMLNode.cpp, src/XMLNode.hpp, tests/DvisvgmSpecialTest.cpp, 
-    tests/EmSpecialTest.cpp, tests/TpicSpecialTest.cpp: 
-  store attributes in vectors instead of maps 
-
-2019-02-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/Color.cpp, tests/ColorSpecialTest.cpp, 
-    tests/ColorTest.cpp, tests/EmSpecialTest.cpp, tests/ShadingPatchTest.cpp, 
-    tests/TensorProductPatchTest.cpp, tests/TpicSpecialTest.cpp, 
-    tests/TriangularPatchTest.cpp: 
-  use short RGB hex values if possible 
-
-2019-02-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontEngine.cpp, src/Ghostscript.cpp: 
-  replaced C casts with const_cast 
-
-2019-02-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README.md: 
-  added some links to README 
-
-2019-01-31  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/gtest/include/gtest/gtest-death-test.h, 
-    tests/gtest/include/gtest/gtest-message.h, 
-    tests/gtest/include/gtest/gtest-param-test.h, 
-    tests/gtest/include/gtest/gtest-printers.h, 
-    tests/gtest/include/gtest/gtest-spi.h, 
-    tests/gtest/include/gtest/gtest-test-part.h, 
-    tests/gtest/include/gtest/gtest-typed-test.h, 
-    tests/gtest/include/gtest/gtest.h, 
-    tests/gtest/include/gtest/gtest_pred_impl.h, 
-    tests/gtest/include/gtest/gtest_prod.h, 
-    tests/gtest/include/gtest/internal/custom/gtest-port.h, 
-    tests/gtest/include/gtest/internal/custom/gtest-printers.h, 
-    tests/gtest/include/gtest/internal/custom/gtest.h, 
-    tests/gtest/include/gtest/internal/gtest-death-test-internal.h, 
-    tests/gtest/include/gtest/internal/gtest-filepath.h, 
-    tests/gtest/include/gtest/internal/gtest-internal.h, 
-    tests/gtest/include/gtest/internal/gtest-linked_ptr.h, 
-    tests/gtest/include/gtest/internal/gtest-param-util-generated.h, 
-    tests/gtest/include/gtest/internal/gtest-param-util.h, 
-    tests/gtest/include/gtest/internal/gtest-port-arch.h, 
-    tests/gtest/include/gtest/internal/gtest-port.h, 
-    tests/gtest/include/gtest/internal/gtest-string.h, 
-    tests/gtest/include/gtest/internal/gtest-tuple.h, 
-    tests/gtest/include/gtest/internal/gtest-type-util.h, 
-    tests/gtest/src/gtest-all.cc, tests/gtest/src/gtest-death-test.cc, 
-    tests/gtest/src/gtest-filepath.cc, tests/gtest/src/gtest-internal-inl.h, 
-    tests/gtest/src/gtest-port.cc, tests/gtest/src/gtest-printers.cc, 
-    tests/gtest/src/gtest-test-part.cc, tests/gtest/src/gtest-typed-test.cc, 
-    tests/gtest/src/gtest.cc, tests/gtest/src/gtest_main.cc: 
-  updated gtest to version 1.8.1 
-
-2019-01-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  put struct PatchVertex in corresponding method 
-
-2019-01-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * Makefile.am, configure.ac, m4/Makefile.am: 
-  add m4 files to source tarball 
-
-2019-01-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, README, README.md: 
-  updated NEWS and README 
-
-  * .travis.yml: 
-  Travis: switched to xenial environment 
-
-2019-01-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, src/psdefs.cpp: 
-  ensure a path loaded by 'clippath' is considered by clip/eoclip 
-
-  * src/PsSpecialHandler.cpp, src/psdefs.cpp, tests/PSInterpreterTest.cpp: 
-  changed semantics of operand of 'newpath'
-It now denotes whether method 
-  'newpath' was triggered by PS operator 'newpath'
-or one of the 
-  drawing/clipping operators. 
-
-  * src/GraphicsPath.hpp, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.hpp, tests/FontCacheTest.cpp, 
-    tests/GraphicsPathTest.cpp: 
-  only create new clipPath element if the new clip path differs 
-
-2019-01-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Ghostscript.cpp: 
-  fixed formatting of GS version number 
-
-  * src/PsSpecialHandler.cpp: 
-  use nullptr instead of 0 
-
-2019-01-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  execute 'show' if called internally by another PS operator (e.g. 
-  charpath) 
-
-  * src/psdefs.cpp: 
-  don't propagate local transformations to the PS handler
-PS operators 
-  like 'charpath' may perform local transformations, e.g. by
-calling 
-  'scale'. These must not be forwarded to the PS handler. 
-
-  * libs/variant/Makefile.am, libs/variant/include/mpark/config.hpp, 
-    libs/variant/include/mpark/in_place.hpp, 
-    libs/variant/include/mpark/lib.hpp, 
-    libs/variant/include/mpark/variant.hpp: 
-  updated mpark::variant to version 1.4.0 
-
-  * src/psdefs.cpp: 
-  PS handler: draw glyph paths with 'fill' rather than 'eofill' 
-
-  * .appveyor.yml: 
-  AppVeyor: updated ttfautohint revision to 1.8.2-2 
-
-2019-01-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.6.2 
-
-2019-01-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp, tests/PSInterpreterTest.cpp: 
-  properly apply current scale values to line properties 
-
-  * src/psdefs.cpp: 
-  prevent visible side-effects of PS operator 'stringwidth'
-According to 
-  the PS manual, p. 699, stringwidth may execute the path operators
-of the 
-  glyph descriptions. This led to visible fragments in the SVG graphics. 
-
-2019-01-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/db2html.xsl: 
-  manpage: fixed wrongly nested list elements 
-
-  * Makefile.am, README, README.md, configure.ac, doc/Makefile.am, 
-    doc/conf-dblatex-man.xsl, doc/conf-dblatex-pdf.xsl, doc/db2html.xsl, 
-    doc/dvisvgm.txt.in, doc/tweak-db-article.xsl, doc/tweak-db-refentry.xsl, 
-    doc/tweak-dblatex-pdf.xsl, libs/Makefile.am, 
-    libs/ff-woff/fontforge/tmpfile2.cpp, src/AGLTable.hpp, 
-    src/BasicDVIReader.cpp, src/BasicDVIReader.hpp, src/Bezier.cpp, 
-    src/Bezier.hpp, src/BgColorSpecialHandler.cpp, 
-    src/BgColorSpecialHandler.hpp, src/Bitmap.cpp, src/Bitmap.hpp, 
-    src/BoundingBox.cpp, src/BoundingBox.hpp, src/CLCommandLine.cpp, 
-    src/CLCommandLine.hpp, src/CLOption.hpp, src/CMap.cpp, src/CMap.hpp, 
-    src/CMapManager.cpp, src/CMapManager.hpp, src/CMapReader.cpp, 
-    src/CMapReader.hpp, src/CRC32.cpp, src/CRC32.hpp, src/Calculator.cpp, 
-    src/Calculator.hpp, src/CharMapID.cpp, src/CharMapID.hpp, 
-    src/Character.hpp, src/Color.cpp, src/Color.hpp, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.hpp, 
-    src/CommandLine.hpp, src/DLLoader.cpp, src/DLLoader.hpp, 
-    src/DVIActions.hpp, src/DVIReader.cpp, src/DVIReader.hpp, 
-    src/DVIToSVG.cpp, src/DVIToSVG.hpp, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.hpp, src/DependencyGraph.hpp, src/Directory.cpp, 
-    src/Directory.hpp, src/DvisvgmSpecialHandler.cpp, 
-    src/DvisvgmSpecialHandler.hpp, src/EPSFile.cpp, src/EPSFile.hpp, 
-    src/EPSToSVG.hpp, src/EmSpecialHandler.cpp, src/EmSpecialHandler.hpp, 
-    src/EncFile.cpp, src/EncFile.hpp, src/FileFinder.cpp, src/FileFinder.hpp, 
-    src/FilePath.cpp, src/FilePath.hpp, src/FileSystem.cpp, 
-    src/FileSystem.hpp, src/FixWord.hpp, src/Font.cpp, src/Font.hpp, 
-    src/FontCache.cpp, src/FontCache.hpp, src/FontEncoding.cpp, 
-    src/FontEncoding.hpp, src/FontEngine.cpp, src/FontEngine.hpp, 
-    src/FontManager.cpp, src/FontManager.hpp, src/FontMap.cpp, 
-    src/FontMap.hpp, src/FontMetrics.cpp, src/FontMetrics.hpp, 
-    src/FontStyle.hpp, src/FontWriter.cpp, src/FontWriter.hpp, 
-    src/GFGlyphTracer.cpp, src/GFGlyphTracer.hpp, src/GFReader.cpp, 
-    src/GFReader.hpp, src/GFTracer.cpp, src/GFTracer.hpp, 
-    src/Ghostscript.cpp, src/Ghostscript.hpp, src/Glyph.hpp, 
-    src/GlyphTracerMessages.hpp, src/GraphicsPath.hpp, src/HashFunction.cpp, 
-    src/HashFunction.hpp, src/HtmlSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.hpp, src/HyperlinkManager.cpp, 
-    src/HyperlinkManager.hpp, src/ImageToSVG.cpp, src/ImageToSVG.hpp, 
-    src/InputBuffer.cpp, src/InputBuffer.hpp, src/InputReader.cpp, 
-    src/InputReader.hpp, src/JFM.cpp, src/JFM.hpp, src/Length.cpp, 
-    src/Length.hpp, src/MD5HashFunction.hpp, src/Makefile.am, 
-    src/MapLine.cpp, src/MapLine.hpp, src/Matrix.cpp, src/Matrix.hpp, 
-    src/Message.cpp, src/Message.hpp, src/MessageException.hpp, 
-    src/MetafontWrapper.cpp, src/MetafontWrapper.hpp, src/MiKTeXCom.cpp, 
-    src/MiKTeXCom.hpp, src/NoPsSpecialHandler.cpp, 
-    src/NoPsSpecialHandler.hpp, src/NumericRanges.hpp, src/PDFParser.cpp, 
-    src/PDFParser.hpp, src/PDFToSVG.hpp, src/PSFilter.hpp, 
-    src/PSInterpreter.cpp, src/PSInterpreter.hpp, src/PSPattern.cpp, 
-    src/PSPattern.hpp, src/PSPreviewFilter.cpp, src/PSPreviewFilter.hpp, 
-    src/PageRanges.cpp, src/PageRanges.hpp, src/PageSize.cpp, 
-    src/PageSize.hpp, src/Pair.hpp, src/PapersizeSpecialHandler.cpp, 
-    src/PapersizeSpecialHandler.hpp, src/PathClipper.cpp, 
-    src/PathClipper.hpp, src/PdfSpecialHandler.cpp, 
-    src/PdfSpecialHandler.hpp, src/PreScanDVIReader.cpp, 
-    src/PreScanDVIReader.hpp, src/Process.cpp, src/Process.hpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, src/RangeMap.cpp, 
-    src/RangeMap.hpp, src/SVGCharHandler.cpp, src/SVGCharHandler.hpp, 
-    src/SVGCharHandlerFactory.cpp, src/SVGCharHandlerFactory.hpp, 
-    src/SVGCharPathHandler.cpp, src/SVGCharPathHandler.hpp, 
-    src/SVGCharTspanTextHandler.cpp, src/SVGCharTspanTextHandler.hpp, 
-    src/SVGOutput.cpp, src/SVGOutput.hpp, src/SVGSingleCharTextHandler.cpp, 
-    src/SVGSingleCharTextHandler.hpp, src/SVGTree.cpp, src/SVGTree.hpp, 
-    src/ShadingPatch.cpp, src/ShadingPatch.hpp, src/SignalHandler.cpp, 
-    src/SignalHandler.hpp, src/SourceInput.cpp, src/SourceInput.hpp, 
-    src/SpecialActions.hpp, src/SpecialHandler.hpp, src/SpecialManager.cpp, 
-    src/SpecialManager.hpp, src/StreamReader.cpp, src/StreamReader.hpp, 
-    src/StreamWriter.cpp, src/StreamWriter.hpp, src/Subfont.cpp, 
-    src/Subfont.hpp, src/System.cpp, src/System.hpp, src/TFM.cpp, 
-    src/TFM.hpp, src/TTFAutohint.cpp, src/TTFAutohint.hpp, 
-    src/TensorProductPatch.cpp, src/TensorProductPatch.hpp, src/Terminal.cpp, 
-    src/Terminal.hpp, src/ToUnicodeMap.cpp, src/ToUnicodeMap.hpp, 
-    src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.hpp, 
-    src/TriangularPatch.cpp, src/TriangularPatch.hpp, src/TrueTypeFont.cpp, 
-    src/TrueTypeFont.hpp, src/Unicode.cpp, src/Unicode.hpp, 
-    src/VFActions.hpp, src/VFReader.cpp, src/VFReader.hpp, 
-    src/VectorIterator.hpp, src/VectorStream.hpp, src/XMLDocument.cpp, 
-    src/XMLDocument.hpp, src/XMLNode.cpp, src/XMLNode.hpp, src/XMLString.cpp, 
-    src/XMLString.hpp, src/XXHashFunction.hpp, src/ZLibOutputStream.hpp, 
-    src/dvisvgm.cpp, src/ffwrapper.c, src/ffwrapper.h, src/macros.hpp, 
-    src/options.dtd, src/options.xml, src/psdefs.cpp, src/utility.cpp, 
-    src/utility.hpp, src/version.hpp, src/version.hpp.in, src/windows.hpp, 
-    tests/BezierTest.cpp, tests/BitmapTest.cpp, tests/BoundingBoxTest.cpp, 
-    tests/CMapManagerTest.cpp, tests/CMapReaderTest.cpp, tests/CMapTest.cpp, 
-    tests/CRC32Test.cpp, tests/CalculatorTest.cpp, 
-    tests/ColorSpecialTest.cpp, tests/ColorTest.cpp, 
-    tests/CommandLineTest.cpp, tests/DVIReaderTest.cpp, 
-    tests/DependencyGraphTest.cpp, tests/DirectoryTest.cpp, 
-    tests/DvisvgmSpecialTest.cpp, tests/EmSpecialTest.cpp, 
-    tests/FileFinderTest.cpp, tests/FilePathTest.cpp, 
-    tests/FileSystemTest.cpp, tests/FontCacheTest.cpp, 
-    tests/FontManagerTest.cpp, tests/FontMapTest.cpp, 
-    tests/GFGlyphTracerTest.cpp, tests/GFReaderTest.cpp, 
-    tests/GhostscriptTest.cpp, tests/GraphicsPathTest.cpp, 
-    tests/HashFunctionTest.cpp, tests/JFMReaderTest.cpp, 
-    tests/LengthTest.cpp, tests/Makefile.am, tests/MapLineTest.cpp, 
-    tests/MatrixTest.cpp, tests/MessageExceptionTest.cpp, 
-    tests/PDFParserTest.cpp, tests/PSInterpreterTest.cpp, 
-    tests/PageRagesTest.cpp, tests/PageSizeTest.cpp, tests/PairTest.cpp, 
-    tests/PapersizeSpecialTest.cpp, tests/RangeMapTest.cpp, 
-    tests/SVGOutputTest.cpp, tests/ShadingPatchTest.cpp, 
-    tests/SpecialManagerTest.cpp, tests/SplittedCharInputBufferTest.cpp, 
-    tests/StreamInputBufferTest.cpp, tests/StreamReaderTest.cpp, 
-    tests/StreamWriterTest.cpp, tests/StringMatcherTest.cpp, 
-    tests/SubfontTest.cpp, tests/TFMReaderTest.cpp, 
-    tests/TensorProductPatchTest.cpp, tests/ToUnicodeMapTest.cpp, 
-    tests/TpicSpecialTest.cpp, tests/TriangularPatchTest.cpp, 
-    tests/UnicodeTest.cpp, tests/UtilityTest.cpp, 
-    tests/VectorIteratorTest.cpp, tests/VectorStreamTest.cpp, 
-    tests/XMLNodeTest.cpp, tests/XMLStringTest.cpp, tests/check-conv, 
-    tests/create-makefile, tests/data/Makefile.am, tests/genhashcheck.py, 
-    tests/normalize.xsl, tests/testmain.cpp: 
-  updated year in copyright statements to 2019 
-
-2018-12-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/potrace/CMakeLists.txt, libs/variant/CMakeLists.txt: 
-  removed redundant files 
-
-2018-11-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CommandLine.hpp, src/options.xml: 
-  updated description in --help output 
-
-2018-11-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, doc/Makefile.am, libs/defs.am, src/Makefile.am, 
-    tests/Makefile.am, tests/create-makefile: 
-  Makefiles: replaced $(top_srcdir) with $(dvisvgm_srcdir)
-to simplify 
-  maintenance of dvisvgm in TeX Live 
-
-2018-11-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * m4/ax_cxx_compile_stdcxx.m4: 
-  updated ax_cxx_compile_stdcxx.m4 to version 10 
-
-2018-10-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/brotli/Makefile.am, libs/defs.am, libs/potrace/Makefile.am, 
-    libs/woff2/Makefile.am, libs/xxHash/Makefile.am: 
-  use negation in Makefile conditionals 
-
-2018-10-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/brotli/common/platform.h, libs/brotli/common/transform.c, 
-    libs/brotli/common/version.h, libs/brotli/enc/backward_references_hq.c, 
-    libs/brotli/enc/backward_references_hq.h, 
-    libs/brotli/enc/backward_references_inc.h, libs/brotli/enc/encode.c, 
-    libs/brotli/enc/hash.h, libs/brotli/enc/hash_composite_inc.h, 
-    libs/brotli/enc/hash_longest_match64_inc.h, 
-    libs/brotli/enc/hash_longest_match_inc.h, 
-    libs/brotli/enc/hash_rolling_inc.h, 
-    libs/brotli/enc/hash_to_binary_tree_inc.h: 
-  updated brotli to version 1.0.7 
-
-2018-10-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS: 
-  updated NEWS 
-
-2018-10-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/Makefile.am: 
-  only create intermediate XML files if dvisvgm.txt.1 has changed 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.6.1 
-
-2018-10-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/Makefile.am: 
-  ensure dvisvgm.txt.in is distributed with the tarball 
-
-  * configure.ac, libs/brotli/Makefile.am, libs/defs.am, 
-    libs/potrace/Makefile.am, libs/woff2/Makefile.am, 
-    libs/xxHash/Makefile.am, src/Makefile.am, tests/Makefile.am, 
-    tests/create-makefile: 
-  relaxed semantics of config option --disable-bundled-libs
-If some of the 
-  system libraries brotli, potrace, woff2, and xxhash can't be
-found, the 
-  bundled libraries are used as a fallback, even if 
-  option
---disable-bundled-libs is given. (closes #94) 
-
-2018-10-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac: 
-  added configuration option --disable-manpage (closes #93) 
-
-2018-10-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, doc/Makefile.am: 
-  don't update man page if asciidoc file hasn't changed 
-
-2018-09-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/brotli/common/platform.h, libs/brotli/common/version.h, 
-    libs/brotli/enc/metablock.c: 
-  updated brotli to version 1.0.6 
-
-2018-09-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/XXHashFunction.hpp: 
-  fixed constexpr issue occured with gcc 4.8 
-
-2018-09-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/Makefile.am: 
-  add dvisvgm.sty to distributed files 
-
-2018-09-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Ghostscript.cpp: 
-  call RegGetValueA() with correct buffer size 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.6 
-
-  * NEWS: 
-  updated NEWS 
-
-2018-09-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVG.cpp, src/DVIToSVG.hpp, src/dvisvgm.cpp: 
-  use enums for hash parameters rather than strings 
-
-  * doc/dvisvgm.txt.in, src/DVIToSVG.cpp, src/DVIToSVG.hpp: 
-  added optional parameter 'replace' to --page-hashes 
-
-2018-09-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp, src/DVIToSVG.cpp: 
-  reset hash function before computing a page hash 
-
-2018-09-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/clipper/clipper.cpp: 
-  clipper: initialize TEdge by constructor instead of memset() 
-
-2018-09-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac: 
-  removed redundant check for potrace from configure 
-
-2018-08-31  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/variant/include/mpark/config.hpp: 
-  VC: fixed failing compilation of 
-  mpark::variant
-https://github.com/mpark/variant/commit/4e3e7f88f03f513622daa973 
-
-2018-08-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml: 
-  AppVeyor: use VS 2017 version 15.7 instead of 15.8
-Version 15.8 of 
-  Visual Studio 2017 introduced a compiler bug that prevents
-compiling 
-  mpark::variant (https://github.com/mpark/variant/issues/48). 
-
-2018-08-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/XXHashFunction.hpp, src/dvisvgm.cpp: 
-  use wrapper class to get the xxhash version number 
-
-  * src/HashFunction.cpp, src/HashFunction.hpp, src/MD5HashFunction.hpp, 
-    src/XXHashFunction.hpp, tests/HashFunctionTest.cpp: 
-  added extended create functions to hash classes 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.hpp, src/DVIToSVG.cpp, 
-    src/DVIToSVG.hpp, src/SVGOutput.cpp, src/SVGOutput.hpp, src/dvisvgm.cpp, 
-    src/options.xml, tests/SVGOutputTest.cpp: 
-  replaced pattern variable %h with %hd; added %ho and %hc
-In order to 
-  recognize changes in the command-line options that may affect the
-SVG 
-  output, %ho and %hc have been introduced. The former expands to a 
-  32-bit
-hash reflecting the command-line options, the latter combines this 
-  information
-with the hash computed from the DVI page data. 
-
-2018-08-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVG.cpp, src/DVIToSVG.hpp, src/dvisvgm.cpp: 
-  option --page-hashes accepts multiple modifiers now 
-
-2018-08-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/DVIToSVG.cpp, src/DVIToSVG.hpp, 
-    src/HashFunction.cpp, src/HashFunction.hpp, src/SVGOutput.hpp, 
-    src/dvisvgm.cpp, tests/CommandLineTest.cpp: 
-  added optional parameter 'list' to option --page-hashes 
-
-  * src/dvisvgm.cpp: 
-  fixed wrong directory separators shown in output of --cache 
-
-2018-08-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/CommandLine.hpp, src/DVIToSVG.hpp, 
-    src/dvisvgm.cpp, src/options.xml: 
-  added command-line option --page-hashes to enable hashing functionality 
-
-2018-08-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * AUTHORS, README, README.md, configure.ac, libs/Makefile.am, 
-    libs/md5/Makefile.am, libs/md5/md5.c, libs/md5/md5.h, 
-    src/HashFunction.cpp, src/HashFunction.hpp, src/MD5HashFunction.hpp, 
-    src/Makefile.am, src/XXHashFunction.hpp, tests/HashFunctionTest.cpp, 
-    tests/Makefile.am, tests/create-makefile: 
-  added classes to compute MD5, XXH32, and XXH64 hash values 
-
-  * src/BasicDVIReader.hpp, src/DVIReader.cpp: 
-  added validity checks for bop offsets 
-
-  * src/DVIReader.cpp, src/DVIReader.hpp, src/DVIToSVG.cpp, 
-    src/DVIToSVG.hpp, src/HashFunction.cpp, src/HashFunction.hpp, 
-    src/SVGOutput.cpp, src/SVGOutput.hpp: 
-  added optional computation and evaluation of page hashes
-If this 
-  functionality is enabled, a hash value based on the contents of 
-  the
-corresponding DVI page is added to the SVG file names. Furthermore, 
-  dvisvgm
-skips the conversion of these pages in subsequent calls if the 
-  resulting SVG
-files already exist. 
-
-2018-08-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp: 
-  DVI postamble: relaxed plausibility check of the total page count 
-
-2018-08-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac: 
-  correctly evaluate config option --disable-bundled-libs (closes #91) 
-
-2018-08-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BasicDVIReader.hpp, src/DVIToSVG.cpp, src/DVIToSVG.hpp, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.hpp, 
-    src/PsSpecialHandler.cpp: 
-  getPageTransformation: replaced reference parameter with return value 
-
-  * src/DVIToSVGActions.hpp, src/ImageToSVG.hpp, src/PsSpecialHandler.cpp, 
-    src/SpecialActions.hpp: 
-  renamed getPageTransform; return unity matrix by default 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.5 
-
-  * NEWS: 
-  updated NEWS 
-
-2018-08-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FileFinder.cpp, src/FilePath.cpp, src/FilePath.hpp, 
-    src/Ghostscript.cpp: 
-  TL32: also look for gsdll32.dll in the corresponding TL bin folder
-The 
-  changes are based on a patch sent by Akira Kakuto. 
-
-2018-08-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README: 
-  updated README 
-
-  * .appveyor.yml, .travis.yml: 
-  updated CI configurations; dropped potrace as an external dependency 
-
-  * configure.ac, src/SourceInput.cpp: 
-  set umask before calling mkstemp()
-Coverity complains about calling 
-  mkstemp() without securely setting umask first.
-If umask() is available, 
-  it's now called so that the permissions of temporary
-files result to 
-  0600. 
-
-  * src/BoundingBox.cpp: 
-  show lock state when printing a bounding box object 
-
-  * src/DVIToSVG.cpp: 
-  apply user transformations even if the bounding box is locked 
-
-2018-07-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/ImageToSVG.cpp, src/ImageToSVG.hpp, src/dvisvgm.cpp: 
-  apply --transform commands in --eps and --pdf mode too 
-
-  * src/DVIToSVG.cpp, src/Length.cpp, src/Length.hpp, tests/LengthTest.cpp: 
-  added function to retrieve all units supported by the Length class 
-
-  * doc/dvisvgm.txt.in, src/DVIToSVG.cpp, src/ImageToSVG.cpp, 
-    tests/CalculatorTest.cpp: 
-  allow to use all supported units in --transform commands 
-
-  * Makefile.am: 
-  propagate --enable-bundled-libs to "distcheck" 
-
-  * AUTHORS, README.md, configure.ac, libs/Makefile.am, 
-    libs/potrace/CMakeLists.txt, libs/potrace/Makefile.am, 
-    libs/potrace/auxiliary.h, libs/potrace/bitmap.h, libs/potrace/config.h, 
-    libs/potrace/curve.c, libs/potrace/curve.h, libs/potrace/decompose.c, 
-    libs/potrace/decompose.h, libs/potrace/lists.h, 
-    libs/potrace/potracelib.c, libs/potrace/potracelib.h, 
-    libs/potrace/progress.h, libs/potrace/trace.c, libs/potrace/trace.h, 
-    src/Makefile.am: 
-  added potrace to the bundled libraries again 
-
-  * tests/Makefile.am, tests/create-makefile: 
-  link tests only against bundled libs if configured with 
-  --enable-bundled-libs 
-
-  * src/ImageToSVG.cpp: 
-  changed type of exception thrown in case of invalid EPS/PDF files 
-
-2018-07-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.hpp, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.hpp, src/psdefs.cpp, tests/PSInterpreterTest.cpp: 
-  replaced internal PS operator @getpdfpagebox with PSInterpreter method 
-
-2018-07-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/dvisvgm.cpp: 
-  removed redundant code from main() 
-
-  * README.md, doc/dvisvgm.txt.in, src/EPSToSVG.hpp, src/ImageToSVG.cpp, 
-    src/ImageToSVG.hpp, src/PDFToSVG.hpp, src/PSInterpreter.cpp, 
-    src/PSInterpreter.hpp, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.hpp, src/dvisvgm.cpp, src/psdefs.cpp: 
-  PDF conversion: allow to specify the pages to process 
-
-2018-07-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml, README.md, configure.ac, libs/brotli/Makefile.am, 
-    libs/woff2/Makefile.am, libs/xxHash/Makefile.am, src/Makefile.am, 
-    src/dvisvgm.cpp: 
-  added config option --enable-bundled-libs
-If this option is given, the 
-  bundled libraries brotli, woff2, and xxhash are
-built and statically 
-  linked. Otherwise, the configure script looks for the
-corresponing system 
-  libraries and links dvisvgm against those. (closes #90) 
-
-2018-07-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS: 
-  fixed date in NEWS 
-
-2018-07-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, doc/Makefile.am: 
-  don't try to build manpage if required tools are missing 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.4.2 
-
-  * NEWS: 
-  updated NEWS 
-
-2018-07-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/HyperlinkManager.cpp: 
-  reduced extent of hyperlinked areas to get a tight bbox 
-
-2018-07-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  use unique_ptr in bbox debug code 
-
-  * src/PSPreviewFilter.cpp, src/PSPreviewFilter.hpp: 
-  removed redundant method PSPreviewFilter::getBorders() 
-
-  * src/PSPreviewFilter.cpp, src/PsSpecialHandler.cpp: 
-  fixed computation of preview extents (closes #89) 
-
-  * src/PsSpecialHandler.cpp: 
-  prevent warning about missing psfile "/dev/null" 
-
-2018-07-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS: 
-  updated NEWS 
-
-  * .gitattributes: 
-  added linguist settings to 
-  .gitattributes
-
-https://github.com/github/linguist 
-
-2018-07-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/brotli/Makefile.am, libs/brotli/common/dictionary.c, 
-    libs/brotli/common/platform.h, libs/brotli/common/transform.c, 
-    libs/brotli/common/version.h, libs/brotli/enc/backward_references.c, 
-    libs/brotli/enc/brotli_bit_stream.h, libs/brotli/enc/command.h, 
-    libs/brotli/enc/compress_fragment.c, 
-    libs/brotli/enc/compress_fragment_two_pass.c, libs/brotli/enc/encode.c, 
-    libs/brotli/enc/encoder_dict.h, libs/brotli/enc/fast_log.h, 
-    libs/brotli/enc/hash.h, libs/brotli/enc/hash_composite_inc.h, 
-    libs/brotli/enc/hash_rolling_inc.h, libs/brotli/enc/quality.h, 
-    libs/brotli/enc/static_dict.c, libs/brotli/enc/write_bits.h, 
-    libs/brotli/include/brotli/port.h, libs/brotli/include/brotli/types.h: 
-  updated brotli to version 1.0.5 
-
-  * README, README.md, doc/dvisvgm.txt.in, libs/ff-woff/README.md: 
-  updated links to new project website dvisvgm.de 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.4.1 
-
-2018-07-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in: 
-  manpage: updated external links 
-
-2018-06-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/woff2/include/woff2/version.h, libs/woff2/src/font.cc, 
-    libs/woff2/src/normalize.cc, libs/woff2/src/woff2_enc.cc: 
-  updated woff2 to 1.0.2 
-
-2018-06-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/SourceInput.cpp, src/SourceInput.hpp: 
-  moved handling of temporary files to separate class 
-
-2018-05-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVGActions.cpp, src/ImageToSVG.cpp: 
-  fixed evaluation of progress delay 
-
-2018-05-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in: 
-  minor fixes in manpage 
-
-2018-05-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/conf-dblatex-pdf.xsl: 
-  list options and specials in PDF bookmarks of manpage 
-
-  * doc/dvisvgm.txt.in: 
-  manpage: ordered options alphabetically according to long name 
-
-2018-05-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, README, README.md: 
-  updated NEWS and README 
-
-2018-05-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Calculator.cpp: 
-  catch exception by reference rather than by value 
-
-2018-04-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/EPSFile.cpp, src/EPSFile.hpp, src/EPSToSVG.cpp: 
-  changed signature of EPSFile::bbox() 
-
-  * src/CLCommandLine.cpp: 
-  cmdline: fixed handling of 'usage' section 
-
-  * src/EPSToSVG.cpp, src/EPSToSVG.hpp, src/ImageToSVG.cpp, 
-    src/ImageToSVG.hpp, src/Makefile.am: 
-  derive EPSToSVG from abstract class ImageToSVG 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.hpp, src/Makefile.am, 
-    src/PDFToSVG.hpp, src/PSInterpreter.cpp, src/PSInterpreter.hpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, src/dvisvgm.cpp, 
-    src/options.xml, src/psdefs.cpp, tests/CommandLineTest.cpp, 
-    tests/PSInterpreterTest.cpp: 
-  added option --pdf to convert PDF files to SVG 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.4 
-
-2018-04-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BoundingBox.cpp: 
-  swap wrongly assigned variables (doesn't affect behavior) 
-
-2018-04-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  psfile: use operator 'run' to simplify execution of (E)PS files 
-
-  * src/PSInterpreter.cpp, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.hpp, src/psdefs.cpp, tests/PSInterpreterTest.cpp: 
-  added special pdffile to embed PDF graphics 
-
-  * src/PsSpecialHandler.cpp: 
-  apply outer transformations to psfile/pdffile graphics 
-
-2018-04-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Ghostscript.cpp, src/Ghostscript.hpp, src/dvisvgm.cpp, 
-    tests/GhostscriptTest.cpp: 
-  added function to get numeric GS revision 
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.hpp: 
-  moved GS init options to init method 
-
-  * src/PsSpecialHandler.cpp: 
-  replaced str2double() with stod(); added check for zero bbox 
-
-  * src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.hpp, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.hpp, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp, 
-    src/EmSpecialHandler.cpp, src/EmSpecialHandler.hpp, 
-    src/HtmlSpecialHandler.cpp, src/HtmlSpecialHandler.hpp, 
-    src/NoPsSpecialHandler.cpp, src/NoPsSpecialHandler.hpp, 
-    src/PapersizeSpecialHandler.cpp, src/PapersizeSpecialHandler.hpp, 
-    src/PdfSpecialHandler.cpp, src/PdfSpecialHandler.hpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, 
-    src/SpecialHandler.hpp, src/SpecialManager.cpp, 
-    src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.hpp, 
-    tests/ColorSpecialTest.cpp, tests/DvisvgmSpecialTest.cpp, 
-    tests/PapersizeSpecialTest.cpp, tests/TpicSpecialTest.cpp: 
-  changed type of \special prefix from const char* to string 
-
-  * src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.hpp, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.hpp, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp, 
-    src/EmSpecialHandler.cpp, src/EmSpecialHandler.hpp, 
-    src/HtmlSpecialHandler.cpp, src/HtmlSpecialHandler.hpp, 
-    src/NoPsSpecialHandler.cpp, src/NoPsSpecialHandler.hpp, 
-    src/PapersizeSpecialHandler.cpp, src/PapersizeSpecialHandler.hpp, 
-    src/PdfSpecialHandler.cpp, src/PdfSpecialHandler.hpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, 
-    src/SpecialHandler.hpp, src/TpicSpecialHandler.cpp, 
-    src/TpicSpecialHandler.hpp: 
-  removed const from result vector of SpecialHandler::prefixes() 
-
-2018-04-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/xxHash/xxhash.c, libs/xxHash/xxhash.h: 
-  updated xxHash to version 0.6.5 
-
-  * src/psdefs.cpp: 
-  fixed handling of PS operator 'setgstate' 
-
-2018-04-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * m4/ax_cxx_compile_stdcxx.m4: 
-  updated ax_cxx_compile_stdcxx.m4 to version 8 
-
-2018-04-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BgColorSpecialHandler.hpp, src/DvisvgmSpecialHandler.hpp, 
-    src/EmSpecialHandler.hpp, src/HtmlSpecialHandler.hpp, 
-    src/NoPsSpecialHandler.hpp, src/PapersizeSpecialHandler.hpp, 
-    src/PdfSpecialHandler.hpp, src/PsSpecialHandler.hpp, 
-    src/SpecialHandler.hpp, src/SpecialManager.cpp, src/SpecialManager.hpp, 
-    src/TpicSpecialHandler.hpp: 
-  merged listener methods into SpecialHandler class 
-
-  * src/CommandLine.hpp: 
-  made opt2cpp compatible with Python 3 
-
-2018-04-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/brotli/Makefile.am, libs/brotli/common/constants.h, 
-    libs/brotli/common/platform.h, libs/brotli/common/version.h, 
-    libs/brotli/enc/backward_references.c, 
-    libs/brotli/enc/backward_references_hq.c, libs/brotli/enc/command.h, 
-    libs/brotli/enc/context.h, libs/brotli/enc/encode.c, 
-    libs/brotli/enc/memory.h, libs/brotli/enc/metablock.c, 
-    libs/brotli/enc/metablock.h, libs/brotli/enc/params.h, 
-    libs/brotli/enc/port.h, libs/brotli/enc/quality.h, 
-    libs/brotli/enc/write_bits.h, libs/brotli/include/brotli/decode.h, 
-    libs/brotli/include/brotli/encode.h: 
-  updated brotli to version 1.0.4 
-
-2018-03-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/SVGOutput.cpp, src/ZLibOutputStream.hpp, 
-    src/dvisvgm.cpp: 
-  enabled to output compressed SVG data to stdout 
-
-  * src/dvisvgm.cpp: 
-  renamed SourceInput variable 
-
-2018-03-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/dvisvgm.cpp: 
-  simplified main() function 
-
-2018-03-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/CLCommandLine.cpp, src/CLCommandLine.hpp, 
-    src/CommandLine.hpp, src/EPSFile.cpp, src/EPSFile.hpp, src/EPSToSVG.cpp, 
-    src/EPSToSVG.hpp, src/FileSystem.cpp, src/Makefile.am, 
-    src/PsSpecialHandler.cpp, src/SVGOutput.cpp, src/SVGOutput.hpp, 
-    src/SourceInput.cpp, src/SourceInput.hpp, src/dvisvgm.cpp, 
-    src/options.xml, tests/CommandLineTest.cpp, tests/SVGOutputTest.cpp: 
-  added option to read DVI/EPS input from stdin (closes #86) 
-
-2018-03-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.hpp, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.hpp, src/psdefs.cpp, tests/PSInterpreterTest.cpp: 
-  PS handler: added processing of .setshapealpha and .setblendmode 
-
-2018-03-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Matrix.cpp, src/Matrix.hpp, tests/MatrixTest.cpp: 
-  added initlist constructor to class Matrix 
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.hpp, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.hpp, src/psdefs.cpp, tests/PSInterpreterTest.cpp: 
-  psfile special: added evaluation of operator 'setpagedevice' 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.3.5 
-
-  * NEWS: 
-  updated NEWS 
-
-2018-03-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  added missing PS header required to evaluate color names 
-
-  * src/PSInterpreter.cpp, src/psdefs.cpp: 
-  drop GS option -dSAFER to stay compatible with GS 9.23 
-
-2018-03-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.3.4 
-
-  * NEWS: 
-  updated NEWS 
-
-2018-03-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/data/Makefile.am: 
-  add required test file cmr10.pfb to source tarballs (closes #87) 
-
-2018-03-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/EmSpecialHandler.hpp, src/XMLDocument.hpp, src/dvisvgm.cpp: 
-  replaced memory-inefficient lists with vectors 
-
-  * src/XMLNode.cpp, src/XMLNode.hpp: 
-  replaced lists of XML element pointers with deques 
-
-  * src/CLCommandLine.cpp: 
-  fixed message printed if command-line contains an isolated '-' 
-
-2018-03-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/brotli/Makefile.am, libs/brotli/common/constants.h, 
-    libs/brotli/common/context.h, libs/brotli/common/dictionary.h, 
-    libs/brotli/common/platform.h, libs/brotli/common/transform.h, 
-    libs/brotli/common/version.h, libs/brotli/enc/backward_references.c, 
-    libs/brotli/enc/backward_references.h, 
-    libs/brotli/enc/backward_references_hq.c, 
-    libs/brotli/enc/backward_references_hq.h, 
-    libs/brotli/enc/backward_references_inc.h, libs/brotli/enc/bit_cost.c, 
-    libs/brotli/enc/bit_cost.h, libs/brotli/enc/block_encoder_inc.h, 
-    libs/brotli/enc/block_splitter.c, libs/brotli/enc/block_splitter.h, 
-    libs/brotli/enc/block_splitter_inc.h, 
-    libs/brotli/enc/brotli_bit_stream.c, libs/brotli/enc/brotli_bit_stream.h, 
-    libs/brotli/enc/cluster.c, libs/brotli/enc/cluster.h, 
-    libs/brotli/enc/command.h, libs/brotli/enc/compress_fragment.c, 
-    libs/brotli/enc/compress_fragment.h, 
-    libs/brotli/enc/compress_fragment_two_pass.c, 
-    libs/brotli/enc/compress_fragment_two_pass.h, 
-    libs/brotli/enc/dictionary_hash.c, libs/brotli/enc/encode.c, 
-    libs/brotli/enc/encoder_dict.c, libs/brotli/enc/encoder_dict.h, 
-    libs/brotli/enc/entropy_encode.c, libs/brotli/enc/entropy_encode.h, 
-    libs/brotli/enc/entropy_encode_static.h, libs/brotli/enc/fast_log.h, 
-    libs/brotli/enc/find_match_length.h, libs/brotli/enc/hash.h, 
-    libs/brotli/enc/hash_forgetful_chain_inc.h, 
-    libs/brotli/enc/hash_longest_match64_inc.h, 
-    libs/brotli/enc/hash_longest_match_inc.h, 
-    libs/brotli/enc/hash_longest_match_quickly_inc.h, 
-    libs/brotli/enc/hash_to_binary_tree_inc.h, libs/brotli/enc/histogram.c, 
-    libs/brotli/enc/histogram.h, libs/brotli/enc/histogram_inc.h, 
-    libs/brotli/enc/literal_cost.c, libs/brotli/enc/literal_cost.h, 
-    libs/brotli/enc/memory.c, libs/brotli/enc/memory.h, 
-    libs/brotli/enc/metablock.c, libs/brotli/enc/metablock.h, 
-    libs/brotli/enc/metablock_inc.h, libs/brotli/enc/params.h, 
-    libs/brotli/enc/prefix.h, libs/brotli/enc/quality.h, 
-    libs/brotli/enc/ringbuffer.h, libs/brotli/enc/static_dict.c, 
-    libs/brotli/enc/static_dict.h, libs/brotli/enc/static_dict_lut.h, 
-    libs/brotli/enc/utf8_util.c, libs/brotli/enc/utf8_util.h, 
-    libs/brotli/enc/write_bits.h, libs/brotli/include/brotli/decode.h, 
-    libs/brotli/include/brotli/encode.h, libs/brotli/include/brotli/port.h: 
-  updated brotli to version 1.0.3 
-
-2018-02-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in: 
-  minor changes of the manpage 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.3.3 
-
-  * NEWS: 
-  updated NEWS 
-
-2018-02-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PdfSpecialHandler.cpp, src/PdfSpecialHandler.hpp: 
-  don't remove fontmap definitions before processing pdf:mapXXX specials 
-
-  * src/FontEngine.cpp: 
-  prevent creating string from nullptr 
-
-2018-02-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FileSystem.cpp, src/FontCache.cpp, src/FontMap.cpp, 
-    src/GFGlyphTracer.cpp, src/MetafontWrapper.cpp, src/PsSpecialHandler.cpp, 
-    src/utility.cpp, tests/DVIReaderTest.cpp, tests/GFReaderTest.cpp, 
-    tests/JFMReaderTest.cpp, tests/TFMReaderTest.cpp: 
-  removed calls of c_str() redundant since C++11 
-
-  * src/StreamReader.cpp: 
-  replaced c_str() with data() in StreamReader 
-
-2018-02-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.3.2 
-
-  * src/TpicSpecialHandler.cpp: 
-  prevent potential division by 0 
-
-  * src/dvisvgm.cpp: 
-  prevent dereferencing nullptr (CACHE_PATH) 
-
-  * NEWS: 
-  updated NEWS 
-
-2018-02-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIActions.hpp, src/DVIReader.cpp, src/DVIReader.hpp, 
-    src/DVIToSVG.cpp, src/DVIToSVG.hpp, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.hpp: 
-  don't update the SVG position after DVIActions::setChar()
-Otherwise, all 
-  characters get an explicit x position assigned even if it's
-already 
-  reached by applying the character's advance width. 
-
-2018-01-27  Hironobu Yamashita  <h.y.acetaminophen at gmail.com>
-
-  * src/JFM.cpp: 
-  JFM.cpp: support new JFM spec introduced in TeX Live r46452 
-
-  * src/JFM.cpp, src/JFM.hpp, tests/JFMReaderTest.cpp: 
-  adapted types to conform new JFM format 
-
-  * src/options.xml: 
-  updated year in options.xml 
-
-  * src/FileFinder.cpp, src/Process.cpp: 
-  relaxed reading from process pipe; fixed getting output of kpsewhich 
-  (Win only) 
-
-2018-01-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CMap.hpp, src/RangeMap.hpp, src/ToUnicodeMap.cpp, 
-    tests/RangeMapTest.cpp, tests/ToUnicodeMapTest.cpp: 
-  renamed RangeMap::size() to RangeMap::numRanges() 
-
-2018-01-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/RangeMap.cpp, src/RangeMap.hpp: 
-  added iterator and some getters to RangeMap 
-
-2018-01-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml: 
-  AppVeyor: updated to FreeType 2.9 and ttfautohint 1.8.1 
-
-  * .appveyor.yml: 
-  AppVeyor: fixed download link of ttfautohint-dll 
-
-  * NEWS: 
-  updated NEWS 
-
-2018-01-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in: 
-  manpage: reworded info about option --bbox=preview (closes #83) 
-
-2018-01-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.3.1 
-
-2018-01-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CMapReader.cpp, src/Directory.cpp, src/Directory.hpp, 
-    src/DvisvgmSpecialHandler.cpp, src/FileFinder.cpp, src/FileFinder.hpp, 
-    src/FilePath.cpp, src/FilePath.hpp, src/FileSystem.cpp, 
-    src/FileSystem.hpp, src/Font.cpp, src/FontCache.cpp, src/FontCache.hpp, 
-    src/FontMap.cpp, src/FontMetrics.cpp, src/FontMetrics.hpp, 
-    src/MetafontWrapper.cpp: 
-  replaced some C string parameters with C++ strings 
-
-2018-01-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * Makefile.am, README, README.md, configure.ac, doc/Makefile.am, 
-    doc/conf-dblatex-man.xsl, doc/conf-dblatex-pdf.xsl, doc/db2html.xsl, 
-    doc/dvisvgm.txt.in, doc/tweak-db-article.xsl, doc/tweak-db-refentry.xsl, 
-    doc/tweak-dblatex-pdf.xsl, libs/Makefile.am, 
-    libs/ff-woff/fontforge/tmpfile2.cpp, src/AGLTable.hpp, 
-    src/BasicDVIReader.cpp, src/BasicDVIReader.hpp, src/Bezier.cpp, 
-    src/Bezier.hpp, src/BgColorSpecialHandler.cpp, 
-    src/BgColorSpecialHandler.hpp, src/Bitmap.cpp, src/Bitmap.hpp, 
-    src/BoundingBox.cpp, src/BoundingBox.hpp, src/CLCommandLine.cpp, 
-    src/CLCommandLine.hpp, src/CLOption.hpp, src/CMap.cpp, src/CMap.hpp, 
-    src/CMapManager.cpp, src/CMapManager.hpp, src/CMapReader.cpp, 
-    src/CMapReader.hpp, src/CRC32.cpp, src/CRC32.hpp, src/Calculator.cpp, 
-    src/Calculator.hpp, src/CharMapID.cpp, src/CharMapID.hpp, 
-    src/Character.hpp, src/Color.cpp, src/Color.hpp, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.hpp, 
-    src/CommandLine.hpp, src/DLLoader.cpp, src/DLLoader.hpp, 
-    src/DVIActions.hpp, src/DVIReader.cpp, src/DVIReader.hpp, 
-    src/DVIToSVG.cpp, src/DVIToSVG.hpp, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.hpp, src/DependencyGraph.hpp, src/Directory.cpp, 
-    src/Directory.hpp, src/DvisvgmSpecialHandler.cpp, 
-    src/DvisvgmSpecialHandler.hpp, src/EPSFile.cpp, src/EPSFile.hpp, 
-    src/EPSToSVG.cpp, src/EPSToSVG.hpp, src/EmSpecialHandler.cpp, 
-    src/EmSpecialHandler.hpp, src/EncFile.cpp, src/EncFile.hpp, 
-    src/FileFinder.cpp, src/FileFinder.hpp, src/FilePath.cpp, 
-    src/FilePath.hpp, src/FileSystem.cpp, src/FileSystem.hpp, 
-    src/FixWord.hpp, src/Font.cpp, src/Font.hpp, src/FontCache.cpp, 
-    src/FontCache.hpp, src/FontEncoding.cpp, src/FontEncoding.hpp, 
-    src/FontEngine.cpp, src/FontEngine.hpp, src/FontManager.cpp, 
-    src/FontManager.hpp, src/FontMap.cpp, src/FontMap.hpp, 
-    src/FontMetrics.cpp, src/FontMetrics.hpp, src/FontStyle.hpp, 
-    src/FontWriter.cpp, src/FontWriter.hpp, src/GFGlyphTracer.cpp, 
-    src/GFGlyphTracer.hpp, src/GFReader.cpp, src/GFReader.hpp, 
-    src/GFTracer.cpp, src/GFTracer.hpp, src/Ghostscript.cpp, 
-    src/Ghostscript.hpp, src/Glyph.hpp, src/GlyphTracerMessages.hpp, 
-    src/GraphicsPath.hpp, src/HtmlSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.hpp, src/HyperlinkManager.cpp, 
-    src/HyperlinkManager.hpp, src/InputBuffer.cpp, src/InputBuffer.hpp, 
-    src/InputReader.cpp, src/InputReader.hpp, src/JFM.cpp, src/JFM.hpp, 
-    src/Length.cpp, src/Length.hpp, src/Makefile.am, src/MapLine.cpp, 
-    src/MapLine.hpp, src/Matrix.cpp, src/Matrix.hpp, src/Message.cpp, 
-    src/Message.hpp, src/MessageException.hpp, src/MetafontWrapper.cpp, 
-    src/MetafontWrapper.hpp, src/MiKTeXCom.cpp, src/MiKTeXCom.hpp, 
-    src/NoPsSpecialHandler.cpp, src/NoPsSpecialHandler.hpp, 
-    src/NumericRanges.hpp, src/PDFParser.cpp, src/PDFParser.hpp, 
-    src/PSFilter.hpp, src/PSInterpreter.cpp, src/PSInterpreter.hpp, 
-    src/PSPattern.cpp, src/PSPattern.hpp, src/PSPreviewFilter.cpp, 
-    src/PSPreviewFilter.hpp, src/PageRanges.cpp, src/PageRanges.hpp, 
-    src/PageSize.cpp, src/PageSize.hpp, src/Pair.hpp, 
-    src/PapersizeSpecialHandler.cpp, src/PapersizeSpecialHandler.hpp, 
-    src/PathClipper.cpp, src/PathClipper.hpp, src/PdfSpecialHandler.cpp, 
-    src/PdfSpecialHandler.hpp, src/PreScanDVIReader.cpp, 
-    src/PreScanDVIReader.hpp, src/Process.cpp, src/Process.hpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, src/RangeMap.cpp, 
-    src/RangeMap.hpp, src/SVGCharHandler.cpp, src/SVGCharHandler.hpp, 
-    src/SVGCharHandlerFactory.cpp, src/SVGCharHandlerFactory.hpp, 
-    src/SVGCharPathHandler.cpp, src/SVGCharPathHandler.hpp, 
-    src/SVGCharTspanTextHandler.cpp, src/SVGCharTspanTextHandler.hpp, 
-    src/SVGOutput.cpp, src/SVGOutput.hpp, src/SVGSingleCharTextHandler.cpp, 
-    src/SVGSingleCharTextHandler.hpp, src/SVGTree.cpp, src/SVGTree.hpp, 
-    src/ShadingPatch.cpp, src/ShadingPatch.hpp, src/SignalHandler.cpp, 
-    src/SignalHandler.hpp, src/SpecialActions.hpp, src/SpecialHandler.hpp, 
-    src/SpecialManager.cpp, src/SpecialManager.hpp, src/StreamReader.cpp, 
-    src/StreamReader.hpp, src/StreamWriter.cpp, src/StreamWriter.hpp, 
-    src/Subfont.cpp, src/Subfont.hpp, src/System.cpp, src/System.hpp, 
-    src/TFM.cpp, src/TFM.hpp, src/TTFAutohint.cpp, src/TTFAutohint.hpp, 
-    src/TensorProductPatch.cpp, src/TensorProductPatch.hpp, src/Terminal.cpp, 
-    src/Terminal.hpp, src/ToUnicodeMap.cpp, src/ToUnicodeMap.hpp, 
-    src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.hpp, 
-    src/TriangularPatch.cpp, src/TriangularPatch.hpp, src/TrueTypeFont.cpp, 
-    src/TrueTypeFont.hpp, src/Unicode.cpp, src/Unicode.hpp, 
-    src/VFActions.hpp, src/VFReader.cpp, src/VFReader.hpp, 
-    src/VectorIterator.hpp, src/VectorStream.hpp, src/XMLDocument.cpp, 
-    src/XMLDocument.hpp, src/XMLNode.cpp, src/XMLNode.hpp, src/XMLString.cpp, 
-    src/XMLString.hpp, src/ZLibOutputStream.hpp, src/dvisvgm.cpp, 
-    src/ffwrapper.c, src/ffwrapper.h, src/macros.hpp, src/options.dtd, 
-    src/options.xml, src/psdefs.cpp, src/utility.cpp, src/utility.hpp, 
-    src/version.hpp, src/version.hpp.in, src/windows.hpp, 
-    tests/BezierTest.cpp, tests/BitmapTest.cpp, tests/BoundingBoxTest.cpp, 
-    tests/CMapManagerTest.cpp, tests/CMapReaderTest.cpp, tests/CMapTest.cpp, 
-    tests/CRC32Test.cpp, tests/CalculatorTest.cpp, 
-    tests/ColorSpecialTest.cpp, tests/ColorTest.cpp, 
-    tests/CommandLineTest.cpp, tests/DVIReaderTest.cpp, 
-    tests/DependencyGraphTest.cpp, tests/DirectoryTest.cpp, 
-    tests/DvisvgmSpecialTest.cpp, tests/EmSpecialTest.cpp, 
-    tests/FileFinderTest.cpp, tests/FilePathTest.cpp, 
-    tests/FileSystemTest.cpp, tests/FontCacheTest.cpp, 
-    tests/FontManagerTest.cpp, tests/FontMapTest.cpp, 
-    tests/GFGlyphTracerTest.cpp, tests/GFReaderTest.cpp, 
-    tests/GhostscriptTest.cpp, tests/GraphicsPathTest.cpp, 
-    tests/JFMReaderTest.cpp, tests/LengthTest.cpp, tests/Makefile.am, 
-    tests/MapLineTest.cpp, tests/MatrixTest.cpp, 
-    tests/MessageExceptionTest.cpp, tests/PDFParserTest.cpp, 
-    tests/PSInterpreterTest.cpp, tests/PageRagesTest.cpp, 
-    tests/PageSizeTest.cpp, tests/PairTest.cpp, 
-    tests/PapersizeSpecialTest.cpp, tests/RangeMapTest.cpp, 
-    tests/SVGOutputTest.cpp, tests/ShadingPatchTest.cpp, 
-    tests/SpecialManagerTest.cpp, tests/SplittedCharInputBufferTest.cpp, 
-    tests/StreamInputBufferTest.cpp, tests/StreamReaderTest.cpp, 
-    tests/StreamWriterTest.cpp, tests/StringMatcherTest.cpp, 
-    tests/SubfontTest.cpp, tests/TFMReaderTest.cpp, 
-    tests/TensorProductPatchTest.cpp, tests/ToUnicodeMapTest.cpp, 
-    tests/TpicSpecialTest.cpp, tests/TriangularPatchTest.cpp, 
-    tests/UnicodeTest.cpp, tests/UtilityTest.cpp, 
-    tests/VectorIteratorTest.cpp, tests/VectorStreamTest.cpp, 
-    tests/XMLNodeTest.cpp, tests/XMLStringTest.cpp, tests/check-conv, 
-    tests/create-makefile, tests/data/Makefile.am, tests/genhashcheck.py, 
-    tests/normalize.xsl, tests/testmain.cpp: 
-  updated year in copyright statements to 2018 
-
-  * src/dvisvgm.cpp: 
-  avoid potential dangling string pointer to --fontmap argument 
-
-  * src/Font.cpp: 
-  fixed char width of fonts slanted by style option (closes #82) 
-
-2017-12-31  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/TTFAutohint.hpp: 
-  don't declare member variables of TTFAutohint if ttfautohint is not 
-  available 
-
-  * src/FontWriter.cpp: 
-  keep unhinted TTF if autohinting failed 
-
-2017-12-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml: 
-  AppVeyor: download and install ttfautohint headers 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.3 
-
-  * NEWS, README, README.md: 
-  updated README and NEWS 
-
-2017-12-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DLLoader.cpp, src/DLLoader.hpp, src/Ghostscript.cpp, 
-    src/TTFAutohint.cpp: 
-  simplify function to load a symbol from a dynamic library 
-
-2017-12-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, src/DLLoader.cpp, src/DLLoader.hpp, src/FontWriter.cpp, 
-    src/Makefile.am, src/TTFAutohint.cpp, src/TTFAutohint.hpp, 
-    src/dvisvgm.cpp: 
-  added code to load libttfautohint dynamically at runtime 
-
-2017-12-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/xxHash/xxhash.c, libs/xxHash/xxhash.h: 
-  updated xxHash to version 0.6.4 
-
-2017-12-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/gtest/include/gtest/gtest-param-test.h, 
-    tests/gtest/include/gtest/gtest-printers.h, 
-    tests/gtest/include/gtest/gtest-spi.h, 
-    tests/gtest/include/gtest/gtest-typed-test.h, 
-    tests/gtest/include/gtest/gtest.h, 
-    tests/gtest/include/gtest/internal/custom/gtest-port.h, 
-    tests/gtest/include/gtest/internal/custom/gtest.h, 
-    tests/gtest/include/gtest/internal/gtest-internal.h, 
-    tests/gtest/include/gtest/internal/gtest-param-util-generated.h, 
-    tests/gtest/include/gtest/internal/gtest-param-util.h, 
-    tests/gtest/include/gtest/internal/gtest-port-arch.h, 
-    tests/gtest/include/gtest/internal/gtest-port.h, 
-    tests/gtest/src/gtest-death-test.cc, 
-    tests/gtest/src/gtest-internal-inl.h, tests/gtest/src/gtest-port.cc, 
-    tests/gtest/src/gtest-printers.cc, tests/gtest/src/gtest.cc: 
-  updated gtest 
-
-2017-12-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac: 
-  configure: dropped check of outdated Ghostscript version 
-
-  * configure.ac, src/Makefile.am: 
-  configure: added --with-kpathsea to set the path of the kpathsea devel 
-  files
-closes #71 
-
-2017-12-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  psdefs: replaced '6 array' with 'matrix' 
-
-2017-12-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/woff2/Makefile.am, libs/woff2/include/woff2/file.h, 
-    src/FontWriter.cpp, src/FontWriter.hpp, src/Makefile.am, 
-    src/StreamReader.hpp, src/StreamWriter.cpp, src/StreamWriter.hpp, 
-    src/TrueTypeFont.cpp, src/TrueTypeFont.hpp, src/ffwrapper.c, 
-    src/ffwrapper.h, src/utility.cpp, src/utility.hpp: 
-  replaced ff_sfd_to_woff() with TrueTypeFont::writeWOFF() 
-
-  * configure.ac, src/FontWriter.cpp, src/Makefile.am, src/dvisvgm.cpp: 
-  added optional support for ttfautohint 
-
-2017-12-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, libs/Makefile.am, libs/brotli/LICENSE, 
-    libs/brotli/Makefile.am, libs/brotli/common/constants.h, 
-    libs/brotli/common/dictionary.c, libs/brotli/common/dictionary.h, 
-    libs/brotli/common/version.h, libs/brotli/enc/backward_references.c, 
-    libs/brotli/enc/backward_references.h, 
-    libs/brotli/enc/backward_references_hq.c, 
-    libs/brotli/enc/backward_references_hq.h, 
-    libs/brotli/enc/backward_references_inc.h, libs/brotli/enc/bit_cost.c, 
-    libs/brotli/enc/bit_cost.h, libs/brotli/enc/bit_cost_inc.h, 
-    libs/brotli/enc/block_encoder_inc.h, libs/brotli/enc/block_splitter.c, 
-    libs/brotli/enc/block_splitter.h, libs/brotli/enc/block_splitter_inc.h, 
-    libs/brotli/enc/brotli_bit_stream.c, libs/brotli/enc/brotli_bit_stream.h, 
-    libs/brotli/enc/cluster.c, libs/brotli/enc/cluster.h, 
-    libs/brotli/enc/cluster_inc.h, libs/brotli/enc/command.h, 
-    libs/brotli/enc/compress_fragment.c, libs/brotli/enc/compress_fragment.h, 
-    libs/brotli/enc/compress_fragment_two_pass.c, 
-    libs/brotli/enc/compress_fragment_two_pass.h, libs/brotli/enc/context.h, 
-    libs/brotli/enc/dictionary_hash.c, libs/brotli/enc/dictionary_hash.h, 
-    libs/brotli/enc/encode.c, libs/brotli/enc/entropy_encode.c, 
-    libs/brotli/enc/entropy_encode.h, 
-    libs/brotli/enc/entropy_encode_static.h, libs/brotli/enc/fast_log.h, 
-    libs/brotli/enc/find_match_length.h, libs/brotli/enc/hash.h, 
-    libs/brotli/enc/hash_forgetful_chain_inc.h, 
-    libs/brotli/enc/hash_longest_match64_inc.h, 
-    libs/brotli/enc/hash_longest_match_inc.h, 
-    libs/brotli/enc/hash_longest_match_quickly_inc.h, 
-    libs/brotli/enc/hash_to_binary_tree_inc.h, libs/brotli/enc/histogram.c, 
-    libs/brotli/enc/histogram.h, libs/brotli/enc/histogram_inc.h, 
-    libs/brotli/enc/literal_cost.c, libs/brotli/enc/literal_cost.h, 
-    libs/brotli/enc/memory.c, libs/brotli/enc/memory.h, 
-    libs/brotli/enc/metablock.c, libs/brotli/enc/metablock.h, 
-    libs/brotli/enc/metablock_inc.h, libs/brotli/enc/port.h, 
-    libs/brotli/enc/prefix.h, libs/brotli/enc/quality.h, 
-    libs/brotli/enc/ringbuffer.h, libs/brotli/enc/static_dict.c, 
-    libs/brotli/enc/static_dict.h, libs/brotli/enc/static_dict_lut.h, 
-    libs/brotli/enc/utf8_util.c, libs/brotli/enc/utf8_util.h, 
-    libs/brotli/enc/write_bits.h, libs/brotli/include/brotli/decode.h, 
-    libs/brotli/include/brotli/encode.h, libs/brotli/include/brotli/port.h, 
-    libs/brotli/include/brotli/types.h, libs/woff2/Makefile.am, 
-    libs/woff2/brotli/LICENSE, libs/woff2/brotli/Makefile.am, 
-    libs/woff2/brotli/common/constants.h, 
-    libs/woff2/brotli/common/dictionary.c, 
-    libs/woff2/brotli/common/dictionary.h, 
-    libs/woff2/brotli/common/version.h, 
-    libs/woff2/brotli/enc/backward_references.c, 
-    libs/woff2/brotli/enc/backward_references.h, 
-    libs/woff2/brotli/enc/backward_references_hq.c, 
-    libs/woff2/brotli/enc/backward_references_hq.h, 
-    libs/woff2/brotli/enc/backward_references_inc.h, 
-    libs/woff2/brotli/enc/bit_cost.c, libs/woff2/brotli/enc/bit_cost.h, 
-    libs/woff2/brotli/enc/bit_cost_inc.h, 
-    libs/woff2/brotli/enc/block_encoder_inc.h, 
-    libs/woff2/brotli/enc/block_splitter.c, 
-    libs/woff2/brotli/enc/block_splitter.h, 
-    libs/woff2/brotli/enc/block_splitter_inc.h, 
-    libs/woff2/brotli/enc/brotli_bit_stream.c, 
-    libs/woff2/brotli/enc/brotli_bit_stream.h, 
-    libs/woff2/brotli/enc/cluster.c, libs/woff2/brotli/enc/cluster.h, 
-    libs/woff2/brotli/enc/cluster_inc.h, libs/woff2/brotli/enc/command.h, 
-    libs/woff2/brotli/enc/compress_fragment.c, 
-    libs/woff2/brotli/enc/compress_fragment.h, 
-    libs/woff2/brotli/enc/compress_fragment_two_pass.c, 
-    libs/woff2/brotli/enc/compress_fragment_two_pass.h, 
-    libs/woff2/brotli/enc/context.h, libs/woff2/brotli/enc/dictionary_hash.c, 
-    libs/woff2/brotli/enc/dictionary_hash.h, libs/woff2/brotli/enc/encode.c, 
-    libs/woff2/brotli/enc/entropy_encode.c, 
-    libs/woff2/brotli/enc/entropy_encode.h, 
-    libs/woff2/brotli/enc/entropy_encode_static.h, 
-    libs/woff2/brotli/enc/fast_log.h, 
-    libs/woff2/brotli/enc/find_match_length.h, libs/woff2/brotli/enc/hash.h, 
-    libs/woff2/brotli/enc/hash_forgetful_chain_inc.h, 
-    libs/woff2/brotli/enc/hash_longest_match64_inc.h, 
-    libs/woff2/brotli/enc/hash_longest_match_inc.h, 
-    libs/woff2/brotli/enc/hash_longest_match_quickly_inc.h, 
-    libs/woff2/brotli/enc/hash_to_binary_tree_inc.h, 
-    libs/woff2/brotli/enc/histogram.c, libs/woff2/brotli/enc/histogram.h, 
-    libs/woff2/brotli/enc/histogram_inc.h, 
-    libs/woff2/brotli/enc/literal_cost.c, 
-    libs/woff2/brotli/enc/literal_cost.h, libs/woff2/brotli/enc/memory.c, 
-    libs/woff2/brotli/enc/memory.h, libs/woff2/brotli/enc/metablock.c, 
-    libs/woff2/brotli/enc/metablock.h, libs/woff2/brotli/enc/metablock_inc.h, 
-    libs/woff2/brotli/enc/port.h, libs/woff2/brotli/enc/prefix.h, 
-    libs/woff2/brotli/enc/quality.h, libs/woff2/brotli/enc/ringbuffer.h, 
-    libs/woff2/brotli/enc/static_dict.c, libs/woff2/brotli/enc/static_dict.h, 
-    libs/woff2/brotli/enc/static_dict_lut.h, 
-    libs/woff2/brotli/enc/utf8_util.c, libs/woff2/brotli/enc/utf8_util.h, 
-    libs/woff2/brotli/enc/write_bits.h, 
-    libs/woff2/brotli/include/brotli/decode.h, 
-    libs/woff2/brotli/include/brotli/encode.h, 
-    libs/woff2/brotli/include/brotli/port.h, 
-    libs/woff2/brotli/include/brotli/types.h, src/Makefile.am, 
-    tests/Makefile.am, tests/create-makefile: 
-  moved brotli from woff2 to libs folder 
-
-2017-12-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/variant/include/mpark/config.hpp, 
-    libs/variant/include/mpark/lib.hpp, 
-    libs/variant/include/mpark/variant.hpp: 
-  updated mpark::variant to 
-  https://github.com/mpark/variant/commit/382014b
-fixes a build error 
-  introduced with MSVC 19.12 
-
-2017-12-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.2.3 
-
-  * NEWS: 
-  updated NEWS 
-
-2017-11-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/woff2/brotli/common/dictionary.h, 
-    libs/woff2/brotli/common/version.h, 
-    libs/woff2/brotli/enc/backward_references_hq.c, 
-    libs/woff2/brotli/enc/backward_references_hq.h, 
-    libs/woff2/brotli/enc/port.h, libs/woff2/brotli/enc/quality.h, 
-    libs/woff2/brotli/include/brotli/decode.h, 
-    libs/woff2/brotli/include/brotli/encode.h: 
-  updated brotli to version 1.0.2 
-
-2017-11-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BgColorSpecialHandler.cpp, src/BoundingBox.cpp, src/BoundingBox.hpp, 
-    src/Color.cpp, src/PathClipper.cpp, src/SVGTree.cpp, 
-    tests/BoundingBoxTest.cpp: 
-  minor code cleanup and improvements 
-
-  * src/DependencyGraph.hpp: 
-  simplified DependencyGraph::GraphNode 
-
-2017-11-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/TpicSpecialTest.cpp: 
-  added missing initializers in TpicSpecialTest 
-
-  * tests/EmSpecialTest.cpp: 
-  added missing initializers in EmSpecialTest 
-
-  * src/DependencyGraph.hpp: 
-  fixed dangling pointer issue in DependencyGraph 
-
-  * src/Makefile.am, tests/Makefile.am, tests/create-makefile: 
-  suppress warnings regarding 'mismatched tags' 
-  (class/struct)
-https://gcc.gnu.org/wiki/FAQ#Why_GCC_does_not_warn_for_mismatch_between_struct_and_class_.28-Wmismatched-tags.29_.3F 
-
-2017-11-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PSPattern.cpp, src/SVGCharHandler.cpp, src/SVGTree.cpp, 
-    src/TpicSpecialHandler.cpp: 
-  removed redundant calls of std::move() 
-
-  * src/Subfont.cpp, src/Subfont.hpp, tests/CMapManagerTest.cpp, 
-    tests/FileFinderTest.cpp, tests/FontManagerTest.cpp, tests/Makefile.am, 
-    tests/MapLineTest.cpp, tests/SubfontTest.cpp, tests/create-makefile, 
-    tests/testmain.cpp, tests/testutil.hpp: 
-  tests: moved common initializations to testmain.cpp 
-
-  * src/DVIReader.hpp, tests/DVIReaderTest.cpp, tests/Makefile.am, 
-    tests/data/Makefile.am, tests/data/cmr10.pfb, tests/data/sample_v2.dvi, 
-    tests/data/sample_v3.dvi: 
-  added test for DVIReader 
-
-2017-11-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * Makefile.am: 
-  removed redundant lcov statement from Makefile 
-
-2017-11-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/CMapTest.cpp, tests/GFReaderTest.cpp, tests/JFMReaderTest.cpp, 
-    tests/RangeMapTest.cpp, tests/TFMReaderTest.cpp, 
-    tests/TensorProductPatchTest.cpp, tests/ToUnicodeMapTest.cpp, 
-    tests/VectorStreamTest.cpp: 
-  tests: few code improvements 
-
-  * README.md: 
-  added donation badge to readme 
-
-2017-11-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Font.cpp, src/Font.hpp: 
-  prevent dangling pointers to font map entries (closes #79) 
-
-  * src/CMapManager.cpp, src/FileFinder.cpp, src/Font.cpp, src/Font.hpp, 
-    src/FontEngine.cpp, src/FontManager.cpp, src/FontMap.cpp, 
-    src/FontMap.hpp, src/Ghostscript.cpp, src/MiKTeXCom.cpp, src/XMLNode.cpp: 
-  replaced null pointer constants with 'nullptr' 
-
-  * src/XMLString.cpp, tests/TensorProductPatchTest.cpp, 
-    tests/XMLStringTest.cpp: 
-  avoid scientific notation when printing floats/doubles 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.2.2 
-
-  * NEWS: 
-  updated NEWS 
-
-2017-11-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/Makefile.am: 
-  ensure tweak-db-refentry.xsl is put into the tarball 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.2.1 
-
-  * NEWS, README.md: 
-  updated NEWS and README 
-
-  * libs/variant/include/mpark/lib.hpp, 
-    libs/variant/include/mpark/variant.hpp: 
-  updated mpark::variant to commit 
-  ea542a0
-https://github.com/mpark/variant/commit/ea542a0fef86fb8c1696238b95bdaddb8ff2337c 
-
-2017-11-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README, README.md, doc/dvisvgm.txt.in: 
-  minor additions/fixes of manpage and README 
-
-2017-11-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/Makefile.am, doc/db2html.xsl, doc/tweak-db-refentry.xsl: 
-  manpage: avoid using 'stats' to improve portability (closes #72) 
-
-2017-10-31  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/InputReader.cpp, src/InputReader.hpp, src/PSInterpreter.cpp: 
-  simplified code to lookup PS operators 
-
-2017-10-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.hpp, src/psdefs.cpp, tests/PSInterpreterTest.cpp: 
-  properly apply CTM to linewidth (closes #77) 
-
-  * src/PsSpecialHandler.hpp, src/psdefs.cpp, tests/PSInterpreterTest.cpp: 
-  call applyscalevals on every change of the CTM 
-
-2017-10-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, src/DVIToSVGActions.hpp, 
-    src/DvisvgmSpecialHandler.cpp, src/EPSToSVG.cpp, src/EPSToSVG.hpp, 
-    src/EmSpecialHandler.cpp, src/HyperlinkManager.cpp, src/PSPattern.cpp, 
-    src/PSPattern.hpp, src/PsSpecialHandler.cpp, src/SVGCharHandler.cpp, 
-    src/SVGCharHandler.hpp, src/SVGCharPathHandler.cpp, 
-    src/SVGCharTspanTextHandler.cpp, src/SVGSingleCharTextHandler.cpp, 
-    src/SVGTree.cpp, src/SVGTree.hpp, src/ShadingPatch.hpp, 
-    src/SpecialActions.hpp, src/TpicSpecialHandler.cpp, src/XMLDocument.cpp, 
-    src/XMLDocument.hpp, src/XMLNode.cpp, src/XMLNode.hpp, src/utility.hpp, 
-    tests/DvisvgmSpecialTest.cpp, tests/EmSpecialTest.cpp, 
-    tests/TpicSpecialTest.cpp, tests/XMLNodeTest.cpp: 
-  replaced raw XMLNode pointers with unique_ptrs
-which helps to ensure 
-  proper ownership and simplifies deleting the corresponding objects 
-
-  * src/DependencyGraph.hpp, src/SVGTree.cpp, tests/DependencyGraphTest.cpp: 
-  manage heap memory in DependencyGraph with unique_ptrs 
-
-2017-10-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/ff-woff/fontforge/macbinary.c: 
-  updated link to CTAN:/tools/macutils/crc 
-
-2017-10-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/woff2/include/woff2/version.h: 
-  replaced CRLF line endings 
-
-2017-10-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CMapManager.cpp, src/CMapReader.cpp, src/CMapReader.hpp, 
-    src/DVIActions.hpp, src/DVIToSVG.cpp, src/DVIToSVG.hpp, 
-    src/DVIToSVGActions.hpp, src/FileFinder.cpp, src/Font.cpp, src/Font.hpp, 
-    src/FontEncoding.cpp, src/FontEncoding.hpp, src/FontEngine.cpp, 
-    src/FontEngine.hpp, src/FontManager.cpp, src/FontMetrics.cpp, 
-    src/FontMetrics.hpp, src/PSPattern.hpp, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.hpp, src/SVGCharHandlerFactory.cpp, 
-    src/SVGCharHandlerFactory.hpp, src/SVGOutput.cpp, 
-    src/SVGSingleCharTextHandler.hpp, src/SVGTree.cpp, src/ShadingPatch.cpp, 
-    src/ShadingPatch.hpp, src/SignalHandler.cpp, src/Subfont.cpp, 
-    src/Subfont.hpp, src/XMLNode.cpp, tests/CMapReaderTest.cpp, 
-    tests/ShadingPatchTest.cpp: 
-  replaced several bare new/delete statements with unique pointers 
-
-  * src/dvisvgm.cpp: 
-  fixed output of option --version 
-
-  * src/Length.hpp, src/PageSize.cpp: 
-  added user-defined literals for some length units 
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.2 
-
-  * NEWS, README, README.md: 
-  updated NEWS and README 
-
-2017-10-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontWriter.cpp: 
-  added missing #include of config.h 
-
-  * src/Message.cpp: 
-  check for '\0' at end of DVISVGM_COLORS 
-
-  * src/Subfont.cpp: 
-  don't access unique_ptr after it has been moved 
-
-2017-10-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PDFParser.cpp, src/PDFParser.hpp: 
-  replaced shared_ptr with unique_ptr in PDFParser 
-
-2017-10-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * AUTHORS, configure.ac, doc/dvisvgm.txt.in, libs/Makefile.am, 
-    libs/variant/CMakeLists.txt, libs/variant/LICENSE.md, 
-    libs/variant/Makefile.am, libs/variant/include/mpark/in_place.hpp, 
-    libs/variant/include/mpark/lib.hpp, 
-    libs/variant/include/mpark/variant.hpp, src/HyperlinkManager.cpp, 
-    src/HyperlinkManager.hpp, src/InputReader.hpp, src/Makefile.am, 
-    src/PDFParser.cpp, src/PDFParser.hpp, src/PdfSpecialHandler.cpp, 
-    src/PdfSpecialHandler.hpp, tests/Makefile.am, tests/PDFParserTest.cpp, 
-    tests/SpecialManagerTest.cpp, tests/create-makefile: 
-  added evaluation of PDF hyperlink specials (closes #74) 
-
-  * libs/variant/include/mpark/config.hpp: 
-  added missing config file 
-
-  * .travis.yml: 
-  Travis: use gcc 4.9 rather than 4.8 to compile mpark::variant correctly 
-
-  * tests/Makefile.am, tests/create-makefile, tests/testmain.cpp: 
-  add custom testmain to gtest.a 
-
-2017-10-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/HtmlSpecialHandler.cpp, src/HtmlSpecialHandler.hpp, 
-    src/HyperlinkManager.cpp, src/HyperlinkManager.hpp, src/Makefile.am, 
-    src/dvisvgm.cpp: 
-  separated hyperlink functionality from HtmlSpecialHandler to 
-  HyperlinkManager 
-
-2017-10-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/woff2/src/font.cc, 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, 
-    libs/woff2/src/woff2_enc.cc: 
-  woff2: removed unused variables to prevent compiler warnings 
-
-2017-10-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/woff2/Makefile.am, libs/woff2/include/woff2/decode.h, 
-    libs/woff2/include/woff2/encode.h, libs/woff2/include/woff2/file.h, 
-    libs/woff2/include/woff2/output.h, libs/woff2/include/woff2/version.h, 
-    libs/woff2/src/buffer.h, libs/woff2/src/file.h, libs/woff2/src/font.cc, 
-    libs/woff2/src/font.h, libs/woff2/src/glyph.cc, libs/woff2/src/glyph.h, 
-    libs/woff2/src/normalize.cc, libs/woff2/src/normalize.h, 
-    libs/woff2/src/port.h, libs/woff2/src/round.h, 
-    libs/woff2/src/store_bytes.h, libs/woff2/src/table_tags.cc, 
-    libs/woff2/src/table_tags.h, libs/woff2/src/transform.cc, 
-    libs/woff2/src/transform.h, libs/woff2/src/variable_length.cc, 
-    libs/woff2/src/variable_length.h, libs/woff2/src/woff2_common.cc, 
-    libs/woff2/src/woff2_common.h, libs/woff2/src/woff2_dec.h, 
-    libs/woff2/src/woff2_enc.cc, libs/woff2/src/woff2_enc.h, 
-    libs/woff2/src/woff2_out.cc, libs/woff2/src/woff2_out.h, 
-    src/FontWriter.cpp, src/Makefile.am, src/dvisvgm.cpp: 
-  updated woff2 to version 1.0.1 
-
-2017-10-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CRC32.hpp, src/SpecialManager.hpp, src/Subfont.hpp, src/XMLNode.hpp: 
-  use delete/default to remove/implement constructors 
-
-  * src/XMLNode.cpp, src/XMLNode.hpp: 
-  added move constructor to XMLElementNode 
-
-  * src/Subfont.cpp, src/Subfont.hpp, src/utility.hpp: 
-  removed stream-based constructor of SubfontException 
-
-2017-09-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/PapersizeSpecialHandler.cpp, 
-    src/PapersizeSpecialHandler.hpp, src/PdfSpecialHandler.cpp, 
-    src/PdfSpecialHandler.hpp, src/SpecialManager.cpp, 
-    src/SpecialManager.hpp, tests/PapersizeSpecialTest.cpp: 
-  added evaluation of pdf:pagesize specials 
-
-2017-09-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVG.cpp, src/Length.hpp, src/PageSize.cpp, src/PageSize.hpp, 
-    src/utility.hpp, tests/PageSizeTest.cpp: 
-  use class Length in PageSize rather than plain numbers 
-
-  * src/BoundingBox.cpp, src/BoundingBox.hpp, src/DVIToSVG.cpp, 
-    src/utility.cpp, src/utility.hpp, tests/BoundingBoxTest.cpp, 
-    tests/UtilityTest.cpp: 
-  rewrite of BoundingBox::extractLengths() 
-
-2017-09-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/TpicSpecialHandler.cpp: 
-  use isxdigit() to check hex digits 
-
-  * src/InputReader.cpp, src/InputReader.hpp, tests/Makefile.am, 
-    tests/SplittedCharInputBufferTest.cpp, tests/StreamInputBufferTest.cpp, 
-    tests/StringMatcherTest.cpp: 
-  use Knuth-Morris-Pratt algorithm to find a string in a stream 
-
-  * libs/woff2/brotli/common/constants.h, 
-    libs/woff2/brotli/common/dictionary.c, 
-    libs/woff2/brotli/common/dictionary.h, 
-    libs/woff2/brotli/common/version.h, 
-    libs/woff2/brotli/enc/backward_references.c, 
-    libs/woff2/brotli/enc/backward_references_hq.c, 
-    libs/woff2/brotli/enc/backward_references_hq.h, 
-    libs/woff2/brotli/enc/backward_references_inc.h, 
-    libs/woff2/brotli/enc/block_splitter.c, 
-    libs/woff2/brotli/enc/block_splitter_inc.h, 
-    libs/woff2/brotli/enc/brotli_bit_stream.c, 
-    libs/woff2/brotli/enc/brotli_bit_stream.h, 
-    libs/woff2/brotli/enc/cluster_inc.h, libs/woff2/brotli/enc/command.h, 
-    libs/woff2/brotli/enc/compress_fragment.c, 
-    libs/woff2/brotli/enc/compress_fragment_two_pass.c, 
-    libs/woff2/brotli/enc/encode.c, 
-    libs/woff2/brotli/enc/find_match_length.h, libs/woff2/brotli/enc/hash.h, 
-    libs/woff2/brotli/enc/hash_forgetful_chain_inc.h, 
-    libs/woff2/brotli/enc/hash_longest_match64_inc.h, 
-    libs/woff2/brotli/enc/hash_longest_match_inc.h, 
-    libs/woff2/brotli/enc/hash_longest_match_quickly_inc.h, 
-    libs/woff2/brotli/enc/hash_to_binary_tree_inc.h, 
-    libs/woff2/brotli/enc/memory.h, libs/woff2/brotli/enc/port.h, 
-    libs/woff2/brotli/enc/write_bits.h, 
-    libs/woff2/brotli/include/brotli/decode.h, 
-    libs/woff2/brotli/include/brotli/encode.h: 
-  updated Brotli to version 1.0.1 
-
-2017-09-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVG.cpp, src/SpecialManager.cpp, src/SpecialManager.hpp, 
-    src/utility.hpp, tests/Makefile.am, tests/SpecialManagerTest.cpp: 
-  use smart pointers to allocate/deallocate SpecialHandlers 
-
-  * src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.hpp, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.hpp, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp, 
-    src/EmSpecialHandler.cpp, src/EmSpecialHandler.hpp, 
-    src/HtmlSpecialHandler.cpp, src/HtmlSpecialHandler.hpp, 
-    src/NoPsSpecialHandler.cpp, src/NoPsSpecialHandler.hpp, 
-    src/PapersizeSpecialHandler.cpp, src/PapersizeSpecialHandler.hpp, 
-    src/PdfSpecialHandler.cpp, src/PdfSpecialHandler.hpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, 
-    src/SpecialHandler.hpp, src/SpecialManager.cpp, 
-    src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.hpp, 
-    tests/ColorSpecialTest.cpp, tests/PapersizeSpecialTest.cpp: 
-  changed return value of SpecialHandler::prefixes() to std::vector 
-
-  * .appveyor.yml: 
-  AppVeyor: updated FreeType to version 2.8.1 
-
-2017-09-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/FileSystemTest.cpp: 
-  close streams before removing corresponding files 
-
-2017-09-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/dvisvgm.cpp: 
-  fixed number of dashes printed by option -V1 
-
-2017-09-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DependencyGraph.hpp, src/SVGTree.cpp, tests/DependencyGraphTest.cpp: 
-  DependencyGraph::getKeys(): return result, don't use reference parameter 
-
-  * src/FileFinder.cpp, src/Makefile.am: 
-  added missing #include; added windows.hpp to Makefile.am 
-
-  * tests/Makefile.am, tests/create-makefile, tests/testmain.cpp: 
-  define variable TEST_ARGV0 to make argv[0] of main() available in 
-  tests
-this is required to initialize kpathsea properly, for example 
-
-  * src/FileFinder.cpp, src/FileFinder.hpp, tests/CMapManagerTest.cpp, 
-    tests/FileFinderTest.cpp, tests/FontManagerTest.cpp, 
-    tests/MapLineTest.cpp, tests/SubfontTest.cpp: 
-  init libkpathsea correctly in tests to prevent assertion failures 
-
-  * libs/xxHash/xxhash.c, libs/xxHash/xxhash.h: 
-  updated xxHash to version 0.6.3 
-
-2017-09-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/FontCacheTest.cpp, tests/Makefile.am, tests/create-makefile: 
-  fixed path issue in FontCacheTest 
-
-  * src/GFReader.cpp: 
-  fixed incorrect integer type in GFReader; insert CharInfos with emplace 
-
-  * src/MapLine.cpp, tests/MapLineTest.cpp: 
-  treat prefix "<<" in a mapline as "<[" (skip second char) 
-
-  * doc/dvisvgm.txt.in, src/dvisvgm.cpp: 
-  added pdftex.map to default mapfiles 
-
-2017-09-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BasicDVIReader.cpp, src/BgColorSpecialHandler.cpp, src/Bitmap.cpp, 
-    src/BoundingBox.cpp, src/CMap.cpp, src/CMapReader.cpp, src/CRC32.cpp, 
-    src/Calculator.cpp, src/ColorSpecialHandler.cpp, src/DLLoader.cpp, 
-    src/DVIReader.cpp, src/Directory.cpp, src/EPSFile.cpp, src/EPSToSVG.cpp, 
-    src/EmSpecialHandler.cpp, src/EncFile.cpp, src/FileFinder.cpp, 
-    src/FilePath.cpp, src/Font.cpp, src/FontCache.cpp, src/FontEncoding.cpp, 
-    src/FontEngine.cpp, src/FontManager.cpp, src/FontMap.cpp, 
-    src/FontMap.hpp, src/FontMetrics.cpp, src/FontWriter.cpp, 
-    src/GFGlyphTracer.cpp, src/GFTracer.cpp, src/HtmlSpecialHandler.cpp, 
-    src/InputBuffer.cpp, src/InputReader.cpp, src/JFM.cpp, src/MapLine.cpp, 
-    src/Message.cpp, src/MetafontWrapper.cpp, src/MiKTeXCom.cpp, 
-    src/NoPsSpecialHandler.cpp, src/PSInterpreter.cpp, src/PSPattern.cpp, 
-    src/PSPreviewFilter.cpp, src/PageRanges.cpp, src/PageSize.cpp, 
-    src/PathClipper.cpp, src/PdfSpecialHandler.cpp, src/SVGTree.cpp, 
-    src/SpecialManager.cpp, src/StreamWriter.cpp, src/TFM.cpp, 
-    src/VFReader.cpp, src/XMLDocument.cpp, src/XMLNode.cpp, 
-    src/XMLString.cpp, src/dvisvgm.cpp: 
-  removed redundant #includes of config.h 
-
-  * src/DLLoader.hpp, src/Directory.cpp, src/Directory.hpp, 
-    src/FileSystem.cpp, src/MiKTeXCom.hpp, src/Process.cpp, src/Terminal.cpp, 
-    src/windows.hpp: 
-  disable macros min/max defined in windows.h 
-
-  * src/CLCommandLine.cpp, src/CMapManager.cpp, src/CMapManager.hpp, 
-    src/Calculator.cpp, src/Calculator.hpp, src/DVIToSVG.cpp, 
-    src/DVIToSVGActions.hpp, src/DependencyGraph.hpp, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp, 
-    src/EmSpecialHandler.cpp, src/EmSpecialHandler.hpp, src/FileFinder.cpp, 
-    src/Font.cpp, src/Font.hpp, src/FontCache.hpp, src/FontEncoding.cpp, 
-    src/FontManager.cpp, src/FontManager.hpp, src/FontMap.hpp, 
-    src/GFReader.hpp, src/HtmlSpecialHandler.cpp, src/HtmlSpecialHandler.hpp, 
-    src/InputReader.cpp, src/InputReader.hpp, src/Message.cpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, src/SVGTree.cpp, 
-    src/SVGTree.hpp, src/SpecialManager.hpp, src/Subfont.cpp, 
-    src/Subfont.hpp, tests/StreamInputBufferTest.cpp: 
-  replaced std::map with std::unordered_map where possible to increase 
-  performance 
-
-2017-09-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/DvisvgmSpecialTest.cpp: 
-  replaced constexpr with const to make clang happy 
-
-  * doc/dvisvgm.txt.in, src/DvisvgmSpecialHandler.cpp, 
-    tests/DvisvgmSpecialTest.cpp: 
-  allow all common length units in dvisvgm specials 
-
-2017-08-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/AGLTable.hpp, src/CMapReader.cpp, src/Color.cpp, 
-    src/CommandLine.hpp, src/FontWriter.cpp, tests/genhashcheck.py: 
-  use list initialization on constant std::arrays 
-
-  * tests/MapLineTest.cpp: 
-  added braces to prevent compiler warnings 
-
-2017-08-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CMapManager.cpp, src/DvisvgmSpecialHandler.cpp, src/Font.cpp, 
-    src/Ghostscript.cpp, src/PsSpecialHandler.cpp, src/dvisvgm.cpp, 
-    tests/DvisvgmSpecialTest.cpp: 
-  use range-based for to iterate over a fixed sequence of items 
-
-2017-08-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * m4/ax_code_coverage.m4: 
-  updated ax_code_coverage.m4 to version 25 
-
-2017-08-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml: 
-  AppVeyor: updated potrace to version 1.15 
-
-2017-08-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/woff2/src/font.cc, libs/woff2/src/normalize.cc, 
-    libs/woff2/src/port.h, libs/woff2/src/store_bytes.h, 
-    libs/woff2/src/woff2_common.cc, libs/woff2/src/woff2_enc.cc: 
-  updated woff2 to https://github.com/google/woff2/commits/2e09253 
-
-2017-06-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml: 
-  AppVeyor: changed build image to VS 2017; updated FreeType to 2.8 
-
-2017-06-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  psfile: fixed sign of y coordinates 
-
-2017-06-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.hpp: 
-  use bp units for line width and miter limit 
-
-2017-06-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/EPSToSVG.cpp: 
-  remove redundant clipPath elements also when converting EPS files 
-
-2017-05-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GraphicsPath.hpp: 
-  replaced vector with deque in class GraphicsPath
-due to cheaper front 
-  insertions/deletions 
-
-  * src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp: 
-  manage memory of ClippingStack with shared pointers
-- automatically 
-  deletes unreferenced path objects
-- avoids keeping popped (and no longer 
-  required) paths in the pool vector 
-
-2017-05-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Pair.hpp, tests/PairTest.cpp: 
-  added abs() and negation operator to class Pair 
-
-  * src/Matrix.hpp, src/PsSpecialHandler.cpp: 
-  respect transformation of PS state in computation of psfile position 
-  (fixes #70) 
-
-  * src/FileFinder.cpp, src/PsSpecialHandler.cpp: 
-  lookup psfile in texmf tree if it's not present in cwd (fixes #69) 
-
-2017-05-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/FontCacheTest.cpp, tests/Makefile.am, tests/create-makefile: 
-  FontCacheTest: write test output to $builddir/data
-$srcdir/data may be 
-  read-only so that the tests fail unintentionally 
-
-2017-05-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/woff2/brotli/LICENSE, libs/woff2/brotli/Makefile.am, 
-    libs/woff2/brotli/common/constants.h, 
-    libs/woff2/brotli/common/dictionary.c, 
-    libs/woff2/brotli/common/dictionary.h, 
-    libs/woff2/brotli/common/version.h, 
-    libs/woff2/brotli/enc/backward_references.c, 
-    libs/woff2/brotli/enc/backward_references.h, 
-    libs/woff2/brotli/enc/backward_references_hq.c, 
-    libs/woff2/brotli/enc/backward_references_hq.h, 
-    libs/woff2/brotli/enc/backward_references_inc.h, 
-    libs/woff2/brotli/enc/block_splitter_inc.h, 
-    libs/woff2/brotli/enc/command.h, 
-    libs/woff2/brotli/enc/compress_fragment.c, 
-    libs/woff2/brotli/enc/compress_fragment.h, 
-    libs/woff2/brotli/enc/compress_fragment_two_pass.c, 
-    libs/woff2/brotli/enc/compress_fragment_two_pass.h, 
-    libs/woff2/brotli/enc/context.h, libs/woff2/brotli/enc/dictionary_hash.c, 
-    libs/woff2/brotli/enc/dictionary_hash.h, libs/woff2/brotli/enc/encode.c, 
-    libs/woff2/brotli/enc/fast_log.h, libs/woff2/brotli/enc/hash.h, 
-    libs/woff2/brotli/enc/hash_forgetful_chain_inc.h, 
-    libs/woff2/brotli/enc/hash_longest_match64_inc.h, 
-    libs/woff2/brotli/enc/hash_longest_match_inc.h, 
-    libs/woff2/brotli/enc/hash_longest_match_quickly_inc.h, 
-    libs/woff2/brotli/enc/hash_to_binary_tree_inc.h, 
-    libs/woff2/brotli/enc/histogram.c, libs/woff2/brotli/enc/literal_cost.c, 
-    libs/woff2/brotli/enc/memory.h, libs/woff2/brotli/enc/metablock.c, 
-    libs/woff2/brotli/enc/metablock.h, libs/woff2/brotli/enc/quality.h, 
-    libs/woff2/brotli/enc/static_dict.c, libs/woff2/brotli/enc/static_dict.h, 
-    libs/woff2/brotli/include/brotli/decode.h, 
-    libs/woff2/brotli/include/brotli/encode.h, 
-    libs/woff2/brotli/include/brotli/port.h, 
-    libs/woff2/brotli/include/brotli/types.h: 
-  updated brotli to version 0.6.0 
-
-2017-05-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Process.cpp: 
-  close pipe if fork() fails 
-
-2017-05-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, src/SignalHandler.cpp, src/SignalHandler.hpp: 
-  use sigaction() rather than signal() if possible 
-
-  * src/Process.cpp, src/Process.hpp: 
-  refactored Process class
-- use separate class to encapsulate 
-  system-dependent stuff and to ensure
-  proper termination in case of 
-  signals or errors
-- prevent blocking if subprocess doesn't write anything 
-  to stdout/stderr 
-
-2017-04-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Process.cpp: 
-  quit Process::run() if child process terminated unexpectedly (fixes #68) 
-
-2017-04-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/Makefile.am, tests/create-makefile: 
-  added the FontWriter dependencies to the tests 
-
-2017-04-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Color.cpp, src/Color.hpp, src/PSPattern.cpp, 
-    tests/ColorSpecialTest.cpp: 
-  avoid implicit conversion of Color object to RGB integer 
-
-  * src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.hpp, 
-    tests/Makefile.am, tests/TpicSpecialTest.cpp: 
-  improved the TPIC special handler and added tests for it 
-
-  * src/TpicSpecialHandler.cpp, tests/TpicSpecialTest.cpp: 
-  added evaluation of TPIC's 'tx' special command 
-
-2017-04-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BasicDVIReader.hpp, src/BgColorSpecialHandler.hpp, 
-    src/CLCommandLine.hpp, src/CMapManager.hpp, src/DVIToSVGActions.hpp, 
-    src/DependencyGraph.hpp, src/DvisvgmSpecialHandler.hpp, src/FilePath.hpp, 
-    src/Font.hpp, src/FontCache.cpp, src/FontCache.hpp, src/FontEngine.cpp, 
-    src/FontManager.hpp, src/Ghostscript.hpp, src/Glyph.hpp, 
-    src/GraphicsPath.hpp, src/HtmlSpecialHandler.hpp, src/NumericRanges.hpp, 
-    src/PapersizeSpecialHandler.cpp, src/PapersizeSpecialHandler.hpp, 
-    src/PathClipper.cpp, src/PathClipper.hpp, src/PsSpecialHandler.hpp, 
-    src/RangeMap.hpp, src/SVGCharPathHandler.hpp, src/ShadingPatch.hpp, 
-    src/SpecialManager.hpp, src/Subfont.hpp, src/VFReader.hpp, 
-    src/XMLNode.cpp, src/XMLNode.hpp, src/dvisvgm.cpp: 
-  replaced typedefs with 'using' statements 
-
-2017-04-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Ghostscript.cpp: 
-  simplify code for looking up libgs (closes #66) 
-
-2017-04-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DLLoader.cpp, src/DLLoader.hpp: 
-  added DLLoader::loadLibrary() to assign a different library 
-
-  * src/DLLoader.cpp, src/DLLoader.hpp, src/Ghostscript.cpp: 
-  replaced c-string parameters of DLLoader() and loadLibrary() with 
-  std::string 
-
-2017-04-13  Toby Fleming  <tobywf at users.noreply.github.com>
-
-  * src/Ghostscript.cpp: 
-  Auto-detect ghostscript dynamic library on macOS 
-
-2017-03-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * m4/ax_code_coverage.m4, m4/ax_cxx_compile_stdcxx.m4: 
-  updated m4 scripts 
-
-2017-03-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FileFinder.cpp, tests/FileFinderTest.cpp: 
-  fixed handling of absolute additional directories in FileFinder 
-
-  * tests/FilePathTest.cpp, tests/FontCacheTest.cpp, 
-    tests/SVGOutputTest.cpp: 
-  tests: minor path improvements 
-
-2017-03-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/woff2/src/normalize.cc, libs/woff2/src/woff2_enc.cc: 
-  woff2: removed unused variables 
-
-  * src/Makefile.am, src/dvisvgm.cpp: 
-  improved generation of list showing the library versions 
-
-  * src/Color.cpp, src/FilePath.cpp, src/FontWriter.cpp, src/PageSize.cpp, 
-    src/dvisvgm.cpp, src/utility.cpp, src/utility.hpp, tests/UtilityTest.cpp: 
-  removed side-effect from util::to_lower(); returns new modified string 
-  instead 
-
-2017-03-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/ff-woff/fontforge/nowakowskittfinstr.c: 
-  ff-woff: removed redundant variables 
-
-  * libs/woff2/Makefile.am, libs/woff2/brotli/Makefile.am, 
-    libs/woff2/brotli/common/constants.h, 
-    libs/woff2/brotli/common/dictionary.c, 
-    libs/woff2/brotli/common/dictionary.h, 
-    libs/woff2/brotli/common/version.h, 
-    libs/woff2/brotli/enc/backward_references.c, 
-    libs/woff2/brotli/enc/backward_references.cc, 
-    libs/woff2/brotli/enc/backward_references.h, 
-    libs/woff2/brotli/enc/backward_references_inc.h, 
-    libs/woff2/brotli/enc/bit_cost.c, libs/woff2/brotli/enc/bit_cost.h, 
-    libs/woff2/brotli/enc/bit_cost_inc.h, 
-    libs/woff2/brotli/enc/block_encoder_inc.h, 
-    libs/woff2/brotli/enc/block_splitter.c, 
-    libs/woff2/brotli/enc/block_splitter.cc, 
-    libs/woff2/brotli/enc/block_splitter.h, 
-    libs/woff2/brotli/enc/block_splitter_inc.h, 
-    libs/woff2/brotli/enc/brotli_bit_stream.c, 
-    libs/woff2/brotli/enc/brotli_bit_stream.cc, 
-    libs/woff2/brotli/enc/brotli_bit_stream.h, 
-    libs/woff2/brotli/enc/cluster.c, libs/woff2/brotli/enc/cluster.h, 
-    libs/woff2/brotli/enc/cluster_inc.h, libs/woff2/brotli/enc/command.h, 
-    libs/woff2/brotli/enc/compress_fragment.c, 
-    libs/woff2/brotli/enc/compress_fragment.cc, 
-    libs/woff2/brotli/enc/compress_fragment.h, 
-    libs/woff2/brotli/enc/compress_fragment_two_pass.c, 
-    libs/woff2/brotli/enc/compress_fragment_two_pass.cc, 
-    libs/woff2/brotli/enc/compress_fragment_two_pass.h, 
-    libs/woff2/brotli/enc/compressor.h, libs/woff2/brotli/enc/context.h, 
-    libs/woff2/brotli/enc/dictionary.cc, libs/woff2/brotli/enc/dictionary.h, 
-    libs/woff2/brotli/enc/dictionary_hash.h, libs/woff2/brotli/enc/encode.c, 
-    libs/woff2/brotli/enc/encode.cc, libs/woff2/brotli/enc/encode.h, 
-    libs/woff2/brotli/enc/encode_parallel.cc, 
-    libs/woff2/brotli/enc/encode_parallel.h, 
-    libs/woff2/brotli/enc/entropy_encode.c, 
-    libs/woff2/brotli/enc/entropy_encode.cc, 
-    libs/woff2/brotli/enc/entropy_encode.h, 
-    libs/woff2/brotli/enc/entropy_encode_static.h, 
-    libs/woff2/brotli/enc/fast_log.h, 
-    libs/woff2/brotli/enc/find_match_length.h, libs/woff2/brotli/enc/hash.h, 
-    libs/woff2/brotli/enc/hash_forgetful_chain_inc.h, 
-    libs/woff2/brotli/enc/hash_longest_match_inc.h, 
-    libs/woff2/brotli/enc/hash_longest_match_quickly_inc.h, 
-    libs/woff2/brotli/enc/histogram.c, libs/woff2/brotli/enc/histogram.cc, 
-    libs/woff2/brotli/enc/histogram.h, libs/woff2/brotli/enc/histogram_inc.h, 
-    libs/woff2/brotli/enc/literal_cost.c, 
-    libs/woff2/brotli/enc/literal_cost.cc, 
-    libs/woff2/brotli/enc/literal_cost.h, libs/woff2/brotli/enc/memory.c, 
-    libs/woff2/brotli/enc/memory.h, libs/woff2/brotli/enc/metablock.c, 
-    libs/woff2/brotli/enc/metablock.cc, libs/woff2/brotli/enc/metablock.h, 
-    libs/woff2/brotli/enc/metablock_inc.h, libs/woff2/brotli/enc/port.h, 
-    libs/woff2/brotli/enc/prefix.h, libs/woff2/brotli/enc/quality.h, 
-    libs/woff2/brotli/enc/ringbuffer.h, libs/woff2/brotli/enc/static_dict.c, 
-    libs/woff2/brotli/enc/static_dict.cc, 
-    libs/woff2/brotli/enc/static_dict.h, 
-    libs/woff2/brotli/enc/static_dict_lut.h, 
-    libs/woff2/brotli/enc/streams.cc, libs/woff2/brotli/enc/streams.h, 
-    libs/woff2/brotli/enc/transform.h, libs/woff2/brotli/enc/types.h, 
-    libs/woff2/brotli/enc/utf8_util.c, libs/woff2/brotli/enc/utf8_util.cc, 
-    libs/woff2/brotli/enc/utf8_util.h, libs/woff2/brotli/enc/write_bits.h, 
-    libs/woff2/brotli/include/brotli/decode.h, 
-    libs/woff2/brotli/include/brotli/encode.h, 
-    libs/woff2/brotli/include/brotli/port.h, 
-    libs/woff2/brotli/include/brotli/types.h, libs/woff2/src/buffer.h, 
-    libs/woff2/src/font.cc, libs/woff2/src/glyph.cc, 
-    libs/woff2/src/variable_length.cc, libs/woff2/src/woff2_dec.h, 
-    libs/woff2/src/woff2_enc.cc, src/Makefile.am: 
-  updated woff2 to https://github.com/google/woff2/commit/68e9ab5 
-
-2017-02-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/BezierTest.cpp, tests/BitmapTest.cpp, tests/BoundingBoxTest.cpp, 
-    tests/CMapManagerTest.cpp, tests/CMapReaderTest.cpp, tests/CMapTest.cpp, 
-    tests/CRC32Test.cpp, tests/ColorTest.cpp, tests/CommandLineTest.cpp, 
-    tests/DirectoryTest.cpp, tests/FileSystemTest.cpp, 
-    tests/GraphicsPathTest.cpp, tests/JFMReaderTest.cpp, 
-    tests/MatrixTest.cpp, tests/PageRagesTest.cpp, tests/RangeMapTest.cpp, 
-    tests/SVGOutputTest.cpp, tests/SplittedCharInputBufferTest.cpp, 
-    tests/StreamInputBufferTest.cpp, tests/StreamReaderTest.cpp, 
-    tests/StreamWriterTest.cpp, tests/SubfontTest.cpp, 
-    tests/TFMReaderTest.cpp, tests/ToUnicodeMapTest.cpp, 
-    tests/UnicodeTest.cpp, tests/VectorIteratorTest.cpp, 
-    tests/XMLNodeTest.cpp: 
-  fixed signed/unsigned warnings in tests 
-
-2017-02-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/woff2/brotli/tools/bro.cc, libs/woff2/brotli/tools/rfc-format.py, 
-    libs/woff2/brotli/tools/version.h: 
-  removed redundant files 
-
-2017-02-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.1.3 
-
-  * NEWS: 
-  updated NEWS 
-
-2017-02-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/ff-woff/inc/ffintl.h: 
-  ff-woff: removed redundant defines and prototypes to fix build failure 
-  on Solaris 
-
-  * tests/genhashcheck.py: 
-  reformatted genhashcheck 
-
-  * tests/BezierTest.cpp, tests/CRC32Test.cpp, tests/ToUnicodeMapTest.cpp, 
-    tests/UnicodeTest.cpp, tests/VectorIteratorTest.cpp, 
-    tests/XMLNodeTest.cpp: 
-  minor additions to some tests 
-
-2017-02-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, libs/ff-woff/Makefile.am, 
-    libs/ff-woff/fontforge/fflocale.c, libs/ff-woff/fontforge/fflocale.h, 
-    libs/ff-woff/fontforge/sfd.c, libs/ff-woff/fontforge/splinefont.h, 
-    libs/ff-woff/fontforge/tottf.c: 
-  ff-woff: only call uselocale() if present, use setlocale() otherwise 
-
-2017-02-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README, README.md: 
-  added information on required C++11 compiler to README 
-
-  * tests/genhashcheck.py: 
-  made genhashcheck.py compatible with Python 3 (plus few minor changes) 
-
-2017-02-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/MapLine.cpp, src/MapLine.hpp, tests/ColorSpecialTest.cpp, 
-    tests/FontMapTest.cpp, tests/LengthTest.cpp, tests/MapLineTest.cpp: 
-  improved a couple of test cases 
-
-  * src/Color.cpp, src/Matrix.cpp, src/TpicSpecialHandler.cpp, 
-    src/utility.hpp: 
-  replaced non-standard constant M_PI with own definition 
-
-  * src/Color.cpp, src/Matrix.cpp, src/utility.hpp: 
-  replaced local copies of deg2rad with global function 
-
-2017-02-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .appveyor.yml, .travis.yml, appveyor.yml: 
-  exclude branch 'tmp' from CI builds 
-
-2017-02-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/ff-woff/Makefile.am, libs/ff-woff/fontforge/fontforge.h, 
-    libs/ff-woff/inc/ffintl.h, libs/ff-woff/inc/intl.h: 
-  don't try to #include libintl.h 
-
-  * .travis.yml: 
-  Travis: enable clang builds again 
-
-  * NEWS: 
-  updated NEWS 
-
-2017-02-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Calculator.cpp: 
-  fixed number parsing in Calculator class (failed on Mac) 
-
-  * tests/StreamReaderTest.cpp: 
-  clear istream flags to prevent failure of StreamReaderTest 
-
-  * libs/xxHash/xxhash.c, libs/xxHash/xxhash.h: 
-  removed 'restrict' keyword from xxHash 
-
-  * .travis.yml, appveyor.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.1.2 
-
-2017-02-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .gitignore, .travis.yml, Makefile.am, configure.ac, tests/Makefile.am, 
-    tests/create-makefile, tests/gtest/LICENSE, 
-    tests/gtest/include/gtest/gtest-death-test.h, 
-    tests/gtest/include/gtest/gtest-message.h, 
-    tests/gtest/include/gtest/gtest-param-test.h, 
-    tests/gtest/include/gtest/gtest-printers.h, 
-    tests/gtest/include/gtest/gtest-spi.h, 
-    tests/gtest/include/gtest/gtest-test-part.h, 
-    tests/gtest/include/gtest/gtest-typed-test.h, 
-    tests/gtest/include/gtest/gtest.h, 
-    tests/gtest/include/gtest/gtest_pred_impl.h, 
-    tests/gtest/include/gtest/gtest_prod.h, 
-    tests/gtest/include/gtest/internal/custom/gtest-port.h, 
-    tests/gtest/include/gtest/internal/custom/gtest-printers.h, 
-    tests/gtest/include/gtest/internal/custom/gtest.h, 
-    tests/gtest/include/gtest/internal/gtest-death-test-internal.h, 
-    tests/gtest/include/gtest/internal/gtest-filepath.h, 
-    tests/gtest/include/gtest/internal/gtest-internal.h, 
-    tests/gtest/include/gtest/internal/gtest-linked_ptr.h, 
-    tests/gtest/include/gtest/internal/gtest-param-util-generated.h, 
-    tests/gtest/include/gtest/internal/gtest-param-util.h, 
-    tests/gtest/include/gtest/internal/gtest-port-arch.h, 
-    tests/gtest/include/gtest/internal/gtest-port.h, 
-    tests/gtest/include/gtest/internal/gtest-string.h, 
-    tests/gtest/include/gtest/internal/gtest-tuple.h, 
-    tests/gtest/include/gtest/internal/gtest-type-util.h, 
-    tests/gtest/src/gtest-all.cc, tests/gtest/src/gtest-death-test.cc, 
-    tests/gtest/src/gtest-filepath.cc, tests/gtest/src/gtest-internal-inl.h, 
-    tests/gtest/src/gtest-port.cc, tests/gtest/src/gtest-printers.cc, 
-    tests/gtest/src/gtest-test-part.cc, tests/gtest/src/gtest-typed-test.cc, 
-    tests/gtest/src/gtest.cc, tests/gtest/src/gtest_main.cc: 
-  bundle gtest with the sources to simplify building and running the tests 
-
-  * src/Directory.cpp, tests/DirectoryTest.cpp: 
-  prevent calling closedir() with null pointer argument 
-
-  * src/VectorStream.hpp: 
-  don't access first vector component if the vector is empty 
-
-  * src/GFReader.cpp, src/StreamReader.cpp, tests/GFReaderTest.cpp, 
-    tests/StreamReaderTest.cpp: 
-  improved implementation of getString() 
-
-  * src/CLCommandLine.cpp: 
-  reset status flags before changing the sstream source 
-
-2017-02-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/CommandLineTest.cpp: 
-  removed redundant function 
-
-  * src/XMLString.cpp, tests/EmSpecialTest.cpp, tests/GFGlyphTracerTest.cpp: 
-  avoid negative zeros (-0) in SVG output 
-
-  * src/BoundingBox.cpp: 
-  fixed memory issue in BoundingBox class 
-
-  * src/CMapReader.cpp, src/InputReader.cpp, src/InputReader.hpp, 
-    tests/SplittedCharInputBufferTest.cpp, tests/StreamInputBufferTest.cpp: 
-  fixed potential number overflow issue 
-
-  * tests/CMapReaderTest.cpp: 
-  fixed memory leak in CMapReaderTest 
-
-  * src/Subfont.cpp: 
-  fixed memory leak in Subfont class 
-
-  * src/XMLNode.cpp: 
-  fixed memory leak in class XMLElementNode 
-
-2017-02-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac: 
-  replaced deprecated AC_CONFIG_HEADER 
-
-  * NEWS: 
-  updated NEWS 
-
-  * libs/clipper/License.txt: 
-  fixed line endings of clipper/License.txt 
-
-2017-02-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml, appveyor.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.1.1 
-
-2017-02-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/FontCacheTest.cpp: 
-  fixed FontCacheTest ('make distcheck' failed) 
-
-2017-02-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Color.cpp, src/Color.hpp, src/VectorIterator.hpp, 
-    tests/ColorTest.cpp, tests/VectorIteratorTest.cpp: 
-  increased coverage of ColorTest 
-
-  * configure.ac, libs/ff-woff/fontforge/splinefont.h: 
-  include xlocale.h in ff-woff if available (fixes #65) 
-
-2017-02-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Makefile.am: 
-  removed spurious colon from src/Makefile.am 
-
-  * configure.ac: 
-  allow C++11 language extensions if necessary 
-
-  * src/Font.cpp, src/Font.hpp: 
-  report Metafont failures only once for each font 
-
-2017-01-31  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README, README.md: 
-  README: updated links, added release badge 
-
-2017-01-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/FontManagerTest.cpp, tests/data/cmr10.pfb: 
-  prevent FontManagerTest to fail due to missing font files 
-
-2017-01-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Matrix.cpp, tests/MatrixTest.cpp: 
-  minor changes of matrix class; improved MatrixTest 
-
-2017-01-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PapersizeSpecialHandler.cpp, src/PapersizeSpecialHandler.hpp, 
-    tests/Makefile.am, tests/PapersizeSpecialTest.cpp, tests/create-makefile: 
-  added PapersizeSpecialTest 
-
-  * tests/CMapManagerTest.cpp, tests/CMapReaderTest.cpp, 
-    tests/DvisvgmSpecialTest.cpp, tests/EmSpecialTest.cpp, 
-    tests/FileFinderTest.cpp, tests/FontManagerTest.cpp, 
-    tests/JFMReaderTest.cpp, tests/MapLineTest.cpp, tests/SubfontTest.cpp, 
-    tests/TFMReaderTest.cpp, tests/TensorProductPatchTest.cpp: 
-  added 'override' specifier to gtest methods 
-
-  * src/FontCache.cpp, src/FontCache.hpp, tests/FontCacheTest.cpp, 
-    tests/Makefile.am: 
-  added FontCacheTest 
-
-  * tests/Makefile.am, tests/create-makefile: 
-  removed redundant linker flag from tests 
-
-  * m4/ax_code_coverage.m4, m4/ax_cxx_compile_stdcxx.m4: 
-  updated m4 scripts to latest versions 
-
-2017-01-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README.md, appveyor.yml: 
-  added basic appveyor.yml 
-
-2017-01-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/ff-woff/Makefile.am, libs/ff-woff/fontforge/fontforge.h, 
-    libs/ff-woff/fontforge/tmpfile2.cpp, libs/ff-woff/fontforge/utils.c, 
-    src/dvisvgm.cpp: 
-  improved error handling of tmpfile2() in ff-woff
-The FontForge library 
-  doesn't check the return value of tmpfile() which may lead
-to segfaults. 
-  The replacement function tmpfile2() throws an exception or calls
-exit() 
-  so that dvisvgm can terminate more cleanly. 
-
-2017-01-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BoundingBox.cpp, src/Color.cpp, src/DVIToSVGActions.cpp, 
-    src/FilePath.cpp, src/FileSystem.cpp, src/FontWriter.cpp, 
-    src/Makefile.am, src/PageSize.cpp, src/SVGOutput.cpp, src/utility.cpp, 
-    src/utility.hpp, tests/Makefile.am, tests/UtilityTest.cpp: 
-  moved common utility functions to separate compilation unit and 
-  namespace 
-
-  * src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, src/EPSToSVG.cpp: 
-  get program name and version from version.hpp, avoid using macros from 
-  config.h 
-
-  * .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.1 
-
-  * NEWS: 
-  updated NEWS 
-
-2017-01-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * libs/ff-woff/fontforge/utils.c, src/FileSystem.cpp, src/FileSystem.hpp, 
-    src/Font.cpp, src/FontWriter.cpp, src/GlyphTracerMessages.hpp, 
-    src/MetafontWrapper.cpp, src/MetafontWrapper.hpp, src/Process.cpp, 
-    src/Process.hpp, src/SVGOutput.cpp, src/SVGOutput.hpp: 
-  create temp files in the system's temp folder rather than in cwd (closes 
-  #63) 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.hpp, src/dvisvgm.cpp, 
-    src/options.xml: 
-  added option --tmpdir to select a different temp folder 
-
-  * src/FontWriter.cpp, src/FontWriter.hpp: 
-  print error message if FontWriter can't write temporary files 
-
-2017-01-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FilePath.cpp, src/FilePath.hpp, tests/FilePathTest.cpp, 
-    tests/SVGOutputTest.cpp: 
-  retain letter case of filenames (Windows) 
-
-  * src/DVIToSVG.cpp, src/EPSToSVG.cpp, src/SVGTree.hpp: 
-  print warning message if output file could not be written 
-
-  * tests/GhostscriptTest.cpp: 
-  disable GS banner in GhostscriptTest 
-
-2017-01-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp, src/dvisvgm.cpp: 
-  added missing newlines in messages; fixed typo 
-
-2017-01-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/AGLTable.hpp: 
-  updated AGL table and removed colliding codepoints (closes #64) 
-
-2017-01-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * Makefile.am, README, README.md, configure.ac, doc/Makefile.am, 
-    doc/conf-dblatex-man.xsl, doc/conf-dblatex-pdf.xsl, doc/db2html.xsl, 
-    doc/dvisvgm.txt.in, doc/tweak-db-article.xsl, doc/tweak-dblatex-pdf.xsl, 
-    libs/Makefile.am, src/AGLTable.hpp, src/BasicDVIReader.cpp, 
-    src/BasicDVIReader.hpp, src/Bezier.cpp, src/Bezier.hpp, 
-    src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.hpp, 
-    src/Bitmap.cpp, src/Bitmap.hpp, src/BoundingBox.cpp, src/BoundingBox.hpp, 
-    src/CLCommandLine.cpp, src/CLCommandLine.hpp, src/CLOption.hpp, 
-    src/CMap.cpp, src/CMap.hpp, src/CMapManager.cpp, src/CMapManager.hpp, 
-    src/CMapReader.cpp, src/CMapReader.hpp, src/CRC32.cpp, src/CRC32.hpp, 
-    src/Calculator.cpp, src/Calculator.hpp, src/CharMapID.cpp, 
-    src/CharMapID.hpp, src/Character.hpp, src/Color.cpp, src/Color.hpp, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.hpp, 
-    src/CommandLine.hpp, src/DLLoader.cpp, src/DLLoader.hpp, 
-    src/DVIActions.hpp, src/DVIReader.cpp, src/DVIReader.hpp, 
-    src/DVIToSVG.cpp, src/DVIToSVG.hpp, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.hpp, src/DependencyGraph.hpp, src/Directory.cpp, 
-    src/Directory.hpp, src/DvisvgmSpecialHandler.cpp, 
-    src/DvisvgmSpecialHandler.hpp, src/EPSFile.cpp, src/EPSFile.hpp, 
-    src/EPSToSVG.cpp, src/EPSToSVG.hpp, src/EmSpecialHandler.cpp, 
-    src/EmSpecialHandler.hpp, src/EncFile.cpp, src/EncFile.hpp, 
-    src/FileFinder.cpp, src/FileFinder.hpp, src/FilePath.cpp, 
-    src/FilePath.hpp, src/FileSystem.cpp, src/FileSystem.hpp, 
-    src/FixWord.hpp, src/Font.cpp, src/Font.hpp, src/FontCache.cpp, 
-    src/FontCache.hpp, src/FontEncoding.cpp, src/FontEncoding.hpp, 
-    src/FontEngine.cpp, src/FontEngine.hpp, src/FontManager.cpp, 
-    src/FontManager.hpp, src/FontMap.cpp, src/FontMap.hpp, 
-    src/FontMetrics.cpp, src/FontMetrics.hpp, src/FontStyle.hpp, 
-    src/FontWriter.cpp, src/FontWriter.hpp, src/GFGlyphTracer.cpp, 
-    src/GFGlyphTracer.hpp, src/GFReader.cpp, src/GFReader.hpp, 
-    src/GFTracer.cpp, src/GFTracer.hpp, src/Ghostscript.cpp, 
-    src/Ghostscript.hpp, src/Glyph.hpp, src/GlyphTracerMessages.hpp, 
-    src/GraphicsPath.hpp, src/HtmlSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.hpp, src/InputBuffer.cpp, src/InputBuffer.hpp, 
-    src/InputReader.cpp, src/InputReader.hpp, src/JFM.cpp, src/JFM.hpp, 
-    src/Length.cpp, src/Length.hpp, src/Makefile.am, src/MapLine.cpp, 
-    src/MapLine.hpp, src/Matrix.cpp, src/Matrix.hpp, src/Message.cpp, 
-    src/Message.hpp, src/MessageException.hpp, src/MetafontWrapper.cpp, 
-    src/MetafontWrapper.hpp, src/MiKTeXCom.cpp, src/MiKTeXCom.hpp, 
-    src/NoPsSpecialHandler.cpp, src/NoPsSpecialHandler.hpp, 
-    src/NumericRanges.hpp, src/PSFilter.hpp, src/PSInterpreter.cpp, 
-    src/PSInterpreter.hpp, src/PSPattern.cpp, src/PSPattern.hpp, 
-    src/PSPreviewFilter.cpp, src/PSPreviewFilter.hpp, src/PageRanges.cpp, 
-    src/PageRanges.hpp, src/PageSize.cpp, src/PageSize.hpp, src/Pair.hpp, 
-    src/PapersizeSpecialHandler.cpp, src/PapersizeSpecialHandler.hpp, 
-    src/PathClipper.cpp, src/PathClipper.hpp, src/PdfSpecialHandler.cpp, 
-    src/PdfSpecialHandler.hpp, src/PreScanDVIReader.cpp, 
-    src/PreScanDVIReader.hpp, src/Process.cpp, src/Process.hpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.hpp, src/RangeMap.cpp, 
-    src/RangeMap.hpp, src/SVGCharHandler.cpp, src/SVGCharHandler.hpp, 
-    src/SVGCharHandlerFactory.cpp, src/SVGCharHandlerFactory.hpp, 
-    src/SVGCharPathHandler.cpp, src/SVGCharPathHandler.hpp, 
-    src/SVGCharTspanTextHandler.cpp, src/SVGCharTspanTextHandler.hpp, 
-    src/SVGOutput.cpp, src/SVGOutput.hpp, src/SVGSingleCharTextHandler.cpp, 
-    src/SVGSingleCharTextHandler.hpp, src/SVGTree.cpp, src/SVGTree.hpp, 
-    src/ShadingPatch.cpp, src/ShadingPatch.hpp, src/SignalHandler.cpp, 
-    src/SignalHandler.hpp, src/SpecialActions.hpp, src/SpecialHandler.hpp, 
-    src/SpecialManager.cpp, src/SpecialManager.hpp, src/StreamReader.cpp, 
-    src/StreamReader.hpp, src/StreamWriter.cpp, src/StreamWriter.hpp, 
-    src/Subfont.cpp, src/Subfont.hpp, src/System.cpp, src/System.hpp, 
-    src/TFM.cpp, src/TFM.hpp, src/TensorProductPatch.cpp, 
-    src/TensorProductPatch.hpp, src/Terminal.cpp, src/Terminal.hpp, 
-    src/ToUnicodeMap.cpp, src/ToUnicodeMap.hpp, src/TpicSpecialHandler.cpp, 
-    src/TpicSpecialHandler.hpp, src/TriangularPatch.cpp, 
-    src/TriangularPatch.hpp, src/Unicode.cpp, src/Unicode.hpp, 
-    src/VFActions.hpp, src/VFReader.cpp, src/VFReader.hpp, 
-    src/VectorIterator.hpp, src/VectorStream.hpp, src/XMLDocument.cpp, 
-    src/XMLDocument.hpp, src/XMLNode.cpp, src/XMLNode.hpp, src/XMLString.cpp, 
-    src/XMLString.hpp, src/ZLibOutputStream.hpp, src/dvisvgm.cpp, 
-    src/ffwrapper.c, src/ffwrapper.h, src/macros.hpp, src/options.dtd, 
-    src/options.xml, src/psdefs.cpp, src/version.hpp, src/version.hpp.in, 
-    tests/BezierTest.cpp, tests/BitmapTest.cpp, tests/BoundingBoxTest.cpp, 
-    tests/CMapManagerTest.cpp, tests/CMapReaderTest.cpp, tests/CMapTest.cpp, 
-    tests/CRC32Test.cpp, tests/CalculatorTest.cpp, 
-    tests/ColorSpecialTest.cpp, tests/ColorTest.cpp, 
-    tests/CommandLineTest.cpp, tests/DependencyGraphTest.cpp, 
-    tests/DirectoryTest.cpp, tests/DvisvgmSpecialTest.cpp, 
-    tests/EmSpecialTest.cpp, tests/FileFinderTest.cpp, 
-    tests/FilePathTest.cpp, tests/FileSystemTest.cpp, 
-    tests/FontManagerTest.cpp, tests/FontMapTest.cpp, 
-    tests/GFGlyphTracerTest.cpp, tests/GFReaderTest.cpp, 
-    tests/GraphicsPathTest.cpp, tests/JFMReaderTest.cpp, 
-    tests/LengthTest.cpp, tests/Makefile.am, tests/MapLineTest.cpp, 
-    tests/MatrixTest.cpp, tests/MessageExceptionTest.cpp, 
-    tests/PSInterpreterTest.cpp, tests/PageRagesTest.cpp, 
-    tests/PageSizeTest.cpp, tests/PairTest.cpp, tests/RangeMapTest.cpp, 
-    tests/SVGOutputTest.cpp, tests/ShadingPatchTest.cpp, 
-    tests/SplittedCharInputBufferTest.cpp, tests/StreamInputBufferTest.cpp, 
-    tests/StreamReaderTest.cpp, tests/StreamWriterTest.cpp, 
-    tests/SubfontTest.cpp, tests/TFMReaderTest.cpp, 
-    tests/TensorProductPatchTest.cpp, tests/ToUnicodeMapTest.cpp, 
-    tests/TriangularPatchTest.cpp, tests/UnicodeTest.cpp, 
-    tests/VectorIteratorTest.cpp, tests/VectorStreamTest.cpp, 
-    tests/XMLNodeTest.cpp, tests/XMLStringTest.cpp, tests/check-conv, 
-    tests/create-makefile, tests/data/Makefile.am, tests/genhashcheck.py, 
-    tests/normalize.xsl: 
-  updated year in copyright statements to 2017 
-
-2016-12-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/Makefile.am, doc/conf-dblatex-pdf.xsl, doc/db2html.xsl, 
-    doc/dvisvgm.txt.in, doc/dvisvgm.xpr, doc/tweak-db-article.xsl: 
-  manpage: minor refactorings of the XSLT scripts; added generation of 
-  epub 
-
-2016-12-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/conf-dblatex-man.xsl, doc/conf-dblatex-pdf.xsl, doc/db2html.xsl, 
-    doc/tweak-dblatex-pdf.xsl: 
-  added missing email address to copyright headers 
-
-  * doc/conf-dblatex-man.xsl, doc/conf-dblatex-pdf.xsl, 
-    doc/tweak-dblatex-pdf.xsl: 
-  indent with tabs rather than spaces 
-
-  * doc/db2html.xsl: 
-  manpage: replace icon of Author section 
-
-  * doc/conf-dblatex-pdf.xsl, doc/tweak-dblatex-pdf.xsl: 
-  manpage: use mixed case titles in pdf output 
-
-2016-12-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/db2html.xsl, doc/dvisvgm.xpr: 
-  manpage: preserve whitespace in list of supported specials 
-
-2016-11-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac: 
-  ensure compiling C files with --std=c99 
-
-2016-11-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS: 
-  updated NEWS 
-
-2016-11-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in: 
-  minor changes in manpage 
-
-  * README, README.md, configure.ac, libs/Makefile.am, libs/ff-woff/LICENSE, 
-    libs/ff-woff/Makefile.am, libs/ff-woff/README.md, 
-    libs/ff-woff/fontforge/PfEd.h, libs/ff-woff/fontforge/alphabet.c, 
-    libs/ff-woff/fontforge/asmfpst.c, libs/ff-woff/fontforge/autohint.c, 
-    libs/ff-woff/fontforge/char.c, libs/ff-woff/fontforge/cjk.c, 
-    libs/ff-woff/fontforge/configure-fontforge.h, 
-    libs/ff-woff/fontforge/cvundoes.c, libs/ff-woff/fontforge/dumppfa.c, 
-    libs/ff-woff/fontforge/edgelist.h, libs/ff-woff/fontforge/edgelist2.h, 
-    libs/ff-woff/fontforge/encoding.c, libs/ff-woff/fontforge/encoding.h, 
-    libs/ff-woff/fontforge/fontforge-config.h, 
-    libs/ff-woff/fontforge/fontforge.h, libs/ff-woff/fontforge/fontforgevw.h, 
-    libs/ff-woff/fontforge/fvfonts.c, libs/ff-woff/fontforge/gwwiconv.c, 
-    libs/ff-woff/fontforge/libffstamp.h, libs/ff-woff/fontforge/lookups.c, 
-    libs/ff-woff/fontforge/macbinary.c, libs/ff-woff/fontforge/macenc.c, 
-    libs/ff-woff/fontforge/mathconstants.c, libs/ff-woff/fontforge/memory.c, 
-    libs/ff-woff/fontforge/mm.c, libs/ff-woff/fontforge/namehash.h, 
-    libs/ff-woff/fontforge/namelist.c, libs/ff-woff/fontforge/nouiutil.c, 
-    libs/ff-woff/fontforge/nowakowskittfinstr.c, 
-    libs/ff-woff/fontforge/parsepfa.c, libs/ff-woff/fontforge/parsettf.c, 
-    libs/ff-woff/fontforge/parsettfatt.c, libs/ff-woff/fontforge/psfont.h, 
-    libs/ff-woff/fontforge/psread.c, libs/ff-woff/fontforge/pua.c, 
-    libs/ff-woff/fontforge/sd.h, libs/ff-woff/fontforge/sfd.c, 
-    libs/ff-woff/fontforge/sfd1.c, libs/ff-woff/fontforge/sfd1.h, 
-    libs/ff-woff/fontforge/splinechar.c, libs/ff-woff/fontforge/splinefont.c, 
-    libs/ff-woff/fontforge/splinefont.h, 
-    libs/ff-woff/fontforge/splineorder2.c, 
-    libs/ff-woff/fontforge/splineoverlap.c, 
-    libs/ff-woff/fontforge/splinerefigure.c, 
-    libs/ff-woff/fontforge/splinesave.c, 
-    libs/ff-woff/fontforge/splinesaveafm.c, 
-    libs/ff-woff/fontforge/splineutil.c, 
-    libs/ff-woff/fontforge/splineutil2.c, libs/ff-woff/fontforge/start.c, 
-    libs/ff-woff/fontforge/stemdb.c, libs/ff-woff/fontforge/stemdb.h, 
-    libs/ff-woff/fontforge/tables.h, libs/ff-woff/fontforge/tottf.c, 
-    libs/ff-woff/fontforge/tottfaat.c, libs/ff-woff/fontforge/tottfgpos.c, 
-    libs/ff-woff/fontforge/tottfvar.c, libs/ff-woff/fontforge/ttf.h, 
-    libs/ff-woff/fontforge/ttfinstrs.c, libs/ff-woff/fontforge/ttfinstrs.h, 
-    libs/ff-woff/fontforge/ttfspecial.c, 
-    libs/ff-woff/fontforge/uiinterface.h, libs/ff-woff/fontforge/unialt.c, 
-    libs/ff-woff/fontforge/ustring.c, libs/ff-woff/fontforge/utils.c, 
-    libs/ff-woff/fontforge/utype.c, libs/ff-woff/fontforge/woff.c, 
-    libs/ff-woff/inc/basics.h, libs/ff-woff/inc/chardata.h, 
-    libs/ff-woff/inc/charset.h, libs/ff-woff/inc/dlist.h, 
-    libs/ff-woff/inc/gimage.h, libs/ff-woff/inc/gnetwork.h, 
-    libs/ff-woff/inc/gwwiconv.h, libs/ff-woff/inc/intl.h, 
-    libs/ff-woff/inc/ustring.h, libs/ff-woff/inc/utype.h, src/Makefile.am: 
-  bundle reduced fontforge library (ff-woff) 
-
-  * configure.ac, libs/Makefile.am, libs/clipper/Makefile.am, 
-    libs/ff-woff/Makefile.am, libs/woff2/Makefile.am, 
-    libs/woff2/brotli/Makefile.am, libs/woff2/brotli/enc/Makefile.am, 
-    libs/woff2/src/Makefile.am, src/Makefile.am: 
-  added license files of bundled libraries; relocated Makefiles 
-
-  * .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.0.4 
-
-2016-11-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CommandLine.hpp, src/options.xml: 
-  fixed a typo in the --help output 
-
-  * src/BasicDVIReader.cpp, src/BasicDVIReader.hpp, src/DVIReader.cpp, 
-    src/DVIReader.hpp: 
-  use const variables for DVI opcodes rather than the values directly 
-
-2016-11-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontWriter.cpp: 
-  few cosmetic changes; added comments 
-
-2016-09-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.0.3 
-
-  * NEWS, README, README.md: 
-  updated NEWS and README 
-
-2016-09-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp, src/DVIReader.hpp, src/DVIToSVG.cpp, 
-    src/DVIToSVG.hpp: 
-  dropped tracking of previous DVI state from DVIReader 
-
-  * src/DVIReader.cpp: 
-  fixed positioning of rules 
-
-2016-09-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp, src/DVIReader.hpp, src/DVIToSVG.cpp: 
-  fixed regression in character positioning of of virtual fonts 
-
-2016-09-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp: 
-  fixed type regression in computation of DVI positions (closes #61) 
-
-  * .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.0.2 
-
-  * NEWS, README.md: 
-  updated NEWS and README 
-
-2016-09-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Font.cpp: 
-  fixed sign of character depth computed for native fonts 
-
-2016-09-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.0.1 
-
-  * NEWS, README, README.md: 
-  updated NEWS and README 
-
-2016-08-31  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README, README.md: 
-  added link to reduced FF library to README 
-
-  * doc/dvisvgm.txt.in, src/FontWriter.cpp, src/FontWriter.hpp, 
-    src/SVGTree.cpp, src/SVGTree.hpp, src/ffwrapper.c: 
-  added option to autohint fonts created by the FontForge library 
-
-2016-08-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVGActions.hpp, src/FontManager.hpp, src/MetafontWrapper.hpp: 
-  adapted struct/class forward declarations 
-
-2016-08-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FileFinder.cpp, src/FileFinder.hpp: 
-  removed unused variable 
-
-  * src/CLCommandLine.cpp: 
-  added missing cast to avoid compiler warning 
-
-  * .travis.yml, configure.ac, src/Doxyfile, src/version.hpp: 
-  set version to 2.0 
-
-  * README, README.md: 
-  updated README files 
-
-  * NEWS: 
-  updated NEWS 
-
-2016-08-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml: 
-  use Ubuntu Trusty for Travis builds 
-
-  * .travis.yml: 
-  Travis: prevent rebuilding files in folder 'src' when calling 'make 
-  check' 
-
-  * src/FontWriter.cpp, src/FontWriter.hpp, src/ffwrapper.c, 
-    src/ffwrapper.h: 
-  added missing copyright headers 
-
-2016-08-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * Makefile.am, clipper/License.txt, clipper/Makefile.am, 
-    clipper/clipper.cpp, clipper/clipper.hpp, configure.ac, libs/Makefile.am, 
-    libs/clipper/License.txt, libs/clipper/Makefile.am, 
-    libs/clipper/clipper.cpp, libs/clipper/clipper.hpp, libs/xxHash/LICENSE, 
-    libs/xxHash/Makefile.am, libs/xxHash/xxhash.c, libs/xxHash/xxhash.h, 
-    src/Makefile.am, tests/Makefile.am, tests/create-makefile, 
-    xxHash/LICENSE, xxHash/Makefile.am, xxHash/xxhash.c, xxHash/xxhash.h: 
-  moved bundled libraries (clipper, xxHash) to subfolder 'libs' 
-
-  * configure.ac, doc/dvisvgm.txt.in, libs/Makefile.am, libs/woff2/LICENSE, 
-    libs/woff2/brotli/LICENSE, libs/woff2/brotli/enc/Makefile.am, 
-    libs/woff2/brotli/enc/backward_references.cc, 
-    libs/woff2/brotli/enc/backward_references.h, 
-    libs/woff2/brotli/enc/bit_cost.h, 
-    libs/woff2/brotli/enc/block_splitter.cc, 
-    libs/woff2/brotli/enc/block_splitter.h, 
-    libs/woff2/brotli/enc/brotli_bit_stream.cc, 
-    libs/woff2/brotli/enc/brotli_bit_stream.h, 
-    libs/woff2/brotli/enc/cluster.h, libs/woff2/brotli/enc/command.h, 
-    libs/woff2/brotli/enc/compress_fragment.cc, 
-    libs/woff2/brotli/enc/compress_fragment.h, 
-    libs/woff2/brotli/enc/compress_fragment_two_pass.cc, 
-    libs/woff2/brotli/enc/compress_fragment_two_pass.h, 
-    libs/woff2/brotli/enc/compressor.h, libs/woff2/brotli/enc/context.h, 
-    libs/woff2/brotli/enc/dictionary.cc, libs/woff2/brotli/enc/dictionary.h, 
-    libs/woff2/brotli/enc/dictionary_hash.h, libs/woff2/brotli/enc/encode.cc, 
-    libs/woff2/brotli/enc/encode.h, libs/woff2/brotli/enc/encode_parallel.cc, 
-    libs/woff2/brotli/enc/encode_parallel.h, 
-    libs/woff2/brotli/enc/entropy_encode.cc, 
-    libs/woff2/brotli/enc/entropy_encode.h, 
-    libs/woff2/brotli/enc/entropy_encode_static.h, 
-    libs/woff2/brotli/enc/fast_log.h, 
-    libs/woff2/brotli/enc/find_match_length.h, libs/woff2/brotli/enc/hash.h, 
-    libs/woff2/brotli/enc/histogram.cc, libs/woff2/brotli/enc/histogram.h, 
-    libs/woff2/brotli/enc/literal_cost.cc, 
-    libs/woff2/brotli/enc/literal_cost.h, libs/woff2/brotli/enc/metablock.cc, 
-    libs/woff2/brotli/enc/metablock.h, libs/woff2/brotli/enc/port.h, 
-    libs/woff2/brotli/enc/prefix.h, libs/woff2/brotli/enc/ringbuffer.h, 
-    libs/woff2/brotli/enc/static_dict.cc, 
-    libs/woff2/brotli/enc/static_dict.h, 
-    libs/woff2/brotli/enc/static_dict_lut.h, 
-    libs/woff2/brotli/enc/streams.cc, libs/woff2/brotli/enc/streams.h, 
-    libs/woff2/brotli/enc/transform.h, libs/woff2/brotli/enc/types.h, 
-    libs/woff2/brotli/enc/utf8_util.cc, libs/woff2/brotli/enc/utf8_util.h, 
-    libs/woff2/brotli/enc/write_bits.h, libs/woff2/brotli/tools/bro.cc, 
-    libs/woff2/brotli/tools/rfc-format.py, libs/woff2/brotli/tools/version.h, 
-    libs/woff2/src/Makefile.am, libs/woff2/src/buffer.h, 
-    libs/woff2/src/file.h, libs/woff2/src/font.cc, libs/woff2/src/font.h, 
-    libs/woff2/src/glyph.cc, libs/woff2/src/glyph.h, 
-    libs/woff2/src/normalize.cc, libs/woff2/src/normalize.h, 
-    libs/woff2/src/port.h, libs/woff2/src/round.h, 
-    libs/woff2/src/store_bytes.h, libs/woff2/src/table_tags.cc, 
-    libs/woff2/src/table_tags.h, libs/woff2/src/transform.cc, 
-    libs/woff2/src/transform.h, libs/woff2/src/variable_length.cc, 
-    libs/woff2/src/variable_length.h, libs/woff2/src/woff2_common.cc, 
-    libs/woff2/src/woff2_common.h, libs/woff2/src/woff2_dec.h, 
-    libs/woff2/src/woff2_enc.cc, libs/woff2/src/woff2_enc.h, 
-    libs/woff2/src/woff2_out.cc, libs/woff2/src/woff2_out.h, 
-    src/FontWriter.cpp, src/FontWriter.hpp, src/Makefile.am: 
-  added support for embedding WOFF2 fonts 
-
-2016-08-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/XMLNode.hpp: 
-  added move constructors to XMLNode classes 
-
-2016-08-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontEngine.cpp: 
-  fixed sign of the font descender 
-
-  * configure.ac, doc/dvisvgm.txt.in, src/CommandLine.hpp, 
-    src/FontWriter.cpp, src/FontWriter.hpp, src/GraphicsPath.hpp, 
-    src/Makefile.am, src/SVGTree.cpp, src/SVGTree.hpp, src/XMLNode.cpp, 
-    src/XMLNode.hpp, src/dvisvgm.cpp, src/ffwrapper.c, src/ffwrapper.h, 
-    src/options.xml: 
-  added option --font-format to select the file format used to embed fonts 
-
-2016-08-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * xxHash/xxhash.c, xxHash/xxhash.h: 
-  updated xxHash to version 0.6.2 
-
-2016-08-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FixWord.hpp, src/Font.cpp, src/FontMetrics.hpp, src/SVGTree.cpp, 
-    src/TFM.cpp, src/TFM.hpp: 
-  added getters for ascent and descent to TFM-based fonts 
-
-2016-08-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Ghostscript.hpp: 
-  removed copy constructor of class Ghostscript 
-
-  * src/PathClipper.cpp: 
-  added missing initializers 
-
-2016-08-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, src/CLCommandLine.cpp, src/CLCommandLine.hpp, 
-    src/CommandLine.hpp, src/Makefile.am, src/dvisvgm.cpp, src/options.dtd, 
-    src/options.xml, src/version.hpp, src/version.hpp.in: 
-  added version.hpp to provide the current version number 
-
-2016-08-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp, src/DVIReader.hpp, src/Directory.cpp, 
-    src/Directory.hpp, src/FilePath.cpp, src/FilePath.hpp, src/Font.cpp, 
-    src/Font.hpp, src/FontManager.cpp, src/FontManager.hpp, src/GFReader.hpp, 
-    src/PageRanges.cpp, src/PageRanges.hpp, src/PageSize.cpp, 
-    src/PageSize.hpp, src/SVGOutput.cpp, src/SVGOutput.hpp, 
-    src/VFActions.hpp, src/VFReader.cpp: 
-  pass string parameters by reference if possible 
-
-  * src/System.cpp, src/dvisvgm.cpp: 
-  minor refactorings of dvisvgm.cpp 
-
-  * src/Ghostscript.cpp, src/MiKTeXCom.cpp: 
-  replaced __WIN64__ with pre-defined _WIN64 
-
-2016-08-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CLCommandLine.cpp, src/CLCommandLine.hpp, src/CLOption.hpp, 
-    src/CmdLineParserBase.cpp, src/CmdLineParserBase.hpp, 
-    src/CommandLine.cpp, src/CommandLine.hpp, src/Makefile.am, 
-    src/dvisvgm.cpp, src/options.dtd, src/options.xml, 
-    tests/CommandLineTest.cpp: 
-  reimplemented the CommandLine parser class 
-
-  * src/CMap.cpp, src/CMapManager.cpp, src/CMapReader.cpp, src/EncFile.cpp, 
-    src/FileFinder.cpp, src/FileFinder.hpp, src/Font.cpp, 
-    src/FontEncoding.cpp, src/FontManager.cpp, src/FontMap.cpp, 
-    src/FontMetrics.cpp, src/Ghostscript.cpp, src/MetafontWrapper.cpp, 
-    src/PsSpecialHandler.cpp, src/Subfont.cpp, src/dvisvgm.cpp, 
-    tests/CMapManagerTest.cpp, tests/FileFinderTest.cpp, 
-    tests/MapLineTest.cpp, tests/SubfontTest.cpp: 
-  made FileFinder a singleton again 
-
-2016-07-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BgColorSpecialHandler.cpp, src/BoundingBox.cpp, 
-    src/DvisvgmSpecialHandler.cpp, src/EmSpecialHandler.cpp, 
-    src/FileSystem.cpp, src/FontCache.cpp, src/FontEngine.cpp, 
-    src/FontManager.cpp, src/GraphicsPath.hpp, src/PSInterpreter.cpp, 
-    src/PapersizeSpecialHandler.cpp, src/PathClipper.cpp, src/RangeMap.cpp, 
-    src/Subfont.cpp, src/TpicSpecialHandler.cpp, src/XMLDocument.cpp, 
-    src/XMLNode.cpp: 
-  replaced insert/push_back with emplace/emplace_back where useful 
-
-2016-07-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PathClipper.cpp: 
-  some minor refactorings of class PathClipper 
-
-  * src/CMapReader.cpp: 
-  minor refactoring of class CMapReader 
-
-2016-07-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontMap.cpp, src/FontMap.hpp: 
-  some syntactic refactorings of class FontMap 
-
-  * src/FontManager.cpp, src/FontManager.hpp: 
-  use unique_ptr to automatically release Font objects in class 
-  FontManager 
-
-2016-07-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/AGLTable.h, src/AGLTable.hpp, src/BasicDVIReader.cpp, 
-    src/BasicDVIReader.h, src/BasicDVIReader.hpp, src/Bezier.cpp, 
-    src/Bezier.h, src/Bezier.hpp, src/BgColorSpecialHandler.cpp, 
-    src/BgColorSpecialHandler.h, src/BgColorSpecialHandler.hpp, 
-    src/Bitmap.cpp, src/Bitmap.h, src/Bitmap.hpp, src/BoundingBox.cpp, 
-    src/BoundingBox.h, src/BoundingBox.hpp, src/CMap.cpp, src/CMap.h, 
-    src/CMap.hpp, src/CMapManager.cpp, src/CMapManager.h, 
-    src/CMapManager.hpp, src/CMapReader.cpp, src/CMapReader.h, 
-    src/CMapReader.hpp, src/CRC32.cpp, src/CRC32.h, src/CRC32.hpp, 
-    src/Calculator.cpp, src/Calculator.h, src/Calculator.hpp, 
-    src/CharMapID.cpp, src/CharMapID.h, src/CharMapID.hpp, src/Character.h, 
-    src/Character.hpp, src/CmdLineParserBase.cpp, src/CmdLineParserBase.h, 
-    src/CmdLineParserBase.hpp, src/Color.cpp, src/Color.h, src/Color.hpp, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, 
-    src/ColorSpecialHandler.hpp, src/CommandLine.cpp, src/CommandLine.h, 
-    src/CommandLine.hpp, src/DLLoader.cpp, src/DLLoader.h, src/DLLoader.hpp, 
-    src/DVIActions.h, src/DVIActions.hpp, src/DVIReader.cpp, src/DVIReader.h, 
-    src/DVIReader.hpp, src/DVIToSVG.cpp, src/DVIToSVG.h, src/DVIToSVG.hpp, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/DVIToSVGActions.hpp, 
-    src/DependencyGraph.h, src/DependencyGraph.hpp, src/Directory.cpp, 
-    src/Directory.h, src/Directory.hpp, src/DvisvgmSpecialHandler.cpp, 
-    src/DvisvgmSpecialHandler.h, src/DvisvgmSpecialHandler.hpp, 
-    src/EPSFile.cpp, src/EPSFile.h, src/EPSFile.hpp, src/EPSToSVG.cpp, 
-    src/EPSToSVG.h, src/EPSToSVG.hpp, src/EmSpecialHandler.cpp, 
-    src/EmSpecialHandler.h, src/EmSpecialHandler.hpp, src/EncFile.cpp, 
-    src/EncFile.h, src/EncFile.hpp, src/FileFinder.cpp, src/FileFinder.h, 
-    src/FileFinder.hpp, src/FilePath.cpp, src/FilePath.h, src/FilePath.hpp, 
-    src/FileSystem.cpp, src/FileSystem.h, src/FileSystem.hpp, src/FixWord.h, 
-    src/FixWord.hpp, src/Font.cpp, src/Font.h, src/Font.hpp, 
-    src/FontCache.cpp, src/FontCache.h, src/FontCache.hpp, 
-    src/FontEncoding.cpp, src/FontEncoding.h, src/FontEncoding.hpp, 
-    src/FontEngine.cpp, src/FontEngine.h, src/FontEngine.hpp, 
-    src/FontManager.cpp, src/FontManager.h, src/FontManager.hpp, 
-    src/FontMap.cpp, src/FontMap.h, src/FontMap.hpp, src/FontMetrics.cpp, 
-    src/FontMetrics.h, src/FontMetrics.hpp, src/FontStyle.h, 
-    src/FontStyle.hpp, src/GFGlyphTracer.cpp, src/GFGlyphTracer.h, 
-    src/GFGlyphTracer.hpp, src/GFReader.cpp, src/GFReader.h, 
-    src/GFReader.hpp, src/GFTracer.cpp, src/GFTracer.h, src/GFTracer.hpp, 
-    src/Ghostscript.cpp, src/Ghostscript.h, src/Ghostscript.hpp, src/Glyph.h, 
-    src/Glyph.hpp, src/GlyphTracerMessages.h, src/GlyphTracerMessages.hpp, 
-    src/GraphicsPath.h, src/GraphicsPath.hpp, src/HtmlSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.h, src/HtmlSpecialHandler.hpp, 
-    src/InputBuffer.cpp, src/InputBuffer.h, src/InputBuffer.hpp, 
-    src/InputReader.cpp, src/InputReader.h, src/InputReader.hpp, src/JFM.cpp, 
-    src/JFM.h, src/JFM.hpp, src/Length.cpp, src/Length.h, src/Length.hpp, 
-    src/Makefile.am, src/MapLine.cpp, src/MapLine.h, src/MapLine.hpp, 
-    src/Matrix.cpp, src/Matrix.h, src/Matrix.hpp, src/Message.cpp, 
-    src/Message.h, src/Message.hpp, src/MessageException.h, 
-    src/MessageException.hpp, src/MetafontWrapper.cpp, src/MetafontWrapper.h, 
-    src/MetafontWrapper.hpp, src/MiKTeXCom.cpp, src/MiKTeXCom.h, 
-    src/MiKTeXCom.hpp, src/NoPsSpecialHandler.cpp, src/NoPsSpecialHandler.h, 
-    src/NoPsSpecialHandler.hpp, src/NumericRanges.h, src/NumericRanges.hpp, 
-    src/PSFilter.h, src/PSFilter.hpp, src/PSInterpreter.cpp, 
-    src/PSInterpreter.h, src/PSInterpreter.hpp, src/PSPattern.cpp, 
-    src/PSPattern.h, src/PSPattern.hpp, src/PSPreviewFilter.cpp, 
-    src/PSPreviewFilter.h, src/PSPreviewFilter.hpp, src/PageRanges.cpp, 
-    src/PageRanges.h, src/PageRanges.hpp, src/PageSize.cpp, src/PageSize.h, 
-    src/PageSize.hpp, src/Pair.h, src/Pair.hpp, 
-    src/PapersizeSpecialHandler.cpp, src/PapersizeSpecialHandler.h, 
-    src/PapersizeSpecialHandler.hpp, src/PathClipper.cpp, src/PathClipper.h, 
-    src/PathClipper.hpp, src/PdfSpecialHandler.cpp, src/PdfSpecialHandler.h, 
-    src/PdfSpecialHandler.hpp, src/PreScanDVIReader.cpp, 
-    src/PreScanDVIReader.h, src/PreScanDVIReader.hpp, src/Process.cpp, 
-    src/Process.h, src/Process.hpp, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/PsSpecialHandler.hpp, src/RangeMap.cpp, 
-    src/RangeMap.h, src/RangeMap.hpp, src/SVGCharHandler.cpp, 
-    src/SVGCharHandler.h, src/SVGCharHandler.hpp, 
-    src/SVGCharHandlerFactory.cpp, src/SVGCharHandlerFactory.h, 
-    src/SVGCharHandlerFactory.hpp, src/SVGCharPathHandler.cpp, 
-    src/SVGCharPathHandler.h, src/SVGCharPathHandler.hpp, 
-    src/SVGCharTspanTextHandler.cpp, src/SVGCharTspanTextHandler.h, 
-    src/SVGCharTspanTextHandler.hpp, src/SVGOutput.cpp, src/SVGOutput.h, 
-    src/SVGOutput.hpp, src/SVGSingleCharTextHandler.cpp, 
-    src/SVGSingleCharTextHandler.h, src/SVGSingleCharTextHandler.hpp, 
-    src/SVGTree.cpp, src/SVGTree.h, src/SVGTree.hpp, src/ShadingPatch.cpp, 
-    src/ShadingPatch.h, src/ShadingPatch.hpp, src/SignalHandler.cpp, 
-    src/SignalHandler.h, src/SignalHandler.hpp, src/SpecialActions.h, 
-    src/SpecialActions.hpp, src/SpecialHandler.h, src/SpecialHandler.hpp, 
-    src/SpecialManager.cpp, src/SpecialManager.h, src/SpecialManager.hpp, 
-    src/StreamReader.cpp, src/StreamReader.h, src/StreamReader.hpp, 
-    src/StreamWriter.cpp, src/StreamWriter.h, src/StreamWriter.hpp, 
-    src/Subfont.cpp, src/Subfont.h, src/Subfont.hpp, src/System.cpp, 
-    src/System.h, src/System.hpp, src/TFM.cpp, src/TFM.h, src/TFM.hpp, 
-    src/TensorProductPatch.cpp, src/TensorProductPatch.h, 
-    src/TensorProductPatch.hpp, src/Terminal.cpp, src/Terminal.h, 
-    src/Terminal.hpp, src/ToUnicodeMap.cpp, src/ToUnicodeMap.h, 
-    src/ToUnicodeMap.hpp, src/TpicSpecialHandler.cpp, 
-    src/TpicSpecialHandler.h, src/TpicSpecialHandler.hpp, 
-    src/TriangularPatch.cpp, src/TriangularPatch.h, src/TriangularPatch.hpp, 
-    src/Unicode.cpp, src/Unicode.h, src/Unicode.hpp, src/VFActions.h, 
-    src/VFActions.hpp, src/VFReader.cpp, src/VFReader.h, src/VFReader.hpp, 
-    src/VectorIterator.h, src/VectorIterator.hpp, src/VectorStream.h, 
-    src/VectorStream.hpp, src/XMLDocument.cpp, src/XMLDocument.h, 
-    src/XMLDocument.hpp, src/XMLNode.cpp, src/XMLNode.h, src/XMLNode.hpp, 
-    src/XMLString.cpp, src/XMLString.h, src/XMLString.hpp, 
-    src/ZLibOutputStream.h, src/ZLibOutputStream.hpp, src/dvisvgm.cpp, 
-    src/macros.h, src/macros.hpp, src/psdefs.cpp, tests/BezierTest.cpp, 
-    tests/BitmapTest.cpp, tests/BoundingBoxTest.cpp, 
-    tests/CMapManagerTest.cpp, tests/CMapReaderTest.cpp, tests/CMapTest.cpp, 
-    tests/CRC32Test.cpp, tests/CalculatorTest.cpp, 
-    tests/ColorSpecialTest.cpp, tests/ColorTest.cpp, 
-    tests/CommandLineTest.cpp, tests/DependencyGraphTest.cpp, 
-    tests/DirectoryTest.cpp, tests/DvisvgmSpecialTest.cpp, 
-    tests/EmSpecialTest.cpp, tests/FileFinderTest.cpp, 
-    tests/FilePathTest.cpp, tests/FileSystemTest.cpp, 
-    tests/FontManagerTest.cpp, tests/FontMapTest.cpp, 
-    tests/GFGlyphTracerTest.cpp, tests/GFReaderTest.cpp, 
-    tests/GhostscriptTest.cpp, tests/GraphicsPathTest.cpp, 
-    tests/JFMReaderTest.cpp, tests/LengthTest.cpp, tests/Makefile.am, 
-    tests/MapLineTest.cpp, tests/MatrixTest.cpp, 
-    tests/MessageExceptionTest.cpp, tests/PSInterpreterTest.cpp, 
-    tests/PageRagesTest.cpp, tests/PageSizeTest.cpp, tests/PairTest.cpp, 
-    tests/RangeMapTest.cpp, tests/SVGOutputTest.cpp, 
-    tests/ShadingPatchTest.cpp, tests/SplittedCharInputBufferTest.cpp, 
-    tests/StreamInputBufferTest.cpp, tests/StreamReaderTest.cpp, 
-    tests/StreamWriterTest.cpp, tests/SubfontTest.cpp, 
-    tests/TFMReaderTest.cpp, tests/TensorProductPatchTest.cpp, 
-    tests/ToUnicodeMapTest.cpp, tests/TriangularPatchTest.cpp, 
-    tests/UnicodeTest.cpp, tests/VectorIteratorTest.cpp, 
-    tests/VectorStreamTest.cpp, tests/XMLNodeTest.cpp, 
-    tests/XMLStringTest.cpp, tests/create-makefile: 
-  renamed filename extension of C++ headers to .hpp 
-
-2016-07-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CMapManager.cpp, src/CMapManager.h, src/FileFinder.cpp, 
-    src/Font.cpp, src/Font.h, src/XMLDocument.cpp, src/XMLDocument.h, 
-    src/XMLNode.cpp, src/XMLNode.h, tests/XMLNodeTest.cpp: 
-  use smart pointers to release heap memory 
-
-  * src/DVIToSVGActions.cpp, src/DVIToSVGActions.h: 
-  create BoxMap object directly, avoid new/delete 
-
-2016-07-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/AGLTable.h, src/Color.cpp, src/Unicode.cpp, tests/genhashcheck.py: 
-  replaced repeated binary search implementations with calls of 
-  lower_bound() 
-
-2016-07-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FileFinder.cpp, src/Message.cpp: 
-  initialize maps with initializer-lists 
-
-2016-07-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Length.cpp, src/TpicSpecialHandler.cpp: 
-  replaced 'id macros' with constexpr functions 
-
-2016-07-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/TFM.cpp: 
-  added missing initializers 
-
-  * src/dvisvgm.cpp: 
-  catch exception in set_cache_dir() 
-
-  * .travis.yml, configure.ac, src/Doxyfile: 
-  set version to 1.16 
-
-  * NEWS, README.md: 
-  updated NEWS and README 
-
-2016-07-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, m4/ax_cxx_compile_stdcxx.m4: 
-  switch from C++03 to C++11 
-
-  * src/NumericRanges.h, src/PapersizeSpecialHandler.cpp, src/Unicode.cpp, 
-    src/VFReader.cpp: 
-  replaced static callback functions with lambdas 
-
-  * src/CMapReader.cpp, src/CMapReader.h, src/CmdLineParserBase.cpp, 
-    src/CmdLineParserBase.h, src/Color.cpp, src/Color.h, src/CommandLine.cpp, 
-    src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp, 
-    src/EmSpecialHandler.cpp, src/Font.cpp, src/Font.h, src/FontManager.cpp, 
-    src/GraphicsPath.h, src/HtmlSpecialHandler.cpp, src/HtmlSpecialHandler.h, 
-    src/Length.cpp, src/Length.h, src/PathClipper.cpp, 
-    src/PsSpecialHandler.cpp, src/SVGTree.cpp, src/ShadingPatch.cpp, 
-    src/TensorProductPatch.h, tests/BoundingBoxTest.cpp, 
-    tests/LengthTest.cpp, tests/ShadingPatchTest.cpp, 
-    tests/TensorProductPatchTest.cpp, tests/TriangularPatchTest.cpp: 
-  replaced some enums with enum classes 
-
-  * clipper/clipper.hpp, src/AGLTable.h, src/BasicDVIReader.cpp, 
-    src/Bitmap.cpp, src/Bitmap.h, src/BoundingBox.h, src/CMap.cpp, 
-    src/CMap.h, src/CMapReader.cpp, src/CRC32.cpp, src/CRC32.h, 
-    src/CharMapID.h, src/Character.h, src/Color.cpp, src/Color.h, 
-    src/DVIActions.h, src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp, 
-    src/DVIToSVG.h, src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, 
-    src/EPSFile.cpp, src/EPSFile.h, src/EncFile.cpp, src/EncFile.h, 
-    src/FileSystem.cpp, src/FileSystem.h, src/FixWord.h, src/Font.cpp, 
-    src/Font.h, src/FontCache.cpp, src/FontCache.h, src/FontEncoding.cpp, 
-    src/FontEncoding.h, src/FontEngine.cpp, src/FontEngine.h, 
-    src/FontManager.cpp, src/FontManager.h, src/FontMetrics.cpp, 
-    src/FontMetrics.h, src/GFGlyphTracer.cpp, src/GFGlyphTracer.h, 
-    src/GFReader.cpp, src/GFReader.h, src/GFTracer.cpp, src/GFTracer.h, 
-    src/Glyph.h, src/GlyphTracerMessages.h, src/InputBuffer.cpp, 
-    src/InputBuffer.h, src/JFM.cpp, src/JFM.h, src/Makefile.am, 
-    src/Message.h, src/Pair.h, src/PathClipper.cpp, src/PreScanDVIReader.cpp, 
-    src/PsSpecialHandler.h, src/RangeMap.cpp, src/RangeMap.h, 
-    src/SVGCharHandler.h, src/SVGCharPathHandler.cpp, 
-    src/SVGCharPathHandler.h, src/SVGCharTspanTextHandler.cpp, 
-    src/SVGCharTspanTextHandler.h, src/SVGSingleCharTextHandler.cpp, 
-    src/SVGSingleCharTextHandler.h, src/StreamReader.cpp, src/StreamReader.h, 
-    src/StreamWriter.cpp, src/StreamWriter.h, src/Subfont.cpp, src/Subfont.h, 
-    src/TFM.cpp, src/TFM.h, src/ToUnicodeMap.cpp, src/ToUnicodeMap.h, 
-    src/Unicode.cpp, src/Unicode.h, src/VFActions.h, src/VFReader.cpp, 
-    src/VFReader.h, src/XMLString.cpp, src/types.h, tests/BitmapTest.cpp, 
-    tests/CRC32Test.cpp, tests/ColorSpecialTest.cpp, tests/ColorTest.cpp, 
-    tests/GFGlyphTracerTest.cpp, tests/GFReaderTest.cpp, 
-    tests/JFMReaderTest.cpp, tests/Makefile.am, tests/StreamReaderTest.cpp, 
-    tests/TriangularPatchTest.cpp, tests/TypesTest.cpp, 
-    tests/UnicodeTest.cpp: 
-  replaced own fixed-sized integer types with types from cstdint 
-
-  * AUTHORS, LGPL-2.1.txt, Makefile.am, gzstream/COPYING.LIB, 
-    gzstream/Makefile, gzstream/README, gzstream/gzstream.cpp, 
-    gzstream/gzstream.h, gzstream/index.html, gzstream/logo.gif, 
-    gzstream/test_gunzip.C, gzstream/test_gzip.C, gzstream/version, 
-    src/Makefile.am, src/SVGOutput.cpp, src/SVGOutput.h, 
-    src/ZLibOutputStream.h, src/dvisvgm.cpp, src/gzstream.cpp, 
-    src/gzstream.h, tests/Makefile.am, tests/SVGOutputTest.cpp, 
-    tests/create-makefile: 
-  replaced old gzstream classes 
-
-  * src/DVIReader.cpp, src/DVIReader.h, src/Font.cpp, src/Font.h, 
-    src/FontManager.cpp, src/FontManager.h, src/VFActions.h, 
-    src/VFReader.cpp: 
-  transfer DVI snippet of a VF char by move semantics rather than by heap 
-  pointer 
-
-2016-07-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Bitmap.cpp, src/BoundingBox.h, src/CMapManager.cpp, 
-    src/CmdLineParserBase.cpp, src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/DependencyGraph.h, 
-    src/DvisvgmSpecialHandler.cpp, src/EmSpecialHandler.cpp, 
-    src/FileFinder.cpp, src/FilePath.cpp, src/FilePath.h, src/Font.cpp, 
-    src/FontCache.cpp, src/FontEncoding.cpp, src/FontManager.cpp, 
-    src/FontMap.cpp, src/FontMap.h, src/GFReader.cpp, src/GFReader.h, 
-    src/GraphicsPath.h, src/HtmlSpecialHandler.cpp, src/NumericRanges.h, 
-    src/PSPattern.cpp, src/PsSpecialHandler.cpp, src/SVGTree.cpp, 
-    src/SVGTree.h, src/SpecialManager.cpp, src/SpecialManager.h, 
-    src/Subfont.cpp, src/Subfont.h, src/TpicSpecialHandler.cpp, 
-    src/XMLDocument.cpp, src/XMLNode.cpp, src/XMLString.cpp, src/macros.h: 
-  use range-based 'for' loop to iterate over containers; drop FORALL macro 
-
-  * clipper/clipper.hpp, src/BgColorSpecialHandler.h, src/Bitmap.cpp, 
-    src/CMap.h, src/CmdLineParserBase.h, src/ColorSpecialHandler.h, 
-    src/CommandLine.h, src/DVIReader.h, src/DVIToSVG.h, 
-    src/DVIToSVGActions.h, src/DvisvgmSpecialHandler.h, src/EPSToSVG.h, 
-    src/EmSpecialHandler.h, src/EncFile.h, src/Font.h, src/FontCache.cpp, 
-    src/FontEncoding.h, src/FontMetrics.h, src/GFGlyphTracer.h, 
-    src/GFReader.h, src/GFTracer.h, src/GlyphTracerMessages.h, 
-    src/GraphicsPath.h, src/HtmlSpecialHandler.h, src/InputBuffer.h, 
-    src/InputReader.h, src/JFM.h, src/MessageException.h, 
-    src/NoPsSpecialHandler.h, src/PSPattern.h, src/PSPreviewFilter.h, 
-    src/PapersizeSpecialHandler.h, src/PathClipper.cpp, 
-    src/PdfSpecialHandler.h, src/PreScanDVIReader.h, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, 
-    src/SVGCharPathHandler.h, src/SVGCharTspanTextHandler.h, src/SVGOutput.h, 
-    src/SVGSingleCharTextHandler.h, src/SpecialActions.h, src/TFM.h, 
-    src/TensorProductPatch.h, src/TpicSpecialHandler.h, 
-    src/TriangularPatch.h, src/VectorStream.h, src/XMLNode.h: 
-  mark overridden methods with 'override' keyword 
-
-  * src/PsSpecialHandler.cpp: 
-  use unique_ptr rather than deprecated auto_ptr 
-
-  * src/BasicDVIReader.h, src/Bitmap.h, src/CMap.h, src/CmdLineParserBase.h, 
-    src/DVIActions.h, src/Font.h, src/FontEncoding.h, src/FontMetrics.h, 
-    src/GFGlyphTracer.h, src/GFReader.h, src/GFTracer.h, src/GraphicsPath.h, 
-    src/InputBuffer.h, src/InputReader.h, src/MessageException.h, 
-    src/PSFilter.h, src/PSInterpreter.h, src/PSPattern.h, 
-    src/SVGCharHandler.h, src/SVGOutput.h, src/ShadingPatch.h, 
-    src/SpecialActions.h, src/SpecialHandler.h, src/StreamReader.h, 
-    src/StreamWriter.h, src/Subfont.h, src/VFActions.h, src/XMLNode.h: 
-  replaced empty virtual destructors with default ones 
-
-2016-07-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BasicDVIReader.h, src/DVIActions.h, src/DVIReader.cpp, 
-    src/DVIReader.h, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/FontManager.cpp, 
-    src/FontManager.h, src/PreScanDVIReader.h, src/dvisvgm.cpp: 
-  refactored the DVI reader classes
-- added higher-level template methods 
-  to process the DVI commands more safely
-- moved triggering of DVIActions 
-  from DVIReader to DVIToSVG 
-
-2016-06-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BoundingBox.cpp, src/BoundingBox.h, src/DVIToSVG.cpp, 
-    src/dvisvgm.cpp: 
-  fixed computation of bounding boxes modified by relative --bbox argument 
-
-  * xxHash/xxhash.c, xxHash/xxhash.h: 
-  updated xxHash to version 0.6.1 
-
-2016-06-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/TFM.cpp, tests/JFMReaderTest.cpp, tests/TFMReaderTest.cpp: 
-  minor improvements to TFM/JFM tests 
-
-2016-06-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp, src/VectorStream.h, tests/VectorStreamTest.cpp: 
-  refactored VectorStreamBuffer to keep constness of assigned vector 
-
-  * src/GFReader.cpp: 
-  ensure validity of postpost command in GFReader::executePostamble() 
-
-2016-06-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DvisvgmSpecialHandler.cpp, src/TFM.cpp, src/VFReader.cpp: 
-  replaced local definitions of pt2bp with Length::pt2bp 
-
-  * src/XMLNode.h: 
-  added ouput operators for the XML node objects 
-
-  * src/EmSpecialHandler.cpp, src/EmSpecialHandler.h, 
-    tests/EmSpecialTest.cpp, tests/Makefile.am: 
-  improved the emTeX special handler; added EmSpecialTest 
-
-  * src/BoundingBox.cpp, src/BoundingBox.h, tests/BoundingBoxTest.cpp: 
-  fixed unit conversion in BoundingBox class 
-
-2016-06-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/Length.cpp, src/Length.h, tests/LengthTest.cpp: 
-  added dd, cc, and sp units to class Length; fixed factor pt2pc 
-
-2016-06-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * xxHash/xxhash.c, xxHash/xxhash.h: 
-  updated xxHash to version 0.6.0 
-
-  * src/DLLoader.cpp, src/DLLoader.h, src/Directory.cpp, src/Directory.h, 
-    src/FilePath.cpp, src/FilePath.h, src/FileSystem.cpp, src/GFTracer.cpp, 
-    src/Ghostscript.cpp, src/Ghostscript.h, src/Message.cpp, 
-    src/MetafontWrapper.cpp, src/Process.cpp, src/Terminal.cpp, 
-    src/Terminal.h, src/dvisvgm.cpp: 
-  cleaned up Windows-related #defines 
-
-2016-06-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CommandLine.cpp: 
-  removed redundant #includes 
-
-  * src/Length.cpp, src/Length.h, tests/LengthTest.cpp: 
-  added functions to convert between Length::Unit and std::string 
-
-2016-06-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CMapManager.cpp, src/CMapManager.h, src/DVIActions.h, 
-    src/DVIToSVGActions.h, src/DvisvgmSpecialHandler.h, src/Font.h, 
-    src/FontEngine.h, src/FontManager.h, src/HtmlSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.h, src/PSPattern.h, src/PSPreviewFilter.h, 
-    src/SVGCharHandler.cpp, src/SVGCharHandler.h, src/SVGCharPathHandler.cpp, 
-    src/SVGCharTspanTextHandler.cpp, src/SVGSingleCharTextHandler.cpp, 
-    src/SVGTree.h, src/SpecialActions.h, src/SpecialHandler.h, 
-    src/SpecialManager.h, src/XMLDocument.cpp, src/XMLNode.h, 
-    tests/XMLNodeTest.cpp: 
-  changed some structs to classes and replaced #includes with forward 
-  declarations 
-
-  * src/SVGCharHandler.h: 
-  added missing initializer to class SVGCharHandler 
-
-2016-06-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.h, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, src/DVIToSVG.cpp, 
-    src/DVIToSVGActions.cpp, src/DvisvgmSpecialHandler.cpp, 
-    src/DvisvgmSpecialHandler.h, src/EPSToSVG.cpp, src/EmSpecialHandler.cpp, 
-    src/EmSpecialHandler.h, src/HtmlSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.h, src/NoPsSpecialHandler.cpp, 
-    src/NoPsSpecialHandler.h, src/PSPattern.cpp, src/PSPattern.h, 
-    src/PdfSpecialHandler.cpp, src/PdfSpecialHandler.h, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, src/SpecialHandler.h, 
-    src/SpecialManager.cpp, src/SpecialManager.h, src/TpicSpecialHandler.cpp, 
-    src/TpicSpecialHandler.h, tests/ColorSpecialTest.cpp, 
-    tests/DvisvgmSpecialTest.cpp: 
-  refactored handling of SpecialAction objects 
-
-  * src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/SVGTree.cpp, 
-    src/SVGTree.h: 
-  refactored processing of end-of-page (eop) commands 
-
-  * doc/dvisvgm.txt.in, src/DVIToSVG.cpp, src/Makefile.am, 
-    src/PapersizeSpecialHandler.cpp, src/PapersizeSpecialHandler.h, 
-    src/PsSpecialHandler.cpp, src/dvisvgm.cpp: 
-  added evaluation of PS special 'papersize=' 
-
-2016-06-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVG.cpp: 
-  fixed transformation of background color rectange 
-
-2016-05-31  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVG.cpp, src/EPSToSVG.cpp: 
-  reworded messages printed after finishing a conversion 
-
-2016-05-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVGActions.cpp, src/Font.cpp, src/Makefile.am, 
-    src/SVGCharHandler.cpp, src/SVGCharHandler.h, 
-    src/SVGCharHandlerFactory.cpp, src/SVGCharHandlerFactory.h, 
-    src/SVGCharPathHandler.cpp, src/SVGCharPathHandler.h, 
-    src/SVGCharTspanTextHandler.cpp, src/SVGCharTspanTextHandler.h, 
-    src/SVGSingleCharTextHandler.cpp, src/SVGSingleCharTextHandler.h, 
-    src/SVGTree.cpp, src/SVGTree.h, src/dvisvgm.cpp: 
-  replaced static SVG text backend by specialized handler classes 
-
-  * src/BasicDVIReader.cpp, src/BasicDVIReader.h, src/Bezier.h, 
-    src/TensorProductPatch.h, src/TriangularPatch.h: 
-  replaced leading spaces with tabs 
-
-2016-05-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BasicDVIReader.cpp, src/DVIReader.cpp: 
-  fixed handling of subfont index in native font definition of XDV 7 
-
-2016-05-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/XMLDocument.cpp, src/XMLNode.cpp, src/XMLNode.h, 
-    tests/DvisvgmSpecialTest.cpp: 
-  prevent line wrapping inside text nodes 
-
-2016-05-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README.md, doc/dvisvgm.txt.in, src/BasicDVIReader.cpp, 
-    src/BasicDVIReader.h, src/DVIReader.cpp, src/DVIToSVG.cpp: 
-  reworded 'DVI format' to 'DVI (format) version' 
-
-  * README.md, doc/dvisvgm.txt.in, src/BasicDVIReader.cpp, 
-    src/BasicDVIReader.h, src/DVIReader.cpp: 
-  added support for XDV version 7 introduced by XeTeX 0.99995 
-
-2016-05-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/TFM.cpp: 
-  prevent reading more than 7 TFM param values (fixes #58) 
-
-  * .travis.yml: 
-  temporarily drop clang from Travis builds 
-
-2016-05-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/JFM.cpp, src/JFM.h, src/TFM.cpp, src/TFM.h: 
-  TFM: store design size in bp units rather than as fixword 
-
-  * src/FontMetrics.h, src/JFM.cpp, src/TFM.cpp, src/TFM.h: 
-  added methods to query space-related parameters from TFM/JFM files 
-
-  * src/TFM.cpp, tests/JFMReaderTest.cpp, tests/TFMReaderTest.cpp: 
-  fixed calculation of character dimensions in TFM class 
-
-2016-04-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Process.cpp: 
-  fixed collecting stdout/stderr output when executing a process 
-
-2016-04-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CMap.h, src/CMapReader.cpp, tests/CMapManagerTest.cpp, 
-    tests/Makefile.am, tests/data/Makefile.am, tests/data/ot1.cmap: 
-  added CMapManagerTest 
-
-2016-04-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml, configure.ac, src/Doxyfile: 
-  set version to 1.15.1 
-
-  * NEWS, README, README.md: 
-  updated NEWS and README 
-
-2016-04-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Calculator.cpp, src/Matrix.cpp: 
-  use std::ws to skip whitespace in istreams 
-
-  * src/Matrix.cpp: 
-  avoid adding trailing EOF characters when parsing parameters of 
-  transformation commands 
-
-  * tests/CMapReaderTest.cpp: 
-  improved CMapReaderTest 
-
-2016-04-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/AGLTable.h, src/Makefile.am, src/Unicode.cpp, tests/Makefile.am, 
-    tests/create-makefile, tests/genhashcheck.py: 
-  moved AGL hash table from Unicode.cpp to a separate file 
-
-2016-04-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/XMLDocument.cpp: 
-  explicitly specify UTF-8 encoding in XML declaration (closes #54) 
-
-  * src/Unicode.cpp, tests/UnicodeTest.cpp: 
-  added support for the AGL character names 'uniFOO' and 'uFOO' 
-
-2016-03-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GraphicsPath.h: 
-  renamed GraphicsPath::sconito/scubicto 
-
-2016-03-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/db2html.xsl: 
-  adapted db2html to insert anchors for each option entry 
-
-  * src/DVIActions.h, src/DVIReader.cpp, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/SVGTree.cpp, src/SVGTree.h: 
-  changed font parameter of setFont() methods from pointer to reference 
-
-  * src/SVGTree.cpp, src/SVGTree.h: 
-  split text and path section of SVGTree::appendChar() into seperate 
-  methods 
-
-2016-02-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS: 
-  updated NEWS 
-
-2016-02-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/Font.cpp, src/Font.h, src/SVGTree.cpp, src/SVGTree.h, 
-    src/dvisvgm.cpp, src/options.xml: 
-  added option --comments (adds comments with additional information to 
-  the SVG file 
-
-  * src/Font.cpp, src/Unicode.cpp, src/Unicode.h, tests/UnicodeTest.cpp: 
-  renamed Unicode::psNameToCodepoint() to Unicode::aglNameToCodepoint 
-
-  * src/FileFinder.cpp, src/FilePath.cpp, src/FileSystem.cpp, 
-    src/FileSystem.h, src/Font.cpp, src/MetafontWrapper.cpp, src/dvisvgm.cpp: 
-  changed string parameters of FileSystem functions to type std::string 
-
-  * .travis.yml, configure.ac, src/Doxyfile: 
-  set version to 1.15 
-
-2016-02-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontEngine.cpp: 
-  reworded error messages of class FontEngine 
-
-  * src/MetafontWrapper.cpp, src/Process.cpp: 
-  avoid reading Metafont logfiles to extract the GF filename 
-
-  * configure.ac, src/FileFinder.cpp, src/FileFinder.h, 
-    tests/FileFinderTest.cpp, tests/GFGlyphTracerTest.cpp, 
-    tests/GFReaderTest.cpp, tests/JFMReaderTest.cpp, tests/Makefile.am, 
-    tests/TFMReaderTest.cpp, tests/cidjmgr0-h.tfm, tests/cmr10.600gf, 
-    tests/cmr10.tfm, tests/create-makefile, tests/data/Makefile.am, 
-    tests/data/cidjmgr0-h.tfm, tests/data/cmr10.600gf, tests/data/cmr10.tfm, 
-    tests/data/dvipdfm_test.map, tests/data/dvips_test.map, 
-    tests/data/frktest-nf-cmp.svg, tests/data/frktest-wf-cmp.svg, 
-    tests/data/frktest.dvi, tests/data/sample-nf-cmp.svg, 
-    tests/data/sample-wf-cmp.svg, tests/data/sample.dvi, 
-    tests/data/sample.sfd, tests/dvipdfm_test.map, tests/dvips_test.map, 
-    tests/frktest-nf-cmp.svg, tests/frktest-wf-cmp.svg, tests/frktest.dvi, 
-    tests/sample-nf-cmp.svg, tests/sample-wf-cmp.svg, tests/sample.dvi, 
-    tests/sample.sfd: 
-  moved test data files to subfolder 
-
-2016-02-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/FileFinderTest.cpp, tests/GFReaderTest.cpp, 
-    tests/SVGOutputTest.cpp: 
-  avoid implicit casts of ifstream/ozstream objects in tests 
-
-  * src/CmdLineParserBase.cpp, src/CmdLineParserBase.h, 
-    tests/CommandLineTest.cpp: 
-  minor improvements of class CommandLineTest 
-
-  * src/XMLNode.cpp, tests/DvisvgmSpecialTest.cpp: 
-  improved DvisvgmSpecialTest 
-
-  * src/FontEngine.cpp, src/FontEngine.h: 
-  removed redundant code from class FontEngine 
-
-2016-02-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  don't remove clipping paths that consist of single moveto commands only 
-
-2016-02-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Bitmap.cpp, src/BoundingBox.cpp, src/CMap.cpp, src/CMapManager.cpp, 
-    src/Calculator.cpp, src/CommandLine.cpp, src/DVIReader.cpp, 
-    src/DVIToSVG.cpp, src/DVIToSVG.h, src/DVIToSVGActions.cpp, 
-    src/Directory.cpp, src/Directory.h, src/EPSToSVG.cpp, src/EncFile.cpp, 
-    src/FileFinder.cpp, src/Font.cpp, src/FontCache.h, src/FontEngine.cpp, 
-    src/FontManager.cpp, src/FontMap.cpp, src/FontMetrics.cpp, 
-    src/GFGlyphTracer.cpp, src/GFReader.cpp, src/GFTracer.cpp, 
-    src/HtmlSpecialHandler.cpp, src/InputReader.cpp, src/MapLine.cpp, 
-    src/MetafontWrapper.cpp, src/PSInterpreter.cpp, 
-    src/PdfSpecialHandler.cpp, src/Process.cpp, src/PsSpecialHandler.cpp, 
-    src/SVGTree.cpp, src/SpecialManager.cpp, src/StreamReader.cpp, 
-    src/StreamWriter.cpp, src/Subfont.cpp, src/TFM.cpp, 
-    src/TensorProductPatch.cpp, src/TpicSpecialHandler.cpp, src/VFReader.cpp, 
-    src/XMLDocument.cpp, src/dvisvgm.cpp, tests/XMLStringTest.cpp: 
-  minor code cleanup (removed redundant includes, added casts) 
-
-2016-01-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * m4/ax_code_coverage.m4: 
-  updated m4 code coverage script to latest version 
-
-  * src/JFM.h, tests/JFMReaderTest.cpp, tests/Makefile.am, 
-    tests/TFMReaderTest.cpp, tests/cidjmgr0-h.tfm, tests/cmr10.tfm, 
-    tests/create-makefile: 
-  added tests for the TFM and JFM classes 
-
-2016-01-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GraphicsPath.h, tests/GraphicsPathTest.cpp: 
-  fixed access of invalid iterator 
-
-  * .travis.yml, configure.ac, src/Doxyfile: 
-  set version to 1.14.2 
-
-  * NEWS, README.md: 
-  updated NEWS 
-
-2016-01-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in: 
-  added generic info about the command-line interface to the manpage 
-
-  * doc/db2html.xsl: 
-  updated links to Bootstrap and Font Awesome in stylesheet db2html.xsl 
-
-  * src/dvisvgm.cpp, xxHash/xxhash.c, xxHash/xxhash.h: 
-  updated xxHash to version 0.5.0 
-
-  * tests/Makefile.am, tests/create-makefile, tests/genhashcheck.py: 
-  added test to check the validity of the char name hashes used in 
-  Unicode.cpp 
-
-2016-01-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BgColorSpecialHandler.cpp, src/ColorSpecialHandler.cpp, 
-    src/ColorSpecialHandler.h, tests/ColorSpecialTest.cpp: 
-  removed check for 'background' special from ColorSpecialHandler 
-
-2016-01-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.h, src/FontStyle.h, src/SVGTree.cpp, 
-    src/TriangularPatch.cpp: 
-  updated/fixed some comments 
-
-  * src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.h, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, src/DVIToSVG.cpp, 
-    src/SpecialHandler.h, src/SpecialManager.cpp, src/SpecialManager.h: 
-  corrected handling of background color special across DVI pages 
-
-2016-01-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GFReader.cpp, src/GFReader.h: 
-  added checks for misplaced GF commands 
-
-  * NEWS: 
-  updated NEWS 
-
-2016-01-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml: 
-  force Travis to use legacy builds due to an issue with clang and gtest 
-
-  * Makefile.am, README, README.md, configure.ac, doc/Makefile.am, 
-    doc/conf-dblatex-man.xsl, doc/conf-dblatex-pdf.xsl, doc/db2html.xsl, 
-    doc/dvisvgm.txt.in, src/BasicDVIReader.cpp, src/BasicDVIReader.h, 
-    src/Bezier.cpp, src/Bezier.h, src/BgColorSpecialHandler.cpp, 
-    src/BgColorSpecialHandler.h, src/Bitmap.cpp, src/Bitmap.h, 
-    src/BoundingBox.cpp, src/BoundingBox.h, src/CMap.cpp, src/CMap.h, 
-    src/CMapManager.cpp, src/CMapManager.h, src/CMapReader.cpp, 
-    src/CMapReader.h, src/CRC32.cpp, src/CRC32.h, src/Calculator.cpp, 
-    src/Calculator.h, src/CharMapID.cpp, src/CharMapID.h, src/Character.h, 
-    src/CmdLineParserBase.cpp, src/CmdLineParserBase.h, src/Color.cpp, 
-    src/Color.h, src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, 
-    src/CommandLine.cpp, src/CommandLine.h, src/DLLoader.cpp, src/DLLoader.h, 
-    src/DVIActions.h, src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp, 
-    src/DVIToSVG.h, src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, 
-    src/DependencyGraph.h, src/Directory.cpp, src/Directory.h, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.h, 
-    src/EPSFile.cpp, src/EPSFile.h, src/EPSToSVG.cpp, src/EPSToSVG.h, 
-    src/EmSpecialHandler.cpp, src/EmSpecialHandler.h, src/EncFile.cpp, 
-    src/EncFile.h, src/FileFinder.cpp, src/FileFinder.h, src/FilePath.cpp, 
-    src/FilePath.h, src/FileSystem.cpp, src/FileSystem.h, src/Font.cpp, 
-    src/Font.h, src/FontCache.cpp, src/FontCache.h, src/FontEncoding.cpp, 
-    src/FontEncoding.h, src/FontEngine.cpp, src/FontEngine.h, 
-    src/FontManager.cpp, src/FontManager.h, src/FontMap.cpp, src/FontMap.h, 
-    src/FontMetrics.cpp, src/FontMetrics.h, src/GFGlyphTracer.cpp, 
-    src/GFGlyphTracer.h, src/GFReader.cpp, src/GFReader.h, src/GFTracer.cpp, 
-    src/GFTracer.h, src/Ghostscript.cpp, src/Ghostscript.h, src/Glyph.h, 
-    src/GlyphTracerMessages.h, src/GraphicsPath.h, 
-    src/HtmlSpecialHandler.cpp, src/HtmlSpecialHandler.h, 
-    src/InputBuffer.cpp, src/InputBuffer.h, src/InputReader.cpp, 
-    src/InputReader.h, src/JFM.cpp, src/JFM.h, src/Length.cpp, src/Length.h, 
-    src/Makefile.am, src/MapLine.cpp, src/MapLine.h, src/Matrix.cpp, 
-    src/Matrix.h, src/Message.cpp, src/Message.h, src/MessageException.h, 
-    src/MetafontWrapper.cpp, src/MetafontWrapper.h, src/MiKTeXCom.cpp, 
-    src/MiKTeXCom.h, src/NoPsSpecialHandler.cpp, src/NoPsSpecialHandler.h, 
-    src/NumericRanges.h, src/PSFilter.h, src/PSInterpreter.cpp, 
-    src/PSInterpreter.h, src/PSPattern.cpp, src/PSPattern.h, 
-    src/PSPreviewFilter.cpp, src/PSPreviewFilter.h, src/PageRanges.cpp, 
-    src/PageRanges.h, src/PageSize.cpp, src/PageSize.h, src/Pair.h, 
-    src/PathClipper.cpp, src/PathClipper.h, src/PdfSpecialHandler.cpp, 
-    src/PdfSpecialHandler.h, src/PreScanDVIReader.cpp, 
-    src/PreScanDVIReader.h, src/Process.cpp, src/Process.h, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, src/RangeMap.cpp, 
-    src/RangeMap.h, src/SVGOutput.cpp, src/SVGOutput.h, src/SVGTree.cpp, 
-    src/SVGTree.h, src/ShadingPatch.cpp, src/ShadingPatch.h, 
-    src/SignalHandler.cpp, src/SignalHandler.h, src/SpecialActions.h, 
-    src/SpecialHandler.h, src/SpecialManager.cpp, src/SpecialManager.h, 
-    src/StreamReader.cpp, src/StreamReader.h, src/StreamWriter.cpp, 
-    src/StreamWriter.h, src/Subfont.cpp, src/Subfont.h, src/System.cpp, 
-    src/System.h, src/TFM.cpp, src/TFM.h, src/TensorProductPatch.cpp, 
-    src/TensorProductPatch.h, src/Terminal.cpp, src/Terminal.h, 
-    src/ToUnicodeMap.cpp, src/ToUnicodeMap.h, src/TpicSpecialHandler.cpp, 
-    src/TpicSpecialHandler.h, src/TriangularPatch.cpp, src/TriangularPatch.h, 
-    src/Unicode.cpp, src/Unicode.h, src/VFActions.h, src/VFReader.cpp, 
-    src/VFReader.h, src/VectorIterator.h, src/VectorStream.h, 
-    src/XMLDocument.cpp, src/XMLDocument.h, src/XMLNode.cpp, src/XMLNode.h, 
-    src/XMLString.cpp, src/XMLString.h, src/dvisvgm.cpp, src/macros.h, 
-    src/options.dtd, src/options.xml, src/psdefs.cpp, src/types.h, 
-    tests/BezierTest.cpp, tests/BitmapTest.cpp, tests/BoundingBoxTest.cpp, 
-    tests/CMapReaderTest.cpp, tests/CMapTest.cpp, tests/CRC32Test.cpp, 
-    tests/CalculatorTest.cpp, tests/ColorSpecialTest.cpp, 
-    tests/ColorTest.cpp, tests/CommandLineTest.cpp, 
-    tests/DependencyGraphTest.cpp, tests/DirectoryTest.cpp, 
-    tests/DvisvgmSpecialTest.cpp, tests/FileFinderTest.cpp, 
-    tests/FilePathTest.cpp, tests/FileSystemTest.cpp, 
-    tests/FontManagerTest.cpp, tests/FontMapTest.cpp, 
-    tests/GFGlyphTracerTest.cpp, tests/GFReaderTest.cpp, 
-    tests/GraphicsPathTest.cpp, tests/LengthTest.cpp, tests/Makefile.am, 
-    tests/MapLineTest.cpp, tests/MatrixTest.cpp, 
-    tests/MessageExceptionTest.cpp, tests/PSInterpreterTest.cpp, 
-    tests/PageRagesTest.cpp, tests/PageSizeTest.cpp, tests/PairTest.cpp, 
-    tests/RangeMapTest.cpp, tests/SVGOutputTest.cpp, 
-    tests/ShadingPatchTest.cpp, tests/SplittedCharInputBufferTest.cpp, 
-    tests/StreamInputBufferTest.cpp, tests/StreamReaderTest.cpp, 
-    tests/StreamWriterTest.cpp, tests/SubfontTest.cpp, 
-    tests/TensorProductPatchTest.cpp, tests/ToUnicodeMapTest.cpp, 
-    tests/TriangularPatchTest.cpp, tests/TypesTest.cpp, 
-    tests/UnicodeTest.cpp, tests/VectorIteratorTest.cpp, 
-    tests/VectorStreamTest.cpp, tests/XMLNodeTest.cpp, 
-    tests/XMLStringTest.cpp, tests/check-conv, tests/create-makefile, 
-    tests/normalize.xsl: 
-  updated year in copyright statements to 2016 
-
-  * .travis.yml, configure.ac, src/Doxyfile: 
-  set version to 1.14.1 
-
-2015-12-31  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp, src/PsSpecialHandler.h: 
-  reset PS graphics state at end of every DVI page 
-
-2015-12-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml, configure.ac, src/Doxyfile: 
-  set version to 1.14 
-
-  * NEWS: 
-  updated NEWS 
-
-2015-12-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  added evaluation of PSTricks specials 'pst:' and 'PST:' 
-
-2015-12-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FileFinder.cpp: 
-  lookup files in the current working directory before searching the texmf 
-  tree 
-
-  * src/GraphicsPath.h, tests/GraphicsPathTest.cpp: 
-  fixed memory issue in class GraphicsPath<T> 
-
-2015-12-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/EPSToSVG.h, 
-    src/PSPreviewFilter.cpp, src/PSPreviewFilter.h, src/PsSpecialHandler.cpp, 
-    src/SpecialActions.h, src/dvisvgm.cpp: 
-  added option --bbox=preview; adapt preview data if --bbox=min 
-
-2015-12-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FileFinder.cpp: 
-  return entire kpathsea version string if it doesn't start with 
-  'kpathsea' 
-
-  * tests/GhostscriptTest.cpp: 
-  prevent opening a graphics window when running GhostscriptTest 
-
-2015-12-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml, configure.ac, src/Doxyfile: 
-  set version to 1.13 
-
-  * NEWS: 
-  updated NEWS 
-
-  * clipper/clipper.cpp, clipper/clipper.hpp: 
-  replaced DOS line endings of the Clipper sources to Unix ones 
-
-2015-12-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Font.cpp, src/Font.h, src/Glyph.h, src/GraphicPath.h, 
-    src/GraphicsPath.h, src/Makefile.am, src/PathClipper.h, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, src/ShadingPatch.h, 
-    src/TensorProductPatch.cpp, src/TensorProductPatch.h, 
-    src/TpicSpecialHandler.cpp, src/TriangularPatch.cpp, 
-    src/TriangularPatch.h, tests/GraphicPathTest.cpp, 
-    tests/GraphicsPathTest.cpp, tests/Makefile.am, 
-    tests/TensorProductPatchTest.cpp, tests/TriangularPatchTest.cpp: 
-  renamed class GraphicPath to GraphicsPath 
-
-2015-11-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in: 
-  added a couple of links to the manpage 
-
-  * src/GraphicPath.h, src/PsSpecialHandler.cpp: 
-  remove redundant moveto commands from graphics paths 
-
-2015-11-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVGActions.cpp, src/EPSToSVG.cpp: 
-  remove progress message before printing a PS error message 
-
-  * src/DVIToSVGActions.cpp, src/DVIToSVGActions.h: 
-  removed redundant methods 
-
-2015-11-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  added evaluation of PS operators ashow, awidthshow, and widthshow (fixes 
-  #49) 
-
-  * xxHash/xxhash.c: 
-  updated xxHash to version r42 
-
-2015-11-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp, src/psdefs.cpp: 
-  minor code cleanup and reordering 
-
-  * src/psdefs.cpp: 
-  reduce rounding errors produced by PS operator 'charpath' 
-
-  * src/psdefs.cpp: 
-  propagate call of PS operator 'setcolor' to the PS handler 
-
-2015-11-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml, configure.ac, src/Doxyfile: 
-  set version to 1.12 
-
-  * NEWS: 
-  updated NEWS 
-
-2015-11-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontManager.cpp: 
-  removed redundant #include 
-
-  * src/FontEngine.cpp: 
-  treat character code as character index if no font mapping is set 
-
-2015-11-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README, README.md: 
-  updated links to Google Test framework 
-
-2015-11-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Color.cpp, src/Color.h, src/ColorSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.cpp, tests/ColorTest.cpp: 
-  renamed Color::setName() to Color::setPSName() 
-
-  * tests/Makefile.am, tests/ShadingPatch.cpp, tests/ShadingPatchTest.cpp: 
-  renamed ShadingPatchTest 
-
-  * doc/dvisvgm.txt.in, src/Color.cpp, src/Color.h, src/CommandLine.cpp, 
-    src/CommandLine.h, src/DVIToSVGActions.cpp, 
-    src/DvisvgmSpecialHandler.cpp, src/EmSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.cpp, src/PSPattern.cpp, src/PsSpecialHandler.cpp, 
-    src/SVGTree.cpp, src/TpicSpecialHandler.cpp, src/dvisvgm.cpp, 
-    src/options.xml, tests/ColorTest.cpp: 
-  added option --colornames to replace RGB color values with SVG color 
-  names 
-
-2015-10-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Process.cpp, src/Process.h: 
-  fixed invalid access to freed string memory 
-
-2015-10-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in: 
-  minor improvements of the manual page 
-
-2015-09-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, README, README.md: 
-  updated NEWS and README files 
-
-2015-09-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml, configure.ac, src/Doxyfile: 
-  set version to 1.11 
-
-2015-09-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Font.cpp, src/ToUnicodeMap.cpp, src/Unicode.cpp, src/Unicode.h, 
-    tests/UnicodeTest.cpp: 
-  improved handling of invalid Unicode points 
-
-  * src/Font.cpp, src/Unicode.cpp, src/Unicode.h, tests/UnicodeTest.cpp: 
-  renamed Unicode::psName2Codepoint to Unicode::psNameToCodepoint 
-
-2015-09-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Font.cpp: 
-  prevent creating 0x00 codepoints if PS character name is unknown 
-
-  * src/HtmlSpecialHandler.cpp: 
-  quote XML metacharacters in xlink:title attributes 
-
-  * src/CmdLineParserBase.h, src/InputReader.h: 
-  changed 'struct InputReader' to 'class InputReader' 
-
-2015-09-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/SVGTree.cpp: 
-  force creating a new text element after appending a different node to 
-  the page 
-
-2015-08-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README, README.md: 
-  minor updates to README and README.md 
-
-2015-07-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/GhostscriptTest.cpp, tests/Makefile.am: 
-  added GhostscriptTest 
-
-  * tests/UnicodeTest.cpp: 
-  improved UnicodeTest 
-
-  * tests/CommandLineTest.cpp, tests/MessageExceptionTest.cpp: 
-  use ASSERT_STREQ in tests 
-
-2015-07-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README, README.md, doc/dvisvgm.txt.in: 
-  updated links to project website again (relocated to 
-  dvisvgm.bplaced.net) 
-
-2015-07-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README, README.md, doc/dvisvgm.txt.in: 
-  updated info about new project website 
-
-2015-07-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml, configure.ac, src/Doxyfile: 
-  set version to 1.10 
-
-  * NEWS: 
-  updated NEWS 
-
-2015-07-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README.md, doc/dvisvgm.txt.in, src/BasicDVIReader.cpp, 
-    src/BasicDVIReader.h, src/DVIReader.cpp, src/DVIReader.h, src/Font.h, 
-    src/FontManager.cpp, src/FontManager.h: 
-  added support for new XDV format 6 
-
-2015-07-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README, README.md: 
-  updated README 
-
-2015-07-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/dvisvgm.cpp: 
-  check for option --help before initializing the FileFinder 
-
-  * src/MiKTeXCom.cpp: 
-  added some comments to MiKTeXCom.cpp 
-
-2015-07-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/BezierTest.cpp: 
-  removed #include "debug.h" from test 
-
-  * Makefile.am, configure.ac, xxHash/LICENSE, xxHash/Makefile.am, 
-    xxHash/xxhash.c, xxHash/xxhash.h: 
-  added xxHash library (https://github.com/Cyan4973/xxHash) 
-
-  * src/Font.cpp, src/Makefile.am, src/Unicode.cpp, src/Unicode.h, 
-    tests/Makefile.am, tests/create-makefile: 
-  added mapping from character names to unicode for PostScript fonts 
-
-2015-04-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml, configure.ac, src/Doxyfile: 
-  set version to 1.9.2 
-
-  * NEWS, README.md: 
-  updated NEWS and README.md 
-
-  * src/SVGTree.cpp: 
-  apply --precision settings to font-size attributes too 
-
-2015-04-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/SVGOutputTest.cpp: 
-  remove output files created by SVGOutputTest::getPageStream() 
-
-2015-04-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README.md: 
-  minor additions to README.md 
-
-2015-03-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GlyphTracerMessages.h: 
-  always skip tracer message if no glyphs have been traced 
-
-  * src/GFReader.cpp, src/GFReader.h, tests/GFReaderTest.cpp: 
-  improved GFReaderTest 
-
-2015-03-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GFGlyphTracer.cpp, src/GFTracer.h, tests/GFGlyphTracerTest.cpp, 
-    tests/Makefile.am: 
-  ensure GFGlyphTracer::executeChar() returns the correct status; added 
-  GFGlyphtracerTest 
-
-  * src/DVIToSVG.cpp: 
-  avoid retracing of fonts if option --no-fonts is given 
-
-2015-03-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/StreamWriterTest.cpp: 
-  fixed StreamWriterTest 
-
-  * tests/SVGOutputTest.cpp: 
-  improved SVGOutputTest 
-
-2015-03-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/Makefile.am, tests/ShadingPatch.cpp: 
-  added ShadingPatchTest 
-
-2015-03-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/ShadingPatch.h, src/TensorProductPatch.cpp, 
-    src/TensorProductPatch.h, src/TriangularPatch.cpp, src/TriangularPatch.h, 
-    tests/Makefile.am, tests/TriangularPatchTest.cpp: 
-  added test for class TriangularPatch 
-
-  * src/Bezier.cpp, src/Bezier.h, src/TensorProductPatch.cpp, 
-    src/TriangularPatch.cpp, src/TriangularPatch.h, 
-    tests/TriangularPatchTest.cpp: 
-  renamed method pointAt() of class Bezier and TriangularPatch to 
-  valueAt() 
-
-  * src/TensorProductPatch.h, tests/TensorProductPatchTest.cpp: 
-  improved TensorProductPatchTest 
-
-2015-03-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * m4/ax_code_coverage.m4: 
-  added missing file ax_code_coverage.m4 
-
-  * autogen.sh: 
-  updated autogen.sh 
-
-2015-03-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/XMLNode.cpp, src/XMLNode.h, tests/Makefile.am, 
-    tests/XMLNodeTest.cpp: 
-  fixed a few issues in class XMLElementNode; added XMLNodeTest 
-
-  * .gitignore, Makefile.am, clipper/Makefile.am, configure.ac, 
-    src/Makefile.am, tests/Makefile.am, tests/create-makefile: 
-  extended build system to generate coverage reports 
-
-  * tests/Makefile.am, tests/VectorIteratorTest.cpp: 
-  added VectorIteratorTest 
-
-2015-03-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/XMLStringTest.cpp: 
-  fixed test class name of XMLString 
-
-2015-03-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/CRC32Test.cpp: 
-  added test for 'compute' methods of class CRC32 
-
-  * tests/GraphicPathTest.cpp: 
-  extended tests of class GraphicPath 
-
-2015-03-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Unicode.cpp, tests/Makefile.am, tests/UnicodeTest.cpp: 
-  fixed UTF-8 encoding of 0xfffe and 0xffff; added UnicodeTest 
-
-  * tests/StreamReaderTest.cpp: 
-  exteded StreamReader tests 
-
-2015-03-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/XMLString.cpp, tests/Makefile.am, tests/XMLStringTest.cpp: 
-  fixed conversion from C and C++ strings to XMLString; added 
-  XMLStringTest 
-
-  * .gitignore: 
-  added .gitignore 
-
-2015-03-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Bitmap.cpp, src/Bitmap.h, tests/BitmapTest.cpp, 
-    tests/GFReaderTest.cpp, tests/Makefile.am: 
-  small refactorings of class Bitmap; added tests for class Bitmap 
-
-  * src/BoundingBox.cpp, src/BoundingBox.h, tests/BoundingBoxTest.cpp: 
-  improved BoundingBox tests 
-
-2015-03-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Bezier.cpp, src/BoundingBox.cpp, src/BoundingBox.h, 
-    tests/BezierTest.cpp, tests/Makefile.am: 
-  fixed Bezier::reduceDegree() for degree 1 and added BezierTest class 
-
-2015-03-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml: 
-  Travis conf: added configuration data for Coverity Scan 
-
-  * README.md: 
-  added license badge to README.md 
-
-2015-02-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, README.md: 
-  updated NEWS and README.md 
-
-2015-02-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Calculator.cpp: 
-  replaced while(1) with for(;;) for consistency 
-
-2015-02-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.9.1 
-
-2015-02-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Ghostscript.cpp: 
-  disable lookup of GS library in Windows registry for old gcc versions 
-
-2015-02-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVG.cpp, src/EPSToSVG.cpp, src/Makefile.am, src/SVGOutput.cpp, 
-    src/SVGOutput.h, src/SVGOutputBase.h, src/dvisvgm.cpp: 
-  moved class SVGOutput to separate compilation unit 
-
-  * doc/dvisvgm.txt.in, src/SVGOutput.cpp, src/SVGOutput.h, 
-    tests/Makefile.am, tests/SVGOutputTest.cpp, tests/create-makefile: 
-  added width specifiers and exression evaluation to --output patterns 
-
-  * doc/dvisvgm.txt.in: 
-  minor additions and formatting changes of the manpage 
-
-  * doc/Makefile.am, doc/conf-dblatex-man.xsl, doc/conf-dblatex-pdf.xsl, 
-    doc/dvisvgm.sty, doc/dvisvgm.xpr, doc/tweak-dblatex-pdf.xsl: 
-  improved the layout of the pdf manpage 
-
-  * doc/Makefile.am, doc/db2html.xsl, doc/dvisvgm.css: 
-  create html manpage with a separate stylesheet matching the new website 
-  theme 
-
-2015-02-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * .travis.yml: 
-  added configuration file for Travis CI 
-
-  * .travis.yml: 
-  added dependency 'python-lxml' to Travis configuration 
-
-  * .travis.yml: 
-  added dependency 'libgtest-dev' to Travis configuration; ensure call of 
-  'make check' 
-
-  * .travis.yml: 
-  Travis conf: added missing call of 'configure' 
-
-  * .travis.yml: 
-  Travis conf: build gtest libraries since Ubuntu doesn't provide the 
-  binaries 
-
-2015-02-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/TpicSpecialHandler.cpp: 
-  use constant M_PI rather than computing PI locally 
-
-2015-02-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README, README.md: 
-  updated README and README.md 
-
-2015-01-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/ShadingPatch.h: 
-  removed redundant methods from class ShadingPatch 
-
-2015-01-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/TensorProductPatch.cpp, src/TriangularPatch.cpp: 
-  renamed static helper function clip() to snap() 
-
-2015-01-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Color.cpp: 
-  resolved ambiguous call of pow (patch by Peter Breitenlohner) 
-
-2015-01-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/VectorIterator.h: 
-  removed redundant method VectorIterator::distanceToLast() 
-
-2014-12-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * Makefile.am, README, README.md, configure.ac, doc/Makefile.am, 
-    doc/dvisvgm.txt.in, src/BasicDVIReader.cpp, src/BasicDVIReader.h, 
-    src/Bezier.cpp, src/Bezier.h, src/BgColorSpecialHandler.cpp, 
-    src/BgColorSpecialHandler.h, src/Bitmap.cpp, src/Bitmap.h, 
-    src/BoundingBox.cpp, src/BoundingBox.h, src/CMap.cpp, src/CMap.h, 
-    src/CMapManager.cpp, src/CMapManager.h, src/CMapReader.cpp, 
-    src/CMapReader.h, src/CRC32.cpp, src/CRC32.h, src/Calculator.cpp, 
-    src/Calculator.h, src/CharMapID.cpp, src/CharMapID.h, src/Character.h, 
-    src/CmdLineParserBase.cpp, src/CmdLineParserBase.h, src/Color.cpp, 
-    src/Color.h, src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, 
-    src/CommandLine.cpp, src/CommandLine.h, src/DLLoader.cpp, src/DLLoader.h, 
-    src/DVIActions.h, src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp, 
-    src/DVIToSVG.h, src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, 
-    src/DependencyGraph.h, src/Directory.cpp, src/Directory.h, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.h, 
-    src/EPSFile.cpp, src/EPSFile.h, src/EPSToSVG.cpp, src/EPSToSVG.h, 
-    src/EmSpecialHandler.cpp, src/EmSpecialHandler.h, src/EncFile.cpp, 
-    src/EncFile.h, src/FileFinder.cpp, src/FileFinder.h, src/FilePath.cpp, 
-    src/FilePath.h, src/FileSystem.cpp, src/FileSystem.h, src/Font.cpp, 
-    src/Font.h, src/FontCache.cpp, src/FontCache.h, src/FontEncoding.cpp, 
-    src/FontEncoding.h, src/FontEngine.cpp, src/FontEngine.h, 
-    src/FontManager.cpp, src/FontManager.h, src/FontMap.cpp, src/FontMap.h, 
-    src/FontMetrics.cpp, src/FontMetrics.h, src/GFGlyphTracer.cpp, 
-    src/GFGlyphTracer.h, src/GFReader.cpp, src/GFReader.h, src/GFTracer.cpp, 
-    src/GFTracer.h, src/Ghostscript.cpp, src/Ghostscript.h, src/Glyph.h, 
-    src/GlyphTracerMessages.h, src/GraphicPath.h, src/HtmlSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.h, src/InputBuffer.cpp, src/InputBuffer.h, 
-    src/InputReader.cpp, src/InputReader.h, src/JFM.cpp, src/JFM.h, 
-    src/Length.cpp, src/Length.h, src/Makefile.am, src/MapLine.cpp, 
-    src/MapLine.h, src/Matrix.cpp, src/Matrix.h, src/Message.cpp, 
-    src/Message.h, src/MessageException.h, src/MetafontWrapper.cpp, 
-    src/MetafontWrapper.h, src/MiKTeXCom.cpp, src/MiKTeXCom.h, 
-    src/NoPsSpecialHandler.cpp, src/NoPsSpecialHandler.h, 
-    src/NumericRanges.h, src/PSFilter.h, src/PSInterpreter.cpp, 
-    src/PSInterpreter.h, src/PSPattern.cpp, src/PSPattern.h, 
-    src/PSPreviewFilter.cpp, src/PSPreviewFilter.h, src/PageRanges.cpp, 
-    src/PageRanges.h, src/PageSize.cpp, src/PageSize.h, src/Pair.h, 
-    src/PathClipper.cpp, src/PathClipper.h, src/PdfSpecialHandler.cpp, 
-    src/PdfSpecialHandler.h, src/PreScanDVIReader.cpp, 
-    src/PreScanDVIReader.h, src/Process.cpp, src/Process.h, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, src/RangeMap.cpp, 
-    src/RangeMap.h, src/SVGOutputBase.h, src/SVGTree.cpp, src/SVGTree.h, 
-    src/ShadingPatch.cpp, src/ShadingPatch.h, src/SignalHandler.cpp, 
-    src/SignalHandler.h, src/SpecialActions.h, src/SpecialHandler.h, 
-    src/SpecialManager.cpp, src/SpecialManager.h, src/StreamReader.cpp, 
-    src/StreamReader.h, src/StreamWriter.cpp, src/StreamWriter.h, 
-    src/Subfont.cpp, src/Subfont.h, src/System.cpp, src/System.h, 
-    src/TFM.cpp, src/TFM.h, src/TensorProductPatch.cpp, 
-    src/TensorProductPatch.h, src/Terminal.cpp, src/Terminal.h, 
-    src/ToUnicodeMap.cpp, src/ToUnicodeMap.h, src/TpicSpecialHandler.cpp, 
-    src/TpicSpecialHandler.h, src/TriangularPatch.cpp, src/TriangularPatch.h, 
-    src/Unicode.cpp, src/Unicode.h, src/VFActions.h, src/VFReader.cpp, 
-    src/VFReader.h, src/VectorIterator.h, src/VectorStream.h, 
-    src/XMLDocument.cpp, src/XMLDocument.h, src/XMLNode.cpp, src/XMLNode.h, 
-    src/XMLString.cpp, src/XMLString.h, src/dvisvgm.cpp, src/macros.h, 
-    src/options.dtd, src/options.xml, src/psdefs.cpp, src/types.h, 
-    tests/BoundingBoxTest.cpp, tests/CMapReaderTest.cpp, tests/CMapTest.cpp, 
-    tests/CRC32Test.cpp, tests/CalculatorTest.cpp, 
-    tests/ColorSpecialTest.cpp, tests/ColorTest.cpp, 
-    tests/CommandLineTest.cpp, tests/DependencyGraphTest.cpp, 
-    tests/DirectoryTest.cpp, tests/DvisvgmSpecialTest.cpp, 
-    tests/FileFinderTest.cpp, tests/FilePathTest.cpp, 
-    tests/FileSystemTest.cpp, tests/FontManagerTest.cpp, 
-    tests/FontMapTest.cpp, tests/GFReaderTest.cpp, tests/GraphicPathTest.cpp, 
-    tests/LengthTest.cpp, tests/Makefile.am, tests/MapLineTest.cpp, 
-    tests/MatrixTest.cpp, tests/MessageExceptionTest.cpp, 
-    tests/PSInterpreterTest.cpp, tests/PageRagesTest.cpp, 
-    tests/PageSizeTest.cpp, tests/PairTest.cpp, tests/RangeMapTest.cpp, 
-    tests/SplittedCharInputBufferTest.cpp, tests/StreamInputBufferTest.cpp, 
-    tests/StreamReaderTest.cpp, tests/StreamWriterTest.cpp, 
-    tests/SubfontTest.cpp, tests/TensorProductPatchTest.cpp, 
-    tests/ToUnicodeMapTest.cpp, tests/TypesTest.cpp, 
-    tests/VectorStreamTest.cpp, tests/check-conv, tests/create-makefile, 
-    tests/normalize.xsl: 
-  updated year in copyright statements to 2015 
-
-2014-12-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, src/ShadingPatch.h, 
-    src/TensorProductPatch.cpp, src/TensorProductPatch.h, 
-    src/TriangularPatch.cpp, src/TriangularPatch.h, src/dvisvgm.cpp, 
-    src/options.xml: 
-  added command-line options --grad-overlap, --grad-segments, and 
-  --grad-simplify 
-
-  * src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/EPSToSVG.cpp, 
-    src/EPSToSVG.h, src/SpecialActions.h, src/SpecialManager.cpp, 
-    src/dvisvgm.cpp: 
-  show PS instruction counter when processing EPS files with option 
-  --progress 
-
-  * src/dvisvgm.cpp: 
-  clear line before printing the message about user interruption to avoid 
-  trailing text fragments 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.9 
-
-  * NEWS: 
-  updated NEWS 
-
-2014-12-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp: 
-  check validity of DVI file before trying to collect the BOPs 
-
-2014-12-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Makefile.am, src/TriangularPatch.cpp, src/TriangularPatch.h: 
-  added class to compute triangular shading patches 
-
-  * src/Makefile.am, src/PsSpecialHandler.cpp, src/ShadingPatch.cpp, 
-    src/ShadingPatch.h, src/TensorProductPatch.cpp, src/TensorProductPatch.h: 
-  extracted common interface class ShadingPatch from TensorProductPatch 
-
-  * src/Color.cpp, src/Color.h, src/Makefile.am, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/VectorIterator.h, src/psdefs.cpp: 
-  extended PS operator 'shfill' to support triangular patch meshes 
-
-2014-12-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp, src/PsSpecialHandler.h: 
-  added processing of the optional 'BBox' entry in a PS shading dictionary 
-
-2014-12-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CommandLine.cpp, src/CommandLine.h, src/dvisvgm.cpp, 
-    src/options.xml: 
-  disable option --clipjoin if PS support is disabled 
-
-  * src/Color.cpp, tests/ColorSpecialTest.cpp, tests/ColorTest.cpp: 
-  fixed CMYK to RGB approximation 
-
-2014-11-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/psdefs.cpp, tests/PSInterpreterTest.cpp: 
-  added evaluation of PS operator shfill (Coons and tensor product patches 
-  only) 
-
-2014-11-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * README.md: 
-  added list of features and a download button to README.md 
-
-2014-11-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * clipper/clipper.cpp, clipper/clipper.hpp: 
-  updated clipper library to version 6.2.1 
-
-2014-11-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Bezier.cpp, src/Bezier.h, src/BoundingBox.h, src/GraphicPath.h, 
-    src/Makefile.am, src/TensorProductPatch.cpp, src/TensorProductPatch.h, 
-    tests/Makefile.am, tests/TensorProductPatchTest.cpp: 
-  added code to compute tensor-product patches required for gradient fills 
-
-2014-11-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Matrix.cpp: 
-  use constant M_PI rather than defining PI locally 
-
-2014-10-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Color.cpp, src/Color.h, src/ColorSpecialHandler.cpp, 
-    src/PsSpecialHandler.cpp, tests/ColorTest.cpp: 
-  replaced float by double in class Color 
-
-  * src/Color.cpp, src/Color.h, src/ColorSpecialHandler.cpp, 
-    src/DVIReader.cpp, src/HtmlSpecialHandler.cpp, src/PsSpecialHandler.cpp, 
-    tests/ColorTest.cpp: 
-  renamed RGB setters/getters of class Color 
-
-  * src/Color.cpp, src/Color.h: 
-  replaced vectors with valarrays in class Color 
-
-  * src/Color.cpp, src/Color.h, tests/ColorTest.cpp: 
-  added deltaE and L*a*b* color space methods to class Color 
-
-2014-10-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * clipper/clipper.cpp, clipper/clipper.hpp: 
-  updated clipper library to version 6.2.0 
-
-  * src/GraphicPath.h, src/PathClipper.cpp, src/PathClipper.h, 
-    src/XMLNode.h: 
-  fixed a couple of doxygen comments; removed redundant 
-  PathClipperException 
-
-2014-10-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CommandLine.cpp: 
-  updated CommandLine.cpp with description of option --no-merge 
-
-  * src/Ghostscript.cpp: 
-  try to lookup the location of the GS DLL in the Windows registry 
-
-2014-10-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/options.xml: 
-  added info about option --no-merge to the manpage 
-
-2014-09-24  Khaled Hosny  <khaled.hosny at hindawi.com>
-
-  * src/Makefile.am: 
-  Add an opt2cpp Python script
-
-A very ugly script that should work as a 
-  drop in replacement for the
-opt2cpp XSLT. 
-
-2014-09-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp, src/PsSpecialHandler.h: 
-  ensure that colors set by a color special are always considered by the 
-  PS handler 
-
-2014-09-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BasicDVIReader.cpp, src/DVIReader.cpp, src/FontCache.cpp, 
-    src/GFReader.cpp, src/dvisvgm.cpp: 
-  replaced namespace 'ios_base' with 'ios' 
-
-2014-08-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  added missing whitespace boundaries in PS code 
-
-  * src/FontEngine.cpp, tests/PageRagesTest.cpp: 
-  removed unused static functions 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.8.1 
-
-  * NEWS: 
-  updated NEWS 
-
-2014-08-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVG.cpp, src/DependencyGraph.h, src/Makefile.am, 
-    src/SVGTree.cpp, src/SVGTree.h, src/XMLNode.cpp, src/XMLNode.h, 
-    tests/DependencyGraphTest.cpp, tests/Makefile.am: 
-  remove redundant clipPath elements from generated SVG files 
-
-2014-08-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PSPattern.cpp, src/XMLNode.cpp, src/XMLNode.h: 
-  renamed XMLElementNode::findDescendants() and made it constant 
-
-2014-08-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/Makefile.am, tests/create-makefile: 
-  link tests against FreeType library 
-
-  * README.md: 
-  minor fixed to README.md 
-
-2014-08-10  Khaled Hosny  <khaledhosny at eglug.org>
-
-  * configure.ac, src/Makefile.am: 
-  Don't override CXXFLAGS in configure script
-
-Breaks standard things 
-  like:
-
-     make CXXFLAGS="-g -O0 -pg" 
-
-  * configure.ac, src/Makefile.am: 
-  Don't override CPPFLAGS and LDFLAGS in configure
-
-For the same reasons 
-  as the previous commit 
-
-2014-08-07  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/dvisvgm.cpp: 
-  removed old code that moved cache files to new location 
-
-  * src/XMLDocument.cpp, src/XMLDocument.h, src/XMLNode.cpp, src/XMLNode.h: 
-  removed unused emit() methods from XML classes 
-
-2014-07-31  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/PsSpecialHandler.cpp, src/psdefs.cpp: 
-  prevent side-effects caused by bop/eop operators present in PS specials 
-
-2014-07-29  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * NEWS: 
-  updated NEWS 
-
-2014-07-28  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/GraphicPath.h, src/PSInterpreter.cpp, src/PSInterpreter.h, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, src/psdefs.cpp, 
-    tests/PSInterpreterTest.cpp: 
-  added evaluation of PS operator 'clippath' (copies clipping path into 
-  graphics path) 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.8 
-
-2014-07-26  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Font.cpp, src/GFGlyphTracer.cpp, src/GraphicPath.h, 
-    src/PsSpecialHandler.cpp: 
-  renamed GraphicPath::newpath() to GraphicPath::clear() 
-
-2014-07-24  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/InputReader.cpp, src/PSInterpreter.cpp: 
-  ensure that InputReader::compare() checks whole and not just partial 
-  words 
-
-2014-07-22  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVG.h, src/dvisvgm.cpp: 
-  prevent throwing a DVIException when option -l is present 
-
-  * Makefile.am, clipper/License.txt, clipper/Makefile.am, 
-    clipper/clipper.cpp, clipper/clipper.hpp, configure.ac, src/Makefile.am: 
-  added slightly modified sources of clipper library (computes boolops on 
-  polygons) 
-
-  * src/GraphicPath.h: 
-  added field to store the winding rule to class GraphicPath 
-
-  * README, README.md, src/Bezier.cpp, src/Bezier.h, src/GraphicPath.h, 
-    src/Makefile.am, src/PathClipper.cpp, src/PathClipper.h, src/dvisvgm.cpp: 
-  added class PathClipper to compute intersections of closed curved 
-  graphics paths 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, src/dvisvgm.cpp, 
-    src/options.xml: 
-  added option --clippath to compute the intersection of clipping paths 
-
-2014-07-20  Khaled Hosny  <khaledhosny at eglug.org>
-
-  * src/FontEngine.cpp: 
-  Free existing FT_Face before creating a new one
-
-FontEngine was never 
-  destroying the FT_Face's it creates, except the
-very last one that was 
-  destroyed by the destructor. For some reason,
-this was causing 
-  FT_New_Face() to fail on Windows after processing the
-first hundred or so 
-  pages of DVI files. 
-
-2014-07-18  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/GraphicPath.h, src/PsSpecialHandler.cpp, src/SVGTree.cpp, 
-    src/SVGTree.h, src/dvisvgm.cpp, src/options.xml, 
-    tests/GraphicPathTest.cpp: 
-  added option to create relative rather than absolute path commands 
-
-  * src/TpicSpecialHandler.cpp: 
-  TPIC handler: use class GraphicPath to create SVG path commands 
-
-2014-07-07  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVGActions.h, src/Doxyfile, src/HtmlSpecialHandler.h, 
-    src/RangeMap.cpp, src/SpecialManager.cpp, src/ToUnicodeMap.cpp: 
-  fixed a couple of broken doxygen comments 
-
-2014-06-25  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Ghostscript.cpp: 
-  get proper name of Ghostscript library when building for Cygwin 
-
-2014-06-23  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * README.md: 
-  added markdown version of README 
-
-2014-06-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  suppress output of PS operator ':show' to prevent the creation of 
-  additional graphic elements 
-
-2014-06-17  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/SpecialManager.cpp, src/SpecialManager.h: 
-  removed redundant method SpecialManager::leavePSHeaderSection() 
-
-  * doc/dvisvgm.txt.in, src/DVIToSVGActions.cpp, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.h, 
-    tests/DvisvgmSpecialTest.cpp, tests/Makefile.am: 
-  added/improved dvisvgm::raw* specials 
-
-  * src/InputReader.cpp: 
-  added missing include 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.7 
-
-  * NEWS: 
-  updated NEWS 
-
-2014-06-12  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/XMLNode.cpp, src/XMLNode.h: 
-  added clear() to XMLNode classes; added XMLTextNode::getText() 
-
-2014-06-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/InputReader.cpp, src/InputReader.h: 
-  added InputReader::getLine() 
-
-  * src/DVIToSVG.cpp, src/SpecialHandler.h, src/SpecialManager.cpp, 
-    src/SpecialManager.h: 
-  added listener to allow SpecialHandlers being notified when 
-  pre-processing has finished 
-
-2014-06-10  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/SpecialActions.h, tests/ColorSpecialTest.cpp: 
-  renamed class SpecialEmptyActions to EmptySpecialActions 
-
-2014-06-09  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIReader.cpp, src/Ghostscript.cpp: 
-  removed unused variable; call Ghostscript::exit() with explicitely given 
-  object 
-
-  * src/DVIToSVG.h, src/SpecialManager.h: 
-  removed redundant definition of assignment operators 
-
-2014-06-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BasicDVIReader.cpp, src/BasicDVIReader.h, src/DVIReader.cpp, 
-    src/DVIReader.h, src/Makefile.am: 
-  moved basic funtionality of DVIReader to base class BasicDVIReader 
-
-  * src/BasicDVIReader.h, src/DVIReader.cpp, src/DVIToSVG.cpp, 
-    src/DVIToSVG.h, src/dvisvgm.cpp: 
-  moved call of executePreamble() and executePostamble() from DVIToSVG to 
-  DVIReader 
-
-  * src/DVIActions.h, src/DVIReader.cpp, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/Makefile.am, 
-    src/PreScanDVIReader.cpp, src/PreScanDVIReader.h, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, src/SpecialHandler.h, 
-    src/SpecialManager.cpp, src/SpecialManager.h, src/StreamReader.cpp, 
-    src/StreamReader.h: 
-  pre-process DVI file to collect required data not present in the page 
-  ranges to be converted 
-
-  * src/DVIToSVG.cpp, src/DVIToSVG.h, src/DVIToSVGActions.cpp, 
-    src/SpecialManager.cpp, src/SpecialManager.h, src/dvisvgm.cpp: 
-  made class SpecialManager a singleton 
-
-  * src/BasicDVIReader.h, src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h: 
-  allow to replace the DVI reader assigned to an instance of 
-  DVIToSVGActions 
-
-  * doc/dvisvgm.txt.in, src/BasicDVIReader.h, src/DVIToSVG.cpp, 
-    src/DVIToSVG.h, src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, 
-    src/EPSToSVG.cpp, src/EPSToSVG.h, src/HtmlSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.h, src/PreScanDVIReader.cpp, 
-    src/PreScanDVIReader.h, src/SpecialActions.h: 
-  process hyperref anchors and links across pages 
-
-  * src/BasicDVIReader.cpp, src/BasicDVIReader.h, src/Bitmap.h, 
-    src/BoundingBox.h, src/CMap.h, src/CMapManager.cpp, src/CMapManager.h, 
-    src/CMapReader.h, src/CRC32.h, src/Calculator.cpp, src/Calculator.h, 
-    src/CmdLineParserBase.h, src/Color.cpp, src/ColorSpecialHandler.cpp, 
-    src/ColorSpecialHandler.h, src/CommandLine.cpp, src/CommandLine.h, 
-    src/DLLoader.h, src/DVIReader.cpp, src/DVIToSVG.h, src/DVIToSVGActions.h, 
-    src/Directory.h, src/DvisvgmSpecialHandler.h, src/EmSpecialHandler.cpp, 
-    src/EmSpecialHandler.h, src/EncFile.h, src/FileFinder.h, 
-    src/FileSystem.cpp, src/Font.cpp, src/Font.h, src/FontCache.h, 
-    src/FontEncoding.cpp, src/FontEngine.cpp, src/FontEngine.h, 
-    src/FontManager.cpp, src/FontManager.h, src/FontMap.cpp, src/FontMap.h, 
-    src/GFGlyphTracer.cpp, src/GFGlyphTracer.h, src/GFReader.cpp, 
-    src/GFReader.h, src/GFTracer.h, src/Ghostscript.cpp, src/Ghostscript.h, 
-    src/GraphicPath.h, src/HtmlSpecialHandler.h, src/InputBuffer.cpp, 
-    src/InputBuffer.h, src/JFM.h, src/Length.cpp, src/Length.h, 
-    src/MapLine.cpp, src/MapLine.h, src/Matrix.cpp, src/Matrix.h, 
-    src/MessageException.h, src/MetafontWrapper.cpp, src/MetafontWrapper.h, 
-    src/NoPsSpecialHandler.h, src/NumericRanges.h, src/PSInterpreter.h, 
-    src/PSPattern.h, src/PSPreviewFilter.h, src/PageRanges.h, src/PageSize.h, 
-    src/Pair.h, src/PdfSpecialHandler.cpp, src/PdfSpecialHandler.h, 
-    src/Process.h, src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, 
-    src/SVGTree.h, src/SignalHandler.h, src/SpecialActions.h, 
-    src/SpecialManager.h, src/StreamWriter.h, src/Subfont.cpp, src/Subfont.h, 
-    src/TFM.h, src/ToUnicodeMap.h, src/TpicSpecialHandler.cpp, 
-    src/TpicSpecialHandler.h, src/VFReader.cpp, src/VectorStream.h, 
-    src/XMLDocument.h, src/XMLNode.h, src/XMLString.cpp, src/XMLString.h, 
-    src/dvisvgm.cpp, src/types.h: 
-  replaced leading spaces by tabs; removed trailing whitespace 
-
-2014-06-03  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIReader.cpp, src/DVIReader.h: 
-  removed redundant variable DVIReader::_prevBop 
-
-  * src/PsSpecialHandler.cpp: 
-  fixed incorrect extent values shown when applying a preview bbox 
-  (bp->pt) 
-
-2014-06-01  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/EPSFile.cpp, src/GFReader.cpp: 
-  replaced relative variant of seekg() by absolute one where possible 
-
-  * src/DVIReader.cpp, src/DVIReader.h: 
-  removed redundant code from DVIReader::evalCommand() 
-
-2014-05-31  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIReader.cpp, src/VFReader.cpp: 
-  few code adjustments 
-
-  * src/DVIReader.cpp, src/StreamReader.cpp, src/StreamReader.h, 
-    src/VFReader.cpp: 
-  removed StreamReader::in() 
-
-  * src/DVIReader.cpp, src/StreamReader.h, src/VFReader.cpp: 
-  renamed some methods of class StreamReader 
-
-2014-05-29  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIReader.cpp, src/DVIReader.h, src/StreamReader.h: 
-  collect all DVI BOP offsets to reach them quickly 
-
-  * src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp, src/DVIToSVG.h: 
-  removed DVIReader::_totalPages; use number of BOP offsets instead 
-
-  * src/DVIReader.cpp, src/DVIReader.h, src/dvisvgm.cpp: 
-  simplified computation of progress ratio 
-
-  * src/DVIReader.cpp, src/DVIReader.h: 
-  simplified DVIReader::executePage; removed DVIReader::executePages 
-
-2014-05-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Font.cpp, src/Makefile.am, src/Unicode.cpp, src/Unicode.h, 
-    src/XMLString.cpp: 
-  moved unicode-related funtions to separate class 
-
-  * src/CharMap.cpp, src/CharMap.h, src/Font.cpp, src/FontEngine.cpp, 
-    src/FontEngine.h: 
-  removed redundant method CharMap::invert() 
-
-  * src/CMap.cpp, src/CMap.h, src/Makefile.am, src/RangeMap.cpp, 
-    src/RangeMap.h, tests/Makefile.am, tests/RangeMapTest.cpp: 
-  extracted class RangeMap previously implemented as part of SegmentedCMap 
-
-  * src/RangeMap.cpp: 
-  fixed right joins of touching ranges in a RangeMap 
-
-  * src/CharMap.cpp, src/CharMap.h, src/Font.cpp, src/Font.h, 
-    src/FontEngine.cpp, src/FontEngine.h, src/Makefile.am: 
-  replaced class CharMap with more generic class RangeMap 
-
-  * src/DVIToSVG.cpp, src/Makefile.am, src/NumericRanges.h, 
-    src/PageRanges.cpp, src/PageRanges.h, tests/PageRagesTest.cpp: 
-  extracted functionality of class PageRanges to separate class 
-  NumericRanges 
-
-  * src/Makefile.am, src/RangeMap.h, src/ToUnicodeMap.cpp, 
-    src/ToUnicodeMap.h, tests/Makefile.am, tests/ToUnicodeMapTest.cpp: 
-  added class ToUnicodeMap to handle mappings from character indexes to 
-  unicode points 
-
-  * src/Makefile.am: 
-  Makefile: put source files on separate lines 
-
-2014-04-30  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/CharMapID.cpp, src/CharMapID.h, src/DVIReader.cpp, src/Font.cpp, 
-    src/Font.h, src/FontEngine.cpp, src/FontEngine.h: 
-  try to add unicode mappings missing in a font's cmap table 
-
-2014-04-29  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/SVGTree.cpp: 
-  don't add unnecessary element 'missing-glyph' to SVG files 
-
-2014-04-24  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/options.xml: 
-  renamed argument of option --linkmark from 'type' to 'style' 
-
-2014-04-23  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/System.h: 
-  removed redundant semicolon 
-
-2014-04-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.6 
-
-  * NEWS: 
-  updated NEWS 
-
-2014-04-21  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * doc/dvisvgm.txt.in, src/DVIToSVG.cpp, src/EPSToSVG.cpp: 
-  removed date and machine triplet from generated SVG files 
-
-2014-04-18  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * doc/dvisvgm.txt.in, src/HtmlSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.h: 
-  added optional selection of line/box colors to option --linkmark 
-
-2014-04-17  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/CommandLine.h, src/DVIToSVG.cpp, src/EPSToSVG.cpp: 
-  don't link GS messages unnecessarily if HAVE_LIBGS is defined 
-
-  * src/DVIReader.h, src/DVIToSVGActions.h, src/HtmlSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.h, src/SpecialActions.h: 
-  only split hyperlink boxes on line breaks 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/options.xml: 
-  changed default argument of option --linkmark to 'box' 
-
-2014-04-16  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DLLoader.cpp: 
-  prevent calling dlopen() if the length of the string argument is 0 
-
-  * doc/dvisvgm.txt.in, src/Ghostscript.cpp: 
-  if libgs is loaded during runtime, look for libgs.so.X instead of 
-  libgs.so 
-
-  * src/Ghostscript.cpp, src/dvisvgm.cpp: 
-  moved lookup of MiKTeX's GS DLL to get_libgs() 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/SVGTree.cpp, src/SVGTree.h, src/dvisvgm.cpp, src/options.xml: 
-  added command-line option --zoom 
-
-2014-04-11  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/CMap.cpp, src/CmdLineParserBase.cpp, src/ColorSpecialHandler.cpp, 
-    src/DVIReader.cpp, src/DVIToSVGActions.cpp, src/Doxyfile, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.h, 
-    src/EPSFile.cpp, src/EmSpecialHandler.cpp, src/FileFinder.cpp, 
-    src/FileSystem.cpp, src/Font.cpp, src/FontCache.cpp, src/FontEncoding.h, 
-    src/FontEngine.cpp, src/FontMap.cpp, src/GraphicPath.h, 
-    src/PSInterpreter.cpp, src/PageRanges.cpp, src/PsSpecialHandler.cpp, 
-    src/SVGTree.cpp, src/SVGTree.h, src/SpecialManager.cpp, src/Subfont.cpp, 
-    src/TFM.cpp, src/TpicSpecialHandler.cpp, src/XMLDocument.cpp, 
-    src/XMLNode.cpp, src/dvisvgm.cpp: 
-  fixed issues in the doxygen documentation 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.5.3 
-
-  * NEWS: 
-  updated NEWS 
-
-2014-04-09  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVGActions.cpp: 
-  equalize implementations of moveToX and moveToY 
-
-  * src/BoundingBox.h, src/DVIActions.cpp, src/DVIActions.h, 
-    src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, 
-    src/DvisvgmSpecialHandler.cpp, src/EPSToSVG.cpp, 
-    src/EmSpecialHandler.cpp, src/Font.h, src/FontManager.cpp, 
-    src/GFGlyphTracer.cpp, src/GFReader.cpp, src/GFTracer.cpp, 
-    src/GFTracer.h, src/GraphicPath.h, src/HtmlSpecialHandler.h, 
-    src/Makefile.am, src/PSPattern.cpp, src/PSPreviewFilter.cpp, 
-    src/PSPreviewFilter.h, src/PageSize.cpp, src/PageSize.h, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, src/SVGTree.cpp, 
-    src/SpecialHandler.h, src/SpecialManager.cpp, src/SpecialManager.h, 
-    src/TFM.cpp, src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.h, 
-    src/VFReader.cpp: 
-  switched internal computations from TeX points (pt) to PS points (bp) 
-
-2014-02-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp, src/DVIReader.h: 
-  ensure updating the SVG cursor position when executing DVI command 
-  set_rule 
-
-2014-01-13  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Ghostscript.cpp: 
-  check if library given by --libgs is actually a GS library 
-
-2014-01-10  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * NEWS: 
-  updated NEWS 
-
-2014-01-03  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FileFinder.cpp: 
-  catch exceptions thrown by MiKTeXCom object 
-
-  * src/Directory.cpp: 
-  initialize Directory member variables (Win only) 
-
-  * src/FileFinder.cpp: 
-  return 'unknown' if MiKTeX version can't be retrieved 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.5.2 
-
-2014-01-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * Makefile.am, README, configure.ac, doc/Makefile.am, doc/dvisvgm.txt.in, 
-    src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.h, 
-    src/Bitmap.cpp, src/Bitmap.h, src/BoundingBox.cpp, src/BoundingBox.h, 
-    src/CMap.cpp, src/CMap.h, src/CMapManager.cpp, src/CMapManager.h, 
-    src/CMapReader.cpp, src/CMapReader.h, src/CRC32.cpp, src/CRC32.h, 
-    src/Calculator.cpp, src/Calculator.h, src/CharMap.cpp, src/CharMap.h, 
-    src/CharMapID.cpp, src/CharMapID.h, src/Character.h, 
-    src/CmdLineParserBase.cpp, src/CmdLineParserBase.h, src/Color.cpp, 
-    src/Color.h, src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, 
-    src/CommandLine.cpp, src/CommandLine.h, src/DLLoader.cpp, src/DLLoader.h, 
-    src/DVIActions.cpp, src/DVIActions.h, src/DVIReader.cpp, src/DVIReader.h, 
-    src/DVIToSVG.cpp, src/DVIToSVG.h, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/Directory.cpp, src/Directory.h, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.h, 
-    src/EPSFile.cpp, src/EPSFile.h, src/EPSToSVG.cpp, src/EPSToSVG.h, 
-    src/EmSpecialHandler.cpp, src/EmSpecialHandler.h, src/EncFile.cpp, 
-    src/EncFile.h, src/FileFinder.cpp, src/FileFinder.h, src/FilePath.cpp, 
-    src/FilePath.h, src/FileSystem.cpp, src/FileSystem.h, src/Font.cpp, 
-    src/Font.h, src/FontCache.cpp, src/FontCache.h, src/FontEncoding.cpp, 
-    src/FontEncoding.h, src/FontEngine.cpp, src/FontEngine.h, 
-    src/FontManager.cpp, src/FontManager.h, src/FontMap.cpp, src/FontMap.h, 
-    src/FontMetrics.cpp, src/FontMetrics.h, src/GFGlyphTracer.cpp, 
-    src/GFGlyphTracer.h, src/GFReader.cpp, src/GFReader.h, src/GFTracer.cpp, 
-    src/GFTracer.h, src/Ghostscript.cpp, src/Ghostscript.h, src/Glyph.h, 
-    src/GlyphTracerMessages.h, src/GraphicPath.h, src/HtmlSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.h, src/InputBuffer.cpp, src/InputBuffer.h, 
-    src/InputReader.cpp, src/InputReader.h, src/JFM.cpp, src/JFM.h, 
-    src/Length.cpp, src/Length.h, src/Makefile.am, src/MapLine.cpp, 
-    src/MapLine.h, src/Matrix.cpp, src/Matrix.h, src/Message.cpp, 
-    src/Message.h, src/MessageException.h, src/MetafontWrapper.cpp, 
-    src/MetafontWrapper.h, src/MiKTeXCom.cpp, src/MiKTeXCom.h, 
-    src/NoPsSpecialHandler.cpp, src/NoPsSpecialHandler.h, src/PSFilter.h, 
-    src/PSInterpreter.cpp, src/PSInterpreter.h, src/PSPattern.cpp, 
-    src/PSPattern.h, src/PSPreviewFilter.cpp, src/PSPreviewFilter.h, 
-    src/PageRanges.cpp, src/PageRanges.h, src/PageSize.cpp, src/PageSize.h, 
-    src/Pair.h, src/PdfSpecialHandler.cpp, src/PdfSpecialHandler.h, 
-    src/Process.cpp, src/Process.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/SVGOutputBase.h, src/SVGTree.cpp, 
-    src/SVGTree.h, src/SignalHandler.cpp, src/SignalHandler.h, 
-    src/SpecialActions.h, src/SpecialHandler.h, src/SpecialManager.cpp, 
-    src/SpecialManager.h, src/StreamReader.cpp, src/StreamReader.h, 
-    src/StreamWriter.cpp, src/StreamWriter.h, src/Subfont.cpp, src/Subfont.h, 
-    src/System.cpp, src/System.h, src/TFM.cpp, src/TFM.h, src/Terminal.cpp, 
-    src/Terminal.h, src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.h, 
-    src/VFActions.h, src/VFReader.cpp, src/VFReader.h, src/VectorStream.h, 
-    src/XMLDocument.cpp, src/XMLDocument.h, src/XMLNode.cpp, src/XMLNode.h, 
-    src/XMLString.cpp, src/XMLString.h, src/dvisvgm.cpp, src/macros.h, 
-    src/options.dtd, src/options.xml, src/psdefs.cpp, src/types.h, 
-    tests/BoundingBoxTest.cpp, tests/CMapReaderTest.cpp, tests/CMapTest.cpp, 
-    tests/CRC32Test.cpp, tests/CalculatorTest.cpp, 
-    tests/ColorSpecialTest.cpp, tests/ColorTest.cpp, 
-    tests/CommandLineTest.cpp, tests/DirectoryTest.cpp, 
-    tests/FileFinderTest.cpp, tests/FilePathTest.cpp, 
-    tests/FileSystemTest.cpp, tests/FontManagerTest.cpp, 
-    tests/FontMapTest.cpp, tests/GFReaderTest.cpp, tests/GraphicPathTest.cpp, 
-    tests/LengthTest.cpp, tests/Makefile.am, tests/MapLineTest.cpp, 
-    tests/MatrixTest.cpp, tests/MessageExceptionTest.cpp, 
-    tests/PSInterpreterTest.cpp, tests/PageRagesTest.cpp, 
-    tests/PageSizeTest.cpp, tests/PairTest.cpp, 
-    tests/SplittedCharInputBufferTest.cpp, tests/StreamInputBufferTest.cpp, 
-    tests/StreamReaderTest.cpp, tests/StreamWriterTest.cpp, 
-    tests/SubfontTest.cpp, tests/TypesTest.cpp, tests/VectorStreamTest.cpp, 
-    tests/check-conv, tests/create-makefile, tests/normalize.xsl: 
-  updated year in copyright statements to 2014 
-
-2014-01-01  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/MiKTeXCom.cpp: 
-  prevent releasing MiKTeX object if its initialization failed 
-
-2013-12-29  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Font.cpp: 
-  check if units per EM are not 0 to prevent divisions by zero 
-
-  * src/Directory.cpp, src/Directory.h, src/FontMap.cpp, 
-    tests/DirectoryTest.cpp: 
-  changed directory entry types from char to enums 
-
-  * src/FontCache.cpp: 
-  catch potential StreamReaderException 
-
-2013-12-18  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/BoundingBox.cpp: 
-  explicitely initialize BoundingBox fields 
-
-  * src/FontCache.cpp: 
-  avoid accessing strings constructed from temporaries 
-
-  * src/Matrix.cpp: 
-  ensure return value of istream::get() is assigned to int vars 
-
-  * src/DVIReader.cpp: 
-  check if denominator of DVI unit is non-zero 
-
-  * src/DvisvgmSpecialHandler.cpp, src/FontCache.cpp: 
-  ensure null pointer checks before dereferencing 
-
-  * src/FontCache.cpp, src/SpecialManager.cpp: 
-  restore stream format flags 
-
-  * src/DVIReader.cpp, src/Directory.cpp, src/GFReader.cpp: 
-  added missing initializations of member variables 
-
-2013-12-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BgColorSpecialHandler.h, src/Bitmap.h, src/BoundingBox.h, 
-    src/CMap.h, src/CMapManager.h, src/CMapReader.h, src/Calculator.h, 
-    src/CharMap.h, src/CharMapID.h, src/Character.h, src/CmdLineParserBase.h, 
-    src/Color.h, src/ColorSpecialHandler.h, src/CommandLine.h, 
-    src/DLLoader.h, src/DVIActions.h, src/DVIReader.h, src/DVIToSVG.h, 
-    src/DVIToSVGActions.h, src/Directory.h, src/DvisvgmSpecialHandler.h, 
-    src/EPSFile.h, src/EPSToSVG.h, src/EmSpecialHandler.h, src/EncFile.h, 
-    src/FileFinder.h, src/FilePath.h, src/FileSystem.h, src/Font.h, 
-    src/FontCache.h, src/FontEncoding.h, src/FontEngine.h, src/FontManager.h, 
-    src/FontMap.h, src/FontMetrics.h, src/GFGlyphTracer.h, src/GFReader.h, 
-    src/GFTracer.h, src/Ghostscript.h, src/Glyph.h, 
-    src/GlyphTracerMessages.h, src/GraphicPath.h, src/HtmlSpecialHandler.h, 
-    src/InputBuffer.h, src/InputReader.h, src/JFM.h, src/Length.h, 
-    src/MapLine.h, src/Matrix.h, src/Message.h, src/MessageException.h, 
-    src/MetafontWrapper.h, src/MiKTeXCom.h, src/NoPsSpecialHandler.h, 
-    src/PSFilter.h, src/PSInterpreter.h, src/PSPattern.h, 
-    src/PSPreviewFilter.h, src/PageRanges.h, src/PageSize.h, src/Pair.h, 
-    src/PdfSpecialHandler.h, src/Process.h, src/PsSpecialHandler.h, 
-    src/SVGOutputBase.h, src/SVGTree.h, src/SignalHandler.h, 
-    src/SpecialActions.h, src/SpecialHandler.h, src/SpecialManager.h, 
-    src/StreamReader.h, src/StreamWriter.h, src/Subfont.h, src/System.h, 
-    src/TFM.h, src/Terminal.h, src/TpicSpecialHandler.h, src/VFActions.h, 
-    src/VFReader.h, src/VectorStream.h, src/XMLDocument.h, src/XMLNode.h, 
-    src/XMLString.h, src/macros.h, src/types.h: 
-  prefixed include guards with DVISVGM_ to prevent ambiguities with 
-  external headers 
-
-2013-11-16  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIReader.cpp, src/SVGTree.cpp, src/SVGTree.h: 
-  don't let global font colors interfere with color specials 
-
-2013-10-29  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * NEWS: 
-  updated NEWS 
-
-2013-10-28  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Bitmap.cpp, src/Color.cpp, src/JFM.cpp, src/Matrix.cpp: 
-  added missing #includes of header file <algorithm> 
-
-  * src/FileSystem.cpp, src/MetafontWrapper.cpp: 
-  added explicit casts from ifstream to bool 
-
-  * src/DVIReader.cpp: 
-  temporarily reactivated processing of font definitions located in the 
-  postamble 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.5.1 
-
-2013-10-27  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVG.cpp: 
-  suppress output of logical page number if it equals physical page number 
-
-2013-10-16  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/PSPreviewFilter.cpp, src/PsSpecialHandler.cpp: 
-  ensure proper evaluation of tightpage data if multiple pages are 
-  processed 
-
-2013-10-12  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/InputBuffer.h: 
-  don't check unsigned variables for negative values 
-
-  * src/Color.h, src/PsSpecialHandler.cpp, src/PsSpecialHandler.h: 
-  added 'const' to read-only methods 
-
-2013-09-21  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FontCache.cpp, src/FontCache.h: 
-  renamed FontCache::VERSION to FontCache::FORMAT_VERSION 
-
-  * src/DVIToSVG.cpp, src/Ghostscript.h, src/dvisvgm.cpp: 
-  added missing guards and functions to prevent compilation errors if 
-  DISABLE_GS is set 
-
-  * src/DVIToSVG.cpp: 
-  changed warning message that appears if PS support has been disabled 
-  permanently 
-
-2013-09-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BgColorSpecialHandler.cpp, src/Bitmap.cpp, src/BoundingBox.cpp, 
-    src/CMap.cpp, src/CMapManager.cpp, src/CMapReader.cpp, src/CRC32.cpp, 
-    src/Calculator.cpp, src/CharMap.cpp, src/CmdLineParserBase.cpp, 
-    src/Color.cpp, src/ColorSpecialHandler.cpp, src/CommandLine.cpp, 
-    src/CommandLine.h, src/DLLoader.cpp, src/DVIActions.cpp, 
-    src/DVIReader.cpp, src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, 
-    src/Directory.cpp, src/DvisvgmSpecialHandler.cpp, src/EPSFile.cpp, 
-    src/EPSToSVG.cpp, src/EmSpecialHandler.cpp, src/EncFile.cpp, 
-    src/FileFinder.cpp, src/FilePath.cpp, src/FileSystem.cpp, src/Font.cpp, 
-    src/FontCache.cpp, src/FontEncoding.cpp, src/FontEngine.cpp, 
-    src/FontManager.cpp, src/FontMap.cpp, src/FontMetrics.cpp, 
-    src/GFGlyphTracer.cpp, src/GFReader.cpp, src/GFTracer.cpp, 
-    src/Ghostscript.cpp, src/Ghostscript.h, src/HtmlSpecialHandler.cpp, 
-    src/InputBuffer.cpp, src/InputReader.cpp, src/JFM.cpp, src/Length.cpp, 
-    src/MapLine.cpp, src/Matrix.cpp, src/Message.cpp, 
-    src/MetafontWrapper.cpp, src/MiKTeXCom.cpp, src/NoPsSpecialHandler.cpp, 
-    src/PSInterpreter.cpp, src/PSPattern.cpp, src/PSPreviewFilter.cpp, 
-    src/PageRanges.cpp, src/PageSize.cpp, src/PdfSpecialHandler.cpp, 
-    src/Process.cpp, src/PsSpecialHandler.cpp, src/SVGTree.cpp, 
-    src/SignalHandler.cpp, src/SpecialManager.cpp, src/StreamReader.cpp, 
-    src/StreamWriter.cpp, src/Subfont.cpp, src/System.cpp, src/TFM.cpp, 
-    src/Terminal.cpp, src/TpicSpecialHandler.cpp, src/VFReader.cpp, 
-    src/XMLDocument.cpp, src/XMLNode.cpp, src/XMLString.cpp, src/dvisvgm.cpp: 
-  include config.h at the top of every translation unit 
-
-  * src/DLLoader.h, src/Directory.h: 
-  moved #define NOMINMAX to Windows config.h 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.5 
-
-  * NEWS: 
-  updated NEWS 
-
-2013-08-30  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FontMetrics.h, src/JFM.cpp, src/JFM.h, src/TFM.h: 
-  added retrieval of vertical mode flag to class FontMetrics 
-
-  * src/DVIActions.h, src/DVIReader.cpp, src/DVIReader.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/Font.cpp, src/Font.h, 
-    src/FontEngine.cpp, src/FontEngine.h, src/FontMetrics.h, src/JFM.h, 
-    src/SVGTree.cpp, src/SVGTree.h, src/TFM.h, src/dvisvgm.cpp: 
-  added support for DVI format 3 (pTeX, vertical mode) 
-
-  * src/DVIReader.cpp, src/DVIReader.h, src/Font.cpp, src/Font.h, 
-    src/FontEngine.cpp, src/FontEngine.h, src/FontManager.cpp, 
-    src/FontManager.h, src/FontStyle.h, src/SVGTree.cpp, src/dvisvgm.cpp: 
-  added support for XDV (DVI format 5) files 
-
-  * src/Font.cpp, src/Font.h, src/XMLString.cpp: 
-  replaced entity references by corresponding UTF-8 characters; use 
-  correct unicode points rather than DVI charcodes 
-
-  * doc/dvisvgm.txt.in: 
-  updated manpage 
-
-2013-08-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CharMap.cpp, src/CharMap.h, src/Font.cpp, src/Font.h, 
-    src/FontEncoding.h, src/FontEngine.cpp, src/FontEngine.h, 
-    src/FontManager.cpp, src/Makefile.am: 
-  replaced local std::map tables used in Font classes with new class 
-  CharMap 
-
-2013-08-23  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/SVGTree.cpp: 
-  appended px unit to font-size attributes in style section 
-
-2013-08-22  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/XMLString.cpp: 
-  replace very small floating point numbers by 0 
-
-2013-08-20  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FileFinder.cpp: 
-  suppress error messages from makeFOO tools 
-
-2013-08-13  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/CMap.cpp, src/CMap.h, src/CMapManager.cpp, src/CMapManager.h, 
-    src/EncFile.h, src/Font.cpp, src/Font.h, src/FontEncoding.cpp, 
-    src/FontEncoding.h, src/FontManager.cpp, src/FontMap.cpp, src/FontMap.h: 
-  derive EncodingPair from FontEncoding 
-
-  * src/Font.cpp, src/Font.h, src/FontEncoding.cpp, src/FontEncoding.h, 
-    src/FontManager.cpp, src/FontMap.cpp, src/FontMap.h: 
-  moved assignment of base font map to Font class 
-
-2013-08-11  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac, src/FileFinder.cpp: 
-  check if the kpathsea library is C++-safe (patch by Peter Breitenlohner) 
-
-  * src/dvisvgm.cpp: 
-  fix number of dashes printed by -V1 
-
-2013-08-08  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Matrix.cpp, src/Matrix.h: 
-  renamed Matrix skewing methods 
-
-2013-08-04  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Font.cpp, src/Font.h, src/FontEngine.cpp, src/FontManager.cpp, 
-    src/FontMap.cpp, src/FontMap.h, src/FontStyle.h, src/Makefile.am: 
-  store pointers to font map and encoding in Font objects to speed up 
-  looking them up 
-
-  * src/Ghostscript.h, src/PSPreviewFilter.cpp, src/PsSpecialHandler.cpp: 
-  added missing variable initializations 
-
-2013-08-03  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/CMapManager.cpp, src/CMapManager.h, src/FontManager.cpp: 
-  avoid const_cast in CMapManager 
-
-2013-08-02  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIActions.h, src/DVIReader.cpp, src/DVIToSVG.cpp: 
-  disable font processing while scanning PS header specials 
-
-  * src/CMap.h, src/CMapManager.cpp: 
-  properly handle 'unicode' encoding entries set in font map 
-
-2013-08-01  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/XMLDocument.cpp, src/XMLString.cpp: 
-  changed encoding of SVG files from ISO-8859-1 to UTF-8 
-
-  * src/DVIToSVG.cpp, src/Makefile.am, src/SVGTree.cpp, 
-    src/XMLDocTypeNode.h: 
-  removed DOCTYPE declaration from generated files as suggested by the SVG 
-  specification 
-
-  * src/DVIToSVG.cpp: 
-  removed redundant #include statements 
-
-  * src/DVIToSVG.cpp, src/DVIToSVG.h, src/DVIToSVGActions.h, src/EPSToSVG.h, 
-    src/Matrix.cpp, src/Matrix.h, src/PsSpecialHandler.cpp, 
-    src/SpecialActions.h, src/dvisvgm.cpp: 
-  apply page transformations to width, height, and depth of preview bbox 
-
-  * NEWS: 
-  updated NEWS 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.4 
-
-2013-07-31  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CMap.cpp, src/CMap.h, src/CMapManager.cpp, src/CMapManager.h, 
-    src/CMapReader.cpp, src/CMapReader.h, src/FontManager.cpp, 
-    src/Makefile.am, tests/CMapTest.cpp, tests/Makefile.am: 
-  added classes to handle CMap files 
-
-  * src/CMap.cpp, src/CMap.h, src/CMapManager.h, src/EncFile.cpp, 
-    src/EncFile.h, src/FileFinder.cpp, src/Font.cpp, src/Font.h, 
-    src/FontEncoding.cpp, src/FontEncoding.h, src/FontEngine.cpp, 
-    src/FontEngine.h, src/FontManager.cpp, src/Makefile.am, 
-    tests/CMapTest.cpp: 
-  derive .enc encoding vectors and CMaps from common base class 
-  FontEncoding 
-
-  * src/CMap.cpp, src/CMap.h, src/Character.h, src/EncFile.h, src/Font.cpp, 
-    src/Font.h, src/FontEncoding.h, src/FontEngine.cpp, src/FontEngine.h, 
-    src/Makefile.am, tests/CMapTest.cpp: 
-  added Character class to handle character names, codes, and indexes 
-  consistently 
-
-  * src/FileFinder.cpp, src/Font.cpp, src/Font.h, src/FontManager.cpp: 
-  added support for OTF fonts 
-
-  * src/Font.cpp, src/Font.h, src/FontMetric.cpp, src/FontMetric.h, 
-    src/FontMetrics.cpp, src/FontMetrics.h, src/Makefile.am, src/TFM.h: 
-  renamed class FontMetric to FontMetrics 
-
-  * src/CMap.cpp, src/CMap.h, src/CMapReader.cpp, src/CMapReader.h, 
-    tests/CMapReaderTest.cpp, tests/CMapTest.cpp, tests/Makefile.am: 
-  added evaluation of base font (bf) sections in CMap files 
-
-  * src/CMap.h, src/CMapManager.cpp, src/CMapManager.h, src/CMapReader.cpp, 
-    src/CharMapID.cpp, src/CharMapID.h, src/Font.cpp, src/Font.h, 
-    src/FontEngine.cpp, src/FontEngine.h, src/FontManager.cpp, 
-    src/FontMap.cpp, src/FontMap.h, src/Makefile.am: 
-  try to decode characters of non-CID fonts that have a CMap assigned in 
-  the fontmap 
-
-2013-07-27  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Font.cpp, src/Font.h, src/FontEncoding.cpp, src/FontEncoding.h: 
-  moved lookup of the encoding of a font to the Font class 
-
-  * src/JFM.cpp: 
-  fixed retrieval of char indexes if a JFM contains entries of chartype 0 
-  only 
-
-  * src/BgColorSpecialHandler.h, src/DVIToSVG.cpp, src/PSInterpreter.cpp, 
-    src/PSInterpreter.h, src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, 
-    src/SpecialManager.cpp, src/SpecialManager.h: 
-  ensure that PS header code is evaluated before the page/body code; also 
-  execute bop-hook and eop-hook 
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.h, src/PsSpecialHandler.cpp: 
-  added funtion to execute PS code snippets and retrieve their results 
-
-  * doc/dvisvgm.txt.in, src/DVIActions.h, src/DVIReader.cpp, 
-    src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, 
-    src/EPSToSVG.cpp, src/Makefile.am, src/PSFilter.h, src/PSInterpreter.cpp, 
-    src/PSInterpreter.h, src/PSPreviewFilter.cpp, src/PSPreviewFilter.h, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, src/SpecialActions.h, 
-    src/SpecialHandler.h, src/SpecialManager.cpp, src/SpecialManager.h: 
-  added evaluation of bounding box information created by preview package 
-
-2013-07-23  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/EPSToSVG.cpp: 
-  print warning message if height or width of EPS bbox is 0 
-
-  * src/psdefs.cpp: 
-  PS handler: call newpath before executing charpath in operator show 
-
-  * src/FontMap.cpp: 
-  check for EOF prior to try to parse another mapline 
-
-2013-07-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.cpp: 
-  replaced PS operator prval with =only in psdefs 
-
-2013-07-17  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVG.cpp: 
-  ensure catching PSExceptions while processing PS header specials to 
-  prevent segfaults 
-
-  * src/psdefs.cpp: 
-  properly store PS operator applyscalevals in systemdict 
-
-2013-07-14  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Process.cpp, src/Process.h: 
-  extended Process::run() to grab the output written to stdout 
-
-  * src/FileFinder.cpp, src/FileFinder.h: 
-  FileFinder: added lookup of cmap files 
-
-2013-07-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CmdLineParserBase.cpp, src/CmdLineParserBase.h, src/CommandLine.cpp: 
-  command-line parser: changed type of argument mode from char to enum 
-
-2013-06-17  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FileFinder.cpp: 
-  removed redundant 'using namespace std' 
-
-2013-06-03  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * doc/dvisvgm.txt.in, src/HtmlSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.h, src/dvisvgm.cpp: 
-  extend option --linkmark to highlight linked areas by a given background 
-  color 
-
-2013-06-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Color.cpp, src/Color.h, src/ColorSpecialHandler.cpp, 
-    src/ColorSpecialHandler.h, src/SpecialActions.h, 
-    tests/ColorSpecialTest.cpp, tests/ColorTest.cpp, tests/Makefile.am: 
-  use Color class in ColorSpecialHandler rather than local code; added 
-  ColorTest 
-
-2013-05-22  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/dvisvgm.cpp: 
-  added a missing (underlining) hyphen to the output of -V1 
-
-2013-05-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/NoPsSpecialHandler.cpp, src/NoPsSpecialHandler.h: 
-  added missing NoPsSpecialhandler files 
-
-2013-05-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Font.cpp, src/Font.h, src/FontManager.h, src/FontMetric.cpp, 
-    src/FontMetric.h, src/Makefile.am, src/TFM.cpp, src/TFM.h: 
-  handle invalid TFM files properly 
-
-  * src/Font.cpp, src/FontMetric.cpp, src/FontMetric.h, src/JFM.cpp, 
-    src/JFM.h, src/Makefile.am, src/StreamReader.h, src/TFM.cpp, src/TFM.h: 
-  added support for Japanese font metric (JFM) files 
-
-  * src/FileFinder.cpp, src/MiKTeXCom.cpp, src/MiKTeXCom.h, src/dvisvgm.cpp: 
-  try to load the Ghostscript library that comes with MiKTeX 
-
-  * doc/dvisvgm.txt.in, src/DVIToSVG.cpp, src/HtmlSpecialHandler.cpp, 
-    src/HtmlSpecialHandler.h, src/Makefile.am, src/SpecialManager.cpp: 
-  added support of hyperref specials 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/HtmlSpecialHandler.cpp, src/dvisvgm.cpp, src/options.xml: 
-  added option --linkmark to select the highlighing variant for hyperlinks 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.3 
-
-  * NEWS: 
-  updated NEWS 
-
-2013-05-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * AUTHORS, Makefile.am, README, configure.ac, potracelib/Makefile.am, 
-    potracelib/auxiliary.h, potracelib/bitmap.h, potracelib/curve.c, 
-    potracelib/curve.h, potracelib/decompose.c, potracelib/decompose.h, 
-    potracelib/lists.h, potracelib/potracelib.c, potracelib/potracelib.h, 
-    potracelib/progress.h, potracelib/trace.c, potracelib/trace.h: 
-  removed bundled potrace library 
-
-  * src/SVGTree.cpp, src/SVGTree.h: 
-  added methods to push and pop 'context elements' to a page that wrap 
-  parts of the page contents 
-
-  * src/DVIToSVGActions.h, src/EPSToSVG.h, src/SpecialActions.h: 
-  provide the context push/pop methods of class SVGTree to special 
-  handlers 
-
-  * src/InputReader.cpp, src/InputReader.h: 
-  added optional parameter 'quotechar' to InputReader::parseAttributes() 
-
-  * src/EmSpecialHandler.h, src/NoPsSpecialHandler.h, src/SpecialHandler.h, 
-    src/SpecialManager.cpp, src/SpecialManager.h, src/TpicSpecialHandler.h: 
-  moved DVI listener methods to dedicated listener interface classes 
-
-  * src/DVIActions.h, src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp, 
-    src/DVIToSVG.h, src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, 
-    src/EmSpecialHandler.cpp, src/EmSpecialHandler.h, 
-    src/NoPsSpecialHandler.cpp, src/NoPsSpecialHandler.h, 
-    src/SpecialHandler.h, src/SpecialManager.cpp, src/SpecialManager.h, 
-    src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.h: 
-  added page number parameter to DVIEndPageListener::dviEndPage() 
-
-2013-05-01  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVGActions.cpp, src/Terminal.cpp, src/Terminal.h: 
-  disable cursor when showing the progress indicator (Windows only) 
-
-2013-04-26  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVG.cpp: 
-  don't link NoPsSpecialHandler if HAVE_LIBGS 
-
-2013-04-25  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FontEncoding.cpp: 
-  fixed bracketing bug that prevented lookup of fontmap files 
-
-2013-04-24  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/BoundingBox.cpp, src/BoundingBox.h, src/Calculator.cpp, 
-    src/Calculator.h, src/Matrix.cpp, src/Matrix.h, src/MessageException.h, 
-    src/PageSize.cpp, src/PageSize.h, src/StreamReader.cpp, 
-    src/StreamReader.h, src/VFReader.cpp, src/VFReader.h, src/VectorStream.h, 
-    src/XMLDocument.cpp, src/XMLDocument.h: 
-  added missing underscores to private member variables 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.2.2 
-
-  * NEWS: 
-  updated NEWS 
-
-2013-04-23  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVG.cpp, src/EPSToSVG.cpp, src/dvisvgm.cpp: 
-  avoid output of empty parentheses if TARGET_SYSTEM is not set 
-
-  * doc/dvisvgm.txt.in, src/CmdLineParserBase.cpp, src/CommandLine.cpp, 
-    src/options.dtd, src/options.xml: 
-  added information about 'dvisvgm -E' to usage line 
-
-  * src/BoundingBox.cpp, src/BoundingBox.h, src/Calculator.h, 
-    src/CmdLineParserBase.h, src/DVIToSVGActions.cpp, src/Message.cpp, 
-    src/VFReader.cpp: 
-  added missing member initializations to some classes 
-
-2013-04-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVG.cpp, src/Makefile.am, src/SpecialManager.cpp: 
-  print a warning message if PS specials are found but ignored 
-
-2013-04-15  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FileFinder.cpp, src/dvisvgm.cpp: 
-  catch MessageException if MiKTeX version can't be obtained 
-
-2013-04-09  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * tests/Makefile.am, tests/create-makefile: 
-  updated tests/Makefile.am to honor system potracelib if present 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.2.1 
-
-  * NEWS: 
-  updated NEWS 
-
-2013-04-08  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * doc/dvisvgm.txt.in, src/Color.cpp, src/Color.h, src/DVIToSVGActions.cpp: 
-  allow the background color special to insert white rectancles 
-
-  * src/PageRanges.h: 
-  dropped unused variable PageRanges::_max 
-
-2013-04-04  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/XMLNode.cpp, src/XMLNode.h: 
-  unhide derived method XMLDeclarationNode::append 
-
-2013-03-10  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * Makefile.am, configure.ac: 
-  don't build bundled potracelib if system library is used (patch by 
-  Alexis Ballier) 
-
-2013-03-03  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * potracelib/auxiliary.h, potracelib/bitmap.h, potracelib/curve.c, 
-    potracelib/curve.h, potracelib/decompose.c, potracelib/decompose.h, 
-    potracelib/lists.h, potracelib/potracelib.c, potracelib/potracelib.h, 
-    potracelib/progress.h, potracelib/trace.c, potracelib/trace.h: 
-  updated bundled potrace library to version 1.11 
-
-2013-03-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * potracelib/auxiliary.h, potracelib/bitmap.h, potracelib/curve.c, 
-    potracelib/decompose.h, potracelib/lists.h, potracelib/progress.h, 
-    potracelib/trace.c, potracelib/trace.h, src/EPSFile.cpp, 
-    src/EPSToSVG.cpp, src/EPSToSVG.h, src/PSPattern.cpp, src/PSPattern.h, 
-    src/SVGOutputBase.h: 
-  converted DOS line endings 
-
-2013-02-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Makefile.am, src/PSInterpreter.cpp, src/PSInterpreter.h, 
-    src/PSPattern.cpp, src/PSPattern.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/psdefs.psc, tests/PSInterpreterTest.cpp: 
-  PS handler: added support of tiling patterns 
-
-  * src/Makefile.am, src/PSInterpreter.cpp, src/psdefs.cpp, src/psdefs.psc: 
-  make psdefs a separate compilation unit 
-
-  * tests/MapLineTest.cpp: 
-  prevent MapLineTest from failing if file UGBK.sfd is not available 
-
-  * src/psdefs.cpp: 
-  improved processing of PS operator 'show' 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.2 
-
-  * NEWS: 
-  updated NEWS 
-
-2013-02-21  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/XMLNode.cpp, src/XMLNode.h: 
-  added virtual constructor XMLNode::clone() 
-
-  * src/XMLNode.cpp, src/XMLNode.h: 
-  added methods to lookup attribute values and selected descendant XML 
-  nodes 
-
-2013-02-19  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.h: 
-  added PSInterpreter::limit() to limit the number of bytes to be 
-  processed 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/DVIToSVG.cpp, src/DVIToSVG.h, src/EPSFile.cpp, src/EPSFile.h, 
-    src/EPSToSVG.cpp, src/EPSToSVG.h, src/Makefile.am, 
-    src/PsSpecialHandler.cpp, src/SVGOutputBase.h, src/dvisvgm.cpp, 
-    src/options.xml: 
-  add option to directly convert EPS files to SVG 
-
-  * src/FilePath.cpp: 
-  adapt path separators on Windows systems to get the  correct output path 
-
-2013-02-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CmdLineParserBase.cpp, src/CmdLineParserBase.h, src/CommandLine.cpp, 
-    src/CommandLine.h: 
-  applied a few refactorings to the command-line parser 
-
-2013-02-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/CmdLineParserBase.cpp, src/CmdLineParserBase.h, 
-    src/CommandLine.cpp, src/CommandLine.h, src/dvisvgm.cpp, src/options.xml: 
-  added optional parameter to option --help to specify output format 
-
-2013-02-06  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * doc/dvisvgm.txt.in, src/BoundingBox.cpp, src/CommandLine.cpp, 
-    src/CommandLine.h, src/EmSpecialHandler.cpp, src/GraphicPath.h, 
-    src/Matrix.cpp, src/PsSpecialHandler.cpp, src/TpicSpecialHandler.cpp, 
-    src/XMLString.cpp, src/XMLString.h, src/dvisvgm.cpp, src/options.xml: 
-  added option --precision to set the number of decimal places applied to 
-  attribute values 
-
-2013-01-30  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/CommandLine.cpp: 
-  fixed alignment of --help text 
-
-2013-01-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FileFinder.cpp, src/FontEngine.cpp, src/Makefile.am, 
-    src/MiKTeXCom.cpp, src/MiKTeXCom.h: 
-  moved MiKTeX COM code to separate class 
-
-2013-01-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp, src/DVIToSVG.cpp, src/FileFinder.cpp, src/Font.cpp, 
-    src/Font.h, src/FontEncoding.cpp, src/FontEngine.cpp, src/FontEngine.h, 
-    src/FontManager.cpp, src/FontMap.cpp, src/FontMap.h, src/Makefile.am, 
-    src/MapLine.cpp, src/MapLine.h, src/Subfont.cpp, src/Subfont.h, 
-    tests/FontMapTest.cpp, tests/Makefile.am, tests/MapLineTest.cpp, 
-    tests/SubfontTest.cpp, tests/create-makefile, tests/sample.sfd: 
-  added support for subfont definitions and multi-font (.ttc) files 
-
-  * src/FontManager.cpp, src/FontMap.cpp, src/FontMap.h, src/MapLine.h: 
-  replaced FontMap entries by pointers; initialize entries with MapLine 
-  objects 
-
-  * src/CommandLine.cpp, src/Font.cpp, src/Font.h, src/FontEngine.cpp, 
-    src/FontEngine.h, src/FontManager.cpp, src/FontMap.cpp, src/FontMap.h, 
-    src/MapLine.cpp, src/MapLine.h, tests/MapLineTest.cpp: 
-  implemented evaluation of font style options given in a mapline 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.1 
-
-  * NEWS, README: 
-  updated NEWS and README 
-
-2013-01-20  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FontEngine.cpp, src/FontEngine.h: 
-  removed unneeded code related to font sizes from class FontEngine 
-
-2013-01-16  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/FontMap.cpp, src/FontMap.h, src/dvisvgm.cpp, src/options.xml: 
-  renamed option --map-file to --fontmap; allow multiple mapfiles and 
-  modes 
-
-  * doc/dvisvgm.txt.in, src/DVIToSVG.cpp, src/FontMap.cpp, src/FontMap.h, 
-    src/Makefile.am, src/PdfSpecialHandler.cpp, src/PdfSpecialHandler.h: 
-  added PdfSpecialHandler to evaluate pdf:mapline and pdf:mapfile specials 
-
-2013-01-10  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Font.cpp, src/FontEncoding.cpp: 
-  fixed a string exception that occurred when an encoding file or an entry 
-  in the encoding table is unavailable 
-
-2013-01-06  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FileFinder.cpp, src/FileFinder.h, src/FontEncoding.cpp, 
-    src/FontEncoding.h: 
-  removed font encoding methods from FileFinder 
-
-2013-01-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * Makefile.am, README, configure.ac, doc/Makefile.am, doc/dvisvgm.txt.in, 
-    src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.h, 
-    src/Bitmap.cpp, src/Bitmap.h, src/BoundingBox.cpp, src/BoundingBox.h, 
-    src/CRC32.cpp, src/CRC32.h, src/Calculator.cpp, src/Calculator.h, 
-    src/CmdLineParserBase.cpp, src/CmdLineParserBase.h, src/Color.cpp, 
-    src/Color.h, src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, 
-    src/CommandLine.cpp, src/CommandLine.h, src/DLLoader.cpp, src/DLLoader.h, 
-    src/DVIActions.cpp, src/DVIActions.h, src/DVIReader.cpp, src/DVIReader.h, 
-    src/DVIToSVG.cpp, src/DVIToSVG.h, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/Directory.cpp, src/Directory.h, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.h, 
-    src/EmSpecialHandler.cpp, src/EmSpecialHandler.h, src/FileFinder.cpp, 
-    src/FileFinder.h, src/FilePath.cpp, src/FilePath.h, src/FileSystem.cpp, 
-    src/FileSystem.h, src/Font.cpp, src/Font.h, src/FontCache.cpp, 
-    src/FontCache.h, src/FontEncoding.cpp, src/FontEncoding.h, 
-    src/FontEngine.cpp, src/FontEngine.h, src/FontManager.cpp, 
-    src/FontManager.h, src/FontMap.cpp, src/FontMap.h, src/GFGlyphTracer.cpp, 
-    src/GFGlyphTracer.h, src/GFReader.cpp, src/GFReader.h, src/GFTracer.cpp, 
-    src/GFTracer.h, src/Ghostscript.cpp, src/Ghostscript.h, src/Glyph.h, 
-    src/GlyphTracerMessages.h, src/GraphicPath.h, src/InputBuffer.cpp, 
-    src/InputBuffer.h, src/InputReader.cpp, src/InputReader.h, 
-    src/Length.cpp, src/Length.h, src/Makefile.am, src/Matrix.cpp, 
-    src/Matrix.h, src/Message.cpp, src/Message.h, src/MessageException.h, 
-    src/MetafontWrapper.cpp, src/MetafontWrapper.h, src/MiKTeXCom.cpp, 
-    src/MiKTeXCom.h, src/PSInterpreter.cpp, src/PSInterpreter.h, 
-    src/PageRanges.cpp, src/PageRanges.h, src/PageSize.cpp, src/PageSize.h, 
-    src/Pair.h, src/Process.cpp, src/Process.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/SVGTree.cpp, src/SVGTree.h, 
-    src/SignalHandler.cpp, src/SignalHandler.h, src/SpecialActions.h, 
-    src/SpecialHandler.h, src/SpecialManager.cpp, src/SpecialManager.h, 
-    src/StreamReader.cpp, src/StreamReader.h, src/StreamWriter.cpp, 
-    src/StreamWriter.h, src/System.cpp, src/System.h, src/TFM.cpp, src/TFM.h, 
-    src/Terminal.cpp, src/Terminal.h, src/TpicSpecialHandler.cpp, 
-    src/TpicSpecialHandler.h, src/VFActions.h, src/VFReader.cpp, 
-    src/VFReader.h, src/VectorStream.h, src/XMLDocTypeNode.h, 
-    src/XMLDocument.cpp, src/XMLDocument.h, src/XMLNode.cpp, src/XMLNode.h, 
-    src/XMLString.cpp, src/XMLString.h, src/dvisvgm.cpp, src/macros.h, 
-    src/options.dtd, src/options.xml, src/psdefs.psc, src/types.h, 
-    tests/BoundingBoxTest.cpp, tests/CRC32Test.cpp, tests/CalculatorTest.cpp, 
-    tests/ColorSpecialTest.cpp, tests/CommandLineTest.cpp, 
-    tests/DirectoryTest.cpp, tests/FileFinderTest.cpp, 
-    tests/FilePathTest.cpp, tests/FileSystemTest.cpp, 
-    tests/FontManagerTest.cpp, tests/FontMapTest.cpp, tests/GFReaderTest.cpp, 
-    tests/GraphicPathTest.cpp, tests/LengthTest.cpp, tests/Makefile.am, 
-    tests/MatrixTest.cpp, tests/MessageExceptionTest.cpp, 
-    tests/PSInterpreterTest.cpp, tests/PageRagesTest.cpp, 
-    tests/PageSizeTest.cpp, tests/PairTest.cpp, 
-    tests/SplittedCharInputBufferTest.cpp, tests/StreamInputBufferTest.cpp, 
-    tests/StreamReaderTest.cpp, tests/StreamWriterTest.cpp, 
-    tests/TypesTest.cpp, tests/VectorStreamTest.cpp, tests/create-makefile: 
-  updated year in copyright statements to 2013 
-
-2012-12-23  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FontCache.cpp, src/PsSpecialHandler.cpp, src/TpicSpecialHandler.cpp: 
-  check emptiness of containers with empty() instead of size() 
-
-  * src/FileFinder.cpp, src/MiKTeXCom.cpp, src/Process.cpp: 
-  avoid creating copies of exception objects 
-
-  * src/CmdLineParserBase.h, src/Directory.cpp, src/GFReader.cpp, 
-    src/PsSpecialHandler.cpp: 
-  initialize uninitialized member variables 
-
-  * src/FileFinder.cpp, src/Message.cpp, src/dvisvgm.cpp: 
-  reduced scope of some variables 
-
-2012-12-12  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FontCache.cpp: 
-  replaced 'char' with 'glyph' in font cache listing 
-
-  * src/SpecialManager.cpp: 
-  clear all corresponding containers when calling 
-  SpecialHandler::unregisterHandlers() 
-
-2012-12-03  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Ghostscript.cpp: 
-  added explicit cast to avoid signed/unsigned comparison warning 
-
-2012-12-02  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FilePath.cpp, tests/FilePathTest.cpp: 
-  strip drive letter if it's not set (Windows only) 
-
-  * tests/FileSystemTest.cpp, tests/GFReaderTest.cpp: 
-  ensure that tests work properly on Windows 
-
-  * src/macros.h: 
-  removed SHOW() from macros.h 
-
-  * doc/dvisvgm.txt.in, src/Ghostscript.cpp: 
-  use gsdll64.dll for 64-bit builds; added info about gsdll64.dll to 
-  manpage 
-
-2012-11-24  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Message.cpp: 
-  don't wrap message lines explicitly on Windows
-* * * 
-
-2012-11-23  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Ghostscript.cpp, src/Ghostscript.h, src/PSInterpreter.cpp, 
-    src/PSInterpreter.h, src/dvisvgm.cpp: 
-  print an error message if the execution of PS code fails 
-
-  * src/PSInterpreter.cpp, src/psdefs.psc: 
-  print operand stack in case of a PS error 
-
-2012-11-22  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Message.cpp: 
-  handle wrapping of messages containing newlines correctly 
-
-2012-11-21  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DLLoader.cpp, src/DLLoader.h, src/Ghostscript.cpp: 
-  renamed DLLoader::loadFunction() to DLLoader::loadSymbol() 
-
-2012-11-19  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FontEngine.cpp, src/FontEngine.h: 
-  renamed FontEngine::fname to FontEngine::_fontname 
-
-  * src/Font.cpp, src/Font.h, src/FontManager.cpp: 
-  print warning if font checksums don't match 
-
-2012-11-16  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Directory.h: 
-  undefine macro max() to avoid compilation problems on Windows 
-
-2012-11-15  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FileFinder.cpp, src/FileFinder.h, src/FontMap.cpp, src/FontMap.h, 
-    tests/FontMapTest.cpp: 
-  made class FontMap a singleton 
-
-  * src/FileFinder.cpp, src/FileFinder.h, src/dvisvgm.cpp: 
-  moved initialization of FontMap from FileFinder to dvisvgm.cpp 
-
-  * src/Makefile.am, src/MapLine.cpp, src/MapLine.h, tests/Makefile.am, 
-    tests/MapLineTest.cpp: 
-  added new class MapLine to parse and evaluate a single line of a map 
-  file 
-
-  * src/FileFinder.cpp, src/FontManager.cpp, src/FontMap.cpp, src/FontMap.h, 
-    tests/FontMapTest.cpp: 
-  adapted code to use new MapLine class; introduced support of map line 
-  modes 
-
-2012-11-14  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FileFinder.cpp: 
-  initialize Ghostscript when compiled for TeX Live Win32 (patch by Peter 
-  Breitenlohner) 
-
-  * src/FileFinder.cpp, src/FileFinder.h, src/dvisvgm.cpp, 
-    tests/FileFinderTest.cpp, tests/FontManagerTest.cpp: 
-  initialize second parameter of kpse_set_program_name() correctly 
-
-  * src/DVIToSVG.cpp: 
-  prevent compilation error when using a C++11 compiler (patch by Peter 
-  Breitenlohner) 
-
-2012-11-11  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/InputBuffer.cpp, src/InputBuffer.h, src/InputReader.cpp, 
-    src/InputReader.h, src/PsSpecialHandler.cpp, 
-    tests/StreamInputBufferTest.cpp: 
-  some refactorings of class InputReader; added InputReader::find() 
-
-2012-10-24  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVG.cpp, src/DVIToSVG.h, src/dvisvgm.cpp: 
-  don't show warning about disabled PS support in list of special handlers 
-
-2012-09-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.0.12 
-
-  * NEWS: 
-  updated NEWS 
-
-  * src/options.ggo: 
-  removed deprecated file options.ggo 
-
-2012-09-20  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVG.cpp: 
-  show warning if processing of PS specials is disabled 
-
-  * src/PsSpecialHandler.cpp, src/PsSpecialHandler.h: 
-  removed Ghostscript info from ps entry in list of special handlers 
-
-2012-09-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.psc: 
-  ignore dvips bop operators that might be present in PS specials 
-
-2012-09-17  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/StreamReader.cpp: 
-  fixed reading invalid number of string characters 
-
-2012-04-17  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * doc/Makefile.am: 
-  keep manpage when calling 'make clean' 
-
-2012-04-04  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVGActions.cpp, src/SVGTree.cpp, src/SVGTree.h, 
-    tests/frktest-nf-cmp.svg, tests/frktest-wf-cmp.svg, 
-    tests/sample-nf-cmp.svg, tests/sample-wf-cmp.svg: 
-  scale point units in the SVG files to big points (bp) 
-
-2012-04-02  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Matrix.cpp, src/Matrix.h, tests/MatrixTest.cpp: 
-  added Matrix::invert() and det() 
-
-2012-03-29  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Matrix.cpp, src/Matrix.h, tests/MatrixTest.cpp: 
-  added start index parameter to Matrix::set(vector<>) 
-
-2012-03-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.psc: 
-  evaluate PS operators rectclip, rectfill, and rectstroke 
-
-2012-03-09  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Ghostscript.cpp, src/Ghostscript.h: 
-  added optional parameter to Ghostscript::revision() to retrieve the 
-  revision number only 
-
-  * src/dvisvgm.cpp: 
-  added Ghostscript to library list printed by --version=yes 
-
-  * NEWS: 
-  updated NEWS 
-
-2012-03-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.0.11 
-
-2012-03-07  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVGActions.cpp: 
-  correct location of a rule's bounding box (lp bug #948713) 
-
-2012-02-24  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * doc/dvisvgm.txt.in: 
-  fixed a couple of mistakes and formatting flaws in the manpage 
-
-2012-02-17  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * README: 
-  updated information about bug reporting 
-
-2012-01-26  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/CmdLineParserBase.h, src/DVIActions.h, src/DVIReader.h, 
-    src/DVIToSVGActions.h, src/FontEngine.h, src/FontManager.h, 
-    src/MetafontWrapper.h, src/SVGTree.h, src/SpecialActions.h, 
-    src/SpecialHandler.h, src/SpecialManager.h, src/TFM.h, src/VFReader.h: 
-  adapt forward declarations of classes and structs to their corresponding 
-  definition (SF bug #3480013) 
-
-2012-01-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/miktex-core.def, src/miktex-kps.def, src/miktex-kps.h: 
-  removed outdated files for old MiKTeX bindings 
-
-2012-01-09  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/InputReader.cpp, tests/StreamInputBufferTest.cpp: 
-  fixed parsing of negative floating point numbers starting with '-0.' (SF 
-  bug #3471097) 
-
-  * src/TpicSpecialHandler.cpp: 
-  added some more comments to methods of class TpicSpecialHandler 
-
-2012-01-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * Makefile.am, README, configure.ac, doc/Makefile.am, doc/dvisvgm.txt.in, 
-    src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.h, 
-    src/Bitmap.cpp, src/Bitmap.h, src/BoundingBox.cpp, src/BoundingBox.h, 
-    src/CRC32.cpp, src/CRC32.h, src/Calculator.cpp, src/Calculator.h, 
-    src/CmdLineParserBase.cpp, src/CmdLineParserBase.h, src/Color.cpp, 
-    src/Color.h, src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, 
-    src/CommandLine.cpp, src/CommandLine.h, src/DLLoader.cpp, src/DLLoader.h, 
-    src/DVIActions.cpp, src/DVIActions.h, src/DVIReader.cpp, src/DVIReader.h, 
-    src/DVIToSVG.cpp, src/DVIToSVG.h, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/Directory.cpp, src/Directory.h, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.h, 
-    src/EmSpecialHandler.cpp, src/EmSpecialHandler.h, src/FileFinder.cpp, 
-    src/FileFinder.h, src/FilePath.cpp, src/FilePath.h, src/FileSystem.cpp, 
-    src/FileSystem.h, src/Font.cpp, src/Font.h, src/FontCache.cpp, 
-    src/FontCache.h, src/FontEncoding.cpp, src/FontEncoding.h, 
-    src/FontEngine.cpp, src/FontEngine.h, src/FontManager.cpp, 
-    src/FontManager.h, src/FontMap.cpp, src/FontMap.h, src/GFGlyphTracer.cpp, 
-    src/GFGlyphTracer.h, src/GFReader.cpp, src/GFReader.h, src/GFTracer.cpp, 
-    src/GFTracer.h, src/Ghostscript.cpp, src/Ghostscript.h, src/Glyph.h, 
-    src/GlyphTracerMessages.h, src/GraphicPath.h, src/InputBuffer.cpp, 
-    src/InputBuffer.h, src/InputReader.cpp, src/InputReader.h, 
-    src/Length.cpp, src/Length.h, src/Makefile.am, src/Matrix.cpp, 
-    src/Matrix.h, src/Message.cpp, src/Message.h, src/MessageException.h, 
-    src/MetafontWrapper.cpp, src/MetafontWrapper.h, src/PSInterpreter.cpp, 
-    src/PSInterpreter.h, src/PageRanges.cpp, src/PageRanges.h, 
-    src/PageSize.cpp, src/PageSize.h, src/Pair.h, src/Process.cpp, 
-    src/Process.h, src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, 
-    src/SVGTree.cpp, src/SVGTree.h, src/SignalHandler.cpp, 
-    src/SignalHandler.h, src/SpecialActions.h, src/SpecialHandler.h, 
-    src/SpecialManager.cpp, src/SpecialManager.h, src/StreamReader.cpp, 
-    src/StreamReader.h, src/StreamWriter.cpp, src/StreamWriter.h, 
-    src/System.cpp, src/System.h, src/TFM.cpp, src/TFM.h, src/Terminal.cpp, 
-    src/Terminal.h, src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.h, 
-    src/VFActions.h, src/VFReader.cpp, src/VFReader.h, src/VectorStream.h, 
-    src/XMLDocTypeNode.h, src/XMLDocument.cpp, src/XMLDocument.h, 
-    src/XMLNode.cpp, src/XMLNode.h, src/XMLString.cpp, src/XMLString.h, 
-    src/dvisvgm.cpp, src/macros.h, src/options.dtd, src/options.xml, 
-    src/psdefs.psc, src/types.h, tests/BoundingBoxTest.cpp, 
-    tests/CRC32Test.cpp, tests/CalculatorTest.cpp, 
-    tests/ColorSpecialTest.cpp, tests/CommandLineTest.cpp, 
-    tests/DirectoryTest.cpp, tests/FileFinderTest.cpp, 
-    tests/FilePathTest.cpp, tests/FileSystemTest.cpp, 
-    tests/FontManagerTest.cpp, tests/FontMapTest.cpp, tests/GFReaderTest.cpp, 
-    tests/GraphicPathTest.cpp, tests/LengthTest.cpp, tests/Makefile.am, 
-    tests/MatrixTest.cpp, tests/MessageExceptionTest.cpp, 
-    tests/PSInterpreterTest.cpp, tests/PageRagesTest.cpp, 
-    tests/PageSizeTest.cpp, tests/PairTest.cpp, 
-    tests/SplittedCharInputBufferTest.cpp, tests/StreamInputBufferTest.cpp, 
-    tests/StreamReaderTest.cpp, tests/StreamWriterTest.cpp, 
-    tests/TypesTest.cpp, tests/VectorStreamTest.cpp, tests/check-conv, 
-    tests/create-makefile: 
-  updated year in copyright statements 
-
-2011-12-18  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * tests/Makefile.am, tests/create-makefile: 
-  link tests with -lpthread (required by gtest on Ubuntu) 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.0.10 
-
-  * NEWS: 
-  updated NEWS 
-
-2011-12-17  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, src/GlyphTracerMessages.h, 
-    src/Message.cpp, src/Message.h, src/MetafontWrapper.cpp, 
-    src/Terminal.cpp, src/Terminal.h, src/dvisvgm.cpp: 
-  allow users to customize the message colors 
-
-  * doc/dvisvgm.txt.in: 
-  added documentation on environment variable DVISVGM_COLORS to manpage 
-
-2011-11-22  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/GraphicPath.h: 
-  added some more comments to the methods of GraphicPath 
-
-2011-11-18  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac: 
-  move linker flag -lfreetype from LDFLAGS to LIBS to avoid linking 
-  problems 
-
-2011-10-28  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FontMap.cpp: 
-  removed unused variable eval_prefix in helper function read_entry() 
-
-  * src/SVGTree.cpp: 
-  avoid possible collisions of glyph IDs 
-
-2011-10-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.0.9 
-
-  * NEWS: 
-  updated NEWS 
-
-2011-10-09  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FilePath.cpp: 
-  added some missing comments to methods of class FilePath 
-
-  * src/Directory.h: 
-  dropped method Directory::getEntry() 
-
-2011-10-07  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Process.cpp: 
-  added missing include <signal.h> to Process.cpp 
-
-  * src/Process.cpp: 
-  exclude definition of split_paramstr() from Windows builds as it's not 
-  used there 
-
-2011-10-03  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * doc/Makefile.am: 
-  add metadata/pdfmarks to pdf version of manpage 
-
-2011-09-06  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * potracelib/auxiliary.h, potracelib/bitmap.h, potracelib/curve.c, 
-    potracelib/curve.h, potracelib/decompose.c, potracelib/decompose.h, 
-    potracelib/lists.h, potracelib/potracelib.c, potracelib/potracelib.h, 
-    potracelib/progress.h, potracelib/trace.c, potracelib/trace.h: 
-  updated bundled potrace library to version 1.10 
-
-2011-06-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.0.9dev 
-
-  * src/FileFinder.cpp, src/MetafontWrapper.cpp: 
-  fixed segfault occured in TeX Live Win32 caused by mf.exe being 
-  unavailable (SF bug #3308473) 
-
-2011-06-01  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac: 
-  added AC_LANG_SOURCE to avoid autoconf warnings 
-
-2011-05-31  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, configure.ac, src/Doxyfile: 
-  set version to 1.0.8; updated NEWS 
-
-  * src/PsSpecialHandler.cpp: 
-  explicitly cast double to int in call of ClippingStack::dup()/pop() 
-
-2011-05-27  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * tests/check-conv, tests/sample-nf-cmp.svg, tests/sample-wf-cmp.svg: 
-  updated conversion tests 
-
-2011-05-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Font.cpp, src/Makefile.am, src/MetafontWrapper.cpp, 
-    src/MetafontWrapper.h, src/Process.cpp, src/Process.h, 
-    src/SignalHandler.cpp: 
-  replaced call of system() with Process::run() and kill child process if 
-  necessary 
-
-2011-05-22  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FileFinder.cpp: 
-  MiKTeX: maketfm and makemf have been renamed to miktex-maketfm and 
-  miktex-makemf 
-
-  * src/MetafontWrapper.cpp: 
-  dropped '--halt-on-error' in Metafont call to process buggy mf files 
-  completely 
-
-2011-05-19  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DLLoader.h: 
-  added #undef NOMINMAX before (re)defining it 
-
-2011-05-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/psdefs.psc, tests/PSInterpreterTest.cpp: 
-  PS handler: implemented evaluation of save, restore, and grestoreall 
-
-2011-05-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.0.8dev 
-
-  * src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVGActions.h, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, src/SpecialActions.h: 
-  fixed interaction between PS and DVI drawing position 
-
-  * src/PsSpecialHandler.cpp: 
-  add definitions in literal PS headers to dictionary TeXDict 
-
-  * src/PsSpecialHandler.cpp: 
-  fixed potential segfault caused by invisible zero-length paths 
-
-2011-05-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVGActions.h, src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, 
-    src/psdefs.psc: 
-  PS handler: added missing unit conversions (pt vs. bp) 
-
-  * NEWS, README, configure.ac, src/Doxyfile: 
-  set version to 1.0.7; updated NEWS and README 
-
-2011-05-05  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/PSInterpreter.cpp, src/PsSpecialHandler.cpp: 
-  separate PS snippets by newline characters to leave preceding comments 
-
-  * src/PsSpecialHandler.h: 
-  corrected scaling formula applied to PS line properties 
-
-  * doc/dvisvgm.txt.in: 
-  added info about dvips rounding issues to manpage 
-
-2011-05-04  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/PsSpecialHandler.cpp: 
-  don't call Ghostscript::revision() in initialization of static variable 
-
-  * src/Ghostscript.cpp, src/Ghostscript.h, src/PSInterpreter.cpp, 
-    src/PSInterpreter.h: 
-  avoid 'this' pointer in initialazation list of 
-  PSInterpreter::PSInterpreter() 
-
-  * src/Length.h: 
-  undefine macro IN 
-
-2011-05-03  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.0.7dev 
-
-  * src/psdefs.psc: 
-  catch PS error /nocurrentpoint in operator 'setpos' properly 
-
-  * src/psdefs.psc: 
-  PS handler: recognize save/restore operators 
-
-  * src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/EmSpecialHandler.cpp, src/EmSpecialHandler.h, 
-    src/PSInterpreter.h, src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, 
-    src/SpecialActions.h, src/SpecialHandler.h, src/SpecialManager.cpp, 
-    src/SpecialManager.h, src/TpicSpecialHandler.cpp, 
-    src/TpicSpecialHandler.h: 
-  replaced methods for DVI position alterations with translation semantics 
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/macros.h, src/psdefs.psc, 
-    tests/PSInterpreterTest.cpp: 
-  improved handling of pure PostScript specials 
-
-  * src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.h: 
-  tpic special 'ip' must not draw the outline of the polygon but only fill 
-  its interior 
-
-  * src/DLLoader.cpp, src/DLLoader.h: 
-  don't define min/max macros in windows.h 
-
-2011-04-30  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/SpecialManager.cpp: 
-  register special prefix ps:: properly 
-
-2011-04-18  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FileFinder.cpp, src/FileFinder.h, src/dvisvgm.cpp, 
-    tests/FileFinderTest.cpp: 
-  dropped class FileFinder::Impl and simplified FileFinder interface 
-
-  * src/DVIReader.cpp, src/Font.cpp, src/GFReader.cpp, src/Makefile.am, 
-    src/MetafontWrapper.cpp, src/PSInterpreter.cpp, src/SignalHandler.cpp, 
-    src/SignalHandler.h, src/TFM.cpp, src/dvisvgm.cpp: 
-  added class SignalHandler for CTRL-C signals 
-
-  * NEWS, README, configure.ac, src/Doxyfile: 
-  set version to 1.0.6; updated NEWS and README 
-
-2011-04-14  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVGActions.cpp, src/MessageException.h, src/dvisvgm.cpp, 
-    tests/Makefile.am, tests/MessageExceptionTest.cpp: 
-  derived MessageException from std::exception and replaced getMessage() 
-  with what() 
-
-2011-04-13  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/XMLNode.cpp, src/XMLNode.h: 
-  prepended member variables of the XMLNode classes with underscore 
-
-2011-03-15  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIReader.cpp: 
-  throw DVI exception if set_char/put_char is executed without preceding 
-  font selection 
-
-2011-03-04  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.0.6dev 
-
-  * potracelib/potracelib.c, potracelib/potracelib.h: 
-  changed return type of potrace_version() to 'const char *' in order to 
-  avoid compiler warning 
-
-2011-03-01  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * NEWS, configure.ac, src/Doxyfile: 
-  set version to 1.0.5, updated NEWS 
-
-2011-02-28  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * doc/dvisvgm.txt.in, src/FontCache.cpp, src/FontCache.h, src/dvisvgm.cpp: 
-  added code to remove outdated and corrupted cache files 
-
-  * src/Ghostscript.cpp: 
-  fixed formatting of GS version number 
-
-2011-02-21  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.0.5dev 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/GraphicPath.h, src/SVGTree.cpp, src/SVGTree.h, src/dvisvgm.cpp, 
-    src/options.xml, tests/CommandLineTest.cpp: 
-  added option to replace use elements with paths 
-
-  * src/SVGTree.cpp: 
-  added missing unit in height/width attribute of svg root element 
-
-  * tests/frktest-nf-cmp.svg, tests/frktest-wf-cmp.svg, 
-    tests/sample-nf-cmp.svg, tests/sample-wf-cmp.svg: 
-  updated conversion test files 
-
-2011-02-16  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/InputBuffer.h: 
-  reference to scanned string in StringInputBuffer is constant now 
-
-2011-02-10  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FileSystem.cpp, src/FileSystem.h, src/dvisvgm.cpp, 
-    tests/FileSystemTest.cpp: 
-  merged FileSystem::move() into FileSystem::copy() 
-
-  * src/CRC32.cpp, src/CRC32.h, src/Makefile.am, tests/CRC32Test.cpp, 
-    tests/Makefile.am: 
-  added class CRC32 and corresponding tests 
-
-  * src/StreamReader.cpp, src/StreamReader.h, src/StreamWriter.cpp, 
-    src/StreamWriter.h, tests/Makefile.am, tests/StreamReaderTest.cpp, 
-    tests/StreamWriterTest.cpp: 
-  added CRC32 computation methods to StreamReader and StreamWriter 
-
-  * src/FontCache.cpp, src/FontCache.h: 
-  added CRC32 checks to cache files 
-
-2011-01-31  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/CmdLineParserBase.cpp: 
-  print character instead of ascii value in message of command-line parser 
-
-2011-01-30  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/FileFinder.cpp, src/FileFinder.h, src/FontEngine.cpp, 
-    src/FontEngine.h, src/dvisvgm.cpp, src/options.xml: 
-  added optional argument to --version 
-
-2011-01-28  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * potracelib/auxiliary.h, potracelib/bitmap.h, potracelib/curve.c, 
-    potracelib/curve.h, potracelib/decompose.c, potracelib/decompose.h, 
-    potracelib/lists.h, potracelib/potracelib.c, potracelib/potracelib.h, 
-    potracelib/progress.h, potracelib/trace.c, potracelib/trace.h: 
-  updated bundled potrace library to version 1.9 
-
-2011-01-17  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FileSystem.cpp, src/FileSystem.h, tests/FileSystemTest.cpp, 
-    tests/Makefile.am: 
-  added FileSystem::copy and FileSystem::move; added FileSystemTest 
-
-  * doc/dvisvgm.txt.in, src/dvisvgm.cpp: 
-  moved cache files to subfolder ($HOME/.dvisvgm/cache) 
-
-2011-01-04  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * Makefile.am, README, configure.ac, doc/Makefile.am, doc/dvisvgm.txt.in, 
-    src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.h, 
-    src/Bitmap.cpp, src/Bitmap.h, src/BoundingBox.cpp, src/BoundingBox.h, 
-    src/Calculator.cpp, src/Calculator.h, src/CmdLineParserBase.cpp, 
-    src/CmdLineParserBase.h, src/Color.cpp, src/Color.h, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, 
-    src/CommandLine.cpp, src/CommandLine.h, src/DLLoader.cpp, src/DLLoader.h, 
-    src/DVIActions.cpp, src/DVIActions.h, src/DVIReader.cpp, src/DVIReader.h, 
-    src/DVIToSVG.cpp, src/DVIToSVG.h, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/Directory.cpp, src/Directory.h, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.h, 
-    src/EmSpecialHandler.cpp, src/EmSpecialHandler.h, src/FileFinder.cpp, 
-    src/FileFinder.h, src/FilePath.cpp, src/FilePath.h, src/FileSystem.cpp, 
-    src/FileSystem.h, src/Font.cpp, src/Font.h, src/FontCache.cpp, 
-    src/FontCache.h, src/FontEncoding.cpp, src/FontEncoding.h, 
-    src/FontEngine.cpp, src/FontEngine.h, src/FontManager.cpp, 
-    src/FontManager.h, src/FontMap.cpp, src/FontMap.h, src/GFGlyphTracer.cpp, 
-    src/GFGlyphTracer.h, src/GFReader.cpp, src/GFReader.h, src/GFTracer.cpp, 
-    src/GFTracer.h, src/Ghostscript.cpp, src/Ghostscript.h, src/Glyph.h, 
-    src/GlyphTracerMessages.h, src/GraphicPath.h, src/InputBuffer.cpp, 
-    src/InputBuffer.h, src/InputReader.cpp, src/InputReader.h, 
-    src/Length.cpp, src/Length.h, src/Makefile.am, src/Matrix.cpp, 
-    src/Matrix.h, src/Message.cpp, src/Message.h, src/MessageException.h, 
-    src/MetafontWrapper.cpp, src/MetafontWrapper.h, src/PSInterpreter.cpp, 
-    src/PSInterpreter.h, src/PageRanges.cpp, src/PageRanges.h, 
-    src/PageSize.cpp, src/PageSize.h, src/Pair.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/SVGTree.cpp, src/SVGTree.h, 
-    src/SpecialActions.h, src/SpecialHandler.h, src/SpecialManager.cpp, 
-    src/SpecialManager.h, src/StreamReader.cpp, src/StreamReader.h, 
-    src/StreamWriter.cpp, src/StreamWriter.h, src/System.cpp, src/System.h, 
-    src/TFM.cpp, src/TFM.h, src/Terminal.cpp, src/Terminal.h, 
-    src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.h, src/VFActions.h, 
-    src/VFReader.cpp, src/VFReader.h, src/VectorStream.h, 
-    src/XMLDocTypeNode.h, src/XMLDocument.cpp, src/XMLDocument.h, 
-    src/XMLNode.cpp, src/XMLNode.h, src/XMLString.cpp, src/XMLString.h, 
-    src/dvisvgm.cpp, src/macros.h, src/options.dtd, src/options.xml, 
-    src/psdefs.psc, src/types.h, tests/BoundingBoxTest.cpp, 
-    tests/CalculatorTest.cpp, tests/ColorSpecialTest.cpp, 
-    tests/CommandLineTest.cpp, tests/DirectoryTest.cpp, 
-    tests/FileFinderTest.cpp, tests/FilePathTest.cpp, 
-    tests/FontManagerTest.cpp, tests/FontMapTest.cpp, tests/GFReaderTest.cpp, 
-    tests/GraphicPathTest.cpp, tests/LengthTest.cpp, tests/Makefile.am, 
-    tests/MatrixTest.cpp, tests/PageRagesTest.cpp, tests/PageSizeTest.cpp, 
-    tests/PairTest.cpp, tests/SplittedCharInputBufferTest.cpp, 
-    tests/StreamInputBufferTest.cpp, tests/TypesTest.cpp, 
-    tests/VectorStreamTest.cpp, tests/check-conv, tests/create-makefile: 
-  updated year in copyright info 
-
-  * tests/Makefile.am, tests/PSInterpreterTest.cpp: 
-  added basic tests for class PSInterpreter 
-
-2010-12-18  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FileFinder.cpp: 
-  updated to MiKTeX 2.8 SDK 
-
-  * src/PsSpecialHandler.cpp: 
-  fixed scaling issue in PS positioning 
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/psdefs.psc: 
-  PS handler: added missing scaling of linewidths and dash distances 
-
-  * NEWS, configure.ac, src/Doxyfile: 
-  set version to 1.0.4; updated NEWS 
-
-  * doc/dvisvgm.txt.in: 
-  minor update to the manpage 
-
-2010-08-18  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FontEngine.cpp: 
-  fixed FreeType version check (patch by Paul Vojta) 
-
-2010-08-11  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * tests/Makefile.am, tests/PairTest.cpp: 
-  added PairTest 
-
-2010-08-06  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.0.3 
-
-2010-08-05  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * NEWS, doc/dvisvgm.txt.in: 
-  updated manpage and NEWS 
-
-2010-08-04  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/BoundingBox.cpp, src/BoundingBox.h, src/Matrix.cpp, src/Matrix.h, 
-    src/PsSpecialHandler.cpp: 
-  revamped PsSpecialHandler::psfile() to fix a transformation issue (SF 
-  bug #3037372) 
-
-2010-07-28  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp: 
-  added check of DVI format version 
-
-2010-07-26  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/PsSpecialHandler.cpp, src/PsSpecialHandler.h: 
-  restore transformation matrix after execution of psfile 
-
-2010-07-13  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.0.3dev 
-
-  * src/InputBuffer.h: 
-  added missing namespace prefix 
-
-  * src/Terminal.cpp: 
-  replaced \e with \x1B 
-
-  * src/GraphicPath.h, src/PsSpecialHandler.h: 
-  fixed missing initialization of GraphicPath iterator 
-
-  * src/Directory.cpp, src/Directory.h, src/GFReader.cpp, src/GFReader.h: 
-  added leading underscore to variables of GFReader 
-
-2010-06-22  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/gzstream.cpp, src/gzstream.h: 
-  fixed class variable issue introduced by previous AIX patch 
-
-  * NEWS, configure.ac, src/Doxyfile: 
-  set version to 1.0.2 
-
-2010-06-18  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Bitmap.cpp, tests/DirectoryTest.cpp, tests/GFReaderTest.cpp, 
-    tests/Makefile.am, tests/cmr10.600gf, tests/create-makefile: 
-  added GFReaderTest; updated DirectoryTest 
-
-2010-06-17  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Bitmap.cpp, src/Calculator.cpp, src/CmdLineParserBase.cpp, 
-    src/Color.cpp, src/ColorSpecialHandler.cpp, src/DVIReader.cpp, 
-    src/DVIReader.h, src/DVIToSVGActions.cpp, src/DvisvgmSpecialHandler.cpp, 
-    src/EmSpecialHandler.cpp, src/FontCache.cpp, src/FontEncoding.cpp, 
-    src/GFGlyphTracer.cpp, src/Pair.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/TFM.cpp, src/TFM.h: 
-  fixed some type conversion warnings 
-
-  * src/Message.cpp, src/Message.h: 
-  renamed MessageStream::putchar() to MessageStream::putChar() to avoid 
-  name clashes 
-
-  * src/types.h, tests/Makefile.am, tests/TypesTest.cpp: 
-  added TypesTest 
-
-2010-06-16  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * potracelib/curve.c, potracelib/curve.h, potracelib/decompose.c: 
-  renamed internal potrace functions path_new() and path_free() to prevent 
-  linker conflicts on OS X 
-
-2010-06-14  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.0.2dev 
-
-  * configure.ac, src/CmdLineParserBase.h, src/FileFinder.h, 
-    src/FontCache.cpp, src/FontCache.h, src/FontEncoding.cpp, 
-    src/FontEngine.cpp, src/GFGlyphTracer.h, src/MetafontWrapper.cpp, 
-    src/gzstream.cpp: 
-  applied latest TL patches from Peter Breitenlohner and Karl Berry 
-
-2010-06-11  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Message.cpp: 
-  suppress ANSI color code by default 
-
-  * NEWS, configure.ac, src/Doxyfile: 
-  set version to 1.0.1 
-
-2010-06-09  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.0.1dev 
-
-  * src/psdefs.psc: 
-  fixed recursion issue in PS operator charpath 
-
-2010-06-08  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac, doc/Makefile.am, src/Makefile.am: 
-  cleaned up configuration scripts 
-
-  * configure.ac, src/Doxyfile: 
-  set version to 1.0dev 
-
-  * doc/dvisvgm.txt.in, src/BoundingBox.cpp, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/DvisvgmSpecialHandler.cpp, 
-    src/EmSpecialHandler.cpp, src/PsSpecialHandler.cpp, src/SpecialActions.h, 
-    src/SpecialManager.cpp, src/TpicSpecialHandler.cpp: 
-  added special for creating local bounding boxes 
-
-  * src/FilePath.cpp, src/FilePath.h, src/FileSystem.cpp, src/FileSystem.h, 
-    src/Makefile.am, tests/FilePathTest.cpp, tests/Makefile.am: 
-  added class FilePath 
-
-  * src/InputBuffer.h, tests/ColorSpecialTest.cpp, 
-    tests/StreamInputBufferTest.cpp: 
-  added InputBuffer::invalidate() 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/Makefile.am, 
-    src/PageRanges.cpp, src/PageRanges.h, src/StreamCounter.h, 
-    src/dvisvgm.cpp, src/options.xml, tests/BoundingBoxTest.cpp, 
-    tests/CommandLineTest.cpp, tests/Makefile.am, tests/PageRagesTest.cpp, 
-    tests/StreamCounterTest.cpp: 
-  added conversion of multiple pages 
-
-  * configure.ac, doc/Makefile.am, doc/dvisvgm.txt.in, src/CommandLine.cpp, 
-    src/CommandLine.h, src/DVIActions.h, src/DVIToSVG.cpp, src/GFTracer.cpp, 
-    src/GlyphTracerMessages.h, src/Makefile.am, src/Message.cpp, 
-    src/Message.h, src/MetafontWrapper.cpp, src/Terminal.cpp, src/Terminal.h, 
-    src/dvisvgm.cpp, src/options.xml: 
-  improved output of messages including optional colorization 
-
-  * src/Font.cpp: 
-  print error message if Metafont failed 
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/psdefs.psc: 
-  evaluate Ghostscript operator .setopacityalpha 
-
-  * src/DVIActions.h, src/DVIReader.cpp, src/DVIReader.h: 
-  added method to compute length of DVI command 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/DVIActions.h, src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, 
-    src/Makefile.am, src/Message.cpp, src/Message.h, src/PSInterpreter.cpp, 
-    src/PSInterpreter.h, src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, 
-    src/SpecialActions.h, src/System.cpp, src/System.h, src/dvisvgm.cpp, 
-    src/options.xml: 
-  added percentage-based progress indicator 
-
-  * doc/Makefile.am, doc/dvisvgm.txt.in: 
-  documented option --help and --version in manpage 
-
-  * NEWS, configure.ac, src/Doxyfile: 
-  set version to 1.0 
-
-  * src/PSInterpreter.cpp, src/PSInterpreter.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h: 
-  fixed PS destructor issue (SF bug #3013392) 
-
-2010-05-09  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac: 
-  fixed whitespace issue in CPPFLAGS and LDFLAGS 
-
-2010-05-04  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac: 
-  fixed kpathsea check; use pkg-config to check freetype availability 
-
-  * tests/FileFinderTest.cpp, tests/FontManagerTest.cpp, tests/check-conv: 
-  fixed segfaults in tests 
-
-2010-04-23  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * NEWS, configure.ac, src/Doxyfile: 
-  set version to 0.9.1 
-
-2010-04-22  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/CommandLine.cpp, src/options.xml: 
-  output of option --help: replaced '(default: FOO)' by '[FOO]' 
-
-  * src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, 
-    src/SVGTree.cpp, src/SVGTree.h, src/XMLNode.cpp, src/XMLNode.h: 
-  ignore unused fonts in CSS styles list 
-
-  * src/SVGTree.cpp: 
-  fixed broken validity when using SVG fonts 
-
-  * src/DVIActions.h, src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp, 
-    src/DVIToSVG.h, src/DVIToSVGActions.cpp, src/DVIToSVGActions.h: 
-  print page count and page number of DVI page being processed 
-
-  * tests/check-conv, tests/frktest-wf-cmp.svg, tests/sample-wf-cmp.svg: 
-  adapted conversion tests to new output format 
-
-2010-04-20  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FontEncoding.cpp: 
-  fixed memory bug in FontEncoding::encoding() 
-
-2010-04-11  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 0.9.1dev 
-
-  * src/DVIToSVGActions.cpp: 
-  replaced wrong font pointer that could lead to segfaults 
-
-2010-03-24  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Font.cpp, src/Font.h, src/dvisvgm.cpp: 
-  moved some methods from PhysicalFontImpl to PysicalFont 
-
-  * doc/dvisvgm.txt.in, src/BoundingBox.cpp, src/BoundingBox.h, 
-    src/CommandLine.cpp, src/CommandLine.h, src/DVIToSVG.cpp, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/Font.cpp, src/Font.h, 
-    src/GlyphTracerMessages.h, src/Makefile.am, src/dvisvgm.cpp, 
-    src/options.xml: 
-  added command-line option --exact 
-
-  * src/FontCache.cpp, src/Makefile.am, src/StreamWriter.cpp, 
-    src/StreamWriter.h, src/TFM.cpp: 
-  replaced local stream IO functions by StreamReader/StreamWriter methods 
-
-  * src/CmdLineParserBase.cpp, src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, 
-    src/FontEngine.cpp, src/GlyphTracerMessages.h, src/Message.cpp, 
-    src/Message.h, src/MetafontWrapper.cpp, src/dvisvgm.cpp: 
-  added class MessageStream, updated message output 
-
-  * src/FontCache.cpp, src/GFGlyphTracer.cpp, src/GFReader.cpp: 
-  variable _fontname is now correctly set in class FontCache 
-
-  * NEWS, configure.ac, src/Doxyfile: 
-  set version to 0.9 
-
-  * tests/frktest-nf-cmp.svg, tests/frktest-wf-cmp.svg, 
-    tests/sample-nf-cmp.svg, tests/sample-wf-cmp.svg: 
-  updated conversion tests 
-
-2010-03-18  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVG.cpp, src/SVGTree.cpp: 
-  moved creation of SVG 'use' elements from class DVIToSVG to class 
-  SVGTree 
-
-  * src/DVIToSVG.cpp, src/Font.cpp, src/Font.h, src/GFGlyphTracer.cpp, 
-    src/GFGlyphTracer.h, src/SVGTree.cpp, src/SVGTree.h: 
-  added class GFGlyphTracer::Callback providing an interface used to print 
-  status information about the tracer 
-
-  * src/CmdLineParserBase.cpp, src/CmdLineParserBase.h: 
-  added evaluation of boolean and char arguments to the command-line 
-  parser 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/DVIToSVG.cpp, src/DVIToSVG.h, src/Font.cpp, src/Font.h, 
-    src/dvisvgm.cpp, src/options.xml, tests/CommandLineTest.cpp: 
-  reactivated option --trace-all, and added optional argument 'retrace' to 
-  it 
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/Font.cpp, src/Font.h, src/dvisvgm.cpp, src/options.xml: 
-  added command-line option --keep 
-
-2010-03-17  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/GFReader.cpp, src/GFReader.h: 
-  replaced GFReader messages by exceptions 
-
-  * src/CharmapTranslator.cpp, src/CharmapTranslator.h, src/DVIToSVG.cpp, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/Font.cpp, src/Font.h, 
-    src/Makefile.am, src/SVGFontEmitter.cpp, src/SVGFontEmitter.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, src/SVGTree.cpp, 
-    src/SVGTree.h: 
-  removed class CharmapTranslator 
-
-  * src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp, 
-    src/DVIToSVGActions.cpp, src/FontManager.cpp, src/FontManager.h, 
-    src/SVGFontEmitter.cpp, src/SVGFontEmitter.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, src/SVGTree.cpp, 
-    src/SVGTree.h, src/VFReader.h, tests/FontManagerTest.cpp: 
-  made FontManager a singleton 
-
-  * src/FontCache.cpp, src/FontCache.h: 
-  added method FontCache::write(const char *dir) that updates the cache 
-  file of the current font 
-
-  * src/DVIToSVG.cpp, src/DVIToSVG.h, src/DVIToSVGActions.cpp, src/Font.cpp, 
-    src/Font.h, src/FontEmitter.h, src/GFGlyphTracer.h, src/Makefile.am, 
-    src/SVGFontEmitter.cpp, src/SVGFontEmitter.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, src/SVGTree.cpp, 
-    src/SVGTree.h, src/dvisvgm.cpp, tests/Makefile.am, tests/check-conv, 
-    tests/create-makefile: 
-  removed emitter classes; incorporated their functionality into SVGTree 
-  and PhysicalFontImpl 
-
-  * src/BoundingBox.cpp, src/Calculator.cpp, src/Matrix.cpp, 
-    src/PSInterpreter.cpp, src/PSInterpreter.h: 
-  fixed a couple of comments 
-
-2010-02-26  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Font.cpp, src/FontCache.cpp, src/FontCache.h, src/GFGlyphTracer.cpp, 
-    src/GFGlyphTracer.h, src/GFReader.cpp, src/GFReader.h, src/GFTracer.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h: 
-  refactorings of GF tracer class; removed transferGlyph() 
-
-2010-02-21  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Font.h, src/FontEncoding.cpp, src/FontEncoding.h, 
-    src/FontManager.cpp, src/FontManager.h, src/SVGFontEmitter.cpp: 
-  moved method encoding() from class FontManager to class FontEncoding 
-
-  * src/CharmapTranslator.cpp, src/CharmapTranslator.h, src/Font.cpp, 
-    src/Font.h, src/FontCache.cpp, src/FontCache.h, src/FontEngine.cpp, 
-    src/FontEngine.h, src/Glyph.cpp, src/Glyph.h, src/Makefile.am, 
-    src/SVGFontEmitter.cpp, src/SVGFontEmitter.h: 
-  removed class Glyph and incorporated its functionality into Font class 
-
-2010-02-05  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac, src/Doxyfile: 
-  set version to 0.8.9dev 
-
-  * src/psdefs.psc: 
-  removed PS error handler nocurrentpoint 
-
-  * src/DVIToSVG.cpp: 
-  added evaluation of literal PS headers to PSHeaderActions 
-
-2010-02-02  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * NEWS, configure.ac, src/Doxyfile: 
-  version updated to 0.8.8 
-
-2010-02-01  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * tests/check-conv: 
-  skip conversion checks by default 
-
-2010-01-31  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * tests/Makefile.am, tests/check-conv, tests/create-makefile, 
-    tests/frktest-nf-cmp.svg, tests/frktest-wf-cmp.svg, tests/frktest.dvi, 
-    tests/normalize.xsl, tests/sample-nf-cmp.svg, tests/sample-wf-cmp.svg, 
-    tests/sample.dvi: 
-  added tests to check conversion results 
-
-  * tests/normalize.xsl: 
-  some improvements to normalize.xsl 
-
-2010-01-29  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/CmdLineParserBase.cpp, src/CmdLineParserBase.h, src/CommandLine.cpp, 
-    src/CommandLine.h: 
-  removed CmdLineParserBase::numOptions() 
-
-  * src/GraphicPath.h: 
-  fixed scaling bug in computation of glyph paths when using -n 
-
-2010-01-24  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/FontCache.h, src/dvisvgm.cpp, src/options.dtd, src/options.xml: 
-  added command-line option --libgs 
-
-2010-01-18  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/CommandLine.cpp, src/options.dtd, src/options.xml: 
-  added DTD for options.xml 
-
-2010-01-17  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac: 
-  updated type of kpathsea_version_string (patch by lomov_vl) 
-
-  * fedora/dvisvgm-gs.patch, fedora/dvisvgm-potrace.patch, 
-    fedora/dvisvgm.spec: 
-  removed fedora directory 
-
-  * doc/dvisvgm.txt.in, src/BoundingBox.cpp, src/BoundingBox.h, 
-    src/DVIToSVG.cpp, tests/BoundingBoxTest.cpp, tests/Makefile.am: 
-  added support for enlarging the minimal bbox by a given amount. 
-
-  * Makefile.am, README, configure.ac, doc/dvisvgm.txt.in, 
-    src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.h, 
-    src/Bitmap.cpp, src/Bitmap.h, src/BoundingBox.cpp, src/BoundingBox.h, 
-    src/Calculator.cpp, src/Calculator.h, src/CharmapTranslator.cpp, 
-    src/CharmapTranslator.h, src/CmdLineParserBase.cpp, 
-    src/CmdLineParserBase.h, src/Color.cpp, src/Color.h, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, 
-    src/CommandLine.cpp, src/CommandLine.h, src/DLLoader.cpp, src/DLLoader.h, 
-    src/DVIActions.cpp, src/DVIActions.h, src/DVIReader.cpp, src/DVIReader.h, 
-    src/DVIToSVG.cpp, src/DVIToSVG.h, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/Directory.cpp, src/Directory.h, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.h, 
-    src/EmSpecialHandler.cpp, src/EmSpecialHandler.h, src/FileFinder.cpp, 
-    src/FileFinder.h, src/FileSystem.cpp, src/FileSystem.h, src/Font.cpp, 
-    src/Font.h, src/FontCache.cpp, src/FontCache.h, src/FontEmitter.h, 
-    src/FontEncoding.cpp, src/FontEncoding.h, src/FontEngine.cpp, 
-    src/FontEngine.h, src/FontManager.cpp, src/FontManager.h, 
-    src/FontMap.cpp, src/FontMap.h, src/GFGlyphTracer.cpp, 
-    src/GFGlyphTracer.h, src/GFReader.cpp, src/GFReader.h, src/GFTracer.cpp, 
-    src/GFTracer.h, src/Ghostscript.cpp, src/Ghostscript.h, src/Glyph.cpp, 
-    src/Glyph.h, src/GraphicPath.h, src/InputBuffer.cpp, src/InputBuffer.h, 
-    src/InputReader.cpp, src/InputReader.h, src/Length.cpp, src/Length.h, 
-    src/Makefile.am, src/Matrix.cpp, src/Matrix.h, src/Message.cpp, 
-    src/Message.h, src/MessageException.h, src/MetafontWrapper.cpp, 
-    src/MetafontWrapper.h, src/PSInterpreter.cpp, src/PSInterpreter.h, 
-    src/PageSize.cpp, src/PageSize.h, src/Pair.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/SVGFontEmitter.cpp, src/SVGFontEmitter.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, src/SVGTree.cpp, 
-    src/SVGTree.h, src/SpecialActions.h, src/SpecialHandler.h, 
-    src/SpecialManager.cpp, src/SpecialManager.h, src/StreamCounter.h, 
-    src/StreamReader.cpp, src/StreamReader.h, src/TFM.cpp, src/TFM.h, 
-    src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.h, src/VFActions.h, 
-    src/VFReader.cpp, src/VFReader.h, src/VectorStream.h, 
-    src/XMLDocTypeNode.h, src/XMLDocument.cpp, src/XMLDocument.h, 
-    src/XMLNode.cpp, src/XMLNode.h, src/XMLString.cpp, src/XMLString.h, 
-    src/dvisvgm.cpp, src/macros.h, src/options.xml, src/psdefs.psc, 
-    src/types.h, tests/BoundingBoxTest.cpp, tests/CalculatorTest.cpp, 
-    tests/ColorSpecialTest.cpp, tests/CommandLineTest.cpp, 
-    tests/DirectoryTest.cpp, tests/FileFinderTest.cpp, 
-    tests/FontManagerTest.cpp, tests/FontMapTest.cpp, 
-    tests/GraphicPathTest.cpp, tests/LengthTest.cpp, tests/Makefile.am, 
-    tests/MatrixTest.cpp, tests/PageSizeTest.cpp, 
-    tests/SplittedCharInputBufferTest.cpp, tests/StreamCounterTest.cpp, 
-    tests/StreamInputBufferTest.cpp, tests/VectorStreamTest.cpp, 
-    tests/create-makefile: 
-  updated boilerplates 
-
-  * doc/dvisvgm.txt.in, src/FileFinder.cpp, src/Ghostscript.cpp, 
-    src/Ghostscript.h, src/dvisvgm.cpp: 
-  environment variable LIBGS can now be used to set the name of the GS 
-  shared library 
-
-  * NEWS: 
-  updated NEWS 
-
-  * src/Ghostscript.cpp: 
-  fixed typo in variable name 
-
-2009-12-16  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/InputReader.cpp: 
-  fixed bug in InputReader::parseUInt() 
-
-2009-12-15  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac, src/dvisvgm.cpp: 
-  appied get_time patch sent by Peter Breitenlohner 
-
-2009-12-02  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/BoundingBox.h, src/Calculator.h, src/CharmapTranslator.h, 
-    src/DVIReader.h, src/DVIToSVG.h, src/DVIToSVGActions.h, src/Font.h, 
-    src/FontEngine.h, src/FontManager.h, src/FontMap.h, src/GFGlyphTracer.h, 
-    src/GFReader.h, src/MessageException.h, src/MetafontWrapper.h, 
-    src/PageSize.h, src/SVGTree.cpp, src/SVGTree.h, src/StreamReader.h, 
-    src/VFActions.h, src/VFReader.h, src/XMLDocTypeNode.h, src/XMLDocument.h, 
-    src/XMLNode.h, src/XMLString.h: 
-  removed using statements from header files 
-
-2009-11-25  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/FontCache.cpp, src/FontCache.h, src/FontEngine.cpp, 
-    src/FontEngine.h, src/FontGlyph.cpp, src/FontGlyph.h, 
-    src/GFGlyphTracer.cpp, src/GFGlyphTracer.h, src/GFTracer.cpp, 
-    src/Glyph.cpp, src/Glyph.h, src/GraphicPath.h, src/Makefile.am, 
-    src/Pair.h, src/SVGFontEmitter.cpp, src/SVGFontTraceEmitter.cpp, 
-    tests/GraphicPathTest.cpp: 
-  removed FEGlyphCommands and replaced separate glyph class implementation 
-  by class GraphicPath 
-
-2009-11-18  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVG.cpp, src/Ghostscript.cpp, src/Ghostscript.h: 
-  replaced #if !DISABLE_GS by #if !defined(DISABLE_GS) (Peter 
-  Breitenlohner) 
-
-  * src/Ghostscript.cpp, src/Ghostscript.h: 
-  replaced #if HAVE_LIBGS by #if defined(HAVE_LIBGS) 
-
-  * src/DLLoader.cpp, src/DLLoader.h: 
-  fixed line endings 
-
-2009-11-17  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * configure.ac, fedora/dvisvgm.spec, src/Doxyfile: 
-  set version number to 0.8.8dev 
-
-  * potracelib/potracelib.c, potracelib/potracelib.h: 
-  replaced outdated string constant type char* by const char* in 
-  potrace_version() 
-
-  * src/Color.cpp, src/ColorSpecialHandler.cpp, src/FontManager.cpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, 
-    src/TpicSpecialHandler.cpp: 
-  added explicit casts to avoid compiler warnings (Peter Breitenlohner) 
-
-  * src/InputReader.cpp: 
-  added missing initialization value (Peter Breitenlohner) 
-
-  * src/CmdLineParserBase.h, src/GraphicPath.h, src/InputReader.h, 
-    src/Makefile.am, src/PSInterpreter.h, src/SpecialManager.h: 
-  added missing virtual destructors to avoid warnings 
-
-  * src/dvisvgm.cpp: 
-  don't use email adress PACKAGE_BUGREPORT for copyright notice 
-
-  * NEWS: 
-  updated NEWS 
-
-2009-11-09  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVG.cpp, src/dvisvgm.cpp: 
-  added total number of pages to message text 
-
-  * NEWS, src/Color.cpp, src/Color.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/SVGTree.cpp: 
-  PS handler: colors set by color specials are now considered properly 
-
-  * configure.ac, fedora/dvisvgm.spec, src/Doxyfile: 
-  set version to 0.8.7 
-
-2009-11-06  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/GraphicPath.h, src/PsSpecialHandler.cpp: 
-  PS handler: replace zero-length paths by dots 
-
-  * NEWS, doc/dvisvgm.txt.in: 
-  updated NEWS and manpage 
-
-  * NEWS, src/PsSpecialHandler.cpp: 
-  fixed path scaling issue in PS handler 
-
-2009-10-29  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DVIToSVGActions.cpp, src/Font.cpp, src/Font.h: 
-  fixed positioning of italic characters 
-
-2009-10-25  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/DvisvgmSpecialHandler.cpp: 
-  added macro {?nl} to dvisvgm:raw evaluator 
-
-2009-10-18  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/Font.cpp, src/TFM.cpp, src/TFM.h: 
-  added italic correction values to character widths 
-
-2009-10-16  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * tests/Makefile.am, tests/create-makefile: 
-  added script to create tests/Makefile.am 
-
-  * configure.ac, src/Doxyfile: 
-  increased version to 0.8.7dev 
-
-2009-10-13  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * doc/Makefile.am, doc/dvisvgm.txt.in: 
-  removed outdated post-processing of manpage 
-
-  * fedora/dvisvgm.spec: 
-  updated spec file 
-
-  * doc/Makefile.am: 
-  added missing dvi suffix in Makefile target dvi-pdf 
-
-  * README, tests/CalculatorTest.cpp, tests/CalculatorTest.h, 
-    tests/ColorSpecialTest.cpp, tests/ColorSpecialTest.h, 
-    tests/CommandLineTest.cpp, tests/CommandLineTest.h, 
-    tests/DirectoryTest.cpp, tests/DirectoryTest.h, tests/FileFinderTest.cpp, 
-    tests/FileFinderTest.h, tests/FontManagerTest.cpp, 
-    tests/FontManagerTest.h, tests/FontMapTest.cpp, tests/FontMapTest.h, 
-    tests/GraphicPathTest.cpp, tests/GraphicPathTest.h, tests/LengthTest.cpp, 
-    tests/LengthTest.h, tests/Makefile.am, tests/MatrixTest.cpp, 
-    tests/MatrixTest.h, tests/PageSizeTest.cpp, tests/PageSizeTest.h, 
-    tests/SplittedCharInputBufferTest.cpp, 
-    tests/SplittedCharInputBufferTest.h, tests/StreamCounterTest.cpp, 
-    tests/StreamCounterTest.h, tests/StreamInputBufferTest.cpp, 
-    tests/StreamInputBufferTest.h, tests/VectorStreamTest.cpp, 
-    tests/VectorStreamTest.h: 
-  replaced cxxtest by googletest 
-
-2009-10-12  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.h, 
-    src/Bitmap.cpp, src/Bitmap.h, src/BoundingBox.cpp, src/BoundingBox.h, 
-    src/Calculator.cpp, src/Calculator.h, src/CharmapTranslator.cpp, 
-    src/CharmapTranslator.h, src/CmdLineParserBase.cpp, 
-    src/CmdLineParserBase.h, src/Color.cpp, src/Color.h, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, src/DLLoader.cpp, 
-    src/DLLoader.h, src/DVIActions.cpp, src/DVIActions.h, src/DVIReader.cpp, 
-    src/DVIReader.h, src/DVIToSVG.h, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/Directory.cpp, src/Directory.h, 
-    src/DvisvgmSpecialHandler.h, src/EmSpecialHandler.cpp, 
-    src/EmSpecialHandler.h, src/FileFinder.cpp, src/FileFinder.h, 
-    src/FileSystem.cpp, src/FileSystem.h, src/Font.cpp, src/Font.h, 
-    src/FontCache.cpp, src/FontCache.h, src/FontEmitter.h, 
-    src/FontEncoding.cpp, src/FontEncoding.h, src/FontEngine.cpp, 
-    src/FontEngine.h, src/FontGlyph.cpp, src/FontGlyph.h, 
-    src/FontManager.cpp, src/FontManager.h, src/FontMap.cpp, src/FontMap.h, 
-    src/GFGlyphTracer.cpp, src/GFGlyphTracer.h, src/GFReader.cpp, 
-    src/GFReader.h, src/GFTracer.cpp, src/GFTracer.h, src/Ghostscript.cpp, 
-    src/Ghostscript.h, src/GraphicPath.h, src/InputBuffer.cpp, 
-    src/InputBuffer.h, src/InputReader.cpp, src/InputReader.h, 
-    src/Matrix.cpp, src/Matrix.h, src/Message.cpp, src/Message.h, 
-    src/MessageException.h, src/MetafontWrapper.cpp, src/MetafontWrapper.h, 
-    src/PSInterpreter.cpp, src/PSInterpreter.h, src/PageSize.cpp, 
-    src/PageSize.h, src/Pair.h, src/SVGFontEmitter.cpp, src/SVGFontEmitter.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, 
-    src/SpecialActions.h, src/SpecialHandler.h, src/SpecialManager.cpp, 
-    src/SpecialManager.h, src/StreamCounter.h, src/StreamReader.cpp, 
-    src/StreamReader.h, src/TFM.cpp, src/TFM.h, src/TpicSpecialHandler.cpp, 
-    src/TpicSpecialHandler.h, src/VFActions.h, src/VFReader.cpp, 
-    src/VFReader.h, src/VectorStream.h, src/XMLDocTypeNode.h, 
-    src/XMLDocument.cpp, src/XMLDocument.h, src/XMLNode.cpp, src/XMLNode.h, 
-    src/XMLString.cpp, src/XMLString.h, src/macros.h, src/types.h: 
-  code cleanup 
-
-2009-10-11  Martin Gieseking  <mgieseki at users.sourceforge.net>
-
-  * autogen.sh: 
-  fixed file permissions of autogen.sh 
-
-  * src/DVIToSVG.cpp, src/DvisvgmSpecialHandler.cpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, src/SVGTree.cpp, 
-    src/SVGTree.h: 
-  suppress empty style and transformation elements 
-
-  * NEWS: 
-  NEWS updated 
-
-2009-10-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  scale clipping paths by 72.27/72 
-
-2009-10-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Bitmap.h: 
-  fixed bit shift overflow in Bitmap class occured on 64-bit systems 
-
-  * autogen.sh, prepare: 
-  prepare script replaced by autogen.sh 
-
-  * doc/dvisvgm.txt.in: 
-  fixed formatting of manual page 
-
-  * src/Length.cpp, src/Length.h, tests/LengthTest.h: 
-  fixed unit conversion bug 
-
-  * src/Makefile.am: 
-  fixed Makefile 
-
-2009-10-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, doc/dvisvgm.txt.in, src/BoundingBox.cpp, src/CommandLine.cpp, 
-    src/CommandLine.h, src/DVIToSVG.cpp, src/DVIToSVG.h, src/dvisvgm.cpp, 
-    src/options.xml, tests/CommandLineTest.h, tests/Makefile.am: 
-  cmdline parameter --bbox can now be used to set the absolute bounding 
-  box 
-
-  * NEWS, src/GraphicPath.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h: 
-  PS clipping path sequences and intersections are now handled correctly 
-
-  * src/MetafontWrapper.cpp: 
-  fixed file permissions 
-
-  * src/dvisvgm.cpp: 
-  fixed uncaught PageSizeException 
-
-2009-10-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, doc/dvisvgm.txt.in, src/BoundingBox.cpp, src/BoundingBox.h, 
-    src/DvisvgmSpecialHandler.cpp: 
-  added the special variant 'dvisvgm:bbox abs' and 'dvisvgm:bbox fix' 
-
-  * src/BoundingBox.cpp, src/BoundingBox.h, src/Length.cpp, src/Length.h, 
-    src/Makefile.am, tests/LengthTest.h: 
-  class Length provides length unit calculations 
-
-2009-10-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BoundingBox.cpp, src/BoundingBox.h, src/GraphicPath.h, 
-    src/PSInterpreter.cpp, src/PSInterpreter.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/psdefs.psc: 
-  fixed some PS bounding box and positioning issues introduced by previous 
-  changesets 
-
-  * NEWS, configure.ac, fedora/dvisvgm.spec, src/Doxyfile: 
-  set version to 0.8.6 
-
-2009-10-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  convert PS path coordinated to TeX point units 
-
-  * NEWS, src/PsSpecialHandler.cpp: 
-  fixed another positioning bug reported by John Bowman 
-
-2009-10-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GraphicPath.h, src/PsSpecialHandler.cpp, src/PsSpecialHandler.h: 
-  corrected positioning bug introduced with previous PS positioning fix 
-
-2009-10-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/Makefile.am, doc/dvisvgm.txt.in: 
-  generate pdf manpage directly with groff; adapted manpage source to work 
-  with latest asciidoc 
-
-2009-10-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/Makefile.am, doc/dvisvgm.txt.in: 
-  replaced backticks in manpage by apostrophes; updated date on homepage 
-
-2009-09-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DvisvgmSpecialHandler.cpp: 
-  added optional depth parameter to special dvisvgm:raw 
-
-  * doc/dvisvgm.txt.in: 
-  added dvisvgm:raw example to man page 
-
-  * LGPL-2.1.txt, NEWS, README: 
-  updated README and NEWS, and added file with LGPL license text 
-
-  * Makefile.am, configure.ac, fedora/dvisvgm.spec, src/Doxyfile: 
-  increased version number to 0.8.5 
-
-2009-09-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS: 
-  added cretdit to John Bowman for sending a patch for the already fixed 
-  clipping bug 
-
-  * src/PsSpecialHandler.h: 
-  increased the default linewidth to 0.5 
-
-  * fedora/dvisvgm.spec: 
-  updated spec file and fixed typo on website 
-
-  * doc/dvisvgm.txt.in: 
-  minor changes of the documentation 
-
-2009-09-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, src/CmdLineParserBase.cpp, src/FontCache.cpp, 
-    src/SVGFontTraceEmitter.cpp: 
-  fixed memory bug in tracer module (issue #21) 
-
-  * NEWS, doc/dvisvgm.txt.in, src/CommandLine.cpp, src/CommandLine.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/SpecialManager.cpp, 
-    src/SpecialManager.h, src/dvisvgm.cpp, src/options.xml: 
-  added option --progress for enabling a progress indicator (feature #22) 
-
-  * src/FileSystem.cpp, src/MetafontWrapper.cpp: 
-  Windows: Metafont is now called via CreateProcess() 
-
-2009-09-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.h, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, src/DVIToSVG.cpp, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.h, 
-    src/EmSpecialHandler.cpp, src/EmSpecialHandler.h, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, src/SpecialHandler.h, 
-    src/SpecialManager.cpp, src/TpicSpecialHandler.cpp, 
-    src/TpicSpecialHandler.h: 
-  refactored prefixes methods of the SpecialHandlers (ticket #20) 
-
-  * NEWS, doc/dvisvgm.txt.in, src/FileSystem.cpp, src/FileSystem.h, 
-    src/FontCache.cpp, src/FontCache.h, src/dvisvgm.cpp: 
-  option --cache prints additional information about the cached fonts 
-  (feature #7) 
-
-  * src/FileSystem.cpp, src/FontCache.cpp: 
-  fixed Windows-related bug in FileSystem::collect 
-
-2009-09-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, README: 
-  updated NEWS and README 
-
-2009-09-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, fedora/dvisvgm.spec, src/Doxyfile: 
-  increased version number to 0.8.4 
-
-  * src/BoundingBox.cpp, src/BoundingBox.h, src/PsSpecialHandler.cpp: 
-  linewidths are now considered properly in computation of bounding box 
-  (issue #13) 
-
-  * src/dvisvgm.cpp: 
-  fixed evaluation of option --help 
-
-  * src/CmdLineParserBase.cpp, src/CmdLineParserBase.h, src/CommandLine.cpp, 
-    src/InputBuffer.h, src/InputReader.h, src/psdefs.psc, 
-    tests/CommandLineTest.h: 
-  improved the command line parser to make it more POSIX-compliant 
-  (feature #17) 
-
-2009-09-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp, src/psdefs.psc: 
-  fixed flattened clipping path bug (issue #11) 
-
-2009-08-31  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Makefile.am: 
-  added error checks; disallow numeric optional arguments w/o default 
-  value 
-
-2009-08-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, src/PSInterpreter.cpp, src/PsSpecialHandler.cpp, src/dvisvgm.cpp, 
-    src/psdefs.psc: 
-  added evaluation of PS 'show' operator in order to evaluate PSTricks 
-  Type 3 fonts properly 
-
-  * fedora/dvisvgm.spec: 
-  updated spec file and homepage to latest release 
-
-2009-08-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, configure.ac, doc/dvisvgm.txt.in, src/CmdLineParserBase.cpp, 
-    src/CommandLine.cpp, src/Doxyfile, src/dvisvgm.cpp, src/getopt.c, 
-    src/getopt.h, src/getopt1.c, src/options.xml: 
-  replaced option --cache=? by --cache; increased version number to 0.8.3 
-
-2009-08-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * fedora/dvisvgm-0.8.1-potrace.patch, fedora/dvisvgm-gs.patch, 
-    fedora/dvisvgm-potrace.patch, fedora/dvisvgm.spec: 
-  updated Fedora files 
-
-  * configure.ac, fedora/dvisvgm.spec, src/Ghostscript.cpp, 
-    src/Ghostscript.h, src/Makefile.am: 
-  improved Ghostscript and potrace linking checks to simplify usage of 
-  external devel files 
-
-  * NEWS, configure.ac, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/PsSpecialHandler.cpp, 
-    src/SpecialManager.cpp, src/SpecialManager.h: 
-  PS prologue files referenced in first page are now always loaded 
-
-2009-08-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CommandLine.cpp, src/CommandLine.h: 
-  speed up printing help by using puts() instead of C++ streams 
-
-2009-08-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontMap.cpp: 
-  fixed memory bug in FontMap 
-
-  * src/CmdLineParserBase.cpp, src/CmdLineParserBase.h, src/Makefile.am, 
-    src/dvisvgm.cpp, src/options.xml, tests/CommandLineTest.h, 
-    tests/Makefile.am: 
-  improved CmdLineParserBase and replaced gengetopt-based parser 
-
-  * NEWS, configure.ac, src/CmdLineParserBase.cpp, src/CmdLineParserBase.h, 
-    src/Doxyfile: 
-  increased version number to 0.8.2 
-
-2009-08-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/InputReader.cpp, src/InputReader.h: 
-  added method parseUInt() 
-
-  * src/CmdLineParserBase.cpp, src/CmdLineParserBase.h, src/options.xml: 
-  added files for replacement of gengetopt (not active yet) 
-
-  * src/CmdLineParserBase.cpp, src/CmdLineParserBase.h: 
-  finished cmdline parser 
-
-  * COPYING: 
-  added copy of file COPYING 
-
-2009-08-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * tests/Makefile.am: 
-  added include path to fix broken distcheck 
-
-  * COPYING, LICENSE, Makefile.am, README, doc/dvisvgm.txt.in, 
-    src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.h, 
-    src/Bitmap.cpp, src/Bitmap.h, src/BoundingBox.cpp, src/BoundingBox.h, 
-    src/Calculator.cpp, src/Calculator.h, src/CharmapTranslator.cpp, 
-    src/CharmapTranslator.h, src/Color.cpp, src/Color.h, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, src/DLLoader.cpp, 
-    src/DLLoader.h, src/DVIActions.cpp, src/DVIActions.h, src/DVIReader.cpp, 
-    src/DVIReader.h, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/Directory.cpp, 
-    src/Directory.h, src/DvisvgmSpecialHandler.cpp, 
-    src/DvisvgmSpecialHandler.h, src/EmSpecialHandler.cpp, 
-    src/EmSpecialHandler.h, src/FileFinder.cpp, src/FileFinder.h, 
-    src/FileSystem.cpp, src/FileSystem.h, src/Font.cpp, src/Font.h, 
-    src/FontCache.cpp, src/FontCache.h, src/FontEmitter.h, 
-    src/FontEncoding.cpp, src/FontEncoding.h, src/FontEngine.cpp, 
-    src/FontEngine.h, src/FontGlyph.cpp, src/FontGlyph.h, 
-    src/FontManager.cpp, src/FontManager.h, src/FontMap.cpp, src/FontMap.h, 
-    src/GFGlyphTracer.cpp, src/GFGlyphTracer.h, src/GFReader.cpp, 
-    src/GFReader.h, src/GFTracer.cpp, src/GFTracer.h, src/Ghostscript.cpp, 
-    src/Ghostscript.h, src/GraphicPath.h, src/InputBuffer.cpp, 
-    src/InputBuffer.h, src/InputReader.cpp, src/InputReader.h, 
-    src/Matrix.cpp, src/Matrix.h, src/Message.cpp, src/Message.h, 
-    src/MessageException.h, src/MetafontWrapper.cpp, src/MetafontWrapper.h, 
-    src/PSInterpreter.cpp, src/PSInterpreter.h, src/PageSize.cpp, 
-    src/PageSize.h, src/Pair.h, src/PsSpecialHandler.cpp, 
-    src/PsSpecialHandler.h, src/SVGFontEmitter.cpp, src/SVGFontEmitter.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, src/SVGTree.cpp, 
-    src/SVGTree.h, src/SpecialActions.h, src/SpecialHandler.h, 
-    src/SpecialManager.cpp, src/SpecialManager.h, src/StreamCounter.h, 
-    src/StreamReader.cpp, src/StreamReader.h, src/TFM.cpp, src/TFM.h, 
-    src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.h, src/VFActions.h, 
-    src/VFReader.cpp, src/VFReader.h, src/VectorStream.h, 
-    src/XMLDocTypeNode.h, src/XMLDocument.cpp, src/XMLDocument.h, 
-    src/XMLNode.cpp, src/XMLNode.h, src/XMLString.cpp, src/XMLString.h, 
-    src/dvisvgm.cpp, src/inttypes.h, src/macros.h, src/psdefs.psc, 
-    src/types.h, tests/CalculatorTest.h, tests/ColorSpecialTest.h, 
-    tests/DirectoryTest.h, tests/FileFinderTest.h, tests/FontManagerTest.h, 
-    tests/FontMapTest.h, tests/GraphicPathTest.h, tests/MatrixTest.h, 
-    tests/PageSizeTest.h, tests/SplittedCharInputBufferTest.h, 
-    tests/StreamCounterTest.h, tests/StreamInputBufferTest.h, 
-    tests/VectorStreamTest.h: 
-  changed license to GPL version 3 or later 
-
-2009-08-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * fedora/dvisvgm-0.8.1-potrace.patch, fedora/dvisvgm.spec: 
-  added spec file and patch for Fedora builds 
-
-  * Makefile.am, configure.ac, src/Makefile.am, src/tests/CalculatorTest.h, 
-    src/tests/ColorSpecialTest.h, src/tests/DirectoryTest.h, 
-    src/tests/FileFinderTest.h, src/tests/FontManagerTest.h, 
-    src/tests/FontMapTest.h, src/tests/GraphicPathTest.h, 
-    src/tests/MatrixTest.h, src/tests/PageSizeTest.h, 
-    src/tests/SplittedCharInputBufferTest.h, src/tests/StreamCounterTest.h, 
-    src/tests/StreamInputBufferTest.h, src/tests/VectorStreamTest.h, 
-    src/tests/dvipdfm_test.map, src/tests/dvips_test.map, 
-    tests/CalculatorTest.h, tests/ColorSpecialTest.h, tests/DirectoryTest.h, 
-    tests/FileFinderTest.h, tests/FontManagerTest.h, tests/FontMapTest.h, 
-    tests/GraphicPathTest.h, tests/Makefile.am, tests/MatrixTest.h, 
-    tests/PageSizeTest.h, tests/SplittedCharInputBufferTest.h, 
-    tests/StreamCounterTest.h, tests/StreamInputBufferTest.h, 
-    tests/VectorStreamTest.h, tests/dvipdfm_test.map, tests/dvips_test.map: 
-  moved tests from src/tests to ./tests 
-
-  * tests/Makefile.am: 
-  added generated file test-all.cpp to CLEANFILES 
-
-2009-08-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * LICENSE, Makefile.am, src/Ghostscript.cpp: 
-  modified package to be compatible with prerequisites of Fedora 
-
-2009-07-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, src/DVIToSVG.cpp: 
-  added target triplet to version string in SVG output 
-
-  * src/DVIToSVGActions.cpp, src/Ghostscript.cpp, src/Ghostscript.h, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h: 
-  added Ghostscript revision info to output of dvisvgm -l 
-
-2009-07-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/psdefs.psc: 
-  added vim tag to psdefs.psc 
-
-2009-07-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PsSpecialHandler.cpp: 
-  added evaluation of more psfile parameters; fixed psfile bounding box 
-  bug 
-
-  * NEWS, configure.ac, src/Doxyfile: 
-  updated version number to 0.8.1 
-
-  * NEWS, src/FileSystem.cpp, src/FontEngine.cpp, src/FontManager.cpp, 
-    src/Ghostscript.cpp, src/PageSize.cpp, src/dvisvgm.cpp: 
-  fixed bug related to unsigned/size_t mismatch on x64 systems 
-
-  * src/psdefs.psc: 
-  cleaned up VC++ build files; added batch file to generate cmdline.c; 
-  added generated file psdefs.psc for convenience 
-
-2009-07-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DLLoader.cpp, src/InputReader.cpp, src/PSInterpreter.cpp: 
-  changes to make VC happy; fixed potential memory bug 
-
-  * NEWS, README: 
-  fixed typos; updated homepage/manpage 
-
-  * src/DVIReader.h, src/InputBuffer.cpp, src/InputBuffer.h, 
-    src/InputReader.cpp, src/InputReader.h, src/Matrix.cpp, src/Matrix.h, 
-    src/PSInterpreter.h: 
-  replaced size_t parameters by unsigned 
-
-2009-07-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/PSInterpreter.cpp: 
-  some clean-ups 
-
-2009-07-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, README, doc/dvisvgm.txt.in, src/BoundingBox.cpp, 
-    src/BoundingBox.h, src/GraphicPath.h, src/PSInterpreter.cpp, 
-    src/PsSpecialHandler.cpp, src/PsSpecialHandler.h: 
-  fixed clipping bug; updated homepage, README, NEWS 
-
-  * src/TpicSpecialHandler.cpp: 
-  fixed reintroduced bug in TPIC handler 
-
-2009-07-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DvisvgmSpecialHandler.cpp, src/InputBuffer.cpp, src/InputReader.cpp, 
-    src/InputReader.h, src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, 
-    src/tests/StreamInputBufferTest.h: 
-  implemented psfile special; fixed some bugs 
-
-  * src/PsSpecialHandler.cpp, src/SVGTree.cpp: 
-  fixed bbox bug; added missing file 
-
-2009-07-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, doc/dvisvgm.txt.in, src/BoundingBox.cpp, 
-    src/BoundingBox.h, src/Color.cpp, src/Color.h, src/DLLoader.cpp, 
-    src/DLLoader.h, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/Doxyfile, 
-    src/DvisvgmSpecialHandler.cpp, src/EmSpecialHandler.cpp, 
-    src/FileFinder.cpp, src/FontEncoding.cpp, src/Ghostscript.cpp, 
-    src/Ghostscript.h, src/GraphicPath.h, src/InputBuffer.cpp, 
-    src/InputBuffer.h, src/InputReader.cpp, src/InputReader.h, 
-    src/Makefile.am, src/Matrix.cpp, src/Matrix.h, src/PSInterpreter.cpp, 
-    src/PSInterpreter.h, src/PsSpecialHandler.cpp, src/PsSpecialHandler.h, 
-    src/SVGFontEmitter.cpp, src/SVGFontEmitter.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, src/SVGTree.h, 
-    src/SpecialActions.h, src/TpicSpecialHandler.cpp, 
-    src/TransformationMatrix.cpp, src/TransformationMatrix.h, 
-    src/XMLDocument.cpp, src/XMLDocument.h, src/XMLNode.cpp, src/XMLNode.h, 
-    src/iapi.h, src/ierrors.h, src/tests/GraphicPathTest.h, 
-    src/tests/MatrixTest.h, src/tests/SplittedCharInputBufferTest.h, 
-    src/tests/StreamInputBufferTest.h: 
-  transplanted PS functionality to default branch 
-
-2009-06-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GFReader.cpp, src/GFReader.h: 
-  removed error method, use Message::estream instead 
-
-  * src/InputBuffer.cpp, src/InputBuffer.h, src/Makefile.am: 
-  transplanted changes to InputBuffer from branch 'pages' 
-
-  * src/Bitmap.cpp, src/Bitmap.h: 
-  transplanted changes to Bitmap from branch 'pages' 
-
-  * src/DVIReader.cpp, src/DVIReader.h: 
-  transplanted changes to DVIReader from branch 'pages' 
-
-  * src/FileSystem.cpp, src/FileSystem.h: 
-  transplanted changes to FileSystem from branch 'pages' 
-
-  * src/VFReader.cpp: 
-  transplanted changes to VFReader from branch 'pages' 
-
-  * src/GFTracer.cpp: 
-  transplanted changes to GFTracer from branch 'pages' 
-
-  * src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.h, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, 
-    src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.h, 
-    src/EmSpecialHandler.cpp, src/EmSpecialHandler.h, src/SpecialHandler.h, 
-    src/SpecialManager.cpp, src/SpecialManager.h, src/TpicSpecialHandler.cpp, 
-    src/TpicSpecialHandler.h: 
-  transplanted changes to SpecialHandlers from branch 'pages' 
-
-2009-04-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/TpicSpecialHandler.cpp: 
-  fixed TPIC handler bug that could caused unwanted color fills of 
-  ellipses due to a missing call of reset() 
-
-  * NEWS, configure.ac, src/Doxyfile: 
-  increased version number to 0.7.3 
-
-  * src/FontCache.h: 
-  increased version of font cache files to ensure their recreation due to 
-  the previously fixed shorthand path command bug 
-
-2009-04-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontGlyph.cpp: 
-  fixed bug in computation of shorthand path command 
-
-2009-04-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontMap.cpp: 
-  fixed bug in FontMap that causes a segfault if extension in given font 
-  file is missing (reported by Armin Geisse) 
-
-2009-04-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * configure.ac, doc/dvisvgm.txt.in, src/MetafontWrapper.cpp, 
-    src/dvisvgm.cpp: 
-  prepared release 0.7.2 (removed inclusions of debug.h, adapted homepage 
-  and manpage) 
-
-2009-03-31  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/MetafontWrapper.cpp, src/MetafontWrapper.h: 
-  ported fix in MetafontWrapper back to default branch 
-
-2009-03-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVG.cpp, src/DVIToSVG.h, src/FontGlyph.cpp, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, src/dvisvgm.cpp: 
-  replaced Metafont magnification variable and its setters by a public 
-  class variable 
-
-  * src/Doxyfile: 
-  added doxygen files 
-
-  * src/SVGFontTraceEmitter.cpp: 
-  fixed closing bracket "bug" when writing the currently traced character 
-  to the terminal 
-
-2009-03-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, src/FontCache.cpp, src/FontGlyph.cpp, src/FontGlyph.h, 
-    src/GFGlyphTracer.cpp, src/Pair.h, src/SVGFontEmitter.cpp: 
-  use of shorthand path commands has been implemented 
-
-  * src/FontGlyph.cpp: 
-  fixed potential bug in Glyph::optimizeCommands() 
-
-  * src/FontGlyph.cpp: 
-  fixed memory bug in Glyph::optimizeCommands() 
-
-2009-03-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontCache.cpp: 
-  cache files are being compressed now to reduce the file size 
-
-2009-03-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, doc/dvisvgm.txt.in, src/FontEmitter.h, src/GFGlyphTracer.cpp, 
-    src/SVGFontEmitter.cpp, src/SVGFontEmitter.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, src/dvisvgm.cpp, 
-    src/options.ggo: 
-  added option --trace-all that forces tracing of all glyphs of all 
-  currently used bitmap fonts 
-
-  * src/FontCache.cpp, src/SVGFontTraceEmitter.cpp: 
-  don't read existing cache file if --trace-all is given (trace complete 
-  font and then write cache file instead) 
-
-2009-03-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontCache.cpp: 
-  fixed bug in read/write functions of FontCache 
-
-  * src/DVIToSVG.cpp, src/TFM.cpp, src/TFM.h: 
-  added firstChar()/lastChar() to TFM class, removed unnecessary mag 
-  member variable and its setter 
-
-2009-03-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.txt.in, src/DVIToSVG.cpp, src/FileSystem.cpp, 
-    src/FileSystem.h, src/FontCache.cpp, src/FontCache.h, src/FontGlyph.h, 
-    src/GFGlyphTracer.cpp, src/GFGlyphTracer.h, src/Makefile.am, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, src/dvisvgm.cpp: 
-  completed font caching support 
-
-  * doc/dvisvgm.txt.in, src/dvisvgm.cpp: 
-  added option variant --cache=? to display the default cache directory 
-
-  * src/FontCache.cpp: 
-  reduced size of cache file format by using variable integer sizes 
-
-2009-03-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, configure.ac, doc/dvisvgm.txt.in, src/DVIToSVG.cpp, 
-    src/FileSystem.cpp, src/FileSystem.h, src/FontCache.cpp, src/FontCache.h, 
-    src/FontGlyph.cpp, src/FontGlyph.h, src/GFGlyphTracer.cpp, 
-    src/GFGlyphTracer.h, src/GFTracer.cpp, src/options.ggo: 
-  first additions to support font caching; not working yet 
-
-2009-03-11  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.h, src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/FontEmitter.h, src/SVGFontEmitter.cpp, 
-    src/SVGFontEmitter.h, src/SVGFontTraceEmitter.cpp, 
-    src/SVGFontTraceEmitter.h: 
-  improved font embedding algorithm in case of --no-fonts (identical 
-  glyphs in different sizes are now referenced rather than duplicated) 
-
-2009-03-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, src/Font.h, 
-    src/SVGFontEmitter.cpp, src/SVGFontTraceEmitter.cpp: 
-  all glyph sizes are now computed correctly in conjuction with option 
-  --no-fonts 
-
-2009-03-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BgColorSpecialHandler.cpp, src/SpecialManager.cpp, 
-    src/TpicSpecialHandler.cpp: 
-  adapted Code to make VC happy 
-
-  * src/types.h: 
-  minor changes to homepage and .hgignore 
-
-  * src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp: 
-  fixed transformation bug (transformations are now applied properly to 
-  the page) 
-
-2009-03-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, README, src/Color.cpp, src/Color.h, src/ColorSpecialHandler.cpp, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, 
-    src/DvisvgmSpecialHandler.cpp, src/EmSpecialHandler.cpp, src/Makefile.am, 
-    src/TpicSpecialHandler.cpp: 
-  added bgcolor support, updated homepage, fixed color handler bug 
-
-  * src/BgColorSpecialHandler.cpp, src/BgColorSpecialHandler.h: 
-  added missing background color handler 
-
-2009-03-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.h: 
-  implemented arc drawing of tpic special set 
-
-  * src/TpicSpecialHandler.cpp, src/TpicSpecialHandler.h: 
-  implemented splines of tpic specials 
-
-2009-03-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/BoundingBox.cpp, src/BoundingBox.h, src/Color.cpp, 
-    src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, src/DVIActions.h, 
-    src/DVIBBoxActions.h, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/EmSpecialHandler.cpp, 
-    src/Makefile.am, src/SpecialActions.h, src/SpecialHandler.h, 
-    src/TpicSpecialHandler.cpp: 
-  improved computation of the bounding box (works with specials now); 
-  added dummy function for background color assignments 
-
-  * doc/Makefile.am, doc/dvisvgm.txt.in, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/DvisvgmSpecialHandler.cpp, 
-    src/DvisvgmSpecialHandler.h, src/InputBuffer.cpp, src/InputBuffer.h, 
-    src/SpecialActions.h: 
-  implemented the dvisvgm specials raw, image, and bbox 
-
-  * doc/dvisvgm.txt.in, src/DvisvgmSpecialHandler.cpp, 
-    src/DvisvgmSpecialHandler.h: 
-  minor code improvements; comments added 
-
-2009-02-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/Makefile.am, doc/dvisvgm.txt, doc/dvisvgm.txt.in: 
-  removed generated file, added dvisvgm.txt.in 
-
-  * doc/Makefile.am, doc/dvisvgm.txt.in: 
-  improved manpage 
-
-2009-02-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, 
-    src/DvisvgmSpecialHandler.cpp, src/EmSpecialHandler.cpp, 
-    src/SpecialActions.h, src/TpicSpecialHandler.cpp: 
-  renamed appendInPage() to appendToPage 
-
-2009-02-24  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, 
-    src/DVIToSVGActions.cpp, src/DvisvgmSpecialHandler.cpp, 
-    src/DvisvgmSpecialHandler.h, src/EmSpecialHandler.cpp, 
-    src/EmSpecialHandler.h, src/Makefile.am, src/SpecialColorHandler.cpp, 
-    src/SpecialColorHandler.h, src/SpecialDvisvgmHandler.cpp, 
-    src/SpecialDvisvgmHandler.h, src/SpecialEmHandler.cpp, 
-    src/SpecialEmHandler.h, src/SpecialHandler.h, src/SpecialHtmlHandler.h, 
-    src/SpecialManager.cpp, src/SpecialManager.h, 
-    src/tests/ColorSpecialTest.h: 
-  improved SpecialHandler is now able to handle unprefixed specials 
-
-  * NEWS, src/Color.cpp, src/Color.h, src/DVIToSVGActions.cpp, 
-    src/Makefile.am, src/Pair.h, src/SpecialHandler.h, 
-    src/SpecialManager.cpp, src/SpecialManager.h, src/TpicSpecialHandler.cpp, 
-    src/TpicSpecialHandler.h: 
-  first tpic implementations; not complete yet 
-
-  * NEWS, doc/dvisvgm.1.in, src/TpicSpecialHandler.cpp: 
-  few additions to tpic handler 
-
-2009-02-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, configure.ac, doc/dvisvgm.1.in, src/DVIBBoxActions.h, 
-    src/DVIReader.h, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp, src/FontEmitter.h, src/FontEngine.cpp, 
-    src/FontEngine.h, src/FontGlyph.cpp, src/FontGlyph.h, 
-    src/SVGFontEmitter.cpp, src/SVGFontEmitter.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, src/XMLNode.cpp, 
-    src/XMLNode.h, src/dvisvgm.cpp, src/options.ggo, 
-    src/tests/ColorSpecialTest.h: 
-  added option --no-fonts wich uses path elements instead of fonts 
-
-2009-02-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, doc/dvisvgm.1.in, src/Color.cpp, src/Color.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/Makefile.am, 
-    src/SpecialActions.h, src/SpecialColorHandler.cpp, 
-    src/SpecialDvisvgmHandler.cpp, src/SpecialDvisvgmHandler.h, 
-    src/SpecialEmHandler.cpp, src/SpecialEmHandler.h, 
-    src/SpecialHtmlHandler.h, src/VerbSpecialHandler.cpp, 
-    src/VerbSpecialHandler.h: 
-  fixed bug in color handler, added skeletons of dvisvgm/hyperref special 
-  handlers 
-
-2009-02-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Color.h, src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, 
-    src/Makefile.am, src/SpecialActions.h, src/SpecialColorHandler.cpp, 
-    src/SpecialEmHandler.cpp: 
-  added color support to emTeX specials, removed Color class 
-
-  * NEWS, src/SpecialActions.h, src/tests/ColorSpecialTest.h: 
-  adapted color test to new interface, added emtex info 
-
-2009-02-17  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp: 
-  made DVICommand local to executeCommand, removed unnecessary if 
-  statement 
-
-2009-02-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Color.h, src/DVIToSVGActions.cpp, src/DVIToSVGActions.h: 
-  finished color support 
-
-  * src/dvisvgm.cpp: 
-  fixed incorrect behavior of option -V/--version 
-
-  * NEWS, configure.ac: 
-  increased version number to 0.6.2, updated NEWS 
-
-  * doc/dvisvgm.1.in, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp, src/dvisvgm.cpp, src/options.ggo: 
-  added option --no-style 
-
-  * NEWS, configure.ac: 
-  prepared release of version 0.7 
-
-2009-02-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * Makefile.am, configure.ac, src/tests/DirectoryTest.h: 
-  removed rpm support 
-
-  * prepare: 
-  added administrative files 
-
-  * src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h: 
-  reverted to previous version, removed dependency on Color class 
-
-  * src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/Makefile.am, 
-    src/SpecialActions.h, src/SpecialHandler.h, src/SpecialManager.cpp, 
-    src/SpecialManager.h: 
-  color specials are now processed by DVIToSVGActions, but don't create 
-  any results yet 
-
-  * prepare: 
-  updated administrative files 
-
-  * src/ColorSpecialHandler.cpp, src/Makefile.am, 
-    src/tests/ColorSpecialTest.h: 
-  added tests for ColorSpecialHandler 
-
-2009-02-12  martin at xps  <martin at xps>
-
-  * src/inttypes.h: 
-  added rudimentary files for writing of SWF files; not ready yet 
-
-2009-02-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Color.h, src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, 
-    src/Makefile.am: 
-  replaced RGB arrays by Color class 
-
-2009-02-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/TransformationMatrix.cpp: 
-  made y-coordinate of cmdline-option -t optional 
-
-2009-02-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/dvisvgm.1.in, src/ColorSpecialHandler.h, src/DVIToSVG.cpp, 
-    src/DVIToSVG.h, src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, 
-    src/SpecialHandler.h, src/SpecialManager.cpp, src/SpecialManager.h, 
-    src/dvisvgm.cpp, src/options.ggo: 
-  added option --list-specials that lists all registered special handlers 
-
-  * src/FileFinder.cpp: 
-  changed lookup order of font maps 
-
-2009-02-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIToSVG.cpp, src/DVIToSVG.h, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/dvisvgm.cpp, src/options.ggo: 
-  added optional prefix list to commandline option --no-specials 
-
-  * src/DVIToSVGActions.cpp: 
-  replaced special ignore list evaluation algorithm 
-
-2009-02-04  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FileFinder.cpp: 
-  added option for additional loading of user maps 
-
-  * src/FontMap.cpp: 
-  added output of font encoding in write method 
-
-2009-02-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/SpecialHandler.h, 
-    src/SpecialManager.cpp, src/SpecialManager.h, src/options.ggo: 
-  more color special implementation (color constants), still not ready 
-
-  * src/FileFinder.cpp, src/FileFinder.h, src/dvisvgm.cpp: 
-  option -m/--map-file is now evaluated properly 
-
-  * map/cork-lm.map: 
-  removed deprecated map subdirectory 
-
-2009-02-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, src/FileFinder.cpp: 
-  fixed buggy call of maketfm/makemf in Windows version 
-
-  * src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h, src/Makefile.am, 
-    src/SpecialHandler.h, src/SpecialManager.cpp, src/SpecialManager.h: 
-  added special support skeletons; not working yet 
-
-  * src/ColorSpecialHandler.cpp, src/ColorSpecialHandler.h: 
-  some refactorings in color handler 
-
-2009-01-30  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/dvisvgm.cpp: 
-  prevented writing zero-length svg files; simplified main code by using 
-  auto pointers 
-
-  * NEWS, src/DVIReader.cpp, src/DVIReader.h: 
-  fixed magnification bug 
-
-2009-01-29  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FileFinder.cpp: 
-  adapted Windows version to new release 
-
-2009-01-28  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FileFinder.cpp, src/FileFinder.h, src/Makefile.am, 
-    src/tests/DirectoryTest.h, src/tests/FileFinderTest.h, 
-    src/tests/FontManagerTest.h, src/tests/KPSFileFinderTest.h: 
-  refactored FileFinder (implementation as singleton) 
-
-  * src/dvisvgm.cpp: 
-  use new initialisation of FileFinder 
-
-  * src/GFReader.h, src/GFTracer.cpp, src/GFTracer.h: 
-  improved GFTracer to support unscaled results 
-
-  * src/FontMap.cpp, src/Makefile.am, src/tests/FontMapTest.h, 
-    src/tests/dvipdfm_test.map, src/tests/dvips_test.map: 
-  extensions to FontMap almost complete but not finished yet 
-
-  * src/Calculator.cpp, src/DVIToSVG.cpp, src/FontEncoding.cpp, 
-    src/FontMap.cpp, src/SVGFontEmitter.cpp, src/SVGFontTraceEmitter.cpp: 
-  replaced comparisions with "" with calls of empty() 
-
-  * src/FileFinder.cpp, src/FontMap.cpp, src/FontMap.h, 
-    src/tests/FontMapTest.h, src/tests/dvips_test.map: 
-  FontMap now supports dvips and dvipdfm maps 
-
-  * NEWS, configure.ac, doc/dvisvgm.1.in: 
-  adapted configuration and documentation to new dvips map file support 
-
-2009-01-27  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/GFGlyphTracer.cpp, src/GFGlyphTracer.h, src/GFTracer.cpp, 
-    src/GFTracer.h, src/Makefile.am, src/SVGFontTraceEmitter.cpp, 
-    src/SVGFontTraceEmitter.h: 
-  made GFTracer a generic class with template methods 
-
-2009-01-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Bitmap.cpp, src/Bitmap.h, src/GFReader.cpp, src/GFReader.h, 
-    src/GFTracer.cpp, src/Makefile.am: 
-  improvements to GF handling, first skeletton of gf->metapost (gfprint) 
-
-  * src/InputBuffer.h: 
-  fixed incompatible types bug 
-
-2009-01-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/InputBuffer.cpp, src/InputBuffer.h: 
-  added missing include 
-
-  * src/FontMap.cpp, src/FontMap.h: 
-  started redesign of FontMap, not complete yet 
-
-  * src/CharmapTranslator.cpp, src/DVIToSVG.cpp, src/FileFinder.cpp, 
-    src/FileFinder.h, src/Font.cpp, src/FontEncoding.cpp, 
-    src/FontManager.cpp, src/KPSFileFinder.cpp, src/KPSFileFinder.h, 
-    src/Makefile.am, src/MetafontWrapper.cpp, src/TFM.cpp, src/dvisvgm.cpp: 
-  renamed KPSFileFinder to FileFinder 
-
-  * src/FontMap.cpp: 
-  basic dvips font map support, not complete yet 
-
-2009-01-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * doc/Makefile.am, doc/dvisvgm.1.in: 
-  manpage updates 
-
-2009-01-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontMap.cpp: 
-  forgot to remove address operator 
-
-  * src/KPSFileFinder.cpp, src/KPSFileFinder.h, src/dvisvgm.cpp: 
-  added support for MiKTeX' new COM interface 
-
-  * src/DVIReader.cpp, src/FontManager.cpp, src/KPSFileFinder.cpp: 
-  memory leak fixed 
-
-  * src/KPSFileFinder.cpp: 
-  fixed throwing of COM exception 
-
-  * Makefile.am, NEWS, README, configure.ac, potracelib/Makefile.am: 
-  updated version info to 0.6 
-
-  * src/tests/CalculatorTest.h, src/tests/DirectoryTest.h, 
-    src/tests/FontManagerTest.h, src/tests/FontMapTest.h, 
-    src/tests/KPSFileFinderTest.h, src/tests/PageSizeTest.h, 
-    src/tests/StreamCounterTest.h, src/tests/VectorStreamTest.h: 
-  updated tests 
-
-  * doc/dvisvgm.1.in, src/Bitmap.cpp, src/Bitmap.h, src/BoundingBox.cpp, 
-    src/BoundingBox.h, src/Calculator.cpp, src/Calculator.h, 
-    src/CharmapTranslator.cpp, src/CharmapTranslator.h, src/DVIActions.cpp, 
-    src/DVIActions.h, src/DVIBBoxActions.h, src/DVIReader.cpp, 
-    src/DVIReader.h, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/Directory.cpp, 
-    src/Directory.h, src/FileFinder.cpp, src/FileFinder.h, 
-    src/FileSystem.cpp, src/FileSystem.h, src/Font.cpp, src/Font.h, 
-    src/FontEmitter.h, src/FontEncoding.cpp, src/FontEncoding.h, 
-    src/FontEngine.cpp, src/FontEngine.h, src/FontGlyph.cpp, src/FontGlyph.h, 
-    src/FontManager.cpp, src/FontManager.h, src/FontMap.cpp, src/FontMap.h, 
-    src/GFReader.cpp, src/GFReader.h, src/GFTracer.cpp, src/GFTracer.h, 
-    src/InputBuffer.cpp, src/InputBuffer.h, src/KPSFileFinder.cpp, 
-    src/KPSFileFinder.h, src/Makefile.am, src/Matrix.cpp, src/Matrix.h, 
-    src/Message.cpp, src/Message.h, src/MessageException.h, 
-    src/MetafontWrapper.cpp, src/MetafontWrapper.h, src/PSInterpreter.cpp, 
-    src/PSInterpreter.h, src/PageSize.cpp, src/PageSize.h, src/Pair.h, 
-    src/SVGFontEmitter.cpp, src/SVGFontEmitter.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, 
-    src/StreamCounter.h, src/StreamReader.cpp, src/StreamReader.h, 
-    src/TFM.cpp, src/TFM.h, src/TransformationMatrix.cpp, 
-    src/TransformationMatrix.h, src/VFActions.h, src/VFReader.cpp, 
-    src/VFReader.h, src/VectorStream.h, src/XMLDocTypeNode.h, 
-    src/XMLDocument.cpp, src/XMLDocument.h, src/XMLNode.cpp, src/XMLNode.h, 
-    src/XMLString.cpp, src/XMLString.h, src/dvisvgm.cpp, src/macros.h, 
-    src/options.ggo, src/types.h: 
-  updated file header comments 
-
-  * configure.ac: 
-  added test whether dvipdfm.map is available 
-
-2009-01-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp, 
-    src/FontEncoding.cpp, src/FontGlyph.cpp: 
-  fixed bugs in handling of font encodings and virtual fonts 
-
-  * src/Calculator.cpp, src/DVIReader.cpp, src/DVIToSVGActions.cpp, 
-    src/Directory.cpp, src/FontEncoding.cpp, src/FontEngine.cpp, 
-    src/FontManager.cpp, src/FontMap.cpp, src/KPSFileFinder.cpp, 
-    src/MetafontWrapper.cpp, src/PageSize.cpp, src/StreamReader.cpp, 
-    src/TFM.cpp, src/TransformationMatrix.cpp, src/VFReader.cpp, 
-    src/XMLDocument.cpp, src/XMLNode.cpp: 
-  added in/out attributes to parameter documentation 
-
-2009-01-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp, src/DVIToSVG.cpp, src/Font.h, src/FontEncoding.cpp, 
-    src/FontEncoding.h, src/FontEngine.cpp, src/FontEngine.h, 
-    src/FontGlyph.cpp, src/FontGlyph.h, src/FontManager.cpp, 
-    src/FontManager.h, src/InputBuffer.cpp, src/InputBuffer.h, 
-    src/SVGFontEmitter.cpp, src/SVGFontEmitter.h: 
-  first working version with font encoding support 
-
-  * src/FontEngine.cpp, src/FontEngine.h, src/SVGFontEmitter.cpp: 
-  fixed glyph positioning bug occured in conjunction with font encoding 
-
-  * src/SVGFontEmitter.cpp: 
-  fixed memory bug 
-
-2009-01-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/FontEncoding.cpp, src/FontEncoding.h, src/FontEngine.cpp, 
-    src/FontEngine.h, src/FontManager.cpp, src/FontManager.h, 
-    src/FontMap.cpp, src/FontMap.h, src/KPSFileFinder.cpp, 
-    src/KPSFileFinder.h: 
-  more encoding implementations, not complete yet 
-
-  * src/DVIReader.cpp, src/FontEncoding.cpp, src/FontEncoding.h, 
-    src/FontEngine.cpp, src/FontEngine.h, src/FontManager.cpp, 
-    src/FontManager.h, src/FontMap.cpp: 
-  partly working mapping support, but yet too slow 
-
-2009-01-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/TransformationMatrix.cpp: 
-  fixed bug in argument assignment of transformation command M 
-
-2009-01-15  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/TransformationMatrix.cpp: 
-  removed a dangerous loop remained from previous code 
-
-2009-01-14  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * potracelib/auxiliary.h, potracelib/bitmap.h, potracelib/curve.c, 
-    potracelib/curve.h, potracelib/decompose.c, potracelib/decompose.h, 
-    potracelib/lists.h, potracelib/potracelib.c, potracelib/potracelib.h, 
-    potracelib/progress.h, potracelib/trace.c, potracelib/trace.h: 
-  updated libpotrace to version 1.8 
-
-  * src/FontEncoding.cpp, src/FontEncoding.h, src/InputBuffer.cpp, 
-    src/InputBuffer.h, src/Makefile.am: 
-  added basic skeleton for handling of font encodings 
-
-  * src/FileSystem.cpp, src/FileSystem.h: 
-  const string parameters 
-
-  * src/dvisvgm.cpp: 
-  updated copyright string 
-
-  * src/KPSFileFinder.cpp: 
-  added enc-file support 
-
-2009-01-13  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CharmapTranslator.cpp: 
-  fixed crash on loading corrupt pfb-files 
-
-2008-06-18  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Makefile.am: 
-  adapted to latest gengetopt version 
-
-2008-04-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Makefile.am: 
-  added missing include path 
-
-  * src/DVIReader.cpp: 
-  minor change 
-
-2007-03-26  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, src/CharmapTranslator.cpp, src/CharmapTranslator.h, 
-    src/DVIActions.h, src/DVIReader.cpp, src/DVIToSVG.cpp, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/Font.h, 
-    src/FontManager.cpp, src/Makefile.am, src/SVGFontTraceEmitter.cpp, 
-    src/SVGFontTraceEmitter.h: 
-  redesigned DVIActions and CharmapTranslator 
-
-  * src/DVIActions.cpp, src/DVIReader.cpp, src/DVIReader.h, 
-    src/FontManager.cpp, src/tests/FontManagerTest.h: 
-  few minor changes 
-
-2007-03-25  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIActions.cpp, src/DVIActions.h, src/DVIBBoxActions.h, 
-    src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/Font.cpp, src/Font.h, 
-    src/FontManager.cpp, src/FontManager.h, src/StreamReader.cpp, 
-    src/StreamReader.h, src/VFActions.h, src/VFReader.cpp, src/VFReader.h, 
-    src/VectorStream.h: 
-  first working version 0.5, release candidate 1 
-
-  * src/DVIReader.cpp, src/DVIReader.h, src/VFActions.h: 
-  minor fixes 
-
-2007-03-23  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp, src/FontManager.cpp, src/FontManager.h, 
-    src/KPSFileFinder.cpp, src/KPSFileFinder.h, src/VFReader.cpp: 
-  more vf implementations, not complete yet 
-
-2007-03-22  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, doc/Makefile.in, src/DVIReader.cpp, src/DVIReader.h, 
-    src/DVIToSVG.cpp, src/DVIToSVG.h, src/FileSystem.cpp, src/FileSystem.h, 
-    src/KPSFileFinder.cpp, src/KPSFileFinder.h, src/Makefile.am, 
-    src/dvisvgm.cpp, src/tests/DirectoryTest.h, src/tests/FontManagerTest.h: 
-  reintegrated font map initialization into KPSFileFinderm adapted some 
-  tests 
-
-  * src/DVIReader.cpp, src/Font.cpp, src/Font.h, src/FontManager.cpp, 
-    src/VFActions.h, src/VFReader.cpp, src/VFReader.h: 
-  more vf implementations 
-
-2007-03-21  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * AUTHORS, Makefile.am, README, potracelib/Makefile.am, src/Directory.cpp, 
-    src/Directory.h, src/KPSFileFinder.cpp, src/Makefile, src/Makefile.am, 
-    src/Makefile.in, src/SVGFontTraceEmitter.cpp, src/test-all.cpp, 
-    src/tests/DirectoryTest.h: 
-  implemented Directory class for Linux, added DirectoryTest 
-
-  * src/Calculator.cpp, src/DVIReader.cpp, src/Directory.cpp, src/Font.h, 
-    src/FontManager.cpp, src/Makefile, src/Makefile.am, src/Makefile.in, 
-    src/MetafontWrapper.cpp, src/VFReader.cpp, src/VectorStream.h, 
-    src/test-all.cpp, src/tests/VectorStreamTest.h: 
-  removed redundant code and commented code fragments, added 
-  VectorInputStream class 
-
-  * src/Directory.cpp, src/Directory.h, src/KPSFileFinder.cpp, 
-    src/KPSFileFinder.h, src/dvisvgm.cpp: 
-  completed MiKTeX font map file look-up, fixed bug in Directory class 
-
-  * src/KPSFileFinder.cpp, src/KPSFileFinder.h, src/dvisvgm.cpp: 
-  implemented options -n and -m 
-
-2007-03-20  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, doc/Makefile, doc/Makefile.in, doc/dvisvgm.1.in, 
-    src/DVIReader.cpp, src/DVIToSVG.cpp, src/Font.cpp, src/Font.h, 
-    src/FontManager.cpp, src/KPSFileFinder.cpp, src/Makefile, 
-    src/Makefile.am, src/Makefile.in, src/VFReader.cpp, src/dvisvgm.cpp, 
-    src/test-all.cpp, src/tests/KPSFileFinderTest.h: 
-  added KPSFileFinderTest, added EmptyFont, fixed compilation error 
-
-  * src/Directory.cpp, src/Directory.h, src/FileSystem.cpp, src/FontMap.cpp, 
-    src/FontMap.h, src/KPSFileFinder.cpp: 
-  more changes for MiKTeX support 
-
-2007-03-19  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CharmapTranslator.cpp, src/DVIToSVG.cpp, src/FontManager.cpp, 
-    src/KPSFileFinder.cpp, src/KPSFileFinder.h, src/Makefile, 
-    src/Makefile.am, src/Makefile.in, src/MetafontWrapper.cpp, src/TFM.cpp: 
-  added mktexFOO support and font map lookups to KPSFileFinder 
-
-  * src/KPSFileFinder.cpp: 
-  bug fixed, font maps work now 
-
-  * src/Font.cpp, src/Font.h, src/FontManager.cpp, src/FontMap.cpp, 
-    src/FontMap.h, src/KPSFileFinder.cpp: 
-  made sources comaptible with MikTeX 
-
-2007-03-16  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Font.cpp, src/Font.h, src/FontManager.cpp, src/FontMap.cpp, 
-    src/FontMap.h, src/KPSFileFinder.cpp, src/Makefile, src/Makefile.am, 
-    src/Makefile.in, src/StreamReader.cpp, src/TFM.cpp, src/options.ggo, 
-    src/tests/FontMapTest.h: 
-  more coding in the font department, not finished yet 
-
-2007-03-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/CharmapTranslator.cpp, src/CharmapTranslator.h, src/DVIReader.cpp, 
-    src/DVIReader.h, src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, src/Font.cpp, 
-    src/FontManager.cpp, src/GFTracer.cpp, src/KPSFileFinder.cpp, 
-    src/KPSFileFinder.h, src/Makefile, src/Makefile.am, src/Makefile.in, 
-    src/MetafontWrapper.cpp, src/MetafontWrapper.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, 
-    src/StreamReader.cpp, src/StreamReader.h, src/TFM.cpp, src/TFM.h, 
-    src/VFReader.cpp, src/VFReader.h, src/dvisvgm.cpp, src/options.ggo, 
-    src/test-all.cpp: 
-  refactorings: extracted StreamReader class, replaced generic FileFinder 
-  support by KPSFileFinder calls 
-
-2007-03-08  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIActions.h, src/DVIBBoxActions.h, src/DVIReader.cpp, 
-    src/DVIReader.h, src/DVIToSVG.cpp, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/Font.cpp, src/Font.h, src/FontManager.cpp, 
-    src/FontManager.h, src/KPSFileFinder.cpp, src/KPSFileFinder.h, 
-    src/Makefile, src/Makefile.am, src/Makefile.in, src/Message.cpp, 
-    src/dvisvgm.cpp, src/macros.h, src/test-all.cpp: 
-  first unstable version with redesigned font handling 
-
-  * COPYING, Makefile, Makefile.am, Makefile.in, Martins_svg_neu.svg, NEWS, 
-    aclocal.m4, cmdline.c, config.guess, config.h, config.h.in, 
-    config.status, config.sub, configure.ac, depcomp, doc/Makefile, 
-    doc/dvisvgm.1, doc/dvisvgm.1.in, gpl.txt, install-sh, missing, 
-    src/FontManager.cpp, src/FontManager.h, src/Makefile.am, 
-    src/VFReader.cpp, src/tests/FontManagerTest.h, stamp-h1, table.txt: 
-  removed some garbage from the repository, added initial FontManagerTest 
-
-  * doc/dvisvgm.1, src/FontEngine.h, src/dvisvgm.cpp, 
-    src/tests/FontManagerTest.h: 
-  minor changes 
-
-  * src/DVIBBoxReader.cpp, src/DVIBBoxReader.h, src/Font.cpp, src/Font.h, 
-    src/StreamCounter.h, src/dvisvgm.cpp: 
-  fixed memory bug 
-
-  * src/DVIReader.cpp, src/DVIToSVGActions.cpp, src/Font.h, src/Makefile, 
-    src/Makefile.am, src/Makefile.in, src/VFActions.h, src/VFReader.cpp, 
-    src/VFReader.h, src/dvisvgm.cpp: 
-  plugged VFReader and its actions into the code (not usable yet) 
-
-2007-03-07  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Font.cpp, src/Font.h: 
-  added Font classes (not yet error-free) 
-
-2007-03-06  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.h, src/DVIToSVG.cpp, src/FontManager.cpp, 
-    src/FontManager.h: 
-  added FontManager skeleton, fixed bug in makehead 
-
-2007-03-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp, src/FontManager.cpp, src/VFReader.cpp: 
-  added some more skeleton code 
-
-2007-03-02  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/DVIReader.cpp, src/Makefile, src/Makefile.in, src/VFReader.cpp, 
-    src/VFReader.h, src/options.ggo: 
-  added skeleton of VFReader 
-
-2007-01-10  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * src/Bitmap.cpp, src/Bitmap.h, src/BoundingBox.cpp, src/BoundingBox.h, 
-    src/Calculator.cpp, src/Calculator.h, src/CharmapTranslator.cpp, 
-    src/CharmapTranslator.h, src/DVIActions.h, src/DVIBBoxActions.h, 
-    src/DVIBBoxReader.cpp, src/DVIBBoxReader.h, src/DVIReader.cpp, 
-    src/DVIReader.h, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/FileFinder.cpp, 
-    src/FileFinder.h, src/FileSystem.cpp, src/FileSystem.h, 
-    src/FontEmitter.h, src/FontEngine.cpp, src/FontEngine.h, 
-    src/FontGlyph.cpp, src/FontGlyph.h, src/FontMap.cpp, src/FontMap.h, 
-    src/GFReader.cpp, src/GFReader.h, src/GFTracer.cpp, src/GFTracer.h, 
-    src/KPSFileFinder.cpp, src/KPSFileFinder.h, src/Makefile, 
-    src/Makefile.am, src/Makefile.in, src/Matrix.cpp, src/Matrix.h, 
-    src/Message.cpp, src/Message.h, src/MessageException.h, 
-    src/MetafontWrapper.cpp, src/MetafontWrapper.h, src/PSInterpreter.cpp, 
-    src/PSInterpreter.h, src/PageSize.cpp, src/PageSize.h, src/Pair.h, 
-    src/SVGFontEmitter.cpp, src/SVGFontEmitter.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, 
-    src/StreamCounter.h, src/TFM.cpp, src/TFM.h, 
-    src/TransformationMatrix.cpp, src/TransformationMatrix.h, 
-    src/XMLDocTypeNode.h, src/XMLDocument.cpp, src/XMLDocument.h, 
-    src/XMLNode.cpp, src/XMLNode.h, src/XMLString.cpp, src/XMLString.h, 
-    src/cmdline.c, src/cmdline.h, src/dvisvgm.cpp, src/getopt.c, 
-    src/getopt.h, src/getopt1.c, src/gzstream.cpp, src/gzstream.h, 
-    src/macros.h, src/miktex-core.def, src/miktex-kps.def, src/miktex-kps.h, 
-    src/options.ggo, src/test-all.cpp, src/tests/CalculatorTest.h, 
-    src/tests/PageSizeTest.h, src/tests/StreamCounterTest.h, src/types.h: 
-  moved dir 
-
-  * INSTALL, Makefile.am, NEWS, README, configure.ac, doc/Makefile, 
-    doc/Makefile.am, doc/Makefile.in, doc/dvisvgm.1, doc/dvisvgm.1.in, 
-    gzstream/COPYING.LIB, gzstream/Makefile, gzstream/README, 
-    gzstream/gzstream.cpp, gzstream/gzstream.h, gzstream/index.html, 
-    gzstream/logo.gif, gzstream/test_gunzip.C, gzstream/test_gzip.C, 
-    gzstream/version, map/cork-lm.map, potracelib/Makefile.am, 
-    potracelib/auxiliary.h, potracelib/bitmap.h, potracelib/curve.c, 
-    potracelib/curve.h, potracelib/decompose.c, potracelib/decompose.h, 
-    potracelib/lists.h, potracelib/potracelib.c, potracelib/potracelib.h, 
-    potracelib/progress.h, potracelib/trace.c, potracelib/trace.h: 
-  moved sources 
-
-  * src/cmdline.c, src/cmdline.h: 
-  remove unnecessary files 
-
-2007-01-09  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * INSTALL, Makefile.am, NEWS, README, configure.ac, doc/Makefile, 
-    doc/Makefile.am, doc/Makefile.in, doc/dvisvgm.1, doc/dvisvgm.1.in, 
-    gzstream/COPYING.LIB, gzstream/Makefile, gzstream/README, 
-    gzstream/gzstream.cpp, gzstream/gzstream.h, gzstream/index.html, 
-    gzstream/logo.gif, gzstream/test_gunzip.C, gzstream/test_gzip.C, 
-    gzstream/version, potracelib/Makefile.am, potracelib/auxiliary.h, 
-    potracelib/bitmap.h, potracelib/curve.c, potracelib/curve.h, 
-    potracelib/decompose.c, potracelib/decompose.h, potracelib/lists.h, 
-    potracelib/potracelib.c, potracelib/potracelib.h, potracelib/progress.h, 
-    potracelib/trace.c, potracelib/trace.h, src/Bitmap.cpp, src/Bitmap.h, 
-    src/BoundingBox.cpp, src/BoundingBox.h, src/Calculator.cpp, 
-    src/Calculator.h, src/CharmapTranslator.cpp, src/CharmapTranslator.h, 
-    src/DVIActions.h, src/DVIBBoxActions.h, src/DVIBBoxReader.cpp, 
-    src/DVIBBoxReader.h, src/DVIReader.cpp, src/DVIReader.h, 
-    src/DVIToSVG.cpp, src/DVIToSVG.h, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/FileFinder.cpp, src/FileFinder.h, 
-    src/FileSystem.cpp, src/FileSystem.h, src/FontEmitter.h, 
-    src/FontEngine.cpp, src/FontEngine.h, src/FontGlyph.cpp, src/FontGlyph.h, 
-    src/FontMap.cpp, src/FontMap.h, src/GFReader.cpp, src/GFReader.h, 
-    src/GFTracer.cpp, src/GFTracer.h, src/KPSFileFinder.cpp, 
-    src/KPSFileFinder.h, src/Makefile, src/Makefile.am, src/Makefile.in, 
-    src/Matrix.cpp, src/Matrix.h, src/Message.cpp, src/Message.h, 
-    src/MessageException.h, src/MetafontWrapper.cpp, src/MetafontWrapper.h, 
-    src/PSInterpreter.cpp, src/PSInterpreter.h, src/PageSize.cpp, 
-    src/PageSize.h, src/Pair.h, src/SVGFontEmitter.cpp, src/SVGFontEmitter.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, 
-    src/StreamCounter.h, src/TFM.cpp, src/TFM.h, 
-    src/TransformationMatrix.cpp, src/TransformationMatrix.h, 
-    src/XMLDocTypeNode.h, src/XMLDocument.cpp, src/XMLDocument.h, 
-    src/XMLNode.cpp, src/XMLNode.h, src/XMLString.cpp, src/XMLString.h, 
-    src/cmdline.c, src/cmdline.h, src/dvisvgm.cpp, src/getopt.c, 
-    src/getopt.h, src/getopt1.c, src/gzstream.cpp, src/gzstream.h, 
-    src/macros.h, src/miktex-core.def, src/miktex-kps.def, src/miktex-kps.h, 
-    src/options.ggo, src/test-all.cpp, src/tests/CalculatorTest.h, 
-    src/tests/PageSizeTest.h, src/tests/StreamCounterTest.h, src/types.h: 
-  moved files to trunk subfolder 
-
-  * map/cork-lm.map: 
-  moved files to trunk 
-
-2007-01-05  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * Makefile, Makefile.am, Makefile.in, README, config.status, configure.ac, 
-    potracelib/Makefile.am, potracelib/bitops.h, potracelib/flate.c, 
-    potracelib/flate.h, src/Bitmap.cpp, src/Bitmap.h, src/BoundingBox.cpp, 
-    src/BoundingBox.h, src/Calculator.cpp, src/Calculator.h, 
-    src/CharmapTranslator.cpp, src/CharmapTranslator.h, src/DVIActions.h, 
-    src/DVIBBoxActions.h, src/DVIBBoxReader.cpp, src/DVIBBoxReader.h, 
-    src/DVIReader.cpp, src/DVIReader.h, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/FileFinder.cpp, 
-    src/FileFinder.h, src/FileSystem.cpp, src/FileSystem.h, 
-    src/FontEmitter.h, src/FontEngine.cpp, src/FontEngine.h, 
-    src/FontGlyph.cpp, src/FontGlyph.h, src/FontMap.cpp, src/FontMap.h, 
-    src/GFReader.cpp, src/GFReader.h, src/GFTracer.cpp, src/GFTracer.h, 
-    src/KPSFileFinder.cpp, src/KPSFileFinder.h, src/Makefile.am, 
-    src/Matrix.cpp, src/Matrix.h, src/Message.cpp, src/Message.h, 
-    src/MessageException.h, src/MetafontWrapper.cpp, src/MetafontWrapper.h, 
-    src/PSInterpreter.cpp, src/PSInterpreter.h, src/PageSize.cpp, 
-    src/PageSize.h, src/Pair.h, src/SVGFontEmitter.cpp, src/SVGFontEmitter.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, 
-    src/StreamCounter.h, src/TFM.cpp, src/TFM.h, 
-    src/TransformationMatrix.cpp, src/TransformationMatrix.h, 
-    src/XMLDocTypeNode.h, src/XMLDocument.cpp, src/XMLDocument.h, 
-    src/XMLNode.cpp, src/XMLNode.h, src/XMLString.cpp, src/XMLString.h, 
-    src/dvisvgm.cpp, src/macros.h, src/test-all.cpp, src/types.h: 
-  minor modifications 
-
-2007-01-03  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, src/KPSFileFinder.cpp: 
-  updated homepage 
-
-  * Makefile, Makefile.am, Makefile.in, config.h, config.h.in, 
-    config.status, configure, configure.ac, doc/Makefile, 
-    potracelib/Makefile.am, potracelib/auxiliary.h, potracelib/bitmap.h, 
-    potracelib/bitops.h, potracelib/curve.c, potracelib/curve.h, 
-    potracelib/decompose.c, potracelib/decompose.h, potracelib/flate.c, 
-    potracelib/flate.h, potracelib/lists.h, potracelib/potracelib.c, 
-    potracelib/potracelib.h, potracelib/progress.h, potracelib/trace.c, 
-    potracelib/trace.h, src/Makefile, src/Makefile.am, src/Makefile.in: 
-  added potracelib to distribution 
-
-  * configure: 
-  removed configure from repository 
-
-2006-12-31  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * NEWS, configure.ac, src/DVIToSVG.cpp, src/FileSystem.cpp, 
-    src/FontEngine.cpp, src/GFTracer.cpp, src/KPSFileFinder.cpp, 
-    src/Matrix.h, src/Message.cpp, src/PageSize.cpp, 
-    src/TransformationMatrix.cpp, src/dvisvgm.cpp: 
-  updated to MikTeX 2.5 support 
-
-  * Makefile, config.status, configure, configure.ac, doc/Makefile, 
-    doc/dvisvgm.1, src/FileSystem.cpp, src/FontEngine.cpp, 
-    src/KPSFileFinder.cpp, src/Makefile, src/dvisvgm.cpp, src/test-all.cpp: 
-  some minor fixes 
-
-  * src/KPSFileFinder.cpp: 
-  fixed namepsace bug 
-
-2006-08-01  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * Makefile, Makefile.in, NEWS, aclocal.m4, autom4te.cache/output.0, 
-    autom4te.cache/requests, autom4te.cache/traces.0, config.h, config.log, 
-    config.status, configure, configure.ac, doc/Makefile, doc/Makefile.in, 
-    doc/dvisvgm.1, src/FontEngine.cpp, src/Makefile, src/Makefile.in, 
-    src/cmdline.c, src/cmdline.h, src/dvisvgm.cpp: 
-  added support for freetype version >= 2.1.1 
-
-  * configure.ac: 
-  enabled svn keyword expansion 
-
-2006-04-12  Martin Gieseking  <martin.gieseking at uos.de>
-
-  * COPYING, INSTALL, Makefile, Makefile.am, Makefile.in, 
-    Martins_svg_neu.svg, NEWS, README, aclocal.m4, autom4te.cache/output.0, 
-    autom4te.cache/requests, autom4te.cache/traces.0, cmdline.c, 
-    config.guess, config.h, config.h.in, config.log, config.status, 
-    config.sub, configure, configure.ac, depcomp, doc/Makefile, 
-    doc/Makefile.am, doc/Makefile.in, doc/dvisvgm.1, doc/dvisvgm.1.in, 
-    gpl.txt, gzstream/COPYING.LIB, gzstream/Makefile, gzstream/README, 
-    gzstream/gzstream.cpp, gzstream/gzstream.h, gzstream/index.html, 
-    gzstream/logo.gif, gzstream/test_gunzip.C, gzstream/test_gzip.C, 
-    gzstream/version, install-sh, map/cork-lm.map, missing, src/Bitmap.cpp, 
-    src/Bitmap.h, src/BoundingBox.cpp, src/BoundingBox.h, src/Calculator.cpp, 
-    src/Calculator.h, src/CharmapTranslator.cpp, src/CharmapTranslator.h, 
-    src/DVIActions.h, src/DVIBBoxActions.h, src/DVIBBoxReader.cpp, 
-    src/DVIBBoxReader.h, src/DVIReader.cpp, src/DVIReader.h, 
-    src/DVIToSVG.cpp, src/DVIToSVG.h, src/DVIToSVGActions.cpp, 
-    src/DVIToSVGActions.h, src/FileFinder.cpp, src/FileFinder.h, 
-    src/FileSystem.cpp, src/FileSystem.h, src/FontEmitter.h, 
-    src/FontEngine.cpp, src/FontEngine.h, src/FontGlyph.cpp, src/FontGlyph.h, 
-    src/FontMap.cpp, src/FontMap.h, src/GFReader.cpp, src/GFReader.h, 
-    src/GFTracer.cpp, src/GFTracer.h, src/KPSFileFinder.cpp, 
-    src/KPSFileFinder.h, src/Makefile, src/Makefile.am, src/Makefile.in, 
-    src/Matrix.cpp, src/Matrix.h, src/Message.cpp, src/Message.h, 
-    src/MessageException.h, src/MetafontWrapper.cpp, src/MetafontWrapper.h, 
-    src/PSInterpreter.cpp, src/PSInterpreter.h, src/PageSize.cpp, 
-    src/PageSize.h, src/Pair.h, src/SVGFontEmitter.cpp, src/SVGFontEmitter.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, 
-    src/StreamCounter.h, src/TFM.cpp, src/TFM.h, 
-    src/TransformationMatrix.cpp, src/TransformationMatrix.h, 
-    src/XMLDocTypeNode.h, src/XMLDocument.cpp, src/XMLDocument.h, 
-    src/XMLNode.cpp, src/XMLNode.h, src/XMLString.cpp, src/XMLString.h, 
-    src/cmdline.c, src/cmdline.h, src/dvisvgm.cpp, src/getopt.c, 
-    src/getopt.h, src/getopt1.c, src/gzstream.cpp, src/gzstream.h, 
-    src/lshort-cm.dvi, src/lshort-cm.svg, src/lshort-cm.svgz, src/lshort.dvi, 
-    src/lshort.svg, src/lshort.svgz, src/macros.h, src/miktex-core.def, 
-    src/miktex-kps.def, src/miktex-kps.h, src/options.ggo, src/test-all.cpp, 
-    src/tests/CalculatorTest.h, src/tests/PageSizeTest.h, 
-    src/tests/StreamCounterTest.h, src/types.h, stamp-h1, table.txt: 
-  initial import 
-
-  * src/Bitmap.cpp, src/Bitmap.h, src/BoundingBox.cpp, src/BoundingBox.h, 
-    src/Calculator.cpp, src/Calculator.h, src/CharmapTranslator.cpp, 
-    src/CharmapTranslator.h, src/DVIActions.h, src/DVIBBoxActions.h, 
-    src/DVIBBoxReader.cpp, src/DVIBBoxReader.h, src/DVIReader.cpp, 
-    src/DVIReader.h, src/DVIToSVG.cpp, src/DVIToSVG.h, 
-    src/DVIToSVGActions.cpp, src/DVIToSVGActions.h, src/FileFinder.cpp, 
-    src/FileFinder.h, src/FileSystem.cpp, src/FileSystem.h, 
-    src/FontEmitter.h, src/FontEngine.cpp, src/FontEngine.h, 
-    src/FontGlyph.cpp, src/FontGlyph.h, src/FontMap.cpp, src/FontMap.h, 
-    src/GFReader.cpp, src/GFReader.h, src/GFTracer.cpp, src/GFTracer.h, 
-    src/KPSFileFinder.cpp, src/KPSFileFinder.h, src/Message.cpp, 
-    src/Message.h, src/MessageException.h, src/MetafontWrapper.cpp, 
-    src/MetafontWrapper.h, src/PageSize.cpp, src/PageSize.h, src/Pair.h, 
-    src/SVGFontEmitter.cpp, src/SVGFontEmitter.h, 
-    src/SVGFontTraceEmitter.cpp, src/SVGFontTraceEmitter.h, 
-    src/StreamCounter.h, src/TFM.cpp, src/TFM.h, 
-    src/TransformationMatrix.cpp, src/TransformationMatrix.h, 
-    src/XMLDocTypeNode.h, src/XMLDocument.cpp, src/XMLDocument.h, 
-    src/XMLNode.cpp, src/XMLNode.h, src/XMLString.cpp, src/XMLString.h, 
-    src/dvisvgm.cpp, src/macros.h, src/test-all.cpp, 
-    src/tests/CalculatorTest.h, src/tests/PageSizeTest.h, 
-    src/tests/StreamCounterTest.h, src/types.h: 
-  changed keyword tags 
-
-  * src/lshort-cm.dvi, src/lshort-cm.svg, src/lshort-cm.svgz, 
-    src/lshort.dvi, src/lshort.svg, src/lshort.svgz: 
-  removed files that need not be version controlled 
-

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.am	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.am	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,8 +1,10 @@
 ## This file is part of dvisvgm
-## Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>
+## Copyright (C) 2005-2023 Martin Gieseking <martin.gieseking at uos.de>
 ##
 ## Process this file with automake.
 
+include $(top_srcdir)/dvisvgm-src/aminclude_static.am
+
 AUTOMAKE_OPTIONS = foreign
 EXTRA_DIST = COPYING
 SUBDIRS = libs src #not for TL: m4 tests doc

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.in	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/Makefile.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -13,6 +13,9 @@
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
+
+# aminclude_static.am generated automatically by Autoconf
+# from AX_AM_MACROS_STATIC on Tue Jan 10 14:41:23 CET 2023
 VPATH = @srcdir@
 am__is_gnu_make = { \
   if test -z '$(MAKELEVEL)'; then \
@@ -89,7 +92,8 @@
 host_triplet = @host@
 subdir = dvisvgm-src
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/dvisvgm-src/m4/ax_gcc_builtin.m4 \
+	$(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
 	$(top_srcdir)/../../m4/kpse-common.m4 \
 	$(top_srcdir)/../../m4/kpse-cxx-hack.m4 \
 	$(top_srcdir)/../../m4/kpse-freetype2-flags.m4 \
@@ -164,7 +168,8 @@
     if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
   done | $(am__uniquify_input)`
 DIST_SUBDIRS = $(SUBDIRS)
-am__DIST_COMMON = $(srcdir)/Makefile.in AUTHORS COPYING ChangeLog \
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/dvisvgm-src/aminclude_static.am AUTHORS COPYING \
 	INSTALL NEWS README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
@@ -348,17 +353,34 @@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+ at CODE_COVERAGE_ENABLED_TRUE@GITIGNOREFILES := $(GITIGNOREFILES) $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+ at CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+ at CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+ at CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture" $(CODE_COVERAGE_OUTPUT_FILE);
+ at CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+ at CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+ at CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN);
+ at CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+ at CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+ at CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_genhtml_0 = @echo "  GEN   " "$(CODE_COVERAGE_OUTPUT_DIRECTORY)";
+ at CODE_COVERAGE_ENABLED_TRUE@code_coverage_quiet = $(code_coverage_quiet_$(V))
+ at CODE_COVERAGE_ENABLED_TRUE@code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+ at CODE_COVERAGE_ENABLED_TRUE@code_coverage_quiet_0 = --quiet
+
+# sanitizes the test-name: replaces with underscores: dashes and dots
+ at CODE_COVERAGE_ENABLED_TRUE@code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+ at CODE_COVERAGE_ENABLED_TRUE@AM_DISTCHECK_CONFIGURE_FLAGS := $(AM_DISTCHECK_CONFIGURE_FLAGS) --disable-code-coverage
+ at USE_BUNDLED_LIBS_TRUE@AM_DISTCHECK_CONFIGURE_FLAGS = --enable-bundled-libs
 AUTOMAKE_OPTIONS = foreign
 EXTRA_DIST = COPYING
 SUBDIRS = libs src #not for TL: m4 tests doc
 ACLOCAL_AMFLAGS = -I m4
- at USE_BUNDLED_LIBS_TRUE@AM_DISTCHECK_CONFIGURE_FLAGS = --enable-bundled-libs
 @CODE_COVERAGE_ENABLED_TRUE at lcov_dir = $(top_builddir)/lcov
 @CODE_COVERAGE_ENABLED_TRUE at lcov_file = $(lcov_dir)/lcov.info
 all: all-recursive
 
 .SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/dvisvgm-src/aminclude_static.am $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
@@ -378,6 +400,7 @@
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
 	esac;
+$(top_srcdir)/dvisvgm-src/aminclude_static.am $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -669,6 +692,106 @@
 .PRECIOUS: Makefile
 
 
+# Code coverage
+#
+# Optional:
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#    Multiple directories may be specified, separated by whitespace.
+#    (Default: $(top_builddir))
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+#    by lcov for code coverage. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#    reports to be created. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#    set to 0 to disable it and leave empty to stay with the default.
+#    (Default: empty)
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#    instances. (Default: based on )
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#    instances. (Default: )
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#    collecting lcov instance. (Default: )
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#    instance. (Default: )
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#    lcov instance. (Default: empty)
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#    instance. (Default: )
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#    genhtml instance. (Default: based on )
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#    instance. (Default: )
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# use the git-version-gen script, available online.
+# Optional variables
+# run only on top dir
+ at CODE_COVERAGE_ENABLED_TRUE@ ifeq ($(abs_builddir), $(abs_top_builddir))
+ at CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+ at CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+ at CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+
+ at CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_BRANCH_COVERAGE ?=
+ at CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+ at CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+ at CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+ at CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+ at CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+ at CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+ at CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+ at CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=$(if $(CODE_COVERAGE_BRANCH_COVERAGE),--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+ at CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+ at CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_IGNORE_PATTERN ?=
+
+# Use recursive makes in order to ignore errors during check
+ at CODE_COVERAGE_ENABLED_TRUE@check-code-coverage:
+ at CODE_COVERAGE_ENABLED_TRUE@	-$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check
+ at CODE_COVERAGE_ENABLED_TRUE@	$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
+
+# Capture code coverage data
+ at CODE_COVERAGE_ENABLED_TRUE@code-coverage-capture: code-coverage-capture-hook
+ at CODE_COVERAGE_ENABLED_TRUE@	$(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)
+ at CODE_COVERAGE_ENABLED_TRUE@	$(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS)
+ at CODE_COVERAGE_ENABLED_TRUE@	- at rm -f "$(CODE_COVERAGE_OUTPUT_FILE).tmp"
+ at CODE_COVERAGE_ENABLED_TRUE@	$(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS)
+ at CODE_COVERAGE_ENABLED_TRUE@	@echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html"
+
+ at CODE_COVERAGE_ENABLED_TRUE@code-coverage-clean:
+ at CODE_COVERAGE_ENABLED_TRUE@	-$(LCOV) --directory $(top_builddir) -z
+ at CODE_COVERAGE_ENABLED_TRUE@	-rm -rf "$(CODE_COVERAGE_OUTPUT_FILE)" "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "$(CODE_COVERAGE_OUTPUT_DIRECTORY)"
+ at CODE_COVERAGE_ENABLED_TRUE@	-find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete
+
+ at CODE_COVERAGE_ENABLED_TRUE@code-coverage-dist-clean:
+ at CODE_COVERAGE_ENABLED_TRUE@ else # ifneq ($(abs_builddir), $(abs_top_builddir))
+ at CODE_COVERAGE_ENABLED_TRUE@check-code-coverage:
+
+ at CODE_COVERAGE_ENABLED_TRUE@code-coverage-capture: code-coverage-capture-hook
+
+ at CODE_COVERAGE_ENABLED_TRUE@code-coverage-clean:
+
+ at CODE_COVERAGE_ENABLED_TRUE@code-coverage-dist-clean:
+ at CODE_COVERAGE_ENABLED_TRUE@ endif # ifeq ($(abs_builddir), $(abs_top_builddir))
+# Use recursive makes in order to ignore errors during check
+ at CODE_COVERAGE_ENABLED_FALSE@check-code-coverage:
+ at CODE_COVERAGE_ENABLED_FALSE@	@echo "Need to reconfigure with --enable-code-coverage"
+# Capture code coverage data
+ at CODE_COVERAGE_ENABLED_FALSE@code-coverage-capture: code-coverage-capture-hook
+ at CODE_COVERAGE_ENABLED_FALSE@	@echo "Need to reconfigure with --enable-code-coverage"
+
+ at CODE_COVERAGE_ENABLED_FALSE@code-coverage-clean:
+
+ at CODE_COVERAGE_ENABLED_FALSE@code-coverage-dist-clean:
+
+# Hook rule executed before code-coverage-capture, overridable by the user
+code-coverage-capture-hook:
+
+.PHONY: check-code-coverage code-coverage-capture code-coverage-dist-clean code-coverage-clean code-coverage-capture-hook
+
 @CODE_COVERAGE_ENABLED_TRUE at lcov-report:
 @CODE_COVERAGE_ENABLED_TRUE@	@mkdir -p $(lcov_dir)
 @CODE_COVERAGE_ENABLED_TRUE@	lcov --capture --directory . --no-external -o $(lcov_file)

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/NEWS
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/NEWS	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/NEWS	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,3 +1,28 @@
+dvisvgm-3.0.1 (2023-01-10)
+- added support for the 64-bit GS library in TeX Live
+  (patch sent by Akira Kakuto)
+- MacTeX: explicitly lookup libgs in /usr/local/lib (GH issue #197)
+- fixed character spacing when processing XDV glyph arrays (GH issue #198)
+- fixed invalid removal of non-redundant clipPath elements (GH issue #203)
+- fixed computation of the graphics extents printed to the console when using
+  the preview package (GH issue #209)
+- several improvements of the autotool scripts (thanks to Sam James)
+- improved processing of fonts when using the new PDF handler
+
+dvisvgm-3.0 (2022-10-16)
+- added new PDF handler based on mutool to keep the PDF functionality available
+  which can't no longer be realized with as of Ghostscript 10.1.0 due to the
+  replacement of its PDF interpreter
+- replaced the bundled minimal Fontforge library (ff-woff) with a dedicated,
+  newly implemented library for embedding TTF/WOFF data into the SVG files
+- added option --embed-bitmaps to embed bitmaps into the generated SVG files
+  instead of referencing the external files
+- exteded option --tmpdir to optionally suppress the creation of uniquely
+  named subfolders
+- added filters :even and :odd to option --page to limit the given page ranges
+  to even and odd page numbers respectively
+- fixed the call of ttfautohint to prevent potential memory errors
+
 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
@@ -15,7 +40,7 @@
 
 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	
+  clipPath elements, removes them, and updates the clip-path references
 - replaced method to clip embedded EPS/PDF graphics that usually results in
   faster rendering of the affected SVG sections
 - fixed a regression regarding transformations of embedded EPS/PDF graphics

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/README
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/README	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/README	2023-01-20 01:55:04 UTC (rev 65593)
@@ -14,13 +14,6 @@
    to polygons, intersects them using Clipper, and reconstructs the curves
    afterwards.
 
- * FontForge library (https://fontforge.github.io)
-   dvisvgm can be built with optional WOFF support that allows to embed the
-   font data in WOFF or TrueType format rather than as SVG. The FontForge
-   library provides the required functions to create font files in these
-   formats. A reduced version of the library is bundled with the dvisvgm
-   sources.
-
  * FreeType 2 (http://www.freetype.org)
    This library is used to extract the glyph outlines from vector fonts
    (PFB, OTF, TTF).
@@ -53,9 +46,9 @@
    bitmap output. A recent version is also part of the dvisvgm sources.
 
  * ttfautohint (https://www.freetype.org/ttfautohint)
-   dvisvgm can optionally be built with ttfautohint support to replace the
-   autohinting functionality of FontForge. Since it's still an experimental
-   feature, ttfautohint support is disabled by default.
+   dvisvgm can optionally be built with ttfautohint support to allow for
+   autohinting the generated TrueType, WOFF, and WOFF2 fonts. Since this is
+   still an experimental feature, ttfautohint support is disabled by default.
    The development files required for Windows can be found at
    https://github.com/mgieseki/ttfautohint-dll.
 
@@ -83,7 +76,7 @@
  Quick installation info:
    * ensure that the development packages of all libraries, listed above,
      are installed
-   * type "./autogen.sh" if "configure" is not present in the dvisvgm
+   * type "autoreconf -fi" if "configure" is not present in the dvisvgm
      root folder
    * either type "./configure" if you don't want to use the bundled libraries
      brotli, potrace, woff2, and xxHash but link against the corresponding
@@ -130,7 +123,7 @@
 
 COPYRIGHT
 
- Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>
+ Copyright (C) 2005-2023 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

Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/aminclude_static.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/aminclude_static.am	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/aminclude_static.am	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,126 @@
+
+# aminclude_static.am generated automatically by Autoconf
+# from AX_AM_MACROS_STATIC on Tue Jan 10 14:41:23 CET 2023
+
+
+# Code coverage
+#
+# Optional:
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#    Multiple directories may be specified, separated by whitespace.
+#    (Default: $(top_builddir))
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+#    by lcov for code coverage. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#    reports to be created. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#    set to 0 to disable it and leave empty to stay with the default.
+#    (Default: empty)
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#    instances. (Default: based on )
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#    instances. (Default: )
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#    collecting lcov instance. (Default: )
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#    instance. (Default: )
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#    lcov instance. (Default: empty)
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#    instance. (Default: )
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#    genhtml instance. (Default: based on )
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#    instance. (Default: )
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# use the git-version-gen script, available online.
+# Optional variables
+# run only on top dir
+if CODE_COVERAGE_ENABLED
+ ifeq ($(abs_builddir), $(abs_top_builddir))
+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+
+CODE_COVERAGE_BRANCH_COVERAGE ?=
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=$(if $(CODE_COVERAGE_BRANCH_COVERAGE),--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+CODE_COVERAGE_IGNORE_PATTERN ?=
+
+GITIGNOREFILES := $(GITIGNOREFILES) $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture" $(CODE_COVERAGE_OUTPUT_FILE);
+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN);
+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_genhtml_0 = @echo "  GEN   " "$(CODE_COVERAGE_OUTPUT_DIRECTORY)";
+code_coverage_quiet = $(code_coverage_quiet_$(V))
+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+code_coverage_quiet_0 = --quiet
+
+# sanitizes the test-name: replaces with underscores: dashes and dots
+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+
+# Use recursive makes in order to ignore errors during check
+check-code-coverage:
+	-$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check
+	$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
+
+# Capture code coverage data
+code-coverage-capture: code-coverage-capture-hook
+	$(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)
+	$(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS)
+	- at rm -f "$(CODE_COVERAGE_OUTPUT_FILE).tmp"
+	$(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS)
+	@echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html"
+
+code-coverage-clean:
+	-$(LCOV) --directory $(top_builddir) -z
+	-rm -rf "$(CODE_COVERAGE_OUTPUT_FILE)" "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "$(CODE_COVERAGE_OUTPUT_DIRECTORY)"
+	-find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete
+
+code-coverage-dist-clean:
+
+AM_DISTCHECK_CONFIGURE_FLAGS := $(AM_DISTCHECK_CONFIGURE_FLAGS) --disable-code-coverage
+ else # ifneq ($(abs_builddir), $(abs_top_builddir))
+check-code-coverage:
+
+code-coverage-capture: code-coverage-capture-hook
+
+code-coverage-clean:
+
+code-coverage-dist-clean:
+ endif # ifeq ($(abs_builddir), $(abs_top_builddir))
+else #! CODE_COVERAGE_ENABLED
+# Use recursive makes in order to ignore errors during check
+check-code-coverage:
+	@echo "Need to reconfigure with --enable-code-coverage"
+# Capture code coverage data
+code-coverage-capture: code-coverage-capture-hook
+	@echo "Need to reconfigure with --enable-code-coverage"
+
+code-coverage-clean:
+
+code-coverage-dist-clean:
+
+endif #CODE_COVERAGE_ENABLED
+# Hook rule executed before code-coverage-capture, overridable by the user
+code-coverage-capture-hook:
+
+.PHONY: check-code-coverage code-coverage-capture code-coverage-dist-clean code-coverage-clean code-coverage-capture-hook


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/aminclude_static.am
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/config.h.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/config.h.in	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/config.h.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -115,6 +115,12 @@
 /* Define to 1 if the system has the type `_Bool'. */
 #undef HAVE__BOOL
 
+/* Define to 1 if the system has the `__builtin_clz' built-in function */
+#undef HAVE___BUILTIN_CLZ
+
+/* The machine triplet of the host system */
+#undef HOST_SYSTEM
+
 /* Define to 1 if the kpathsea headers are not C++ safe. */
 #undef KPSE_CXX_UNSAFE
 
@@ -151,9 +157,6 @@
    backward compatibility; new code need not use it. */
 #undef STDC_HEADERS
 
-/* The machine triplet of the target system */
-#undef TARGET_SYSTEM
-
 /* Define to 1 if your <sys/time.h> declares `struct tm'. */
 #undef TM_IN_SYS_TIME
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/configure.ac
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/configure.ac	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/configure.ac	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,30 +1,27 @@
 # This file is part of dvisvgm
-# Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>
+# Copyright (C) 2005-2023 Martin Gieseking <martin.gieseking at uos.de>
 #
 # Process this file with autoconf to produce a configure script.
 
-AC_PREREQ(2.59)
-AC_INIT([dvisvgm],[2.14],[martin.gieseking at uos.de])
-DATE="August 2022"
+AC_PREREQ([2.69])
+AC_INIT([dvisvgm],[3.0.1],[martin.gieseking at uos.de])
+DATE="January 2023"
 AC_CONFIG_SRCDIR(src)
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_MACRO_DIR([m4])
 AC_CANONICAL_HOST
-AC_CANONICAL_TARGET
-AM_INIT_AUTOMAKE([subdir-objects])
+AM_INIT_AUTOMAKE([subdir-objects dist-xz])
 
-AH_TEMPLATE([TARGET_SYSTEM], [The machine triplet of the target system])
-AC_DEFINE_UNQUOTED([TARGET_SYSTEM], ["$target"])
+AH_TEMPLATE([HOST_SYSTEM], [The machine triplet of the host system])
+AC_DEFINE_UNQUOTED([HOST_SYSTEM], ["$host"])
 
 # Checks for programs.
 AC_PROG_CC
-AC_PROG_CC_C99
 AC_PROG_CXX
 AX_CXX_COMPILE_STDCXX([11])
 AM_PROG_AR
 LT_INIT
 
-AC_PROG_RANLIB
 AC_LANG(C)
 
 AX_CHECK_COMPILE_FLAG([-Wmismatched-tags -Wno-mismatched-tags], [CXXFLAGS="$CXXFLAGS -Wno-mismatched-tags"])
@@ -55,6 +52,7 @@
 
 AC_MSG_CHECKING([kpathsea version])
 AC_RUN_IFELSE([AC_LANG_SOURCE([#include <stdio.h>
+	#include <stdlib.h>
 	#include <kpathsea/kpathsea.h>
 	int main() {
 		FILE *f;
@@ -146,7 +144,7 @@
 
 # Check for header files.
 AC_HEADER_DIRENT
-AC_HEADER_STDC
+
 AC_CHECK_HEADERS_ONCE([libintl.h stdlib.h string.h strings.h unistd.h])
 
 # Check for typedefs, structures, and compiler characteristics.
@@ -157,6 +155,7 @@
 # Check for library functions.
 AC_FUNC_STAT
 AC_CHECK_FUNCS_ONCE([ftime gettimeofday sigaction umask uselocale])
+AX_GCC_BUILTIN(__builtin_clz)
 
 # add options for selection of "optional" library locations
 # currently these libraries are mandatory; the --with-foo options
@@ -204,6 +203,7 @@
 AM_CONDITIONAL([BUILD_MANPAGE], [test "x$enable_manpage" = "xyes"])
 
 AX_CODE_COVERAGE
+
 AS_IF([ test "$enable_code_coverage" = "yes" ], [
 	# disable optimization
 	changequote({,})
@@ -219,18 +219,19 @@
 AC_CONFIG_FILES([
 	Makefile
 	libs/Makefile
+	libs/boost/Makefile
 	libs/brotli/Makefile
 	libs/clipper/Makefile
-	libs/ff-woff/Makefile
 	libs/md5/Makefile
 	libs/potrace/Makefile
 	libs/variant/Makefile
 	libs/woff2/Makefile
 	libs/xxHash/Makefile
-	m4/Makefile
 	src/Makefile
 	src/version.hpp
+	src/fonts/Makefile
 	src/optimizer/Makefile
+	src/ttf/Makefile
 	tests/Makefile
 	tests/data/Makefile
 	doc/Makefile])

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.am	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.am	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,5 +1,5 @@
 ## This file is part of dvisvgm
-## Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>
+## Copyright (C) 2005-2023 Martin Gieseking <martin.gieseking at uos.de>
 ##
 ## Process this file with automake.
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.in	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/Makefile.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -91,10 +91,20 @@
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-target_triplet = @target@
 subdir = doc
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \
+	$(top_srcdir)/m4/ax_ac_print_to_file.m4 \
+	$(top_srcdir)/m4/ax_add_am_macro_static.m4 \
+	$(top_srcdir)/m4/ax_am_macros_static.m4 \
+	$(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/ax_file_escapes.m4 \
+	$(top_srcdir)/m4/ax_gcc_builtin.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__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -175,7 +185,6 @@
 CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
 CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
 CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
-CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
 CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
@@ -291,6 +300,8 @@
 host_os = @host_os@
 host_vendor = @host_vendor@
 htmldir = @htmldir@
+ifGNUmake = @ifGNUmake@
+ifnGNUmake = @ifnGNUmake@
 includedir = @includedir@
 infodir = @infodir@
 install_sh = @install_sh@
@@ -310,11 +321,7 @@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 sysconfdir = @sysconfdir@
-target = @target@
 target_alias = @target_alias@
-target_cpu = @target_cpu@
-target_os = @target_os@
-target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
@@ -348,9 +355,9 @@
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu doc/Makefile
+	  $(AUTOMAKE) --foreign doc/Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-man.xsl
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-man.xsl	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-man.xsl	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- This file is part of dvisvgm -->
-<!-- Copyright (C) 2015-2022 Martin Gieseking <martin.gieseking at uos.de> -->
+<!-- Copyright (C) 2015-2023 Martin Gieseking <martin.gieseking at uos.de> -->
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 	<!-- output monospaced text in bold -->
 	<xsl:template match="literal">

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-pdf.xsl
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-pdf.xsl	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/conf-dblatex-pdf.xsl	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding="iso-8859-1"?>
 <!-- This file is part of dvisvgm -->
-<!-- Copyright (C) 2015-2022 Martin Gieseking <martin.gieseking at uos.de> -->
+<!-- Copyright (C) 2015-2023 Martin Gieseking <martin.gieseking at uos.de> -->
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 	<xsl:param name="xetex.font">
 		<xsl:text>\setmainfont{Source Serif Pro}
</xsl:text>

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.1
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.1	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.1	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,12 +2,12 @@
 .\"     Title: dvisvgm
 .\"    Author: Martin Gieseking <martin.gieseking at uos.de>
 .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\"      Date: 2022-02-26
+.\"      Date: 2022-10-14
 .\"    Manual: dvisvgm Manual
-.\"    Source: dvisvgm 2.14
+.\"    Source: dvisvgm 3.0.1
 .\"  Language: English
 .\"
-.TH "DVISVGM" "1" "2022\-02\-26" "dvisvgm 2\&.14" "dvisvgm Manual"
+.TH "DVISVGM" "1" "2022\-10\-14" "dvisvgm 3\&.0\&.1" "dvisvgm Manual"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
@@ -299,6 +299,15 @@
 Adds comments with further information about selected data to the SVG file\&. Currently, only font elements and font CSS rules related to native fonts are annotated\&.
 .RE
 .PP
+\fBembed\-bitmaps\fR
+.RS 4
+Embeds the contents of bitmap files into the generated SVG files instead of adding file references\&. Because of the base64\-encoded data, the SVG files are usually much bigger but at the same time more portable because they don\(cqt rely on external bitmap files\&.
+.sp
+This option only affects bitmaps referenced in DVI/XDV files, e\&.g\&. added by
+\fB\eincludegraphics\fR\&. Bitmaps in PostScript or PDF files are always embedded\&. Also see option
+\fBbitmap\-format\fR\&.
+.RE
+.PP
 \fB\-E, \-\-eps\fR
 .RS 4
 If this option is given, dvisvgm does not expect a DVI but a single or multiple EPS input files, and tries to convert them to SVG\&. In order to do so, a single
@@ -317,7 +326,10 @@
 .PP
 \fB\-f, \-\-font\-format\fR=\fIformat\fR
 .RS 4
-Selects the file format used to embed font data into the generated SVG output when converting DVI files\&. It has no effect when converting PDF or PostScript files\&. Text fragments present in these files are always converted to path elements\&.
+Selects the file format used to embed font data into the generated SVG output when converting DVI or PDF files\&. The latter require the new mutool\-based PDF handler introduced with dvisvgm 3\&.0 (also see option
+\fB\-\-pdf\fR)\&. Option
+\fB\-\-font\-format\fR
+has no effect when converting PDF or PostScript files using Ghostscript\&. Text fragments present in these files are then always converted to path elements\&.
 .sp
 Following formats are supported:
 \fBSVG\fR
@@ -333,7 +345,8 @@
 to the font format, e\&.g\&.
 \fB\-\-font\-format=woff,autohint\fR
 or
-\fB\-\-fwoff,ah\fR\&.
+\fB\-\-fwoff,ah\fR\&. This functionality requires the
+ttfautohint library (\m[blue]https://freetype.org/ttfautohint\m[])\&. If it\(cqs not available or can\(cqt be found, dvisvgm issues a corresponding warning message\&.
 .sp
 Option
 \fB\-\-font\-format\fR
@@ -671,9 +684,9 @@
 .PP
 \fB\-o, \-\-output\fR=\fIpattern\fR
 .RS 4
-Sets the pattern that determines the names of the generated SVG files\&. The required parameter
+Sets the pattern that determines the names of the generated SVG files, optionally including the file path\&. The required parameter
 \fIpattern\fR
-may consist of an arbitrary sequence of characters which make up the filenames\&. With the exception of the following mentioned variables and expressions, all characters are treated as static parts of the filenames and are therefore identical for all pages processed during a run of dvisvgm\&. The strings
+may consist of an arbitrary sequence of characters which make up the filenames or file paths relative to the current working directory\&. With the exception of the following mentioned variables and expressions, all characters are treated as static parts of the filenames/folders and are therefore identical for all pages processed during a run of dvisvgm\&. The strings
 \fB%f\fR,
 \fB%p\fR,
 \fB%P\fR,
@@ -701,7 +714,7 @@
 gets the same number of digits as
 \fB%P\fR\&.
 .sp
-If you need more control over the numbering, you can use arithmetic expressions as part of a pattern\&. The syntax is
+If you need more control over the numbering, you can use arithmetic expressions as part of the pattern\&. The syntax is
 \fB%(\fR\fIexpr\fR\fB)\fR
 where
 \fIexpr\fR
@@ -745,7 +758,9 @@
 .RS 4
 This option selects the pages to be processed\&. Parameter
 \fIranges\fR
-consists of a comma\-separated list of single page numbers and/or page ranges\&. A page range is a pair of numbers separated by a hyphen, e\&.g\&. 5\-12\&. Thus, a page sequence might look like this: 2\-4,6,9\-12,15\&. It doesn\(cqt matter if a page is given more than once or if page ranges overlap\&. dvisvgm always extracts the page numbers in ascending order and converts them only once\&. In order to stay compatible with previous versions, the default page sequence is 1\&. dvisvgm therefore converts only the first page and not the whole document if option
+consists of a comma\-separated list of single page numbers and/or page ranges\&. A page range is a pair of numbers separated by a hyphen, e\&.g\&. 5\-12\&. Thus, a page sequence might look like this: 2\-4,6,9\-12,15\&. It doesn\(cqt matter if a page is given more than once or if page ranges overlap\&. dvisvgm always extracts the page numbers in ascending order and converts them only once\&.
+.sp
+In order to stay compatible with previous versions, the default page sequence is 1\&. dvisvgm therefore converts only the first page and not the whole document if option
 \fB\-\-page\fR
 is omitted\&. Usually, page ranges consist of two numbers denoting the first and last page to be converted\&. If the conversion should start at page 1, or if it should continue up to the last DVI page, the first or second range number can be omitted, respectively\&. Example:
 \fB\-\-page=\-10\fR
@@ -752,6 +767,15 @@
 converts all pages up to page 10,
 \fB\-\-page=10\-\fR
 converts all pages starting with page 10\&. Please consider that the page values don\(cqt refer to the page numbers printed on the corresponding page\&. Instead, the physical page count is expected, where the first page always gets number 1\&.
+.sp
+At the end of the range sequence an optional filter specifier can be added\&. Currently, the two filters
+\fB:even\fR
+and
+\fB:odd\fR
+are supported which restrict the preceding values to even or odd numbers\&. For example,
+\fB\-\-page=1\-11,20:even\fR
+is equivalent to
+\fB\-\-page=2,4,6,8,10,20\fR\&.
 .RE
 .PP
 \fB\-H, \-\-page\-hashes\fR[=\fIparams\fR]
@@ -827,11 +851,26 @@
 .RS 4
 If this option is given, dvisvgm does not expect a DVI but a PDF input file, and tries to convert it to SVG\&. Similar to the conversion of DVI files, only the first page is processed by default\&. Option
 \fB\-\-page\fR
-can be used to select different pages, page ranges, and/or page sequences\&. The conversion is realized by creating a single
+can be used to select different pages, page ranges, and/or page sequences\&.
+.sp
+If a Ghostcript version < 10\&.1\&.0 is found, dvisvgm uses Ghostscript to process the PDF file\&. In this case, the conversion is realized by creating a single
 \fIpdffile\fR
-special command which is forwarded to the PostScript special handler\&. Therefore, this option is only available if dvisvgm was built with PostScript support enabled, and requires Ghostscript to be accessible\&. See option
+special command which is forwarded to dvisvgm\(cqs PostScript special handler\&. Therefore, this option is only available if dvisvgm was built with PostScript support enabled, and requires Ghostscript to be accessible\&. See option
 \fB\-\-libgs\fR
 for further information\&.
+.sp
+As of Ghostscript 10\&.1\&.0, this will no longer work due to the introduction of a new PDF interpreter\&. Therefore, an alternative conversion module based on
+mutool (\m[blue]https://mupdf.com/docs/mutool.html\m[])
+has been introduced\&. It\(cqs automatically invoked if Ghostscript can\(cqt be used and if a working
+\fBmutool\fR
+executable is present in a directory which is part of the system\(cqs search path\&.
+.sp
+Alternatively, environment variable
+\fBDVISVGM_PDF_PROC\fR
+can be used to select the PDF processor\&. The currently supported values are
+\fBgs\fR
+and
+\fBmutool\fR\&.
 .RE
 .PP
 \fB\-d, \-\-precision\fR=\fIdigits\fR
@@ -887,8 +926,20 @@
 \fB\-\-tmpdir\fR
 can be used to specify a different location\&. Please note that dvisvgm does not create this folder if it doesn\(cqt exist\&. Therefore, you must ensure that it\(cqs actually present before running dvisvgm\&.
 .sp
+In order to prevent colliding files caused by parallel calls of dvisvgm, the program doesn\(cqt write the files directly in the specified directory but furthermore creates a uniquely named subfolder in there, where the temporary files will be placed\&. This can be prevented by appending
+\fB//\fR
+or
+\fB\e\e\fR
+(on Windows) to the specified directory name\&. For example,
+\fB\-\-tmpdir=\&.//\fR
+creates the temporary files directly in the current working directory, while
+\fB\-\-tmpdir=\&.\fR
+places them in a dedicated subfolder of the current working directory\&.
+.sp
 If the optional parameter
 \fIpath\fR
+of option
+\fB\-\-tmpdir\fR
 is omitted, dvisvgm prints the location of the system\(cqs temp folder and exits\&.
 .RE
 .PP
@@ -1614,6 +1665,8 @@
 .sp 1
 .sp
 \fBExample:\fR \fBer=01:pi=*5\fR sets the colors of error messages (\fBer\fR) to red (\fB1\fR) on black (\fB0\fR), and those of progress indicators (\fBpi\fR) to cyan (\fB5\fR) on default background (\fB*\fR)\&.
+.sp
+Variable \fBDVISVGM_PDF_PROC\fR allows you to select the desired PDF processor\&. dvisvgm requires either Ghostscript (version < 10\&.1\&.0) or mutool to process PDF files\&. IF \fBDVISVGM_PDF_PROC\fR is not set, dvisvgm tries to detect the available processors\&. See option \fB\-\-pdf\fR for further information\&. To select a specific PDF processor, you can set \fBDVISVGM_PDF_PROC\fR to \fBgs\fR or \fBmutool\fR which forces the use of Ghostscript and mutool respectively\&.
 .SH "FILES"
 .sp
 The location of the following files is determined by the kpathsea library\&. To check the actual kpathsea configuration you can use the \fBkpsewhich\fR utility\&.
@@ -1715,4 +1768,4 @@
 Written by Martin Gieseking <\m[blue]\fBmartin\&.gieseking at uos\&.de\fR\m[]>
 .SH "COPYING"
 .sp
-Copyright \(co 2005\-2022 Martin Gieseking\&. Free use of this software is granted under the terms of the GNU General Public License (GPL) version 3 or, (at your option) any later version\&.
+Copyright \(co 2005\-2023 Martin Gieseking\&. Free use of this software is granted under the terms of the GNU General Public License (GPL) version 3 or, (at your option) any later version\&.

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.txt.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.txt.in	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/dvisvgm.txt.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////
 // This file is part of dvisvgm -- a fast DVI to SVG converter          //
-// Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   //
+// Copyright (C) 2005-2023 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       //
@@ -22,7 +22,7 @@
 :man source: dvisvgm
 :man version: @VERSION@
 :man manual: dvisvgm Manual
-:revdate: 2022-02-26 19:08 +0100
+:revdate: 2022-10-14 12:56 +0200
 
 Name
 ----
@@ -206,6 +206,14 @@
 Adds comments with further information about selected data to the SVG file. Currently, only
 font elements and font CSS rules related to native fonts are annotated.
 
+*embed-bitmaps*::
+Embeds the contents of bitmap files into the generated SVG files instead of adding file references.
+Because of the base64-encoded data, the SVG files are usually much bigger but at the same time
+more portable because they don't rely on external bitmap files.
++
+This option only affects bitmaps referenced in DVI/XDV files, e.g. added by +\includegraphics+.
+Bitmaps in PostScript or PDF files are always embedded. Also see option *bitmap-format*.
+
 *-E, --eps*::
 If this option is given, dvisvgm does not expect a DVI but a single or multiple EPS input files,
 and tries to convert them to SVG. In order to do so, a single 'psfile' special command is created
@@ -224,8 +232,9 @@
 
 *-f, --font-format*='format'::
 Selects the file format used to embed font data into the generated SVG output when converting DVI
-files. It has no effect when converting PDF or PostScript files. Text fragments present in these
-files are always converted to path elements.
+or PDF files. The latter require the new mutool-based PDF handler introduced with dvisvgm 3.0 (also
+see option *--pdf*). Option *--font-format* has no effect when converting PDF or PostScript files
+using Ghostscript. Text fragments present in these files are then always converted to path elements.
 +
 Following formats are supported: +SVG+ (that's the default), +TTF+ (TrueType), +WOFF+, and +WOFF2+
 (Web Open Font Format version 1 and 2).
@@ -232,7 +241,9 @@
 By default, dvisvgm creates unhinted fonts that might look bad on low-resolution devices. In order to
 improve the display quality, the generated TrueType, WOFF, or WOFF2 fonts can be autohinted. The
 autohinter is enabled by appending +,autohint+ or +,ah+ to the font format,
-e.g. +--font-format=woff,autohint+ or +--fwoff,ah+.
+e.g. +--font-format=woff,autohint+ or +--fwoff,ah+. This functionality requires the
+https://freetype.org/ttfautohint[ttfautohint library]. If it's not available or can't be found,
+dvisvgm issues a corresponding warning message.
 +
 Option *--font-format* is only available if dvisvgm was built with WOFF support enabled.
 
@@ -459,10 +470,11 @@
   expression is used.
 
 *-o, --output*='pattern'::
-Sets the pattern that determines the names of the generated SVG files. The required parameter
-'pattern' may consist of an arbitrary sequence of characters which make up the filenames. With the
-exception of the following mentioned variables and expressions, all characters are treated as static
-parts of the filenames and are therefore identical for all pages processed during a run of dvisvgm.
+Sets the pattern that determines the names of the generated SVG files, optionally including the file
+path. The required parameter 'pattern' may consist of an arbitrary sequence of characters which make
+up the filenames or file paths relative to the current working directory. With the exception of the
+following mentioned variables and expressions, all characters are treated as static parts of the
+filenames/folders and are therefore identical for all pages processed during a run of dvisvgm.
 The strings +%f+, +%p+, +%P+, +%n+, +%N+, +%hd+, +%ho+, and +%hc+ are variables that can be used as
 part of the pattern. +%f+ expands to the base name of the DVI file, i.e. the filename without suffix,
 +%p+ is the current page number, and +%P+ the total number of pages in the DVI file. The variables
@@ -475,7 +487,7 @@
 Example: +%3p+ enforces 3 digits for the current page number (001, 002, etc.). Without an explicit
 width specifier, +%p+ gets the same number of digits as +%P+.
 +
-If you need more control over the numbering, you can use arithmetic expressions as part of a pattern.
+If you need more control over the numbering, you can use arithmetic expressions as part of the pattern.
 The syntax is +%(+'expr'+)+ where 'expr' may contain additions, subtractions, multiplications, and
 integer divisions with common precedence. The variables *p* and *P* contain the current page number
 and the total number of pages, respectively. For example, +--output="%f-%(p-1)"+ creates filenames
@@ -498,6 +510,7 @@
 a hyphen, e.g. 5-12. Thus, a page sequence might look like this: 2-4,6,9-12,15. It doesn't matter
 if a page is given more than once or if page ranges overlap. dvisvgm always extracts the page
 numbers in ascending order and converts them only once.
++
 In order to stay compatible with previous versions, the default page sequence is 1. dvisvgm
 therefore converts only the first page and not the whole document if option *--page* is omitted.
 Usually, page ranges consist of two numbers denoting the first and last page to be converted.
@@ -507,6 +520,10 @@
 Please consider that the page values don't refer to the page numbers printed on the
 corresponding page. Instead, the physical page count is expected, where the first page always
 gets number 1.
++
+At the end of the range sequence an optional filter specifier can be added. Currently, the two
+filters +:even+ and +:odd+ are supported which restrict the preceding values to even or odd
+numbers. For example, +--page=1-11,20:even+ is equivalent to +--page=2,4,6,8,10,20+.
 
 *-H, --page-hashes*[='params']::
 If this option is given, dvisvgm computes hash values of all pages to be processed. As long as the
@@ -554,10 +571,20 @@
 If this option is given, dvisvgm does not expect a DVI but a PDF input file, and tries to convert
 it to SVG. Similar to the conversion of DVI files, only the first page is processed by default.
 Option *--page* can be used to select different pages, page ranges, and/or page sequences.
-The conversion is realized by creating a single 'pdffile' special command which is forwarded to
-the PostScript special handler. Therefore, this option is only available if dvisvgm was built
-with PostScript support enabled, and requires Ghostscript to be accessible. See option *--libgs*
-for further information.
++
+If a Ghostcript version < 10.1.0 is found, dvisvgm uses Ghostscript to process the PDF file. In
+this case, the conversion is realized by creating a single 'pdffile' special command which is
+forwarded to dvisvgm's PostScript special handler. Therefore, this option is only available if
+dvisvgm was built with PostScript support enabled, and requires Ghostscript to be accessible.
+See option *--libgs* for further information.
++
+As of Ghostscript 10.1.0, this will no longer work due to the introduction of a new PDF interpreter.
+Therefore, an alternative conversion module based on https://mupdf.com/docs/mutool.html[mutool]
+has been introduced. It's automatically invoked if Ghostscript can't be used and if a working
++mutool+ executable is present in a directory which is part of the system's search path.
++
+Alternatively, environment variable +DVISVGM_PDF_PROC+ can be used to select the PDF processor.
+The currently supported values are +gs+ and +mutool+.
 
 *-d, --precision*='digits'::
 Specifies the maximal number of decimal places applied to floating-point attribute values.
@@ -596,8 +623,15 @@
 to specify a different location. Please note that dvisvgm does not create this folder if it doesn't
 exist. Therefore, you must ensure that it's actually present before running dvisvgm.
 +
-If the optional parameter 'path' is omitted, dvisvgm prints the location of the system's
-temp folder and exits.
+In order to prevent colliding files caused by parallel calls of dvisvgm, the program doesn't write
+the files directly in the specified directory but furthermore creates a uniquely named subfolder in
+there, where the temporary files will be placed. This can be prevented by appending +//+ or +\\+
+(on Windows) to the specified directory name. For example, +--tmpdir=.//+ creates the temporary files
+directly in the current working directory, while +--tmpdir=.+ places them in a dedicated subfolder of
+the current working directory.
++
+If the optional parameter 'path' of option *--tmpdir* is omitted, dvisvgm prints the location of the
+system's temp folder and exits.
 
 *-a, --trace-all*=['retrace']::
 This option forces dvisvgm to vectorize not only the glyphs actually required to render the
@@ -990,6 +1024,12 @@
 *Example:* +er=01:pi=\*5+ sets the colors of error messages (+er+) to red (+1+) on black (+0+), and those
 of progress indicators (+pi+) to cyan (+5+) on default background (+*+).
 
+Variable *DVISVGM_PDF_PROC* allows you to select the desired PDF processor. dvisvgm requires either
+Ghostscript (version < 10.1.0) or mutool to process PDF files. IF *DVISVGM_PDF_PROC* is not set, dvisvgm
+tries to detect the available processors. See option *--pdf* for further information. To select a
+specific PDF processor, you can set *DVISVGM_PDF_PROC* to +gs+ or +mutool+ which forces the use of
+Ghostscript and mutool respectively.
+
 Files
 -----
 The location of the following files is determined by the kpathsea library.
@@ -1025,7 +1065,7 @@
 
 Copying
 -------
-Copyright (C) 2005-2022 Martin Gieseking. Free use of this software is
+Copyright (C) 2005-2023 Martin Gieseking. Free use of this software is
 granted under the terms of the GNU General Public License (GPL) version 3
 or, (at your option) any later version.
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/tweak-db-refentry.xsl
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/tweak-db-refentry.xsl	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/tweak-db-refentry.xsl	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!-- This file is part of dvisvgm -->
-<!-- Copyright (C) 2015-2022 Martin Gieseking <martin.gieseking at uos.de> -->
+<!-- Copyright (C) 2015-2023 Martin Gieseking <martin.gieseking at uos.de> -->
 <xsl:stylesheet version="1.0"
 	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 	xmlns:date="http://exslt.org/dates-and-times"

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/tweak-dblatex-pdf.xsl
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/tweak-dblatex-pdf.xsl	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/doc/tweak-dblatex-pdf.xsl	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- This file is part of dvisvgm -->
-<!-- Copyright (C) 2015-2022 Martin Gieseking <martin.gieseking at uos.de> -->
+<!-- Copyright (C) 2015-2023 Martin Gieseking <martin.gieseking at uos.de> -->
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 	<xsl:output doctype-public="-//OASIS//DTD DocBook XML V4.5//EN" doctype-system="http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"/>
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.am	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.am	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,10 +1,14 @@
 ## This file is part of dvisvgm
-## Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>
+## Copyright (C) 2005-2023 Martin Gieseking <martin.gieseking at uos.de>
 ##
 ## Process this file with automake.
 
-SUBDIRS = clipper md5 variant xxHash
+SUBDIRS = boost clipper md5 variant xxHash
 
+if !TEXLIVE_BUILD
+SUBDIRS += potrace
+endif
+
 if ENABLE_WOFF
-SUBDIRS += brotli ff-woff woff2
+SUBDIRS += brotli woff2
 endif

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.in	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/Makefile.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -87,10 +87,12 @@
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
- at ENABLE_WOFF_TRUE@am__append_1 = brotli ff-woff woff2
+ at TEXLIVE_BUILD_FALSE@am__append_1 = potrace
+ at ENABLE_WOFF_TRUE@am__append_2 = brotli woff2
 subdir = dvisvgm-src/libs
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/dvisvgm-src/m4/ax_gcc_builtin.m4 \
+	$(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
 	$(top_srcdir)/../../m4/kpse-common.m4 \
 	$(top_srcdir)/../../m4/kpse-cxx-hack.m4 \
 	$(top_srcdir)/../../m4/kpse-freetype2-flags.m4 \
@@ -164,7 +166,7 @@
   unique=`for i in $$list; do \
     if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
   done | $(am__uniquify_input)`
-DIST_SUBDIRS = clipper md5 variant xxHash brotli ff-woff woff2
+DIST_SUBDIRS = boost clipper md5 variant xxHash potrace brotli woff2
 am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
@@ -348,7 +350,8 @@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = clipper md5 variant xxHash $(am__append_1)
+SUBDIRS = boost clipper md5 variant xxHash $(am__append_1) \
+	$(am__append_2)
 all: all-recursive
 
 .SUFFIXES:

Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/LICENSE.txt
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/LICENSE.txt	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/LICENSE.txt	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,23 @@
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/LICENSE.txt
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/Makefile.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/Makefile.am	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/Makefile.am	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,5 @@
+noinst_HEADERS = \
+	boost-vectorstream.hpp \
+	vectorstream.hpp
+
+EXTRA_DIST = LICENSE.txt


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/Makefile.am
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/Makefile.in	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/Makefile.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,560 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# 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,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = dvisvgm-src/libs/boost
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/dvisvgm-src/m4/ax_gcc_builtin.m4 \
+	$(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
+	$(top_srcdir)/../../m4/kpse-common.m4 \
+	$(top_srcdir)/../../m4/kpse-cxx-hack.m4 \
+	$(top_srcdir)/../../m4/kpse-freetype2-flags.m4 \
+	$(top_srcdir)/../../m4/kpse-kpathsea-flags.m4 \
+	$(top_srcdir)/../../m4/kpse-potrace-flags.m4 \
+	$(top_srcdir)/../../m4/kpse-warnings.m4 \
+	$(top_srcdir)/../../m4/kpse-win32.m4 \
+	$(top_srcdir)/../../m4/kpse-zlib-flags.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)/version.ac \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
+	$(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+HEADERS = $(noinst_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_CPPFLAGS = @AM_CPPFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_LDFLAGS = @AM_LDFLAGS@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BROTLI_CFLAGS = @BROTLI_CFLAGS@
+BROTLI_LIBS = @BROTLI_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CODE_COVERAGE_RULES = @CODE_COVERAGE_RULES@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXXLD = @CXXLD@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVISVGM_TREE = @DVISVGM_TREE@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FREETYPE2_DEPEND = @FREETYPE2_DEPEND@
+FREETYPE2_INCLUDES = @FREETYPE2_INCLUDES@
+FREETYPE2_LIBS = @FREETYPE2_LIBS@
+FT2_CONFIG = @FT2_CONFIG@
+GREP = @GREP@
+HAVE_CXX11 = @HAVE_CXX11@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KPATHSEA_DEPEND = @KPATHSEA_DEPEND@
+KPATHSEA_INCLUDES = @KPATHSEA_INCLUDES@
+KPATHSEA_LIBS = @KPATHSEA_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBGS_INCLUDES = @LIBGS_INCLUDES@
+LIBGS_LIBS = @LIBGS_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POTRACE_DEPEND = @POTRACE_DEPEND@
+POTRACE_INCLUDES = @POTRACE_INCLUDES@
+POTRACE_LIBS = @POTRACE_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WOFF2_CFLAGS = @WOFF2_CFLAGS@
+WOFF2_LIBS = @WOFF2_LIBS@
+ZLIB_DEPEND = @ZLIB_DEPEND@
+ZLIB_INCLUDES = @ZLIB_INCLUDES@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+dvisvgm_srcdir = @dvisvgm_srcdir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_HEADERS = \
+	boost-vectorstream.hpp \
+	vectorstream.hpp
+
+EXTRA_DIST = LICENSE.txt
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign dvisvgm-src/libs/boost/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign dvisvgm-src/libs/boost/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool cscopelist-am ctags ctags-am distclean \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/Makefile.in
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/boost-vectorstream.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/boost-vectorstream.hpp	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/boost-vectorstream.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,607 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/interprocess for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// This file comes from SGI's sstream file. Modified by Ion Gaztanaga 2005-2012.
+// Changed internal SGI string to a generic, templatized vector. Added efficient
+// internal buffer get/set/swap functions, so that we can obtain/establish the
+// internal buffer without any reallocation or copy. Kill those temporaries!
+///////////////////////////////////////////////////////////////////////////////
+/*
+ * Copyright (c) 1998
+ * Silicon Graphics Computer Systems, Inc.
+ *
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation.  Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied warranty.
+ */
+
+//!\file
+//!This file defines basic_vectorbuf, basic_ivectorstream,
+//!basic_ovectorstream, and basic_vectorstreamclasses.  These classes
+//!represent streamsbufs and streams whose sources or destinations are
+//!STL-like vectors that can be swapped with external vectors to avoid
+//!unnecessary allocations/copies.
+
+#ifndef BOOST_INTERPROCESS_VECTORSTREAM_HPP
+#define BOOST_INTERPROCESS_VECTORSTREAM_HPP
+
+#include <iosfwd>
+#include <ios>
+#include <istream>
+#include <ostream>
+#include <string>    // char traits
+#include <cstddef>   // ptrdiff_t
+
+namespace boost {  namespace interprocess {
+
+//!A streambuf class that controls the transmission of elements to and from
+//!a basic_ivectorstream, basic_ovectorstream or basic_vectorstream.
+//!It holds a character vector specified by CharVector template parameter
+//!as its formatting buffer. The vector must have contiguous storage, like
+//!std::vector, boost::interprocess::vector or boost::interprocess::basic_string
+template <class CharVector, class CharTraits>
+class basic_vectorbuf
+   : public std::basic_streambuf<typename CharVector::value_type, CharTraits>
+{
+   public:
+   typedef CharVector                        vector_type;
+   typedef typename CharVector::value_type   char_type;
+   typedef typename CharTraits::int_type     int_type;
+   typedef typename CharTraits::pos_type     pos_type;
+   typedef typename CharTraits::off_type     off_type;
+   typedef CharTraits                        traits_type;
+
+   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
+   private:
+   typedef std::basic_streambuf<char_type, traits_type> base_t;
+
+   basic_vectorbuf(const basic_vectorbuf&);
+   basic_vectorbuf & operator =(const basic_vectorbuf&);
+   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+
+   public:
+   //!Constructor. Throws if vector_type default
+   //!constructor throws.
+   explicit basic_vectorbuf(std::ios_base::openmode mode
+                              = std::ios_base::in | std::ios_base::out)
+      :  base_t(), m_mode(mode)
+   {  this->initialize_pointers();   }
+
+   //!Constructor. Throws if
+   //!vector_type(const VectorParameter &param) throws.
+   template<class VectorParameter>
+   explicit basic_vectorbuf(const VectorParameter &param,
+                            std::ios_base::openmode mode
+                                 = std::ios_base::in | std::ios_base::out)
+      :  base_t(), m_mode(mode), m_vect(param)
+   {  this->initialize_pointers();   }
+
+   public:
+
+   //!Swaps the underlying vector with the passed vector.
+   //!This function resets the read/write position in the stream.
+   //!Does not throw.
+   void swap_vector(vector_type &vect)
+   {
+      if (this->m_mode & std::ios_base::out){
+         //Update high water if necessary
+         //And resize vector to remove extra size
+         if (mp_high_water < base_t::pptr()){
+            //Restore the vector's size if necessary
+            mp_high_water = base_t::pptr();
+         }
+         //This does not reallocate
+         m_vect.resize(std::size_t(mp_high_water - (m_vect.size() ? &m_vect[0] : 0)));
+      }
+      //Now swap vector
+      m_vect.swap(vect);
+      this->initialize_pointers();
+   }
+
+   //!Returns a const reference to the internal vector.
+   //!Does not throw.
+   const vector_type &vector() const
+   {
+      if (this->m_mode & std::ios_base::out){
+         if (mp_high_water < base_t::pptr()){
+            //Restore the vector's size if necessary
+            mp_high_water = base_t::pptr();
+         }
+         //This shouldn't reallocate
+         typedef typename vector_type::size_type size_type;
+         char_type *old_ptr = base_t::pbase();
+         size_type high_pos = size_type(mp_high_water-old_ptr);
+         if(m_vect.size() > high_pos){
+            m_vect.resize(high_pos);
+            //But we must update end write pointer because vector size is now shorter
+            int old_pos = (int)(base_t::pptr() - base_t::pbase());
+            const_cast<basic_vectorbuf*>(this)->base_t::setp(old_ptr, old_ptr + high_pos);
+            const_cast<basic_vectorbuf*>(this)->base_t::pbump(old_pos);
+         }
+      }
+      return m_vect;
+   }
+
+   //!Preallocates memory from the internal vector.
+   //!Resets the stream to the first position.
+   //!Throws if the internals vector's memory allocation throws.
+   void reserve(typename vector_type::size_type size)
+   {
+      if (this->m_mode & std::ios_base::out && size > m_vect.size()){
+         typename vector_type::difference_type write_pos = base_t::pptr() - base_t::pbase();
+         typename vector_type::difference_type read_pos  = base_t::gptr() - base_t::eback();
+         //Now update pointer data
+         m_vect.reserve(size);
+         this->initialize_pointers();
+         base_t::pbump((int)write_pos);
+         if(this->m_mode & std::ios_base::in){
+            base_t::gbump((int)read_pos);
+         }
+      }
+   }
+
+   //!Calls clear() method of the internal vector.
+   //!Resets the stream to the first position.
+   void clear()
+   {  m_vect.clear();   this->initialize_pointers();   }
+
+   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
+   private:
+   //Maximizes high watermark to the initial vector size,
+   //initializes read and write iostream buffers to the capacity
+   //and resets stream positions
+   void initialize_pointers()
+   {
+      // The initial read position is the beginning of the vector.
+      if(!(m_mode & std::ios_base::out)){
+         if(m_vect.empty()){
+            this->setg(0, 0, 0);
+         }
+         else{
+            this->setg(&m_vect[0], &m_vect[0], &m_vect[0] + m_vect.size());
+         }
+      }
+
+      // The initial write position is the beginning of the vector.
+      if(m_mode & std::ios_base::out){
+         //First get real size
+         int real_size = (int)m_vect.size();
+         //Then maximize size for high watermarking
+         m_vect.resize(m_vect.capacity());
+         BOOST_ASSERT(m_vect.size() == m_vect.capacity());
+         //Set high watermarking with the expanded size
+         mp_high_water = m_vect.size() ? (&m_vect[0] + real_size) : 0;
+         //Now set formatting pointers
+         if(m_vect.empty()){
+            this->setp(0, 0);
+            if(m_mode & std::ios_base::in)
+               this->setg(0, 0, 0);
+         }
+         else{
+            char_type *p = &m_vect[0];
+            this->setp(p, p + m_vect.size());
+            if(m_mode & std::ios_base::in)
+               this->setg(p, p, p + real_size);
+         }
+         if (m_mode & (std::ios_base::app | std::ios_base::ate)){
+            base_t::pbump((int)real_size);
+         }
+      }
+   }
+
+   protected:
+   virtual int_type underflow() BOOST_OVERRIDE
+   {
+      if (base_t::gptr() == 0)
+         return CharTraits::eof();
+      if(m_mode & std::ios_base::out){
+         if (mp_high_water < base_t::pptr())
+            mp_high_water = base_t::pptr();
+         if (base_t::egptr() < mp_high_water)
+            base_t::setg(base_t::eback(), base_t::gptr(), mp_high_water);
+      }
+      if (base_t::gptr() < base_t::egptr())
+         return CharTraits::to_int_type(*base_t::gptr());
+      return CharTraits::eof();
+   }
+
+   virtual int_type pbackfail(int_type c = CharTraits::eof()) BOOST_OVERRIDE
+   {
+      if(this->gptr() != this->eback()) {
+         if(!CharTraits::eq_int_type(c, CharTraits::eof())) {
+            if(CharTraits::eq(CharTraits::to_char_type(c), this->gptr()[-1])) {
+               this->gbump(-1);
+               return c;
+            }
+            else if(m_mode & std::ios_base::out) {
+               this->gbump(-1);
+               *this->gptr() = CharTraits::to_char_type(c);
+               return c;
+            }
+            else
+               return CharTraits::eof();
+         }
+         else {
+            this->gbump(-1);
+            return CharTraits::not_eof(c);
+         }
+      }
+      else
+         return CharTraits::eof();
+   }
+
+   virtual int_type overflow(int_type c = CharTraits::eof()) BOOST_OVERRIDE
+   {
+      if(m_mode & std::ios_base::out) {
+         if(!CharTraits::eq_int_type(c, CharTraits::eof())) {
+               typedef typename vector_type::difference_type dif_t;
+               //The new output position is the previous one plus one
+               //because 'overflow' requires putting 'c' on the buffer
+               dif_t new_outpos = base_t::pptr() - base_t::pbase() + 1;
+               //Adjust high water if necessary
+               dif_t hipos = mp_high_water - base_t::pbase();
+               if (hipos < new_outpos)
+                  hipos = new_outpos;
+               //Insert the new data
+               m_vect.push_back(CharTraits::to_char_type(c));
+               m_vect.resize(m_vect.capacity());
+               BOOST_ASSERT(m_vect.size() == m_vect.capacity());
+               char_type* p = const_cast<char_type*>(&m_vect[0]);
+               //A reallocation might have happened, update pointers
+               base_t::setp(p, p + (dif_t)m_vect.size());
+               mp_high_water = p + hipos;
+               if (m_mode & std::ios_base::in)
+                  base_t::setg(p, p + (base_t::gptr() - base_t::eback()), mp_high_water);
+               //Update write position to the old position + 1
+               base_t::pbump((int)new_outpos);
+               return c;
+         }
+         else  // c is EOF, so we don't have to do anything
+            return CharTraits::not_eof(c);
+      }
+      else     // Overflow always fails if it's read-only.
+         return CharTraits::eof();
+   }
+
+   virtual pos_type seekoff(off_type off, std::ios_base::seekdir dir,
+                              std::ios_base::openmode mode
+                                 = std::ios_base::in | std::ios_base::out) BOOST_OVERRIDE
+   {
+      //Get seek mode
+      bool in(0 != (mode & std::ios_base::in)), out(0 != (mode & std::ios_base::out));
+      //Test for logic errors
+      if(!in & !out)
+         return pos_type(off_type(-1));
+      else if((in && out) && (dir == std::ios_base::cur))
+         return pos_type(off_type(-1));
+      else if((in  && (!(m_mode & std::ios_base::in) || (off != 0 && this->gptr() == 0) )) ||
+               (out && (!(m_mode & std::ios_base::out) || (off != 0 && this->pptr() == 0))))
+         return pos_type(off_type(-1));
+
+      off_type newoff;
+      //Just calculate the end of the stream. If the stream is read-only
+      //the limit is the size of the vector. Otherwise, the high water mark
+      //will mark the real size.
+      off_type limit;
+      if(m_mode & std::ios_base::out){
+         //Update high water marking because pptr() is going to change and it might
+         //have been updated since last overflow()
+         if(mp_high_water < base_t::pptr())
+            mp_high_water = base_t::pptr();
+         //Update read limits in case high water mark was changed
+         if(m_mode & std::ios_base::in){
+            if (base_t::egptr() < mp_high_water)
+               base_t::setg(base_t::eback(), base_t::gptr(), mp_high_water);
+         }
+         limit = static_cast<off_type>(mp_high_water - base_t::pbase());
+      }
+      else{
+         limit = static_cast<off_type>(m_vect.size());
+      }
+
+      switch(dir) {
+         case std::ios_base::beg:
+            newoff = 0;
+         break;
+         case std::ios_base::end:
+            newoff = limit;
+         break;
+         case std::ios_base::cur:
+            newoff = in ? static_cast<std::streamoff>(this->gptr() - this->eback())
+                        : static_cast<std::streamoff>(this->pptr() - this->pbase());
+         break;
+         default:
+            return pos_type(off_type(-1));
+      }
+
+      newoff += off;
+
+      if (newoff < 0 || newoff > limit)
+         return pos_type(-1);
+      if (m_mode & std::ios_base::app && mode & std::ios_base::out && newoff != limit)
+         return pos_type(-1);
+      //This can reassign pointers
+      //if(m_vect.size() != m_vect.capacity())
+         //this->initialize_pointers();
+      if (in)
+         base_t::setg(base_t::eback(), base_t::eback() + newoff, base_t::egptr());
+      if (out){
+         base_t::setp(base_t::pbase(), base_t::epptr());
+         base_t::pbump(static_cast<int>(newoff));
+      }
+      return pos_type(newoff);
+   }
+
+   virtual pos_type seekpos(pos_type pos, std::ios_base::openmode mode
+                                 = std::ios_base::in | std::ios_base::out) BOOST_OVERRIDE
+   {  return seekoff(pos - pos_type(off_type(0)), std::ios_base::beg, mode);  }
+
+   private:
+   std::ios_base::openmode m_mode;
+   mutable vector_type     m_vect;
+   mutable char_type*      mp_high_water;
+   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+};
+
+//!A basic_istream class that holds a character vector specified by CharVector
+//!template parameter as its formatting buffer. The vector must have
+//!contiguous storage, like std::vector, boost::interprocess::vector or
+//!boost::interprocess::basic_string
+template <class CharVector, class CharTraits>
+class basic_ivectorstream
+   : public std::basic_istream<typename CharVector::value_type, CharTraits>
+   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
+   , private basic_vectorbuf<CharVector, CharTraits>
+   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+{
+   public:
+   typedef CharVector                                                   vector_type;
+   typedef typename std::basic_ios
+      <typename CharVector::value_type, CharTraits>::char_type          char_type;
+   typedef typename std::basic_ios<char_type, CharTraits>::int_type     int_type;
+   typedef typename std::basic_ios<char_type, CharTraits>::pos_type     pos_type;
+   typedef typename std::basic_ios<char_type, CharTraits>::off_type     off_type;
+   typedef typename std::basic_ios<char_type, CharTraits>::traits_type  traits_type;
+
+   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
+   private:
+   typedef basic_vectorbuf<CharVector, CharTraits>    vectorbuf_t;
+   typedef std::basic_ios<char_type, CharTraits>      basic_ios_t;
+   typedef std::basic_istream<char_type, CharTraits>  base_t;
+
+   vectorbuf_t &       get_buf()      {  return *this;  }
+   const vectorbuf_t & get_buf() const{  return *this;  }
+   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+
+   public:
+
+   //!Constructor. Throws if vector_type default
+   //!constructor throws.
+   basic_ivectorstream(std::ios_base::openmode mode = std::ios_base::in)
+      : base_t(0) //Initializes first the base class to safely init the virtual basic_ios base
+                  //(via basic_ios::init() call in base_t's constructor) without the risk of a
+                  //previous throwing vectorbuf constructor. Set the streambuf after risk has gone.
+      , vectorbuf_t(mode | std::ios_base::in)
+   {  this->base_t::rdbuf(&get_buf()); }
+
+   //!Constructor. Throws if vector_type(const VectorParameter &param)
+   //!throws.
+   template<class VectorParameter>
+   basic_ivectorstream(const VectorParameter &param,
+                       std::ios_base::openmode mode = std::ios_base::in)
+      : vectorbuf_t(param, mode | std::ios_base::in)
+         //basic_ios_t() is constructed uninitialized as virtual base
+         //and initialized inside base_t calling basic_ios::init()
+      , base_t(&get_buf())
+   {}
+
+   public:
+   //!Returns the address of the stored
+   //!stream buffer.
+   basic_vectorbuf<CharVector, CharTraits>* rdbuf() const
+   { return const_cast<basic_vectorbuf<CharVector, CharTraits>*>(&get_buf()); }
+
+   //!Swaps the underlying vector with the passed vector.
+   //!This function resets the read position in the stream.
+   //!Does not throw.
+   void swap_vector(vector_type &vect)
+   {  get_buf().swap_vector(vect);   }
+
+   //!Returns a const reference to the internal vector.
+   //!Does not throw.
+   const vector_type &vector() const
+   {  return get_buf().vector();   }
+
+   //!Calls reserve() method of the internal vector.
+   //!Resets the stream to the first position.
+   //!Throws if the internals vector's reserve throws.
+   void reserve(typename vector_type::size_type size)
+   {  get_buf().reserve(size);   }
+
+   //!Calls clear() method of the internal vector.
+   //!Resets the stream to the first position.
+   void clear()
+   {  get_buf().clear();   }
+};
+
+//!A basic_ostream class that holds a character vector specified by CharVector
+//!template parameter as its formatting buffer. The vector must have
+//!contiguous storage, like std::vector, boost::interprocess::vector or
+//!boost::interprocess::basic_string
+template <class CharVector, class CharTraits>
+class basic_ovectorstream
+   : public std::basic_ostream<typename CharVector::value_type, CharTraits>
+   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
+   , private basic_vectorbuf<CharVector, CharTraits>
+   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+{
+   public:
+   typedef CharVector                                                   vector_type;
+   typedef typename std::basic_ios
+      <typename CharVector::value_type, CharTraits>::char_type          char_type;
+   typedef typename std::basic_ios<char_type, CharTraits>::int_type     int_type;
+   typedef typename std::basic_ios<char_type, CharTraits>::pos_type     pos_type;
+   typedef typename std::basic_ios<char_type, CharTraits>::off_type     off_type;
+   typedef typename std::basic_ios<char_type, CharTraits>::traits_type  traits_type;
+
+   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
+   private:
+   typedef basic_vectorbuf<CharVector, CharTraits>    vectorbuf_t;
+   typedef std::basic_ios<char_type, CharTraits>      basic_ios_t;
+   typedef std::basic_ostream<char_type, CharTraits>  base_t;
+
+   vectorbuf_t &       get_buf()      {  return *this;  }
+   const vectorbuf_t & get_buf()const {  return *this;  }
+   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+
+   public:
+   //!Constructor. Throws if vector_type default
+   //!constructor throws.
+   basic_ovectorstream(std::ios_base::openmode mode = std::ios_base::out)
+      : base_t(0) //Initializes first the base class to safely init the virtual basic_ios base
+                  //(via basic_ios::init() call in base_t's constructor) without the risk of a
+                  //previous throwing vectorbuf constructor. Set the streambuf after risk has gone.
+      , vectorbuf_t(mode | std::ios_base::out)
+   {  this->base_t::rdbuf(&get_buf()); }
+
+   //!Constructor. Throws if vector_type(const VectorParameter &param)
+   //!throws.
+   template<class VectorParameter>
+   basic_ovectorstream(const VectorParameter &param,
+                        std::ios_base::openmode mode = std::ios_base::out)
+      : base_t(0) //Initializes first the base class to safely init the virtual basic_ios base
+                  //(via basic_ios::init() call in base_t's constructor) without the risk of a
+                  //previous throwing vectorbuf constructor. Set the streambuf after risk has gone.
+      , vectorbuf_t(param, mode | std::ios_base::out)
+   {  this->base_t::rdbuf(&get_buf()); }
+
+   public:
+   //!Returns the address of the stored
+   //!stream buffer.
+   basic_vectorbuf<CharVector, CharTraits>* rdbuf() const
+   { return const_cast<basic_vectorbuf<CharVector, CharTraits>*>(&get_buf()); }
+
+   //!Swaps the underlying vector with the passed vector.
+   //!This function resets the write position in the stream.
+   //!Does not throw.
+   void swap_vector(vector_type &vect)
+   {  get_buf().swap_vector(vect);   }
+
+   //!Returns a const reference to the internal vector.
+   //!Does not throw.
+   const vector_type &vector() const
+   {  return get_buf().vector();   }
+
+   //!Calls reserve() method of the internal vector.
+   //!Resets the stream to the first position.
+   //!Throws if the internals vector's reserve throws.
+   void reserve(typename vector_type::size_type size)
+   {  get_buf().reserve(size);   }
+};
+
+//!A basic_iostream class that holds a character vector specified by CharVector
+//!template parameter as its formatting buffer. The vector must have
+//!contiguous storage, like std::vector, boost::interprocess::vector or
+//!boost::interprocess::basic_string
+template <class CharVector, class CharTraits>
+class basic_vectorstream
+   : public std::basic_iostream<typename CharVector::value_type, CharTraits>
+   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
+   , private basic_vectorbuf<CharVector, CharTraits>
+   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+{
+   public:
+   typedef CharVector                                                   vector_type;
+   typedef typename std::basic_ios
+      <typename CharVector::value_type, CharTraits>::char_type          char_type;
+   typedef typename std::basic_ios<char_type, CharTraits>::int_type     int_type;
+   typedef typename std::basic_ios<char_type, CharTraits>::pos_type     pos_type;
+   typedef typename std::basic_ios<char_type, CharTraits>::off_type     off_type;
+   typedef typename std::basic_ios<char_type, CharTraits>::traits_type  traits_type;
+
+   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
+   private:
+   typedef basic_vectorbuf<CharVector, CharTraits>    vectorbuf_t;
+   typedef std::basic_ios<char_type, CharTraits>      basic_ios_t;
+   typedef std::basic_iostream<char_type, CharTraits> base_t;
+
+   vectorbuf_t &       get_buf()      {  return *this;  }
+   const vectorbuf_t & get_buf() const{  return *this;  }
+   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+
+   public:
+   //!Constructor. Throws if vector_type default
+   //!constructor throws.
+   basic_vectorstream(std::ios_base::openmode mode
+                      = std::ios_base::in | std::ios_base::out)
+      : base_t(0) //Initializes first the base class to safely init the virtual basic_ios base
+                  //(via basic_ios::init() call in base_t's constructor) without the risk of a
+                  //previous throwing vectorbuf constructor. Set the streambuf after risk has gone.
+      , vectorbuf_t(mode)
+   {  this->base_t::rdbuf(&get_buf()); }
+
+   //!Constructor. Throws if vector_type(const VectorParameter &param)
+   //!throws.
+   template<class VectorParameter>
+   basic_vectorstream(const VectorParameter &param, std::ios_base::openmode mode
+                      = std::ios_base::in | std::ios_base::out)
+      : base_t(0) //Initializes first the base class to safely init the virtual basic_ios base
+                  //(via basic_ios::init() call in base_t's constructor) without the risk of a
+                  //previous throwing vectorbuf constructor. Set the streambuf after risk has gone.
+      , vectorbuf_t(param, mode)
+   {  this->base_t::rdbuf(&get_buf()); }
+
+   public:
+   //Returns the address of the stored stream buffer.
+   basic_vectorbuf<CharVector, CharTraits>* rdbuf() const
+   { return const_cast<basic_vectorbuf<CharVector, CharTraits>*>(&get_buf()); }
+
+   //!Swaps the underlying vector with the passed vector.
+   //!This function resets the read/write position in the stream.
+   //!Does not throw.
+   void swap_vector(vector_type &vect)
+   {  get_buf().swap_vector(vect);   }
+
+   //!Returns a const reference to the internal vector.
+   //!Does not throw.
+   const vector_type &vector() const
+   {  return get_buf().vector();   }
+
+   //!Calls reserve() method of the internal vector.
+   //!Resets the stream to the first position.
+   //!Throws if the internals vector's reserve throws.
+   void reserve(typename vector_type::size_type size)
+   {  get_buf().reserve(size);   }
+
+   //!Calls clear() method of the internal vector.
+   //!Resets the stream to the first position.
+   void clear()
+   {  get_buf().clear();   }
+};
+
+//Some typedefs to simplify usage
+//!
+//!typedef basic_vectorbuf<std::vector<char> >        vectorbuf;
+//!typedef basic_vectorstream<std::vector<char> >     vectorstream;
+//!typedef basic_ivectorstream<std::vector<char> >    ivectorstream;
+//!typedef basic_ovectorstream<std::vector<char> >    ovectorstream;
+//!
+//!typedef basic_vectorbuf<std::vector<wchar_t> >     wvectorbuf;
+//!typedef basic_vectorstream<std::vector<wchar_t> >  wvectorstream;
+//!typedef basic_ivectorstream<std::vector<wchar_t> > wivectorstream;
+//!typedef basic_ovectorstream<std::vector<wchar_t> > wovectorstream;
+
+}} //namespace boost {  namespace interprocess {
+
+#endif /* BOOST_INTERPROCESS_VECTORSTREAM_HPP */

Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/vectorstream.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/vectorstream.hpp	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/boost/vectorstream.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,17 @@
+#pragma once
+
+#ifndef BOOST_OVERRIDE
+#define BOOST_OVERRIDE override
+#endif
+
+#ifndef BOOST_ASSERT
+#define BOOST_ASSERT(expr)
+#endif
+
+#include "boost-vectorstream.hpp"
+
+template <class CharVector>
+using ovectorstream = boost::interprocess::basic_ovectorstream<CharVector, std::char_traits<typename CharVector::value_type>>;
+
+template <class CharVector>
+using ivectorstream = boost::interprocess::basic_ivectorstream<CharVector, std::char_traits<typename CharVector::value_type>>;

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.am	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.am	2023-01-20 01:55:04 UTC (rev 65593)
@@ -81,7 +81,6 @@
 
 AM_CFLAGS = -Wall -I$(srcdir)/include
 
- at CODE_COVERAGE_RULES@
 endif
 
 EXTRA_DIST = LICENSE

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.in	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/brotli/Makefile.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -90,7 +90,8 @@
 host_triplet = @host@
 subdir = dvisvgm-src/libs/brotli
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/dvisvgm-src/m4/ax_gcc_builtin.m4 \
+	$(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
 	$(top_srcdir)/../../m4/kpse-common.m4 \
 	$(top_srcdir)/../../m4/kpse-cxx-hack.m4 \
 	$(top_srcdir)/../../m4/kpse-freetype2-flags.m4 \
@@ -932,8 +933,6 @@
 .PRECIOUS: Makefile
 
 
- at HAVE_BROTLI_FALSE@@CODE_COVERAGE_RULES@
-
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/clipper/Makefile.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/clipper/Makefile.am	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/clipper/Makefile.am	2023-01-20 01:55:04 UTC (rev 65593)
@@ -6,6 +6,4 @@
 
 clipper.cpp: clipper.hpp
 
- at CODE_COVERAGE_RULES@
-
 CLEANFILES = *.gcda *.gcno

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/clipper/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/clipper/Makefile.in	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/clipper/Makefile.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -90,7 +90,8 @@
 host_triplet = @host@
 subdir = dvisvgm-src/libs/clipper
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/dvisvgm-src/m4/ax_gcc_builtin.m4 \
+	$(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
 	$(top_srcdir)/../../m4/kpse-common.m4 \
 	$(top_srcdir)/../../m4/kpse-cxx-hack.m4 \
 	$(top_srcdir)/../../m4/kpse-freetype2-flags.m4 \
@@ -663,8 +664,6 @@
 
 clipper.cpp: clipper.hpp
 
- at CODE_COVERAGE_RULES@
-
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/defs.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/defs.am	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/defs.am	2023-01-20 01:55:04 UTC (rev 65593)
@@ -4,7 +4,16 @@
 endif
 
 if !HAVE_POTRACE
+# Gets automake warnings:
+#   dvisvgm-src/src/../libs/defs.am:9: warning: POTRACE_LIBS was already defined in condition TRUE, which includes condition !HAVE_POTRACE and !TEXLIVE_BUILD ...
+#   dvisvgm-src/src/Makefile.am:14:   'dvisvgm-src/src/../libs/defs.am' included from here
+#   configure.ac:51: ... 'POTRACE_LIBS' previously defined here
+#if !TEXLIVE_BUILD
+#POTRACE_CFLAGS = -I$(dvisvgm_srcdir)/libs/potrace
+#POTRACE_LIBS = ../libs/potrace/libpotrace.a
+#else
 POTRACE_CFLAGS = $(POTRACE_INCLUDES)
+#endif TEXLIVE_BUILD
 endif
 
 if !HAVE_WOFF2

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/md5/Makefile.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/md5/Makefile.am	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/md5/Makefile.am	2023-01-20 01:55:04 UTC (rev 65593)
@@ -6,7 +6,6 @@
 
 md5.c: md5.h
 
- at CODE_COVERAGE_RULES@
 endif
 
 CLEANFILES = *.gcda *.gcno

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/md5/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/md5/Makefile.in	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/md5/Makefile.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -90,7 +90,8 @@
 host_triplet = @host@
 subdir = dvisvgm-src/libs/md5
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/dvisvgm-src/m4/ax_gcc_builtin.m4 \
+	$(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
 	$(top_srcdir)/../../m4/kpse-common.m4 \
 	$(top_srcdir)/../../m4/kpse-cxx-hack.m4 \
 	$(top_srcdir)/../../m4/kpse-freetype2-flags.m4 \
@@ -646,8 +647,6 @@
 
 @USE_BUNDLED_MD5_TRUE at md5.c: md5.h
 
- at USE_BUNDLED_MD5_TRUE@@CODE_COVERAGE_RULES@
-
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:

Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/Makefile.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/Makefile.am	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/Makefile.am	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,22 @@
+if !HAVE_POTRACE
+noinst_LIBRARIES = libpotrace.a
+libpotrace_a_SOURCES = \
+	auxiliary.h \
+	bitmap.h \
+	config.h \
+	curve.c \
+	curve.h \
+	decompose.c \
+	decompose.h \
+	lists.h \
+	potracelib.c \
+	potracelib.h \
+	progress.h \
+	trace.c \
+	trace.h
+
+AM_CFLAGS = -Wall -I$(srcdir)
+
+endif
+
+CLEANFILES = *.gcda *.gcno


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/Makefile.am
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/Makefile.in	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/Makefile.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,677 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# 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,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = libs/potrace
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \
+	$(top_srcdir)/m4/ax_ac_print_to_file.m4 \
+	$(top_srcdir)/m4/ax_add_am_macro_static.m4 \
+	$(top_srcdir)/m4/ax_am_macros_static.m4 \
+	$(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/ax_file_escapes.m4 \
+	$(top_srcdir)/m4/ax_gcc_builtin.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__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_ at AM_V@)
+am__v_AR_ = $(am__v_AR_ at AM_DEFAULT_V@)
+am__v_AR_0 = @echo "  AR      " $@;
+am__v_AR_1 = 
+libpotrace_a_AR = $(AR) $(ARFLAGS)
+libpotrace_a_LIBADD =
+am__libpotrace_a_SOURCES_DIST = auxiliary.h bitmap.h config.h curve.c \
+	curve.h decompose.c decompose.h lists.h potracelib.c \
+	potracelib.h progress.h trace.c trace.h
+ at HAVE_POTRACE_FALSE@am_libpotrace_a_OBJECTS = curve.$(OBJEXT) \
+ at HAVE_POTRACE_FALSE@	decompose.$(OBJEXT) potracelib.$(OBJEXT) \
+ at HAVE_POTRACE_FALSE@	trace.$(OBJEXT)
+libpotrace_a_OBJECTS = $(am_libpotrace_a_OBJECTS)
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/curve.Po ./$(DEPDIR)/decompose.Po \
+	./$(DEPDIR)/potracelib.Po ./$(DEPDIR)/trace.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libpotrace_a_SOURCES)
+DIST_SOURCES = $(am__libpotrace_a_SOURCES_DIST)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_CPPFLAGS = @AM_CPPFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_LDFLAGS = @AM_LDFLAGS@
+AR = @AR@
+ASCIIDOC = @ASCIIDOC@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BROTLI_CFLAGS = @BROTLI_CFLAGS@
+BROTLI_LIBS = @BROTLI_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+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@
+GENHTML = @GENHTML@
+GREP = @GREP@
+HAVE_CXX11 = @HAVE_CXX11@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KPSE_CFLAGS = @KPSE_CFLAGS@
+KPSE_LIBS = @KPSE_LIBS@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@
+LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TTFAUTOHINT_CFLAGS = @TTFAUTOHINT_CFLAGS@
+TTFAUTOHINT_LIBS = @TTFAUTOHINT_LIBS@
+VERSION = @VERSION@
+WOFF2_CFLAGS = @WOFF2_CFLAGS@
+WOFF2_LIBS = @WOFF2_LIBS@
+XMLTO = @XMLTO@
+XSLTPROC = @XSLTPROC@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+dvisvgm_srcdir = @dvisvgm_srcdir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+ifGNUmake = @ifGNUmake@
+ifnGNUmake = @ifnGNUmake@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ at HAVE_POTRACE_FALSE@noinst_LIBRARIES = libpotrace.a
+ at HAVE_POTRACE_FALSE@libpotrace_a_SOURCES = \
+ at HAVE_POTRACE_FALSE@	auxiliary.h \
+ at HAVE_POTRACE_FALSE@	bitmap.h \
+ at HAVE_POTRACE_FALSE@	config.h \
+ at HAVE_POTRACE_FALSE@	curve.c \
+ at HAVE_POTRACE_FALSE@	curve.h \
+ at HAVE_POTRACE_FALSE@	decompose.c \
+ at HAVE_POTRACE_FALSE@	decompose.h \
+ at HAVE_POTRACE_FALSE@	lists.h \
+ at HAVE_POTRACE_FALSE@	potracelib.c \
+ at HAVE_POTRACE_FALSE@	potracelib.h \
+ at HAVE_POTRACE_FALSE@	progress.h \
+ at HAVE_POTRACE_FALSE@	trace.c \
+ at HAVE_POTRACE_FALSE@	trace.h
+
+ at HAVE_POTRACE_FALSE@AM_CFLAGS = -Wall -I$(srcdir)
+CLEANFILES = *.gcda *.gcno
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libs/potrace/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign libs/potrace/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+
+libpotrace.a: $(libpotrace_a_OBJECTS) $(libpotrace_a_DEPENDENCIES) $(EXTRA_libpotrace_a_DEPENDENCIES) 
+	$(AM_V_at)-rm -f libpotrace.a
+	$(AM_V_AR)$(libpotrace_a_AR) libpotrace.a $(libpotrace_a_OBJECTS) $(libpotrace_a_LIBADD)
+	$(AM_V_at)$(RANLIB) libpotrace.a
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/curve.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/decompose.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/potracelib.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/trace.Po at am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+	@$(MKDIR_P) $(@D)
+	@echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ at am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+ at am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ at am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+		-rm -f ./$(DEPDIR)/curve.Po
+	-rm -f ./$(DEPDIR)/decompose.Po
+	-rm -f ./$(DEPDIR)/potracelib.Po
+	-rm -f ./$(DEPDIR)/trace.Po
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+		-rm -f ./$(DEPDIR)/curve.Po
+	-rm -f ./$(DEPDIR)/decompose.Po
+	-rm -f ./$(DEPDIR)/potracelib.Po
+	-rm -f ./$(DEPDIR)/trace.Po
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+	clean-generic clean-libtool clean-noinstLIBRARIES \
+	cscopelist-am ctags ctags-am distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/Makefile.in
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/auxiliary.h
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/auxiliary.h	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/auxiliary.h	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,80 @@
+/* Copyright (C) 2001-2019 Peter Selinger.
+   This file is part of Potrace. It is free software and it is covered
+   by the GNU General Public License. See the file COPYING for details. */
+
+/* This header file collects some general-purpose macros (and static
+   inline functions) that are used in various places. */
+
+#ifndef AUXILIARY_H
+#define AUXILIARY_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+
+/* ---------------------------------------------------------------------- */
+/* point arithmetic */
+
+#include "potracelib.h"
+
+struct point_s {
+  long x;
+  long y;
+};
+typedef struct point_s point_t;
+
+typedef potrace_dpoint_t dpoint_t;
+
+/* convert point_t to dpoint_t */
+static inline dpoint_t dpoint(point_t p) {
+  dpoint_t res;
+  res.x = p.x;
+  res.y = p.y;
+  return res;
+}
+
+/* range over the straight line segment [a,b] when lambda ranges over [0,1] */
+static inline dpoint_t interval(double lambda, dpoint_t a, dpoint_t b) {
+  dpoint_t res;
+
+  res.x = a.x + lambda * (b.x - a.x);
+  res.y = a.y + lambda * (b.y - a.y);
+  return res;
+}
+
+/* ---------------------------------------------------------------------- */
+/* some useful macros. Note: the "mod" macro works correctly for
+   negative a. Also note that the test for a>=n, while redundant,
+   speeds up the mod function by 70% in the average case (significant
+   since the program spends about 16% of its time here - or 40%
+   without the test). The "floordiv" macro returns the largest integer
+   <= a/n, and again this works correctly for negative a, as long as
+   a,n are integers and n>0. */
+
+/* integer arithmetic */
+
+static inline int mod(int a, int n) {
+  return a>=n ? a%n : a>=0 ? a : n-1-(-1-a)%n;
+}
+
+static inline int floordiv(int a, int n) {
+  return a>=0 ? a/n : -1-(-1-a)/n;
+}
+
+/* Note: the following work for integers and other numeric types. */
+#undef sign
+#undef abs
+#undef min
+#undef max
+#undef sq
+#undef cu
+#define sign(x) ((x)>0 ? 1 : (x)<0 ? -1 : 0)
+#define abs(a) ((a)>0 ? (a) : -(a))
+#define min(a,b) ((a)<(b) ? (a) : (b))
+#define max(a,b) ((a)>(b) ? (a) : (b))
+#define sq(a) ((a)*(a))
+#define cu(a) ((a)*(a)*(a))
+
+#endif /* AUXILIARY_H */


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/auxiliary.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/bitmap.h
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/bitmap.h	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/bitmap.h	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,228 @@
+/* Copyright (C) 2001-2019 Peter Selinger.
+   This file is part of Potrace. It is free software and it is covered
+   by the GNU General Public License. See the file COPYING for details. */
+
+#ifndef BITMAP_H
+#define BITMAP_H
+
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stddef.h>
+
+/* The bitmap type is defined in potracelib.h */
+#include "potracelib.h"
+
+/* The present file defines some convenient macros and static inline
+   functions for accessing bitmaps. Since they only produce inline
+   code, they can be conveniently shared by the library and frontends,
+   if desired */
+
+/* ---------------------------------------------------------------------- */
+/* some measurements */
+
+#define BM_WORDSIZE ((int)sizeof(potrace_word))
+#define BM_WORDBITS (8*BM_WORDSIZE)
+#define BM_HIBIT (((potrace_word)1)<<(BM_WORDBITS-1))
+#define BM_ALLBITS (~(potrace_word)0)
+
+/* macros for accessing pixel at index (x,y). U* macros omit the
+   bounds check. */
+
+#define bm_scanline(bm, y) ((bm)->map + (ptrdiff_t)(y)*(ptrdiff_t)(bm)->dy)
+#define bm_index(bm, x, y) (&bm_scanline(bm, y)[(x)/BM_WORDBITS])
+#define bm_mask(x) (BM_HIBIT >> ((x) & (BM_WORDBITS-1)))
+#define bm_range(x, a) ((int)(x) >= 0 && (int)(x) < (a))
+#define bm_safe(bm, x, y) (bm_range(x, (bm)->w) && bm_range(y, (bm)->h))
+#define BM_UGET(bm, x, y) ((*bm_index(bm, x, y) & bm_mask(x)) != 0)
+#define BM_USET(bm, x, y) (*bm_index(bm, x, y) |= bm_mask(x))
+#define BM_UCLR(bm, x, y) (*bm_index(bm, x, y) &= ~bm_mask(x))
+#define BM_UINV(bm, x, y) (*bm_index(bm, x, y) ^= bm_mask(x))
+#define BM_UPUT(bm, x, y, b) ((b) ? BM_USET(bm, x, y) : BM_UCLR(bm, x, y))
+#define BM_GET(bm, x, y) (bm_safe(bm, x, y) ? BM_UGET(bm, x, y) : 0)
+#define BM_SET(bm, x, y) (bm_safe(bm, x, y) ? BM_USET(bm, x, y) : 0)
+#define BM_CLR(bm, x, y) (bm_safe(bm, x, y) ? BM_UCLR(bm, x, y) : 0)
+#define BM_INV(bm, x, y) (bm_safe(bm, x, y) ? BM_UINV(bm, x, y) : 0)
+#define BM_PUT(bm, x, y, b) (bm_safe(bm, x, y) ? BM_UPUT(bm, x, y, b) : 0)
+
+/* calculate the size, in bytes, required for the data area of a
+   bitmap of the given dy and h. Assume h >= 0. Return -1 if the size
+   does not fit into the ptrdiff_t type. */
+static inline ptrdiff_t getsize(int dy, int h) {
+  ptrdiff_t size;
+
+  if (dy < 0) {
+    dy = -dy;
+  }
+  
+  size = (ptrdiff_t)dy * (ptrdiff_t)h * (ptrdiff_t)BM_WORDSIZE;
+
+  /* check for overflow error */
+  if (size < 0 || (h != 0 && dy != 0 && size / h / dy != BM_WORDSIZE)) {
+    return -1;
+  }
+
+  return size;
+}
+
+/* return the size, in bytes, of the data area of the bitmap. Return
+   -1 if the size does not fit into the ptrdiff_t type; however, this
+   cannot happen if the bitmap is well-formed, i.e., if created with
+   bm_new or bm_dup. */
+static inline ptrdiff_t bm_size(const potrace_bitmap_t *bm) {
+  return getsize(bm->dy, bm->h);
+}
+
+/* calculate the base address of the bitmap data. Assume that the
+   bitmap is well-formed, i.e., its size fits into the ptrdiff_t type.
+   This is the case if created with bm_new or bm_dup. The base address
+   may differ from bm->map if dy is negative */
+static inline potrace_word *bm_base(const potrace_bitmap_t *bm) {
+  int dy = bm->dy;
+
+  if (dy >= 0 || bm->h == 0) {
+    return bm->map;
+  } else {
+    return bm_scanline(bm, bm->h - 1);
+  }  
+}
+
+/* free the given bitmap. Leaves errno untouched. */
+static inline void bm_free(potrace_bitmap_t *bm) {
+  if (bm && bm->map) {
+    free(bm_base(bm));
+  }
+  free(bm);
+}
+
+/* return new bitmap initialized to 0. NULL with errno on error.
+   Assumes w, h >= 0. */
+static inline potrace_bitmap_t *bm_new(int w, int h) {
+  potrace_bitmap_t *bm;
+  int dy = w == 0 ? 0 : (w - 1) / BM_WORDBITS + 1;
+  ptrdiff_t size;
+
+  size = getsize(dy, h);
+  if (size < 0) {
+    errno = ENOMEM;
+    return NULL;
+  }
+  if (size == 0) {
+    size = BM_WORDSIZE; /* make sure calloc() doesn't return NULL */
+  } 
+
+  bm = (potrace_bitmap_t *) malloc(sizeof(potrace_bitmap_t));
+  if (!bm) {
+    return NULL;
+  }
+  bm->w = w;
+  bm->h = h;
+  bm->dy = dy;
+  bm->map = (potrace_word *) calloc(1, size);
+  if (!bm->map) {
+    free(bm);
+    return NULL;
+  }
+  return bm;
+}
+
+/* clear the given bitmap. Set all bits to c. Assumes a well-formed
+   bitmap. */
+static inline void bm_clear(potrace_bitmap_t *bm, int c) {
+  /* Note: if the bitmap was created with bm_new, then it is
+     guaranteed that size will fit into the ptrdiff_t type. */
+  ptrdiff_t size = bm_size(bm);
+  memset(bm_base(bm), c ? -1 : 0, size);
+}
+
+/* duplicate the given bitmap. Return NULL on error with errno
+   set. Assumes a well-formed bitmap. */
+static inline potrace_bitmap_t *bm_dup(const potrace_bitmap_t *bm) {
+  potrace_bitmap_t *bm1 = bm_new(bm->w, bm->h);
+  int y;
+  
+  if (!bm1) {
+    return NULL;
+  }
+  for (y=0; y < bm->h; y++) {
+    memcpy(bm_scanline(bm1, y), bm_scanline(bm, y), (size_t)bm1->dy * (size_t)BM_WORDSIZE);
+  }
+  return bm1;
+}
+
+/* invert the given bitmap. */
+static inline void bm_invert(potrace_bitmap_t *bm) {
+  int dy = bm->dy;
+  int y;
+  int i;
+  potrace_word *p;
+
+  if (dy < 0) {
+    dy = -dy;
+  }
+  
+  for (y=0; y < bm->h; y++) {
+    p = bm_scanline(bm, y);
+    for (i=0; i < dy; i++) {
+      p[i] ^= BM_ALLBITS;
+    }
+  }
+}
+
+/* turn the given bitmap upside down. This does not move the bitmap
+   data or change the bm_base() address. */
+static inline void bm_flip(potrace_bitmap_t *bm) {
+  int dy = bm->dy;
+
+  if (bm->h == 0 || bm->h == 1) {
+    return;
+  }
+  
+  bm->map = bm_scanline(bm, bm->h - 1);
+  bm->dy = -dy;
+}
+
+/* resize the bitmap to the given new height. The bitmap data remains
+   bottom-aligned (truncated at the top) when dy >= 0 and top-aligned
+   (truncated at the bottom) when dy < 0. Return 0 on success, or 1 on
+   error with errno set. If the new height is <= the old one, no error
+   should occur. If the new height is larger, the additional bitmap
+   data is *not* initialized. */
+static inline int bm_resize(potrace_bitmap_t *bm, int h) {
+  int dy = bm->dy;
+  ptrdiff_t newsize;
+  potrace_word *newmap;
+
+  if (dy < 0) {
+    bm_flip(bm);
+  }
+  
+  newsize = getsize(dy, h);
+  if (newsize < 0) {
+    errno = ENOMEM;
+    goto error;
+  }
+  if (newsize == 0) {
+    newsize = BM_WORDSIZE; /* make sure realloc() doesn't return NULL */
+  }
+  
+  newmap = (potrace_word *)realloc(bm->map, newsize);
+  if (newmap == NULL) {
+    goto error;
+  }
+  bm->map = newmap;
+  bm->h = h;
+
+  if (dy < 0) {
+    bm_flip(bm);
+  }
+  return 0;
+  
+ error:
+  if (dy < 0) {
+    bm_flip(bm);
+  }
+  return 1;  
+}
+
+#endif /* BITMAP_H */


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/bitmap.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/config.h
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/config.h	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/config.h	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,5 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+#define VERSION "1.16"
+#define HAVE_INTTYPES_H 1
+#endif


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/config.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/curve.c
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/curve.c	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/curve.c	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,112 @@
+/* Copyright (C) 2001-2019 Peter Selinger.
+   This file is part of Potrace. It is free software and it is covered
+   by the GNU General Public License. See the file COPYING for details. */
+
+/* private part of the path and curve data structures */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "potracelib.h"
+#include "lists.h"
+#include "curve.h"
+
+#define SAFE_CALLOC(var, n, typ) \
+  if ((var = (typ *)calloc(n, sizeof(typ))) == NULL) goto calloc_error 
+
+/* ---------------------------------------------------------------------- */
+/* allocate and free path objects */
+
+path_t *path_new(void) {
+  path_t *p = NULL;
+  privpath_t *priv = NULL;
+
+  SAFE_CALLOC(p, 1, path_t);
+  memset(p, 0, sizeof(path_t));
+  SAFE_CALLOC(priv, 1, privpath_t);
+  memset(priv, 0, sizeof(privpath_t));
+  p->priv = priv;
+  return p;
+
+ calloc_error:
+  free(p);
+  free(priv);
+  return NULL;
+}
+
+/* free the members of the given curve structure. Leave errno unchanged. */
+static void privcurve_free_members(privcurve_t *curve) {
+  free(curve->tag);
+  free(curve->c);
+  free(curve->vertex);
+  free(curve->alpha);
+  free(curve->alpha0);
+  free(curve->beta);
+}
+
+/* free a path. Leave errno untouched. */
+void path_free(path_t *p) {
+  if (p) {
+    if (p->priv) {
+      free(p->priv->pt);
+      free(p->priv->lon);
+      free(p->priv->sums);
+      free(p->priv->po);
+      privcurve_free_members(&p->priv->curve);
+      privcurve_free_members(&p->priv->ocurve);
+    }
+    free(p->priv);
+    /* do not free p->fcurve ! */
+  }
+  free(p);
+}  
+
+/* free a pathlist, leaving errno untouched. */
+void pathlist_free(path_t *plist) {
+  path_t *p;
+
+  list_forall_unlink(p, plist) {
+    path_free(p);
+  }
+}
+
+/* ---------------------------------------------------------------------- */
+/* initialize and finalize curve structures */
+
+typedef dpoint_t dpoint3_t[3];
+
+/* initialize the members of the given curve structure to size m.
+   Return 0 on success, 1 on error with errno set. */
+int privcurve_init(privcurve_t *curve, int n) {
+  memset(curve, 0, sizeof(privcurve_t));
+  curve->n = n;
+  SAFE_CALLOC(curve->tag, n, int);
+  SAFE_CALLOC(curve->c, n, dpoint3_t);
+  SAFE_CALLOC(curve->vertex, n, dpoint_t);
+  SAFE_CALLOC(curve->alpha, n, double);
+  SAFE_CALLOC(curve->alpha0, n, double);
+  SAFE_CALLOC(curve->beta, n, double);
+  return 0;
+
+ calloc_error:
+  free(curve->tag);
+  free(curve->c);
+  free(curve->vertex);
+  free(curve->alpha);
+  free(curve->alpha0);
+  free(curve->beta);
+  return 1;
+}
+
+/* copy private to public curve structure */
+void privcurve_to_curve(privcurve_t *pc, potrace_curve_t *c) {
+  c->n = pc->n;
+  c->tag = pc->tag;
+  c->c = pc->c;
+}
+    


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/curve.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/curve.h
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/curve.h	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/curve.h	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,77 @@
+/* Copyright (C) 2001-2019 Peter Selinger.
+   This file is part of Potrace. It is free software and it is covered
+   by the GNU General Public License. See the file COPYING for details. */
+
+#ifndef CURVE_H
+#define CURVE_H
+
+#include "auxiliary.h"
+
+/* vertex is c[1] for tag=POTRACE_CORNER, and the intersection of
+   .c[-1][2]..c[0] and c[1]..c[2] for tag=POTRACE_CURVETO. alpha is only
+   defined for tag=POTRACE_CURVETO and is the alpha parameter of the curve:
+   .c[-1][2]..c[0] = alpha*(.c[-1][2]..vertex), and
+   c[2]..c[1] = alpha*(c[2]..vertex).
+   Beta is so that (.beta[i])[.vertex[i],.vertex[i+1]] = .c[i][2].
+*/
+
+struct privcurve_s {
+  int n;            /* number of segments */
+  int *tag;         /* tag[n]: POTRACE_CORNER or POTRACE_CURVETO */
+  dpoint_t (*c)[3]; /* c[n][i]: control points. 
+		       c[n][0] is unused for tag[n]=POTRACE_CORNER */
+  /* the remainder of this structure is special to privcurve, and is
+     used in EPS debug output and special EPS "short coding". These
+     fields are valid only if "alphacurve" is set. */
+  int alphacurve;   /* have the following fields been initialized? */
+  dpoint_t *vertex; /* for POTRACE_CORNER, this equals c[1] */
+  double *alpha;    /* only for POTRACE_CURVETO */
+  double *alpha0;   /* "uncropped" alpha parameter - for debug output only */
+  double *beta;
+};
+typedef struct privcurve_s privcurve_t;
+
+struct sums_s {
+  double x;
+  double y;
+  double x2;
+  double xy;
+  double y2;
+};
+typedef struct sums_s sums_t;
+
+/* the path structure is filled in with information about a given path
+   as it is accumulated and passed through the different stages of the
+   Potrace algorithm. Backends only need to read the fcurve and fm
+   fields of this data structure, but debugging backends may read
+   other fields. */
+struct potrace_privpath_s {
+  int len;
+  point_t *pt;     /* pt[len]: path as extracted from bitmap */
+  int *lon;        /* lon[len]: (i,lon[i]) = longest straight line from i */
+
+  int x0, y0;      /* origin for sums */
+  sums_t *sums;    /* sums[len+1]: cache for fast summing */
+
+  int m;           /* length of optimal polygon */
+  int *po;         /* po[m]: optimal polygon */
+
+  privcurve_t curve;   /* curve[m]: array of curve elements */
+  privcurve_t ocurve;  /* ocurve[om]: array of curve elements */
+  privcurve_t *fcurve;  /* final curve: this points to either curve or
+		       ocurve. Do not free this separately. */
+};
+typedef struct potrace_privpath_s potrace_privpath_t;
+
+/* shorter names */
+typedef potrace_privpath_t privpath_t;
+typedef potrace_path_t path_t;
+
+path_t *path_new(void);
+void path_free(path_t *p);
+void pathlist_free(path_t *plist);
+int privcurve_init(privcurve_t *curve, int n);
+void privcurve_to_curve(privcurve_t *pc, potrace_curve_t *c);
+
+#endif /* CURVE_H */
+


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/curve.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/decompose.c
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/decompose.c	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/decompose.c	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,521 @@
+/* Copyright (C) 2001-2019 Peter Selinger.
+   This file is part of Potrace. It is free software and it is covered
+   by the GNU General Public License. See the file COPYING for details. */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+
+#include "potracelib.h"
+#include "curve.h"
+#include "lists.h"
+#include "bitmap.h"
+#include "decompose.h"
+#include "progress.h"
+
+/* ---------------------------------------------------------------------- */
+/* deterministically and efficiently hash (x,y) into a pseudo-random bit */
+
+static inline int detrand(int x, int y) {
+  unsigned int z;
+  static const unsigned char t[256] = { 
+    /* non-linear sequence: constant term of inverse in GF(8), 
+       mod x^8+x^4+x^3+x+1 */
+    0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 
+    0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 
+    0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 
+    1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 
+    0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 
+    0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 
+    0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 
+    0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 
+    1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 
+    0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 
+    1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 
+  };
+
+  /* 0x04b3e375 and 0x05a8ef93 are chosen to contain every possible
+     5-bit sequence */
+  z = ((0x04b3e375 * x) ^ y) * 0x05a8ef93;
+  z = t[z & 0xff] ^ t[(z>>8) & 0xff] ^ t[(z>>16) & 0xff] ^ t[(z>>24) & 0xff];
+  return z;
+}
+
+/* ---------------------------------------------------------------------- */
+/* auxiliary bitmap manipulations */
+
+/* set the excess padding to 0 */
+static void bm_clearexcess(potrace_bitmap_t *bm) {
+  potrace_word mask;
+  int y;
+
+  if (bm->w % BM_WORDBITS != 0) {
+    mask = BM_ALLBITS << (BM_WORDBITS - (bm->w % BM_WORDBITS));
+    for (y=0; y<bm->h; y++) {
+      *bm_index(bm, bm->w, y) &= mask;
+    }
+  }
+}
+
+struct bbox_s {
+  int x0, x1, y0, y1;    /* bounding box */
+};
+typedef struct bbox_s bbox_t;
+
+/* clear the bm, assuming the bounding box is set correctly (faster
+   than clearing the whole bitmap) */
+static void clear_bm_with_bbox(potrace_bitmap_t *bm, bbox_t *bbox) {
+  int imin = (bbox->x0 / BM_WORDBITS);
+  int imax = ((bbox->x1 + BM_WORDBITS-1) / BM_WORDBITS);
+  int i, y;
+
+  for (y=bbox->y0; y<bbox->y1; y++) {
+    for (i=imin; i<imax; i++) {
+      bm_scanline(bm, y)[i] = 0;
+    }
+  }
+}
+
+/* ---------------------------------------------------------------------- */
+/* auxiliary functions */
+
+/* return the "majority" value of bitmap bm at intersection (x,y). We
+   assume that the bitmap is balanced at "radius" 1.  */
+static int majority(potrace_bitmap_t *bm, int x, int y) {
+  int i, a, ct;
+
+  for (i=2; i<5; i++) { /* check at "radius" i */
+    ct = 0;
+    for (a=-i+1; a<=i-1; a++) {
+      ct += BM_GET(bm, x+a, y+i-1) ? 1 : -1;
+      ct += BM_GET(bm, x+i-1, y+a-1) ? 1 : -1;
+      ct += BM_GET(bm, x+a-1, y-i) ? 1 : -1;
+      ct += BM_GET(bm, x-i, y+a) ? 1 : -1;
+    }
+    if (ct>0) {
+      return 1;
+    } else if (ct<0) {
+      return 0;
+    }
+  }
+  return 0;
+}
+
+/* ---------------------------------------------------------------------- */
+/* decompose image into paths */
+
+/* efficiently invert bits [x,infty) and [xa,infty) in line y. Here xa
+   must be a multiple of BM_WORDBITS. */
+static void xor_to_ref(potrace_bitmap_t *bm, int x, int y, int xa) {
+  int xhi = x & -BM_WORDBITS;
+  int xlo = x & (BM_WORDBITS-1);  /* = x % BM_WORDBITS */
+  int i;
+  
+  if (xhi<xa) {
+    for (i = xhi; i < xa; i+=BM_WORDBITS) {
+      *bm_index(bm, i, y) ^= BM_ALLBITS;
+    }
+  } else {
+    for (i = xa; i < xhi; i+=BM_WORDBITS) {
+      *bm_index(bm, i, y) ^= BM_ALLBITS;
+    }
+  }
+  /* note: the following "if" is needed because x86 treats a<<b as
+     a<<(b&31). I spent hours looking for this bug. */
+  if (xlo) {
+    *bm_index(bm, xhi, y) ^= (BM_ALLBITS << (BM_WORDBITS - xlo));
+  }
+}
+
+/* a path is represented as an array of points, which are thought to
+   lie on the corners of pixels (not on their centers). The path point
+   (x,y) is the lower left corner of the pixel (x,y). Paths are
+   represented by the len/pt components of a path_t object (which
+   also stores other information about the path) */
+
+/* xor the given pixmap with the interior of the given path. Note: the
+   path must be within the dimensions of the pixmap. */
+static void xor_path(potrace_bitmap_t *bm, path_t *p) {
+  int xa, x, y, k, y1;
+
+  if (p->priv->len <= 0) {  /* a path of length 0 is silly, but legal */
+    return;
+  }
+
+  y1 = p->priv->pt[p->priv->len-1].y;
+
+  xa = p->priv->pt[0].x & -BM_WORDBITS;
+  for (k=0; k<p->priv->len; k++) {
+    x = p->priv->pt[k].x;
+    y = p->priv->pt[k].y;
+
+    if (y != y1) {
+      /* efficiently invert the rectangle [x,xa] x [y,y1] */
+      xor_to_ref(bm, x, min(y,y1), xa);
+      y1 = y;
+    }
+  }
+}
+
+/* Find the bounding box of a given path. Path is assumed to be of
+   non-zero length. */
+static void setbbox_path(bbox_t *bbox, path_t *p) {
+  int x, y;
+  int k;
+
+  bbox->y0 = INT_MAX;
+  bbox->y1 = 0;
+  bbox->x0 = INT_MAX;
+  bbox->x1 = 0;
+
+  for (k=0; k<p->priv->len; k++) {
+    x = p->priv->pt[k].x;
+    y = p->priv->pt[k].y;
+
+    if (x < bbox->x0) {
+      bbox->x0 = x;
+    }
+    if (x > bbox->x1) {
+      bbox->x1 = x;
+    }
+    if (y < bbox->y0) {
+      bbox->y0 = y;
+    }
+    if (y > bbox->y1) {
+      bbox->y1 = y;
+    }
+  }
+}
+
+/* compute a path in the given pixmap, separating black from white.
+   Start path at the point (x0,x1), which must be an upper left corner
+   of the path. Also compute the area enclosed by the path. Return a
+   new path_t object, or NULL on error (note that a legitimate path
+   cannot have length 0). Sign is required for correct interpretation
+   of turnpolicies. */
+static path_t *findpath(potrace_bitmap_t *bm, int x0, int y0, int sign, int turnpolicy) {
+  int x, y, dirx, diry, len, size;
+  uint64_t area;
+  int c, d, tmp;
+  point_t *pt, *pt1;
+  path_t *p = NULL;
+
+  x = x0;
+  y = y0;
+  dirx = 0;
+  diry = -1;
+
+  len = size = 0;
+  pt = NULL;
+  area = 0;
+  
+  while (1) {
+    /* add point to path */
+    if (len>=size) {
+      size += 100;
+      size = (int)(1.3 * size);
+      pt1 = (point_t *)realloc(pt, size * sizeof(point_t));
+      if (!pt1) {
+	goto error;
+      }
+      pt = pt1;
+    }
+    pt[len].x = x;
+    pt[len].y = y;
+    len++;
+    
+    /* move to next point */
+    x += dirx;
+    y += diry;
+    area += x*diry;
+    
+    /* path complete? */
+    if (x==x0 && y==y0) {
+      break;
+    }
+    
+    /* determine next direction */
+    c = BM_GET(bm, x + (dirx+diry-1)/2, y + (diry-dirx-1)/2);
+    d = BM_GET(bm, x + (dirx-diry-1)/2, y + (diry+dirx-1)/2);
+    
+    if (c && !d) {               /* ambiguous turn */
+      if (turnpolicy == POTRACE_TURNPOLICY_RIGHT
+	  || (turnpolicy == POTRACE_TURNPOLICY_BLACK && sign == '+')
+	  || (turnpolicy == POTRACE_TURNPOLICY_WHITE && sign == '-')
+	  || (turnpolicy == POTRACE_TURNPOLICY_RANDOM && detrand(x,y))
+	  || (turnpolicy == POTRACE_TURNPOLICY_MAJORITY && majority(bm, x, y))
+	  || (turnpolicy == POTRACE_TURNPOLICY_MINORITY && !majority(bm, x, y))) {
+	tmp = dirx;              /* right turn */
+	dirx = diry;
+	diry = -tmp;
+      } else {
+	tmp = dirx;              /* left turn */
+	dirx = -diry;
+	diry = tmp;
+      }
+    } else if (c) {              /* right turn */
+      tmp = dirx;
+      dirx = diry;
+      diry = -tmp;
+    } else if (!d) {             /* left turn */
+      tmp = dirx;
+      dirx = -diry;
+      diry = tmp;
+    }
+  } /* while this path */
+
+  /* allocate new path object */
+  p = path_new();
+  if (!p) {
+    goto error;
+  }
+
+  p->priv->pt = pt;
+  p->priv->len = len;
+  p->area = area <= INT_MAX ? area : INT_MAX; /* avoid overflow */
+  p->sign = sign;
+
+  return p;
+ 
+ error:
+   free(pt);
+   return NULL; 
+}
+
+/* Give a tree structure to the given path list, based on "insideness"
+   testing. I.e., path A is considered "below" path B if it is inside
+   path B. The input pathlist is assumed to be ordered so that "outer"
+   paths occur before "inner" paths. The tree structure is stored in
+   the "childlist" and "sibling" components of the path_t
+   structure. The linked list structure is also changed so that
+   negative path components are listed immediately after their
+   positive parent.  Note: some backends may ignore the tree
+   structure, others may use it e.g. to group path components. We
+   assume that in the input, point 0 of each path is an "upper left"
+   corner of the path, as returned by bm_to_pathlist. This makes it
+   easy to find an "interior" point. The bm argument should be a
+   bitmap of the correct size (large enough to hold all the paths),
+   and will be used as scratch space. Return 0 on success or -1 on
+   error with errno set. */
+
+static void pathlist_to_tree(path_t *plist, potrace_bitmap_t *bm) {
+  path_t *p, *p1;
+  path_t *heap, *heap1;
+  path_t *cur;
+  path_t *head;
+  path_t **plist_hook;          /* for fast appending to linked list */
+  path_t **hook_in, **hook_out; /* for fast appending to linked list */
+  bbox_t bbox;
+  
+  bm_clear(bm, 0);
+
+  /* save original "next" pointers */
+  list_forall(p, plist) {
+    p->sibling = p->next;
+    p->childlist = NULL;
+  }
+  
+  heap = plist;
+
+  /* the heap holds a list of lists of paths. Use "childlist" field
+     for outer list, "next" field for inner list. Each of the sublists
+     is to be turned into a tree. This code is messy, but it is
+     actually fast. Each path is rendered exactly once. We use the
+     heap to get a tail recursive algorithm: the heap holds a list of
+     pathlists which still need to be transformed. */
+
+  while (heap) {
+    /* unlink first sublist */
+    cur = heap;
+    heap = heap->childlist;
+    cur->childlist = NULL;
+  
+    /* unlink first path */
+    head = cur;
+    cur = cur->next;
+    head->next = NULL;
+
+    /* render path */
+    xor_path(bm, head);
+    setbbox_path(&bbox, head);
+
+    /* now do insideness test for each element of cur; append it to
+       head->childlist if it's inside head, else append it to
+       head->next. */
+    hook_in=&head->childlist;
+    hook_out=&head->next;
+    list_forall_unlink(p, cur) {
+      if (p->priv->pt[0].y <= bbox.y0) {
+	list_insert_beforehook(p, hook_out);
+	/* append the remainder of the list to hook_out */
+	*hook_out = cur;
+	break;
+      }
+      if (BM_GET(bm, p->priv->pt[0].x, p->priv->pt[0].y-1)) {
+	list_insert_beforehook(p, hook_in);
+      } else {
+	list_insert_beforehook(p, hook_out);
+      }
+    }
+
+    /* clear bm */
+    clear_bm_with_bbox(bm, &bbox);
+
+    /* now schedule head->childlist and head->next for further
+       processing */
+    if (head->next) {
+      head->next->childlist = heap;
+      heap = head->next;
+    }
+    if (head->childlist) {
+      head->childlist->childlist = heap;
+      heap = head->childlist;
+    }
+  }
+  
+  /* copy sibling structure from "next" to "sibling" component */
+  p = plist;
+  while (p) {
+    p1 = p->sibling;
+    p->sibling = p->next;
+    p = p1;
+  }
+
+  /* reconstruct a new linked list ("next") structure from tree
+     ("childlist", "sibling") structure. This code is slightly messy,
+     because we use a heap to make it tail recursive: the heap
+     contains a list of childlists which still need to be
+     processed. */
+  heap = plist;
+  if (heap) {
+    heap->next = NULL;  /* heap is a linked list of childlists */
+  }
+  plist = NULL;
+  plist_hook = &plist;
+  while (heap) {
+    heap1 = heap->next;
+    for (p=heap; p; p=p->sibling) {
+      /* p is a positive path */
+      /* append to linked list */
+      list_insert_beforehook(p, plist_hook);
+      
+      /* go through its children */
+      for (p1=p->childlist; p1; p1=p1->sibling) {
+	/* append to linked list */
+	list_insert_beforehook(p1, plist_hook);
+	/* append its childlist to heap, if non-empty */
+	if (p1->childlist) {
+	  list_append(path_t, heap1, p1->childlist);
+	}
+      }
+    }
+    heap = heap1;
+  }
+
+  return;
+}
+
+/* find the next set pixel in a row <= y. Pixels are searched first
+   left-to-right, then top-down. In other words, (x,y)<(x',y') if y>y'
+   or y=y' and x<x'. If found, return 0 and store pixel in
+   (*xp,*yp). Else return 1. Note that this function assumes that
+   excess bytes have been cleared with bm_clearexcess. */
+static int findnext(potrace_bitmap_t *bm, int *xp, int *yp) {
+  int x;
+  int y;
+  int x0;
+
+  x0 = (*xp) & ~(BM_WORDBITS-1);
+
+  for (y=*yp; y>=0; y--) {
+    for (x=x0; x<bm->w && x>=0; x+=(unsigned)BM_WORDBITS) {
+      if (*bm_index(bm, x, y)) {
+	while (!BM_GET(bm, x, y)) {
+	  x++;
+	}
+	/* found */
+	*xp = x;
+	*yp = y;
+	return 0;
+      }
+    }
+    x0 = 0;
+  }
+  /* not found */
+  return 1;
+}
+
+/* Decompose the given bitmap into paths. Returns a linked list of
+   path_t objects with the fields len, pt, area, sign filled
+   in. Returns 0 on success with plistp set, or -1 on error with errno
+   set. */
+
+int bm_to_pathlist(const potrace_bitmap_t *bm, path_t **plistp, const potrace_param_t *param, progress_t *progress) {
+  int x;
+  int y;
+  path_t *p;
+  path_t *plist = NULL;  /* linked list of path objects */
+  path_t **plist_hook = &plist;  /* used to speed up appending to linked list */
+  potrace_bitmap_t *bm1 = NULL;
+  int sign;
+
+  bm1 = bm_dup(bm);
+  if (!bm1) {
+    goto error;
+  }
+
+  /* be sure the byte padding on the right is set to 0, as the fast
+     pixel search below relies on it */
+  bm_clearexcess(bm1);
+
+  /* iterate through components */
+  x = 0;
+  y = bm1->h - 1;
+  while (findnext(bm1, &x, &y) == 0) { 
+    /* calculate the sign by looking at the original */
+    sign = BM_GET(bm, x, y) ? '+' : '-';
+
+    /* calculate the path */
+    p = findpath(bm1, x, y+1, sign, param->turnpolicy);
+    if (p==NULL) {
+      goto error;
+    }
+
+    /* update buffered image */
+    xor_path(bm1, p);
+
+    /* if it's a turd, eliminate it, else append it to the list */
+    if (p->area <= param->turdsize) {
+      path_free(p);
+    } else {
+      list_insert_beforehook(p, plist_hook);
+    }
+
+    if (bm1->h > 0) { /* to be sure */
+      progress_update(1-y/(double)bm1->h, progress);
+    }
+  }
+
+  pathlist_to_tree(plist, bm1);
+  bm_free(bm1);
+  *plistp = plist;
+
+  progress_update(1.0, progress);
+
+  return 0;
+
+ error:
+  bm_free(bm1);
+  list_forall_unlink(p, plist) {
+    path_free(p);
+  }
+  return -1;
+}


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/decompose.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/decompose.h
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/decompose.h	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/decompose.h	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,16 @@
+/* Copyright (C) 2001-2019 Peter Selinger.
+   This file is part of Potrace. It is free software and it is covered
+   by the GNU General Public License. See the file COPYING for details. */
+
+
+#ifndef DECOMPOSE_H
+#define DECOMPOSE_H
+
+#include "potracelib.h"
+#include "progress.h"
+#include "curve.h"
+
+int bm_to_pathlist(const potrace_bitmap_t *bm, path_t **plistp, const potrace_param_t *param, progress_t *progress);
+
+#endif /* DECOMPOSE_H */
+


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/decompose.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/lists.h
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/lists.h	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/lists.h	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,285 @@
+/* Copyright (C) 2001-2019 Peter Selinger.
+   This file is part of Potrace. It is free software and it is covered
+   by the GNU General Public License. See the file COPYING for details. */
+
+
+#ifndef _PS_LISTS_H
+#define _PS_LISTS_H
+
+/* here we define some general list macros. Because they are macros,
+   they should work on any datatype with a "->next" component. Some of
+   them use a "hook". If elt and list are of type t* then hook is of
+   type t**. A hook stands for an insertion point in the list, i.e.,
+   either before the first element, or between two elements, or after
+   the last element. If an operation "sets the hook" for an element,
+   then the hook is set to just before the element. One can insert
+   something at a hook. One can also unlink at a hook: this means,
+   unlink the element just after the hook. By "to unlink", we mean the
+   element is removed from the list, but not deleted. Thus, it and its
+   components still need to be freed. */
+
+/* Note: these macros are somewhat experimental. Only the ones that
+   are actually *used* have been tested. So be careful to test any
+   that you use. Looking at the output of the preprocessor, "gcc -E"
+   (possibly piped though "indent"), might help too. Also: these
+   macros define some internal (local) variables that start with
+   "_". */
+
+/* we enclose macro definitions whose body consists of more than one
+   statement in MACRO_BEGIN and MACRO_END, rather than '{' and '}'.  The
+   reason is that we want to be able to use the macro in a context
+   such as "if (...) macro(...); else ...". If we didn't use this obscure
+   trick, we'd have to omit the ";" in such cases. */
+
+#define MACRO_BEGIN do {
+#define MACRO_END   } while (0)
+
+/* ---------------------------------------------------------------------- */
+/* macros for singly-linked lists */
+
+/* traverse list. At the end, elt is set to NULL. */
+#define list_forall(elt, list)   for (elt=list; elt!=NULL; elt=elt->next)
+
+/* set elt to the first element of list satisfying boolean condition
+   c, or NULL if not found */
+#define list_find(elt, list, c) \
+  MACRO_BEGIN list_forall(elt, list) if (c) break; MACRO_END
+
+/* like forall, except also set hook for elt. */
+#define list_forall2(elt, list, hook) \
+  for (elt=list, hook=&list; elt!=NULL; hook=&elt->next, elt=elt->next)
+
+/* same as list_find, except also set hook for elt. */
+#define list_find2(elt, list, c, hook) \
+  MACRO_BEGIN list_forall2(elt, list, hook) if (c) break; MACRO_END
+
+/* same, except only use hook. */
+#define _list_forall_hook(list, hook) \
+  for (hook=&list; *hook!=NULL; hook=&(*hook)->next)
+
+/* same, except only use hook. Note: c may only refer to *hook, not elt. */
+#define _list_find_hook(list, c, hook) \
+  MACRO_BEGIN _list_forall_hook(list, hook) if (c) break; MACRO_END
+
+/* insert element after hook */
+#define list_insert_athook(elt, hook) \
+  MACRO_BEGIN elt->next = *hook; *hook = elt; MACRO_END
+
+/* insert element before hook */
+#define list_insert_beforehook(elt, hook) \
+  MACRO_BEGIN elt->next = *hook; *hook = elt; hook=&elt->next; MACRO_END
+
+/* unlink element after hook, let elt be unlinked element, or NULL.
+   hook remains. */
+#define list_unlink_athook(list, elt, hook) \
+  MACRO_BEGIN \
+  elt = hook ? *hook : NULL; if (elt) { *hook = elt->next; elt->next = NULL; }\
+  MACRO_END
+
+/* unlink the specific element, if it is in the list. Otherwise, set
+   elt to NULL */
+#define list_unlink(listtype, list, elt)      \
+  MACRO_BEGIN  	       	       	       	      \
+  listtype **_hook;			      \
+  _list_find_hook(list, *_hook==elt, _hook);  \
+  list_unlink_athook(list, elt, _hook);	      \
+  MACRO_END
+
+/* prepend elt to list */
+#define list_prepend(list, elt) \
+  MACRO_BEGIN elt->next = list; list = elt; MACRO_END
+
+/* append elt to list. */
+#define list_append(listtype, list, elt)     \
+  MACRO_BEGIN                                \
+  listtype **_hook;                          \
+  _list_forall_hook(list, _hook) {}          \
+  list_insert_athook(elt, _hook);            \
+  MACRO_END
+
+/* unlink the first element that satisfies the condition. */
+#define list_unlink_cond(listtype, list, elt, c)     \
+  MACRO_BEGIN                                        \
+  listtype **_hook;			  	     \
+  list_find2(elt, list, c, _hook);                   \
+  list_unlink_athook(list, elt, _hook);              \
+  MACRO_END
+
+/* let elt be the nth element of the list, starting to count from 0.
+   Return NULL if out of bounds.   */
+#define list_nth(elt, list, n)                                \
+  MACRO_BEGIN                                                 \
+  int _x;  /* only evaluate n once */                         \
+  for (_x=(n), elt=list; _x && elt; _x--, elt=elt->next) {}   \
+  MACRO_END
+
+/* let elt be the nth element of the list, starting to count from 0.
+   Return NULL if out of bounds.   */
+#define list_nth_hook(elt, list, n, hook)                     \
+  MACRO_BEGIN                                                 \
+  int _x;  /* only evaluate n once */                         \
+  for (_x=(n), elt=list, hook=&list; _x && elt; _x--, hook=&elt->next, elt=elt->next) {}   \
+  MACRO_END
+
+/* set n to the length of the list */
+#define list_length(listtype, list, n)                   \
+  MACRO_BEGIN          	       	       	       	       	 \
+  listtype *_elt;   			 		 \
+  n=0;					 		 \
+  list_forall(_elt, list) 		 		 \
+    n++;				 		 \
+  MACRO_END
+
+/* set n to the index of the first element satisfying cond, or -1 if
+   none found. Also set elt to the element, or NULL if none found. */
+#define list_index(list, n, elt, c)                      \
+  MACRO_BEGIN				 		 \
+  n=0;					 		 \
+  list_forall(elt, list) {		 		 \
+    if (c) break;			 		 \
+    n++;				 		 \
+  }					 		 \
+  if (!elt)				 		 \
+    n=-1;				 		 \
+  MACRO_END
+
+/* set n to the number of elements in the list that satisfy condition c */
+#define list_count(list, n, elt, c)                      \
+  MACRO_BEGIN				 		 \
+  n=0;					 		 \
+  list_forall(elt, list) {		 		 \
+    if (c) n++;				 		 \
+  }                                                      \
+  MACRO_END
+
+/* let elt be each element of the list, unlinked. At the end, set list=NULL. */
+#define list_forall_unlink(elt, list) \
+  for (elt=list; elt ? (list=elt->next, elt->next=NULL), 1 : 0; elt=list)
+
+/* reverse a list (efficient) */
+#define list_reverse(listtype, list)            \
+  MACRO_BEGIN				 	\
+  listtype *_list1=NULL, *elt;			\
+  list_forall_unlink(elt, list) 		\
+    list_prepend(_list1, elt);			\
+  list = _list1;				\
+  MACRO_END
+
+/* insert the element ELT just before the first element TMP of the
+   list for which COND holds. Here COND must be a condition of ELT and
+   TMP.  Typical usage is to insert an element into an ordered list:
+   for instance, list_insert_ordered(listtype, list, elt, tmp,
+   elt->size <= tmp->size).  Note: if we give a "less than or equal"
+   condition, the new element will be inserted just before a sequence
+   of equal elements. If we give a "less than" condition, the new
+   element will be inserted just after a list of equal elements.
+   Note: it is much more efficient to construct a list with
+   list_prepend and then order it with list_merge_sort, than to
+   construct it with list_insert_ordered. */
+#define list_insert_ordered(listtype, list, elt, tmp, cond) \
+  MACRO_BEGIN                                               \
+  listtype **_hook;                                         \
+  _list_find_hook(list, (tmp=*_hook, (cond)), _hook);       \
+  list_insert_athook(elt, _hook);                           \
+  MACRO_END
+
+/* sort the given list, according to the comparison condition.
+   Typical usage is list_sort(listtype, list, a, b, a->size <
+   b->size).  Note: if we give "less than or equal" condition, each
+   segment of equal elements will be reversed in order. If we give a
+   "less than" condition, each segment of equal elements will retain
+   the original order. The latter is slower but sometimes
+   prettier. Average running time: n*n/2. */
+#define list_sort(listtype, list, a, b, cond)            \
+  MACRO_BEGIN                                            \
+  listtype *_newlist=NULL;                               \
+  list_forall_unlink(a, list)                            \
+    list_insert_ordered(listtype, _newlist, a, b, cond); \
+  list = _newlist;                                       \
+  MACRO_END
+
+/* a much faster sort algorithm (merge sort, n log n worst case). It
+   is required that the list type has an additional, unused next1
+   component. Note there is no curious reversal of order of equal
+   elements as for list_sort. */
+
+#define list_mergesort(listtype, list, a, b, cond)              \
+  MACRO_BEGIN						        \
+  listtype *_elt, **_hook1;				    	\
+							    	\
+  for (_elt=list; _elt; _elt=_elt->next1) {			\
+    _elt->next1 = _elt->next;				    	\
+    _elt->next = NULL;					    	\
+  }							    	\
+  do {			                               	    	\
+    _hook1 = &(list);				    	    	\
+    while ((a = *_hook1) != NULL && (b = a->next1) != NULL ) {  \
+      _elt = b->next1;					    	\
+      _list_merge_cond(listtype, a, b, cond, *_hook1);      	\
+      _hook1 = &((*_hook1)->next1);			    	\
+      *_hook1 = _elt;				            	\
+    }							    	\
+  } while (_hook1 != &(list));                                 	\
+  MACRO_END
+
+/* merge two sorted lists. Store result at &result */
+#define _list_merge_cond(listtype, a, b, cond, result)   \
+  MACRO_BEGIN                                            \
+  listtype **_hook;					 \
+  _hook = &(result);					 \
+  while (1) {                                            \
+     if (a==NULL) {					 \
+       *_hook = b;					 \
+       break;						 \
+     } else if (b==NULL) {				 \
+       *_hook = a;					 \
+       break;						 \
+     } else if (cond) {					 \
+       *_hook = a;					 \
+       _hook = &(a->next);				 \
+       a = a->next;					 \
+     } else {						 \
+       *_hook = b;					 \
+       _hook = &(b->next);				 \
+       b = b->next;					 \
+     }							 \
+  }							 \
+  MACRO_END
+
+/* ---------------------------------------------------------------------- */
+/* macros for doubly-linked lists */
+
+#define dlist_append(head, end, elt)                    \
+  MACRO_BEGIN  	       	       	       	       	       	 \
+  elt->prev = end;					 \
+  elt->next = NULL;					 \
+  if (end) {						 \
+    end->next = elt;					 \
+  } else {  						 \
+    head = elt;						 \
+  }	    						 \
+  end = elt;						 \
+  MACRO_END
+
+/* let elt be each element of the list, unlinked. At the end, set list=NULL. */
+#define dlist_forall_unlink(elt, head, end) \
+  for (elt=head; elt ? (head=elt->next, elt->next=NULL, elt->prev=NULL), 1 : (end=NULL, 0); elt=head)
+
+/* unlink the first element of the list */
+#define dlist_unlink_first(head, end, elt)               \
+  MACRO_BEGIN				       	       	 \
+  elt = head;						 \
+  if (head) {						 \
+    head = head->next;					 \
+    if (head) {						 \
+      head->prev = NULL;				 \
+    } else {						 \
+      end = NULL;					 \
+    }    						 \
+    elt->prev = NULL;					 \
+    elt->next = NULL;					 \
+  }							 \
+  MACRO_END
+
+#endif /* _PS_LISTS_H */
+


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/lists.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/potracelib.c
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/potracelib.c	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/potracelib.c	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,114 @@
+/* Copyright (C) 2001-2019 Peter Selinger.
+   This file is part of Potrace. It is free software and it is covered
+   by the GNU General Public License. See the file COPYING for details. */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "potracelib.h"
+#include "curve.h"
+#include "decompose.h"
+#include "trace.h"
+#include "progress.h"
+
+/* default parameters */
+static const potrace_param_t param_default = {
+  2,                             /* turdsize */
+  POTRACE_TURNPOLICY_MINORITY,   /* turnpolicy */
+  1.0,                           /* alphamax */
+  1,                             /* opticurve */
+  0.2,                           /* opttolerance */
+  {
+    NULL,                        /* callback function */
+    NULL,                        /* callback data */
+    0.0, 1.0,                    /* progress range */
+    0.0,                         /* granularity */
+  },
+};
+
+/* Return a fresh copy of the set of default parameters, or NULL on
+   failure with errno set. */
+potrace_param_t *potrace_param_default(void) {
+  potrace_param_t *p;
+
+  p = (potrace_param_t *) malloc(sizeof(potrace_param_t));
+  if (!p) {
+    return NULL;
+  }
+  memcpy(p, &param_default, sizeof(potrace_param_t));
+  return p;
+}
+
+/* On success, returns a Potrace state st with st->status ==
+   POTRACE_STATUS_OK. On failure, returns NULL if no Potrace state
+   could be created (with errno set), or returns an incomplete Potrace
+   state (with st->status == POTRACE_STATUS_INCOMPLETE, and with errno
+   set). Complete or incomplete Potrace state can be freed with
+   potrace_state_free(). */
+potrace_state_t *potrace_trace(const potrace_param_t *param, const potrace_bitmap_t *bm) {
+  int r;
+  path_t *plist = NULL;
+  potrace_state_t *st;
+  progress_t prog;
+  progress_t subprog;
+  
+  /* prepare private progress bar state */
+  prog.callback = param->progress.callback;
+  prog.data = param->progress.data;
+  prog.min = param->progress.min;
+  prog.max = param->progress.max;
+  prog.epsilon = param->progress.epsilon;
+  prog.d_prev = param->progress.min;
+
+  /* allocate state object */
+  st = (potrace_state_t *)malloc(sizeof(potrace_state_t));
+  if (!st) {
+    return NULL;
+  }
+
+  progress_subrange_start(0.0, 0.1, &prog, &subprog);
+
+  /* process the image */
+  r = bm_to_pathlist(bm, &plist, param, &subprog);
+  if (r) {
+    free(st);
+    return NULL;
+  }
+
+  st->status = POTRACE_STATUS_OK;
+  st->plist = plist;
+  st->priv = NULL;  /* private state currently unused */
+
+  progress_subrange_end(&prog, &subprog);
+
+  progress_subrange_start(0.1, 1.0, &prog, &subprog);
+
+  /* partial success. */
+  r = process_path(plist, param, &subprog);
+  if (r) {
+    st->status = POTRACE_STATUS_INCOMPLETE;
+  }
+
+  progress_subrange_end(&prog, &subprog);
+
+  return st;
+}
+
+/* free a Potrace state, without disturbing errno. */
+void potrace_state_free(potrace_state_t *st) {
+  pathlist_free(st->plist);
+  free(st);
+}
+
+/* free a parameter list, without disturbing errno. */
+void potrace_param_free(potrace_param_t *p) {
+  free(p);
+}
+
+const char *potrace_version(void) {
+  return "potracelib " VERSION "";
+}


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/potracelib.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/potracelib.h
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/potracelib.h	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/potracelib.h	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,139 @@
+/* Copyright (C) 2001-2019 Peter Selinger.
+   This file is part of Potrace. It is free software and it is covered
+   by the GNU General Public License. See the file COPYING for details. */
+
+#ifndef POTRACELIB_H
+#define POTRACELIB_H
+
+/* this file defines the API for the core Potrace library. For a more
+   detailed description of the API, see potracelib.pdf */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ---------------------------------------------------------------------- */
+/* tracing parameters */
+
+/* turn policies */
+#define POTRACE_TURNPOLICY_BLACK 0
+#define POTRACE_TURNPOLICY_WHITE 1
+#define POTRACE_TURNPOLICY_LEFT 2
+#define POTRACE_TURNPOLICY_RIGHT 3
+#define POTRACE_TURNPOLICY_MINORITY 4
+#define POTRACE_TURNPOLICY_MAJORITY 5
+#define POTRACE_TURNPOLICY_RANDOM 6
+
+/* structure to hold progress bar callback data */
+struct potrace_progress_s {
+  void (*callback)(double progress, void *privdata); /* callback fn */
+  void *data;          /* callback function's private data */
+  double min, max;     /* desired range of progress, e.g. 0.0 to 1.0 */
+  double epsilon;      /* granularity: can skip smaller increments */
+};
+typedef struct potrace_progress_s potrace_progress_t;
+
+/* structure to hold tracing parameters */
+struct potrace_param_s {
+  int turdsize;        /* area of largest path to be ignored */
+  int turnpolicy;      /* resolves ambiguous turns in path decomposition */
+  double alphamax;     /* corner threshold */
+  int opticurve;       /* use curve optimization? */
+  double opttolerance; /* curve optimization tolerance */
+  potrace_progress_t progress; /* progress callback function */
+};
+typedef struct potrace_param_s potrace_param_t;
+
+/* ---------------------------------------------------------------------- */
+/* bitmaps */
+
+/* native word size */
+typedef unsigned long potrace_word;
+
+/* Internal bitmap format. The n-th scanline starts at scanline(n) =
+   (map + n*dy). Raster data is stored as a sequence of potrace_words
+   (NOT bytes). The leftmost bit of scanline n is the most significant
+   bit of scanline(n)[0]. */
+struct potrace_bitmap_s {
+  int w, h;              /* width and height, in pixels */
+  int dy;                /* words per scanline (not bytes) */
+  potrace_word *map;     /* raw data, dy*h words */
+};
+typedef struct potrace_bitmap_s potrace_bitmap_t;
+
+/* ---------------------------------------------------------------------- */
+/* curves */
+
+/* point */
+struct potrace_dpoint_s {
+  double x, y;
+};
+typedef struct potrace_dpoint_s potrace_dpoint_t;
+
+/* segment tags */
+#define POTRACE_CURVETO 1
+#define POTRACE_CORNER 2
+
+/* closed curve segment */
+struct potrace_curve_s {
+  int n;                    /* number of segments */
+  int *tag;                 /* tag[n]: POTRACE_CURVETO or POTRACE_CORNER */
+  potrace_dpoint_t (*c)[3]; /* c[n][3]: control points. 
+			       c[n][0] is unused for tag[n]=POTRACE_CORNER */
+};
+typedef struct potrace_curve_s potrace_curve_t;
+
+/* Linked list of signed curve segments. Also carries a tree structure. */
+struct potrace_path_s {
+  int area;                         /* area of the bitmap path */
+  int sign;                         /* '+' or '-', depending on orientation */
+  potrace_curve_t curve;            /* this path's vector data */
+
+  struct potrace_path_s *next;      /* linked list structure */
+
+  struct potrace_path_s *childlist; /* tree structure */
+  struct potrace_path_s *sibling;   /* tree structure */
+
+  struct potrace_privpath_s *priv;  /* private state */
+};
+typedef struct potrace_path_s potrace_path_t;  
+
+/* ---------------------------------------------------------------------- */
+/* Potrace state */
+
+#define POTRACE_STATUS_OK         0
+#define POTRACE_STATUS_INCOMPLETE 1
+
+struct potrace_state_s {
+  int status;                       
+  potrace_path_t *plist;            /* vector data */
+
+  struct potrace_privstate_s *priv; /* private state */
+};
+typedef struct potrace_state_s potrace_state_t;
+
+/* ---------------------------------------------------------------------- */
+/* API functions */
+
+/* get default parameters */
+potrace_param_t *potrace_param_default(void);
+
+/* free parameter set */
+void potrace_param_free(potrace_param_t *p);
+
+/* trace a bitmap */
+potrace_state_t *potrace_trace(const potrace_param_t *param, 
+			       const potrace_bitmap_t *bm);
+
+/* free a Potrace state */
+void potrace_state_free(potrace_state_t *st);
+
+/* return a static plain text version string identifying this version
+   of potracelib */
+const char *potrace_version(void);
+
+#ifdef  __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif /* POTRACELIB_H */


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/potracelib.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/progress.h
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/progress.h	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/progress.h	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,79 @@
+/* Copyright (C) 2001-2019 Peter Selinger.
+   This file is part of Potrace. It is free software and it is covered
+   by the GNU General Public License. See the file COPYING for details. */
+
+/* operations on potrace_progress_t objects, which are defined in
+   potracelib.h. Note: the code attempts to minimize runtime overhead
+   when no progress monitoring was requested. It also tries to
+   minimize excessive progress calculations beneath the "epsilon"
+   threshold. */
+
+#ifndef PROGRESS_H
+#define PROGRESS_H
+
+/* structure to hold progress bar callback data */
+struct progress_s {
+  void (*callback)(double progress, void *privdata); /* callback fn */
+  void *data;          /* callback function's private data */
+  double min, max;     /* desired range of progress, e.g. 0.0 to 1.0 */
+  double epsilon;      /* granularity: can skip smaller increments */
+  double b;            /* upper limit of subrange in superrange units */
+  double d_prev;       /* previous value of d */
+};
+typedef struct progress_s progress_t;
+
+/* notify given progress object of current progress. Note that d is
+   given in the 0.0-1.0 range, which will be scaled and translated to
+   the progress object's range. */
+static inline void progress_update(double d, progress_t *prog) {
+  double d_scaled;
+
+  if (prog != NULL && prog->callback != NULL) {
+    d_scaled = prog->min * (1-d) + prog->max * d;
+    if (d == 1.0 || d_scaled >= prog->d_prev + prog->epsilon) {
+      prog->callback(prog->min * (1-d) + prog->max * d, prog->data);
+      prog->d_prev = d_scaled;
+    }
+  }
+}
+
+/* start a subrange of the given progress object. The range is
+   narrowed to [a..b], relative to 0.0-1.0 coordinates. If new range
+   is below granularity threshold, disable further subdivisions. */
+static inline void progress_subrange_start(double a, double b, const progress_t *prog, progress_t *sub) {
+  double min, max;
+
+  if (prog == NULL || prog->callback == NULL) {
+    sub->callback = NULL;
+    return;
+  }
+
+  min = prog->min * (1-a) + prog->max * a;
+  max = prog->min * (1-b) + prog->max * b;
+
+  if (max - min < prog->epsilon) {
+    sub->callback = NULL;    /* no further progress info in subrange */
+    sub->b = b;
+    return;
+  }
+  sub->callback = prog->callback;
+  sub->data = prog->data;
+  sub->epsilon = prog->epsilon;
+  sub->min = min;
+  sub->max = max;
+  sub->d_prev = prog->d_prev;
+  return;
+}
+
+static inline void progress_subrange_end(progress_t *prog, progress_t *sub) {
+  if (prog != NULL && prog->callback != NULL) {
+    if (sub->callback == NULL) {
+      progress_update(sub->b, prog);
+    } else {
+      prog->d_prev = sub->d_prev;
+    }
+  }    
+}
+
+#endif /* PROGRESS_H */
+


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/progress.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/trace.c
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/trace.c	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/trace.c	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,1249 @@
+/* Copyright (C) 2001-2019 Peter Selinger.
+   This file is part of Potrace. It is free software and it is covered
+   by the GNU General Public License. See the file COPYING for details. */
+
+/* transform jaggy paths into smooth curves */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "potracelib.h"
+#include "curve.h"
+#include "lists.h"
+#include "auxiliary.h"
+#include "trace.h"
+#include "progress.h"
+
+#define INFTY 10000000	/* it suffices that this is longer than any
+			   path; it need not be really infinite */
+#define COS179 -0.999847695156	 /* the cosine of 179 degrees */
+
+/* ---------------------------------------------------------------------- */
+#define SAFE_CALLOC(var, n, typ) \
+  if ((var = (typ *)calloc(n, sizeof(typ))) == NULL) goto calloc_error 
+
+/* ---------------------------------------------------------------------- */
+/* auxiliary functions */
+
+/* return a direction that is 90 degrees counterclockwise from p2-p0,
+   but then restricted to one of the major wind directions (n, nw, w, etc) */
+static inline point_t dorth_infty(dpoint_t p0, dpoint_t p2) {
+  point_t r;
+  
+  r.y = sign(p2.x-p0.x);
+  r.x = -sign(p2.y-p0.y);
+
+  return r;
+}
+
+/* return (p1-p0)x(p2-p0), the area of the parallelogram */
+static inline double dpara(dpoint_t p0, dpoint_t p1, dpoint_t p2) {
+  double x1, y1, x2, y2;
+
+  x1 = p1.x-p0.x;
+  y1 = p1.y-p0.y;
+  x2 = p2.x-p0.x;
+  y2 = p2.y-p0.y;
+
+  return x1*y2 - x2*y1;
+}
+
+/* ddenom/dpara have the property that the square of radius 1 centered
+   at p1 intersects the line p0p2 iff |dpara(p0,p1,p2)| <= ddenom(p0,p2) */
+static inline double ddenom(dpoint_t p0, dpoint_t p2) {
+  point_t r = dorth_infty(p0, p2);
+
+  return r.y*(p2.x-p0.x) - r.x*(p2.y-p0.y);
+}
+
+/* return 1 if a <= b < c < a, in a cyclic sense (mod n) */
+static inline int cyclic(int a, int b, int c) {
+  if (a<=c) {
+    return (a<=b && b<c);
+  } else {
+    return (a<=b || b<c);
+  }
+}
+
+/* determine the center and slope of the line i..j. Assume i<j. Needs
+   "sum" components of p to be set. */
+static void pointslope(privpath_t *pp, int i, int j, dpoint_t *ctr, dpoint_t *dir) {
+  /* assume i<j */
+
+  int n = pp->len;
+  sums_t *sums = pp->sums;
+
+  double x, y, x2, xy, y2;
+  double k;
+  double a, b, c, lambda2, l;
+  int r=0; /* rotations from i to j */
+
+  while (j>=n) {
+    j-=n;
+    r+=1;
+  }
+  while (i>=n) {
+    i-=n;
+    r-=1;
+  }
+  while (j<0) {
+    j+=n;
+    r-=1;
+  }
+  while (i<0) {
+    i+=n;
+    r+=1;
+  }
+  
+  x = sums[j+1].x-sums[i].x+r*sums[n].x;
+  y = sums[j+1].y-sums[i].y+r*sums[n].y;
+  x2 = sums[j+1].x2-sums[i].x2+r*sums[n].x2;
+  xy = sums[j+1].xy-sums[i].xy+r*sums[n].xy;
+  y2 = sums[j+1].y2-sums[i].y2+r*sums[n].y2;
+  k = j+1-i+r*n;
+  
+  ctr->x = x/k;
+  ctr->y = y/k;
+
+  a = (x2-(double)x*x/k)/k;
+  b = (xy-(double)x*y/k)/k;
+  c = (y2-(double)y*y/k)/k;
+  
+  lambda2 = (a+c+sqrt((a-c)*(a-c)+4*b*b))/2; /* larger e.value */
+
+  /* now find e.vector for lambda2 */
+  a -= lambda2;
+  c -= lambda2;
+
+  if (fabs(a) >= fabs(c)) {
+    l = sqrt(a*a+b*b);
+    if (l!=0) {
+      dir->x = -b/l;
+      dir->y = a/l;
+    }
+  } else {
+    l = sqrt(c*c+b*b);
+    if (l!=0) {
+      dir->x = -c/l;
+      dir->y = b/l;
+    }
+  }
+  if (l==0) {
+    dir->x = dir->y = 0;   /* sometimes this can happen when k=4:
+			      the two eigenvalues coincide */
+  }
+}
+
+/* the type of (affine) quadratic forms, represented as symmetric 3x3
+   matrices.  The value of the quadratic form at a vector (x,y) is v^t
+   Q v, where v = (x,y,1)^t. */
+typedef double quadform_t[3][3];
+
+/* Apply quadratic form Q to vector w = (w.x,w.y) */
+static inline double quadform(quadform_t Q, dpoint_t w) {
+  double v[3];
+  int i, j;
+  double sum;
+
+  v[0] = w.x;
+  v[1] = w.y;
+  v[2] = 1;
+  sum = 0.0;
+
+  for (i=0; i<3; i++) {
+    for (j=0; j<3; j++) {
+      sum += v[i] * Q[i][j] * v[j];
+    }
+  }
+  return sum;
+}
+
+/* calculate p1 x p2 */
+static inline int xprod(point_t p1, point_t p2) {
+  return p1.x*p2.y - p1.y*p2.x;
+}
+
+/* calculate (p1-p0)x(p3-p2) */
+static inline double cprod(dpoint_t p0, dpoint_t p1, dpoint_t p2, dpoint_t p3) {
+  double x1, y1, x2, y2;
+
+  x1 = p1.x - p0.x;
+  y1 = p1.y - p0.y;
+  x2 = p3.x - p2.x;
+  y2 = p3.y - p2.y;
+
+  return x1*y2 - x2*y1;
+}
+
+/* calculate (p1-p0)*(p2-p0) */
+static inline double iprod(dpoint_t p0, dpoint_t p1, dpoint_t p2) {
+  double x1, y1, x2, y2;
+
+  x1 = p1.x - p0.x;
+  y1 = p1.y - p0.y;
+  x2 = p2.x - p0.x;
+  y2 = p2.y - p0.y;
+
+  return x1*x2 + y1*y2;
+}
+
+/* calculate (p1-p0)*(p3-p2) */
+static inline double iprod1(dpoint_t p0, dpoint_t p1, dpoint_t p2, dpoint_t p3) {
+  double x1, y1, x2, y2;
+
+  x1 = p1.x - p0.x;
+  y1 = p1.y - p0.y;
+  x2 = p3.x - p2.x;
+  y2 = p3.y - p2.y;
+
+  return x1*x2 + y1*y2;
+}
+
+/* calculate distance between two points */
+static inline double ddist(dpoint_t p, dpoint_t q) {
+  return sqrt(sq(p.x-q.x)+sq(p.y-q.y));
+}
+
+/* calculate point of a bezier curve */
+static inline dpoint_t bezier(double t, dpoint_t p0, dpoint_t p1, dpoint_t p2, dpoint_t p3) {
+  double s = 1-t;
+  dpoint_t res;
+
+  /* Note: a good optimizing compiler (such as gcc-3) reduces the
+     following to 16 multiplications, using common subexpression
+     elimination. */
+
+  res.x = s*s*s*p0.x + 3*(s*s*t)*p1.x + 3*(t*t*s)*p2.x + t*t*t*p3.x;
+  res.y = s*s*s*p0.y + 3*(s*s*t)*p1.y + 3*(t*t*s)*p2.y + t*t*t*p3.y;
+
+  return res;
+}
+
+/* calculate the point t in [0..1] on the (convex) bezier curve
+   (p0,p1,p2,p3) which is tangent to q1-q0. Return -1.0 if there is no
+   solution in [0..1]. */
+static double tangent(dpoint_t p0, dpoint_t p1, dpoint_t p2, dpoint_t p3, dpoint_t q0, dpoint_t q1) {
+  double A, B, C;   /* (1-t)^2 A + 2(1-t)t B + t^2 C = 0 */
+  double a, b, c;   /* a t^2 + b t + c = 0 */
+  double d, s, r1, r2;
+
+  A = cprod(p0, p1, q0, q1);
+  B = cprod(p1, p2, q0, q1);
+  C = cprod(p2, p3, q0, q1);
+
+  a = A - 2*B + C;
+  b = -2*A + 2*B;
+  c = A;
+  
+  d = b*b - 4*a*c;
+
+  if (a==0 || d<0) {
+    return -1.0;
+  }
+
+  s = sqrt(d);
+
+  r1 = (-b + s) / (2 * a);
+  r2 = (-b - s) / (2 * a);
+
+  if (r1 >= 0 && r1 <= 1) {
+    return r1;
+  } else if (r2 >= 0 && r2 <= 1) {
+    return r2;
+  } else {
+    return -1.0;
+  }
+}
+
+/* ---------------------------------------------------------------------- */
+/* Preparation: fill in the sum* fields of a path (used for later
+   rapid summing). Return 0 on success, 1 with errno set on
+   failure. */
+static int calc_sums(privpath_t *pp) {
+  int i, x, y;
+  int n = pp->len;
+
+  SAFE_CALLOC(pp->sums, pp->len+1, sums_t);
+
+  /* origin */
+  pp->x0 = pp->pt[0].x;
+  pp->y0 = pp->pt[0].y;
+
+  /* preparatory computation for later fast summing */
+  pp->sums[0].x2 = pp->sums[0].xy = pp->sums[0].y2 = pp->sums[0].x = pp->sums[0].y = 0;
+  for (i=0; i<n; i++) {
+    x = pp->pt[i].x - pp->x0;
+    y = pp->pt[i].y - pp->y0;
+    pp->sums[i+1].x = pp->sums[i].x + x;
+    pp->sums[i+1].y = pp->sums[i].y + y;
+    pp->sums[i+1].x2 = pp->sums[i].x2 + (double)x*x;
+    pp->sums[i+1].xy = pp->sums[i].xy + (double)x*y;
+    pp->sums[i+1].y2 = pp->sums[i].y2 + (double)y*y;
+  }
+  return 0;  
+
+ calloc_error:
+  return 1;
+}
+
+/* ---------------------------------------------------------------------- */
+/* Stage 1: determine the straight subpaths (Sec. 2.2.1). Fill in the
+   "lon" component of a path object (based on pt/len).	For each i,
+   lon[i] is the furthest index such that a straight line can be drawn
+   from i to lon[i]. Return 1 on error with errno set, else 0. */
+
+/* this algorithm depends on the fact that the existence of straight
+   subpaths is a triplewise property. I.e., there exists a straight
+   line through squares i0,...,in iff there exists a straight line
+   through i,j,k, for all i0<=i<j<k<=in. (Proof?) */
+
+/* this implementation of calc_lon is O(n^2). It replaces an older
+   O(n^3) version. A "constraint" means that future points must
+   satisfy xprod(constraint[0], cur) >= 0 and xprod(constraint[1],
+   cur) <= 0. */
+
+/* Remark for Potrace 1.1: the current implementation of calc_lon is
+   more complex than the implementation found in Potrace 1.0, but it
+   is considerably faster. The introduction of the "nc" data structure
+   means that we only have to test the constraints for "corner"
+   points. On a typical input file, this speeds up the calc_lon
+   function by a factor of 31.2, thereby decreasing its time share
+   within the overall Potrace algorithm from 72.6% to 7.82%, and
+   speeding up the overall algorithm by a factor of 3.36. On another
+   input file, calc_lon was sped up by a factor of 6.7, decreasing its
+   time share from 51.4% to 13.61%, and speeding up the overall
+   algorithm by a factor of 1.78. In any case, the savings are
+   substantial. */
+
+/* returns 0 on success, 1 on error with errno set */
+static int calc_lon(privpath_t *pp) {
+  point_t *pt = pp->pt;
+  int n = pp->len;
+  int i, j, k, k1;
+  int ct[4], dir;
+  point_t constraint[2];
+  point_t cur;
+  point_t off;
+  int *pivk = NULL;  /* pivk[n] */
+  int *nc = NULL;    /* nc[n]: next corner */
+  point_t dk;  /* direction of k-k1 */
+  int a, b, c, d;
+
+  SAFE_CALLOC(pivk, n, int);
+  SAFE_CALLOC(nc, n, int);
+
+  /* initialize the nc data structure. Point from each point to the
+     furthest future point to which it is connected by a vertical or
+     horizontal segment. We take advantage of the fact that there is
+     always a direction change at 0 (due to the path decomposition
+     algorithm). But even if this were not so, there is no harm, as
+     in practice, correctness does not depend on the word "furthest"
+     above.  */
+  k = 0;
+  for (i=n-1; i>=0; i--) {
+    if (pt[i].x != pt[k].x && pt[i].y != pt[k].y) {
+      k = i+1;  /* necessarily i<n-1 in this case */
+    }
+    nc[i] = k;
+  }
+
+  SAFE_CALLOC(pp->lon, n, int);
+
+  /* determine pivot points: for each i, let pivk[i] be the furthest k
+     such that all j with i<j<k lie on a line connecting i,k. */
+  
+  for (i=n-1; i>=0; i--) {
+    ct[0] = ct[1] = ct[2] = ct[3] = 0;
+
+    /* keep track of "directions" that have occurred */
+    dir = (3+3*(pt[mod(i+1,n)].x-pt[i].x)+(pt[mod(i+1,n)].y-pt[i].y))/2;
+    ct[dir]++;
+
+    constraint[0].x = 0;
+    constraint[0].y = 0;
+    constraint[1].x = 0;
+    constraint[1].y = 0;
+
+    /* find the next k such that no straight line from i to k */
+    k = nc[i];
+    k1 = i;
+    while (1) {
+      
+      dir = (3+3*sign(pt[k].x-pt[k1].x)+sign(pt[k].y-pt[k1].y))/2;
+      ct[dir]++;
+
+      /* if all four "directions" have occurred, cut this path */
+      if (ct[0] && ct[1] && ct[2] && ct[3]) {
+	pivk[i] = k1;
+	goto foundk;
+      }
+
+      cur.x = pt[k].x - pt[i].x;
+      cur.y = pt[k].y - pt[i].y;
+
+      /* see if current constraint is violated */
+      if (xprod(constraint[0], cur) < 0 || xprod(constraint[1], cur) > 0) {
+	goto constraint_viol;
+      }
+
+      /* else, update constraint */
+      if (abs(cur.x) <= 1 && abs(cur.y) <= 1) {
+	/* no constraint */
+      } else {
+	off.x = cur.x + ((cur.y>=0 && (cur.y>0 || cur.x<0)) ? 1 : -1);
+	off.y = cur.y + ((cur.x<=0 && (cur.x<0 || cur.y<0)) ? 1 : -1);
+	if (xprod(constraint[0], off) >= 0) {
+	  constraint[0] = off;
+	}
+	off.x = cur.x + ((cur.y<=0 && (cur.y<0 || cur.x<0)) ? 1 : -1);
+	off.y = cur.y + ((cur.x>=0 && (cur.x>0 || cur.y<0)) ? 1 : -1);
+	if (xprod(constraint[1], off) <= 0) {
+	  constraint[1] = off;
+	}
+      }	
+      k1 = k;
+      k = nc[k1];
+      if (!cyclic(k,i,k1)) {
+	break;
+      }
+    }
+  constraint_viol:
+    /* k1 was the last "corner" satisfying the current constraint, and
+       k is the first one violating it. We now need to find the last
+       point along k1..k which satisfied the constraint. */
+    dk.x = sign(pt[k].x-pt[k1].x);
+    dk.y = sign(pt[k].y-pt[k1].y);
+    cur.x = pt[k1].x - pt[i].x;
+    cur.y = pt[k1].y - pt[i].y;
+    /* find largest integer j such that xprod(constraint[0], cur+j*dk)
+       >= 0 and xprod(constraint[1], cur+j*dk) <= 0. Use bilinearity
+       of xprod. */
+    a = xprod(constraint[0], cur);
+    b = xprod(constraint[0], dk);
+    c = xprod(constraint[1], cur);
+    d = xprod(constraint[1], dk);
+    /* find largest integer j such that a+j*b>=0 and c+j*d<=0. This
+       can be solved with integer arithmetic. */
+    j = INFTY;
+    if (b<0) {
+      j = floordiv(a,-b);
+    }
+    if (d>0) {
+      j = min(j, floordiv(-c,d));
+    }
+    pivk[i] = mod(k1+j,n);
+  foundk:
+    ;
+  } /* for i */
+
+  /* clean up: for each i, let lon[i] be the largest k such that for
+     all i' with i<=i'<k, i'<k<=pivk[i']. */
+
+  j=pivk[n-1];
+  pp->lon[n-1]=j;
+  for (i=n-2; i>=0; i--) {
+    if (cyclic(i+1,pivk[i],j)) {
+      j=pivk[i];
+    }
+    pp->lon[i]=j;
+  }
+
+  for (i=n-1; cyclic(mod(i+1,n),j,pp->lon[i]); i--) {
+    pp->lon[i] = j;
+  }
+
+  free(pivk);
+  free(nc);
+  return 0;
+
+ calloc_error:
+  free(pivk);
+  free(nc);
+  return 1;
+}
+
+
+/* ---------------------------------------------------------------------- */
+/* Stage 2: calculate the optimal polygon (Sec. 2.2.2-2.2.4). */ 
+
+/* Auxiliary function: calculate the penalty of an edge from i to j in
+   the given path. This needs the "lon" and "sum*" data. */
+
+static double penalty3(privpath_t *pp, int i, int j) {
+  int n = pp->len;
+  point_t *pt = pp->pt;
+  sums_t *sums = pp->sums;
+
+  /* assume 0<=i<j<=n  */
+  double x, y, x2, xy, y2;
+  double k;
+  double a, b, c, s;
+  double px, py, ex, ey;
+
+  int r = 0; /* rotations from i to j */
+
+  if (j>=n) {
+    j -= n;
+    r = 1;
+  }
+  
+  /* critical inner loop: the "if" gives a 4.6 percent speedup */
+  if (r == 0) {
+    x = sums[j+1].x - sums[i].x;
+    y = sums[j+1].y - sums[i].y;
+    x2 = sums[j+1].x2 - sums[i].x2;
+    xy = sums[j+1].xy - sums[i].xy;
+    y2 = sums[j+1].y2 - sums[i].y2;
+    k = j+1 - i;
+  } else {
+    x = sums[j+1].x - sums[i].x + sums[n].x;
+    y = sums[j+1].y - sums[i].y + sums[n].y;
+    x2 = sums[j+1].x2 - sums[i].x2 + sums[n].x2;
+    xy = sums[j+1].xy - sums[i].xy + sums[n].xy;
+    y2 = sums[j+1].y2 - sums[i].y2 + sums[n].y2;
+    k = j+1 - i + n;
+  } 
+
+  px = (pt[i].x + pt[j].x) / 2.0 - pt[0].x;
+  py = (pt[i].y + pt[j].y) / 2.0 - pt[0].y;
+  ey = (pt[j].x - pt[i].x);
+  ex = -(pt[j].y - pt[i].y);
+
+  a = ((x2 - 2*x*px) / k + px*px);
+  b = ((xy - x*py - y*px) / k + px*py);
+  c = ((y2 - 2*y*py) / k + py*py);
+  
+  s = ex*ex*a + 2*ex*ey*b + ey*ey*c;
+
+  return sqrt(s);
+}
+
+/* find the optimal polygon. Fill in the m and po components. Return 1
+   on failure with errno set, else 0. Non-cyclic version: assumes i=0
+   is in the polygon. Fixme: implement cyclic version. */
+static int bestpolygon(privpath_t *pp)
+{
+  int i, j, m, k;     
+  int n = pp->len;
+  double *pen = NULL; /* pen[n+1]: penalty vector */
+  int *prev = NULL;   /* prev[n+1]: best path pointer vector */
+  int *clip0 = NULL;  /* clip0[n]: longest segment pointer, non-cyclic */
+  int *clip1 = NULL;  /* clip1[n+1]: backwards segment pointer, non-cyclic */
+  int *seg0 = NULL;    /* seg0[m+1]: forward segment bounds, m<=n */
+  int *seg1 = NULL;   /* seg1[m+1]: backward segment bounds, m<=n */
+  double thispen;
+  double best;
+  int c;
+
+  SAFE_CALLOC(pen, n+1, double);
+  SAFE_CALLOC(prev, n+1, int);
+  SAFE_CALLOC(clip0, n, int);
+  SAFE_CALLOC(clip1, n+1, int);
+  SAFE_CALLOC(seg0, n+1, int);
+  SAFE_CALLOC(seg1, n+1, int);
+
+  /* calculate clipped paths */
+  for (i=0; i<n; i++) {
+    c = mod(pp->lon[mod(i-1,n)]-1,n);
+    if (c == i) {
+      c = mod(i+1,n);
+    }
+    if (c < i) {
+      clip0[i] = n;
+    } else {
+      clip0[i] = c;
+    }
+  }
+
+  /* calculate backwards path clipping, non-cyclic. j <= clip0[i] iff
+     clip1[j] <= i, for i,j=0..n. */
+  j = 1;
+  for (i=0; i<n; i++) {
+    while (j <= clip0[i]) {
+      clip1[j] = i;
+      j++;
+    }
+  }
+
+  /* calculate seg0[j] = longest path from 0 with j segments */
+  i = 0;
+  for (j=0; i<n; j++) {
+    seg0[j] = i;
+    i = clip0[i];
+  }
+  seg0[j] = n;
+  m = j;
+
+  /* calculate seg1[j] = longest path to n with m-j segments */
+  i = n;
+  for (j=m; j>0; j--) {
+    seg1[j] = i;
+    i = clip1[i];
+  }
+  seg1[0] = 0;
+
+  /* now find the shortest path with m segments, based on penalty3 */
+  /* note: the outer 2 loops jointly have at most n iterations, thus
+     the worst-case behavior here is quadratic. In practice, it is
+     close to linear since the inner loop tends to be short. */
+  pen[0]=0;
+  for (j=1; j<=m; j++) {
+    for (i=seg1[j]; i<=seg0[j]; i++) {
+      best = -1;
+      for (k=seg0[j-1]; k>=clip1[i]; k--) {
+	thispen = penalty3(pp, k, i) + pen[k];
+	if (best < 0 || thispen < best) {
+	  prev[i] = k;
+	  best = thispen;
+	}
+      }
+      pen[i] = best;
+    }
+  }
+
+  pp->m = m;
+  SAFE_CALLOC(pp->po, m, int);
+
+  /* read off shortest path */
+  for (i=n, j=m-1; i>0; j--) {
+    i = prev[i];
+    pp->po[j] = i;
+  }
+
+  free(pen);
+  free(prev);
+  free(clip0);
+  free(clip1);
+  free(seg0);
+  free(seg1);
+  return 0;
+  
+ calloc_error:
+  free(pen);
+  free(prev);
+  free(clip0);
+  free(clip1);
+  free(seg0);
+  free(seg1);
+  return 1;
+}
+
+/* ---------------------------------------------------------------------- */
+/* Stage 3: vertex adjustment (Sec. 2.3.1). */
+
+/* Adjust vertices of optimal polygon: calculate the intersection of
+   the two "optimal" line segments, then move it into the unit square
+   if it lies outside. Return 1 with errno set on error; 0 on
+   success. */
+
+static int adjust_vertices(privpath_t *pp) {
+  int m = pp->m;
+  int *po = pp->po;
+  int n = pp->len;
+  point_t *pt = pp->pt;
+  int x0 = pp->x0;
+  int y0 = pp->y0;
+
+  dpoint_t *ctr = NULL;      /* ctr[m] */
+  dpoint_t *dir = NULL;      /* dir[m] */
+  quadform_t *q = NULL;      /* q[m] */
+  double v[3];
+  double d;
+  int i, j, k, l;
+  dpoint_t s;
+  int r;
+
+  SAFE_CALLOC(ctr, m, dpoint_t);
+  SAFE_CALLOC(dir, m, dpoint_t);
+  SAFE_CALLOC(q, m, quadform_t);
+
+  r = privcurve_init(&pp->curve, m);
+  if (r) {
+    goto calloc_error;
+  }
+  
+  /* calculate "optimal" point-slope representation for each line
+     segment */
+  for (i=0; i<m; i++) {
+    j = po[mod(i+1,m)];
+    j = mod(j-po[i],n)+po[i];
+    pointslope(pp, po[i], j, &ctr[i], &dir[i]);
+  }
+
+  /* represent each line segment as a singular quadratic form; the
+     distance of a point (x,y) from the line segment will be
+     (x,y,1)Q(x,y,1)^t, where Q=q[i]. */
+  for (i=0; i<m; i++) {
+    d = sq(dir[i].x) + sq(dir[i].y);
+    if (d == 0.0) {
+      for (j=0; j<3; j++) {
+	for (k=0; k<3; k++) {
+	  q[i][j][k] = 0;
+	}
+      }
+    } else {
+      v[0] = dir[i].y;
+      v[1] = -dir[i].x;
+      v[2] = - v[1] * ctr[i].y - v[0] * ctr[i].x;
+      for (l=0; l<3; l++) {
+	for (k=0; k<3; k++) {
+	  q[i][l][k] = v[l] * v[k] / d;
+	}
+      }
+    }
+  }
+
+  /* now calculate the "intersections" of consecutive segments.
+     Instead of using the actual intersection, we find the point
+     within a given unit square which minimizes the square distance to
+     the two lines. */
+  for (i=0; i<m; i++) {
+    quadform_t Q;
+    dpoint_t w;
+    double dx, dy;
+    double det;
+    double min, cand; /* minimum and candidate for minimum of quad. form */
+    double xmin, ymin;	/* coordinates of minimum */
+    int z;
+
+    /* let s be the vertex, in coordinates relative to x0/y0 */
+    s.x = pt[po[i]].x-x0;
+    s.y = pt[po[i]].y-y0;
+
+    /* intersect segments i-1 and i */
+
+    j = mod(i-1,m);
+
+    /* add quadratic forms */
+    for (l=0; l<3; l++) {
+      for (k=0; k<3; k++) {
+	Q[l][k] = q[j][l][k] + q[i][l][k];
+      }
+    }
+    
+    while(1) {
+      /* minimize the quadratic form Q on the unit square */
+      /* find intersection */
+
+#ifdef HAVE_GCC_LOOP_BUG
+      /* work around gcc bug #12243 */
+      free(NULL);
+#endif
+      
+      det = Q[0][0]*Q[1][1] - Q[0][1]*Q[1][0];
+      if (det != 0.0) {
+	w.x = (-Q[0][2]*Q[1][1] + Q[1][2]*Q[0][1]) / det;
+	w.y = ( Q[0][2]*Q[1][0] - Q[1][2]*Q[0][0]) / det;
+	break;
+      }
+
+      /* matrix is singular - lines are parallel. Add another,
+	 orthogonal axis, through the center of the unit square */
+      if (Q[0][0]>Q[1][1]) {
+	v[0] = -Q[0][1];
+	v[1] = Q[0][0];
+      } else if (Q[1][1]) {
+	v[0] = -Q[1][1];
+	v[1] = Q[1][0];
+      } else {
+	v[0] = 1;
+	v[1] = 0;
+      }
+      d = sq(v[0]) + sq(v[1]);
+      v[2] = - v[1] * s.y - v[0] * s.x;
+      for (l=0; l<3; l++) {
+	for (k=0; k<3; k++) {
+	  Q[l][k] += v[l] * v[k] / d;
+	}
+      }
+    }
+    dx = fabs(w.x-s.x);
+    dy = fabs(w.y-s.y);
+    if (dx <= .5 && dy <= .5) {
+      pp->curve.vertex[i].x = w.x+x0;
+      pp->curve.vertex[i].y = w.y+y0;
+      continue;
+    }
+
+    /* the minimum was not in the unit square; now minimize quadratic
+       on boundary of square */
+    min = quadform(Q, s);
+    xmin = s.x;
+    ymin = s.y;
+
+    if (Q[0][0] == 0.0) {
+      goto fixx;
+    }
+    for (z=0; z<2; z++) {   /* value of the y-coordinate */
+      w.y = s.y-0.5+z;
+      w.x = - (Q[0][1] * w.y + Q[0][2]) / Q[0][0];
+      dx = fabs(w.x-s.x);
+      cand = quadform(Q, w);
+      if (dx <= .5 && cand < min) {
+	min = cand;
+	xmin = w.x;
+	ymin = w.y;
+      }
+    }
+  fixx:
+    if (Q[1][1] == 0.0) {
+      goto corners;
+    }
+    for (z=0; z<2; z++) {   /* value of the x-coordinate */
+      w.x = s.x-0.5+z;
+      w.y = - (Q[1][0] * w.x + Q[1][2]) / Q[1][1];
+      dy = fabs(w.y-s.y);
+      cand = quadform(Q, w);
+      if (dy <= .5 && cand < min) {
+	min = cand;
+	xmin = w.x;
+	ymin = w.y;
+      }
+    }
+  corners:
+    /* check four corners */
+    for (l=0; l<2; l++) {
+      for (k=0; k<2; k++) {
+	w.x = s.x-0.5+l;
+	w.y = s.y-0.5+k;
+	cand = quadform(Q, w);
+	if (cand < min) {
+	  min = cand;
+	  xmin = w.x;
+	  ymin = w.y;
+	}
+      }
+    }
+
+    pp->curve.vertex[i].x = xmin + x0;
+    pp->curve.vertex[i].y = ymin + y0;
+    continue;
+  }
+
+  free(ctr);
+  free(dir);
+  free(q);
+  return 0;
+
+ calloc_error:
+  free(ctr);
+  free(dir);
+  free(q);
+  return 1;
+}
+
+/* ---------------------------------------------------------------------- */
+/* Stage 4: smoothing and corner analysis (Sec. 2.3.3) */
+
+/* reverse orientation of a path */
+static void reverse(privcurve_t *curve) {
+  int m = curve->n;
+  int i, j;
+  dpoint_t tmp;
+
+  for (i=0, j=m-1; i<j; i++, j--) {
+    tmp = curve->vertex[i];
+    curve->vertex[i] = curve->vertex[j];
+    curve->vertex[j] = tmp;
+  }
+}
+
+/* Always succeeds */
+static void smooth(privcurve_t *curve, double alphamax) {
+  int m = curve->n;
+
+  int i, j, k;
+  double dd, denom, alpha;
+  dpoint_t p2, p3, p4;
+
+  /* examine each vertex and find its best fit */
+  for (i=0; i<m; i++) {
+    j = mod(i+1, m);
+    k = mod(i+2, m);
+    p4 = interval(1/2.0, curve->vertex[k], curve->vertex[j]);
+
+    denom = ddenom(curve->vertex[i], curve->vertex[k]);
+    if (denom != 0.0) {
+      dd = dpara(curve->vertex[i], curve->vertex[j], curve->vertex[k]) / denom;
+      dd = fabs(dd);
+      alpha = dd>1 ? (1 - 1.0/dd) : 0;
+      alpha = alpha / 0.75;
+    } else {
+      alpha = 4/3.0;
+    }
+    curve->alpha0[j] = alpha;	 /* remember "original" value of alpha */
+
+    if (alpha >= alphamax) {  /* pointed corner */
+      curve->tag[j] = POTRACE_CORNER;
+      curve->c[j][1] = curve->vertex[j];
+      curve->c[j][2] = p4;
+    } else {
+      if (alpha < 0.55) {
+	alpha = 0.55;
+      } else if (alpha > 1) {
+	alpha = 1;
+      }
+      p2 = interval(.5+.5*alpha, curve->vertex[i], curve->vertex[j]);
+      p3 = interval(.5+.5*alpha, curve->vertex[k], curve->vertex[j]);
+      curve->tag[j] = POTRACE_CURVETO;
+      curve->c[j][0] = p2;
+      curve->c[j][1] = p3;
+      curve->c[j][2] = p4;
+    }
+    curve->alpha[j] = alpha;	/* store the "cropped" value of alpha */
+    curve->beta[j] = 0.5;
+  }
+  curve->alphacurve = 1;
+
+  return;
+}
+
+/* ---------------------------------------------------------------------- */
+/* Stage 5: Curve optimization (Sec. 2.4) */
+
+/* a private type for the result of opti_penalty */
+struct opti_s {
+  double pen;	   /* penalty */
+  dpoint_t c[2];   /* curve parameters */
+  double t, s;	   /* curve parameters */
+  double alpha;	   /* curve parameter */
+};
+typedef struct opti_s opti_t;
+
+/* calculate best fit from i+.5 to j+.5.  Assume i<j (cyclically).
+   Return 0 and set badness and parameters (alpha, beta), if
+   possible. Return 1 if impossible. */
+static int opti_penalty(privpath_t *pp, int i, int j, opti_t *res, double opttolerance, int *convc, double *areac) {
+  int m = pp->curve.n;
+  int k, k1, k2, conv, i1;
+  double area, alpha, d, d1, d2;
+  dpoint_t p0, p1, p2, p3, pt;
+  double A, R, A1, A2, A3, A4;
+  double s, t;
+
+  /* check convexity, corner-freeness, and maximum bend < 179 degrees */
+
+  if (i==j) {  /* sanity - a full loop can never be an opticurve */
+    return 1;
+  }
+
+  k = i;
+  i1 = mod(i+1, m);
+  k1 = mod(k+1, m);
+  conv = convc[k1];
+  if (conv == 0) {
+    return 1;
+  }
+  d = ddist(pp->curve.vertex[i], pp->curve.vertex[i1]);
+  for (k=k1; k!=j; k=k1) {
+    k1 = mod(k+1, m);
+    k2 = mod(k+2, m);
+    if (convc[k1] != conv) {
+      return 1;
+    }
+    if (sign(cprod(pp->curve.vertex[i], pp->curve.vertex[i1], pp->curve.vertex[k1], pp->curve.vertex[k2])) != conv) {
+      return 1;
+    }
+    if (iprod1(pp->curve.vertex[i], pp->curve.vertex[i1], pp->curve.vertex[k1], pp->curve.vertex[k2]) < d * ddist(pp->curve.vertex[k1], pp->curve.vertex[k2]) * COS179) {
+      return 1;
+    }
+  }
+
+  /* the curve we're working in: */
+  p0 = pp->curve.c[mod(i,m)][2];
+  p1 = pp->curve.vertex[mod(i+1,m)];
+  p2 = pp->curve.vertex[mod(j,m)];
+  p3 = pp->curve.c[mod(j,m)][2];
+
+  /* determine its area */
+  area = areac[j] - areac[i];
+  area -= dpara(pp->curve.vertex[0], pp->curve.c[i][2], pp->curve.c[j][2])/2;
+  if (i>=j) {
+    area += areac[m];
+  }
+
+  /* find intersection o of p0p1 and p2p3. Let t,s such that o =
+     interval(t,p0,p1) = interval(s,p3,p2). Let A be the area of the
+     triangle (p0,o,p3). */
+
+  A1 = dpara(p0, p1, p2);
+  A2 = dpara(p0, p1, p3);
+  A3 = dpara(p0, p2, p3);
+  /* A4 = dpara(p1, p2, p3); */
+  A4 = A1+A3-A2;    
+  
+  if (A2 == A1) {  /* this should never happen */
+    return 1;
+  }
+
+  t = A3/(A3-A4);
+  s = A2/(A2-A1);
+  A = A2 * t / 2.0;
+  
+  if (A == 0.0) {  /* this should never happen */
+    return 1;
+  }
+
+  R = area / A;	 /* relative area */
+  alpha = 2 - sqrt(4 - R / 0.3);  /* overall alpha for p0-o-p3 curve */
+
+  res->c[0] = interval(t * alpha, p0, p1);
+  res->c[1] = interval(s * alpha, p3, p2);
+  res->alpha = alpha;
+  res->t = t;
+  res->s = s;
+
+  p1 = res->c[0];
+  p2 = res->c[1];  /* the proposed curve is now (p0,p1,p2,p3) */
+
+  res->pen = 0;
+
+  /* calculate penalty */
+  /* check tangency with edges */
+  for (k=mod(i+1,m); k!=j; k=k1) {
+    k1 = mod(k+1,m);
+    t = tangent(p0, p1, p2, p3, pp->curve.vertex[k], pp->curve.vertex[k1]);
+    if (t<-.5) {
+      return 1;
+    }
+    pt = bezier(t, p0, p1, p2, p3);
+    d = ddist(pp->curve.vertex[k], pp->curve.vertex[k1]);
+    if (d == 0.0) {  /* this should never happen */
+      return 1;
+    }
+    d1 = dpara(pp->curve.vertex[k], pp->curve.vertex[k1], pt) / d;
+    if (fabs(d1) > opttolerance) {
+      return 1;
+    }
+    if (iprod(pp->curve.vertex[k], pp->curve.vertex[k1], pt) < 0 || iprod(pp->curve.vertex[k1], pp->curve.vertex[k], pt) < 0) {
+      return 1;
+    }
+    res->pen += sq(d1);
+  }
+
+  /* check corners */
+  for (k=i; k!=j; k=k1) {
+    k1 = mod(k+1,m);
+    t = tangent(p0, p1, p2, p3, pp->curve.c[k][2], pp->curve.c[k1][2]);
+    if (t<-.5) {
+      return 1;
+    }
+    pt = bezier(t, p0, p1, p2, p3);
+    d = ddist(pp->curve.c[k][2], pp->curve.c[k1][2]);
+    if (d == 0.0) {  /* this should never happen */
+      return 1;
+    }
+    d1 = dpara(pp->curve.c[k][2], pp->curve.c[k1][2], pt) / d;
+    d2 = dpara(pp->curve.c[k][2], pp->curve.c[k1][2], pp->curve.vertex[k1]) / d;
+    d2 *= 0.75 * pp->curve.alpha[k1];
+    if (d2 < 0) {
+      d1 = -d1;
+      d2 = -d2;
+    }
+    if (d1 < d2 - opttolerance) {
+      return 1;
+    }
+    if (d1 < d2) {
+      res->pen += sq(d1 - d2);
+    }
+  }
+
+  return 0;
+}
+
+/* optimize the path p, replacing sequences of Bezier segments by a
+   single segment when possible. Return 0 on success, 1 with errno set
+   on failure. */
+static int opticurve(privpath_t *pp, double opttolerance) {
+  int m = pp->curve.n;
+  int *pt = NULL;     /* pt[m+1] */
+  double *pen = NULL; /* pen[m+1] */
+  int *len = NULL;    /* len[m+1] */
+  opti_t *opt = NULL; /* opt[m+1] */
+  int om;
+  int i,j,r;
+  opti_t o;
+  dpoint_t p0;
+  int i1;
+  double area;
+  double alpha;
+  double *s = NULL;
+  double *t = NULL;
+
+  int *convc = NULL; /* conv[m]: pre-computed convexities */
+  double *areac = NULL; /* cumarea[m+1]: cache for fast area computation */
+
+  SAFE_CALLOC(pt, m+1, int);
+  SAFE_CALLOC(pen, m+1, double);
+  SAFE_CALLOC(len, m+1, int);
+  SAFE_CALLOC(opt, m+1, opti_t);
+  SAFE_CALLOC(convc, m, int);
+  SAFE_CALLOC(areac, m+1, double);
+
+  /* pre-calculate convexity: +1 = right turn, -1 = left turn, 0 = corner */
+  for (i=0; i<m; i++) {
+    if (pp->curve.tag[i] == POTRACE_CURVETO) {
+      convc[i] = sign(dpara(pp->curve.vertex[mod(i-1,m)], pp->curve.vertex[i], pp->curve.vertex[mod(i+1,m)]));
+    } else {
+      convc[i] = 0;
+    }
+  }
+
+  /* pre-calculate areas */
+  area = 0.0;
+  areac[0] = 0.0;
+  p0 = pp->curve.vertex[0];
+  for (i=0; i<m; i++) {
+    i1 = mod(i+1, m);
+    if (pp->curve.tag[i1] == POTRACE_CURVETO) {
+      alpha = pp->curve.alpha[i1];
+      area += 0.3*alpha*(4-alpha)*dpara(pp->curve.c[i][2], pp->curve.vertex[i1], pp->curve.c[i1][2])/2;
+      area += dpara(p0, pp->curve.c[i][2], pp->curve.c[i1][2])/2;
+    }
+    areac[i+1] = area;
+  }
+
+  pt[0] = -1;
+  pen[0] = 0;
+  len[0] = 0;
+
+  /* Fixme: we always start from a fixed point -- should find the best
+     curve cyclically */
+
+  for (j=1; j<=m; j++) {
+    /* calculate best path from 0 to j */
+    pt[j] = j-1;
+    pen[j] = pen[j-1];
+    len[j] = len[j-1]+1;
+
+    for (i=j-2; i>=0; i--) {
+      r = opti_penalty(pp, i, mod(j,m), &o, opttolerance, convc, areac);
+      if (r) {
+	break;
+      }
+      if (len[j] > len[i]+1 || (len[j] == len[i]+1 && pen[j] > pen[i] + o.pen)) {
+	pt[j] = i;
+	pen[j] = pen[i] + o.pen;
+	len[j] = len[i] + 1;
+	opt[j] = o;
+      }
+    }
+  }
+  om = len[m];
+  r = privcurve_init(&pp->ocurve, om);
+  if (r) {
+    goto calloc_error;
+  }
+  SAFE_CALLOC(s, om, double);
+  SAFE_CALLOC(t, om, double);
+
+  j = m;
+  for (i=om-1; i>=0; i--) {
+    if (pt[j]==j-1) {
+      pp->ocurve.tag[i]     = pp->curve.tag[mod(j,m)];
+      pp->ocurve.c[i][0]    = pp->curve.c[mod(j,m)][0];
+      pp->ocurve.c[i][1]    = pp->curve.c[mod(j,m)][1];
+      pp->ocurve.c[i][2]    = pp->curve.c[mod(j,m)][2];
+      pp->ocurve.vertex[i]  = pp->curve.vertex[mod(j,m)];
+      pp->ocurve.alpha[i]   = pp->curve.alpha[mod(j,m)];
+      pp->ocurve.alpha0[i]  = pp->curve.alpha0[mod(j,m)];
+      pp->ocurve.beta[i]    = pp->curve.beta[mod(j,m)];
+      s[i] = t[i] = 1.0;
+    } else {
+      pp->ocurve.tag[i] = POTRACE_CURVETO;
+      pp->ocurve.c[i][0] = opt[j].c[0];
+      pp->ocurve.c[i][1] = opt[j].c[1];
+      pp->ocurve.c[i][2] = pp->curve.c[mod(j,m)][2];
+      pp->ocurve.vertex[i] = interval(opt[j].s, pp->curve.c[mod(j,m)][2], pp->curve.vertex[mod(j,m)]);
+      pp->ocurve.alpha[i] = opt[j].alpha;
+      pp->ocurve.alpha0[i] = opt[j].alpha;
+      s[i] = opt[j].s;
+      t[i] = opt[j].t;
+    }
+    j = pt[j];
+  }
+
+  /* calculate beta parameters */
+  for (i=0; i<om; i++) {
+    i1 = mod(i+1,om);
+    pp->ocurve.beta[i] = s[i] / (s[i] + t[i1]);
+  }
+  pp->ocurve.alphacurve = 1;
+
+  free(pt);
+  free(pen);
+  free(len);
+  free(opt);
+  free(s);
+  free(t);
+  free(convc);
+  free(areac);
+  return 0;
+
+ calloc_error:
+  free(pt);
+  free(pen);
+  free(len);
+  free(opt);
+  free(s);
+  free(t);
+  free(convc);
+  free(areac);
+  return 1;
+}
+
+/* ---------------------------------------------------------------------- */
+
+#define TRY(x) if (x) goto try_error
+
+/* return 0 on success, 1 on error with errno set. */
+int process_path(path_t *plist, const potrace_param_t *param, progress_t *progress) {
+  path_t *p;
+  double nn = 0, cn = 0;
+
+  if (progress->callback) {
+    /* precompute task size for progress estimates */
+    nn = 0;
+    list_forall (p, plist) {
+      nn += p->priv->len;
+    }
+    cn = 0;
+  }
+  
+  /* call downstream function with each path */
+  list_forall (p, plist) {
+    TRY(calc_sums(p->priv));
+    TRY(calc_lon(p->priv));
+    TRY(bestpolygon(p->priv));
+    TRY(adjust_vertices(p->priv));
+    if (p->sign == '-') {   /* reverse orientation of negative paths */
+      reverse(&p->priv->curve);
+    }
+    smooth(&p->priv->curve, param->alphamax);
+    if (param->opticurve) {
+      TRY(opticurve(p->priv, param->opttolerance));
+      p->priv->fcurve = &p->priv->ocurve;
+    } else {
+      p->priv->fcurve = &p->priv->curve;
+    }
+    privcurve_to_curve(p->priv->fcurve, &p->curve);
+
+    if (progress->callback) {
+      cn += p->priv->len;
+      progress_update(cn/nn, progress);
+    }
+  }
+
+  progress_update(1.0, progress);
+
+  return 0;
+
+ try_error:
+  return 1;
+}


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/trace.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/trace.h
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/trace.h	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/trace.h	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,15 @@
+/* Copyright (C) 2001-2019 Peter Selinger.
+   This file is part of Potrace. It is free software and it is covered
+   by the GNU General Public License. See the file COPYING for details. */
+
+
+#ifndef TRACE_H
+#define TRACE_H
+
+#include "potracelib.h"
+#include "progress.h"
+#include "curve.h"
+
+int process_path(path_t *plist, const potrace_param_t *param, progress_t *progress);
+
+#endif /* TRACE_H */


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/potrace/trace.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/Makefile.in	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/variant/Makefile.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -90,7 +90,8 @@
 host_triplet = @host@
 subdir = dvisvgm-src/libs/variant
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/dvisvgm-src/m4/ax_gcc_builtin.m4 \
+	$(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
 	$(top_srcdir)/../../m4/kpse-common.m4 \
 	$(top_srcdir)/../../m4/kpse-cxx-hack.m4 \
 	$(top_srcdir)/../../m4/kpse-freetype2-flags.m4 \

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.am	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.am	2023-01-20 01:55:04 UTC (rev 65593)
@@ -28,7 +28,6 @@
 
 AM_CXXFLAGS = -Wall -I$(srcdir)/include -I$(srcdir)/../brotli/include
 
- at CODE_COVERAGE_RULES@
 endif
 
 EXTRA_DIST = LICENSE

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.in	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/woff2/Makefile.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -90,7 +90,8 @@
 host_triplet = @host@
 subdir = dvisvgm-src/libs/woff2
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/dvisvgm-src/m4/ax_gcc_builtin.m4 \
+	$(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
 	$(top_srcdir)/../../m4/kpse-common.m4 \
 	$(top_srcdir)/../../m4/kpse-cxx-hack.m4 \
 	$(top_srcdir)/../../m4/kpse-freetype2-flags.m4 \
@@ -756,8 +757,6 @@
 .PRECIOUS: Makefile
 
 
- at HAVE_WOFF2_FALSE@@CODE_COVERAGE_RULES@
-
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/Makefile.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/Makefile.am	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/Makefile.am	2023-01-20 01:55:04 UTC (rev 65593)
@@ -6,7 +6,6 @@
 
 xxhash.c: xxhash.h xxh3.h
 
- at CODE_COVERAGE_RULES@
 endif
 
 CLEANFILES = *.gcda *.gcno

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/Makefile.in	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/libs/xxHash/Makefile.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -90,7 +90,8 @@
 host_triplet = @host@
 subdir = dvisvgm-src/libs/xxHash
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/dvisvgm-src/m4/ax_gcc_builtin.m4 \
+	$(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
 	$(top_srcdir)/../../m4/kpse-common.m4 \
 	$(top_srcdir)/../../m4/kpse-cxx-hack.m4 \
 	$(top_srcdir)/../../m4/kpse-freetype2-flags.m4 \
@@ -646,8 +647,6 @@
 
 @HAVE_XXHASH_FALSE at xxhash.c: xxhash.h xxh3.h
 
- at HAVE_XXHASH_FALSE@@CODE_COVERAGE_RULES@
-
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/AGLTable.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/AGLTable.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/AGLTable.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** AGLTable.hpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** BasicDVIReader.cpp                                                   **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BasicDVIReader.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** BasicDVIReader.hpp                                                   **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Bezier.cpp                                                           **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -22,21 +22,58 @@
 #include <utility>
 #include "Bezier.hpp"
 #include "Matrix.hpp"
+#include "utility.hpp"
 
 using namespace std;
 
-Bezier::Bezier () {
-	_points[0] = _points[1] = _points[2] = _points[3] = DPair(0);
+QuadBezier::QuadBezier () {
+	_points[0] = _points[1] = _points[2]  = DPair(0, 0);
 }
 
 
-/** Creates a quadratic Bézier curve. internally, it's represented as a cubic one. */
-Bezier::Bezier (const DPair &p0, const DPair &p1, const DPair &p2) {
-	setPoints(p0, p0+(p1-p0)*2.0/3.0, p2+(p1-p2)*2.0/3.0, p2);
+QuadBezier::QuadBezier (const DPair &p0, const DPair &p1, const DPair &p2) {
+	setPoints(p0, p1, p2);
 }
 
 
-Bezier::Bezier (const DPair &p0, const DPair &p1, const DPair &p2, const DPair &p3) {
+void QuadBezier::setPoints(const DPair &p0, const DPair &p1, const DPair &p2) {
+	_points[0] = p0;
+	_points[1] = p1;
+	_points[2] = p2;
+}
+
+
+/** Returns the value (curve point) at t. */
+DPair QuadBezier::valueAt (double t) const {
+	const double s = 1-t;
+	return _points[0]*s*s + _points[1]*2.0*s*t + _points[2]*t*t;
+}
+
+
+/** Returns the value of the first derivative of the curve at t. */
+DPair QuadBezier::derivativeAt (double t) const {
+	return _points[0]*(2*t-2) + _points[1]*(2-4*t) + _points[2]*(2*t);
+}
+
+
+/** Returns the arc length of the curve from 0 to t. */
+double QuadBezier::arclen (double t) const {
+	return math::integral(0, t, 20, [this](double t) -> double {
+		DPair deriv = derivativeAt(t);
+		return sqrt(deriv.x()*deriv.x() + deriv.y()*deriv.y());
+	});
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+
+CubicBezier::CubicBezier () {
+	_points[0] = _points[1] = _points[2] = _points[3] = DPair(0, 0);
+}
+
+
+CubicBezier::CubicBezier (const DPair &p0, const DPair &p1, const DPair &p2, const DPair &p3) {
 	setPoints(p0, p1, p2, p3);
 }
 
@@ -45,7 +82,7 @@
  *  @param[in] source original curve to be clipped
  *  @param[in] t0 'time' parameter \f$\in[0,1]\f$ of source curve where the subcurve starts
  *  @param[in] t1 'time' parameter \f$\in[0,1]\f$ of source curve where the subcurve ends */
-Bezier::Bezier (const Bezier &source, double t0, double t1) {
+CubicBezier::CubicBezier (const CubicBezier &source, double t0, double t1) {
 	if (t0 == t1)
 		_points[0] = _points[1] = _points[2] = _points[3] = source.valueAt(t0);
 	else {
@@ -56,7 +93,7 @@
 		else if (t1 == 1)
 			source.subdivide(t0, nullptr, this);
 		else {
-			Bezier subcurve;
+			CubicBezier subcurve;
 			source.subdivide(t0, nullptr, &subcurve);
 			subcurve.subdivide((t1-t0)/(1-t0), this, nullptr);
 		}
@@ -64,7 +101,16 @@
 }
 
 
-void Bezier::setPoints(const DPair &p0, const DPair &p1, const DPair &p2, const DPair &p3) {
+/** Creates a cubic Bézier from a quadratic one. */
+CubicBezier::CubicBezier (const QuadBezier &qbezier) {
+	const DPair &p0 = qbezier.point(0);
+	const DPair &p1 = qbezier.point(1);
+	const DPair &p2 = qbezier.point(2);
+	setPoints(p0, p0+(p1-p0)*2.0/3.0, p2+(p1-p2)*2.0/3.0, p2);
+}
+
+
+void CubicBezier::setPoints(const DPair &p0, const DPair &p1, const DPair &p2, const DPair &p3) {
 	_points[0] = p0;
 	_points[1] = p1;
 	_points[2] = p2;
@@ -72,13 +118,13 @@
 }
 
 
-void Bezier::reverse() {
+void CubicBezier::reverse() {
 	swap(_points[0], _points[3]);
 	swap(_points[1], _points[2]);
 }
 
 
-DPair Bezier::valueAt (double t) const {
+DPair CubicBezier::valueAt (double t) const {
 	const double s = 1-t;
 	return _points[0]*s*s*s + _points[1]*3.0*s*s*t + _points[2]*3.0*s*t*t + _points[3]*t*t*t;
 }
@@ -85,7 +131,7 @@
 
 
 /** Returns a value of the Bézier curve's blossom representation. */
-DPair Bezier::blossomValue (double u, double v, double w) const {
+DPair CubicBezier::blossomValue (double u, double v, double w) const {
 	const double uv = u*v;
 	const double uw = u*w;
 	const double vw = v*w;
@@ -98,7 +144,7 @@
 
 
 /** Splits the curve at t into two sub-curves. */
-void Bezier::subdivide (double t, Bezier *bezier1, Bezier *bezier2) const {
+void CubicBezier::subdivide (double t, CubicBezier *bezier1, CubicBezier *bezier2) const {
 	const double s = 1-t;
 	DPair p01   = _points[0]*s + _points[1]*t;
 	DPair p12   = _points[1]*s + _points[2]*t;
@@ -121,7 +167,7 @@
  *  @param[out] p the resulting sequence of points defining the start/end points of the line segments
  *  @param[out] t corresponding curve parameters of the approximated points p: \f$ b(t_i)=p_i \f$
  *  @return number of points in vector p */
-int Bezier::approximate (double delta, std::vector<DPair> &p, vector<double> *t) const {
+int CubicBezier::approximate (double delta, std::vector<DPair> &p, vector<double> *t) const {
 	p.push_back(_points[0]);
 	if (t)
 		t->push_back(0);
@@ -129,7 +175,7 @@
 }
 
 
-int Bezier::approximate (double delta, double t0, double t1, vector<DPair> &p, vector<double> *t) const {
+int CubicBezier::approximate (double delta, double t0, double t1, vector<DPair> &p, vector<double> *t) const {
 	// compute distance of adjacent control points
 	const double l01 = (_points[1]-_points[0]).length();
 	const double l12 = (_points[2]-_points[1]).length();
@@ -142,13 +188,13 @@
 	}
 	else {
 		// subdivide curve at b(0.5) and approximate the resulting parts separately
-		Bezier b1, b2;
+		CubicBezier b1, b2;
 		subdivide(0.5, &b1, &b2);
 		double tmid = (t0+t1)/2;
 		b1.approximate(delta, t0, tmid, p, t);
 		b2.approximate(delta, tmid, t1, p, t);
 	}
-	return p.size();
+	return static_cast<int>(p.size());
 }
 
 
@@ -188,7 +234,7 @@
  *  @param[in] delta deviation tolerance
  *  @param[in] p control points of the reduced curve
  *  @return degree of the reduced curve */
-int Bezier::reduceDegree (double delta, vector<DPair> &p) const {
+int CubicBezier::reduceDegree (double delta, vector<DPair> &p) const {
 	p.clear();
 	if (near(_points[0], _points[1], delta) && near(_points[0], _points[2], delta) && near(_points[0], _points[3], delta))
 		p.push_back(_points[0]);
@@ -206,10 +252,92 @@
 		for (int i=0; i < 4; i++)
 			p[i] = _points[i];
 	}
-	return p.size()-1;
+	return static_cast<int>(p.size()-1);
 }
 
 
+/** Approximates the cubic Bézier curve by a sequence of quadratic ones.
+ *  @param[in] precision specifies the precision of the approximation
+ *  @return map containing the split parameters t_n together with the qudratic curves */
+vector<QuadBezier> CubicBezier::toQuadBeziers (double precision, vector<double> *splitParams) const {
+	vector<QuadBezier> qbeziers;
+	toQuadBeziers(0, 1, precision, qbeziers, splitParams);
+	return qbeziers;
+}
+
+
+/** Returns the "mid-point approximation" of this cubic Bézier. */
+QuadBezier CubicBezier::midpointApproximation () const {
+	 DPair p0 = (_points[1]*3.0 - _points[0])/2.0;
+	 DPair p1 = (_points[2]*3.0 - _points[3])/2.0;
+	 return QuadBezier(_points[0], (p0+p1)/2.0, _points[3]);
+}
+
+
+/** Approximates a segment of a cubic Bézier curve by a sequence of quadratic curves.
+ *  The quadratic segments are computed by adaptive subdivision of the cubic curve
+ *  as described at http://www.caffeineowl.com/graphics/2d/vectorial/cubic2quad01.html
+ *  @param[in] t0 curve parameter of the segment's start point
+ *  @param[in] t1 curve parameter of the segment's end point
+ *  @param[in] precision maximum allowed distance between the curve points b(t) and the
+ *  	corresponding approximated point c(t) on the quadratic curve
+ *  @param[out] qbeziers the resulting quadratic curves sorted in ascending order by their split points
+ *  @param[out] startParams the start parameters t[k] of the curves qbeziers[k] relative to *this. */
+void CubicBezier::toQuadBeziers (double t0, double t1, double precision, vector<QuadBezier> &qbeziers, vector<double> *startParams) const {
+	// If -p0+3p1-3p2+p3 = 0, the degree of the curve is <= 2 and it's not necessary do any approximation.
+	// In this case, the control point of the quadratic Bézier curve is (-p0+3p1)/2 = (3p2-p3)/2.
+	// Otherwise, the distance d between q1:=(-p0+3p1)/2 and q2:=(3p2-p3)/2 is != 0.
+	// Now we compute the quadratic Bézier with start point p0, end point p3, and control point (q1+q2)/2,
+	// the "mid-point approximation" (MPA) of b.
+	// The maximal distance between the points of the original curve b and the corresponding ones
+	// on the MPA is d*sqrt(3)/18. The same computations can be done for the cubic curves we get
+	// when subdividing b at a parameter t. The maximal distance of these curves to their MPA
+	// is t^3*d*sqrt(3)/18.
+	// Based on the formula for this distance we compute the split point tmax for a given precision
+	// and check 3 cases:
+	// * tmax >= 1:   curve is quadratic, return MPA of b
+	// * tmax >= 0.5: split b at t=0.5, return the MPAs of both segments
+	// * tmax < 0.5:  split b at tmax and 1-tmax, return the MPAs of the first and third segment,
+	//                recurse the algorithm for the middle segment
+	DPair q1 = (_points[1]*3.0 - _points[0])/2.0;
+	DPair q2 = (_points[2]*3.0 - _points[3])/2.0;
+	double dist = (q2-q1).length();
+	double tmax3 = 18.0/sqrt(3.0)*precision/dist;  // the cube of tmax
+	if (tmax3 >= 1.0) {
+		// curve is already quadratic, no subdivision necessary, return MPA
+		qbeziers.emplace_back(QuadBezier(_points[0], (q1+q2)/2.0, _points[3]));
+		if (startParams)
+			startParams->push_back(t0);
+	}
+	else if (tmax3 >= 0.125) { // tmax >= 0.5
+		// split the curve at t=0.5 and compute the MPA for both segments
+		CubicBezier cbezier1, cbezier2;
+		subdivide(0.5, &cbezier1, &cbezier2);
+		qbeziers.emplace_back(cbezier1.midpointApproximation());
+		qbeziers.emplace_back(cbezier2.midpointApproximation());
+		if (startParams) {
+			startParams->push_back(t0);
+			startParams->push_back((t0+t1)/2);
+		}
+	}
+	else { // tmax < 0.5
+		double tmax = cbrt(tmax3);
+		double smax = 1.0-tmax;
+		double dt = t1-t0;
+		// first segment can be approximated by its MPA
+		qbeziers.emplace_back(CubicBezier(*this, 0, tmax).midpointApproximation());
+		if (startParams)
+			startParams->push_back(t0);
+		// recurse for middle segment
+		CubicBezier(*this, tmax, smax).toQuadBeziers(t0+tmax*dt, t0+smax*dt, precision, qbeziers, startParams);
+		// third segment can be approximated by its MPA
+		qbeziers.emplace_back(CubicBezier(*this, smax, 1).midpointApproximation());
+		if (startParams)
+			startParams->push_back(smax);
+	}
+}
+
+
 /** Try to solve the quadratic equation ax^2 + bx + c = 0. */
 static bool solve_quadratic_equation (double a, double b, double c, double &x1, double &x2) {
 	if (a == 0) {
@@ -231,7 +359,7 @@
 
 
 /** Returns a tight bounding box parallel to the x- and y-axis. */
-BoundingBox Bezier::getBBox () const {
+BoundingBox CubicBezier::getBBox () const {
 	BoundingBox bbox;
 	// coefficients of the derivative
 	DPair pa = _points[3] - _points[2]*3.0 + _points[1]*3.0 - _points[0];
@@ -258,8 +386,9 @@
 }
 
 
-Bezier& Bezier::transform (const Matrix &matrix) {
-	for (int i=0; i < 4; i++)
-		_points[i] = matrix*_points[i];
+CubicBezier& CubicBezier::transform (const Matrix &matrix) {
+	for (auto &point : _points)
+		point = matrix * point;
 	return *this;
 }
+

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bezier.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Bezier.hpp                                                           **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -27,25 +27,45 @@
 
 class Matrix;
 
-class Bezier {
+class QuadBezier {
 	public:
-		Bezier ();
-		Bezier (const DPair &p0, const DPair &p1, const DPair &p2);
-		Bezier (const DPair &p0, const DPair &p1, const DPair &p2, const DPair &p3);
-		Bezier (const Bezier &source, double t0, double t1);
+		QuadBezier ();
+		QuadBezier (const DPair &p0, const DPair &p1, const DPair &p2);
+		void setPoints (const DPair &p0, const DPair &p1, const DPair &p2);
+		const DPair& point (int i) const {return _points[i];}
+		DPair valueAt (double t) const;
+		DPair derivativeAt (double t) const;
+		double arclen (double t=1.0) const;
+
+	private:
+		DPair _points[3];
+};
+
+
+class CubicBezier {
+	public:
+		CubicBezier ();
+		//CubicBezier (const DPair &p0, const DPair &p1, const DPair &p2);
+		CubicBezier (const DPair &p0, const DPair &p1, const DPair &p2, const DPair &p3);
+		CubicBezier (double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3);
+		CubicBezier (const CubicBezier &source, double t0, double t1);
+		explicit CubicBezier (const QuadBezier &qbezier);
 		void setPoints (const DPair &p0, const DPair &p1, const DPair &p2, const DPair &p3);
 		void reverse ();
 		DPair valueAt (double t) const;
 		DPair blossomValue (double u, double v, double w) const;
-		void subdivide (double t, Bezier *bezier1, Bezier *bezier2) const;
-		Bezier& transform (const Matrix &matrix);
+		void subdivide (double t, CubicBezier *bezier1, CubicBezier *bezier2) const;
+		CubicBezier& transform (const Matrix &matrix);
 		int approximate (double delta, std::vector<DPair> &p, std::vector<double> *t=nullptr) const;
 		const DPair& point (int i) const {return _points[i];}
 		int reduceDegree (double delta, std::vector<DPair> &p) const;
+		std::vector<QuadBezier> toQuadBeziers (double delta, std::vector<double> *startParams=nullptr) const;
 		BoundingBox getBBox () const;
 
 	protected:
 		int approximate (double delta, double t0, double t1, std::vector<DPair> &p, std::vector<double> *t) const;
+		void toQuadBeziers (double t0, double t1, double precision, std::vector<QuadBezier> &qbeziers, std::vector<double> *startParams) const;
+		QuadBezier midpointApproximation () const;
 
 	private:
 		DPair _points[4];

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** BgColorSpecialHandler.cpp                                            **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BgColorSpecialHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** BgColorSpecialHandler.hpp                                            **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Bitmap.cpp                                                           **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Bitmap.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Bitmap.hpp                                                           **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** BoundingBox.cpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/BoundingBox.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** BoundingBox.hpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** CLCommandLine.cpp                                                    **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLCommandLine.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** CLCommandLine.hpp                                                    **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLOption.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLOption.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CLOption.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** CLOption.hpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** CMap.cpp                                                             **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMap.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** CMap.hpp                                                             **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** CMapManager.cpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapManager.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** CMapManager.hpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** CMapReader.cpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CMapReader.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** CMapReader.hpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Calculator.cpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Calculator.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Calculator.hpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** CharMapID.cpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CharMapID.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** CharMapID.hpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Character.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Character.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Character.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Character.hpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Color.cpp                                                            **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Color.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Color.hpp                                                            **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** ColorSpecialHandler.cpp                                              **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ColorSpecialHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** ColorSpecialHandler.hpp                                              **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CommandLine.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CommandLine.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/CommandLine.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 // It is part of the dvisvgm package and published under the terms
 // of the GNU General Public License version 3, or (at your option) any later version.
 // See file COPYING for further details.
-// Copyright (C) 2016-2022 Martin Gieseking <martin.gieseking at uos.de>
+// Copyright (C) 2016-2023 Martin Gieseking <martin.gieseking at uos.de>
 
 #ifndef COMMANDLINE_HPP
 #define COMMANDLINE_HPP
@@ -20,7 +20,7 @@
 		CommandLine () : CL::CommandLine(
 			"This program converts DVI files, as created by TeX/LaTeX, as well as\nEPS and PDF files to the XML-based scalable vector graphics format SVG.",
 			"[options] dvifile\n--eps [options] epsfile\n--pdf [options] pdffile",
-			"Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>"
+			"Copyright (C) 2005-2023 Martin Gieseking <martin.gieseking at uos.de>"
 		) {}
 
 		CommandLine (int argc, char **argv) : CommandLine() {
@@ -35,6 +35,8 @@
 		Option colorOpt {"color", '\0', "colorize messages"};
 		Option colornamesOpt {"colornames", '\0', "prefer color names to RGB values if possible"};
 		Option commentsOpt {"comments", '\0', "add comments with additional information"};
+		Option debugGlyphsOpt {"debug-glyphs", '\0', "create PS files for all glyphs converted to TTF"};
+		Option embedBitmapsOpt {"embed-bitmaps", '\0', "prevent references to external bitmap files"};
 		Option epsOpt {"eps", 'E', "convert EPS file to SVG"};
 		Option exactBboxOpt {"exact-bbox", 'e', "compute exact glyph bounding boxes"};
 		TypedOption<std::string, Option::ArgMode::REQUIRED> fontFormatOpt {"font-format", 'f', "format", "svg", "set file format of embedded fonts"};
@@ -106,6 +108,7 @@
 #endif
 			{&colornamesOpt, 1},
 			{&commentsOpt, 1},
+			{&embedBitmapsOpt, 1},
 #if !defined(DISABLE_WOFF)
 			{&fontFormatOpt, 1},
 #endif
@@ -135,6 +138,9 @@
 			{&transformOpt, 2},
 			{&zoomOpt, 2},
 			{&cacheOpt, 3},
+#if defined(TTFDEBUG)
+			{&debugGlyphsOpt, 3},
+#endif
 			{&exactBboxOpt, 3},
 			{&keepOpt, 3},
 #if !defined(HAVE_LIBGS) && !defined(DISABLE_GS)

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** DLLoader.cpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DLLoader.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** DLLoader.hpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIActions.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIActions.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIActions.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** DVIActions.hpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** DVIReader.cpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -595,6 +595,20 @@
 }
 
 
+/** Returns the width of a string typed with a given font.
+ *  @param[in] glyphs glyphs of the string
+ *  @param[in] font assigned font
+ *  @return width in bp units */
+static double string_width (const vector<uint16_t> &glyphs, const Font *font) {
+	double width=0;
+	if (auto nfont = font_cast<const NativeFont*>(font)) {
+		for (auto glyph: glyphs)
+			width += nfont->hAdvance(Character(Character::INDEX, glyph));
+	}
+	return width;
+}
+
+
 /** XDV extension: prints an array of characters where each character
  *  can take independent x and y coordinates.
  *  parameters: w[4] n[2] (dx,dy)[(4+4)n] glyphs[2n] */
@@ -602,11 +616,14 @@
 	vector<double> dx, dy;
 	vector<uint16_t> glyphs;
 	double width = putGlyphArray(false, dx, dy, glyphs);
-	if (Font *font = FontManager::instance().getFont(_currFontNum))
-		dviXGlyphArray(dx, dy, glyphs, *font);
-	else
+	Font *font = FontManager::instance().getFont(_currFontNum);
+	if (!font)
 		throw DVIException("missing setfont prior to xglypharray");
-	moveRight(width, MoveMode::SETCHAR);
+	dviXGlyphArray(dx, dy, glyphs, *font);
+	double diff = abs(string_width(glyphs, font) - width);
+	// if the given width differs from the actual width of the string,
+	// we must force a position change to prevent misalignments
+	moveRight(width, diff < 0.2 ? MoveMode::SETCHAR : MoveMode::CHANGEPOS);
 }
 
 
@@ -617,11 +634,14 @@
 	vector<double> dx, dy;
 	vector<uint16_t> glyphs;
 	double width = putGlyphArray(true, dx, dy, glyphs);
-	if (Font *font = FontManager::instance().getFont(_currFontNum))
-		dviXGlyphString(dx, glyphs, *font);
-	else
+	Font *font = FontManager::instance().getFont(_currFontNum);
+	if (!font)
 		throw DVIException("missing setfont prior to xglyphstring");
-	moveRight(width, MoveMode::SETCHAR);
+	dviXGlyphString(dx, glyphs, *font);
+	double diff = abs(string_width(glyphs, font) - width);
+	// if the given width differs from the actual width of the string,
+	// we must force a position change to prevent misalignments
+	moveRight(width, diff < 0.2 ? MoveMode::SETCHAR : MoveMode::CHANGEPOS);
 }
 
 
@@ -639,11 +659,14 @@
 	vector<double> x, y;
 	vector<uint16_t> glyphs;
 	double width = putGlyphArray(false, x, y, glyphs);
-	if (Font *font = FontManager::instance().getFont(_currFontNum))
-		dviXTextAndGlyphs(x, y, chars, glyphs, *font);
-	else
+	Font *font = FontManager::instance().getFont(_currFontNum);
+	if (!font)
 		throw DVIException("missing setfont prior to xtextandglyphs");
-	moveRight(width, MoveMode::SETCHAR);
+	dviXTextAndGlyphs(x, y, chars, glyphs, *font);
+	double diff = abs(string_width(glyphs, font) - width);
+	// if the given width differs from the actual width of the string,
+	// we must force a position change to prevent misalignments
+	moveRight(width, diff < 0.2 ? MoveMode::SETCHAR : MoveMode::CHANGEPOS);
 }
 
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIReader.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** DVIReader.hpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** DVIToSVG.cpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -120,6 +120,7 @@
 			SVGOptimizer(_svg).execute();
 			embedFonts(_svg.rootNode());
 			bool success = _svg.write(_out.getPageStream(currentPageNumber(), numberOfPages(), hashTriple));
+			_out.finish();
 			string fname = path.shorterAbsoluteOrRelative();
 			if (fname.empty())
 				fname = "<stdout>";
@@ -350,9 +351,7 @@
 	if (!svgElement || !_actions) // no dvi actions => no chars written => no fonts to embed
 		return;
 
-	const DVIToSVGActions *svgActions = static_cast<DVIToSVGActions*>(_actions.get());
-	auto &usedCharsMap = svgActions->getUsedChars();
-
+	auto &usedCharsMap = FontManager::instance().getUsedChars();
 	collect_chars(usedCharsMap);
 
 	GlyphTracerMessages messages;
@@ -374,7 +373,7 @@
 		else
 			Message::wstream(true) << "can't embed font '" << font->name() << "'\n";
 	}
-	_svg.appendFontStyles(svgActions->getUsedFonts());
+	_svg.appendFontStyles(FontManager::instance().getUsedFonts());
 }
 
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVG.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** DVIToSVG.hpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** DVIToSVGActions.cpp                                                  **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -33,8 +33,7 @@
 
 
 void DVIToSVGActions::reset() {
-	_usedChars.clear();
-	_usedFonts.clear();
+	FontManager::instance().resetUsedChars();
 	_bbox = BoundingBox();
 	_currentFontNum = -1;
 	_bgcolor = Color::TRANSPARENT;
@@ -93,10 +92,7 @@
 	// record font names and chars. The various font sizes can be ignored here.
 	// For a given font object, Font::uniqueFont() returns the same unique font object for
 	// all fonts with the same name.
-	_usedChars[SVGTree::USE_FONTS ? font.uniqueFont() : &font].insert(c);
-
-	// However, we record all required fonts
-	_usedFonts.insert(&font);
+	FontManager::instance().addUsedChar(font, c);
 	_svg.appendChar(c, x, y);
 
 	static string fontname;
@@ -216,10 +212,10 @@
  *  @param[in] c array with 10 components representing \\count0 ... \\count9. c[0] contains the
  *               current (printed) page number (may differ from page count) */
 void DVIToSVGActions::beginPage (unsigned pageno, const vector<int32_t>&) {
-	SpecialManager::instance().notifyBeginPage(pageno, *this);
 	_svg.newPage(++_pageCount);
 	_bbox = BoundingBox();  // clear bounding box
 	_boxes.clear();
+	SpecialManager::instance().notifyBeginPage(pageno, *this);
 }
 
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DVIToSVGActions.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** DVIToSVGActions.hpp                                                  **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -37,8 +37,6 @@
 class XMLNode;
 
 class DVIToSVGActions : public DVIActions, public SpecialActions {
-	using CharMap = std::unordered_map<const Font*, std::set<int>>;
-	using FontSet = std::unordered_set<const Font*>;
 	using BoxMap = std::unordered_map<std::string,BoundingBox>;
 
 	public:
@@ -80,8 +78,6 @@
 		void embed (const DPair &p, double r=0) override;
 		FilePath getSVGFilePath (unsigned pageno) const override;
 		std::string getBBoxFormatString () const override;
-		CharMap& getUsedChars () const        {return _usedChars;}
-		const FontSet& getUsedFonts () const  {return _usedFonts;}
 		void setDVIReader (BasicDVIReader &r) {_dvireader = &r;}
 
 	private:
@@ -90,8 +86,6 @@
 		BoundingBox _bbox;
 		int _pageCount=0;
 		int _currentFontNum=-1;
-		mutable CharMap _usedChars;
-		FontSet _usedFonts;
 		Color _bgcolor=Color::TRANSPARENT;
 		BoxMap _boxes;
 		bool _outputLocked=false;

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Directory.cpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Directory.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Directory.hpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** DvisvgmSpecialHandler.cpp                                            **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -23,6 +23,7 @@
 #include <utility>
 #include "Calculator.hpp"
 #include "DvisvgmSpecialHandler.hpp"
+#include "GraphicsPathParser.hpp"
 #include "InputBuffer.hpp"
 #include "InputReader.hpp"
 #include "Length.hpp"
@@ -35,10 +36,60 @@
 using namespace std;
 
 
-DvisvgmSpecialHandler::DvisvgmSpecialHandler () :
-	_currentMacro(_macros.end()),
-	_defsParser(&SVGTree::appendToDefs, &SVGTree::pushDefsContext, &SVGTree::popDefsContext),
-	_pageParser(&SVGTree::appendToPage, &SVGTree::pushPageContext, &SVGTree::popPageContext)
+void SVGParser::assign (SVGTree &svg, Append append, PushContext pushContext, PopContext popContext) {
+	_svg = &svg;
+	_append = append;
+	_pushContext = pushContext;
+	_popContext = popContext;
+	setRootElement(nullptr);
+}
+
+
+XMLElement* SVGParser::openElement (const std::string &tag) {
+	XMLElement *elem = XMLParser::openElement(tag);
+	if (elem->name() == "path" || elem->name() == "svg:path") {
+		if (const char *d = elem->getAttributeValue("d")) {
+			try {
+				// parse and reformat path definition
+				auto path = GraphicsPathParser<double>().parse(d);
+				ostringstream oss;
+				path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);
+				elem->addAttribute("d", oss.str());
+			}
+			catch (const GraphicsPathParserException &e) {
+				throw XMLParserException(string("error in path data: ")+e.what());
+			}
+		}
+	}
+	return elem;
+}
+
+
+void SVGParser::appendNode (unique_ptr<XMLNode> node) {
+	(_svg->*_append)(std::move(node));
+}
+
+
+XMLElement* SVGParser::finishPushContext (unique_ptr<XMLElement> elem) {
+	unique_ptr<SVGElement> svgElement{static_cast<SVGElement*>(elem.release())};
+	XMLElement *elemPtr = svgElement.get();
+	(_svg->*_pushContext)(std::move(svgElement));
+	return elemPtr;
+}
+
+
+void SVGParser::finishPopContext () {
+	(_svg->*_popContext)();
+}
+
+
+XMLElement* SVGParser::createElementPtr (std::string name) const {
+	return new SVGElement(std::move(name));
+}
+
+///////////////////////////////////////////////////////////////////////////
+
+DvisvgmSpecialHandler::DvisvgmSpecialHandler () : _currentMacro(_macros.end())
 {
 }
 
@@ -232,7 +283,7 @@
 		if (!xml.empty()) {
 			evaluate_expressions(xml, actions);
 			expand_constants(xml, actions);
-			_pageParser.parse(xml, actions.svgTree());
+			_pageParser.parse(std::move(xml));
 		}
 	}
 }
@@ -244,7 +295,7 @@
 		if (!xml.empty()) {
 			evaluate_expressions(xml, actions);
 			expand_constants(xml, actions);
-			_defsParser.parse(xml, actions.svgTree());
+			_defsParser.parse(std::move(xml));
 		}
 	}
 }
@@ -276,9 +327,9 @@
 		if ((type == 'P' || type == 'D') && !def.empty()) {
 			expand_constants(def, actions);
 			if (type == 'P')
-				_pageParser.parse(def, actions.svgTree());
+				_pageParser.parse(std::move(def));
 			else {          // type == 'D'
-				_defsParser.parse(def, actions.svgTree());
+				_defsParser.parse(std::move(def));
 				type = 'L';  // locked
 			}
 		}
@@ -413,9 +464,16 @@
 }
 
 
+void DvisvgmSpecialHandler::dviBeginPage (unsigned, SpecialActions &actions) {
+	SVGTree &svg = actions.svgTree();
+	_defsParser.assign(svg, &SVGTree::appendToDefs, &SVGTree::pushDefsContext, &SVGTree::popDefsContext);
+	_pageParser.assign(svg, &SVGTree::appendToPage, &SVGTree::pushPageContext, &SVGTree::popPageContext);
+}
+
+
 void DvisvgmSpecialHandler::dviEndPage (unsigned, SpecialActions &actions) {
-	_defsParser.finish(actions.svgTree());
-	_pageParser.finish(actions.svgTree());
+	_defsParser.finish();
+	_pageParser.finish();
 	actions.bbox().unlock();
 	for (auto &strvecpair : _macros) {
 		StringVector &vec = strvecpair.second;

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/DvisvgmSpecialHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** DvisvgmSpecialHandler.hpp                                            **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -43,6 +43,30 @@
 #pragma pointers_to_members(full_generality, single_inheritance)
 #endif
 
+class SVGParser : public XMLParser {
+	using Append = void (SVGTree::*)(std::unique_ptr<XMLNode> node);
+	using PushContext = void (SVGTree::*)(std::unique_ptr<SVGElement> elem);
+	using PopContext = void (SVGTree::*)();
+
+	public:
+		SVGParser () : XMLParser() {}
+		void assign (SVGTree &svg, Append append, PushContext pushContext, PopContext popContext);
+
+	protected:
+		XMLElement* openElement (const std::string &tag) override;
+		void appendNode (std::unique_ptr<XMLNode> node) override;
+		XMLElement* finishPushContext (std::unique_ptr<XMLElement> elem) override;
+		void finishPopContext () override;
+		XMLElement* createElementPtr (std::string name) const override;
+
+	private:
+		SVGTree *_svg=nullptr;
+		Append _append=nullptr;
+		PushContext _pushContext=nullptr;
+		PopContext _popContext=nullptr;
+};
+
+
 class DvisvgmSpecialHandler : public SpecialHandler {
 	using StringVector = std::vector<std::string>;
 	using MacroMap = std::unordered_map<std::string, StringVector>;
@@ -69,6 +93,7 @@
 		void processBBox (InputReader &ir, SpecialActions &actions);
 		void processImg (InputReader &ir, SpecialActions &actions);
 		void dviPreprocessingFinished () override;
+		void dviBeginPage (unsigned pageno, SpecialActions &actions) override;
 		void dviEndPage (unsigned pageno, SpecialActions &actions) override;
 
 	private:
@@ -75,8 +100,8 @@
 		MacroMap _macros;
 		MacroMap::iterator _currentMacro;
 		int _nestingLevel=0;    ///< nesting depth of rawset specials
-		XMLParser _defsParser;  ///< parses XML added by 'rawdef' specials
-		XMLParser _pageParser;  ///< parses XML added by 'raw' specials
+		SVGParser _defsParser;  ///< parses XML added by 'rawdef' specials
+		SVGParser _pageParser;  ///< parses XML added by 'raw' specials
 };
 
 #endif

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSFile.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSFile.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSFile.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** EPSFile.cpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSFile.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSFile.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSFile.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** EPSFile.hpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSToSVG.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSToSVG.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EPSToSVG.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** EPSToSVG.hpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EllipticalArc.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EllipticalArc.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EllipticalArc.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** EllipticalArc.cpp                                                    **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -156,7 +156,7 @@
 /** Approximates an arc of the unit circle by a single cubic Bézier curve.
  *  @param[in] phi start angle of the arc in radians
  *  @param[in] delta length of the arc */
-static Bezier approx_unit_arc (double phi, double delta) {
+static CubicBezier approx_unit_arc (double phi, double delta) {
 	double c = 0.551915024494;  // see http://spencermortensen.com/articles/bezier-circle
 	if (abs(delta + math::HALF_PI) < 1e-7)
 		c = -c;
@@ -166,13 +166,13 @@
 	DPair p4(cos(phi+delta), sin(phi+delta));
 	DPair p2(p1.x()-c*p1.y(), p1.y()+c*p1.x());
 	DPair p3(p4.x()+c*p4.y(), p4.y()-c*p4.x());
-	return Bezier(p1, p2, p3, p4);
+	return CubicBezier(p1, p2, p3, p4);
 }
 
 
 /** Approximates the arc by a sequence of cubic Bézier curves. */
-vector<Bezier> EllipticalArc::approximate () const {
-	vector<Bezier> beziers;
+vector<CubicBezier> EllipticalArc::approximate () const {
+	vector<CubicBezier> beziers;
 	if (_startPoint != _endPoint) {
 		if (isStraightLine()) {
 			DPair dir = (_endPoint - _startPoint);

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EllipticalArc.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EllipticalArc.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EllipticalArc.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** EllipticalArc.hpp                                                    **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -47,7 +47,7 @@
 		bool isStraightLine () const {return _rx < 1e-7 || _ry < 1e-7;}
 		BoundingBox getBBox () const;
 		void transform (const Matrix &matrix);
-		std::vector<Bezier> approximate () const;
+		std::vector<CubicBezier> approximate () const;
 
 	private:
 		double _rx, _ry;       ///< length of semi-major and semi-minor axes

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** EmSpecialHandler.cpp                                                 **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EmSpecialHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** EmSpecialHandler.hpp                                                 **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** EncFile.cpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/EncFile.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** EncFile.hpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FileFinder.cpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileFinder.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FileFinder.hpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FilePath.cpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FilePath.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FilePath.hpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FileSystem.cpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -135,6 +135,14 @@
 }
 
 
+string FileSystem::ensureSystemSlashes (string path) {
+#ifdef _WIN32
+	std::replace(path.begin(), path.end(), '/', PATHSEP);
+#endif
+	return path;
+}
+
+
 /** Returns the absolute path of the current working directory. */
 string FileSystem::getcwd () {
 	char buf[1024];
@@ -207,12 +215,13 @@
 }
 
 
-/** Returns the path of the temporary folder. */
-string FileSystem::tmpdir () {
+/** Returns the path of the temporary folder.
+ *  @param[in] inpace if true, don't create a uniquely named subfolder */
+string FileSystem::tmpdir (bool inplace) {
 	if (_tmpdir.path().empty()) {
 		string basedir;
 		if (!TMPDIR.empty())
-			basedir = TMPDIR;
+			basedir = ensureForwardSlashes(TMPDIR);
 		else {
 #ifdef _WIN32
 			char buf[MAX_PATH];
@@ -226,10 +235,14 @@
 			else
 				basedir = "/tmp";
 #endif
-			if (basedir.back() == '/')
-				basedir.pop_back();
 		}
-		_tmpdir = TemporaryDirectory(basedir, PROGRAM_NAME);
+		if (basedir.length() > 2 && string(basedir.end()-2, basedir.end()) == "//") {
+			inplace = true;
+			basedir.pop_back();
+		}
+		if (basedir.front() != '/' && basedir.back() == '/')
+			basedir.pop_back();
+		_tmpdir = TemporaryDirectory(basedir, PROGRAM_NAME, inplace);
 	}
 	return _tmpdir.path();
 }
@@ -380,27 +393,35 @@
 }
 
 
-/** Creates a temporary directory in a given folder.
+/** Creates a temporary directory in a given folder or treats the given folder as temporary directory.
  *  @param[in] folder folder path in which the directory is to be created
- *  @param[in] prefix initial string of the directory name */
-FileSystem::TemporaryDirectory::TemporaryDirectory (const std::string &folder, string prefix) {
-	using namespace std::chrono;
-	auto now = system_clock::now().time_since_epoch();
-	auto now_ms = duration_cast<milliseconds>(now).count();
-	auto hash = XXH64HashFunction(to_string(now_ms)).digestValue();
-	if (!prefix.empty() && prefix.back() != '-')
-		prefix += "-";
-	for (int i=0; i < 10 && _path.empty(); i++) {
-		hash++;
-		stringstream oss;
-		oss << folder << '/' << prefix << hex << hash;
-		if (exists(oss.str()))
-			continue;
-		if (s_mkdir(oss.str()))
-			_path = oss.str() + "/";
-		else
-			break;
+ *  @param[in] prefix initial string of the directory name
+ *  @param[in] inplace if true, 'folder' is treated as temporary directory and no subfolder is created */
+FileSystem::TemporaryDirectory::TemporaryDirectory (const std::string &folder, string prefix, bool inplace) {
+	if (inplace) {
+		_path = folder;
+		if (!_path.empty() && _path.back() != '/')
+			_path.push_back('/');
 	}
+	else {
+		using namespace std::chrono;
+		auto now = system_clock::now().time_since_epoch();
+		auto now_ms = duration_cast<milliseconds>(now).count();
+		auto hash = XXH64HashFunction(to_string(now_ms)).digestValue();
+		if (!prefix.empty() && prefix.back() != '-')
+			prefix.push_back('-');
+		for (int i = 0; i < 10 && _path.empty(); i++) {
+			hash++;
+			stringstream oss;
+			oss << folder << '/' << prefix << hex << hash;
+			if (exists(oss.str()))
+				continue;
+			if (s_mkdir(oss.str()))
+				_path = oss.str() + "/";
+			else
+				break;
+		}
+	}
 }
 
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FileSystem.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FileSystem.hpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -28,7 +28,7 @@
 	class TemporaryDirectory {
 		friend class FileSystem;
 		public:
-			TemporaryDirectory (const std::string &folder, std::string prefix);
+			TemporaryDirectory (const std::string &folder, std::string prefix, bool inplace=false);
 			TemporaryDirectory (TemporaryDirectory &&tmpdir) =default;
 			~TemporaryDirectory ();
 			TemporaryDirectory& operator = (TemporaryDirectory &&tmpdir) =default;
@@ -47,11 +47,12 @@
 		static bool copy (const std::string &src, const std::string &dest, bool remove_src=false);
 		static uint64_t filesize (const std::string &fname);
 		static std::string ensureForwardSlashes (std::string path);
+		static std::string ensureSystemSlashes (std::string path);
 		static std::string getcwd ();
 #ifdef _WIN32
 		static std::string getcwd (char drive);
 #endif
-		static std::string tmpdir ();
+		static std::string tmpdir (bool inplace=false);
 		static bool chdir (const std::string &dir);
 		static bool exists (const std::string &fname);
 		static bool mkdir (const std::string &dirname);

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FixWord.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FixWord.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FixWord.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FixWord.hpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Font.cpp                                                             **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -18,8 +18,8 @@
 ** along with this program; if not, see <http://www.gnu.org/licenses/>. **
 *************************************************************************/
 
+#include <algorithm>
 #include <cstdlib>
-#include <fstream>
 #include <set>
 #include <sstream>
 #include "CMap.hpp"
@@ -233,7 +233,8 @@
 }
 
 
-int PhysicalFont::hAdvance () const {
+/** Returns the average horizontal advance width in font units. */
+int PhysicalFont::hAverageAdvance () const {
 	if (type() == Type::MF)
 		return 0;
 	FontEngine::instance().setFont(*this);
@@ -241,6 +242,7 @@
 }
 
 
+/** Returns the horizontal advance width of a character in font units. */
 double PhysicalFont::hAdvance (int c) const {
 	if (type() == Type::MF)
 		return unitsPerEm()*charWidth(c)/designSize();
@@ -252,6 +254,7 @@
 }
 
 
+/** Returns the vertical advance width of a character in font units. */
 double PhysicalFont::vAdvance (int c) const {
 	if (type() == Type::MF)
 		return unitsPerEm()*charWidth(c)/designSize();
@@ -279,7 +282,8 @@
 }
 
 
-/** Returns the unscaled ascender of the font in design units. */
+/** Returns the unscaled ascender of the font in design units.
+ *  Positive values denote an extension above the baseline.'*/
 int PhysicalFont::ascent () const {
 	if (type() == Type::MF)
 		return getMetrics() ? getMetrics()->getAscent()*unitsPerEm()/getMetrics()->getQuad() : 0;
@@ -288,7 +292,8 @@
 }
 
 
-/** Returns the unscaled descender of the font in design units. */
+/** Returns the unscaled descender of the font in design units.
+ *  Positive values denote an extension below the baseline. */
 int PhysicalFont::descent () const {
 	if (type() == Type::MF)
 		return getMetrics() ? getMetrics()->getDescent()*unitsPerEm()/getMetrics()->getQuad() : 0;
@@ -315,7 +320,14 @@
 }
 
 
+int PhysicalFont::charIndexByName(const string &charname) const {
+	if (charname.empty())
+		return 0;
+	FontEngine::instance().setFont(*this);
+	return FontEngine::instance().getCharIndexByGlyphName(charname.c_str());
+}
 
+
 /** Extracts the glyph outlines of a given character.
  *  @param[in]  c character code of requested glyph
  *  @param[out] glyph path segments of the glyph outline
@@ -596,7 +608,7 @@
 				return PhysicalFont::Type::OTF;
 			if (ext == "ttf")
 				return PhysicalFont::Type::TTF;
-			if (ext == "pfb")
+			if (ext == "pfb" || ext == "pfa")
 				return PhysicalFont::Type::PFB;
 		}
 	}
@@ -607,7 +619,7 @@
 double NativeFont::charWidth (int c) const {
 	FontEngine::instance().setFont(*this);
 	int upem = FontEngine::instance().getUnitsPerEM();
-	return upem ? (scaledSize()*FontEngine::instance().getAdvance(c)/upem*_style.extend) : 0;
+	return upem ? (scaledSize()*FontEngine::instance().getHAdvance(decodeChar(c))/upem*_style.extend) : 0;
 }
 
 
@@ -621,7 +633,7 @@
 double NativeFont::charHeight (int c) const {
 	FontEngine::instance().setFont(*this);
 	int upem = FontEngine::instance().getUnitsPerEM();
-	return upem ? (scaledSize()*FontEngine::instance().getHeight(Character(Character::INDEX, c))/upem) : 0;
+	return upem ? (scaledSize()*FontEngine::instance().getHeight(decodeChar(c))/upem) : 0;
 }
 
 
@@ -628,10 +640,33 @@
 double NativeFont::charDepth (int c) const {
 	FontEngine::instance().setFont(*this);
 	int upem = FontEngine::instance().getUnitsPerEM();
-	return upem ? (scaledSize()*FontEngine::instance().getDepth(Character(Character::INDEX, c))/upem) : 0;
+	return upem ? (scaledSize()*FontEngine::instance().getDepth(decodeChar(c))/upem) : 0;
 }
 
 
+double NativeFont::hAdvance (Character c) const {
+	FontEngine::instance().setFont(*this);
+	int upem = FontEngine::instance().getUnitsPerEM();
+	return upem ? (scaledSize()*FontEngine::instance().getHAdvance(c)/upem) : 0;
+}
+
+
+double NativeFont::vAdvance (Character c) const {
+	FontEngine::instance().setFont(*this);
+	int upem = FontEngine::instance().getUnitsPerEM();
+	return upem ? (scaledSize()*FontEngine::instance().getVAdvance(c)/upem) : 0;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
+NativeFontImpl::NativeFontImpl (string fname, string fontname, double ptsize)
+	: NativeFont(ptsize, FontStyle(), Color::BLACK), _path(std::move(fname)), _name(std::move(fontname))
+{
+	// plus characters (as appended to subset prefixes) are not allowed in font/family names
+	std::replace(_name.begin(), _name.end(), '+', '-');
+}
+
+
 bool NativeFontImpl::findAndAssignBaseFontMap () {
 	FontEngine &fe = FontEngine::instance();
 	fe.setFont(*this);
@@ -644,15 +679,27 @@
 
 
 Character NativeFontImpl::decodeChar (uint32_t c) const {
-	return Character(Character::INDEX, c);
+	return {Character::INDEX, c};
 }
 
 
 uint32_t NativeFontImpl::unicode (uint32_t c) const {
 	uint32_t ucode = _toUnicodeMap.valueAt(c);
-	return Unicode::charToCodepoint(ucode);
+	return Unicode::charToCodepoint(ucode, true);
 }
 
+
+void NativeFontImpl::mapCharToUnicode (uint32_t c, uint32_t codepoint) {
+	_toUnicodeMap.addRange(c, c, codepoint);
+}
+
+
+bool NativeFontImpl::verticalLayout() const {
+	FontEngine &fe = FontEngine::instance();
+	fe.setFont(*this);
+	return fe.hasVerticalMetrics();
+}
+
 //////////////////////////////////////////////////////////////////////////////
 
 VirtualFontImpl::VirtualFontImpl (const string &name, uint32_t cs, double ds, double ss)

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Font.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Font.hpp                                                             **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -50,7 +50,7 @@
 	double wl, wr, h, d;
 };
 
-class FontVisitor;
+struct FontVisitor;
 
 /** Abstract base for all font classes. */
 class Font {
@@ -124,7 +124,7 @@
 		virtual bool getExactGlyphBox (int c, BoundingBox &bbox, GFGlyphTracer::Callback *cb) const;
 		virtual bool getExactGlyphBox (int c, GlyphMetrics &metrics, bool vertical, GFGlyphTracer::Callback *cb) const;
 		virtual bool isCIDFont () const;
-		virtual int hAdvance () const;
+		virtual int hAverageAdvance () const;
 		virtual std::string familyName () const;
 		virtual std::string styleName () const;
 		virtual double hAdvance (int c) const;
@@ -139,6 +139,7 @@
 		virtual CharMapID getCharMapID () const =0;
 		virtual void setCharMapID (const CharMapID &id) {}
 		virtual Character decodeChar (uint32_t c) const;
+		virtual int charIndexByName (const std::string &charname) const;
 		const char* path () const override;
 		void visit (FontVisitor &visitor) override;
 		void visit (FontVisitor &visitor) const override;
@@ -270,16 +271,20 @@
 		std::unique_ptr<Font> clone (double ds, double sc) const override =0;
 		std::string name () const override;
 		Type type () const override;
-		double designSize () const override  {return _ptsize;}
-		double scaledSize () const override  {return _ptsize;}
+		const NativeFont* uniqueFont () const override   {return this;}
+		double designSize () const override              {return _ptsize;}
+		double scaledSize () const override              {return _ptsize;}
 		double charWidth (int c) const override;
 		double charDepth (int c) const override;
 		double charHeight (int c) const override;
 		double italicCorr (int c) const override;
+		virtual double hAdvance (Character c) const;
+		virtual double vAdvance (Character c) const;
 		const FontMetrics* getMetrics () const override  {return nullptr;}
 		const FontStyle* style () const override         {return &_style;}
 		Color color () const override                    {return _color;}
 		const FontMap::Entry* fontMapEntry () const override {return nullptr;}
+		virtual void mapCharToUnicode (uint32_t c, uint32_t codepoint) =0;
 		static std::string uniqueName (const std::string &path, const FontStyle &style);
 		void visit (FontVisitor &visitor) override;
 		void visit (FontVisitor &visitor) const override;
@@ -305,13 +310,19 @@
 			return std::unique_ptr<NativeFontProxy>(new NativeFontProxy(this , sc, *style(), color()));
 		}
 
-		const Font* uniqueFont () const override          {return _nfont;}
+		const NativeFont* uniqueFont () const override    {return _nfont;}
 		const char* path () const override                {return _nfont->path();}
 		int fontIndex () const override                   {return _nfont->fontIndex();}
 		Character decodeChar (uint32_t c) const override  {return _nfont->decodeChar(c);}
 		uint32_t unicode (uint32_t c) const override      {return _nfont->unicode(c);}
 		CharMapID getCharMapID () const override          {return _nfont->getCharMapID();}
+		bool verticalLayout() const override              {return _nfont->verticalLayout();}
+		std::string name () const override                {return _nfont->name();}
 
+		void mapCharToUnicode (uint32_t c, uint32_t codepoint) override {
+			const_cast<NativeFont*>(_nfont)->mapCharToUnicode(c, codepoint);
+		}
+
 	protected:
 		NativeFontProxy (const NativeFont *nfont, double ptsize, const FontStyle &style, Color color)
 			: NativeFont(ptsize, style, color), _nfont(nfont) {}
@@ -326,6 +337,8 @@
 		NativeFontImpl (std::string fname, int fontIndex, double ptsize, const FontStyle &style, Color color)
 			: NativeFont(ptsize, style, color), _path(std::move(fname)), _fontIndex(fontIndex) {}
 
+		NativeFontImpl (std::string fname, std::string fontname, double ptsize);
+
 		std::unique_ptr<NativeFont> clone (double ptsize, const FontStyle &style, Color color) const override {
 			return std::unique_ptr<NativeFontProxy>(new NativeFontProxy(this, ptsize, style, color));
 		}
@@ -334,18 +347,20 @@
 			return std::unique_ptr<NativeFontProxy>(new NativeFontProxy(this , sc, *style(), color()));
 		}
 
-		const Font* uniqueFont () const override          {return this;}
 		const char* path () const override                {return _path.c_str();}
-		int fontIndex() const override                    {return _fontIndex;}
-		std::string fontFamily () const;
+		int fontIndex () const override                   {return _fontIndex;}
+		std::string name () const override                {return _name.empty() ? NativeFont::name() : _name;}
 		bool findAndAssignBaseFontMap () override;
 		CharMapID getCharMapID () const override          {return CharMapID::NONE;}
 		Character decodeChar (uint32_t c) const override;
 		uint32_t unicode (uint32_t c) const override;
+		bool verticalLayout() const override;
+		void mapCharToUnicode (uint32_t c, uint32_t codepoint) override;
 
 	private:
 		std::string _path;
-		int _fontIndex;
+		std::string _name;
+		int _fontIndex = 0;
 		ToUnicodeMap _toUnicodeMap; ///< maps from char indexes to unicode points
 };
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FontCache.cpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontCache.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FontCache.hpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FontEncoding.cpp                                                     **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEncoding.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FontEncoding.hpp                                                     **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FontEngine.cpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -29,6 +29,7 @@
 #include "Font.hpp"
 #include "FontEngine.hpp"
 #include "FontStyle.hpp"
+#include "fonts/Base14Fonts.hpp"
 #include "Message.hpp"
 #include "utility.hpp"
 
@@ -88,7 +89,19 @@
 bool FontEngine::setFont (const string &fname, int fontindex, const CharMapID &charMapID) {
 	if (_currentFace && FT_Done_Face(_currentFace))
 		Message::estream(true) << "failed to release font\n";
-	if (FT_New_Face(_library, fname.c_str(), fontindex, &_currentFace)) {
+	if (fname.size() <= 6 || fname.substr(0, 6) == "sys://") {
+		if (const MemoryFontData *data = find_base14_font(fname.substr(6))) {
+			FT_Open_Args args;
+			args.flags = FT_OPEN_MEMORY;
+			args.memory_base = reinterpret_cast<const FT_Byte*>(data->data);
+			args.memory_size = FT_Long(data->size);
+			if (FT_Open_Face(_library, &args, fontindex, &_currentFace)) {
+				Message::estream(true) << "can't read memory font " << fname << '\n';
+				return false;
+			}
+		}
+	}
+	else if (FT_New_Face(_library, fname.c_str(), fontindex, &_currentFace)) {
 		Message::estream(true) << "can't read font file " << fname << '\n';
 		return false;
 	}
@@ -115,16 +128,24 @@
 
 bool FontEngine::isCIDFont() const {
 	FT_Bool cid_keyed;
-	return FT_Get_CID_Is_Internally_CID_Keyed(_currentFace, &cid_keyed) == 0 && cid_keyed;
+	return _currentFace && FT_Get_CID_Is_Internally_CID_Keyed(_currentFace, &cid_keyed) == 0 && cid_keyed;
 }
 
 
+/** Returns true if the current font contains vertical layout data. */
+bool FontEngine::hasVerticalMetrics () const {
+	return _currentFace && FT_HAS_VERTICAL(_currentFace);
+}
+
+
 bool FontEngine::setCharMap (const CharMapID &charMapID) {
-	for (int i=0; i < _currentFace->num_charmaps; i++) {
-		FT_CharMap ft_cmap = _currentFace->charmaps[i];
-		if (ft_cmap->platform_id == charMapID.platform_id && ft_cmap->encoding_id == charMapID.encoding_id) {
-			FT_Set_Charmap(_currentFace, ft_cmap);
-			return true;
+	if (_currentFace) {
+		for (int i = 0; i < _currentFace->num_charmaps; i++) {
+			FT_CharMap ft_cmap = _currentFace->charmaps[i];
+			if (ft_cmap->platform_id == charMapID.platform_id && ft_cmap->encoding_id == charMapID.encoding_id) {
+				FT_Set_Charmap(_currentFace, ft_cmap);
+				return true;
+			}
 		}
 	}
 	return false;
@@ -149,22 +170,24 @@
 /** Creates a charmap that maps from the custom character encoding to Unicode.
  *  @return pointer to charmap if it could be created, 0 otherwise */
 unique_ptr<const RangeMap> FontEngine::createCustomToUnicodeMap () {
-	FT_CharMap ftcharmap = _currentFace->charmap;
-	if (FT_Select_Charmap(_currentFace, FT_ENCODING_ADOBE_CUSTOM) != 0)
-		return nullptr;
-	RangeMap gidToCharCodeMap;
-	buildGidToCharCodeMap(gidToCharCodeMap);
-	if (FT_Select_Charmap(_currentFace, FT_ENCODING_UNICODE) != 0)
-		return nullptr;
 	auto charmap = util::make_unique<RangeMap>();
-	FT_UInt gid;  // index of current glyph
-	uint32_t ucCharcode = FT_Get_First_Char(_currentFace, &gid);  // Unicode code point
-	while (gid) {
-		uint32_t customCharcode = gidToCharCodeMap.valueAt(gid);
-		charmap->addRange(customCharcode, customCharcode, ucCharcode);
-		ucCharcode = FT_Get_Next_Char(_currentFace, ucCharcode, &gid);
+	if (_currentFace) {
+		FT_CharMap ftcharmap = _currentFace->charmap;
+		if (FT_Select_Charmap(_currentFace, FT_ENCODING_ADOBE_CUSTOM) != 0)
+			return nullptr;
+		RangeMap gidToCharCodeMap;
+		buildGidToCharCodeMap(gidToCharCodeMap);
+		if (FT_Select_Charmap(_currentFace, FT_ENCODING_UNICODE) != 0)
+			return nullptr;
+		FT_UInt gid;  // index of current glyph
+		uint32_t ucCharcode = FT_Get_First_Char(_currentFace, &gid);  // Unicode code point
+		while (gid) {
+			uint32_t customCharcode = gidToCharCodeMap.valueAt(gid);
+			charmap->addRange(customCharcode, customCharcode, ucCharcode);
+			ucCharcode = FT_Get_Next_Char(_currentFace, ucCharcode, &gid);
+		}
+		FT_Set_Charmap(_currentFace, ftcharmap);
 	}
-	FT_Set_Charmap(_currentFace, ftcharmap);
 	return std::move(charmap);
 }
 
@@ -179,6 +202,27 @@
 }
 
 
+/** Returns the PS name of the current font. */
+const char* FontEngine::getPSName () const {
+	return _currentFace ? FT_Get_Postscript_Name(_currentFace) : nullptr;
+}
+
+
+/** Returns the PS name of a font given by a file.
+ *  @param[in] fname name/path of the font file
+ *  @return the PS name */
+string FontEngine::getPSName (const string &fname) const {
+	string psname;
+	FT_Face face;
+	if (FT_New_Face(_library, fname.c_str(), 0, &face) == 0) {
+		if (const char *ptr = FT_Get_Postscript_Name(face))
+			psname = ptr;
+		FT_Done_Face(face);
+	}
+	return psname;
+}
+
+
 int FontEngine::getUnitsPerEM () const {
 	return _currentFace ? _currentFace->units_per_EM : 0;
 }
@@ -200,16 +244,6 @@
 }
 
 
-int FontEngine::getAdvance (int c) const {
-	if (_currentFace) {
-		FT_Fixed adv=0;
-		FT_Get_Advance(_currentFace, c, FT_LOAD_NO_SCALE, &adv);
-		return adv;
-	}
-	return 0;
-}
-
-
 int FontEngine::getHAdvance () const {
 	if (_currentFace) {
 		auto table = static_cast<TT_OS2*>(FT_Get_Sfnt_Table(_currentFace, ft_sfnt_os2));
@@ -219,21 +253,26 @@
 }
 
 
+/** Returns the horizontal advance width of a given character in font units. */
 int FontEngine::getHAdvance (const Character &c) const {
 	if (_currentFace) {
-		FT_Load_Glyph(_currentFace, charIndex(c), FT_LOAD_NO_SCALE);
-		return _currentFace->glyph->metrics.horiAdvance;
+		FT_Fixed adv=0;
+		FT_Get_Advance(_currentFace, charIndex(c), FT_LOAD_NO_SCALE, &adv);
+		return adv;
 	}
 	return 0;
 }
 
 
+/** Returns the vertical advance width of a given character in font units. */
 int FontEngine::getVAdvance (const Character &c) const {
 	if (_currentFace) {
-		FT_Load_Glyph(_currentFace, charIndex(c), FT_LOAD_NO_SCALE);
+		FT_Fixed adv=0;
+		auto flags = FT_LOAD_NO_SCALE;
 		if (FT_HAS_VERTICAL(_currentFace))
-			return _currentFace->glyph->metrics.vertAdvance;
-		return _currentFace->glyph->metrics.horiAdvance;
+			flags |= FT_LOAD_VERTICAL_LAYOUT;
+		FT_Get_Advance(_currentFace, charIndex(c), flags, &adv);
+		return adv;
 	}
 	return 0;
 }
@@ -241,8 +280,8 @@
 
 int FontEngine::getWidth (const Character &c) const {
 	if (_currentFace) {
-		FT_Load_Glyph(_currentFace, charIndex(c), FT_LOAD_NO_SCALE);
-		return _currentFace->glyph->metrics.width;
+		if (FT_Load_Glyph(_currentFace, charIndex(c), FT_LOAD_NO_SCALE) == 0)
+			return _currentFace->glyph->metrics.width;
 	}
 	return 0;
 }
@@ -250,8 +289,8 @@
 
 int FontEngine::getHeight (const Character &c) const {
 	if (_currentFace) {
-		FT_Load_Glyph(_currentFace, charIndex(c), FT_LOAD_NO_SCALE);
-		return _currentFace->glyph->metrics.horiBearingY;
+		if (FT_Load_Glyph(_currentFace, charIndex(c), FT_LOAD_NO_SCALE) == 0)
+			return _currentFace->glyph->metrics.horiBearingY;
 	}
 	return 0;
 }
@@ -259,13 +298,18 @@
 
 int FontEngine::getDepth (const Character &c) const {
 	if (_currentFace) {
-		FT_Load_Glyph(_currentFace, charIndex(c), FT_LOAD_NO_SCALE);
-		return _currentFace->glyph->metrics.height - _currentFace->glyph->metrics.horiBearingY;
+		if (FT_Load_Glyph(_currentFace, charIndex(c), FT_LOAD_NO_SCALE) == 0)
+			return _currentFace->glyph->metrics.height - _currentFace->glyph->metrics.horiBearingY;
 	}
 	return 0;
 }
 
 
+int FontEngine::getCharIndexByGlyphName(const char *name) const {
+	return _currentFace ? int(FT_Get_Name_Index(_currentFace, name)) : 0;
+}
+
+
 int FontEngine::charIndex (const Character &c) const {
 	if (!_currentFace || !_currentFace->charmap)
 		return c.type() == Character::NAME ? 0 : c.number();
@@ -280,22 +324,6 @@
 }
 
 
-/** Get first available character of the current font face. */
-int FontEngine::getFirstChar () const {
-	if (_currentFace)
-		return _currentChar = FT_Get_First_Char(_currentFace, &_currentGlyphIndex);
-	return 0;
-}
-
-
-/** Get the next available character of the current font face. */
-int FontEngine::getNextChar () const {
-	if (_currentFace && _currentGlyphIndex)
-		return _currentChar = FT_Get_Next_Char(_currentFace, _currentChar, &_currentGlyphIndex);
-	return getFirstChar();
-}
-
-
 /** Returns the number of glyphs present in the current font face. */
 int FontEngine::getNumGlyphs () const {
 	return _currentFace ? _currentFace->num_glyphs : 0;
@@ -306,15 +334,15 @@
  * @param[in] c char code
  * @return glyph name */
 string FontEngine::getGlyphName (const Character &c) const {
+	string ret;
 	if (c.type() == Character::NAME)
-		return c.name();
-
-	if (_currentFace && FT_HAS_GLYPH_NAMES(_currentFace)) {
+		ret = c.name();
+	else if (_currentFace && FT_HAS_GLYPH_NAMES(_currentFace)) {
 		char buf[256];
 		FT_Get_Glyph_Name(_currentFace, charIndex(c), buf, 256);
-		return string(buf);
+		ret = string(buf);
 	}
-	return "";
+	return ret;
 }
 
 
@@ -335,7 +363,7 @@
 	if (_currentFace) {
 		for (int i=0; i < _currentFace->num_charmaps; i++) {
 			FT_CharMap charmap = _currentFace->charmaps[i];
-			charmapIDs.emplace_back(charmap->platform_id, charmap->encoding_id);
+			charmapIDs.emplace_back(uint8_t(charmap->platform_id), uint8_t(charmap->encoding_id));
 		}
 	}
 	return charmapIDs.size();
@@ -344,7 +372,7 @@
 
 CharMapID FontEngine::setUnicodeCharMap () {
 	if (_currentFace && FT_Select_Charmap(_currentFace, FT_ENCODING_UNICODE) == 0)
-		return CharMapID(_currentFace->charmap->platform_id, _currentFace->charmap->encoding_id);
+		return CharMapID(uint8_t(_currentFace->charmap->platform_id), uint8_t(_currentFace->charmap->encoding_id));
 	return CharMapID();
 }
 
@@ -351,7 +379,7 @@
 
 CharMapID FontEngine::setCustomCharMap () {
 	if (_currentFace && FT_Select_Charmap(_currentFace, FT_ENCODING_ADOBE_CUSTOM) == 0)
-		return CharMapID(_currentFace->charmap->platform_id, _currentFace->charmap->encoding_id);
+		return CharMapID(uint8_t(_currentFace->charmap->platform_id), uint8_t(_currentFace->charmap->encoding_id));
 	return CharMapID();
 }
 
@@ -414,11 +442,13 @@
 		}
 		FT_Outline outline = face->glyph->outline;
 		// apply style parameters if set
-		if (const FontStyle *style = font->style()) {
-			FT_Matrix matrix = {to_16dot16(style->extend), to_16dot16(style->slant), 0, to_16dot16(1)};
-			FT_Outline_Transform(&outline, &matrix);
-			if (style->bold != 0)
-				FT_Outline_Embolden(&outline, style->bold/font->scaledSize()*face->units_per_EM);
+		if (font) {
+			if (const FontStyle *style = font->style()) {
+				FT_Matrix matrix = {to_16dot16(style->extend), to_16dot16(style->slant), 0, to_16dot16(1)};
+				FT_Outline_Transform(&outline, &matrix);
+				if (style->bold != 0)
+					FT_Outline_Embolden(&outline, style->bold/font->scaledSize()*face->units_per_EM);
+			}
 		}
 		const FT_Outline_Funcs funcs = {moveto, lineto, quadto, cubicto, 0, 0};
 		FT_Outline_Decompose(&outline, &funcs, &glyph);

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontEngine.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FontEngine.hpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -43,14 +43,17 @@
 		static FontEngine& instance ();
 		static std::string version ();
 		bool setFont (const Font &font);
+		const Font* currentFont () const {return _currentFont;}
 		bool isCIDFont() const;
+		bool hasVerticalMetrics () const;
 		bool traceOutline (const Character &c, Glyph &glyph, bool scale=true) const;
 		const char* getFamilyName () const;
 		const char* getStyleName () const;
+		const char* getPSName () const;
+		std::string getPSName (const std::string &fname) const;
 		int getUnitsPerEM () const;
 		int getAscender () const;
 		int getDescender () const;
-		int getAdvance (int c) const;
 		int getHAdvance () const;
 		int getHAdvance (const Character &c) const;
 		int getVAdvance (const Character &c) const;
@@ -57,8 +60,6 @@
 		int getWidth (const Character &c) const;
 		int getHeight (const Character &c) const;
 		int getDepth (const Character &c) const;
-		int getFirstChar () const;
-		int getNextChar () const;
 		int getCharMapIDs (std::vector<CharMapID> &charmapIDs) const;
 		int getNumGlyphs () const;
 		CharMapID setUnicodeCharMap ();
@@ -65,7 +66,7 @@
 		CharMapID setCustomCharMap ();
 		std::vector<int> getPanose () const;
 		std::string getGlyphName (const Character &c) const;
-		int getCharByGlyphName (const char *name) const;
+		int getCharIndexByGlyphName (const char *name) const;
 		bool setCharMap (const CharMapID &charMapID);
 		void buildGidToCharCodeMap (RangeMap &charmap);
 		std::unique_ptr<const RangeMap> createCustomToUnicodeMap ();

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FontManager.cpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -24,10 +24,13 @@
 #include <set>
 #include "CMap.hpp"
 #include "Font.hpp"
+#include "fonts/Base14Fonts.hpp"
+#include "FontEngine.hpp"
 #include "FontManager.hpp"
 #include "FileFinder.hpp"
 #include "FileSystem.hpp"
 #include "Message.hpp"
+#include "SVGTree.hpp"
 
 using namespace std;
 
@@ -80,6 +83,18 @@
 }
 
 
+int FontManager::fontID (string name, double ptsize) const {
+	std::replace(name.begin(), name.end(), '+', '-');
+	for (auto it = _fonts.begin(); it != _fonts.end(); ++it) {
+		if (auto nativeFont = font_cast<NativeFont*>(it->get())) {
+			if (nativeFont->name() == name && nativeFont->scaledSize() == ptsize)
+				return int(std::distance(_fonts.begin(), it));
+		}
+	}
+	return -1;
+}
+
+
 int FontManager::fontnum (int id) const {
 	if (id < 0 || size_t(id) > _fonts.size())
 		return -1;
@@ -129,6 +144,14 @@
 }
 
 
+Font* FontManager::getFont (const string &name, double ptsize) {
+	int id = fontID(name, ptsize);
+	if (id < 0)
+		return nullptr;
+	return _fonts[id].get();
+}
+
+
 Font* FontManager::getFontById (int id) const {
 	if (id < 0 || size_t(id) >= _fonts.size())
 		return nullptr;
@@ -219,7 +242,7 @@
 				missing_fonts.insert(filename);
 			}
 		}
-		_name2id[name] = newid;
+		_name2id.emplace(name, newid);
 	}
 	_fonts.push_back(std::move(newfont));
 	if (_vfStack.empty())  // register font referenced in dvi file?
@@ -256,7 +279,7 @@
  *  @param[in] style font style parameters
  *  @param[in] color global font color
  *  @return global font id */
-int FontManager::registerFont (uint32_t fontnum, string filename, int fontIndex, double ptsize, const FontStyle &style, Color color) {
+int FontManager::registerFont (uint32_t fontnum, const string &filename, int fontIndex, double ptsize, const FontStyle &style, Color color) {
 	int id = fontID(fontnum);
 	if (id >= 0)
 		return id;
@@ -292,7 +315,7 @@
 				missing_fonts.insert(filename);
 			}
 		}
-		_name2id[fontname] = newid;
+		_name2id.emplace(fontname, newid);
 	}
 	_fonts.push_back(std::move(newfont));
 	_num2id[fontnum] = newid;
@@ -300,6 +323,40 @@
 }
 
 
+/** Registers a native font that is referenced by its name instead of a DVI font number.
+ *  @param[in] fname filename/path of the font file
+ *  @param[in] ptsize font size in PS points
+ *  return global ID assigned to the font */
+int FontManager::registerFont (const std::string &fname, double ptsize) {
+	if (fname.empty())
+		return -1;
+	string fontname;
+	if (fname.size() > 6 && fname.substr(0,6) == "sys://") {
+		fontname = fname.substr(6);
+		if (!find_base14_font(fontname))
+			return -1;
+	}
+	else if (!FileSystem::exists(fname) || (fontname = FontEngine::instance().getPSName(fname)).empty())
+		return -1;
+	int id = fontID(fontname, ptsize);
+	if (id >= 0)
+		return id;
+	unique_ptr<NativeFont> nativeFont;
+	id = fontID(fontname);
+	if (id < 0) {
+		nativeFont = util::make_unique<NativeFontImpl>(fname, fontname, ptsize);
+		_name2id.emplace(std::move(fontname), _fonts.size());
+	}
+	else {
+		auto *nf = font_cast<NativeFont*>(getFontById(id));
+		nativeFont = unique_ptr<NativeFont>(nf->clone(ptsize, FontStyle(), Color::BLACK));
+	}
+	id = int(_fonts.size());
+	_fonts.push_back(std::move(nativeFont));
+	return id;
+}
+
+
 /** Enters a new virtual font frame.
  *  This method must be called before processing a VF character.
  *  @param[in] vf virtual font */
@@ -325,6 +382,20 @@
 }
 
 
+void FontManager::addUsedChar (const Font &font, int c) {
+	_usedChars[font.uniqueFont()].insert(c);
+	if (!SVGTree::USE_FONTS)
+		_usedChars[&font].insert(c);
+	_usedFonts.insert(&font);
+}
+
+
+void FontManager::resetUsedChars () {
+	_usedChars.clear();
+	_usedFonts.clear();
+}
+
+
 ostream& FontManager::write (ostream &os, Font *font, int level) {
 #if 0
 	if (font) {

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontManager.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FontManager.hpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -27,6 +27,7 @@
 #include <string>
 #include <stack>
 #include <unordered_map>
+#include <unordered_set>
 #include <vector>
 #include "Color.hpp"
 #include "FontStyle.hpp"
@@ -42,6 +43,8 @@
  *  virtual fonts are completely replaced by their DVI description so they don't
  *  appear anywhere in the output. */
 class FontManager {
+	using CharMap = std::unordered_map<const Font*, std::set<int>>;
+	using FontSet = std::unordered_set<const Font*>;
 	using Num2IdMap = std::unordered_map<uint32_t, int>;
 	using Name2IdMap = std::unordered_map<std::string, int>;
 	using VfNum2IdMap = std::unordered_map<const VirtualFont*, Num2IdMap>;
@@ -53,14 +56,18 @@
 		static FontManager& instance ();
 		int registerFont (uint32_t fontnum, const std::string &fontname, uint32_t checksum, double dsize, double scale);
 		int registerFont (uint32_t fontnum, const std::string &fname, double ptsize, const FontStyle &style, Color color);
-		int registerFont (uint32_t fontnum, std::string fname, int fontIndex, double ptsize, const FontStyle &style, Color color);
+		int registerFont (uint32_t fontnum, const std::string &fname, int fontIndex, double ptsize, const FontStyle &style, Color color);
+//		int registerFont (const std::string &fname, int fontIndex, double ptsize, const FontStyle &style, Color color);
+		int registerFont (const std::string &fname, double ptsize);
 		Font* getFont (int n) const;
 		Font* getFont (const std::string &name) const;
+		Font* getFont (const std::string &name, double ptsize);
 		Font* getFontById (int id) const;
 		const VirtualFont* getVF () const;
 		int fontID (int n) const;
 		int fontID (const Font *font) const;
 		int fontID (const std::string &name) const;
+		int fontID (std::string name, double ptsize) const;
 		int fontnum (int id) const;
 		int vfFirstFontNum (const VirtualFont *vf) const;
 		Font* vfFirstFont (const VirtualFont *vf) const;
@@ -67,6 +74,10 @@
 		void enterVF (VirtualFont *vf);
 		void leaveVF ();
 		void assignVFChar (int c, std::vector<uint8_t> &&dvi);
+		void addUsedChar (const Font &font, int c);
+		void resetUsedChars ();
+		CharMap& getUsedChars ()  {return _usedChars;}
+		FontSet& getUsedFonts ()  {return _usedFonts;}
 		std::ostream& write (std::ostream &os, Font *font=nullptr, int level=0);
 
 	protected:
@@ -80,6 +91,8 @@
 		VfStack        _vfStack;   ///< stack of currently processed virtual fonts
 		VfFirstFontNumMap _vfFirstFontNumMap; ///< VF -> local font number of first font defined in VF
 		VfFirstFontMap _vfFirstFontMap;       ///< VF -> first font defined
+		CharMap _usedChars;
+		FontSet _usedFonts;
 };
 
 #endif

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FontMap.cpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMap.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FontMap.hpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FontMetrics.cpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontMetrics.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FontMetrics.hpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontStyle.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontStyle.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontStyle.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FontStyle.hpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FontWriter.cpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -68,7 +68,7 @@
 
 #ifdef DISABLE_WOFF
 // dummy functions used if WOFF support is disabled
-FontWriter::FontWriter (const PhysicalFont &font) : _font(font) {}
+FontWriter::FontWriter (const PhysicalFont &font) : _currentFont(font) {}
 std::string FontWriter::createFontFile (FontFormat format, const set<int> &charcodes, GFGlyphTracer::Callback *cb) const {return "";}
 bool FontWriter::writeCSSFontFace (FontFormat format, const set<int> &charcodes, ostream &os, GFGlyphTracer::Callback *cb) const {return false;}
 #else
@@ -77,141 +77,50 @@
 #include <iomanip>
 #include <sstream>
 #include <woff2/encode.h>
-#include "ffwrapper.h"
 #include "Bezier.hpp"
 #include "FileSystem.hpp"
 #include "Font.hpp"
 #include "Glyph.hpp"
-#include "TTFAutohint.hpp"
-#include "TrueTypeFont.hpp"
+#include "ttf/TTFAutohint.hpp"
+#include "ttf/TTFWriter.hpp"
 
+using namespace ttf;
 
-FontWriter::FontWriter (const PhysicalFont &font) : _font(font) {
-	static bool initialized=false;
-	if (!initialized) {
-		ff_init();
-		initialized = true;
-	}
-}
-
-
-struct SFDActions : Glyph::IterationActions {
-	explicit SFDActions (ostream &os) : _os(os) {}
-
-	using Point = Glyph::Point;
-	void moveto (const Point &p) override {write('m', p);}
-	void lineto (const Point &p) override {write('l', p);}
-	void cubicto (const Point &p1, const Point &p2, const Point &p3) override {write('c', p1, p2, p3);	}
-	void closepath () override {write('m', startPoint());}
-
-	void quadto (const Point &p1, const Point &p2) override {
-		// convert quadratic Bézier curve to cubic one
-		DPair pt0(currentPoint().x(), currentPoint().y());
-		DPair pt1(p1.x(), p1.y());
-		DPair pt2(p2.x(), p2.y());
-		Bezier b(pt0, pt1, pt2);
-		write('c', round(b.point(0)), round(b.point(1)), round(b.point(2)), round(b.point(3)));
-	}
-
-	template <typename ...Args>
-	void write (char cmd, const Args& ...args) {
-		writeParams(args...);
-		_os << cmd << " 0\n";
-	}
-
-	static void writeParams () {}
-
-	template <typename Pt, typename ...Args>
-	void writeParams (const Pt &p, const Args& ...args) const {
-		_os << p.x() << ' ' << p.y() << ' ';
-		writeParams(args...);
-	}
-
-	ostream &_os;
-	Glyph::Point _startPoint, _currentPoint;
-};
-
-
-/** Creates a Spline Font Database (SFD) file describing the font and its glyphs.
- *  https://fontforge.github.io/sfdformat.html */
-static void writeSFD (const string &sfdname, const PhysicalFont &font, const set<int> &charcodes, GFGlyphTracer::Callback *cb) {
-	ofstream sfd(sfdname);
-	if (!sfd)
-		throw FontWriterException("failed writing SFD file "+sfdname);
-
-	sfd <<
-		"SplineFontDB: 3.0\n"
-		"FontName: " << font.name() << '\n';
-
-	// ensure that the sum of the SFD's Ascent and Descent values equals the font's units per EM
-	double yext = font.ascent()+font.descent();
-	double scale = double(font.unitsPerEm())/(yext != 0 ? yext : abs(font.ascent()));
-	sfd <<
-		"Ascent: " << font.ascent()*scale << "\n"
-		"Descent: " << font.descent()*scale << "\n"
-		"LayerCount: 2\n"           // number of layers must be 2 at least
-		"Layer: 0 0 \"Back\" 1\n"   // layer 0: background layer with cubic splines
-		"Layer: 1 0 \"Fore\" 0\n"   // layer 1: foreground layer with cubic splines
-		"Encoding: UnicodeFull\n"   // character codes can use the full Unicode range
-		"BeginChars: 1114112 " << charcodes.size() << '\n';
-
-	double extend = font.style() ? font.style()->extend : 1;
-	for (int c : charcodes) {
-		string name = font.glyphName(c);
-		if (name.empty()) {
-			// if the font doesn't provide glyph names, use AGL name uFOO
-			ostringstream oss;
-			oss << 'u' << hex << uppercase << setw(4) << setfill('0') << c;
-			name = oss.str();
-		}
-		uint32_t codepoint = font.unicode(c);
-		sfd <<
-			"StartChar: " << name << "\n"
-			"Encoding: "  << codepoint << ' ' << codepoint << " 0\n"
-			"Width: "     << font.hAdvance(c)*extend << "\n"
-			"VWidth: "    << font.vAdvance(c) << "\n"
-			"Fore\n"
-			"SplineSet\n";
-		Glyph glyph;
-		if (font.getGlyph(c, glyph, cb)) {
-			if (glyph.empty())
-				sfd << "0 0 m 0\n";
-			else {
-				SFDActions actions(sfd);
-				glyph.iterate(actions, false);
+bool FontWriter::createTTFFile (const std::string &ttfname, const PhysicalFont &font, const set<int> &charcodes, GFGlyphTracer::Callback *cb) const {
+	TTFWriter ttfWriter(font, charcodes);
+	if (cb)
+		ttfWriter.setTracerCallback(*cb);
+	bool ok = ttfWriter.writeTTF(ttfname);
+	if (ok && AUTOHINT_FONTS) {
+		TTFAutohint autohinter;
+		if (!autohinter.available()) {
+			static bool reported=false;
+			if (!reported) {
+				Message::wstream(true) << "autohint functionality disabled (ttfautohint not found)";
+				reported = true;
 			}
 		}
-		sfd <<
-			"EndSplineSet\n"
-			"EndChar\n";
-	}
-	sfd.flush();
-	sfd.close();
-	if (sfd.fail())
-		throw FontWriterException("failed writing SFD file "+sfdname);
-}
-
-
-bool FontWriter::createTTFFile (const string &sfdname, const string &ttfname) const {
-	TTFAutohint autohinter;
-	if (!autohinter.available())
-		return ff_sfd_to_ttf(sfdname.c_str(), ttfname.c_str(), AUTOHINT_FONTS);
-
-	bool ok = ff_sfd_to_ttf(sfdname.c_str(), ttfname.c_str(), false);
-	if (ok && AUTOHINT_FONTS) {
-		string tmpname = ttfname+"-ah";
-		int errnum = autohinter.autohint(ttfname, tmpname, true);
-		if (errnum) {
-			Message::wstream(true) << "failed to autohint font '" << _font.name() << "'";
-			string msg = autohinter.lastErrorMessage();
-			if (!msg.empty())
-				Message::wstream() << " (" << msg << ")";
-			// keep the unhinted TTF
-			FileSystem::remove(tmpname);
-		}
 		else {
-			FileSystem::remove(ttfname);
-			FileSystem::rename(tmpname, ttfname);
+			string tmpname = ttfname+"-ah";
+			try {
+				int errnum = autohinter.autohint(ttfname, tmpname, true);
+				if (errnum == 0) {  // success?
+					FileSystem::remove(ttfname);
+					FileSystem::rename(tmpname, ttfname);
+				}
+				else {
+					Message::wstream(true) << "failed to autohint font '" << _font.name() << "'";
+					string msg = autohinter.lastErrorMessage();
+					if (!msg.empty())
+						Message::wstream() << " (" << msg << ")";
+					// keep the unhinted TTF
+					FileSystem::remove(tmpname);
+				}
+			}
+			catch (MessageException &e) {
+				Message::wstream(true) << e.what() << '\n';
+				FileSystem::remove(tmpname);
+			}
 		}
 	}
 	return ok;
@@ -226,24 +135,19 @@
 string FontWriter::createFontFile (FontFormat format, const set<int> &charcodes, GFGlyphTracer::Callback *cb) const {
 	string tmpdir = FileSystem::tmpdir();
 	string basename = tmpdir+_font.name()+"-tmp";
-	string sfdname = basename+".sfd";
-	writeSFD(sfdname, _font, charcodes, cb);
 	string ttfname = basename+".ttf";
 	string targetname = basename+"."+fontFormatInfo(format)->formatstr_short;
-	bool ok = createTTFFile(sfdname, ttfname);
+	bool ok = createTTFFile(ttfname, _font, charcodes, cb);
 	if (ok) {
 		if (format == FontFormat::WOFF || format == FontFormat::WOFF2) {
-			TrueTypeFont ttf(ttfname);
 			if (format == FontFormat::WOFF)
-				ttf.writeWOFF(targetname);
+				ok = TTFWriter::convertTTFToWOFF(ttfname, targetname);
 			else
-				ok = ttf.writeWOFF2(targetname);
+				TTFWriter::convertTTFToWOFF2(ttfname, targetname);
 			if (!PhysicalFont::KEEP_TEMP_FILES)
 				FileSystem::remove(ttfname);
 		}
 	}
-	if (!PhysicalFont::KEEP_TEMP_FILES)
-		FileSystem::remove(sfdname);
 	if (!ok)
 		throw FontWriterException("failed writing "+string(fontFormatInfo(format)->formatstr_short)+ " file " + targetname);
 	return targetname;

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/FontWriter.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** FontWriter.hpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -36,7 +36,7 @@
 		static bool AUTOHINT_FONTS;
 
 	public:
-		explicit FontWriter (const PhysicalFont &font);
+		explicit FontWriter (const PhysicalFont &font) : _font(font) {}
 		std::string createFontFile (FontFormat format, const std::set<int> &charcodes, GFGlyphTracer::Callback *cb=nullptr) const;
 		bool writeCSSFontFace (FontFormat format, const std::set<int> &charcodes, std::ostream &os, GFGlyphTracer::Callback *cb=nullptr) const;
 		static FontFormat toFontFormat (std::string formatstr);
@@ -50,7 +50,7 @@
 			const char *formatstr_long;
 		};
 		static const FontFormatInfo* fontFormatInfo (FontFormat format);
-		bool createTTFFile (const std::string &sfdname, const std::string &ttfname) const;
+		bool createTTFFile (const std::string &ttfname, const PhysicalFont &font, const std::set<int> &charcodes, GFGlyphTracer::Callback *cb) const;
 
 	private:
 		const PhysicalFont &_font;

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** GFGlyphTracer.cpp                                                    **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFGlyphTracer.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** GFGlyphTracer.hpp                                                    **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** GFReader.cpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFReader.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** GFReader.hpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** GFTracer.cpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GFTracer.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** GFTracer.hpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Ghostscript.cpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -81,8 +81,8 @@
 }
 #endif // _WIN32
 
-#if defined(_WIN32) && !defined(_WIN64)
-static string get_gsdll32 () {
+#if defined(_WIN32)
+static string get_gsdll () {
 	string pathstr;
 #if defined(TEXLIVEWIN32)
 	char exepath[256];
@@ -97,9 +97,13 @@
 		pathstr += "bin\\";
 	}
 #endif
+#if defined(_WIN64)
+	return pathstr+"gsdll64.dll";
+#else
 	return pathstr+"gsdll32.dll";
+#endif
 }
-#endif  // _WIN32  && !_WIN64
+#endif  // _WIN32
 
 
 /** Try to detect name of the Ghostscript shared library depending on the user settings.
@@ -123,14 +127,10 @@
 	string gsdll_path = get_path_from_registry();
 	if (!gsdll_path.empty())
 		return gsdll_path;
-#endif //_WIN32
-#if defined(_WIN64)
-	return "gsdll64.dll";
-#elif defined(_WIN32)
-	return get_gsdll32();
+	return get_gsdll();
 #else
 	// try to find libgs.so.X on the user's system
-	const int abi_min=7, abi_max=9; // supported libgs ABI versions
+	const int abi_min=7, abi_max=10; // supported libgs ABI versions
 	for (int i=abi_max; i >= abi_min; i--) {
 #if defined(__CYGWIN__)
 		string dlname = "cyggs-" + to_string(i) + ".dll";
@@ -141,12 +141,16 @@
 		if (loader.loaded())
 			return dlname;
 #if defined(__APPLE__)
-		dlname = "libgs." + to_string(i) + ".dylib";
-		if (loader.loadLibrary(dlname))
-			return dlname;
-		dlname = "libgs.dylib." + to_string(i);
-		if (loader.loadLibrary(dlname))
-			return dlname;
+		// dlopen() requires an absolute path in a hardened runtime such as installed
+		// by MacTeX. Thus, explicitly lookup libgs in /usr/local/lib too.
+		for (const string path : {"", "/usr/local/lib/"}) {
+			dlname = path + "libgs." + to_string(i) + ".dylib";
+			if (loader.loadLibrary(dlname))
+				return dlname;
+			dlname = path + "libgs.dylib." + to_string(i);
+			if (loader.loadLibrary(dlname))
+				return dlname;
+		}
 #endif
 	}
 #endif
@@ -228,10 +232,13 @@
 
 /** Returns the revision number of the GS library. */
 int Ghostscript::revision () const {
-	gsapi_revision_t r;
-	if (revision(&r))
-		return static_cast<int>(r.revision);
-	return 0;
+	static int rev=0;
+	if (rev == 0) {
+		gsapi_revision_t r;
+		if (revision(&r))
+			rev = static_cast<int>(r.revision);
+	}
+	return rev;
 }
 
 
@@ -375,19 +382,9 @@
 	if (code < 0)
 		code = -code;
 	const char *error_names[] = { ERROR_NAMES };
-	if (code == 0 || (size_t)code > sizeof(error_names)/sizeof(error_names[0]))
+	if (code == 0 || size_t(code) > sizeof(error_names)/sizeof(error_names[0]))
 		return nullptr;
-#if defined(HAVE_LIBGS)
-	// use array defined in libgs to avoid linking the error strings into the binary
-	return gs_error_names[code-1];
-#elif defined(_WIN32)
-	// gs_error_names is private in the Ghostscript DLL so we can't access it here
 	return error_names[code-1];
-#else
-	if (auto error_names = loadSymbol<const char**>("gs_error_names"))
-		return error_names[code-1];
-	return nullptr;
-#endif
 }
 
 #endif  // !DISABLE_GS

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Ghostscript.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Ghostscript.hpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Glyph.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Glyph.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Glyph.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Glyph.hpp                                                            **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GlyphTracerMessages.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GlyphTracerMessages.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GlyphTracerMessages.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** GlyphTracerMessages.hpp                                              **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPath.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPath.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPath.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** GraphicsPath.hpp                                                     **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -642,7 +642,7 @@
 				void arcto (T rx, T ry, double angle, bool largeArcFlag, bool sweepFlag, const Point &p) override {
 					EllipticalArc arc(this->currentPoint(), rx, ry, angle, largeArcFlag, sweepFlag, p);
 					std::vector<CommandVariant> cmds;
-					for (const Bezier &bezier : arc.approximate())
+					for (const CubicBezier &bezier : arc.approximate())
 						cmds.emplace_back(CubicTo{bezier.point(1), bezier.point(2), bezier.point(3)});
 					this->path().replace(this->commandPos(), cmds);
 				}

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPathParser.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPathParser.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/GraphicsPathParser.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** 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>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HashFunction.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HashFunction.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HashFunction.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** HashFunction.cpp                                                     **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HashFunction.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HashFunction.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HashFunction.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** HashFunction.hpp                                                     **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** HtmlSpecialHandler.cpp                                               **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HtmlSpecialHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** HtmlSpecialHandler.hpp                                               **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** HyperlinkManager.cpp                                                 **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/HyperlinkManager.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** HyperlinkManager.hpp                                                 **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ImageToSVG.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ImageToSVG.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ImageToSVG.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** ImageToSVG.cpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -36,18 +36,17 @@
 using namespace std;
 
 
+ImageToSVG::ImageToSVG (std::string fname, SVGOutputBase &out)
+	: _fname(std::move(fname)), _out(out), _gsVersion(Ghostscript().revision())
+{
+}
+
+
 void ImageToSVG::checkGSAndFileFormat () {
-	if (!_haveGS) {
-#ifdef HAVE_LIBGS
-		_haveGS = true;
-#else
-		_haveGS = Ghostscript().available();
-#endif
-		if (!_haveGS)
-			throw MessageException("Ghostscript is required to process "+imageFormat()+" files");
-		if (!imageIsValid())
-			throw MessageException("invalid "+imageFormat()+" file");
-	}
+	if (!_gsVersion)
+		throw MessageException("Ghostscript is required to process "+imageFormat()+" files");
+	if (!imageIsValid())
+		throw MessageException("invalid "+imageFormat()+" file");
 }
 
 
@@ -59,7 +58,7 @@
 	Message::mstream().indent(0);
 	Message::mstream(false, Message::MC_PAGE_NUMBER) << "processing " << imageFormat() << " file\n";
 	Message::mstream().indent(1);
-	_svg.newPage(1);
+	_svg.newPage(pageno);
 	// create a psfile special and forward it to the PsSpecialHandler
 	stringstream ss;
 	ss << "\"" << _fname << "\" "
@@ -69,7 +68,7 @@
 			"ury=" << bbox.maxY();
 	_currentPageNumber = pageno;
 	if (!isSinglePageFormat())
-		ss << " page=" << pageno;
+		ss << " page=" << pageno << " proc=gs";
 	try {
 		_psHandler.process(psSpecialCmd(), ss, *this);
 	}
@@ -77,6 +76,11 @@
 		progress(nullptr);  // remove progress message
 		throw;
 	}
+	writeSVG(pageno);
+}
+
+
+void ImageToSVG::writeSVG (int pageno) {
 	progress(nullptr);
 	Matrix matrix = getUserMatrix(_bbox);
 	// output SVG file
@@ -87,6 +91,7 @@
 	_svg.appendToDoc(util::make_unique<XMLComment>(" This file was generated by dvisvgm " + string(PROGRAM_VERSION) + " "));
 	bool success = _svg.write(_out.getPageStream(pageno, totalPageCount()));
 	string svgfname = _out.filepath(pageno, totalPageCount()).shorterAbsoluteOrRelative();
+	_out.finish();
 	if (svgfname.empty())
 		svgfname = "<stdout>";
 	if (!success)
@@ -94,10 +99,11 @@
 	else {
 		const double bp2pt = 72.27/72;
 		const double bp2mm = 25.4/72;
-		Message::mstream(false, Message::MC_PAGE_SIZE) << "graphic size: " << XMLString(_bbox.width()*bp2pt) << "pt"
-			" x " << XMLString(_bbox.height()*bp2pt) << "pt"
-			" (" << XMLString(_bbox.width()*bp2mm) << "mm"
-			" x " << XMLString(_bbox.height()*bp2mm) << "mm)\n";
+		Message::mstream(false,Message::MC_PAGE_SIZE)
+			<< "graphic size: " << XMLString(_bbox.width()*bp2pt) << "pt"
+			<< " x " << XMLString(_bbox.height()*bp2pt) << "pt"
+			<< " (" << XMLString(_bbox.width()*bp2mm) << "mm"
+			<< " x " << XMLString(_bbox.height()*bp2mm) << "mm)\n";
 		Message::mstream(false, Message::MC_PAGE_WRITTEN) << "output written to " << svgfname << '\n';
 	}
 	_bbox.invalidate();

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ImageToSVG.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ImageToSVG.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ImageToSVG.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** ImageToSVG.hpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -32,12 +32,11 @@
 
 class ImageToSVG : protected SpecialActions {
 	public:
-		ImageToSVG (std::string fname, SVGOutputBase &out) : _fname(std::move(fname)), _out(out) {}
-		void convert (int pageno);
+		ImageToSVG (std::string fname, SVGOutputBase &out);
+		virtual void convert (int pageno);
 		void convert (int firstPage, int lastPage, std::pair<int,int> *pageinfo);
 		void convert (const std::string &rangestr, std::pair<int,int> *pageinfo);
 		void setPageTransformation (const std::string &transCmds) {_transCmds = transCmds;}
-//		void setPageSize (const std::string &name);
 		std::string filename () const {return _fname;}
 		PSInterpreter& psInterpreter () const {return _psHandler.psInterpreter();}
 		virtual bool isSinglePageFormat () const =0;
@@ -44,12 +43,14 @@
 		virtual int totalPageCount () const =0;
 
 	protected:
-		void checkGSAndFileFormat ();
+		virtual void checkGSAndFileFormat ();
 		Matrix getUserMatrix (const BoundingBox &bbox) const;
 		virtual std::string imageFormat () const =0;
 		virtual bool imageIsValid () const =0;
 		virtual BoundingBox imageBBox () const =0;
 		virtual std::string psSpecialCmd () const =0;
+		int gsVersion () const                                  {return _gsVersion;}
+		virtual void writeSVG (int pageno);
 		// implement abstract base class SpecialActions
 		double getX () const override                           {return _x;}
 		double getY () const override                           {return _y;}
@@ -71,17 +72,19 @@
 		BoundingBox& bbox () override                           {return _bbox;}
 		BoundingBox& bbox (const std::string &name, bool reset=false) override {return _bbox;}
 		FilePath getSVGFilePath (unsigned pageno) const override;
-		std::string getBBoxFormatString () const override {return "";}
+		std::string getBBoxFormatString () const override       {return "";}
 
+	protected:
+		SVGTree _svg;
+
 	private:
 		std::string _fname;   ///< name of image file
-		SVGTree _svg;
 		SVGOutputBase &_out;
 		double _x=0, _y=0;
 		unsigned _currentPageNumber=0;
 		BoundingBox _bbox;
 		mutable PsSpecialHandler _psHandler;
-		bool _haveGS=false;      ///< true if Ghostscript is available
+		int _gsVersion=0;        ///< Ghostscript version found
 		std::string _transCmds;  ///< transformation commands
 };
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** InputBuffer.cpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputBuffer.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** InputBuffer.hpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** InputReader.cpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/InputReader.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** InputReader.hpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** JFM.cpp                                                              **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/JFM.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** JFM.hpp                                                              **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Length.cpp                                                           **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Length.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Length.hpp                                                           **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MD5HashFunction.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MD5HashFunction.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MD5HashFunction.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** MD5HashFunction.hpp                                                  **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.am
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.am	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.am	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,11 +1,11 @@
 ## This file is part of dvisvgm
-## Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>
+## Copyright (C) 2005-2023 Martin Gieseking <martin.gieseking at uos.de>
 ##
 ## Process this file with automake.
 
 bin_PROGRAMS     = dvisvgm
-noinst_LIBRARIES = libdvisvgm.a
-SUBDIRS = optimizer
+noinst_LTLIBRARIES = libdvisvgm.la
+SUBDIRS = fonts optimizer ttf
 
 dvisvgm_SOURCES = \
 	CommandLine.hpp \
@@ -14,15 +14,15 @@
 include ../libs/defs.am
 
 dvisvgm_LDADD = \
-	$(noinst_LIBRARIES) \
-	optimizer/liboptimizer.a \
+	$(noinst_LTLIBRARIES) \
 	../libs/clipper/libclipper.a \
 	$(POTRACE_LIBS) \
 	$(XXHASH_LIBS)
 
 if ENABLE_WOFF
+SUBDIRS += ttf
+
 dvisvgm_LDADD += \
-	../libs/ff-woff/libfontforge.a \
 	$(WOFF2_LIBS) \
 	$(BROTLI_LIBS)
 endif
@@ -36,14 +36,17 @@
 dvisvgm_LDADD += \
 	$(KPATHSEA_LIBS) \
 	$(FREETYPE2_LIBS) \
-	$(FONTFORGE_LIBS) \
 	$(ZLIB_LIBS) \
 	$(LIBGS_LIBS)
 
-dvisvgm_DEPENDENCIES = $(noinst_LIBRARIES)
-dvisvgm_DEPENDENCIES += $(KPATHSEA_DEPEND) $(ZLIB_DEPEND) $(FREETYPE2_DEPEND) $(POTRACE_DEPEND)
+dvisvgm_DEPENDENCIES = $(noinst_LTLIBRARIES)
+dvisvgm_DEPENDENCIES += $(KPATHSEA_DEPEND) $(ZLIB_DEPEND) $(FREETYPE2_DEPEND)
 
-libdvisvgm_a_SOURCES = \
+if TEXLIVE_BUILD
+dvisvgm_DEPENDENCIES += $(POTRACE_DEPEND)
+endif
+
+libdvisvgm_la_SOURCES = \
 	AGLTable.hpp \
 	BasicDVIReader.hpp           BasicDVIReader.cpp \
 	Bezier.hpp                   Bezier.cpp \
@@ -117,9 +120,10 @@
 	Pair.hpp \
 	PapersizeSpecialHandler.hpp  PapersizeSpecialHandler.cpp \
 	PathClipper.hpp              PathClipper.cpp \
+	PDFHandler.hpp               PDFHandler.cpp \
 	PDFParser.hpp                PDFParser.cpp \
 	PdfSpecialHandler.hpp        PdfSpecialHandler.cpp \
-	PDFToSVG.hpp \
+	PDFToSVG.hpp                 PDFToSVG.cpp \
 	PreScanDVIReader.hpp         PreScanDVIReader.cpp \
 	Process.hpp                  Process.cpp \
 	psdefs.cpp \
@@ -153,8 +157,6 @@
 	ToUnicodeMap.hpp             ToUnicodeMap.cpp \
 	TpicSpecialHandler.hpp       TpicSpecialHandler.cpp \
 	TriangularPatch.hpp          TriangularPatch.cpp \
-	TrueTypeFont.hpp             TrueTypeFont.cpp \
-	TTFAutohint.hpp              TTFAutohint.cpp \
 	Unicode.hpp                  Unicode.cpp \
 	utility.hpp                  utility.cpp \
 	VectorIterator.hpp \
@@ -169,8 +171,10 @@
 	XXHashFunction.hpp \
 	ZLibOutputStream.hpp
 
+libdvisvgm_la_LIBADD = fonts/libbase14fonts.la optimizer/liboptimizer.la
+
 if ENABLE_WOFF
-libdvisvgm_a_SOURCES += ffwrapper.c ffwrapper.h
+libdvisvgm_la_LIBADD += ttf/libttf.la
 endif
 
 EXTRA_DIST = options.xml options.dtd iapi.h ierrors.h MiKTeXCom.hpp MiKTeXCom.cpp
@@ -202,14 +206,15 @@
 	$(CODE_COVERAGE_LDFLAGS)
 
 if ENABLE_WOFF
-AM_CFLAGS +=  \
-	-I$(dvisvgm_srcdir)/libs/ff-woff/fontforge \
-	-I$(dvisvgm_srcdir)/libs/ff-woff/inc
+AM_CXXFLAGS += $(TTFAUTOHINT_CFLAGS)
 
 AM_CXXFLAGS +=  \
 	$(BROTLI_CFLAGS) \
 	$(WOFF2_CFLAGS)
 
+AM_LDFLAGS += $(TTFAUTOHINT_LIBS)
+endif
+
 if USE_BUNDLED_MD5
 AM_CXXFLAGS += -I$(dvisvgm_srcdir)/libs/md5
 else
@@ -216,10 +221,8 @@
 AM_CXXFLAGS += $(LIBCRYPTO_CFLAGS)
 endif
 
-endif
-
 # TL: do not try to rebuild these source files.
-if ! TEXLIVE_BUILD
+if !TEXLIVE_BUILD
 
 # the command-line parser class is generated from options.xml by opt2cpp
 $(srcdir)/CommandLine.hpp: options.xml
@@ -233,12 +236,11 @@
 	fi
 
 psdefs.ps: ;
-endif ! TEXLIVE_BUILD
+endif !TEXLIVE_BUILD
 
- at CODE_COVERAGE_RULES@
-
 CLEANFILES = *.gcda *.gcno
 
+if TEXLIVE_BUILD
 # Rebuild libkpathsea:
 @KPATHSEA_RULE@
 # Rebuild libfreetype:
@@ -247,3 +249,4 @@
 @ZLIB_RULE@
 # Rebuild potrace:
 @POTRACE_RULE@
+endif TEXLIVE_BUILD

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.in
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.in	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Makefile.in	2023-01-20 01:55:04 UTC (rev 65593)
@@ -92,30 +92,28 @@
 bin_PROGRAMS = dvisvgm$(EXEEXT)
 @HAVE_BROTLI_FALSE at am__append_1 = -I$(dvisvgm_srcdir)/libs/brotli/include
 @HAVE_BROTLI_FALSE at am__append_2 = ../libs/brotli/libbrotli.a
+#endif TEXLIVE_BUILD
 @HAVE_WOFF2_FALSE at am__append_3 = -I$(dvisvgm_srcdir)/libs/woff2/include
 @HAVE_WOFF2_FALSE at am__append_4 = ../libs/woff2/libwoff2.a
- at ENABLE_WOFF_TRUE@am__append_5 = \
- at ENABLE_WOFF_TRUE@	../libs/ff-woff/libfontforge.a \
+ at ENABLE_WOFF_TRUE@am__append_5 = ttf
+ at ENABLE_WOFF_TRUE@am__append_6 = \
 @ENABLE_WOFF_TRUE@	$(WOFF2_LIBS) \
 @ENABLE_WOFF_TRUE@	$(BROTLI_LIBS)
 
- at USE_BUNDLED_MD5_TRUE@am__append_6 = ../libs/md5/libmd5.a
- at USE_BUNDLED_MD5_FALSE@am__append_7 = $(LIBCRYPTO_LIBS)
- at ENABLE_WOFF_TRUE@am__append_8 = ffwrapper.c ffwrapper.h
- at WIN32_TRUE@am__append_9 = -DTEXLIVEWIN32
- at ENABLE_WOFF_TRUE@am__append_10 = \
- at ENABLE_WOFF_TRUE@	-I$(dvisvgm_srcdir)/libs/ff-woff/fontforge \
- at ENABLE_WOFF_TRUE@	-I$(dvisvgm_srcdir)/libs/ff-woff/inc
-
- at ENABLE_WOFF_TRUE@am__append_11 = \
- at ENABLE_WOFF_TRUE@	$(BROTLI_CFLAGS) \
- at ENABLE_WOFF_TRUE@	$(WOFF2_CFLAGS)
-
- at ENABLE_WOFF_TRUE@@USE_BUNDLED_MD5_TRUE at am__append_12 = -I$(dvisvgm_srcdir)/libs/md5
- at ENABLE_WOFF_TRUE@@USE_BUNDLED_MD5_FALSE at am__append_13 = $(LIBCRYPTO_CFLAGS)
+ at USE_BUNDLED_MD5_TRUE@am__append_7 = ../libs/md5/libmd5.a
+ at USE_BUNDLED_MD5_FALSE@am__append_8 = $(LIBCRYPTO_LIBS)
+ at TEXLIVE_BUILD_TRUE@am__append_9 = $(POTRACE_DEPEND)
+ at ENABLE_WOFF_TRUE@am__append_10 = ttf/libttf.la
+ at WIN32_TRUE@am__append_11 = -DTEXLIVEWIN32
+ at ENABLE_WOFF_TRUE@am__append_12 = $(TTFAUTOHINT_CFLAGS) \
+ at ENABLE_WOFF_TRUE@	$(BROTLI_CFLAGS) $(WOFF2_CFLAGS)
+ at ENABLE_WOFF_TRUE@am__append_13 = $(TTFAUTOHINT_LIBS)
+ at USE_BUNDLED_MD5_TRUE@am__append_14 = -I$(dvisvgm_srcdir)/libs/md5
+ at USE_BUNDLED_MD5_FALSE@am__append_15 = $(LIBCRYPTO_CFLAGS)
 subdir = dvisvgm-src/src
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/dvisvgm-src/m4/ax_gcc_builtin.m4 \
+	$(top_srcdir)/../../m4/ax_cxx_compile_stdcxx.m4 \
 	$(top_srcdir)/../../m4/kpse-common.m4 \
 	$(top_srcdir)/../../m4/kpse-cxx-hack.m4 \
 	$(top_srcdir)/../../m4/kpse-freetype2-flags.m4 \
@@ -139,135 +137,49 @@
 CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
 PROGRAMS = $(bin_PROGRAMS)
-LIBRARIES = $(noinst_LIBRARIES)
-ARFLAGS = cru
-AM_V_AR = $(am__v_AR_ at AM_V@)
-am__v_AR_ = $(am__v_AR_ at AM_DEFAULT_V@)
-am__v_AR_0 = @echo "  AR      " $@;
-am__v_AR_1 = 
-libdvisvgm_a_AR = $(AR) $(ARFLAGS)
-libdvisvgm_a_LIBADD =
-am__libdvisvgm_a_SOURCES_DIST = AGLTable.hpp BasicDVIReader.hpp \
-	BasicDVIReader.cpp Bezier.hpp Bezier.cpp \
-	BgColorSpecialHandler.hpp BgColorSpecialHandler.cpp Bitmap.hpp \
-	Bitmap.cpp BoundingBox.hpp BoundingBox.cpp Calculator.hpp \
-	Calculator.cpp Character.hpp CharMapID.hpp CharMapID.cpp \
-	CLCommandLine.hpp CLCommandLine.cpp CMap.hpp CMap.cpp \
-	CMapManager.hpp CMapManager.cpp CMapReader.hpp CMapReader.cpp \
-	CLOption.hpp Color.hpp Color.cpp ColorSpecialHandler.hpp \
-	ColorSpecialHandler.cpp CommandLine.hpp Directory.hpp \
-	Directory.cpp DVIActions.hpp DLLoader.hpp DLLoader.cpp \
-	DVIReader.hpp DVIReader.cpp DvisvgmSpecialHandler.hpp \
-	DvisvgmSpecialHandler.cpp DVIToSVG.hpp DVIToSVG.cpp \
-	DVIToSVGActions.hpp DVIToSVGActions.cpp EllipticalArc.hpp \
-	EllipticalArc.cpp EmSpecialHandler.hpp EmSpecialHandler.cpp \
-	EncFile.hpp EncFile.cpp EPSFile.hpp EPSFile.cpp EPSToSVG.hpp \
-	FileFinder.hpp FileFinder.cpp FilePath.hpp FilePath.cpp \
-	FileSystem.hpp FileSystem.cpp FixWord.hpp Font.hpp Font.cpp \
-	FontCache.hpp FontCache.cpp FontEncoding.hpp FontEncoding.cpp \
-	FontEngine.hpp FontEngine.cpp FontManager.hpp FontManager.cpp \
-	FontMap.hpp FontMap.cpp FontMetrics.hpp FontMetrics.cpp \
-	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 \
-	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 \
-	macros.hpp MapLine.hpp MapLine.cpp Matrix.hpp Matrix.cpp \
-	MD5HashFunction.hpp Message.hpp Message.cpp \
-	MessageException.hpp MetafontWrapper.hpp MetafontWrapper.cpp \
-	NoPsSpecialHandler.hpp NoPsSpecialHandler.cpp \
-	NumericRanges.hpp Opacity.hpp Opacity.cpp PageRanges.hpp \
-	PageRanges.cpp PageSize.hpp PageSize.cpp Pair.hpp \
-	PapersizeSpecialHandler.hpp PapersizeSpecialHandler.cpp \
-	PathClipper.hpp PathClipper.cpp PDFParser.hpp PDFParser.cpp \
-	PdfSpecialHandler.hpp PdfSpecialHandler.cpp PDFToSVG.hpp \
-	PreScanDVIReader.hpp PreScanDVIReader.cpp Process.hpp \
-	Process.cpp psdefs.cpp PSFilter.hpp PSInterpreter.hpp \
-	PSInterpreter.cpp PSPattern.hpp PSPattern.cpp \
-	PSPreviewFilter.hpp PSPreviewFilter.cpp PsSpecialHandler.hpp \
-	PsSpecialHandler.cpp RangeMap.hpp RangeMap.cpp \
-	ShadingPatch.hpp ShadingPatch.cpp SignalHandler.hpp \
-	SignalHandler.cpp SourceInput.hpp SourceInput.cpp \
-	SpecialActions.hpp SpecialHandler.hpp SpecialManager.hpp \
-	SpecialManager.cpp StreamReader.hpp StreamReader.cpp \
-	StreamWriter.hpp StreamWriter.cpp Subfont.hpp Subfont.cpp \
-	SVGCharHandler.hpp SVGCharHandler.cpp \
-	SVGCharHandlerFactory.hpp SVGCharHandlerFactory.cpp \
-	SVGCharPathHandler.hpp SVGCharPathHandler.cpp \
-	SVGCharTspanTextHandler.hpp SVGCharTspanTextHandler.cpp \
-	SVGElement.hpp SVGElement.cpp SVGOutput.hpp SVGOutput.cpp \
-	SVGSingleCharTextHandler.hpp SVGSingleCharTextHandler.cpp \
-	SVGTree.hpp SVGTree.cpp System.hpp System.cpp \
-	TensorProductPatch.hpp TensorProductPatch.cpp Terminal.hpp \
-	Terminal.cpp TFM.hpp TFM.cpp ToUnicodeMap.hpp ToUnicodeMap.cpp \
-	TpicSpecialHandler.hpp TpicSpecialHandler.cpp \
-	TriangularPatch.hpp TriangularPatch.cpp TrueTypeFont.hpp \
-	TrueTypeFont.cpp TTFAutohint.hpp TTFAutohint.cpp Unicode.hpp \
-	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 XMLParser.hpp XMLParser.cpp XMLString.hpp \
-	XMLString.cpp XXHashFunction.hpp ZLibOutputStream.hpp \
-	ffwrapper.c ffwrapper.h
- at ENABLE_WOFF_TRUE@am__objects_1 = ffwrapper.$(OBJEXT)
-am_libdvisvgm_a_OBJECTS = BasicDVIReader.$(OBJEXT) Bezier.$(OBJEXT) \
-	BgColorSpecialHandler.$(OBJEXT) Bitmap.$(OBJEXT) \
-	BoundingBox.$(OBJEXT) Calculator.$(OBJEXT) CharMapID.$(OBJEXT) \
-	CLCommandLine.$(OBJEXT) CMap.$(OBJEXT) CMapManager.$(OBJEXT) \
-	CMapReader.$(OBJEXT) Color.$(OBJEXT) \
-	ColorSpecialHandler.$(OBJEXT) Directory.$(OBJEXT) \
-	DLLoader.$(OBJEXT) DVIReader.$(OBJEXT) \
-	DvisvgmSpecialHandler.$(OBJEXT) DVIToSVG.$(OBJEXT) \
-	DVIToSVGActions.$(OBJEXT) EllipticalArc.$(OBJEXT) \
-	EmSpecialHandler.$(OBJEXT) EncFile.$(OBJEXT) EPSFile.$(OBJEXT) \
-	FileFinder.$(OBJEXT) FilePath.$(OBJEXT) FileSystem.$(OBJEXT) \
-	Font.$(OBJEXT) FontCache.$(OBJEXT) FontEncoding.$(OBJEXT) \
-	FontEngine.$(OBJEXT) FontManager.$(OBJEXT) FontMap.$(OBJEXT) \
-	FontMetrics.$(OBJEXT) FontWriter.$(OBJEXT) \
-	GFGlyphTracer.$(OBJEXT) GFReader.$(OBJEXT) GFTracer.$(OBJEXT) \
-	Ghostscript.$(OBJEXT) HashFunction.$(OBJEXT) \
-	HtmlSpecialHandler.$(OBJEXT) HyperlinkManager.$(OBJEXT) \
-	ImageToSVG.$(OBJEXT) InputBuffer.$(OBJEXT) \
-	InputReader.$(OBJEXT) JFM.$(OBJEXT) Length.$(OBJEXT) \
-	MapLine.$(OBJEXT) Matrix.$(OBJEXT) Message.$(OBJEXT) \
-	MetafontWrapper.$(OBJEXT) NoPsSpecialHandler.$(OBJEXT) \
-	Opacity.$(OBJEXT) PageRanges.$(OBJEXT) PageSize.$(OBJEXT) \
-	PapersizeSpecialHandler.$(OBJEXT) PathClipper.$(OBJEXT) \
-	PDFParser.$(OBJEXT) PdfSpecialHandler.$(OBJEXT) \
-	PreScanDVIReader.$(OBJEXT) Process.$(OBJEXT) psdefs.$(OBJEXT) \
-	PSInterpreter.$(OBJEXT) PSPattern.$(OBJEXT) \
-	PSPreviewFilter.$(OBJEXT) PsSpecialHandler.$(OBJEXT) \
-	RangeMap.$(OBJEXT) ShadingPatch.$(OBJEXT) \
-	SignalHandler.$(OBJEXT) SourceInput.$(OBJEXT) \
-	SpecialManager.$(OBJEXT) StreamReader.$(OBJEXT) \
-	StreamWriter.$(OBJEXT) Subfont.$(OBJEXT) \
-	SVGCharHandler.$(OBJEXT) SVGCharHandlerFactory.$(OBJEXT) \
-	SVGCharPathHandler.$(OBJEXT) SVGCharTspanTextHandler.$(OBJEXT) \
-	SVGElement.$(OBJEXT) SVGOutput.$(OBJEXT) \
-	SVGSingleCharTextHandler.$(OBJEXT) SVGTree.$(OBJEXT) \
-	System.$(OBJEXT) TensorProductPatch.$(OBJEXT) \
-	Terminal.$(OBJEXT) TFM.$(OBJEXT) ToUnicodeMap.$(OBJEXT) \
-	TpicSpecialHandler.$(OBJEXT) TriangularPatch.$(OBJEXT) \
-	TrueTypeFont.$(OBJEXT) TTFAutohint.$(OBJEXT) Unicode.$(OBJEXT) \
-	utility.$(OBJEXT) VFReader.$(OBJEXT) XMLDocument.$(OBJEXT) \
-	XMLNode.$(OBJEXT) XMLParser.$(OBJEXT) XMLString.$(OBJEXT) \
-	$(am__objects_1)
-libdvisvgm_a_OBJECTS = $(am_libdvisvgm_a_OBJECTS)
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libdvisvgm_la_DEPENDENCIES = fonts/libbase14fonts.la \
+	optimizer/liboptimizer.la $(am__append_10)
+am_libdvisvgm_la_OBJECTS = BasicDVIReader.lo Bezier.lo \
+	BgColorSpecialHandler.lo Bitmap.lo BoundingBox.lo \
+	Calculator.lo CharMapID.lo CLCommandLine.lo CMap.lo \
+	CMapManager.lo CMapReader.lo Color.lo ColorSpecialHandler.lo \
+	Directory.lo DLLoader.lo DVIReader.lo DvisvgmSpecialHandler.lo \
+	DVIToSVG.lo DVIToSVGActions.lo EllipticalArc.lo \
+	EmSpecialHandler.lo EncFile.lo EPSFile.lo FileFinder.lo \
+	FilePath.lo FileSystem.lo Font.lo FontCache.lo FontEncoding.lo \
+	FontEngine.lo FontManager.lo FontMap.lo FontMetrics.lo \
+	FontWriter.lo GFGlyphTracer.lo GFReader.lo GFTracer.lo \
+	Ghostscript.lo HashFunction.lo HtmlSpecialHandler.lo \
+	HyperlinkManager.lo ImageToSVG.lo InputBuffer.lo \
+	InputReader.lo JFM.lo Length.lo MapLine.lo Matrix.lo \
+	Message.lo MetafontWrapper.lo NoPsSpecialHandler.lo Opacity.lo \
+	PageRanges.lo PageSize.lo PapersizeSpecialHandler.lo \
+	PathClipper.lo PDFHandler.lo PDFParser.lo PdfSpecialHandler.lo \
+	PDFToSVG.lo PreScanDVIReader.lo Process.lo psdefs.lo \
+	PSInterpreter.lo PSPattern.lo PSPreviewFilter.lo \
+	PsSpecialHandler.lo RangeMap.lo ShadingPatch.lo \
+	SignalHandler.lo SourceInput.lo SpecialManager.lo \
+	StreamReader.lo StreamWriter.lo Subfont.lo SVGCharHandler.lo \
+	SVGCharHandlerFactory.lo SVGCharPathHandler.lo \
+	SVGCharTspanTextHandler.lo SVGElement.lo SVGOutput.lo \
+	SVGSingleCharTextHandler.lo SVGTree.lo System.lo \
+	TensorProductPatch.lo Terminal.lo TFM.lo ToUnicodeMap.lo \
+	TpicSpecialHandler.lo TriangularPatch.lo Unicode.lo utility.lo \
+	VFReader.lo XMLDocument.lo XMLNode.lo XMLParser.lo \
+	XMLString.lo
+libdvisvgm_la_OBJECTS = $(am_libdvisvgm_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
 am_dvisvgm_OBJECTS = dvisvgm.$(OBJEXT)
 dvisvgm_OBJECTS = $(am_dvisvgm_OBJECTS)
 am__DEPENDENCIES_1 =
 am__DEPENDENCIES_2 = $(am__append_4)
 am__DEPENDENCIES_3 = $(am__append_2)
- at ENABLE_WOFF_TRUE@am__DEPENDENCIES_4 = ../libs/ff-woff/libfontforge.a \
- at ENABLE_WOFF_TRUE@	$(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3)
-AM_V_lt = $(am__v_lt_ at AM_V@)
-am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-am__v_lt_1 = 
+ at ENABLE_WOFF_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_2) \
+ at ENABLE_WOFF_TRUE@	$(am__DEPENDENCIES_3)
 AM_V_P = $(am__v_P_ at AM_V@)
 am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -283,60 +195,79 @@
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/../../build-aux/depcomp
 am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = ./$(DEPDIR)/BasicDVIReader.Po \
-	./$(DEPDIR)/Bezier.Po ./$(DEPDIR)/BgColorSpecialHandler.Po \
-	./$(DEPDIR)/Bitmap.Po ./$(DEPDIR)/BoundingBox.Po \
-	./$(DEPDIR)/CLCommandLine.Po ./$(DEPDIR)/CMap.Po \
-	./$(DEPDIR)/CMapManager.Po ./$(DEPDIR)/CMapReader.Po \
-	./$(DEPDIR)/Calculator.Po ./$(DEPDIR)/CharMapID.Po \
-	./$(DEPDIR)/Color.Po ./$(DEPDIR)/ColorSpecialHandler.Po \
-	./$(DEPDIR)/DLLoader.Po ./$(DEPDIR)/DVIReader.Po \
-	./$(DEPDIR)/DVIToSVG.Po ./$(DEPDIR)/DVIToSVGActions.Po \
-	./$(DEPDIR)/Directory.Po ./$(DEPDIR)/DvisvgmSpecialHandler.Po \
-	./$(DEPDIR)/EPSFile.Po ./$(DEPDIR)/EllipticalArc.Po \
-	./$(DEPDIR)/EmSpecialHandler.Po ./$(DEPDIR)/EncFile.Po \
-	./$(DEPDIR)/FileFinder.Po ./$(DEPDIR)/FilePath.Po \
-	./$(DEPDIR)/FileSystem.Po ./$(DEPDIR)/Font.Po \
-	./$(DEPDIR)/FontCache.Po ./$(DEPDIR)/FontEncoding.Po \
-	./$(DEPDIR)/FontEngine.Po ./$(DEPDIR)/FontManager.Po \
-	./$(DEPDIR)/FontMap.Po ./$(DEPDIR)/FontMetrics.Po \
-	./$(DEPDIR)/FontWriter.Po ./$(DEPDIR)/GFGlyphTracer.Po \
-	./$(DEPDIR)/GFReader.Po ./$(DEPDIR)/GFTracer.Po \
-	./$(DEPDIR)/Ghostscript.Po ./$(DEPDIR)/HashFunction.Po \
-	./$(DEPDIR)/HtmlSpecialHandler.Po \
-	./$(DEPDIR)/HyperlinkManager.Po ./$(DEPDIR)/ImageToSVG.Po \
-	./$(DEPDIR)/InputBuffer.Po ./$(DEPDIR)/InputReader.Po \
-	./$(DEPDIR)/JFM.Po ./$(DEPDIR)/Length.Po \
-	./$(DEPDIR)/MapLine.Po ./$(DEPDIR)/Matrix.Po \
-	./$(DEPDIR)/Message.Po ./$(DEPDIR)/MetafontWrapper.Po \
-	./$(DEPDIR)/NoPsSpecialHandler.Po ./$(DEPDIR)/Opacity.Po \
-	./$(DEPDIR)/PDFParser.Po ./$(DEPDIR)/PSInterpreter.Po \
-	./$(DEPDIR)/PSPattern.Po ./$(DEPDIR)/PSPreviewFilter.Po \
-	./$(DEPDIR)/PageRanges.Po ./$(DEPDIR)/PageSize.Po \
-	./$(DEPDIR)/PapersizeSpecialHandler.Po \
-	./$(DEPDIR)/PathClipper.Po ./$(DEPDIR)/PdfSpecialHandler.Po \
-	./$(DEPDIR)/PreScanDVIReader.Po ./$(DEPDIR)/Process.Po \
-	./$(DEPDIR)/PsSpecialHandler.Po ./$(DEPDIR)/RangeMap.Po \
-	./$(DEPDIR)/SVGCharHandler.Po \
-	./$(DEPDIR)/SVGCharHandlerFactory.Po \
-	./$(DEPDIR)/SVGCharPathHandler.Po \
-	./$(DEPDIR)/SVGCharTspanTextHandler.Po \
-	./$(DEPDIR)/SVGElement.Po ./$(DEPDIR)/SVGOutput.Po \
-	./$(DEPDIR)/SVGSingleCharTextHandler.Po ./$(DEPDIR)/SVGTree.Po \
-	./$(DEPDIR)/ShadingPatch.Po ./$(DEPDIR)/SignalHandler.Po \
-	./$(DEPDIR)/SourceInput.Po ./$(DEPDIR)/SpecialManager.Po \
-	./$(DEPDIR)/StreamReader.Po ./$(DEPDIR)/StreamWriter.Po \
-	./$(DEPDIR)/Subfont.Po ./$(DEPDIR)/System.Po \
-	./$(DEPDIR)/TFM.Po ./$(DEPDIR)/TTFAutohint.Po \
-	./$(DEPDIR)/TensorProductPatch.Po ./$(DEPDIR)/Terminal.Po \
-	./$(DEPDIR)/ToUnicodeMap.Po ./$(DEPDIR)/TpicSpecialHandler.Po \
-	./$(DEPDIR)/TriangularPatch.Po ./$(DEPDIR)/TrueTypeFont.Po \
-	./$(DEPDIR)/Unicode.Po ./$(DEPDIR)/VFReader.Po \
-	./$(DEPDIR)/XMLDocument.Po ./$(DEPDIR)/XMLNode.Po \
-	./$(DEPDIR)/XMLParser.Po ./$(DEPDIR)/XMLString.Po \
-	./$(DEPDIR)/dvisvgm.Po ./$(DEPDIR)/ffwrapper.Po \
-	./$(DEPDIR)/psdefs.Po ./$(DEPDIR)/utility.Po
+am__depfiles_remade = ./$(DEPDIR)/BasicDVIReader.Plo \
+	./$(DEPDIR)/Bezier.Plo ./$(DEPDIR)/BgColorSpecialHandler.Plo \
+	./$(DEPDIR)/Bitmap.Plo ./$(DEPDIR)/BoundingBox.Plo \
+	./$(DEPDIR)/CLCommandLine.Plo ./$(DEPDIR)/CMap.Plo \
+	./$(DEPDIR)/CMapManager.Plo ./$(DEPDIR)/CMapReader.Plo \
+	./$(DEPDIR)/Calculator.Plo ./$(DEPDIR)/CharMapID.Plo \
+	./$(DEPDIR)/Color.Plo ./$(DEPDIR)/ColorSpecialHandler.Plo \
+	./$(DEPDIR)/DLLoader.Plo ./$(DEPDIR)/DVIReader.Plo \
+	./$(DEPDIR)/DVIToSVG.Plo ./$(DEPDIR)/DVIToSVGActions.Plo \
+	./$(DEPDIR)/Directory.Plo \
+	./$(DEPDIR)/DvisvgmSpecialHandler.Plo ./$(DEPDIR)/EPSFile.Plo \
+	./$(DEPDIR)/EllipticalArc.Plo ./$(DEPDIR)/EmSpecialHandler.Plo \
+	./$(DEPDIR)/EncFile.Plo ./$(DEPDIR)/FileFinder.Plo \
+	./$(DEPDIR)/FilePath.Plo ./$(DEPDIR)/FileSystem.Plo \
+	./$(DEPDIR)/Font.Plo ./$(DEPDIR)/FontCache.Plo \
+	./$(DEPDIR)/FontEncoding.Plo ./$(DEPDIR)/FontEngine.Plo \
+	./$(DEPDIR)/FontManager.Plo ./$(DEPDIR)/FontMap.Plo \
+	./$(DEPDIR)/FontMetrics.Plo ./$(DEPDIR)/FontWriter.Plo \
+	./$(DEPDIR)/GFGlyphTracer.Plo ./$(DEPDIR)/GFReader.Plo \
+	./$(DEPDIR)/GFTracer.Plo ./$(DEPDIR)/Ghostscript.Plo \
+	./$(DEPDIR)/HashFunction.Plo \
+	./$(DEPDIR)/HtmlSpecialHandler.Plo \
+	./$(DEPDIR)/HyperlinkManager.Plo ./$(DEPDIR)/ImageToSVG.Plo \
+	./$(DEPDIR)/InputBuffer.Plo ./$(DEPDIR)/InputReader.Plo \
+	./$(DEPDIR)/JFM.Plo ./$(DEPDIR)/Length.Plo \
+	./$(DEPDIR)/MapLine.Plo ./$(DEPDIR)/Matrix.Plo \
+	./$(DEPDIR)/Message.Plo ./$(DEPDIR)/MetafontWrapper.Plo \
+	./$(DEPDIR)/NoPsSpecialHandler.Plo ./$(DEPDIR)/Opacity.Plo \
+	./$(DEPDIR)/PDFHandler.Plo ./$(DEPDIR)/PDFParser.Plo \
+	./$(DEPDIR)/PDFToSVG.Plo ./$(DEPDIR)/PSInterpreter.Plo \
+	./$(DEPDIR)/PSPattern.Plo ./$(DEPDIR)/PSPreviewFilter.Plo \
+	./$(DEPDIR)/PageRanges.Plo ./$(DEPDIR)/PageSize.Plo \
+	./$(DEPDIR)/PapersizeSpecialHandler.Plo \
+	./$(DEPDIR)/PathClipper.Plo ./$(DEPDIR)/PdfSpecialHandler.Plo \
+	./$(DEPDIR)/PreScanDVIReader.Plo ./$(DEPDIR)/Process.Plo \
+	./$(DEPDIR)/PsSpecialHandler.Plo ./$(DEPDIR)/RangeMap.Plo \
+	./$(DEPDIR)/SVGCharHandler.Plo \
+	./$(DEPDIR)/SVGCharHandlerFactory.Plo \
+	./$(DEPDIR)/SVGCharPathHandler.Plo \
+	./$(DEPDIR)/SVGCharTspanTextHandler.Plo \
+	./$(DEPDIR)/SVGElement.Plo ./$(DEPDIR)/SVGOutput.Plo \
+	./$(DEPDIR)/SVGSingleCharTextHandler.Plo \
+	./$(DEPDIR)/SVGTree.Plo ./$(DEPDIR)/ShadingPatch.Plo \
+	./$(DEPDIR)/SignalHandler.Plo ./$(DEPDIR)/SourceInput.Plo \
+	./$(DEPDIR)/SpecialManager.Plo ./$(DEPDIR)/StreamReader.Plo \
+	./$(DEPDIR)/StreamWriter.Plo ./$(DEPDIR)/Subfont.Plo \
+	./$(DEPDIR)/System.Plo ./$(DEPDIR)/TFM.Plo \
+	./$(DEPDIR)/TensorProductPatch.Plo ./$(DEPDIR)/Terminal.Plo \
+	./$(DEPDIR)/ToUnicodeMap.Plo \
+	./$(DEPDIR)/TpicSpecialHandler.Plo \
+	./$(DEPDIR)/TriangularPatch.Plo ./$(DEPDIR)/Unicode.Plo \
+	./$(DEPDIR)/VFReader.Plo ./$(DEPDIR)/XMLDocument.Plo \
+	./$(DEPDIR)/XMLNode.Plo ./$(DEPDIR)/XMLParser.Plo \
+	./$(DEPDIR)/XMLString.Plo ./$(DEPDIR)/dvisvgm.Po \
+	./$(DEPDIR)/psdefs.Plo ./$(DEPDIR)/utility.Plo
 am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -355,25 +286,8 @@
 am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
-	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-	$(AM_CXXFLAGS) $(CXXFLAGS)
-AM_V_CXX = $(am__v_CXX_ at AM_V@)
-am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
-am__v_CXX_0 = @echo "  CXX     " $@;
-am__v_CXX_1 = 
-CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
-	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
-am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
-am__v_CXXLD_0 = @echo "  CXXLD   " $@;
-am__v_CXXLD_1 = 
-SOURCES = $(libdvisvgm_a_SOURCES) $(dvisvgm_SOURCES)
-DIST_SOURCES = $(am__libdvisvgm_a_SOURCES_DIST) $(dvisvgm_SOURCES)
+SOURCES = $(libdvisvgm_la_SOURCES) $(dvisvgm_SOURCES)
+DIST_SOURCES = $(libdvisvgm_la_SOURCES) $(dvisvgm_SOURCES)
 RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
 	ctags-recursive dvi-recursive html-recursive info-recursive \
 	install-data-recursive install-dvi-recursive \
@@ -412,7 +326,7 @@
   unique=`for i in $$list; do \
     if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
   done | $(am__uniquify_input)`
-DIST_SUBDIRS = $(SUBDIRS)
+DIST_SUBDIRS = fonts optimizer ttf
 am__DIST_COMMON = $(srcdir)/../libs/defs.am $(srcdir)/Makefile.in \
 	$(srcdir)/version.hpp.in $(top_srcdir)/../../build-aux/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -445,10 +359,7 @@
 AMTAR = @AMTAR@
 AM_CPPFLAGS = @AM_CPPFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AM_LDFLAGS = \
-	$(KPSE_LIBS) \
-	$(CODE_COVERAGE_LDFLAGS)
-
+AM_LDFLAGS = $(KPSE_LIBS) $(CODE_COVERAGE_LDFLAGS) $(am__append_13)
 AR = @AR@
 AS = @AS@
 AUTOCONF = @AUTOCONF@
@@ -600,103 +511,174 @@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-noinst_LIBRARIES = libdvisvgm.a
-SUBDIRS = optimizer
+noinst_LTLIBRARIES = libdvisvgm.la
+SUBDIRS = fonts optimizer ttf $(am__append_5)
 dvisvgm_SOURCES = \
 	CommandLine.hpp \
 	dvisvgm.cpp
 
+
+# Gets automake warnings:
+#   dvisvgm-src/src/../libs/defs.am:9: warning: POTRACE_LIBS was already defined in condition TRUE, which includes condition !HAVE_POTRACE and !TEXLIVE_BUILD ...
+#   dvisvgm-src/src/Makefile.am:14:   'dvisvgm-src/src/../libs/defs.am' included from here
+#   configure.ac:51: ... 'POTRACE_LIBS' previously defined here
+#if !TEXLIVE_BUILD
+#POTRACE_CFLAGS = -I$(dvisvgm_srcdir)/libs/potrace
+#POTRACE_LIBS = ../libs/potrace/libpotrace.a
+#else
 @HAVE_POTRACE_FALSE at POTRACE_CFLAGS = $(POTRACE_INCLUDES)
 @HAVE_XXHASH_FALSE at XXHASH_CFLAGS = -I$(dvisvgm_srcdir)/libs/xxHash
 @HAVE_XXHASH_FALSE at XXHASH_LIBS = ../libs/xxHash/libxxhash.a
-dvisvgm_LDADD = $(noinst_LIBRARIES) optimizer/liboptimizer.a \
-	../libs/clipper/libclipper.a $(POTRACE_LIBS) $(XXHASH_LIBS) \
-	$(am__append_5) $(am__append_6) $(am__append_7) \
-	$(KPATHSEA_LIBS) $(FREETYPE2_LIBS) $(FONTFORGE_LIBS) \
+dvisvgm_LDADD = $(noinst_LTLIBRARIES) ../libs/clipper/libclipper.a \
+	$(POTRACE_LIBS) $(XXHASH_LIBS) $(am__append_6) $(am__append_7) \
+	$(am__append_8) $(KPATHSEA_LIBS) $(FREETYPE2_LIBS) \
 	$(ZLIB_LIBS) $(LIBGS_LIBS)
-dvisvgm_DEPENDENCIES = $(noinst_LIBRARIES) $(KPATHSEA_DEPEND) \
-	$(ZLIB_DEPEND) $(FREETYPE2_DEPEND) $(POTRACE_DEPEND)
-libdvisvgm_a_SOURCES = AGLTable.hpp BasicDVIReader.hpp \
-	BasicDVIReader.cpp Bezier.hpp Bezier.cpp \
-	BgColorSpecialHandler.hpp BgColorSpecialHandler.cpp Bitmap.hpp \
-	Bitmap.cpp BoundingBox.hpp BoundingBox.cpp Calculator.hpp \
-	Calculator.cpp Character.hpp CharMapID.hpp CharMapID.cpp \
-	CLCommandLine.hpp CLCommandLine.cpp CMap.hpp CMap.cpp \
-	CMapManager.hpp CMapManager.cpp CMapReader.hpp CMapReader.cpp \
-	CLOption.hpp Color.hpp Color.cpp ColorSpecialHandler.hpp \
-	ColorSpecialHandler.cpp CommandLine.hpp Directory.hpp \
-	Directory.cpp DVIActions.hpp DLLoader.hpp DLLoader.cpp \
-	DVIReader.hpp DVIReader.cpp DvisvgmSpecialHandler.hpp \
-	DvisvgmSpecialHandler.cpp DVIToSVG.hpp DVIToSVG.cpp \
-	DVIToSVGActions.hpp DVIToSVGActions.cpp EllipticalArc.hpp \
-	EllipticalArc.cpp EmSpecialHandler.hpp EmSpecialHandler.cpp \
-	EncFile.hpp EncFile.cpp EPSFile.hpp EPSFile.cpp EPSToSVG.hpp \
-	FileFinder.hpp FileFinder.cpp FilePath.hpp FilePath.cpp \
-	FileSystem.hpp FileSystem.cpp FixWord.hpp Font.hpp Font.cpp \
-	FontCache.hpp FontCache.cpp FontEncoding.hpp FontEncoding.cpp \
-	FontEngine.hpp FontEngine.cpp FontManager.hpp FontManager.cpp \
-	FontMap.hpp FontMap.cpp FontMetrics.hpp FontMetrics.cpp \
-	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 \
-	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 \
-	macros.hpp MapLine.hpp MapLine.cpp Matrix.hpp Matrix.cpp \
-	MD5HashFunction.hpp Message.hpp Message.cpp \
-	MessageException.hpp MetafontWrapper.hpp MetafontWrapper.cpp \
-	NoPsSpecialHandler.hpp NoPsSpecialHandler.cpp \
-	NumericRanges.hpp Opacity.hpp Opacity.cpp PageRanges.hpp \
-	PageRanges.cpp PageSize.hpp PageSize.cpp Pair.hpp \
-	PapersizeSpecialHandler.hpp PapersizeSpecialHandler.cpp \
-	PathClipper.hpp PathClipper.cpp PDFParser.hpp PDFParser.cpp \
-	PdfSpecialHandler.hpp PdfSpecialHandler.cpp PDFToSVG.hpp \
-	PreScanDVIReader.hpp PreScanDVIReader.cpp Process.hpp \
-	Process.cpp psdefs.cpp PSFilter.hpp PSInterpreter.hpp \
-	PSInterpreter.cpp PSPattern.hpp PSPattern.cpp \
-	PSPreviewFilter.hpp PSPreviewFilter.cpp PsSpecialHandler.hpp \
-	PsSpecialHandler.cpp RangeMap.hpp RangeMap.cpp \
-	ShadingPatch.hpp ShadingPatch.cpp SignalHandler.hpp \
-	SignalHandler.cpp SourceInput.hpp SourceInput.cpp \
-	SpecialActions.hpp SpecialHandler.hpp SpecialManager.hpp \
-	SpecialManager.cpp StreamReader.hpp StreamReader.cpp \
-	StreamWriter.hpp StreamWriter.cpp Subfont.hpp Subfont.cpp \
-	SVGCharHandler.hpp SVGCharHandler.cpp \
-	SVGCharHandlerFactory.hpp SVGCharHandlerFactory.cpp \
-	SVGCharPathHandler.hpp SVGCharPathHandler.cpp \
-	SVGCharTspanTextHandler.hpp SVGCharTspanTextHandler.cpp \
-	SVGElement.hpp SVGElement.cpp SVGOutput.hpp SVGOutput.cpp \
+dvisvgm_DEPENDENCIES = $(noinst_LTLIBRARIES) $(KPATHSEA_DEPEND) \
+	$(ZLIB_DEPEND) $(FREETYPE2_DEPEND) $(am__append_9)
+libdvisvgm_la_SOURCES = \
+	AGLTable.hpp \
+	BasicDVIReader.hpp           BasicDVIReader.cpp \
+	Bezier.hpp                   Bezier.cpp \
+	BgColorSpecialHandler.hpp    BgColorSpecialHandler.cpp \
+	Bitmap.hpp                   Bitmap.cpp \
+	BoundingBox.hpp              BoundingBox.cpp \
+	Calculator.hpp               Calculator.cpp \
+	Character.hpp \
+	CharMapID.hpp                CharMapID.cpp \
+	CLCommandLine.hpp            CLCommandLine.cpp \
+	CMap.hpp                     CMap.cpp \
+	CMapManager.hpp              CMapManager.cpp \
+	CMapReader.hpp               CMapReader.cpp \
+	CLOption.hpp \
+	Color.hpp                    Color.cpp \
+	ColorSpecialHandler.hpp      ColorSpecialHandler.cpp \
+	CommandLine.hpp \
+	Directory.hpp                Directory.cpp \
+	DVIActions.hpp \
+	DLLoader.hpp                 DLLoader.cpp \
+	DVIReader.hpp                DVIReader.cpp \
+	DvisvgmSpecialHandler.hpp    DvisvgmSpecialHandler.cpp \
+	DVIToSVG.hpp                 DVIToSVG.cpp \
+	DVIToSVGActions.hpp          DVIToSVGActions.cpp \
+	EllipticalArc.hpp            EllipticalArc.cpp \
+	EmSpecialHandler.hpp         EmSpecialHandler.cpp \
+	EncFile.hpp                  EncFile.cpp \
+	EPSFile.hpp                  EPSFile.cpp \
+	EPSToSVG.hpp \
+	FileFinder.hpp               FileFinder.cpp \
+	FilePath.hpp                 FilePath.cpp \
+	FileSystem.hpp               FileSystem.cpp \
+	FixWord.hpp \
+	Font.hpp                     Font.cpp \
+	FontCache.hpp                FontCache.cpp \
+	FontEncoding.hpp             FontEncoding.cpp \
+	FontEngine.hpp               FontEngine.cpp \
+	FontManager.hpp              FontManager.cpp \
+	FontMap.hpp                  FontMap.cpp \
+	FontMetrics.hpp              FontMetrics.cpp \
+	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 \
+	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 \
+	macros.hpp \
+	MapLine.hpp                  MapLine.cpp \
+	Matrix.hpp                   Matrix.cpp \
+	MD5HashFunction.hpp \
+	Message.hpp                  Message.cpp \
+	MessageException.hpp \
+	MetafontWrapper.hpp          MetafontWrapper.cpp \
+	NoPsSpecialHandler.hpp       NoPsSpecialHandler.cpp \
+	NumericRanges.hpp \
+	Opacity.hpp                  Opacity.cpp \
+	PageRanges.hpp               PageRanges.cpp \
+	PageSize.hpp                 PageSize.cpp \
+	Pair.hpp \
+	PapersizeSpecialHandler.hpp  PapersizeSpecialHandler.cpp \
+	PathClipper.hpp              PathClipper.cpp \
+	PDFHandler.hpp               PDFHandler.cpp \
+	PDFParser.hpp                PDFParser.cpp \
+	PdfSpecialHandler.hpp        PdfSpecialHandler.cpp \
+	PDFToSVG.hpp                 PDFToSVG.cpp \
+	PreScanDVIReader.hpp         PreScanDVIReader.cpp \
+	Process.hpp                  Process.cpp \
+	psdefs.cpp \
+	PSFilter.hpp \
+	PSInterpreter.hpp            PSInterpreter.cpp \
+	PSPattern.hpp                PSPattern.cpp \
+	PSPreviewFilter.hpp          PSPreviewFilter.cpp \
+	PsSpecialHandler.hpp         PsSpecialHandler.cpp \
+	RangeMap.hpp                 RangeMap.cpp \
+	ShadingPatch.hpp             ShadingPatch.cpp \
+	SignalHandler.hpp            SignalHandler.cpp \
+	SourceInput.hpp              SourceInput.cpp \
+	SpecialActions.hpp \
+	SpecialHandler.hpp \
+	SpecialManager.hpp           SpecialManager.cpp \
+	StreamReader.hpp             StreamReader.cpp \
+	StreamWriter.hpp             StreamWriter.cpp \
+	Subfont.hpp                  Subfont.cpp \
+	SVGCharHandler.hpp           SVGCharHandler.cpp \
+	SVGCharHandlerFactory.hpp    SVGCharHandlerFactory.cpp \
+	SVGCharPathHandler.hpp       SVGCharPathHandler.cpp \
+	SVGCharTspanTextHandler.hpp  SVGCharTspanTextHandler.cpp \
+	SVGElement.hpp               SVGElement.cpp \
+	SVGOutput.hpp                SVGOutput.cpp \
 	SVGSingleCharTextHandler.hpp SVGSingleCharTextHandler.cpp \
-	SVGTree.hpp SVGTree.cpp System.hpp System.cpp \
-	TensorProductPatch.hpp TensorProductPatch.cpp Terminal.hpp \
-	Terminal.cpp TFM.hpp TFM.cpp ToUnicodeMap.hpp ToUnicodeMap.cpp \
-	TpicSpecialHandler.hpp TpicSpecialHandler.cpp \
-	TriangularPatch.hpp TriangularPatch.cpp TrueTypeFont.hpp \
-	TrueTypeFont.cpp TTFAutohint.hpp TTFAutohint.cpp Unicode.hpp \
-	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 XMLParser.hpp XMLParser.cpp XMLString.hpp \
-	XMLString.cpp XXHashFunction.hpp ZLibOutputStream.hpp \
-	$(am__append_8)
+	SVGTree.hpp                  SVGTree.cpp \
+	System.hpp                   System.cpp \
+	TensorProductPatch.hpp       TensorProductPatch.cpp \
+	Terminal.hpp                 Terminal.cpp \
+	TFM.hpp                      TFM.cpp \
+	ToUnicodeMap.hpp             ToUnicodeMap.cpp \
+	TpicSpecialHandler.hpp       TpicSpecialHandler.cpp \
+	TriangularPatch.hpp          TriangularPatch.cpp \
+	Unicode.hpp                  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 \
+	XMLParser.hpp                XMLParser.cpp \
+	XMLString.hpp                XMLString.cpp \
+	XXHashFunction.hpp \
+	ZLibOutputStream.hpp
+
+libdvisvgm_la_LIBADD = fonts/libbase14fonts.la \
+	optimizer/liboptimizer.la $(am__append_10)
 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)
+AM_CFLAGS = $(WARNING_CFLAGS) \
+	$(ZLIB_INCLUDES) \
+	$(CODE_COVERAGE_CFLAGS)
+
 AM_CXXFLAGS = $(WARNING_CXXFLAGS) -Wnon-virtual-dtor \
 	-I$(dvisvgm_srcdir)/libs/clipper \
 	-I$(dvisvgm_srcdir)/libs/variant/include $(POTRACE_CFLAGS) \
 	$(XXHASH_CFLAGS) $(KPATHSEA_INCLUDES) $(POTRACE_INCLUDES) \
 	$(FREETYPE2_INCLUDES) $(ZLIB_INCLUDES) $(LIBGS_INCLUDES) \
-	$(CODE_COVERAGE_CFLAGS) $(am__append_9) $(am__append_11) \
-	$(am__append_12) $(am__append_13)
+	$(CODE_COVERAGE_CFLAGS) $(am__append_11) $(am__append_12) \
+	$(am__append_14) $(am__append_15)
 CLEANFILES = *.gcda *.gcno
 all: all-recursive
 
 .SUFFIXES:
-.SUFFIXES: .c .cpp .lo .o .obj
+.SUFFIXES: .cpp .lo .o .obj
 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../libs/defs.am $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
@@ -779,13 +761,19 @@
 	echo " rm -f" $$list; \
 	rm -f $$list
 
-clean-noinstLIBRARIES:
-	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
 
-libdvisvgm.a: $(libdvisvgm_a_OBJECTS) $(libdvisvgm_a_DEPENDENCIES) $(EXTRA_libdvisvgm_a_DEPENDENCIES) 
-	$(AM_V_at)-rm -f libdvisvgm.a
-	$(AM_V_AR)$(libdvisvgm_a_AR) libdvisvgm.a $(libdvisvgm_a_OBJECTS) $(libdvisvgm_a_LIBADD)
-	$(AM_V_at)$(RANLIB) libdvisvgm.a
+libdvisvgm.la: $(libdvisvgm_la_OBJECTS) $(libdvisvgm_la_DEPENDENCIES) $(EXTRA_libdvisvgm_la_DEPENDENCIES) 
+	$(AM_V_CXXLD)$(CXXLINK)  $(libdvisvgm_la_OBJECTS) $(libdvisvgm_la_LIBADD) $(LIBS)
 
 dvisvgm$(EXEEXT): $(dvisvgm_OBJECTS) $(dvisvgm_DEPENDENCIES) $(EXTRA_dvisvgm_DEPENDENCIES) 
 	@rm -f dvisvgm$(EXEEXT)
@@ -797,105 +785,104 @@
 distclean-compile:
 	-rm -f *.tab.c
 
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/BasicDVIReader.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Bezier.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/BgColorSpecialHandler.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Bitmap.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/BoundingBox.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CLCommandLine.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CMap.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CMapManager.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CMapReader.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Calculator.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CharMapID.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Color.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ColorSpecialHandler.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/DLLoader.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/DVIReader.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/DVIToSVG.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/DVIToSVGActions.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Directory.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/DvisvgmSpecialHandler.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/EPSFile.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/EllipticalArc.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/EmSpecialHandler.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/EncFile.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FileFinder.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FilePath.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FileSystem.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Font.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FontCache.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FontEncoding.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FontEngine.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FontManager.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FontMap.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FontMetrics.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FontWriter.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GFGlyphTracer.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GFReader.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GFTracer.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Ghostscript.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/HashFunction.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/HtmlSpecialHandler.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/HyperlinkManager.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ImageToSVG.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/InputBuffer.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/InputReader.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/JFM.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Length.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MapLine.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Matrix.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Message.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MetafontWrapper.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NoPsSpecialHandler.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Opacity.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PDFParser.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PSInterpreter.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PSPattern.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PSPreviewFilter.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PageRanges.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PageSize.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PapersizeSpecialHandler.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PathClipper.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PdfSpecialHandler.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PreScanDVIReader.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Process.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PsSpecialHandler.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/RangeMap.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGCharHandler.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGCharHandlerFactory.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGCharPathHandler.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGCharTspanTextHandler.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGElement.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGOutput.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGSingleCharTextHandler.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGTree.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ShadingPatch.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SignalHandler.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SourceInput.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SpecialManager.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/StreamReader.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/StreamWriter.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Subfont.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/System.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TFM.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TTFAutohint.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TensorProductPatch.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Terminal.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ToUnicodeMap.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TpicSpecialHandler.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TriangularPatch.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TrueTypeFont.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Unicode.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/VFReader.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/XMLDocument.Po at am__quote@ # am--include-marker
- at 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
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/XMLString.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/BasicDVIReader.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Bezier.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/BgColorSpecialHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Bitmap.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/BoundingBox.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CLCommandLine.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CMap.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CMapManager.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CMapReader.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Calculator.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/CharMapID.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Color.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ColorSpecialHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/DLLoader.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/DVIReader.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/DVIToSVG.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/DVIToSVGActions.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Directory.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/DvisvgmSpecialHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/EPSFile.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/EllipticalArc.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/EmSpecialHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/EncFile.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FileFinder.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FilePath.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FileSystem.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Font.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FontCache.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FontEncoding.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FontEngine.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FontManager.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FontMap.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FontMetrics.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/FontWriter.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GFGlyphTracer.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GFReader.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/GFTracer.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Ghostscript.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/HashFunction.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/HtmlSpecialHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/HyperlinkManager.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ImageToSVG.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/InputBuffer.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/InputReader.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/JFM.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Length.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MapLine.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Matrix.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Message.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MetafontWrapper.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/NoPsSpecialHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Opacity.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PDFHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PDFParser.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PDFToSVG.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PSInterpreter.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PSPattern.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PSPreviewFilter.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PageRanges.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PageSize.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PapersizeSpecialHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PathClipper.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PdfSpecialHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PreScanDVIReader.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Process.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/PsSpecialHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/RangeMap.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGCharHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGCharHandlerFactory.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGCharPathHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGCharTspanTextHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGElement.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGOutput.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGSingleCharTextHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SVGTree.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ShadingPatch.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SignalHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SourceInput.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SpecialManager.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/StreamReader.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/StreamWriter.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Subfont.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/System.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TFM.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TensorProductPatch.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Terminal.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ToUnicodeMap.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TpicSpecialHandler.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TriangularPatch.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Unicode.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/VFReader.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/XMLDocument.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/XMLNode.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/XMLParser.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/XMLString.Plo at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dvisvgm.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ffwrapper.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/psdefs.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/utility.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/psdefs.Plo at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/utility.Plo at am__quote@ # am--include-marker
 
 $(am__depfiles_remade):
 	@$(MKDIR_P) $(@D)
@@ -903,30 +890,6 @@
 
 am--depfiles: $(am__depfiles_remade)
 
-.c.o:
- at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
- at am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
-
-.c.obj:
- at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
- at am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
- at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
- at am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
-
 .cpp.o:
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
 @am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
@@ -1115,7 +1078,7 @@
 	done
 check-am: all-am
 check: check-recursive
-all-am: Makefile $(PROGRAMS) $(LIBRARIES)
+all-am: Makefile $(PROGRAMS) $(LTLIBRARIES)
 installdirs: installdirs-recursive
 installdirs-am:
 	for dir in "$(DESTDIR)$(bindir)"; do \
@@ -1155,108 +1118,107 @@
 clean: clean-recursive
 
 clean-am: clean-binPROGRAMS clean-generic clean-libtool \
-	clean-noinstLIBRARIES mostlyclean-am
+	clean-noinstLTLIBRARIES mostlyclean-am
 
 distclean: distclean-recursive
-		-rm -f ./$(DEPDIR)/BasicDVIReader.Po
-	-rm -f ./$(DEPDIR)/Bezier.Po
-	-rm -f ./$(DEPDIR)/BgColorSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/Bitmap.Po
-	-rm -f ./$(DEPDIR)/BoundingBox.Po
-	-rm -f ./$(DEPDIR)/CLCommandLine.Po
-	-rm -f ./$(DEPDIR)/CMap.Po
-	-rm -f ./$(DEPDIR)/CMapManager.Po
-	-rm -f ./$(DEPDIR)/CMapReader.Po
-	-rm -f ./$(DEPDIR)/Calculator.Po
-	-rm -f ./$(DEPDIR)/CharMapID.Po
-	-rm -f ./$(DEPDIR)/Color.Po
-	-rm -f ./$(DEPDIR)/ColorSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/DLLoader.Po
-	-rm -f ./$(DEPDIR)/DVIReader.Po
-	-rm -f ./$(DEPDIR)/DVIToSVG.Po
-	-rm -f ./$(DEPDIR)/DVIToSVGActions.Po
-	-rm -f ./$(DEPDIR)/Directory.Po
-	-rm -f ./$(DEPDIR)/DvisvgmSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/EPSFile.Po
-	-rm -f ./$(DEPDIR)/EllipticalArc.Po
-	-rm -f ./$(DEPDIR)/EmSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/EncFile.Po
-	-rm -f ./$(DEPDIR)/FileFinder.Po
-	-rm -f ./$(DEPDIR)/FilePath.Po
-	-rm -f ./$(DEPDIR)/FileSystem.Po
-	-rm -f ./$(DEPDIR)/Font.Po
-	-rm -f ./$(DEPDIR)/FontCache.Po
-	-rm -f ./$(DEPDIR)/FontEncoding.Po
-	-rm -f ./$(DEPDIR)/FontEngine.Po
-	-rm -f ./$(DEPDIR)/FontManager.Po
-	-rm -f ./$(DEPDIR)/FontMap.Po
-	-rm -f ./$(DEPDIR)/FontMetrics.Po
-	-rm -f ./$(DEPDIR)/FontWriter.Po
-	-rm -f ./$(DEPDIR)/GFGlyphTracer.Po
-	-rm -f ./$(DEPDIR)/GFReader.Po
-	-rm -f ./$(DEPDIR)/GFTracer.Po
-	-rm -f ./$(DEPDIR)/Ghostscript.Po
-	-rm -f ./$(DEPDIR)/HashFunction.Po
-	-rm -f ./$(DEPDIR)/HtmlSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/HyperlinkManager.Po
-	-rm -f ./$(DEPDIR)/ImageToSVG.Po
-	-rm -f ./$(DEPDIR)/InputBuffer.Po
-	-rm -f ./$(DEPDIR)/InputReader.Po
-	-rm -f ./$(DEPDIR)/JFM.Po
-	-rm -f ./$(DEPDIR)/Length.Po
-	-rm -f ./$(DEPDIR)/MapLine.Po
-	-rm -f ./$(DEPDIR)/Matrix.Po
-	-rm -f ./$(DEPDIR)/Message.Po
-	-rm -f ./$(DEPDIR)/MetafontWrapper.Po
-	-rm -f ./$(DEPDIR)/NoPsSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/Opacity.Po
-	-rm -f ./$(DEPDIR)/PDFParser.Po
-	-rm -f ./$(DEPDIR)/PSInterpreter.Po
-	-rm -f ./$(DEPDIR)/PSPattern.Po
-	-rm -f ./$(DEPDIR)/PSPreviewFilter.Po
-	-rm -f ./$(DEPDIR)/PageRanges.Po
-	-rm -f ./$(DEPDIR)/PageSize.Po
-	-rm -f ./$(DEPDIR)/PapersizeSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/PathClipper.Po
-	-rm -f ./$(DEPDIR)/PdfSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/PreScanDVIReader.Po
-	-rm -f ./$(DEPDIR)/Process.Po
-	-rm -f ./$(DEPDIR)/PsSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/RangeMap.Po
-	-rm -f ./$(DEPDIR)/SVGCharHandler.Po
-	-rm -f ./$(DEPDIR)/SVGCharHandlerFactory.Po
-	-rm -f ./$(DEPDIR)/SVGCharPathHandler.Po
-	-rm -f ./$(DEPDIR)/SVGCharTspanTextHandler.Po
-	-rm -f ./$(DEPDIR)/SVGElement.Po
-	-rm -f ./$(DEPDIR)/SVGOutput.Po
-	-rm -f ./$(DEPDIR)/SVGSingleCharTextHandler.Po
-	-rm -f ./$(DEPDIR)/SVGTree.Po
-	-rm -f ./$(DEPDIR)/ShadingPatch.Po
-	-rm -f ./$(DEPDIR)/SignalHandler.Po
-	-rm -f ./$(DEPDIR)/SourceInput.Po
-	-rm -f ./$(DEPDIR)/SpecialManager.Po
-	-rm -f ./$(DEPDIR)/StreamReader.Po
-	-rm -f ./$(DEPDIR)/StreamWriter.Po
-	-rm -f ./$(DEPDIR)/Subfont.Po
-	-rm -f ./$(DEPDIR)/System.Po
-	-rm -f ./$(DEPDIR)/TFM.Po
-	-rm -f ./$(DEPDIR)/TTFAutohint.Po
-	-rm -f ./$(DEPDIR)/TensorProductPatch.Po
-	-rm -f ./$(DEPDIR)/Terminal.Po
-	-rm -f ./$(DEPDIR)/ToUnicodeMap.Po
-	-rm -f ./$(DEPDIR)/TpicSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/TriangularPatch.Po
-	-rm -f ./$(DEPDIR)/TrueTypeFont.Po
-	-rm -f ./$(DEPDIR)/Unicode.Po
-	-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)/BasicDVIReader.Plo
+	-rm -f ./$(DEPDIR)/Bezier.Plo
+	-rm -f ./$(DEPDIR)/BgColorSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/Bitmap.Plo
+	-rm -f ./$(DEPDIR)/BoundingBox.Plo
+	-rm -f ./$(DEPDIR)/CLCommandLine.Plo
+	-rm -f ./$(DEPDIR)/CMap.Plo
+	-rm -f ./$(DEPDIR)/CMapManager.Plo
+	-rm -f ./$(DEPDIR)/CMapReader.Plo
+	-rm -f ./$(DEPDIR)/Calculator.Plo
+	-rm -f ./$(DEPDIR)/CharMapID.Plo
+	-rm -f ./$(DEPDIR)/Color.Plo
+	-rm -f ./$(DEPDIR)/ColorSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/DLLoader.Plo
+	-rm -f ./$(DEPDIR)/DVIReader.Plo
+	-rm -f ./$(DEPDIR)/DVIToSVG.Plo
+	-rm -f ./$(DEPDIR)/DVIToSVGActions.Plo
+	-rm -f ./$(DEPDIR)/Directory.Plo
+	-rm -f ./$(DEPDIR)/DvisvgmSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/EPSFile.Plo
+	-rm -f ./$(DEPDIR)/EllipticalArc.Plo
+	-rm -f ./$(DEPDIR)/EmSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/EncFile.Plo
+	-rm -f ./$(DEPDIR)/FileFinder.Plo
+	-rm -f ./$(DEPDIR)/FilePath.Plo
+	-rm -f ./$(DEPDIR)/FileSystem.Plo
+	-rm -f ./$(DEPDIR)/Font.Plo
+	-rm -f ./$(DEPDIR)/FontCache.Plo
+	-rm -f ./$(DEPDIR)/FontEncoding.Plo
+	-rm -f ./$(DEPDIR)/FontEngine.Plo
+	-rm -f ./$(DEPDIR)/FontManager.Plo
+	-rm -f ./$(DEPDIR)/FontMap.Plo
+	-rm -f ./$(DEPDIR)/FontMetrics.Plo
+	-rm -f ./$(DEPDIR)/FontWriter.Plo
+	-rm -f ./$(DEPDIR)/GFGlyphTracer.Plo
+	-rm -f ./$(DEPDIR)/GFReader.Plo
+	-rm -f ./$(DEPDIR)/GFTracer.Plo
+	-rm -f ./$(DEPDIR)/Ghostscript.Plo
+	-rm -f ./$(DEPDIR)/HashFunction.Plo
+	-rm -f ./$(DEPDIR)/HtmlSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/HyperlinkManager.Plo
+	-rm -f ./$(DEPDIR)/ImageToSVG.Plo
+	-rm -f ./$(DEPDIR)/InputBuffer.Plo
+	-rm -f ./$(DEPDIR)/InputReader.Plo
+	-rm -f ./$(DEPDIR)/JFM.Plo
+	-rm -f ./$(DEPDIR)/Length.Plo
+	-rm -f ./$(DEPDIR)/MapLine.Plo
+	-rm -f ./$(DEPDIR)/Matrix.Plo
+	-rm -f ./$(DEPDIR)/Message.Plo
+	-rm -f ./$(DEPDIR)/MetafontWrapper.Plo
+	-rm -f ./$(DEPDIR)/NoPsSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/Opacity.Plo
+	-rm -f ./$(DEPDIR)/PDFHandler.Plo
+	-rm -f ./$(DEPDIR)/PDFParser.Plo
+	-rm -f ./$(DEPDIR)/PDFToSVG.Plo
+	-rm -f ./$(DEPDIR)/PSInterpreter.Plo
+	-rm -f ./$(DEPDIR)/PSPattern.Plo
+	-rm -f ./$(DEPDIR)/PSPreviewFilter.Plo
+	-rm -f ./$(DEPDIR)/PageRanges.Plo
+	-rm -f ./$(DEPDIR)/PageSize.Plo
+	-rm -f ./$(DEPDIR)/PapersizeSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/PathClipper.Plo
+	-rm -f ./$(DEPDIR)/PdfSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/PreScanDVIReader.Plo
+	-rm -f ./$(DEPDIR)/Process.Plo
+	-rm -f ./$(DEPDIR)/PsSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/RangeMap.Plo
+	-rm -f ./$(DEPDIR)/SVGCharHandler.Plo
+	-rm -f ./$(DEPDIR)/SVGCharHandlerFactory.Plo
+	-rm -f ./$(DEPDIR)/SVGCharPathHandler.Plo
+	-rm -f ./$(DEPDIR)/SVGCharTspanTextHandler.Plo
+	-rm -f ./$(DEPDIR)/SVGElement.Plo
+	-rm -f ./$(DEPDIR)/SVGOutput.Plo
+	-rm -f ./$(DEPDIR)/SVGSingleCharTextHandler.Plo
+	-rm -f ./$(DEPDIR)/SVGTree.Plo
+	-rm -f ./$(DEPDIR)/ShadingPatch.Plo
+	-rm -f ./$(DEPDIR)/SignalHandler.Plo
+	-rm -f ./$(DEPDIR)/SourceInput.Plo
+	-rm -f ./$(DEPDIR)/SpecialManager.Plo
+	-rm -f ./$(DEPDIR)/StreamReader.Plo
+	-rm -f ./$(DEPDIR)/StreamWriter.Plo
+	-rm -f ./$(DEPDIR)/Subfont.Plo
+	-rm -f ./$(DEPDIR)/System.Plo
+	-rm -f ./$(DEPDIR)/TFM.Plo
+	-rm -f ./$(DEPDIR)/TensorProductPatch.Plo
+	-rm -f ./$(DEPDIR)/Terminal.Plo
+	-rm -f ./$(DEPDIR)/ToUnicodeMap.Plo
+	-rm -f ./$(DEPDIR)/TpicSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/TriangularPatch.Plo
+	-rm -f ./$(DEPDIR)/Unicode.Plo
+	-rm -f ./$(DEPDIR)/VFReader.Plo
+	-rm -f ./$(DEPDIR)/XMLDocument.Plo
+	-rm -f ./$(DEPDIR)/XMLNode.Plo
+	-rm -f ./$(DEPDIR)/XMLParser.Plo
+	-rm -f ./$(DEPDIR)/XMLString.Plo
 	-rm -f ./$(DEPDIR)/dvisvgm.Po
-	-rm -f ./$(DEPDIR)/ffwrapper.Po
-	-rm -f ./$(DEPDIR)/psdefs.Po
-	-rm -f ./$(DEPDIR)/utility.Po
+	-rm -f ./$(DEPDIR)/psdefs.Plo
+	-rm -f ./$(DEPDIR)/utility.Plo
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-tags
@@ -1302,105 +1264,104 @@
 installcheck-am:
 
 maintainer-clean: maintainer-clean-recursive
-		-rm -f ./$(DEPDIR)/BasicDVIReader.Po
-	-rm -f ./$(DEPDIR)/Bezier.Po
-	-rm -f ./$(DEPDIR)/BgColorSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/Bitmap.Po
-	-rm -f ./$(DEPDIR)/BoundingBox.Po
-	-rm -f ./$(DEPDIR)/CLCommandLine.Po
-	-rm -f ./$(DEPDIR)/CMap.Po
-	-rm -f ./$(DEPDIR)/CMapManager.Po
-	-rm -f ./$(DEPDIR)/CMapReader.Po
-	-rm -f ./$(DEPDIR)/Calculator.Po
-	-rm -f ./$(DEPDIR)/CharMapID.Po
-	-rm -f ./$(DEPDIR)/Color.Po
-	-rm -f ./$(DEPDIR)/ColorSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/DLLoader.Po
-	-rm -f ./$(DEPDIR)/DVIReader.Po
-	-rm -f ./$(DEPDIR)/DVIToSVG.Po
-	-rm -f ./$(DEPDIR)/DVIToSVGActions.Po
-	-rm -f ./$(DEPDIR)/Directory.Po
-	-rm -f ./$(DEPDIR)/DvisvgmSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/EPSFile.Po
-	-rm -f ./$(DEPDIR)/EllipticalArc.Po
-	-rm -f ./$(DEPDIR)/EmSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/EncFile.Po
-	-rm -f ./$(DEPDIR)/FileFinder.Po
-	-rm -f ./$(DEPDIR)/FilePath.Po
-	-rm -f ./$(DEPDIR)/FileSystem.Po
-	-rm -f ./$(DEPDIR)/Font.Po
-	-rm -f ./$(DEPDIR)/FontCache.Po
-	-rm -f ./$(DEPDIR)/FontEncoding.Po
-	-rm -f ./$(DEPDIR)/FontEngine.Po
-	-rm -f ./$(DEPDIR)/FontManager.Po
-	-rm -f ./$(DEPDIR)/FontMap.Po
-	-rm -f ./$(DEPDIR)/FontMetrics.Po
-	-rm -f ./$(DEPDIR)/FontWriter.Po
-	-rm -f ./$(DEPDIR)/GFGlyphTracer.Po
-	-rm -f ./$(DEPDIR)/GFReader.Po
-	-rm -f ./$(DEPDIR)/GFTracer.Po
-	-rm -f ./$(DEPDIR)/Ghostscript.Po
-	-rm -f ./$(DEPDIR)/HashFunction.Po
-	-rm -f ./$(DEPDIR)/HtmlSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/HyperlinkManager.Po
-	-rm -f ./$(DEPDIR)/ImageToSVG.Po
-	-rm -f ./$(DEPDIR)/InputBuffer.Po
-	-rm -f ./$(DEPDIR)/InputReader.Po
-	-rm -f ./$(DEPDIR)/JFM.Po
-	-rm -f ./$(DEPDIR)/Length.Po
-	-rm -f ./$(DEPDIR)/MapLine.Po
-	-rm -f ./$(DEPDIR)/Matrix.Po
-	-rm -f ./$(DEPDIR)/Message.Po
-	-rm -f ./$(DEPDIR)/MetafontWrapper.Po
-	-rm -f ./$(DEPDIR)/NoPsSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/Opacity.Po
-	-rm -f ./$(DEPDIR)/PDFParser.Po
-	-rm -f ./$(DEPDIR)/PSInterpreter.Po
-	-rm -f ./$(DEPDIR)/PSPattern.Po
-	-rm -f ./$(DEPDIR)/PSPreviewFilter.Po
-	-rm -f ./$(DEPDIR)/PageRanges.Po
-	-rm -f ./$(DEPDIR)/PageSize.Po
-	-rm -f ./$(DEPDIR)/PapersizeSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/PathClipper.Po
-	-rm -f ./$(DEPDIR)/PdfSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/PreScanDVIReader.Po
-	-rm -f ./$(DEPDIR)/Process.Po
-	-rm -f ./$(DEPDIR)/PsSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/RangeMap.Po
-	-rm -f ./$(DEPDIR)/SVGCharHandler.Po
-	-rm -f ./$(DEPDIR)/SVGCharHandlerFactory.Po
-	-rm -f ./$(DEPDIR)/SVGCharPathHandler.Po
-	-rm -f ./$(DEPDIR)/SVGCharTspanTextHandler.Po
-	-rm -f ./$(DEPDIR)/SVGElement.Po
-	-rm -f ./$(DEPDIR)/SVGOutput.Po
-	-rm -f ./$(DEPDIR)/SVGSingleCharTextHandler.Po
-	-rm -f ./$(DEPDIR)/SVGTree.Po
-	-rm -f ./$(DEPDIR)/ShadingPatch.Po
-	-rm -f ./$(DEPDIR)/SignalHandler.Po
-	-rm -f ./$(DEPDIR)/SourceInput.Po
-	-rm -f ./$(DEPDIR)/SpecialManager.Po
-	-rm -f ./$(DEPDIR)/StreamReader.Po
-	-rm -f ./$(DEPDIR)/StreamWriter.Po
-	-rm -f ./$(DEPDIR)/Subfont.Po
-	-rm -f ./$(DEPDIR)/System.Po
-	-rm -f ./$(DEPDIR)/TFM.Po
-	-rm -f ./$(DEPDIR)/TTFAutohint.Po
-	-rm -f ./$(DEPDIR)/TensorProductPatch.Po
-	-rm -f ./$(DEPDIR)/Terminal.Po
-	-rm -f ./$(DEPDIR)/ToUnicodeMap.Po
-	-rm -f ./$(DEPDIR)/TpicSpecialHandler.Po
-	-rm -f ./$(DEPDIR)/TriangularPatch.Po
-	-rm -f ./$(DEPDIR)/TrueTypeFont.Po
-	-rm -f ./$(DEPDIR)/Unicode.Po
-	-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)/BasicDVIReader.Plo
+	-rm -f ./$(DEPDIR)/Bezier.Plo
+	-rm -f ./$(DEPDIR)/BgColorSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/Bitmap.Plo
+	-rm -f ./$(DEPDIR)/BoundingBox.Plo
+	-rm -f ./$(DEPDIR)/CLCommandLine.Plo
+	-rm -f ./$(DEPDIR)/CMap.Plo
+	-rm -f ./$(DEPDIR)/CMapManager.Plo
+	-rm -f ./$(DEPDIR)/CMapReader.Plo
+	-rm -f ./$(DEPDIR)/Calculator.Plo
+	-rm -f ./$(DEPDIR)/CharMapID.Plo
+	-rm -f ./$(DEPDIR)/Color.Plo
+	-rm -f ./$(DEPDIR)/ColorSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/DLLoader.Plo
+	-rm -f ./$(DEPDIR)/DVIReader.Plo
+	-rm -f ./$(DEPDIR)/DVIToSVG.Plo
+	-rm -f ./$(DEPDIR)/DVIToSVGActions.Plo
+	-rm -f ./$(DEPDIR)/Directory.Plo
+	-rm -f ./$(DEPDIR)/DvisvgmSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/EPSFile.Plo
+	-rm -f ./$(DEPDIR)/EllipticalArc.Plo
+	-rm -f ./$(DEPDIR)/EmSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/EncFile.Plo
+	-rm -f ./$(DEPDIR)/FileFinder.Plo
+	-rm -f ./$(DEPDIR)/FilePath.Plo
+	-rm -f ./$(DEPDIR)/FileSystem.Plo
+	-rm -f ./$(DEPDIR)/Font.Plo
+	-rm -f ./$(DEPDIR)/FontCache.Plo
+	-rm -f ./$(DEPDIR)/FontEncoding.Plo
+	-rm -f ./$(DEPDIR)/FontEngine.Plo
+	-rm -f ./$(DEPDIR)/FontManager.Plo
+	-rm -f ./$(DEPDIR)/FontMap.Plo
+	-rm -f ./$(DEPDIR)/FontMetrics.Plo
+	-rm -f ./$(DEPDIR)/FontWriter.Plo
+	-rm -f ./$(DEPDIR)/GFGlyphTracer.Plo
+	-rm -f ./$(DEPDIR)/GFReader.Plo
+	-rm -f ./$(DEPDIR)/GFTracer.Plo
+	-rm -f ./$(DEPDIR)/Ghostscript.Plo
+	-rm -f ./$(DEPDIR)/HashFunction.Plo
+	-rm -f ./$(DEPDIR)/HtmlSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/HyperlinkManager.Plo
+	-rm -f ./$(DEPDIR)/ImageToSVG.Plo
+	-rm -f ./$(DEPDIR)/InputBuffer.Plo
+	-rm -f ./$(DEPDIR)/InputReader.Plo
+	-rm -f ./$(DEPDIR)/JFM.Plo
+	-rm -f ./$(DEPDIR)/Length.Plo
+	-rm -f ./$(DEPDIR)/MapLine.Plo
+	-rm -f ./$(DEPDIR)/Matrix.Plo
+	-rm -f ./$(DEPDIR)/Message.Plo
+	-rm -f ./$(DEPDIR)/MetafontWrapper.Plo
+	-rm -f ./$(DEPDIR)/NoPsSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/Opacity.Plo
+	-rm -f ./$(DEPDIR)/PDFHandler.Plo
+	-rm -f ./$(DEPDIR)/PDFParser.Plo
+	-rm -f ./$(DEPDIR)/PDFToSVG.Plo
+	-rm -f ./$(DEPDIR)/PSInterpreter.Plo
+	-rm -f ./$(DEPDIR)/PSPattern.Plo
+	-rm -f ./$(DEPDIR)/PSPreviewFilter.Plo
+	-rm -f ./$(DEPDIR)/PageRanges.Plo
+	-rm -f ./$(DEPDIR)/PageSize.Plo
+	-rm -f ./$(DEPDIR)/PapersizeSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/PathClipper.Plo
+	-rm -f ./$(DEPDIR)/PdfSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/PreScanDVIReader.Plo
+	-rm -f ./$(DEPDIR)/Process.Plo
+	-rm -f ./$(DEPDIR)/PsSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/RangeMap.Plo
+	-rm -f ./$(DEPDIR)/SVGCharHandler.Plo
+	-rm -f ./$(DEPDIR)/SVGCharHandlerFactory.Plo
+	-rm -f ./$(DEPDIR)/SVGCharPathHandler.Plo
+	-rm -f ./$(DEPDIR)/SVGCharTspanTextHandler.Plo
+	-rm -f ./$(DEPDIR)/SVGElement.Plo
+	-rm -f ./$(DEPDIR)/SVGOutput.Plo
+	-rm -f ./$(DEPDIR)/SVGSingleCharTextHandler.Plo
+	-rm -f ./$(DEPDIR)/SVGTree.Plo
+	-rm -f ./$(DEPDIR)/ShadingPatch.Plo
+	-rm -f ./$(DEPDIR)/SignalHandler.Plo
+	-rm -f ./$(DEPDIR)/SourceInput.Plo
+	-rm -f ./$(DEPDIR)/SpecialManager.Plo
+	-rm -f ./$(DEPDIR)/StreamReader.Plo
+	-rm -f ./$(DEPDIR)/StreamWriter.Plo
+	-rm -f ./$(DEPDIR)/Subfont.Plo
+	-rm -f ./$(DEPDIR)/System.Plo
+	-rm -f ./$(DEPDIR)/TFM.Plo
+	-rm -f ./$(DEPDIR)/TensorProductPatch.Plo
+	-rm -f ./$(DEPDIR)/Terminal.Plo
+	-rm -f ./$(DEPDIR)/ToUnicodeMap.Plo
+	-rm -f ./$(DEPDIR)/TpicSpecialHandler.Plo
+	-rm -f ./$(DEPDIR)/TriangularPatch.Plo
+	-rm -f ./$(DEPDIR)/Unicode.Plo
+	-rm -f ./$(DEPDIR)/VFReader.Plo
+	-rm -f ./$(DEPDIR)/XMLDocument.Plo
+	-rm -f ./$(DEPDIR)/XMLNode.Plo
+	-rm -f ./$(DEPDIR)/XMLParser.Plo
+	-rm -f ./$(DEPDIR)/XMLString.Plo
 	-rm -f ./$(DEPDIR)/dvisvgm.Po
-	-rm -f ./$(DEPDIR)/ffwrapper.Po
-	-rm -f ./$(DEPDIR)/psdefs.Po
-	-rm -f ./$(DEPDIR)/utility.Po
+	-rm -f ./$(DEPDIR)/psdefs.Plo
+	-rm -f ./$(DEPDIR)/utility.Plo
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
@@ -1423,7 +1384,7 @@
 
 .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
 	am--depfiles check check-am clean clean-binPROGRAMS \
-	clean-generic clean-libtool clean-noinstLIBRARIES \
+	clean-generic clean-libtool clean-noinstLTLIBRARIES \
 	cscopelist-am ctags ctags-am distclean distclean-compile \
 	distclean-generic distclean-libtool distclean-tags distdir dvi \
 	dvi-am html html-am info info-am install install-am \
@@ -1455,16 +1416,14 @@
 
 @TEXLIVE_BUILD_FALSE at psdefs.ps: ;
 
- at CODE_COVERAGE_RULES@
-
 # Rebuild libkpathsea:
- at KPATHSEA_RULE@
+ at TEXLIVE_BUILD_TRUE@@KPATHSEA_RULE@
 # Rebuild libfreetype:
- at FREETYPE2_RULE@
+ at TEXLIVE_BUILD_TRUE@@FREETYPE2_RULE@
 # Rebuild libz:
- at ZLIB_RULE@
+ at TEXLIVE_BUILD_TRUE@@ZLIB_RULE@
 # Rebuild potrace:
- at POTRACE_RULE@
+ at TEXLIVE_BUILD_TRUE@@POTRACE_RULE@
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** MapLine.cpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MapLine.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** MapLine.hpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Matrix.cpp                                                           **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -85,6 +85,17 @@
 }
 
 
+Matrix::Matrix (const string &svgMatrix) {
+	istringstream iss(svgMatrix);
+	for (int col=0; col < 3; col++) {
+		for (int row=0; row < 2; row++)
+			iss >> _values[row][col];
+		_values[2][col] = 0;
+	}
+	_values[2][2] = 1;
+}
+
+
 Matrix::Matrix (const string &cmds, Calculator &calc) {
 	*this = parse(cmds, calc);
 }
@@ -261,13 +272,21 @@
 
 
 Matrix& Matrix::operator *= (double c) {
-	for (int i=0; i < 3; i++)
-		for (int j=0; j < 3; j++)
-			_values[i][j] *= c;
+	for (auto &row : _values)
+		for (auto &val : row)
+			val *= c;
 	return *this;
 }
 
 
+Matrix& Matrix::operator /= (double c) {
+	for (auto &row : _values)
+		for (auto &val : row)
+			val /= c;
+	return *this;
+}
+
+
 DPair Matrix::operator * (const DPair &p) const {
 	double pp[] = {p.x(), p.y(), 1};
 	double ret[]= {0, 0};

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Matrix.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Matrix.hpp                                                           **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -43,9 +43,10 @@
 		Matrix () {set(0);}
 		Matrix (double d);
 		Matrix (const std::string &cmds, Calculator &calc);
+		explicit Matrix (const std::string &svgMatrix);
 		explicit Matrix (const double *v, unsigned size=9);
 		explicit Matrix (const std::vector<double> &v, int start=0);
-		explicit Matrix (std::initializer_list<double> initlist);
+		Matrix (std::initializer_list<double> initlist);
 		Matrix& set (double d);
 		Matrix& set (const double *v, unsigned size);
 		Matrix& set (const std::vector<double> &v, int start=0);
@@ -66,6 +67,7 @@
 		Matrix& yskewByRatio (double xyratio);
 		Matrix& flip (bool h, double a);
 		Matrix& operator *= (double c);
+		Matrix& operator /= (double c);
 		DPair operator * (const DPair &p) const;
 		bool operator == (const Matrix &m) const;
 		bool operator != (const Matrix &m) const;

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Message.cpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Message.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Message.hpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MessageException.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MessageException.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MessageException.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** MessageException.hpp                                                 **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** MetafontWrapper.cpp                                                  **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MetafontWrapper.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** MetafontWrapper.hpp                                                  **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** MiKTeXCom.cpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/MiKTeXCom.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** MiKTeXCom.hpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** NoPsSpecialHandler.cpp                                               **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/NoPsSpecialHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** NoPsSpecialHandler.hpp                                               **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/NumericRanges.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/NumericRanges.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/NumericRanges.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** NumericRanges.hpp                                                    **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Opacity.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Opacity.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Opacity.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Opacity.cpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -45,6 +45,50 @@
 }
 
 
+static string to_lower_drop_nonalpha (const string &str) {
+	string ret;
+	if (!str.empty()) {
+		ret.reserve(str.length());
+		for (char c : str) {
+			if (isalpha(c))
+				ret += char(tolower(c));
+		}
+	}
+	return ret;
+}
+
+
+Opacity::BlendMode Opacity::blendMode (const std::string &name) {
+	struct {
+		const char *name;
+		BlendMode mode;
+	} modes[] = {
+		{"normal",     BM_NORMAL    },
+		{"multiply",   BM_MULTIPLY  },
+		{"screen",     BM_SCREEN    },
+		{"overlay",    BM_OVERLAY   },
+		{"softlight",  BM_SOFTLIGHT },
+		{"hardlight",  BM_HARDLIGHT },
+		{"colordodge", BM_COLORDODGE},
+		{"colorburn",  BM_COLORBURN },
+		{"darken",     BM_DARKEN    },
+		{"lighten",    BM_LIGHTEN   },
+		{"difference", BM_DIFFERENCE},
+		{"exclusion",  BM_EXCLUSION },
+		{"hue",        BM_HUE       },
+		{"saturation", BM_SATURATION},
+		{"color",      BM_COLOR     },
+		{"luminosity", BM_LUMINOSITY}
+	};
+	string compname = to_lower_drop_nonalpha(name);
+	for (const auto &m : modes) {
+		if (compname == m.name)
+			return m.mode;
+	}
+	return BM_NORMAL;
+}
+
+
 bool Opacity::operator == (const Opacity &opacity) const {
 	return opacity._fillalpha == _fillalpha
 		&& opacity._strokealpha == _strokealpha
@@ -56,4 +100,4 @@
 	return opacity._fillalpha != _fillalpha
 		|| opacity._strokealpha != _strokealpha
 		|| opacity._blendMode != _blendMode;
-}
\ No newline at end of file
+}

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Opacity.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Opacity.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Opacity.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Opacity.hpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -27,6 +27,7 @@
 	public:
 		OpacityAlpha () =default;
 		OpacityAlpha (double constalpha, double shapealpha) : _constalpha(constalpha), _shapealpha(shapealpha) {}
+		explicit OpacityAlpha (double alpha) : _constalpha(alpha) {}
 		void setConstAlpha (double alpha) { _constalpha = alpha;}
 		void setShapeAlpha (double shapealpha) {_shapealpha = shapealpha;}
 		double value () const {return _constalpha * _shapealpha;}
@@ -66,6 +67,8 @@
 		bool operator == (const Opacity &opacity) const;
 		bool operator != (const Opacity &opacity) const;
 
+		static BlendMode blendMode (const std::string &name);
+
 	private:
 		OpacityAlpha _fillalpha;
 		OpacityAlpha _strokealpha;

Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFHandler.cpp	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,858 @@
+/*************************************************************************
+** PDFHandler.cpp                                                       **
+**                                                                      **
+** This file is part of dvisvgm -- a fast DVI to SVG converter          **
+** Copyright (C) 2005-2023 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 <fstream>
+#include <iterator>
+#include <limits>
+#include <sstream>
+#include "FilePath.hpp"
+#include "FileSystem.hpp"
+#include "FontEngine.hpp"
+#include "FontManager.hpp"
+#include "GraphicsPath.hpp"
+#include "Color.hpp"
+#include "Matrix.hpp"
+#include "Opacity.hpp"
+#include "PDFHandler.hpp"
+#include "Process.hpp"
+#include "SVGElement.hpp"
+#include "SVGTree.hpp"
+#include "Unicode.hpp"
+#include "XMLParser.hpp"
+#include "XXHashFunction.hpp"
+
+using namespace std;
+
+template <typename T>
+static T parse_value (const string &str) {
+	T value{};
+	istringstream iss(str);
+	iss >> value;
+	return value;
+}
+
+template<>
+string parse_value (const string &str) {
+	return str;
+}
+
+template<>
+vector<double> parse_value (const string &str) {
+	vector<double> vec;
+	istringstream iss(str);
+	while (iss) {
+		double val;
+		if (iss >> val)
+			vec.push_back(val);
+	}
+	return vec;
+}
+
+
+istream& operator >> (istream &is, PDFHandler::ObjID &objId) {
+	is >> objId.num;
+	is >> objId.gen;
+	is >> ws;
+	if (is.peek() == 'R')
+		is.get();
+	return is;
+}
+
+
+template <typename T>
+static vector<T> parse_pdf_array (const string &str) {
+	vector<T> vec;
+	istringstream iss(str);
+	if (iss.get() == '[') {
+		while (iss) {
+			T val;
+			if (iss >> val)
+				vec.push_back(val);
+		}
+	}
+	return vec;
+}
+
+template <typename T>
+static map<string, T> parse_pdf_dict (const string &str) {
+	map<string, T> dict;
+	istringstream iss(str);
+	if (iss.get() == '<' && iss.get() == '<') {
+		string name;
+		T val;
+		while (iss) {
+			iss >> ws >> name >> val;
+			if (iss)
+				dict.emplace(name, val);
+		}
+	}
+	return dict;
+}
+
+
+template <typename T>
+static T parse_attr_value (const XMLElement *elem, const string &attr) {
+	T ret{};
+	if (const char *value = elem->getAttributeValue(attr))
+		ret = parse_value<T>(value);
+	return ret;
+}
+
+template<>
+Matrix parse_attr_value (const XMLElement *elem, const string &attr) {
+	Matrix matrix(1);
+	if (const char *val = elem->getAttributeValue(attr))
+		matrix = Matrix(val);
+	return matrix;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+
+PDFHandler::~PDFHandler () {
+	finishFile();
+}
+
+
+string PDFHandler::mutoolVersion () {
+	static string version;
+	if (version.empty())
+		version = mutool("-v", SearchPattern("([0-9.]+)", "$1"), true);
+	return version;
+}
+
+
+/** Returns the bounding box of a selected PDF page. */
+BoundingBox PDFHandler::bbox (string &fname, int pageno) {
+	BoundingBox bbox;
+	string arraystr = mtShow(fname, "pages/" + to_string(pageno) + "/MediaBox");
+	if (arraystr.substr(0, 4) == "null")
+		arraystr = mtShow(fname, "pages/" + to_string(pageno) + "/Parent/MediaBox");
+	auto vec = parse_pdf_array<double>(arraystr);
+	if (vec.size() == 4)
+		bbox = BoundingBox(vec[0], vec[1], vec[2], vec[3]);
+	return bbox;
+}
+
+
+/** Converts a single page of a PDF file to SVG. If no context element is given,
+ *  the SVG page contents are added to a page group element of the SVG tree.
+ *  Otherwise, they are added to the context element which is not inserted into
+ *  the SVG tree but returned for further processing.
+ *  @param[in] fname PDF filename
+ *  @param[in] pageno number of page to convert
+ *  @param[in] context element the generated page contents are appended to
+ *  @return the context element holding the page contents */
+unique_ptr<SVGElement> PDFHandler::convert (const string &fname, int pageno, unique_ptr<SVGElement> context) {
+	if (_fname != fname)
+		initFile(fname);
+	if (!_svg || pageno < 1 || pageno > _numPages)
+		return context;
+	initPage(pageno, std::move(context));
+
+	// create trace XML and convert it to SVG
+	XMLParser xmlParser;
+	auto openfunc = std::bind(&PDFHandler::elementOpened, this, std::placeholders::_1);
+	auto closefunc = std::bind(&PDFHandler::elementClosed, this, std::placeholders::_1);
+	xmlParser.setNotifyFuncs(openfunc, closefunc);
+	xmlParser.setRootElement(nullptr);
+	string xmlfname = FileSystem::tmpdir()+FilePath(fname, true).filename()+"-"+ to_string(_pageno)+".xml";
+	mutool("draw -Ftrace -o"+xmlfname+" "+_fname+" "+to_string(_pageno));
+	ifstream ifs(xmlfname);
+	xmlParser.parse(ifs);
+	ifs.close();
+	// remove trace XML
+	if (!PhysicalFont::KEEP_TEMP_FILES)
+		FileSystem::remove(xmlfname);
+	return finishPage();
+}
+
+
+void PDFHandler::initFile (const string &fname) {
+	finishFile();
+	_fname = FilePath(fname, true).absolute();
+	_numPages = parse_value<int>(mtShow("trailer/Root/Pages/Count"));
+	// extract image and font files from the PDF
+	string cwd = FileSystem::getcwd();
+	string tmpdir = FileSystem::tmpdir();
+	FileSystem::chdir(tmpdir);
+	string out = mtExtract(_fname, SearchPattern(R"(extracting\s+([a-z]+-\d+\.\S+))", "$1\n"));
+	FileSystem::chdir(cwd);
+	for (const string &extrfname : util::split(out, "\n")) {
+		auto dashpos = extrfname.rfind('-');
+		if (dashpos != string::npos) {
+			int objnum;
+			istringstream iss(extrfname.substr(dashpos+1));
+			iss >> objnum;
+			_extractedFiles.emplace(objnum, extrfname);
+		}
+	}
+}
+
+
+void PDFHandler::finishFile () {
+	if (!PhysicalFont::KEEP_TEMP_FILES) {
+		// remove extracted image and font files
+		for (auto &entry : _extractedFiles)
+			FileSystem::remove(FileSystem::tmpdir() + entry.second);
+	}
+	_fname.clear();
+	_numPages = 0;
+}
+
+
+void PDFHandler::initPage (int pageno, unique_ptr<SVGElement> context) {
+	_pageno = pageno;
+	_bbox = bbox(_fname, pageno);
+	if (context) {
+		_context = context.get();
+		_svg->pushPageContext(std::move(context));
+	}
+	else {
+		_svg->newPage(_pageno);
+		_svg->setBBox(_bbox);
+	}
+	// collect sequence of images referenced on current page
+	collectObjects();
+	_imgSeq.clear();
+	SearchPattern pattern{R"((/[a-zA-Z0-9]+)\s+Do)", "$1\n"};
+	string content = mtShow("pages/" + to_string(_pageno) + "/Contents", pattern);
+	if (content.empty())
+		content = mtShow("pages/" + to_string(_pageno) + "/Contents/*", pattern);
+	for (const string &entry : util::split(content, "\n")) {
+		if (!entry.empty())
+			_imgSeq.push_back(entry);
+	}
+}
+
+
+unique_ptr<SVGElement> PDFHandler::finishPage () {
+	if (!_context) {
+		// add glyph outlines of used characters
+		for (auto &fontchars: FontManager::instance().getUsedChars()) {
+			if (auto font = font_cast<const PhysicalFont *>(fontchars.first))
+				_svg->append(*font, fontchars.second);
+		}
+		_svg->appendFontStyles(FontManager::instance().getUsedFonts());
+	}
+	// pop clipping paths still active
+	while (!_clipPathStack.empty()) {
+		_svg->popPageContext();
+		if (_clipPathStack.top().groupElement->empty())
+			XMLElement::detach(_clipPathStack.top().groupElement);
+		_clipPathStack.pop();
+	}
+	_pageno = 0;
+	_x = _y = 0;
+	_currentFont = nullptr;
+	_objDict.clear();
+	auto context = util::static_unique_ptr_cast<SVGElement>(XMLElement::detach(_context));
+	if (context)
+		_svg->popPageContext();
+	_context = nullptr;
+	return context;
+}
+
+
+/** Called by the XMLParser after an opening tag of an element has been processed.
+ *  @param[in] trcElement opened element of trace XML */
+void PDFHandler::elementOpened (XMLElement *trcElement) {
+	const string &name = trcElement->name();
+	if (name == "tile")
+		doOpenTile(trcElement);  // start defining a tiling pattern
+}
+
+
+/** Called by the XMLParser after a closing tag of an element has been processed.
+ *  @param[in] trcElement closed element of trace XML */
+void PDFHandler::elementClosed (XMLElement *trcElement) {
+	const string &name = trcElement->name();
+	struct Handler {
+		const char *name;
+		void (PDFHandler::*func)(XMLElement*);
+	} handlers[9] = {
+		{"stroke_path", &PDFHandler::doStrokePath},
+		{"fill_path", &PDFHandler::doFillPath},
+		{"fill_image", &PDFHandler::doFillImage},
+		{"fill_text", &PDFHandler::doFillText},
+		{"clip_path", &PDFHandler::doClipPath},
+		{"clip_stroke_path", &PDFHandler::doClipStrokePath},
+		{"clip_text", &PDFHandler::doClipText},
+		{"pop_clip", &PDFHandler::doPopClip},
+		{"tile", &PDFHandler::doCloseTile},
+	};
+	auto it = find_if(begin(handlers), end(handlers), [&name](const Handler &handler) {
+		return handler.name == name;
+	});
+	if (it != end(handlers))
+		(this->*it->func)(trcElement);
+	else
+		return;
+	XMLElement::detach(trcElement);  // remove element from XML tree, it's no longer needed
+}
+
+
+/** Returns a color object from color data given in the trace XML.
+ *  @param[in] colorspace currently supported: DeviceGray, DeviceRGB, DeviceCMYK
+ *  @param[in] value color components depending on color space */
+static Color to_color (const string &colorspace, const string &value) {
+	Color color;
+	if (colorspace == "DeviceGray")
+		color.setGray(parse_value<double>(value));
+	else if (colorspace == "DeviceRGB") {
+		auto comp = util::split(value, " ");
+		if (comp.size() == 3)
+			color.setRGB(parse_value<double>(comp[0]), parse_value<double>(comp[1]), parse_value<double>(comp[2]));
+	}
+	else if (colorspace == "DeviceCMYK") {
+		auto comp = util::split(value, " ");
+		if (comp.size() == 4)
+			color.setCMYK(parse_value<double>(comp[0]), parse_value<double>(comp[1]), parse_value<double>(comp[2]), parse_value<double>(comp[3]));
+	}
+	return color;
+}
+
+
+static double matrix_extent (const Matrix &m) {
+	// signed area of the parallelogram spanned by the scale/rotation components of the matrix
+	// v1 x v2 = det(v1,v2) = sin(v1,v2) * |v1| * |v2|
+	double area = m.get(0,0)*m.get(1,1) - m.get(0,1)*m.get(1,0);
+	return sqrt(abs(area));
+}
+
+
+static double matrix_max_extent (const Matrix &matrix) {
+	double max1 = max(abs(matrix.get(0,0)), abs(matrix.get(0,1)));
+	double max2 = max(abs(matrix.get(1,0)), abs(matrix.get(1,1)));
+	return max(max1, max2);
+}
+
+
+/** Creates a GraphicsPath object from a sequence of command elements
+ *  (moveto, lineto, curveto, closepath) read from the trace XML file.
+ *  @param[in] srcPathElement parent of the command elements */
+static GraphicsPath<double> create_path (XMLElement *srcPathElement) {
+	GraphicsPath<double> path;
+	for (const XMLNode *child : *srcPathElement) {
+		if (const XMLElement *cmd = child->toElement()) {
+			string name = cmd->name();
+			if (name == "moveto")
+				path.moveto(parse_attr_value<double>(cmd, "x"), parse_attr_value<double>(cmd, "y"));
+			else if (name == "lineto")
+				path.lineto(parse_attr_value<double>(cmd, "x"), parse_attr_value<double>(cmd, "y"));
+			else if (name == "curveto")
+				path.cubicto(
+					parse_attr_value<double>(cmd, "x1"), parse_attr_value<double>(cmd, "y1"),
+					parse_attr_value<double>(cmd, "x2"), parse_attr_value<double>(cmd, "y2"),
+					parse_attr_value<double>(cmd, "x3"), parse_attr_value<double>(cmd, "y3"));
+			else if (name == "closepath")
+				path.closepath();
+		}
+	}
+	if (!path.empty())
+		path.removeRedundantCommands();
+	return path;
+}
+
+
+/** Creates a new SVG path element from XML drawing commands.
+ *  @param[in] srcPathElement element holding the drawing commands
+ *  @param[in] stroke create a stroke path if true, a fill path otherwise
+ *  @param[out] bbox if not 0, gets the bounding box of the resulting path */
+static unique_ptr<SVGElement> create_path_element (XMLElement *srcPathElement, bool stroke, BoundingBox *bbox=nullptr) {
+	unique_ptr<SVGElement> pathElement;
+	auto path = create_path(srcPathElement);
+	if (!path.empty()) {
+		auto matrix = parse_attr_value<Matrix>(srcPathElement, "transform");
+		path.transform(matrix);
+		if (bbox)
+			*bbox = path.computeBBox();
+		pathElement = util::make_unique<SVGElement>("path");
+		ostringstream oss;
+		path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);
+		pathElement->addAttribute("d", oss.str());
+		string colorspace = parse_attr_value<string>(srcPathElement, "colorspace");
+		string color = parse_attr_value<string>(srcPathElement, "color");
+		if (!stroke) {  // create path for filling?
+			if (parse_attr_value<string>(srcPathElement, "winding") == "evenodd")
+				pathElement->setFillRule(SVGElement::FR_EVENODD);
+			if (!colorspace.empty())
+				pathElement->setFillColor(to_color(colorspace, color));
+		}
+		else {  // create path for stroking
+			if (!colorspace.empty())
+				pathElement->setStrokeColor(to_color(colorspace, color));
+			pathElement->setNoFillColor();
+			double linewidth=1;
+			if (const char *valstr = srcPathElement->getAttributeValue("linewidth")) {
+				double lwScale = matrix_extent(matrix);
+				linewidth = parse_value<double>(valstr);
+				pathElement->setStrokeWidth(linewidth * lwScale);
+			}
+			double miterlimit=0;
+			SVGElement::LineJoin linejoin=SVGElement::LJ_MITER;
+			if (const char *valstr = srcPathElement->getAttributeValue("miterlimit"))
+				pathElement->setStrokeMiterLimit(miterlimit = parse_value<double>(valstr));
+			if (const char *valstr = srcPathElement->getAttributeValue("linejoin")) {
+				linejoin = SVGElement::LJ_MITER;
+				switch (parse_value<int>(valstr)) {
+					case 1: linejoin = SVGElement::LJ_ROUND; break;
+					case 2: linejoin = SVGElement::LJ_BEVEL; break;
+				}
+				pathElement->setStrokeLineJoin(linejoin);
+			}
+			if (const char *valstr = srcPathElement->getAttributeValue("linecap")) {
+				SVGElement::LineCap captype = SVGElement::LC_BUTT;
+				switch (parse_value<int>(valstr)) {
+					case 1: captype = SVGElement::LC_ROUND; break;
+					case 2: captype = SVGElement::LC_SQUARE; break;
+				}
+				pathElement->setStrokeLineCap(captype);
+			}
+			if (const char *valstr = srcPathElement->getAttributeValue("dash")) {
+				auto offset = parse_attr_value<double>(srcPathElement, "dash_phase");
+				pathElement->setStrokeDash(valstr, offset);
+			}
+			if (bbox) {
+				double extent = (linewidth != 0 ? linewidth : 1.0) * matrix_max_extent(matrix);
+				if (linejoin == SVGElement::LJ_MITER && miterlimit > 1)
+					extent *= miterlimit;
+				bbox->expand(extent);
+			}
+		}
+	}
+	return pathElement;
+}
+
+
+void PDFHandler::doFillPath (XMLElement *trcFillPathElement) {
+	if (auto pathElement = create_path_element(trcFillPathElement, false)) {
+		if (XMLElement *parent = trcFillPathElement->parent()->toElement()) {
+			if (parent->name() == "group") {
+				if (const char *valstr = parent->getAttributeValue("blendmode"))
+					pathElement->setFillOpacity(Opacity::blendMode(valstr));
+				if (const char *valstr = parent->getAttributeValue("alpha"))
+					pathElement->setFillOpacity(OpacityAlpha(parse_value<double>(valstr)));
+			}
+		}
+		_svg->appendToPage(std::move(pathElement));
+	}
+}
+
+
+void PDFHandler::doStrokePath (XMLElement *trcStrokePathElement) {
+	if (auto pathElement = create_path_element(trcStrokePathElement, true)) {
+		if (XMLElement *parent = trcStrokePathElement->parent()->toElement()) {
+			if (parent->name() == "group") {
+				Opacity opacity;
+				if (const char *valstr = parent->getAttributeValue("blendmode"))
+					opacity.setBlendMode(Opacity::blendMode(valstr));
+				if (const char *valstr = parent->getAttributeValue("alpha"))
+					opacity.strokealpha().setConstAlpha(parse_value<double>(valstr));
+				pathElement->setStrokeOpacity(opacity);
+			}
+		}
+		_svg->appendToPage(std::move(pathElement));
+	}
+}
+
+
+void PDFHandler::doClipPath (XMLElement *trcClipPathElement) {
+	if (auto pathElement = create_path_element(trcClipPathElement, false)) {
+		string id = "cp"+to_string(_numClipPath++);
+		auto clipPathElement = util::make_unique<SVGElement>("clipPath");
+		clipPathElement->addAttribute("id", id);
+		auto groupElement = util::make_unique<SVGElement>("g");
+		_clipPathStack.emplace(ClipPathData{std::move(id), groupElement.get()});
+		groupElement->setClipPathUrl(_clipPathStack.top().id);
+		clipPathElement->append(std::move(pathElement));
+		_svg->appendToDefs(std::move(clipPathElement));
+		_svg->pushPageContext(std::move(groupElement));
+	}
+}
+
+
+void PDFHandler::doClipStrokePath (XMLElement *trcClipStrokePathElement) {
+	BoundingBox pathbox;
+	if (auto pathElement = create_path_element(trcClipStrokePathElement, true, &pathbox)) {
+		pathElement->setStrokeColor(Color::WHITE);
+		string id = "cm"+to_string(_numClipPath++);
+		auto maskElement = util::make_unique<SVGElement>("mask");
+		maskElement->addAttribute("id", id);
+		maskElement->addAttribute("x", pathbox.minX());
+		maskElement->addAttribute("y", pathbox.minY());
+		maskElement->addAttribute("width", pathbox.width());
+		maskElement->addAttribute("height", pathbox.height());
+		maskElement->addAttribute("maskUnits", "userSpaceOnUse");
+		maskElement->append(std::move(pathElement));
+		auto groupElement = util::make_unique<SVGElement>("g");
+		groupElement->setMaskUrl(id);
+		_clipPathStack.emplace(ClipPathData{std::move(id), groupElement.get()});
+		_svg->appendToDefs(std::move(maskElement));
+		_svg->pushPageContext(std::move(groupElement));
+	}
+}
+
+
+void PDFHandler::doClipText (XMLElement *trcClipTextElement) {
+	string id = "cp"+to_string(_numClipPath++);
+	auto clipPathElement = util::make_unique<SVGElement>("clipPath");
+	clipPathElement->addAttribute("id", id);
+	auto groupElement = util::make_unique<SVGElement>("g");
+	_clipPathStack.emplace(ClipPathData{std::move(id), groupElement.get()});
+	groupElement->setClipPathUrl(_clipPathStack.top().id);
+	SVGElement *cpElementPtr = clipPathElement.get();
+	_svg->pushPageContext(std::move(clipPathElement));
+	doFillText(trcClipTextElement);
+	_svg->popPageContext();
+	_svg->appendToDefs(XMLElement::detach(cpElementPtr));  // move clipPath element from page to defs section
+	_svg->pushPageContext(std::move(groupElement));
+}
+
+
+void PDFHandler::doPopClip (XMLElement*) {
+	if (!_clipPathStack.empty()) {
+		_svg->popPageContext();
+		if (_clipPathStack.top().groupElement->empty())
+			XMLElement::detach(_clipPathStack.top().groupElement);
+		_clipPathStack.pop();
+	}
+}
+
+
+static unique_ptr<SVGElement> create_use_element (double x, double y, const string &refID) {
+	auto useElement = util::make_unique<SVGElement>("use");
+	useElement->addAttribute("x", x);
+	useElement->addAttribute("y", y);
+	useElement->addAttribute("xlink:href", "#"+refID);
+	return useElement;
+}
+
+
+void PDFHandler::doFillImage (XMLElement *trcFillImageElement) {
+	if (_numImages < _imgSeq.size()) {
+		auto it = _objDict.find(_imgSeq[_numImages]);
+		if (it != _objDict.end()) {
+			string imgID = "img"+to_string(it->second.num)+"-"+XXH32HashFunction(_fname).digestString();
+			auto w = parse_attr_value<double>(trcFillImageElement, "width");
+			auto h = parse_attr_value<double>(trcFillImageElement, "height");
+			auto alpha = parse_attr_value<double>(trcFillImageElement, "alpha");
+			if (w == 0 || h == 0 || alpha == 0)
+				return;
+			// add base64 encoding of the image to the defs section if it hasn't been referenced yet
+			auto last = _imgSeq.begin()+int(_numImages);
+			if (find(_imgSeq.begin(), last, it->first) == last) {
+				string fname = it->second.fname;
+				auto symbolElement = util::make_unique<SVGElement>("symbol");
+				symbolElement->addAttribute("id", imgID);
+				symbolElement->addAttribute("viewBox", BoundingBox(0, 0, w, h).svgViewBoxString());
+				auto imgElement = util::make_unique<SVGElement>("image");
+				imgElement->addAttribute("width", parse_attr_value<double>(trcFillImageElement, "width"));
+				imgElement->addAttribute("height", parse_attr_value<double>(trcFillImageElement, "height"));
+				imgElement->addAttribute("@@xlink:href", "data:"+util::mimetype(fname)+";base64,"+fname);
+				symbolElement->append(std::move(imgElement));
+				_svg->appendToDefs(std::move(symbolElement));
+			}
+			// add reference to image
+			auto useElement = create_use_element(0, 0, imgID);
+			useElement->setOpacity(OpacityAlpha(alpha));
+			Matrix matrix = parse_attr_value<Matrix>(trcFillImageElement, "transform");
+			matrix.rmultiply(ScalingMatrix(1/w, 1/h));
+			useElement->setTransform(matrix);
+			if (!_clipPathStack.empty())
+				useElement->setClipPathUrl(_clipPathStack.top().id);
+			_svg->appendToPage(std::move(useElement));
+		}
+		_numImages++;
+	}
+}
+
+
+static string to_utf8 (const string &str) {
+	if (str.empty())
+		return "";
+	if (str.front() != '&' || str.back() != ';')
+		return str;
+	string ent = str.substr(1, str.length()-2);
+	if (ent == "amp")  return Unicode::utf8('&');
+	if (ent == "apos") return Unicode::utf8('\'');
+	if (ent == "gt")   return Unicode::utf8('>');
+	if (ent == "lt")   return Unicode::utf8('<');
+	if (ent == "quot") return Unicode::utf8('"');
+	if (ent[0] == '#') {
+		try {
+			int32_t cp;
+			cp = (ent[1] == 'x' ? stoi(ent.substr(2), nullptr, 16) : stoi(ent.substr(1)));
+			return Unicode::utf8(cp);
+		}
+		catch (exception&) {}
+	}
+	return "";
+}
+
+
+static string strip_subset_prefix (const std::string &fontname) {
+	auto pos = fontname.find('+');
+	if (pos != string::npos)
+		return fontname.substr(pos+1);
+	return fontname;
+}
+
+
+static string compose_utf8_char (const XMLElement *charElement, int glyph) {
+	string utf8 = to_utf8(parse_attr_value<string>(charElement, "unicode"));
+	string nonlig;
+	for (XMLElement *elem=charElement->nextElement(); elem && !elem->hasAttribute("glyph"); elem=elem->nextElement())
+		nonlig += to_utf8(parse_attr_value<string>(elem, "unicode"));
+	if (!nonlig.empty()) {
+		if (uint32_t lig_cp = Unicode::toLigature(utf8+nonlig)) // known Unicode ligature?
+			utf8 = Unicode::utf8(lig_cp);
+		else if (glyph <= 0x1900)  // unknown ligature fitting in Private Use Zone?
+			utf8 = Unicode::utf8(0xE000+glyph);
+		// TODO: handle unknown ligatures with glyph indices > 0x1900
+	}
+	return utf8;
+}
+
+
+void PDFHandler::doFillText (XMLElement *trcFillTextElement) {
+	for (const XMLNode *textchild : *trcFillTextElement) {
+		if (const XMLElement *spanElement = textchild->toElement()) {
+			auto trm = parse_attr_value<vector<double>>(spanElement, "trm");
+			if (trm.size() < 4 || trm[0] == 0)
+				continue;
+			auto fontname = strip_subset_prefix(parse_attr_value<string>(spanElement, "font"));
+			string filename;
+			auto it = _objDict.find(fontname);
+			if (it != _objDict.end())
+				filename = it->second.fname;
+			if (filename.empty())
+				filename = "sys://"+fontname;
+			double ptsize = abs(trm[0]);
+			int fontID = FontManager::instance().registerFont(filename, ptsize);
+			if (fontID >= 0) {
+				auto font = font_cast<NativeFont*>(FontManager::instance().getFontById(fontID));
+				if (font != _currentFont) {
+					_svg->setFont(FontManager::instance().fontID(font), *font);
+					_currentFont = font;
+					_svg->setX(0);
+					_svg->setY(0);
+					_x = _y = numeric_limits<double>::max();
+				}
+				Matrix fontMatrix({trm[0]/ptsize, -trm[2]/ptsize, 0, trm[1]/ptsize, -trm[3]/ptsize});
+				fontMatrix.invert();
+				Matrix matrix = parse_attr_value<Matrix>(trcFillTextElement, "transform");
+				matrix.rmultiply(fontMatrix);
+				_svg->setMatrix(matrix);
+				string colorspace = parse_attr_value<string>(trcFillTextElement, "colorspace");
+				string colorval = parse_attr_value<string>(trcFillTextElement, "color");
+				_svg->setColor(to_color(colorspace, colorval));
+				for (const XMLNode *spanchild : *spanElement) {
+					const XMLElement *charElement = spanchild->toElement();
+					if (!charElement || charElement->name() != "g" || !charElement->hasAttribute("glyph"))
+						continue;
+					int glyph;
+					if (font->isCIDFont())
+						glyph = parse_attr_value<int>(charElement, "glyph");
+					else {
+						glyph = font->charIndexByName(parse_attr_value<string>(charElement, "glyph"));
+						if (glyph == 0)
+							glyph = parse_attr_value<int>(charElement, "glyph");
+					}
+					// determine code point of current character
+					string utf8;
+					if (charElement->hasAttribute("unicode"))
+						utf8 = parse_attr_value<string>(charElement, "unicode");
+					if (utf8.empty())
+						utf8 = compose_utf8_char(charElement, glyph);
+					if (glyph == 0 || utf8.empty())
+						continue;
+					DPair p(parse_attr_value<double>(charElement, "x"), parse_attr_value<double>(charElement, "y"));
+					p = fontMatrix * p;
+					if (abs(_x-p.x()) > 0.2) {_x = p.x(); _svg->setX(_x);}
+					if (abs(_y-p.y()) > 0.2) {_y = p.y(); _svg->setY(_y);}
+					font->mapCharToUnicode(glyph, Unicode::utf8ToCodepoint(utf8));
+					if (font->verticalLayout())
+						_y += font->charHeight(glyph);
+					else
+						_x += font->charWidth(glyph);
+					_svg->appendChar(glyph, p.x(), p.y());
+					FontManager::instance().addUsedChar(*font, glyph);
+				}
+			}
+		}
+	}
+}
+
+
+void PDFHandler::doOpenTile (XMLElement *trcTileElement) {
+	auto patternSymbol = util::make_unique<SVGElement>("symbol");
+	patternSymbol->addAttribute("id", "tile"+ to_string(_numPatterns));
+	patternSymbol->addAttribute("style", "overflow:visible");
+	_svg->pushPageContext(std::move(patternSymbol));
+}
+
+
+static unique_ptr<SVGElement> rect_path_elem (const vector<double> &coords) {
+	GraphicsPath<double> path;
+	path.moveto(coords[0], coords[1]);
+	path.lineto(coords[2], coords[1]);
+	path.lineto(coords[2], coords[3]);
+	path.lineto(coords[0], coords[3]);
+	path.closepath();
+	ostringstream oss;
+	path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);
+	auto pathElement = util::make_unique<SVGElement>("path");
+	pathElement->addAttribute("d", oss.str());
+	return pathElement;
+}
+
+
+void PDFHandler::doCloseTile (XMLElement *trcTileElement) {
+	_svg->popPageContext();  // definition of symbol finished
+	auto xstep = parse_attr_value<double>(trcTileElement, "xstep");
+	auto ystep = parse_attr_value<double>(trcTileElement, "ystep");
+	if (xstep == 0 || ystep == 0)
+		return;
+	auto view = parse_attr_value<vector<double>>(trcTileElement, "view");
+	auto patternElement = util::make_unique<SVGElement>("pattern");
+	patternElement->addAttribute("id", "pat"+ to_string(_numPatterns));
+	patternElement->addAttribute("x", 0);
+	patternElement->addAttribute("y", 0);
+	patternElement->addAttribute("width", xstep);
+	patternElement->addAttribute("height", ystep);
+	patternElement->addAttribute("patternUnits", "userSpaceOnUse");
+
+	SVGElement *contextElement = patternElement.get();
+	view.resize(4);
+	if (view[0] > 0 || view[2] > xstep || view[1] > 0 || view[3] > ystep) {
+		auto clipPathElement = util::make_unique<SVGElement>("clipPath");
+		clipPathElement->addAttribute("id", "patcp"+to_string(_numPatterns));
+		auto pathElement = rect_path_elem(view);
+		clipPathElement->append(std::move(pathElement));
+		patternElement->append(std::move(clipPathElement));
+
+		auto clipGroupElement = util::make_unique<SVGElement>("g");
+		clipGroupElement->setClipPathUrl("patcp"+to_string(_numPatterns));
+		contextElement = clipGroupElement.get();
+		patternElement->append(std::move(clipGroupElement));
+	}
+	Matrix matrix = parse_attr_value<Matrix>(trcTileElement, "transform");
+	auto transformGroupElement = util::make_unique<SVGElement>("g");
+	transformGroupElement->setTransform(matrix);
+	// Most SVG renderers don't support overflow:visible on patterns. Thus, parts of
+	// the pattern graphics that lie outside the tile area are clipped. To work around
+	// this, we place the pattern graphics at all 4 corners of the tile rectangle. This
+	// way, the outside parts of all quadrants are drawn inside as well so that adjacent
+	// tiles are enabled to compose the pattern. If the pattern graphics falls completely
+	// inside the tile area, the additional drawings are empty and thus redundant. For now,
+	// we keep them anyway.
+	Matrix invmatrix{matrix.get(0,0), matrix.get(0,1), 0, matrix.get(1,0), matrix.get(1,1)};
+	invmatrix.invert();
+	for (int i=0; i < 2; i++) {
+		for (int j=0; j < 2; j++) {
+			DPair p = invmatrix * DPair(xstep*i, ystep*j);
+			transformGroupElement->append(create_use_element(p.x(), p.y(), "tile"+to_string(_numPatterns)));
+		}
+	}
+	contextElement->append(std::move(transformGroupElement));
+	_svg->appendToPage(std::move(patternElement));
+	auto area = parse_attr_value<vector<double>>(trcTileElement, "area");
+	area.resize(4);
+	auto pathElement = rect_path_elem(area);
+	pathElement->setFillPatternUrl("pat"+to_string(_numPatterns));
+	pathElement->setTransform(matrix);
+	_svg->appendToPage(std::move(pathElement));
+	_numPatterns++;
+}
+
+
+void PDFHandler::collectObjects () {
+	string tmpdir = FileSystem::tmpdir();
+	_objDict = parse_pdf_dict<ObjID>(mtShow("pages/" + to_string(_pageno) + "/Resources/XObject"));
+	// replace referenced font IDs by actual IDs used for extracted fonts
+	for (auto &entry : _objDict) {
+		string objtype = mtShow(to_string(entry.second.num)+"/Type", SearchPattern(R"(/(\w+))", "$1"));
+		// store filenames of non-font object in object map
+		auto fnameIt = _extractedFiles.find(entry.second.num);
+		entry.second.fname = fnameIt != _extractedFiles.end() ? tmpdir+fnameIt->second : "";
+	}
+	for (auto &entry : _extractedFiles) {
+		if (entry.second.substr(0, 5) == "font-") {
+			string filepath = tmpdir+entry.second;  // path to font file
+			string fontname = strip_subset_prefix(FontEngine::instance().getPSName(filepath));
+			_objDict.emplace(fontname, ObjID(entry.first, 0, filepath));
+		}
+	}
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+string PDFHandler::mutool (const string &cmd, bool readFromStderr) {
+	string out;
+	Process("mutool", cmd).run(&out, readFromStderr ? Process::PF_STDERR : Process::PF_STDOUT);
+	return out;
+}
+
+
+string PDFHandler::mutool (const string &cmd, const SearchPattern &pattern, bool readFromStderr) {
+	string out;
+	Process("mutool", cmd).run(&out, pattern, readFromStderr ? Process::PF_STDERR : Process::PF_STDOUT);
+	return out;
+}
+
+
+string PDFHandler::mtExtract (const string &fname, const SearchPattern &pattern) {
+	return mutool("extract -a "+fname, pattern);
+}
+
+
+/** Calls "mutool show" to retrieve select data from a PDF file.
+ *  @param[in] fname name of PDF file
+ *  @param[in] path path expression locating the requested data
+ *  @param[in] fmtmode flag specifying the output format
+ *  @return mutool output, result of the query */
+string PDFHandler::mtShow (const string &fname, const string &path, char fmtmode) {
+	string cmd = "show -";
+	cmd += fmtmode;
+	cmd += " " + fname + " " + path;
+	return mutool(cmd);
+}
+
+
+string PDFHandler::mtShow (const string &fname, const string &path, const SearchPattern &pattern, char fmtmode) {
+	string cmd = "show -";
+	cmd += fmtmode;
+	cmd += " " + fname + " " + path;
+	return mutool(cmd, pattern);
+}
+
+#if 0
+int main (int argc, char *argv[]) {
+	if (argc < 2)
+		return 0;
+	SVGTree::USE_FONTS=true;
+	SVGTree::FONT_FORMAT = FontWriter::FontFormat::SVG;
+	SVGTree svg;
+	PDFHandler page(svg);
+	page.convert(argv[1], argc > 2 ? stoi(argv[2]) : 1);
+	svg.write(cout);
+}
+#endif


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFHandler.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFHandler.hpp	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,109 @@
+/*************************************************************************
+** PDFHandler.hpp                                                       **
+**                                                                      **
+** This file is part of dvisvgm -- a fast DVI to SVG converter          **
+** Copyright (C) 2005-2023 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 PDFHANDLER_HPP
+#define PDFHANDLER_HPP
+
+#include <map>
+#include <string>
+#include "BoundingBox.hpp"
+#include "Process.hpp"
+#include "SVGTree.hpp"
+
+class XMLElement;
+
+class PDFHandler {
+	public:
+		struct ObjID {
+			ObjID () : num(-1), gen(0) {}
+			ObjID (int number, int generation) : num(number), gen(generation) {}
+			ObjID (int number, int generation, std::string filename) : num(number), gen(generation), fname(std::move(filename)) {}
+			bool valid () const {return num >= 0;}
+			int num, gen;  ///< object and generation number
+			std::string fname;
+		};
+
+	protected:
+		struct ClipPathData {
+			ClipPathData (std::string cpid, SVGElement *group) : id(std::move(cpid)), groupElement(group) {}
+			std::string id;
+			SVGElement *groupElement;
+		};
+
+	public:
+		PDFHandler () =default;
+		explicit PDFHandler (SVGTree &svg) : _svg(&svg) {}
+		PDFHandler (const PDFHandler &page) =delete;
+		PDFHandler (PDFHandler &&page) =delete;
+		~PDFHandler ();
+		void assignSVGTree (SVGTree &svg) {_svg = &svg;}
+		const BoundingBox& bbox () const {return _bbox;}
+		std::unique_ptr<SVGElement> convert (const std::string &fname, int pageno, std::unique_ptr<SVGElement> context=nullptr);
+		static std::string mutoolVersion ();
+		static BoundingBox bbox (std::string &fname, int pageno);
+		static bool available () {return !mutoolVersion().empty();}
+
+	protected:
+		static std::string mutool (const std::string &cmd, bool readFromStderr=false);
+		static std::string mutool (const std::string &cmd, const SearchPattern &pattern, bool readFromStderr=false);
+		static std::string mtExtract (const std::string &fname, const SearchPattern &pattern);
+		static std::string mtShow (const std::string &fname, const std::string &path, char fmtmode= 'b');
+		static std::string mtShow (const std::string &fname, const std::string &path, const SearchPattern &pattern, char fmtmode= 'b');
+		std::string mtShow (const std::string &path, char fmtmode= 'b') const {return mtShow(_fname, path, fmtmode);}
+		std::string mtShow (const std::string &path, const SearchPattern &pattern, char fmtmode= 'b') const {
+			return mtShow(_fname, path, pattern, fmtmode);
+		}
+		void initFile (const std::string &fname);
+		void finishFile ();
+		void initPage (int pageno, std::unique_ptr<SVGElement> context);
+		std::unique_ptr<SVGElement> finishPage ();
+		void collectObjects ();
+		void elementOpened (XMLElement *trcElement);
+		void elementClosed (XMLElement *trcElement);
+		void doClipPath (XMLElement *trcClipPathElement);
+		void doClipStrokePath (XMLElement *trcClipStrokePathElement);
+		void doClipText (XMLElement *trcClipTextElement);
+		void doPopClip (XMLElement *trcPopClipElement);
+		void doFillPath (XMLElement *trcFillPathElement);
+		void doStrokePath (XMLElement *trcStrokePathElement);
+		void doFillImage (XMLElement *trcFillImageElement);
+		void doFillText (XMLElement *trcFillTextElement);
+		void doOpenTile (XMLElement *trcTileElement);
+		void doCloseTile (XMLElement *trcTileElement);
+
+	private:
+		std::string _fname;
+		int _pageno=0;
+		int _numPages=0;
+		std::map<int,std::string> _extractedFiles;
+		std::map<std::string,ObjID> _objDict;    ///< object names => object IDs
+		std::vector<std::string> _imgSeq;
+		NativeFont *_currentFont=nullptr;        ///< currently selected font
+		size_t _numClipPath=0; ///< number of clipping paths processed
+		size_t _numImages=0;   ///< number of embedded images already processed
+		size_t _numPatterns=0; ///< number of patterns processed
+		std::stack<ClipPathData> _clipPathStack;
+		double _x=0, _y=0;     ///< current character position
+		BoundingBox _bbox;     ///< bounding box of current/last page processed
+		SVGTree *_svg=nullptr;
+		XMLElement *_context=nullptr; ///< node holding the generated page contents
+};
+
+#endif

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PDFParser.cpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFParser.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PDFParser.hpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFToSVG.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFToSVG.cpp	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFToSVG.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,92 @@
+/*************************************************************************
+** PDFToSVG.cpp                                                         **
+**                                                                      **
+** This file is part of dvisvgm -- a fast DVI to SVG converter          **
+** Copyright (C) 2005-2023 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 <cstdlib>
+#include "Message.hpp"
+#include "PDFToSVG.hpp"
+
+using namespace std;
+
+
+PDFToSVG::PDFToSVG (const string &fname, SVGOutputBase &out) : ImageToSVG(fname, out) {
+	_useGS = (gsVersion() > 0 && gsVersion() < 10010);
+	if (const char *pdfproc = getenv("DVISVGM_PDF_PROC")) {
+		if (strcmp(pdfproc, "gs") == 0)
+			_useGS = true;
+		else if (strcmp(pdfproc, "mutool") == 0)
+			_useGS = false;
+	}
+	if (!_useGS)
+		_pdfHandler.assignSVGTree(_svg);
+}
+
+
+void PDFToSVG::checkGSAndFileFormat () {
+	if (_useGS)
+		ImageToSVG::checkGSAndFileFormat();
+	else {
+		if (!PDFHandler::available()) {
+			ostringstream oss;
+			if (gsVersion() > 0) {
+				oss << "To process PDF files, either Ghostscript < 10.1 or mutool is required.\n";
+				oss << "The installed Ghostscript version " << Ghostscript().revisionstr() << " isn't supported.\n";
+				throw MessageException(oss.str());
+			}
+		}
+	}
+	if (!imageIsValid())
+		throw MessageException("invalid "+imageFormat()+" file");
+}
+
+
+/** Returns the total number of pages in the PDF file. */
+int PDFToSVG::totalPageCount () const {
+	if (_totalPageCount < 0) {
+		_totalPageCount = psInterpreter().pdfPageCount(filename());
+		if (_totalPageCount < 1)
+			throw MessageException("can't retrieve number of pages from file " + filename());
+	}
+	return _totalPageCount;
+}
+
+
+bool PDFToSVG::imageIsValid () const {
+	ifstream ifs(filename());
+	if (ifs) {
+		char buf[16];
+		ifs.getline(buf, 16);
+		return std::strncmp(buf, "%PDF-1.", 7) == 0;
+	}
+	return false;
+}
+
+
+void PDFToSVG::convert (int pageno) {
+	if (_useGS)
+		ImageToSVG::convert(pageno);
+	else {
+		Message::mstream().indent(0);
+		Message::mstream(false, Message::MC_PAGE_NUMBER) << "processing PDF file\n";
+		Message::mstream().indent(1);
+		_pdfHandler.convert(filename(), pageno);
+		embed(_pdfHandler.bbox());
+		writeSVG(pageno);
+	}
+}
\ No newline at end of file


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFToSVG.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFToSVG.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFToSVG.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PDFToSVG.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PDFToSVG.hpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -23,40 +23,27 @@
 
 #include <fstream>
 #include "ImageToSVG.hpp"
+#include "PDFHandler.hpp"
 
-class PsSpecialHandler;
 
 class PDFToSVG : public ImageToSVG {
 	public:
-		PDFToSVG (const std::string &fname, SVGOutputBase &out) : ImageToSVG(fname, out) {}
+		PDFToSVG (const std::string &fname, SVGOutputBase &out);
 		bool isSinglePageFormat() const override {return false;}
+		int totalPageCount() const override;
+		void convert (int pageno) override;
 
-		/** Returns the total number of pages in the PDF file. */
-		int totalPageCount() const override {
-			if (_totalPageCount < 0) {
-				_totalPageCount = psInterpreter().pdfPageCount(filename());
-				if (_totalPageCount < 1)
-					throw MessageException("can't retrieve number of pages from file " + filename());
-			}
-			return _totalPageCount;
-		}
-
 	protected:
-		bool imageIsValid () const override {
-			std::ifstream ifs(filename());
-			if (ifs) {
-				char buf[16];
-				ifs.getline(buf, 16);
-				return std::strncmp(buf, "%PDF-1.", 7) == 0;
-			}
-			return false;
-		}
+		void checkGSAndFileFormat () override;
+		bool imageIsValid () const override;
 		std::string imageFormat () const override {return "PDF";}
-		BoundingBox imageBBox () const override {return BoundingBox();}
+		BoundingBox imageBBox () const override {return {};}
 		std::string psSpecialCmd () const override {return "pdffile=";}
 
 	private:
 		mutable int _totalPageCount = -1;
+		PDFHandler _pdfHandler;
+		bool _useGS = true;
 };
 
 #endif

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSFilter.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSFilter.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSFilter.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PSFilter.hpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PSInterpreter.cpp                                                    **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -81,6 +81,16 @@
 }
 
 
+/** Sets or replaces the filter applied to the PS code.
+ *  @param[in] filter the new filter being used
+ *  @return the previous, replaced filter (nullptr if there was none) */
+PSFilter* PSInterpreter::setFilter (PSFilter *filter) {
+	PSFilter *prevFilter = _filter;
+	_filter = filter;
+	return prevFilter;
+}
+
+
 PSActions* PSInterpreter::setActions (PSActions *actions) {
 	PSActions *old_actions = _actions;
 	_actions = actions;

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSInterpreter.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PSInterpreter.hpp                                                    **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -108,7 +108,7 @@
 		bool executeRaw (const std::string &str, int n);
 		bool active () const                   {return _mode != PS_QUIT;}
 		void limit (size_t max_bytes)          {_bytesToRead = max_bytes;}
-		void setFilter (PSFilter *filter)      {_filter = filter;}
+		PSFilter* setFilter (PSFilter *filter);
 		PSActions* setActions (PSActions *actions);
 		int pdfPageCount (const std::string &fname);
 		BoundingBox pdfPageBox (const std::string &fname, int pageno);
@@ -115,6 +115,7 @@
 		const std::vector<std::string>& rawData () const {return _rawData;}
 		bool setImageDevice (const std::string &deviceStr);
 		bool hasFullOpacitySupport () const {return _gs.revision() >= 952;}
+		bool supportsPDF () const           {return _gs.revision() > 0 && _gs.revision() < 10010;}
 		static std::vector<PSDeviceInfo> getImageDeviceInfos ();
 		static void listImageDeviceInfos (std::ostream &os);
 		static bool imageDeviceKnown (std::string deviceStr);

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PSPattern.cpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPattern.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PSPattern.hpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PSPreviewFilter.cpp                                                  **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PSPreviewFilter.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PSPreviewFilter.hpp                                                  **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PageRanges.cpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -24,7 +24,12 @@
 
 using namespace std;
 
+using FilterFunc = bool (*)(int);
 
+static bool is_even (int n) {return n % 2 == 0;}
+static bool is_odd (int n) {return n % 2 == 1;}
+
+
 /** Analyzes a string describing a range sequence.
  *  Syntax: ([0-9]+(-[0-9]*)?)|(-[0-9]+)(,([0-9]+(-[0-9]*)?)|(-[0-9]+))*
  *  @param[in] str string to parse
@@ -33,17 +38,18 @@
 bool PageRanges::parse (const string &str, int max_page) {
 	StringInputBuffer ib(str);
 	BufferInputReader ir(ib);
-	while (ir) {
+	while (ir && ir.peek() != ':') {
 		int first=1;
 		int last=max_page;
 		ir.skipSpace();
 		if (!isdigit(ir.peek()) && ir.peek() != '-')
 			return false;
-
 		if (isdigit(ir.peek()))
 			first = ir.getInt();
 		ir.skipSpace();
-		if (ir.peek() == '-') {
+		if (ir.peek() != '-')
+			last = first;
+		else {
 			while (ir.peek() == '-')
 				ir.get();
 			ir.skipSpace();
@@ -50,8 +56,6 @@
 			if (isdigit(ir.peek()))
 				last = ir.getInt();
 		}
-		else
-			last = first;
 		ir.skipSpace();
 		if (ir.peek() == ',') {
 			ir.get();
@@ -58,7 +62,7 @@
 			if (ir.eof())
 				return false;
 		}
-		else if (!ir.eof())
+		else if (!ir.eof() && ir.peek() != ':')
 			return false;
 		if (first > last)
 			swap(first, last);
@@ -70,10 +74,40 @@
 		}
 		addRange(first, last);
 	}
+	// apply filter if present
+	if (ir.peek() == ':') {
+		ir.get();
+		string filterName = ir.getWord();
+		FilterFunc filterFunc;
+		if (filterName == "even")
+			filterFunc = &is_even;
+		else if (filterName == "odd")
+			filterFunc = &is_odd;
+		else
+			return false;
+		*this = filter(filterFunc);
+	}
 	return true;
 }
 
 
+/** Returns a new PageRanges object that contains only the values
+ *  for which the given filter function returns true. */
+PageRanges PageRanges::filter (FilterFunc filterFunc) const {
+	PageRanges newRanges;
+	if (filterFunc == nullptr)
+		newRanges = *this;
+	else {
+		for (const auto &range : *this) {
+			for (int i=range.first; i <= range.second; i++)
+				if (filterFunc(i))
+					newRanges.addRange(i, i);
+		}
+	}
+	return newRanges;
+}
+
+
 /** Returns the number of pages. */
 size_t PageRanges::numberOfPages () const {
 	size_t sum=0;

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageRanges.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PageRanges.hpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -27,6 +27,7 @@
 class PageRanges : public NumericRanges<int> {
 	public:
 		bool parse (const std::string &str, int max_page=0);
+		PageRanges filter (bool (*filterFunc)(int)) const;
 		size_t numberOfPages () const;
 };
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PageSize.cpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PageSize.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PageSize.hpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Pair.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Pair.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Pair.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Pair.hpp                                                             **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -73,6 +73,7 @@
 struct Pair32 : public Pair<int32_t> {
 	explicit Pair32 (int32_t x=0, int32_t y=0) : Pair<int32_t>(x, y) {}
 	explicit Pair32 (double x, double y) : Pair<int32_t>(lround(x), lround(y)) {}
+	explicit Pair32 (const Pair<double> &p) : Pair32(p.x(), p.y()) {}
 	Pair32 (const Pair<int32_t> &p) : Pair<int32_t>(p) {}
 };
 
@@ -82,6 +83,11 @@
 	return DPair(std::lround(p.x()), std::lround(p.y()));
 }
 
+
+template<> template<>
+inline Pair<int>::Pair (const Pair<double> &p) : _x(int(round(p.x()))), _y(int(round(p.y()))) {}
+
+
 template <typename T>
 IMPLEMENT_ARITHMETIC_OPERATOR(Pair<T>, +)
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PapersizeSpecialHandler.cpp                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PapersizeSpecialHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PapersizeSpecialHandler.hpp                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PathClipper.cpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -51,7 +51,7 @@
  *  is called. */
 class FlattenActions : public CurvedPath::IterationActions {
 	public:
-		FlattenActions (vector<Bezier> &curves, Polygons &polygons, int &numLines)
+		FlattenActions (vector<CubicBezier> &curves, Polygons &polygons, int &numLines)
 			: _polygons(polygons), _curves(curves), _numLines(numLines) {}
 
 		void moveto (const CurvedPath::Point &p) override {
@@ -74,12 +74,12 @@
 		}
 
 		void quadto (const CurvedPath::Point &p1, const CurvedPath::Point &p2) override {
-			Bezier bezier(_currentPoint, p1, p2);
-			addCurvePoints(bezier);
+			QuadBezier qbezier(_currentPoint, p1, p2);
+			addCurvePoints(CubicBezier(qbezier));
 		}
 
 		void cubicto (const CurvedPath::Point &p1, const CurvedPath::Point &p2, const CurvedPath::Point &p3) override {
-			Bezier bezier(_currentPoint, p1, p2, p3);
+			CubicBezier bezier(_currentPoint, p1, p2, p3);
 			addCurvePoints(bezier);
 		}
 
@@ -98,7 +98,7 @@
 		}
 
 	protected:
-		void addCurvePoints (const Bezier &bezier) {
+		void addCurvePoints (const CubicBezier &bezier) {
 			if (_currentPoly.empty()) // this shouldn't happen but in case it does, ...
 				_currentPoly.emplace_back(IntPoint(0, 0, 0)); // ...add a start point first
 			vector<DPair> points;  // points of flattened curve
@@ -122,7 +122,7 @@
 		CurvedPath::Point _startPoint, _currentPoint;
 		Polygon _currentPoly;    ///< polygon being created
 		Polygons &_polygons;     ///< all polygons created
-		vector<Bezier> &_curves;
+		vector<CubicBezier> &_curves;
 		int &_numLines;
 };
 
@@ -288,7 +288,7 @@
 		if (diff == 1 || label1.id <= 0)  // line segment?
 			path.lineto(to_DPair(polygon[index2]));
 		else {  // Bézier curve segment
-			Bezier bezier(_curves[label1.id-1], label1.t, label2.t);
+			CubicBezier bezier(_curves[label1.id-1], label1.t, label2.t);
 			if (label1.t > label2.t)
 				bezier.reverse();
 			path.cubicto(bezier.point(1), bezier.point(2), bezier.point(3));

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PathClipper.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PathClipper.hpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -47,7 +47,7 @@
 		static void callback (IntPoint &e1bot, IntPoint &e1top, IntPoint &e2bot, IntPoint &e2top, IntPoint &ip);
 
 	private:
-		std::vector<Bezier> _curves;
+		std::vector<CubicBezier> _curves;
 		int _numLines=0;  ///< negative number of straight line segments in path been processed
 };
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PdfSpecialHandler.cpp                                                **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PdfSpecialHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PdfSpecialHandler.hpp                                                **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PreScanDVIReader.cpp                                                 **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PreScanDVIReader.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PreScanDVIReader.hpp                                                 **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Process.cpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -29,6 +29,7 @@
 #endif
 
 #include <cstdlib>
+#include <regex>
 #include "FileSystem.hpp"
 #include "Process.hpp"
 #include "SignalHandler.hpp"
@@ -43,25 +44,60 @@
 		enum class State {RUNNING, FINISHED, FAILED};
 
 	public:
-		Subprocess () =default;
+		Subprocess () : _rdbuf(4096) {}
 		Subprocess (const Subprocess&) =delete;
 		Subprocess (Subprocess&&) =delete;
 		~Subprocess ();
-		bool run (const string &cmd, string params);
-		bool readFromPipe (string &out);
+		bool run (const string &cmd, string params, Process::PipeFlags flags);
+		bool readFromPipe (string &out, const SearchPattern &pattern);
 		State state ();
 
+	protected:
+		string read (const SearchPattern &pattern, bool *error=nullptr);
+		size_t readFromPipe (char *buf, size_t size, bool *error=nullptr) const;
+
 	private:
+		vector<char> _rdbuf;
+		size_t _bufstartpos = 0;
 #ifdef _WIN32
-		HANDLE _pipeReadHandle=NULL;   ///< handle of read end of pipe
-		HANDLE _childProcHandle=NULL;  ///< handle of child process
+		HANDLE _pipeReadHandle = nullptr;   ///< handle of read end of pipe
+		HANDLE _childProcHandle = nullptr;  ///< handle of child process
 #else
-		int _readfd=-1; ///< file descriptor of read end of pipe
-		pid_t _pid=-1;  ///< PID of the subprocess
+		int _readfd = -1; ///< file descriptor of read end of pipe
+		pid_t _pid = -1;  ///< PID of the subprocess
 #endif
 };
 
 
+string Subprocess::read (const SearchPattern &pattern, bool *error) {
+	string result;
+	const size_t bytesRead = readFromPipe(&_rdbuf[_bufstartpos], _rdbuf.size()-_bufstartpos, error);
+	const size_t bufendpos = _bufstartpos + bytesRead;
+	smatch matches;
+	size_t matchendpos= bufendpos;  // buffer position after last match
+	if (pattern.search.empty())
+		result.assign(_rdbuf.data(), matchendpos);
+	else {
+		bool matched=false;
+		regex re(pattern.search);
+		for (auto it = cregex_iterator(&_rdbuf[0], &_rdbuf[bufendpos], re); it != cregex_iterator(); ++it) {
+			result += it->format(pattern.replace, regex_constants::format_no_copy);
+			matchendpos = it->position() + it->length();
+			matched = true;
+		}
+		const size_t MAX_OVERLAP=50;
+		size_t overlappos;
+		if (matched)
+			overlappos = max(bufendpos - min(bufendpos, MAX_OVERLAP), matchendpos);
+		else
+			overlappos = matchendpos - min(MAX_OVERLAP, matchendpos);
+		copy(_rdbuf.begin()+overlappos, _rdbuf.begin()+bufendpos, _rdbuf.begin());
+		_bufstartpos = bufendpos-overlappos;
+	}
+	return result;
+}
+
+
 Process::Process (string cmd, string paramstr)
 	: _cmd(std::move(cmd)), _paramstr(std::move(paramstr))
 {
@@ -72,14 +108,20 @@
  *  @param[out] out takes the output written to stdout by the executed subprocess
  *  @return true if process terminated properly
  *  @throw SignalException if CTRL-C was pressed during execution */
-bool Process::run (string *out) {
+
+bool Process::run (string *out, PipeFlags flags) {
+	return run(out, SearchPattern(), flags);
+}
+
+
+bool Process::run (string *out, const SearchPattern &pattern, PipeFlags flags) {
 	Subprocess subprocess;
-	if (!subprocess.run(_cmd, _paramstr))
+	if (!subprocess.run(_cmd, _paramstr, flags))
 		return false;
 	for (;;) {
 		if (out) {
 			out->clear();
-			subprocess.readFromPipe(*out);
+			subprocess.readFromPipe(*out, pattern);
 		}
 		Subprocess::State state = subprocess.state();
 		if (state != Subprocess::State::RUNNING)
@@ -94,11 +136,11 @@
  *  @param[out] out takes the output written to stdout by the executed process
  *  @return true if process terminated properly
  *  @throw SignalException if CTRL-C was pressed during execution */
-bool Process::run (const string &dir, string *out) {
+bool Process::run (const string &dir, string *out, PipeFlags flags) {
 	bool ret = false;
 	string cwd = FileSystem::getcwd();
 	if (FileSystem::chdir(dir)) {
-		ret = run(out);
+		ret = run(out, flags);
 		ret &= FileSystem::chdir(cwd);
 	}
 	return ret;
@@ -110,14 +152,14 @@
 
 static inline void close_and_zero_handle (HANDLE &handle) {
 	CloseHandle(handle);
-	handle = NULL;
+	handle = nullptr;
 }
 
 
 Subprocess::~Subprocess () {
-	if (_pipeReadHandle != NULL)
+	if (_pipeReadHandle != nullptr)
 		CloseHandle(_pipeReadHandle);
-	if (_childProcHandle != NULL) {
+	if (_childProcHandle != nullptr) {
 		TerminateProcess(_childProcHandle, 1);
 		CloseHandle(_childProcHandle);
 	}
@@ -124,17 +166,21 @@
 }
 
 
-/** Retrieves output generated by child process.
+/** Retrieves output generated by the child process and optionally filters
+ *  the lines by a regular expression and replaces them. If the search pattern
+ *  is not empty and the line currently processed doesn't match, the line isn't
+ *  appended to the output string.
  *  @param[out] out read output is appended to this string
+ *  @param[in] searchPattern regex pattern applied to each line
+ *  @param[in] replacePattern replacement for all lines matching the search pattern
  *  @returns false on errors */
-bool Subprocess::readFromPipe (string &out) {
+bool Subprocess::readFromPipe (string &out, const SearchPattern &pattern) {
 	if (!_pipeReadHandle)
 		return false;
-
-	bool success=false;
+	bool finished=false;
 	bool processExited=false;
 	DWORD len=0;
-	while (PeekNamedPipe(_pipeReadHandle, NULL, 0, NULL, &len, NULL)) {  // prevent blocking
+	while (PeekNamedPipe(_pipeReadHandle, nullptr, 0, nullptr, &len, nullptr)) {  // prevent blocking
 		if (len == 0) {
 			if (processExited)
 				break;
@@ -141,23 +187,34 @@
 			// process still busy
 			processExited = (!_childProcHandle || WaitForSingleObject(_childProcHandle, 100) != WAIT_TIMEOUT);
 		}
-		else {
-			char buf[4096];
-			success = ReadFile(_pipeReadHandle, buf, sizeof(buf), &len, NULL);
-			if (!success || len == 0)
-				break;
-			out.append(buf, len);
-		}
+		string buf = read(pattern, &finished);
+		if (buf.empty())
+			break;
+		out.append(buf);
 	}
-	return success;
+	return !finished;
 }
 
 
+/** Reads a sequence of bytes from the pipe into a buffer. The function stops reading
+ *  when either all bytes have been read from the pipe or the buffer is completely filled.
+ *  @param[in] buf pointer to start of the buffer
+ *  @param[in] size maximal number of bytes that can be stored in the buffer
+ *  @return number of bytes read */
+size_t Subprocess::readFromPipe (char *buf, size_t size, bool *error) const {
+	DWORD bytesRead;
+	bool success = ReadFile(_pipeReadHandle, buf, size, &bytesRead, nullptr);
+	if (error)
+		*error = !success;
+	return success ? bytesRead : 0;
+}
+
+
 /** Starts a child process.
  *  @param[in] cmd name of command to execute
  *  @param[in] paramstr parameters required by command
  *  @returns true if child process started properly */
-bool Subprocess::run (const string &cmd, string paramstr) {
+bool Subprocess::run (const string &cmd, string paramstr, Process::PipeFlags flags) {
 	SECURITY_ATTRIBUTES securityAttribs;
 	ZeroMemory(&securityAttribs, sizeof(SECURITY_ATTRIBUTES));
 	securityAttribs.nLength = sizeof(SECURITY_ATTRIBUTES);
@@ -168,7 +225,7 @@
 		return false;
 
 	SetHandleInformation(_pipeReadHandle, HANDLE_FLAG_INHERIT, 0);
-	HANDLE nullFile = CreateFile("NUL", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, &securityAttribs, OPEN_EXISTING, 0, NULL);
+	HANDLE nullFile = CreateFile("NUL", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, &securityAttribs, OPEN_EXISTING, 0, nullptr);
 	bool success = false;
 	if (nullFile != INVALID_HANDLE_VALUE) {
 		STARTUPINFO startupInfo;
@@ -176,8 +233,8 @@
 		startupInfo.cb = sizeof(STARTUPINFO);
 		startupInfo.dwFlags = STARTF_USESTDHANDLES;
 		startupInfo.hStdInput = nullFile;
-		startupInfo.hStdOutput = pipeWriteHandle;
-		startupInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
+		startupInfo.hStdOutput = (flags & Process::PF_STDOUT) ? pipeWriteHandle : nullFile;
+		startupInfo.hStdError = (flags & Process::PF_STDERR) ? pipeWriteHandle : nullFile;
 
 		PROCESS_INFORMATION processInfo;
 		ZeroMemory(&processInfo, sizeof(PROCESS_INFORMATION));
@@ -184,7 +241,7 @@
 
 		string cmdline = cmd + " " + paramstr;
 		// put subprocess in separate process group to prevent its termination in case of CTRL-C
-		success = CreateProcess(NULL, (LPSTR)cmdline.c_str(), NULL, NULL, true, CREATE_NEW_PROCESS_GROUP, NULL, NULL, &startupInfo, &processInfo);
+		success = CreateProcess(nullptr, (LPSTR)cmdline.c_str(), nullptr, nullptr, true, CREATE_NEW_PROCESS_GROUP, nullptr, nullptr, &startupInfo, &processInfo);
 		if (success) {
 			_childProcHandle = processInfo.hProcess;
 			CloseHandle(processInfo.hThread);
@@ -222,22 +279,31 @@
 /** Retrieves output generated by child process.
  *  @param[out] out read output is appended to this string
  *  @returns false on errors */
-bool Subprocess::readFromPipe (string &out) {
+bool Subprocess::readFromPipe (string &out, const SearchPattern &pattern) {
 	if (_readfd < 0 || _pid < 0)
 		return false;
-
-	char buf[1024];
-	ssize_t len;
-	while ((len = read(_readfd, buf, sizeof(buf))) > 0)
-		out.append(buf, len);
-	if (len < 0) {
+	bool finished=false;
+	for (;;) {
+		string buf = read(pattern, &finished);
+		if (buf.empty())
+			break;
+		out.append(buf);
+	}
+	if (finished) {
 		close(_readfd);
 		_readfd = -1;
 	}
-	return len >= 0;
+	return !finished;
 }
 
 
+size_t Subprocess::readFromPipe (char *buf, size_t size, bool *error) const {
+	auto len = ::read(_readfd, buf, size);
+	if (error)
+		*error = len < 0;
+	return len >= 0 ? size_t(len) : 0;
+}
+
 /** Extracts whitespace-separated parameters from a string.
  *  @param[in,out] paramstr the parameter string
  *  @param[out] params vector holding pointers to the extracted parameters */
@@ -272,7 +338,7 @@
  *  @param[in] cmd name of command to execute or absolute path to executable
  *  @param[in] paramstr parameters required by the command
  *  @returns true if child process started properly */
-bool Subprocess::run (const string &cmd, string paramstr) {
+bool Subprocess::run (const string &cmd, string paramstr, Process::PipeFlags flags) {
 	int pipefd[2];
 	if (cmd.empty() || pipe(pipefd) < 0)
 		return false;
@@ -284,10 +350,12 @@
 		return false;
 	}
 	if (_pid == 0) {   // child process
-		dup2(pipefd[1], STDOUT_FILENO);  // redirect stdout to the pipe
-		dup2(pipefd[1], STDERR_FILENO);  // redirect stderr to the pipe
+		int devnull = open("/dev/null", O_WRONLY);
+		dup2((flags & Process::PF_STDOUT) ? pipefd[1] : devnull, STDOUT_FILENO);  // redirect stdout to the pipe
+		dup2((flags & Process::PF_STDERR) ? pipefd[1] : devnull, STDERR_FILENO);  // redirect stdout to the pipe
 		close(pipefd[0]);
 		close(pipefd[1]);
+		close(devnull);
 
 		vector<const char*> params;
 		params.push_back(cmd.c_str());

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Process.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Process.hpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -23,13 +23,30 @@
 
 #include <string>
 
+struct SearchPattern {
+	SearchPattern () =default;
+
+	explicit SearchPattern (std::string searchRegex)
+		: search(std::move(searchRegex)) {}
+
+	SearchPattern (std::string searchRegex, std::string replExpr)
+		: search(std::move(searchRegex)), replace(std::move(replExpr)) {}
+
+	std::string search;
+	std::string replace;
+};
+
+
 class Process {
 	public:
+		enum PipeFlags {PF_STDOUT=1, PF_STDERR=2};
+
 		Process (std::string cmd, std::string paramstr);
 		Process (const Process &orig) =delete;
 		Process (Process &&orig) =delete;
-		bool run (std::string *out=nullptr);
-		bool run (const std::string &dir, std::string *out=nullptr);
+		bool run (std::string *out=nullptr, PipeFlags flags=PF_STDOUT);
+		bool run (const std::string &dir, std::string *out=nullptr, PipeFlags flags=PF_STDOUT);
+		bool run (std::string *out, const SearchPattern &pattern, PipeFlags flags=PF_STDOUT);
 
 	private:
 		std::string _cmd;

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PsSpecialHandler.cpp                                                 **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -20,7 +20,6 @@
 
 #include <array>
 #include <cmath>
-#include <fstream>
 #include <memory>
 #include <sstream>
 #include "FileFinder.hpp"
@@ -45,6 +44,7 @@
 int PsSpecialHandler::SHADING_SEGMENT_SIZE = 20;
 double PsSpecialHandler::SHADING_SIMPLIFY_DELTA = 0.01;
 string PsSpecialHandler::BITMAP_FORMAT;
+bool PsSpecialHandler::EMBED_BITMAP_DATA = false;
 
 
 PsSpecialHandler::PsSpecialHandler () : _psi(this), _previewFilter(_psi)
@@ -155,7 +155,9 @@
 		_actions->getColor().getRGB(r, g, b);
 		ostringstream oss;
 		oss << '\n' << r << ' ' << g << ' ' << b << " setrgbcolor ";
+		PSFilter *filter = _psi.setFilter(nullptr);  // don't apply any filters here
 		_psi.execute(oss.str(), false);
+		_psi.setFilter(filter);
 	}
 	_psi.execute(is);
 	if (updatePos) {
@@ -220,7 +222,7 @@
 			string fname = in.getQuotedString(in.peek() == '"' ? "\"" : nullptr);
 			fname = FileSystem::ensureForwardSlashes(fname);
 			FileType fileType = FileType::EPS;
-			if (prefix == "pdffile")
+			if (prefix == "pdffile=")
 				fileType = FileType::PDF;
 			else {
 				// accept selected non-PS files in psfile special
@@ -308,6 +310,7 @@
 	double urx = (it = attr.find("urx")) != attr.end() ? stod(it->second) : 0;
 	double ury = (it = attr.find("ury")) != attr.end() ? stod(it->second) : 0;
 	int pageno = (it = attr.find("page")) != attr.end() ? stoi(it->second, nullptr, 10) : 1;
+	_pdfProc = ((it = attr.find("proc")) != attr.end() ? it->second : "");
 
 	if (filetype == FileType::BITMAP || filetype == FileType::SVG)
 		swap(lly, ury);
@@ -357,24 +360,21 @@
 	_actions->setX(0);
 	_actions->setY(0);
 	moveToDVIPos();
-
 	auto imgNode = createImageNode(filetype, fname, pageno, BoundingBox(llx, lly, urx, ury), clipToBbox);
-	if (imgNode) {  // has anything been drawn?
-		Matrix matrix(1);
+	if (imgNode.element) {  // has anything been drawn?
 		if (filetype == FileType::EPS || filetype == FileType::PDF)
 			sy = -sy;  // adapt orientation of y-coordinates
-		matrix.scale(sx, sy).rotate(-angle).scale(hscale/100, vscale/100);  // apply transformation attributes
-		matrix.translate(x+hoffset, y-voffset);     // move image to current DVI position
-		matrix.lmultiply(_actions->getMatrix());
+		imgNode.matrix.scale(sx, sy).rotate(-angle).scale(hscale/100, vscale/100);  // apply transformation attributes
+		imgNode.matrix.translate(x+hoffset, y-voffset);     // move image to current DVI position
+		imgNode.matrix.lmultiply(_actions->getMatrix());
 		// update bounding box
 		BoundingBox bbox(0, 0, urx-llx, ury-lly);
-		bbox.transform(matrix);
+		bbox.transform(imgNode.matrix);
 		_actions->embed(bbox);
-
 		// insert element containing the image data
-		matrix.rmultiply(TranslationMatrix(-llx, -lly));  // move lower left corner of image to origin
-		imgNode->setTransform(matrix);
-		_actions->svgTree().appendToPage(std::move(imgNode));
+		imgNode.matrix.rmultiply(TranslationMatrix(-llx, -lly));  // move lower left corner of image to origin
+		imgNode.element->setTransform(imgNode.matrix);
+		_actions->svgTree().appendToPage(std::move(imgNode.element));
 	}
 	// restore DVI position
 	_actions->setX(x);
@@ -397,8 +397,8 @@
  *  @param[in] bbox bounding box of the image
  *  @param[in] clip if true, the image is clipped to its bounding box
  *  @return pointer to the element or nullptr if there's no image data */
-unique_ptr<SVGElement> PsSpecialHandler::createImageNode (FileType type, const string &fname, int pageno, BoundingBox bbox, bool clip) {
-	unique_ptr<SVGElement> node;
+PsSpecialHandler::ImageNode PsSpecialHandler::createImageNode (FileType type, const string &fname, int pageno, BoundingBox bbox, bool clip) {
+	ImageNode imgnode;
 	string pathstr;
 	if (const char *path = FileFinder::instance().lookup(fname, false))
 		pathstr = FileSystem::ensureForwardSlashes(path);
@@ -406,48 +406,100 @@
 		pathstr = fname;
 	if (pathstr.empty())
 		Message::wstream(true) << "file '" << fname << "' not found\n";
-	else if (type == FileType::BITMAP || type == FileType::SVG) {
-		node = util::make_unique<SVGElement>("image");
-		node->addAttribute("x", 0);
-		node->addAttribute("y", 0);
-		node->addAttribute("width", bbox.width());
-		node->addAttribute("height", bbox.height());
+	else if (type == FileType::BITMAP || type == FileType::SVG)
+		imgnode = createBitmapNode(fname, pathstr, pageno, bbox);
+	else if (type == FileType::EPS)
+		imgnode = createPSNode(fname, pathstr, pageno, bbox, clip);
+	else
+		imgnode = createPDFNode(fname, pathstr, pageno, bbox, clip);
+	return imgnode;
+}
 
-		// Only reference the image with an absolute path if either an absolute path was given by the user
-		// or a given plain filename is not present in the current working directory but was found through
-		// the FileFinder, i.e. it's usually located somewhere in the texmf tree.
-		string href = pathstr;
-		if (!FilePath::isAbsolute(fname) && (fname.find('/') != string::npos || FilePath(fname).exists()))
-			href = FilePath(pathstr).relative(FilePath(_actions->getSVGFilePath(pageno)));
-		node->addAttribute("xlink:href", href);
+
+PsSpecialHandler::ImageNode PsSpecialHandler::createBitmapNode (const string &fname, const string &path, int pageno, BoundingBox bbox) {
+	ImageNode imgnode(util::make_unique<SVGElement>("image"));
+	imgnode.element->addAttribute("x", 0);
+	imgnode.element->addAttribute("y", 0);
+	imgnode.element->addAttribute("width", bbox.width());
+	imgnode.element->addAttribute("height", bbox.height());
+
+	// Only reference the image with an absolute path if either an absolute path was given by the user
+	// or a given plain filename is not present in the current working directory but was found through
+	// the FileFinder, i.e. it's usually located somewhere in the texmf tree.
+	string href = path;
+	if (!FilePath::isAbsolute(fname) && (fname.find('/') != string::npos || FilePath(fname).exists()))
+		href = FilePath(path).relative(FilePath(_actions->getSVGFilePath(pageno)));
+	if (EMBED_BITMAP_DATA)
+		imgnode.element->addAttribute("@@xlink:href", "data:" + util::mimetype(fname) + ";base64," + fname);
+	else
+		imgnode.element->addAttribute("xlink:href", href);
+	return imgnode;
+}
+
+
+PsSpecialHandler::ImageNode PsSpecialHandler::createPSNode (const string &fname, const string &path, int pageno, BoundingBox bbox, bool clip) {
+	ImageNode imgnode(util::make_unique<SVGElement>("g")); // put SVG nodes created from the EPS/PDF file in this group
+	_xmlnode = imgnode.element.get();
+	_psi.execute(
+		"\n at beginspecial @setspecial"            // enter special environment
+		"/setpagedevice{@setpagedevice}def "     // activate processing of operator "setpagedevice"
+		"/@imgbase("+image_base_path(*_actions)+")store " // path and basename of image files
+		"matrix setmatrix"                       // don't apply outer PS transformations
+		"/FirstPage "+to_string(pageno)+" def"   // set number of first page to convert (PDF only)
+		"/LastPage "+to_string(pageno)+" def"    // set number of last page to convert (PDF only)
+		"(" + path + ")run "                  // execute file content
+		"@endspecial\n"                          // leave special environment
+	);
+	if (imgnode.element->empty())
+		imgnode.element.reset(nullptr);
+	else if (clip) {
+		// clip image to its bounding box if flag 'clip' is given
+		auto clippath = util::make_unique<SVGElement>("clipPath");
+		clippath->addAttribute("id", "imgclip"+ to_string(_imgClipCount));
+		clippath->append(bbox.createSVGPath());
+		imgnode.element->setClipPathUrl("imgclip" + to_string(_imgClipCount++));
+		_actions->svgTree().appendToDefs(std::move(clippath));
 	}
-	else {  // PostScript or PDF
-		node = util::make_unique<SVGElement>("g"); // put SVG nodes created from the EPS/PDF file in this group
+	_xmlnode = nullptr;   // append following elements to page group again
+	return imgnode;
+}
 
-		_xmlnode = node.get();
-		_psi.execute(
-			"\n at beginspecial @setspecial"            // enter special environment
-			"/setpagedevice{@setpagedevice}def "     // activate processing of operator "setpagedevice"
-			"/@imgbase("+image_base_path(*_actions)+")store " // path and basename of image files
-			"matrix setmatrix"                       // don't apply outer PS transformations
-			"/FirstPage "+to_string(pageno)+" def"   // set number of first page to convert (PDF only)
-			"/LastPage "+to_string(pageno)+" def"    // set number of last page to convert (PDF only)
-			"(" + pathstr + ")run "                  // execute file content
-			"@endspecial\n"                          // leave special environment
-		);
-		if (node->empty())
-			node.reset(nullptr);
-		else if (clip) {
-			// clip image to its bounding box if flag 'clip' is given
-			auto clippath = util::make_unique<SVGElement>("clipPath");
-			clippath->addAttribute("id", "imgclip"+ to_string(_imgClipCount));
-			clippath->append(bbox.createSVGPath());
-			node->setClipPathUrl("imgclip"+ to_string(_imgClipCount++));
-			_actions->svgTree().appendToDefs(std::move(clippath));
+
+PsSpecialHandler::ImageNode PsSpecialHandler::createPDFNode (const string &fname, const string &path, int pageno, BoundingBox bbox, bool clip) {
+	if (_pdfProc == "gs" || (_pdfProc.empty() && _psi.supportsPDF()))
+		return createPSNode(fname, path, pageno, bbox, clip);
+
+	ImageNode imgnode;
+	if (PDFHandler::available()) {
+		// save SVG state
+		auto savedFont = _actions->svgTree().getFontPair();
+		auto savedMatrix = _actions->svgTree().getMatrix();
+		auto savedColor = _actions->svgTree().getColor();
+
+		imgnode.element = util::make_unique<SVGElement>("g");
+		_pdfHandler.assignSVGTree(_actions->svgTree());
+		imgnode.element = _pdfHandler.convert(path, pageno, std::move(imgnode.element));
+
+		// restore SVG state
+		if (savedFont.second)
+			_actions->svgTree().setFont(savedFont.first, *savedFont.second);
+		_actions->svgTree().setMatrix(savedMatrix);
+		_actions->svgTree().setColor(savedColor);
+
+		if (imgnode.element->empty())
+			imgnode.element.reset(nullptr);
+		else {
+			imgnode.matrix.translate(0, -bbox.height()).scale(1, -1);
+			if (clip) {
+				auto clippath = util::make_unique<SVGElement>("clipPath");
+				clippath->addAttribute("id", "imgclip" + to_string(_imgClipCount));
+				clippath->append(bbox.createSVGPath());
+				imgnode.element->setClipPathUrl("imgclip" + to_string(_imgClipCount++));
+				_actions->svgTree().appendToDefs(std::move(clippath));
+			}
 		}
-		_xmlnode = nullptr;   // append following elements to page group again
 	}
-	return node;
+	return imgnode;
 }
 
 
@@ -789,8 +841,7 @@
 
 		// To prevent memory issues, only add the filename to the href attribute and tag it by '@'
 		// for later base64 encoding.
-		image->addAttribute("@xlink:href", string("data:image/")+(suffix == ".png" ? "png" : "jpeg")+";base64,"+fname);
-
+		image->addAttribute("@xlink:href", "data:"+util::mimetype(fname)+";base64,"+fname);
 		// if set, assign clipping path to image
 		if (_clipStack.path()) {
 			auto group = util::make_unique<SVGElement>("g");

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/PsSpecialHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** PsSpecialHandler.hpp                                                 **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -27,6 +27,7 @@
 #include <string>
 #include <vector>
 #include "GraphicsPath.hpp"
+#include "PDFHandler.hpp"
 #include "PSInterpreter.hpp"
 #include "Opacity.hpp"
 #include "PSPattern.hpp"
@@ -76,6 +77,14 @@
 			std::stack<Entry> _stack;  ///< stack holding the clipping information of the current graphics context
 	};
 
+	struct ImageNode {
+		ImageNode () : matrix(1) {}
+		explicit ImageNode (std::unique_ptr<SVGElement> elem) : element(std::move(elem)), matrix(1) {}
+		ImageNode (std::unique_ptr<SVGElement> elem, const Matrix &m) : element(std::move(elem)), matrix(m) {}
+		std::unique_ptr<SVGElement> element;
+		Matrix matrix;
+	};
+
 	enum PsSection {PS_NONE, PS_HEADERS, PS_BODY};
 	enum class FileType {EPS, PDF, SVG, BITMAP};
 
@@ -97,6 +106,7 @@
 		static int SHADING_SEGMENT_SIZE;
 		static double SHADING_SIMPLIFY_DELTA;
 		static std::string BITMAP_FORMAT;
+		static bool EMBED_BITMAP_DATA;
 
 	protected:
 		void initialize ();
@@ -105,7 +115,10 @@
 		void executeAndSync (std::istream &is, bool updatePos);
 		void processHeaderFile (const char *fname);
 		void imgfile (FileType type, const std::string &fname, const std::map<std::string,std::string> &attr);
-		std::unique_ptr<SVGElement> createImageNode (FileType type, const std::string &fname, int pageno, BoundingBox bbox, bool clip);
+		ImageNode createImageNode (FileType type, const std::string &fname, int pageno, BoundingBox bbox, bool clip);
+		ImageNode createBitmapNode (const std::string &fname, const std::string &path, int pageno, BoundingBox bbox);
+		ImageNode createPSNode (const std::string &fname, const std::string &path, int pageno, BoundingBox bbox, bool clip);
+		ImageNode createPDFNode (const std::string &fname, const std::string &path, int pageno, BoundingBox bbox, bool clip);
 		void dviBeginPage (unsigned int pageno, SpecialActions &actions) override;
 		void dviEndPage (unsigned pageno, SpecialActions &actions) override;
 		void clip (Path path, bool evenodd);
@@ -164,6 +177,7 @@
 
 	private:
 		PSInterpreter _psi;
+		PDFHandler _pdfHandler;
 		SpecialActions *_actions=nullptr;
 		PSPreviewFilter _previewFilter;    ///< filter to extract information generated by the preview package
 		PsSection _psSection=PS_NONE;      ///< current section processed (nothing yet, headers, or body specials)
@@ -189,6 +203,7 @@
 		std::map<int, std::unique_ptr<PSPattern>> _patterns;
 		PSTilingPattern *_pattern;         ///< current pattern
 		bool _patternEnabled;              ///< true if active color space is a pattern
+		std::string _pdfProc;              ///< tool to process PDF files ("gs" or "mutool")
 };
 
 #endif

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** RangeMap.cpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** RangeMap.hpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -111,7 +111,7 @@
 	};
 
 	public:
-		void addRange (uint32_t first, uint32_t last, uint32_t cid);
+		void addRange (uint32_t cmin, uint32_t cmax, uint32_t vmin);
 		bool valueExists (uint32_t c) const  {return lookup(c) >= 0;}
 		uint32_t valueAt (uint32_t c) const;
 		uint32_t minKey () const               {return _ranges.empty() ? 0 : _ranges.front().min();}

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGCharHandler.cpp                                                   **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGCharHandler.hpp                                                   **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -76,6 +76,7 @@
 		Color getColor () const                  {return _color.get();}
 		const Opacity& getOpacity () const       {return _opacity.get();}
 		const Font* getFont () const             {return _font.get();}
+		int getFontID () const                   {return _fontnum;}
 		const Matrix& getMatrix () const         {return _matrix.get();}
 
 	protected:

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGCharHandlerFactory.cpp                                            **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharHandlerFactory.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGCharHandlerFactory.hpp                                            **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGCharPathHandler.cpp                                               **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharPathHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGCharPathHandler.hpp                                               **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGCharTspanTextHandler.cpp                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGCharTspanTextHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGCharTspanTextHandler.hpp                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGElement.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGElement.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGElement.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGElement.cpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -78,11 +78,23 @@
 }
 
 
+void SVGElement::setMaskUrl (const string &url) {
+	if (!url.empty())
+		addAttribute("mask", "url(#"+url+")");
+}
+
+
 void SVGElement::setNoFillColor () {
 	addAttribute("fill", "none");
 }
 
 
+void SVGElement::setOpacity (const OpacityAlpha &alpha) {
+	if (!alpha.isOpaque())
+		addAttribute("opaque", alpha.value());
+}
+
+
 void SVGElement::setPoints (const vector<DPair> &points) {
 	if (!points.empty()) {
 		ostringstream oss;
@@ -106,7 +118,14 @@
 		for (double dashValue : pattern)
 			patternStr += XMLString(dashValue)+" ";
 		patternStr.pop_back();
-		addAttribute("stroke-dasharray", patternStr);
+		setStrokeDash(patternStr, offset);
+	}
+}
+
+
+void SVGElement::setStrokeDash (const string &pattern, double offset) {
+	if (!pattern.empty()) {
+		addAttribute("stroke-dasharray", pattern);
 		if (offset != 0)
 			addAttribute("stroke-dashoffset", offset);
 	}
@@ -150,4 +169,4 @@
 void SVGElement::setTransform (const Matrix &matrix) {
 	if (!matrix.isIdentity())
 		addAttribute("transform", matrix.toSVG());
-}
+}
\ No newline at end of file

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGElement.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGElement.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGElement.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGElement.hpp                                                       **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -45,10 +45,13 @@
 		void setFillOpacity (Opacity::BlendMode blendMode);
 		void setFillPatternUrl (const std::string &url);
 		void setFillRule (FillRule rule);
+		void setMaskUrl (const std::string &url);
 		void setNoFillColor ();
+		void setOpacity (const OpacityAlpha &alpha);
 		void setPoints (const std::vector<DPair> &points);
 		void setStrokeColor (Color color);
 		void setStrokeDash (const std::vector<double> &pattern, double offset=0);
+		void setStrokeDash (const std::string &pattern, double offset=0);
 		void setStrokeLineCap (LineCap cap);
 		void setStrokeLineJoin (LineJoin join);
 		void setStrokeOpacity (const Opacity &opacity);

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGOutput.cpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGOutput.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGOutput.hpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -47,6 +47,7 @@
 	virtual ~SVGOutputBase () =default;
 	virtual std::ostream& getPageStream (int page, int numPages, const HashTriple &hashes=HashTriple()) const =0;
 	virtual FilePath filepath (int page, int numPages, const HashTriple &hashes= HashTriple()) const =0;
+	virtual void finish () =0;
 	virtual bool ignoresHashes () const {return true;}
 };
 
@@ -59,6 +60,7 @@
 		SVGOutput (const std::string &base, std::string pattern, int zipLevel);
 		std::ostream& getPageStream (int page, int numPages, const HashTriple &hash=HashTriple()) const override;
 		FilePath filepath (int page, int numPages, const HashTriple &hash=HashTriple()) const override;
+		void finish () override {_osptr.reset();}
 		bool ignoresHashes () const override;
 		void setFileNumbers (int fileNumber, int fileCount) {_fileNumber = fileNumber; _fileCount = fileCount;}
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGSingleCharTextHandler.cpp                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGSingleCharTextHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGSingleCharTextHandler.hpp                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGTree.cpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -91,6 +91,13 @@
 }
 
 
+pair<int,const Font*> SVGTree::getFontPair () const {
+	if (_charHandler)
+		return {_charHandler->getFontID(), _charHandler->getFont()};
+	return {0, nullptr};
+}
+
+
 bool SVGTree::setFontFormat (string formatstr) {
 	auto pos = formatstr.find(',');
 	string opt;
@@ -258,7 +265,7 @@
 			auto fontNode = util::make_unique<XMLElement>("font");
 			string fontname = font.name();
 			fontNode->addAttribute("id", fontname);
-			fontNode->addAttribute("horiz-adv-x", font.hAdvance());
+			fontNode->addAttribute("horiz-adv-x", font.hAverageAdvance());
 
 			auto faceNode = util::make_unique<XMLElement>("font-face");
 			faceNode->addAttribute("font-family", fontname);

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SVGTree.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SVGTree.hpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -61,6 +61,7 @@
 		void popPageContext ();
 		void setBBox (const BoundingBox &bbox);
 		void setFont (int id, const Font &font);
+		std::pair<int,const Font*> getFontPair () const;
 		static bool setFontFormat (std::string formatstr);
 		void setX (double x)                {_charHandler->notifyXAdjusted();}
 		void setY (double y)                {_charHandler->notifyYAdjusted();}

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** ShadingPatch.cpp                                                     **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ShadingPatch.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** ShadingPatch.hpp                                                     **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SignalHandler.cpp                                                    **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SignalHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SignalHandler.hpp                                                    **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SourceInput.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SourceInput.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SourceInput.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SourceInput.cpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SourceInput.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SourceInput.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SourceInput.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SourceInput.hpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialActions.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialActions.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialActions.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SpecialActions.hpp                                                   **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -50,7 +50,7 @@
 		virtual void setOpacity (const Opacity &opacity) =0;
 		virtual const Opacity& getOpacity () const =0;
 		virtual const SVGTree& svgTree () const =0;
-		SVGTree& svgTree () {return const_cast<SVGTree&>(const_cast<const SpecialActions*>(this)->svgTree());}
+		virtual SVGTree& svgTree () {return const_cast<SVGTree&>(const_cast<const SpecialActions*>(this)->svgTree());}
 		virtual BoundingBox& bbox () =0;
 		virtual BoundingBox& bbox (const std::string &name, bool reset=false) =0;
 		virtual void embed (const BoundingBox &bbox) =0;

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SpecialHandler.hpp                                                   **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SpecialManager.cpp                                                   **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/SpecialManager.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** SpecialManager.hpp                                                   **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** StreamReader.cpp                                                     **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamReader.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** StreamReader.hpp                                                     **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** StreamWriter.cpp                                                     **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/StreamWriter.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** StreamWriter.hpp                                                     **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Subfont.cpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Subfont.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Subfont.hpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/System.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/System.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/System.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** System.cpp                                                           **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/System.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/System.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/System.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** System.hpp                                                           **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** TFM.cpp                                                              **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TFM.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** TFM.hpp                                                              **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Deleted: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TTFAutohint.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TTFAutohint.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TTFAutohint.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,139 +0,0 @@
-/*************************************************************************
-** TTFAutohint.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 "TTFAutohint.hpp"
-
-using namespace std;
-
-#ifndef HAVE_TTFAUTOHINT_H
-TTFAutohint::TTFAutohint () {}
-
-bool TTFAutohint::available () const {
-	return false;
-}
-
-int TTFAutohint::autohint (const string&, const string&, bool) {
-	return 0;
-}
-
-string TTFAutohint::lastErrorMessage () const {
-	return "";
-}
-
-string TTFAutohint::version () const {
-	return "";
-}
-
-#else  // HAVE_TTFAUTOHINT_H
-
-#include <ttfautohint.h>
-
-#ifndef HAVE_LIBTTFAUTOHINT
-static string get_libttfautohint () {
-#ifdef _WIN32
-	return "ttfautohint.dll";
-#else
-	string dlname = "libttfautohint.so.1";
-#ifdef __APPLE__
-	DLLoader loader(dlname);
-	if (!loader.loaded())
-		dlname = "libttfautohint.1.dylib";
-#endif
-	return dlname;
-#endif // _WIN32
-}
-#endif // HAVE_LIBTTFAUTOHINT
-
-
-TTFAutohint::TTFAutohint () :
-#ifndef HAVE_LIBTTFAUTOHINT
-	DLLoader(get_libttfautohint()),
-#endif
-	_lastErrorMessage()
-{
-}
-
-
-/** Returns true if the ttfautohint library is present. */
-bool TTFAutohint::available () const {
-#ifdef HAVE_LIBTTFAUTOHINT
-	return true;
-#else
-	return loaded();
-#endif
-}
-
-
-/** Runs ttfautohint on a given font file.
- *  @param[in] source name of TTF input file
- *  @param[in] target name of TTF output file
- *  @param[in] rehintIfSymbolFont if true, ttfautohint is run again with option "symbol" in case regular hinting is rejected.
- *  @return ttfautohint error code (0 = success) */
-int TTFAutohint::autohint (const string &source, const string &target, bool rehintIfSymbolFont) {
-#ifdef HAVE_LIBTTFAUTOHINT
-	auto fn = &TTF_autohint;
-#else
-	auto fn = LOAD_SYMBOL(TTF_autohint);
-#endif
-	int ret=0;
-	if (fn) {
-		FILE *ttf_in = fopen(source.c_str(), "rb");
-		FILE *ttf_out = fopen(target.c_str(), "wb");
-		ret = fn("in-file, out-file, default-script, error-string", ttf_in, ttf_out, "latn", &_lastErrorMessage);
-		if (ret == TA_Err_Missing_Glyph && rehintIfSymbolFont) {
-			fseek(ttf_in, 0, SEEK_SET);
-			fseek(ttf_out, 0, SEEK_SET);
-			ret = fn("in-file, out-file, symbol, error-string", ttf_in, ttf_out, true, &_lastErrorMessage);
-		}
-		fclose(ttf_out);
-		fclose(ttf_in);
-	}
-	return ret;
-}
-
-
-/** Returns the error message of the last autohint call. */
-string TTFAutohint::lastErrorMessage () const {
-	string message;
-	if (_lastErrorMessage)
-		message = reinterpret_cast<const char*>(_lastErrorMessage);
-	return message;
-}
-
-
-/** Returns the version number of ttfautohint. */
-string TTFAutohint::version () const {
-#ifdef HAVE_LIBTTFAUTOHINT
-	auto fn = &TTF_autohint_version;
-#else
-	auto fn = LOAD_SYMBOL(TTF_autohint_version);
-#endif
-	string ret;
-	if (fn) {
-		int major, minor, revision;
-		fn(&major, &minor, &revision);
-		ret = to_string(major)+"."+to_string(minor);
-		if (revision)
-			ret += "."+to_string(revision);
-	}
-	return ret;
-}
-
-#endif // HAVE_TTFAUTOHINT_H

Deleted: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TTFAutohint.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TTFAutohint.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TTFAutohint.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,51 +0,0 @@
-/*************************************************************************
-** TTFAutohint.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 TTFAUTOHINT_HPP
-#define TTFAUTOHINT_HPP
-
-#include <config.h>
-#include <string>
-
-#if defined(HAVE_TTFAUTOHINT_H) && !defined(HAVE_LIBTTFAUTOHINT)
-#include "DLLoader.hpp"
-#endif
-
-class TTFAutohint
-#if defined(HAVE_TTFAUTOHINT_H) && !defined(HAVE_LIBTTFAUTOHINT)
-	: public DLLoader
-#endif
-{
-	public:
-		TTFAutohint ();
-		TTFAutohint (const TTFAutohint &ta) =delete;
-		bool available () const;
-		int autohint (const std::string &source, const std::string &target, bool rehintIfSymbolFont);
-		std::string lastErrorMessage () const;
-		std::string version () const;
-
-#ifdef HAVE_TTFAUTOHINT_H
-	private:
-		const unsigned char *_lastErrorMessage;
-#endif
-};
-
-#endif
-

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** TensorProductPatch.cpp                                               **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -147,10 +147,10 @@
 	// compute tensor product
 	DPair p[4];
 	for (int i=0; i < 4; i++) {
-		Bezier bezier(_points[i][0], _points[i][1], _points[i][2], _points[i][3]);
+		CubicBezier bezier(_points[i][0], _points[i][1], _points[i][2], _points[i][3]);
 		p[i] = bezier.valueAt(u);
 	}
-	Bezier bezier(p[0], p[1], p[2], p[3]);
+	CubicBezier bezier(p[0], p[1], p[2], p[3]);
 	return bezier.valueAt(v);
 }
 
@@ -224,7 +224,7 @@
  *  runs "vertically" from P(u,0) to P(u,1) through the patch P.
  *  @param[in] u "horizontal" parameter in the range from 0 to 1
  *  @param[out] bezier the resulting Bézier curve */
-void TensorProductPatch::verticalCurve (double u, Bezier &bezier) const {
+void TensorProductPatch::verticalCurve (double u, CubicBezier &bezier) const {
 	// check for simple cases (boundary curves) first
 	if (u == 0)
 		bezier.setPoints(_points[0][0], _points[1][0], _points[2][0], _points[3][0]);
@@ -234,7 +234,7 @@
 		// compute "inner" curve
 		DPair p[4];
 		for (int i=0; i < 4; i++) {
-			Bezier bezier(_points[i][0], _points[i][1], _points[i][2], _points[i][3]);
+			CubicBezier bezier(_points[i][0], _points[i][1], _points[i][2], _points[i][3]);
 			p[i] = bezier.valueAt(u);
 		}
 		bezier.setPoints(p[0], p[1], p[2], p[3]);
@@ -246,7 +246,7 @@
  *  runs "horizontally" from P(0,v) to P(1,v) through the patch P.
  *  @param[in] v "vertical" parameter in the range from 0 to 1
  *  @param[out] bezier the resulting Bézier curve */
-void TensorProductPatch::horizontalCurve (double v, Bezier &bezier) const {
+void TensorProductPatch::horizontalCurve (double v, CubicBezier &bezier) const {
 	// check for simple cases (boundary curves) first
 	if (v == 0)
 		bezier.setPoints(_points[0][0], _points[0][1], _points[0][2], _points[0][3]);
@@ -256,7 +256,7 @@
 		// compute "inner" curve
 		DPair p[4];
 		for (int i=0; i < 4; i++) {
-			Bezier bezier(_points[0][i], _points[1][i], _points[2][i], _points[3][i]);
+			CubicBezier bezier(_points[0][i], _points[1][i], _points[2][i], _points[3][i]);
 			p[i] = bezier.valueAt(v);
 		}
 		bezier.setPoints(p[0], p[1], p[2], p[3]);
@@ -293,10 +293,10 @@
 DPair TensorProductPatch::blossomValue (double u1, double u2, double u3, double v1, double v2, double v3) const {
 	DPair p[4];
 	for (int i=0; i < 4; i++) {
-		Bezier bezier(_points[i][0], _points[i][1], _points[i][2], _points[i][3]);
+		CubicBezier bezier(_points[i][0], _points[i][1], _points[i][2], _points[i][3]);
 		p[i] = bezier.blossomValue(u1, u2, u3);
 	}
-	Bezier bezier(p[0], p[1], p[2], p[3]);
+	CubicBezier bezier(p[0], p[1], p[2], p[3]);
 	return bezier.blossomValue(v1, v2, v3);
 }
 
@@ -313,10 +313,10 @@
 
 
 /** Computes a single row of segments approximating the patch region between v1 and v1+inc. */
-void TensorProductPatch::approximateRow (double v1, double inc, bool overlap, double delta, const vector<Bezier> &vbeziers, Callback &callback) const {
+void TensorProductPatch::approximateRow (double v1, double inc, bool overlap, double delta, const vector<CubicBezier> &vbeziers, Callback &callback) const {
 	double v2 = snap(v1+inc);
 	double ov2 = (overlap && v2 < 1) ? snap(v2+inc) : v2;
-	Bezier hbezier1, hbezier2;
+	CubicBezier hbezier1, hbezier2;
 	horizontalCurve(v1, hbezier1);
 	horizontalCurve(ov2, hbezier2);
 	double u1 = 0;
@@ -324,10 +324,10 @@
 		double u2 = snap(u1+inc);
 		double ou2 = (overlap && u2 < 1) ? snap(u2+inc) : u2;
 		// compute segment boundaries
-		Bezier b1(hbezier1, u1, ou2);
-		Bezier b2(vbeziers[i + (overlap && i < vbeziers.size()-1 ? 1 : 0)], v1, ov2);
-		Bezier b3(hbezier2, u1, ou2);
-		Bezier b4(vbeziers[i-1], v1, ov2);
+		CubicBezier b1(hbezier1, u1, ou2);
+		CubicBezier b2(vbeziers[i + (overlap && i < vbeziers.size()-1 ? 1 : 0)], v1, ov2);
+		CubicBezier b3(hbezier2, u1, ou2);
+		CubicBezier b4(vbeziers[i-1], v1, ov2);
 		GraphicsPath<double> path;
 		path.moveto(b1.point(0));
 		if (inc > delta) {
@@ -366,7 +366,7 @@
 	else {
 		const double inc = 1.0/gridsize;
 		// collect curves dividing the patch into several columns (curved vertical stripes)
-		vector<Bezier> vbeziers(gridsize+1);
+		vector<CubicBezier> vbeziers(gridsize+1);
 		double u=0;
 		for (int i=0; i <= gridsize; i++) {
 			verticalCurve(u, vbeziers[i]);
@@ -384,7 +384,7 @@
 
 BoundingBox TensorProductPatch::getBBox () const {
 	BoundingBox bbox;
-	Bezier bezier;
+	CubicBezier bezier;
 	for (int i=0; i <= 1; i++) {
 		horizontalCurve(i, bezier);
 		bbox.embed(bezier.getBBox());
@@ -398,10 +398,10 @@
 #if 0
 void TensorProductPatch::approximate (int gridsize, Callback &callback) const {
 	const double inc = 1.0/gridsize;
-	Bezier ubezier0; verticalCurve(0, ubezier0);
-	Bezier ubezier1; verticalCurve(1, ubezier1);
-	Bezier vbezier0; horizontalCurve(0, vbezier0);
-	Bezier vbezier1; horizontalCurve(1, vbezier1);
+	CubicBezier ubezier0; verticalCurve(0, ubezier0);
+	CubicBezier ubezier1; verticalCurve(1, ubezier1);
+	CubicBezier vbezier0; horizontalCurve(0, vbezier0);
+	CubicBezier vbezier1; horizontalCurve(1, vbezier1);
 	for (double v1=0; v1 < 1; v1=snap(v1+inc)) {
 		double v2 = snap(v1+inc);
 		DPair p0 = valueAt(0, v1);
@@ -423,25 +423,25 @@
 			if (v1 > 0)
 				path.lineto(p1);
 			else {
-				Bezier bezier(vbezier0, u1, u2);
+				CubicBezier bezier(vbezier0, u1, u2);
 				path.cubicto(bezier.point(1), bezier.point(2), bezier.point(3));
 			}
 			if (u2 < 1)
 				path.lineto(p3);
 			else {
-				Bezier bezier(ubezier1, v1, v2);
+				CubicBezier bezier(ubezier1, v1, v2);
 				path.cubicto(bezier.point(1), bezier.point(2), bezier.point(3));
 			}
 			if (v2 < 1)
 				path.lineto(p2);
 			else {
-				Bezier bezier(vbezier1, u1, u2);
+				CubicBezier bezier(vbezier1, u1, u2);
 				path.cubicto(bezier.point(2), bezier.point(1), bezier.point(0));
 			}
 			if (u1 > 0)
 				path.closepath();
 			else {
-				Bezier bezier(ubezier0, v1, v2);
+				CubicBezier bezier(ubezier0, v1, v2);
 				path.cubicto(bezier.point(2), bezier.point(1), bezier.point(0));
 				path.closepath();
 			}
@@ -472,10 +472,10 @@
 	// Compute the value of P(u,v) using the Coons equation rather than the
 	// tensor product since the "inner" control points of the tensor matrix
 	// might not be set yet.
-	Bezier bezier1(_points[3][0], _points[3][1], _points[3][2], _points[3][3]);
-	Bezier bezier2(_points[0][0], _points[0][1], _points[0][2], _points[0][3]);
-	Bezier bezier3(_points[3][0], _points[2][0], _points[1][0], _points[0][0]);
-	Bezier bezier4(_points[3][3], _points[2][3], _points[1][3], _points[0][3]);
+	CubicBezier bezier1(_points[3][0], _points[3][1], _points[3][2], _points[3][3]);
+	CubicBezier bezier2(_points[0][0], _points[0][1], _points[0][2], _points[0][3]);
+	CubicBezier bezier3(_points[3][0], _points[2][0], _points[1][0], _points[0][0]);
+	CubicBezier bezier4(_points[3][3], _points[2][3], _points[1][3], _points[0][3]);
 	DPair ph = bezier1.valueAt(u)*(1-v) + bezier2.valueAt(u)*v;
 	DPair pv = bezier3.valueAt(v)*(1-u) + bezier4.valueAt(v)*u;
 	DPair pc = (_points[3][0]*(1-u) + _points[3][3]*u)*(1-v) + (_points[0][0]*(1-u) + _points[0][3]*u)*v;

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TensorProductPatch.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** TensorProductPatch.hpp                                               **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -49,8 +49,8 @@
 		virtual DPair valueAt (double u, double v) const;
 		Color colorAt (double u, double v) const;
 		Color averageColor () const override;
-		void horizontalCurve (double v, Bezier &bezier) const;
-		void verticalCurve (double u, Bezier &bezier) const;
+		void horizontalCurve (double v, CubicBezier &bezier) const;
+		void verticalCurve (double u, CubicBezier &bezier) const;
 		GraphicsPath<double> getBoundaryPath () const override;
 		void subpatch (double u1, double u2, double v1, double v2, TensorProductPatch &patch) const;
 		DPair blossomValue (double u1, double u2, double u3, double v1, double v2, double v3) const;
@@ -62,7 +62,7 @@
 
 	protected:
 		Color averageColor (const Color &c1, const Color &c2, const Color &c3, const Color &c4) const;
-		void approximateRow (double v1, double inc, bool overlap, double delta, const std::vector<Bezier> &beziers, Callback &callback) const;
+		void approximateRow (double v1, double inc, bool overlap, double delta, const std::vector<CubicBezier> &beziers, Callback &callback) const;
 		void setFirstMatrixColumn (const DPair source[4], bool reverse);
 		void setFirstMatrixColumn (DPair source[4][4], int col, bool reverse);
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Terminal.cpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Terminal.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Terminal.hpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** ToUnicodeMap.cpp                                                     **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ToUnicodeMap.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** ToUnicodeMap.hpp                                                     **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** TpicSpecialHandler.cpp                                               **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TpicSpecialHandler.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** TpicSpecialHandler.hpp                                               **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** TriangularPatch.cpp                                                  **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TriangularPatch.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** TriangularPatch.hpp                                                  **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Deleted: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TrueTypeFont.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TrueTypeFont.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TrueTypeFont.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,175 +0,0 @@
-/*************************************************************************
-** TrueTypeFont.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 <iterator>
-#include <sstream>
-#include <woff2/encode.h>
-#include <zlib.h>
-#include "StreamReader.hpp"
-#include "StreamWriter.hpp"
-#include "TrueTypeFont.hpp"
-#include "utility.hpp"
-
-using namespace std;
-
-
-/** Reads the font data from a TTF file.
- *  OTF specification: https://www.microsoft.com/typography/otspec/otff.htm
- *  @param[in] fname name/path of file to read
- *  @return true on success */
-bool TrueTypeFont::read (const string &fname) {
-	_tableRecords.clear();
-	_buffer = util::read_file_contents(fname);
-	if (_buffer.empty())
-		return false;
-	istringstream iss(_buffer);
-	StreamReader reader(iss);
-	_version = reader.readUnsigned(4);
-	uint16_t numTables = reader.readUnsigned(2);
-	if (numTables == 0 || _buffer.size() <= 12u+16u*numTables)
-		return false;
-
-	// read table records
-	reader.seek(12);  // skip searchRange, entrySelector, and rangeShift
-	for (uint16_t i=0; i < numTables; i++) {
-		uint32_t tag = reader.readUnsigned(4);
-		uint32_t checksum = reader.readUnsigned(4);
-		uint32_t offset = reader.readUnsigned(4);
-		uint32_t length = reader.readUnsigned(4);
-		if ((offset | length) > _buffer.size() || offset+length > _buffer.size())
-			return false;
-		TTFTableRecord record = {tag, checksum, length, reinterpret_cast<const uint8_t*>(_buffer.data())+offset};
-		_tableRecords.push_back(std::move(record));
-	}
-	return true;
-}
-
-
-/** Compresses the data of the referenced TTF table and updated the record data accordingly.
- *  @return true if the data was compressed */
-bool TrueTypeFont::WOFFTableRecord::compressTableData () {
-	if (ttfRecord.size < 16)
-		return false;
-	uLong compressedSize = compressBound(ttfRecord.size);
-	compressedData.resize(compressedSize);
-	// Compress with zlib for now. We could also use zopfli for slightly better but much slower compression.
-	// Only use the compressed data if it actually leads to a size reduction. Otherwise, use the original table data.
-	if (compress2(compressedData.data(), &compressedSize, ttfRecord.data, ttfRecord.size, Z_BEST_COMPRESSION) != Z_OK
-			|| compressedSize >= ttfRecord.size) {
-		compressedData.clear();
-		return false;
-	}
-	size = compressedSize;
-	data = compressedData.data();
-	return true;
-}
-
-
-/** Writes font data in WOFF format to a given output stream.
-	 WOFF specifiction: https://www.w3.org/TR/WOFF */
-void TrueTypeFont::writeWOFF (ostream &os) const {
-	// compute WOFF table records first
-	vector<WOFFTableRecord> woffRecords;
-	uint32_t woffSize = static_cast<uint32_t>(44 + 20*_tableRecords.size());
-	uint32_t ttfSize = static_cast<uint32_t>(12 + 16*_tableRecords.size());
-	for (const TTFTableRecord &ttfRecord : _tableRecords) {
-		WOFFTableRecord woffRecord(woffSize, ttfRecord);
-		woffRecord.compressTableData();
-		woffSize += woffRecord.paddedSize();
-		ttfSize += ttfRecord.paddedSize();
-		woffRecords.push_back(std::move(woffRecord));
-	}
-	// write WOFF header
-	StreamWriter writer(os);
-	writer.writeUnsigned(0x774F4646, 4);              // "WOFF"
-	writer.writeUnsigned(_version, 4);                // version of contained TTF font
-	writer.writeUnsigned(woffSize, 4);                // total length of WOFF file
-	writer.writeUnsigned(_tableRecords.size(), 2);    // number of tables
-	writer.writeBytes(0, 2);                          // reserved
-	writer.writeUnsigned(ttfSize, 4);                 // size of uncompressed TTF data
-	writer.writeBytes(0, 4);                          // WOFF version (not required)
-	writer.writeBytes(0, 12);                         // offset, compressed and uncompressed size of metadata block
-	writer.writeBytes(0, 8);                          // offset and size of private data block
-
-	// write WOFF table directory
-	for (const WOFFTableRecord &woffRecord : woffRecords) {
-		writer.writeUnsigned(woffRecord.ttfRecord.tag, 4);
-		writer.writeUnsigned(woffRecord.offset, 4);
-		writer.writeUnsigned(woffRecord.size, 4);
-		writer.writeUnsigned(woffRecord.ttfRecord.size, 4);
-		writer.writeUnsigned(woffRecord.ttfRecord.checksum, 4);
-	}
-
-	// write WOFF tables
-	for (const WOFFTableRecord &woffRecord : woffRecords) {
-		writer.writeBytes(woffRecord.data, woffRecord.size);
-		size_t padding = woffRecord.paddedSize()-woffRecord.size;
-		writer.writeBytes(0, padding);
-	}
-}
-
-
-void TrueTypeFont::writeWOFF (const string &fname) const {
-	ofstream ofs(fname, ios::binary);
-	writeWOFF(ofs);
-}
-
-
-/** Puts the TrueType data in a WOFF2 container and writes the resulting data to a given stream.
- *  @param[out] os stream to write the WOFF2 data to
- *  @return true on success */
-bool TrueTypeFont::writeWOFF2 (ostream &os) const {
-	auto input_data = reinterpret_cast<const uint8_t*>(_buffer.data());
-	size_t output_size = woff2::MaxWOFF2CompressedSize(input_data, _buffer.size());
-	string output(output_size, 0);
-	auto output_data = reinterpret_cast<uint8_t*>(&output[0]);
-	woff2::WOFF2Params params;
-	if (woff2::ConvertTTFToWOFF2(input_data, _buffer.size(), output_data, &output_size, params)) {
-		output.resize(output_size);
-		copy(output.begin(), output.end(), ostream_iterator<uint8_t>(os));
-		return true;
-	}
-	return false;
-}
-
-
-bool TrueTypeFont::writeWOFF2 (const string &fname) const {
-	ofstream ofs(fname, ios::binary);
-	return writeWOFF2(ofs);
-}
-
-
-/** Converts the numeric table tag (which represents a four-character ID) to a string. */
-string TrueTypeFont::TTFTableRecord::name () const {
-	string ret;
-	for (int i=24; i >= 0; i-= 8)
-		ret += static_cast<char>(tag >> i);
-	return ret;
-}
-
-
-uint32_t TrueTypeFont::TTFTableRecord::computeChecksum () const {
-	uint32_t sum=0;
-	auto startptr = reinterpret_cast<const uint32_t*>(data);
-	auto endptr = startptr + paddedSize()/sizeof(uint32_t);
-	while (startptr < endptr)
-		 sum += *startptr++;
-	return sum;
-}

Deleted: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TrueTypeFont.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TrueTypeFont.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/TrueTypeFont.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,74 +0,0 @@
-/*************************************************************************
-** TrueTypeFont.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 TRUETYPEFONT_HPP
-#define TRUETYPEFONT_HPP
-
-#include <istream>
-#include <fstream>
-#include <ostream>
-#include <string>
-#include <vector>
-#include "MessageException.hpp"
-
-
-class TrueTypeFont {
-	struct TTFTableRecord {
-		std::string name () const;
-		uint32_t paddedSize () const {return (size+3) & ~3;}
-		uint32_t computeChecksum () const;
-		uint32_t tag;         ///< table tag
-		uint32_t checksum;    ///< checksum of the table data
-		uint32_t size;        ///< number of bytes in the table
-		const uint8_t *data;  ///< points to the begin of the table
-	};
-
-	struct WOFFTableRecord {
-		WOFFTableRecord (uint32_t off, const TTFTableRecord &rec) : offset(off), size(rec.size), data(rec.data), ttfRecord(rec) {}
-		size_t paddedSize () const {return (size+3) & ~3;}
-		bool compressTableData ();
-		uint32_t offset;                        ///< file offset to first byte of the table
-		uint32_t size;                          ///< number of bytes in the table
-		const uint8_t *data;                    ///< points to the begin of the WOFF table
-		std::vector<uint8_t> compressedData;    ///< compressed table data
-		const TTFTableRecord &ttfRecord;        ///< corresponding TTF table record
-	};
-
-	public:
-		TrueTypeFont () : _version(0) {}
-		explicit TrueTypeFont (const std::string &fname) {read(fname);}
-		bool read (const std::string &fname);
-		void writeWOFF (std::ostream &os) const;
-		void writeWOFF (const std::string &fname) const;
-		bool writeWOFF2 (std::ostream &os) const;
-		bool writeWOFF2 (const std::string &fname) const;
-
-	private:
-		uint32_t _version;        ///< TTF version
-		std::string _buffer;      ///< contents of TTF file
-		std::vector<TTFTableRecord> _tableRecords;
-};
-
-
-struct TrueTypeFontException : public MessageException {
-	explicit TrueTypeFontException (const std::string &msg) : MessageException(msg) {}
-};
-
-#endif

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Unicode.cpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -52,9 +52,12 @@
 
 /** Returns a valid Unicode point for the given character code. Character codes
  *  that are invalid code points because the XML standard forbids or discourages
- *  their usage, are mapped to the Private Use Zone U+E000-U+F8FF. */
-uint32_t Unicode::charToCodepoint (uint32_t c) {
-	uint32_t ranges[] = {
+ *  their usage, are mapped to the Private Use Zone U+E000-U+F8FF.
+ *  @param[in] c character code to map
+ *  @param[in] permitSpace if true, space characters are treated as allowed code points
+ *  @return the code point */
+uint32_t Unicode::charToCodepoint (uint32_t c, bool permitSpace) {
+	static uint32_t ranges[] = {
 		0x0000, 0x0020, 0xe000, // basic control characters + space
 		0x007f, 0x009f, 0xe021, // use of control characters is discouraged by the XML standard
 		0x202a, 0x202e, 0xe042, // bidi control characters
@@ -78,9 +81,12 @@
 		0xffffe, 0xfffff, 0xe885,
 		0x10fffe, 0x10ffff, 0xe887
 	};
-	for (size_t i=0; i < sizeof(ranges)/sizeof(unsigned) && c >= ranges[i]; i+=3)
-		if (c <= ranges[i+1])
-			return ranges[i+2]+c-ranges[i];
+	if (!permitSpace || c != 0x20) {
+		for (size_t i=0; i < sizeof(ranges)/sizeof(uint32_t) && c >= ranges[i]; i+=3) {
+			if (c <= ranges[i+1])
+				return ranges[i+2]+c-ranges[i];
+		}
+	}
 	return c;
 }
 
@@ -114,6 +120,32 @@
 }
 
 
+uint32_t Unicode::utf8ToCodepoint (const string &utf8) {
+	auto len = utf8.length();
+	if (len > 0) {
+		unsigned char c0 = utf8[0];
+		if (c0 >= 0 && c0 <= 127)
+			return c0;
+		if (len > 1) {
+			unsigned char c1 = utf8[1];
+			if (c0 >= 0xC0 && c0 <= 0xDF)
+				return ((c0-0xC0) << 6) + (c1-0x80);
+			if (len > 2 && (c0 != 0xED || (c1 & 0xA0) != 0xA0)) {
+				unsigned char c2 = utf8[2];
+				if (c0 >= 0xE0 && c0 <= 0xEF)
+					return ((c0-0xE0) << 12) + ((c1-0x80) << 6) + (c2-0x80);
+				if (len > 3) {
+					unsigned char c3 = utf8[3];
+					if (c0 >= 0xF0 && c0 <= 0xF7)
+						return  ((c0-0xF0) << 18) + ((c1-0x80) << 12) + ((c2-0x80) << 6) + (c3-0x80);
+				}
+			}
+		}
+	}
+	return 0;
+}
+
+
 /** Converts a surrogate pair to its code point.
  *  @param[in] high high-surrogate value (upper 16 bits)
  *  @param[in] low low-surrogate value (lower 16 bits)
@@ -148,6 +180,43 @@
 }
 
 
+uint32_t Unicode::toLigature (const string &nonlig) {
+	struct Ligature {
+		const char *nonlig;
+		uint32_t lig;
+	} ligatures[39] = {
+		{u8"AA",  0xA732}, {u8"aa", 0xA733},
+		{u8"AE",  0x00C6}, {u8"ae", 0x00E6},
+		{u8"AO",  0xA734}, {u8"ao", 0xA735},
+		{u8"AU",  0xA736}, {u8"au", 0xA737},
+		{u8"AV",  0xA738}, {u8"av", 0xA739},
+		{u8"AY",  0xA73C}, {u8"ay", 0xA73D},
+		{u8"et", 0x1F670},
+		{u8"ff",  0xFB00},
+		{u8"ffi", 0xFB03},
+		{u8"ffl", 0xFB04},
+		{u8"fi",  0xFB01},
+		{u8"fl",  0xFB02},
+		{u8"Hv",  0x01F6}, {u8"hv", 0x0195},
+		{u8"lb",  0x2114},
+		{u8"lL",  0x1EFA}, {u8"ll", 0x1EFB},
+		{u8"OE",  0x0152}, {u8"oe", 0x0153},
+		{u8"OO",  0xA74E}, {u8"oo", 0xA74F},
+		{u8"OO",  0xA74E},
+		{u8"\u0254e", 0xAB62},
+		{u8"\u017Fs", 0x1E9E}, {u8"\u017Az", 0x00DF},
+		{u8"Tz",  0xA728}, {u8"tz",  0xA729},
+		{u8"ue",  0x1D6B},
+		{u8"uo",  0xAB63},
+		{u8"VV",  0x0057}, {u8"tz",  0x0077},
+		{u8"VY",  0xA760}, {u8"tz",  0xA761},
+	};
+	auto it = find_if(begin(ligatures), end(ligatures), [&nonlig](const Ligature &l) {
+		return l.nonlig == nonlig;
+	});
+	return it != end(ligatures) ? it->lig : 0;
+}
+
 #include "AGLTable.hpp"
 
 /** Tries to extract the codepoint from AGL character names like "uni1234" or "u1234".

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/Unicode.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** Unicode.hpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -25,11 +25,13 @@
 
 struct Unicode {
 	static bool isValidCodepoint (uint32_t code);
-	static uint32_t charToCodepoint (uint32_t c);
+	static uint32_t charToCodepoint (uint32_t c, bool permitSpace=false);
 	static std::string utf8 (int32_t c);
+	static uint32_t utf8ToCodepoint (const std::string &utf8);
 	static uint32_t fromSurrogate (uint32_t high, uint32_t low);
 	static uint32_t fromSurrogate (uint32_t cp);
 	static uint32_t toSurrogate (uint32_t cp);
+	static uint32_t toLigature (const std::string &nonlig);
 	static int32_t aglNameToCodepoint (const std::string &name);
 };
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VFActions.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VFActions.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VFActions.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** VFActions.hpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** VFReader.cpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VFReader.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** VFReader.hpp                                                         **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorIterator.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorIterator.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorIterator.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** VectorIterator.hpp                                                   **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorStream.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorStream.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/VectorStream.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** VectorStream.hpp                                                     **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** XMLDocument.cpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLDocument.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** XMLDocument.hpp                                                      **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** XMLNode.cpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -63,6 +63,14 @@
 	return oldnext;
 }
 
+
+XMLElement* XMLNode::nextElement () const {
+	for (XMLNode *node = next(); node; node = node->next())
+		if (node->toElement())
+			return node->toElement();
+	return nullptr;
+}
+
 /////////////////////////////////////////////////////////////////////
 
 XMLElement::XMLElement (string name) : _name(std::move(name)) {
@@ -375,7 +383,8 @@
 		if (attrib.name.front() != '@')
 			os << attrib.name << "='" << attrib.value << '\'';
 		else {
-			os << attrib.name.substr(1) << "='";
+			bool keep = (attrib.name.size() > 1 && attrib.name[1] == '@');
+			os << attrib.name.substr(keep ? 2 : 1) << "='";
 			auto pos = attrib.value.find("base64,");
 			if (pos == string::npos)
 				os << attrib.value;
@@ -387,7 +396,7 @@
 					os << '\n';
 					util::base64_copy(ifs, os, 200);
 					ifs.close();
-					if (!KEEP_ENCODED_FILES)
+					if (!KEEP_ENCODED_FILES && !keep)
 						FileSystem::remove(fname);
 				}
 			}

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLNode.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** XMLNode.hpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -62,6 +62,7 @@
 		XMLNode* parent () const  {return _parent;}
 		XMLNode* prev () const    {return _prev;}
 		XMLNode* next () const    {return _next.get();}
+		XMLElement* nextElement () const;
 
 		static bool KEEP_ENCODED_FILES;
 

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** 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>   **
+** Copyright (C) 2005-2023 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       **
@@ -19,11 +19,66 @@
 *************************************************************************/
 
 #include "InputReader.hpp"
-#include "GraphicsPathParser.hpp"
 #include "XMLParser.hpp"
 
 using namespace std;
 
+XMLElement* XMLParser::setRootElement (XMLElement *root) {
+	_elementStack.clear();
+	if (root)
+		_elementStack.push_back(root);
+	else {
+		_root = util::make_unique<XMLElement>("root");
+		_elementStack.push_back(_root.get());
+	}
+	return _elementStack.back();
+}
+
+
+/** Parses an XML fragment from an input stream. */
+void XMLParser::parse (istream &is) {
+	while (is) {
+		string buf;
+		buf.resize(1024);
+		is.read(&buf[0], 1024);
+		buf.resize(is.gcount());
+		parse(std::move(buf));
+	}
+	finish();
+}
+
+
+static string::size_type find_end_of_tag (const string &str, string::size_type startpos) {
+	char attrval_delim = 0;
+	bool expect_attrval = false;
+	for (auto i=startpos; i < str.length(); i++) {
+		if (attrval_delim) {  // inside attrubute value?
+			if (str[i] == attrval_delim)  // end of attribute value?
+				attrval_delim = 0;
+		}
+		else if (str[i] == '>')
+			return i;
+		else if (str[i] == '"' || str[i] == '\'') { // start of attribute value?
+			if (expect_attrval)
+				attrval_delim = str[i];
+			else {
+				ostringstream oss;
+				oss << "misplaced " << str[i] << " inside tag";
+				throw XMLParserException(oss.str());
+			}
+		}
+		else if (str[i] == '=') {
+			expect_attrval = true;
+			continue;
+		}
+		else if (str[i] == '<')
+			throw XMLParserException("invalid '<' inside tag");
+		expect_attrval = false;
+	}
+	return string::npos;
+}
+
+
 /** 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
@@ -30,18 +85,24 @@
  *  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) {
+void XMLParser::parse (string xml, bool finish) {
+	if (_elementStack.empty())  // no root element set?
+		return;
 	// collect/extract an XML fragment that only contains complete tags
 	// incomplete tags are held back
-	_xmlbuf += xml;
+	if (_xmlbuf.empty())
+		_xmlbuf.assign(std::move(xml));
+	else
+		_xmlbuf.append(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 (left < right && left < _xmlbuf.length())  {// plain text found?
+				string text = (right == string::npos ? _xmlbuf.substr(left) : _xmlbuf.substr(left, right-left));
+				appendNode(util::make_unique<XMLText>(std::move(text)));
+			}
 			if (right != string::npos) {
 				left = right;
 				if (_xmlbuf.compare(left, 9, "<![CDATA[") == 0) {
@@ -50,7 +111,7 @@
 						if (finish) throw XMLParserException("expected ']]>' at end of CDATA block");
 						break;
 					}
-					(svgTree.*_append)(util::make_unique<XMLCData>(_xmlbuf.substr(left + 9, right - left - 9)));
+					appendNode(util::make_unique<XMLCData>(_xmlbuf.substr(left+9, right-left-9)));
 					right += 2;
 				}
 				else if (_xmlbuf.compare(left, 4, "<!--") == 0) {
@@ -59,7 +120,7 @@
 						if (finish) throw XMLParserException("expected '-->' at end of comment");
 						break;
 					}
-					(svgTree.*_append)(util::make_unique<XMLComment>(_xmlbuf.substr(left + 4, right - left - 4)));
+					appendNode(util::make_unique<XMLComment>(_xmlbuf.substr(left+4, right-left-4)));
 					right += 2;
 				}
 				else if (_xmlbuf.compare(left, 2, "<?") == 0) {
@@ -68,7 +129,7 @@
 						if (finish) throw XMLParserException("expected '?>' at end of processing instruction");
 						break;
 					}
-					(svgTree.*_append)(util::make_unique<XMLText>(_xmlbuf.substr(left, right - left + 2)));
+					appendNode(util::make_unique<XMLText>(_xmlbuf.substr(left, right-left+2)));
 					right++;
 				}
 				else if (_xmlbuf.compare(left, 2, "</") == 0) {
@@ -77,15 +138,15 @@
 						if (finish) throw XMLParserException("missing '>' at end of closing XML tag");
 						break;
 					}
-					closeElement(_xmlbuf.substr(left+2, right-left-2), svgTree);
+					closeElement(_xmlbuf.substr(left+2, right-left-2));
 				}
 				else {
-					right = _xmlbuf.find('>', left+1);
+					right = find_end_of_tag(_xmlbuf, 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);
+					openElement(_xmlbuf.substr(left+1, right-left-1));
 				}
 			}
 			left = right;
@@ -104,49 +165,50 @@
 }
 
 
+void XMLParser::appendNode (unique_ptr<XMLNode> node) {
+	context()->append(std::move(node));
+}
+
+
+XMLElement* XMLParser::finishPushContext (unique_ptr<XMLElement> elem) {
+	XMLElement *elemPtr = elem.get();
+	context()->append(std::move(elem));
+	return elemPtr;
+}
+
+
 /** Processes an opening element tag.
  *  @param[in] tag tag without leading and trailing angle brackets */
-void XMLParser::openElement (const string &tag, SVGTree &svgTree) {
+XMLElement* XMLParser::openElement (const string &tag) {
 	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);
+	unique_ptr<XMLElement> elemNode{createElementPtr(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());
-				}
-			}
-		}
+		for (const auto &attrpair : attribs)
+			elemNode->addAttribute(attrpair.first, attrpair.second);
 	}
 	ir.skipSpace();
+	XMLElement *elemPtr = elemNode.get();
 	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));
-	}
+		appendNode(std::move(elemNode));
+	else if (ir.peek() < 0)   // end of opening tag
+		_elementStack.push_back(finishPushContext(std::move(elemNode)));
 	else
 		throw XMLParserException("'>' or '/>' expected at end of opening tag <"+name);
+	if (_notifyElementOpened)
+		_notifyElementOpened(elemPtr);
+	if (ir.peek() == '/' && _notifyElementClosed)
+		_notifyElementClosed(elemPtr);
+	return elemPtr;
 }
 
 
 /** Processes a closing element tag.
  *  @param[in] tag tag without leading and trailing angle brackets */
-void XMLParser::closeElement (const string &tag, SVGTree &svgTree) {
+void XMLParser::closeElement (const string &tag) {
 	StringInputBuffer ib(tag);
 	BufferInputReader ir(ib);
 	string name = ir.getString(" \t\n\r");
@@ -153,30 +215,43 @@
 	ir.skipSpace();
 	if (ir.peek() >= 0)
 		throw XMLParserException("'>' expected at end of closing tag </"+name);
-	if (_nameStack.empty())
+	if (_elementStack.size() <= 1)
 		throw XMLParserException("spurious closing tag </" + name + ">");
-	if (_nameStack.back() != name)
-		throw XMLParserException("expected </" + _nameStack.back() + "> but found </" + name + ">");
-	(svgTree.*_popContext)();
-	_nameStack.pop_back();
+	if (_elementStack.back()->name() != name)
+		throw XMLParserException("expected </" + _elementStack.back()->name() + "> but found </" + name + ">");
+	finishPopContext();
+	if (_notifyElementClosed)
+		_notifyElementClosed(_elementStack.back());
+	_elementStack.pop_back();
 }
 
 
 /** Processes any remaining XML fragments, checks for missing closing tags,
  *  and resets the parser state. */
-void XMLParser::finish (SVGTree &svgTree) {
+void XMLParser::finish () {
 	if (!_xmlbuf.empty()) {
 		if (!_error)
-			parse("", svgTree, true);
+			parse("", true);
 		_xmlbuf.clear();
 	}
 	string tags;
-	while (!_nameStack.empty()) {
-		tags += "</"+_nameStack.back()+">, ";
-		_nameStack.pop_back();
+	while (_elementStack.size() > 1) {
+		tags += "</" + _elementStack.back()->name() + ">, ";
+		_elementStack.pop_back();
 	}
 	if (!tags.empty() && !_error) {
-		tags.resize(tags.length()-2);
-		throw XMLParserException("missing closing tag(s): "+tags);
+		tags.resize(tags.length()-2);  // drop trailing ", "
+		throw XMLParserException("missing closing tag(s): " + tags);
 	}
 }
+
+
+XMLElement* XMLParser::createElementPtr (std::string name) const {
+	return new XMLElement(std::move(name));
+}
+
+
+void XMLParser::setNotifyFuncs (NotifyFunc notifyElementOpened, NotifyFunc notifyElementClosed) {
+	_notifyElementOpened = std::move(notifyElementOpened);
+	_notifyElementClosed = std::move(notifyElementClosed);
+}

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLParser.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** 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>   **
+** Copyright (C) 2005-2023 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       **
@@ -21,9 +21,10 @@
 #ifndef XMLPARSER_HPP
 #define XMLPARSER_HPP
 
+#include <functional>
 #include <string>
 #include "MessageException.hpp"
-#include "SVGTree.hpp"
+#include "XMLNode.hpp"
 
 struct XMLParserException : MessageException {
 	explicit XMLParserException (const std::string &msg) : MessageException(msg) {}
@@ -30,29 +31,35 @@
 };
 
 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>;
+	using ElementStack = std::vector<XMLElement*>;
+	using NotifyFunc = std::function<void(XMLElement*)>;
 
 	public:
-		XMLParser (AppendFunc append, PushFunc push, PopFunc pop)
-				: _append(append), _pushContext(push), _popContext(pop) {}
+		XMLParser () =default;
+		virtual ~XMLParser() {}
+		explicit XMLParser (XMLElement *root) {setRootElement(root);}
+		XMLElement* setRootElement (XMLElement *root);
+		void parse (std::istream &is);
+		void parse (std::string xml, bool finish=false);
+		void finish ();
+		void setNotifyFuncs (NotifyFunc notifyElementOpened, NotifyFunc notifyElementClosed);
 
-		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);
+		XMLElement* context () {return _elementStack.back();}
+		virtual void appendNode (std::unique_ptr<XMLNode> node);
+		virtual XMLElement* finishPushContext (std::unique_ptr<XMLElement> elem);
+		virtual void finishPopContext () {}
+		virtual XMLElement* openElement (const std::string &tag);
+		virtual void closeElement (const std::string &tag);
+		virtual XMLElement* createElementPtr (std::string name) const;
 
 	private:
-		AppendFunc _append;
-		PushFunc _pushContext;
-		PopFunc _popContext;
 		std::string _xmlbuf;
-		NameStack _nameStack;  ///< names of nested elements still missing a closing tag
+		std::unique_ptr<XMLElement> _root;  ///< element holding the parsed nodes
+		ElementStack _elementStack;         ///< elements not yet closed
 		bool _error=false;
+		std::function<void(XMLElement*)> _notifyElementOpened;
+		std::function<void(XMLElement*)> _notifyElementClosed;
 };
 
 #endif

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** XMLString.cpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XMLString.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** XMLString.hpp                                                        **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XXHashFunction.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XXHashFunction.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/XXHashFunction.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** XXHashFunction.hpp                                                   **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ZLibOutputStream.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ZLibOutputStream.hpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ZLibOutputStream.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** ZLibOutputStream.hpp                                                 **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **

Modified: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/dvisvgm.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/dvisvgm.cpp	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/dvisvgm.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -2,7 +2,7 @@
 ** dvisvgm.cpp                                                          **
 **                                                                      **
 ** This file is part of dvisvgm -- a fast DVI to SVG converter          **
-** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking at uos.de>   **
+** Copyright (C) 2005-2023 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       **
@@ -40,6 +40,7 @@
 #include "HyperlinkManager.hpp"
 #include "Message.hpp"
 #include "PageSize.hpp"
+#include "PDFHandler.hpp"
 #include "PDFToSVG.hpp"
 #include "PSInterpreter.hpp"
 #include "PsSpecialHandler.hpp"
@@ -48,6 +49,7 @@
 #include "optimizer/SVGOptimizer.hpp"
 #include "SVGOutput.hpp"
 #include "System.hpp"
+#include "ttf/TTFWriter.hpp"
 #include "XMLParser.hpp"
 #include "XXHashFunction.hpp"
 #include "utility.hpp"
@@ -56,8 +58,7 @@
 #ifndef DISABLE_WOFF
 #include <brotli/encode.h>
 //#include <woff2/version.h>
-#include "ffwrapper.h"
-#include "TTFAutohint.hpp"
+#include "ttf/TTFAutohint.hpp"
 #endif
 
 using namespace std;
@@ -156,7 +157,7 @@
 		if (!args.tmpdirOpt.value().empty())
 			FileSystem::TMPDIR = args.tmpdirOpt.value();
 		else {
-			cout << "temporary folder: " << FileSystem::tmpdir() << '\n';
+			cout << "temporary folder: " << FileSystem::ensureSystemSlashes(FileSystem::tmpdir(true)) << '\n';
 			return false;
 		}
 	}
@@ -255,9 +256,9 @@
 
 static void print_version (bool extended) {
 	string versionstr = string(PROGRAM_NAME)+" "+PROGRAM_VERSION;
-#ifdef TARGET_SYSTEM
-	if (extended && strlen(TARGET_SYSTEM) > 0)
-		versionstr += " (" TARGET_SYSTEM ")";
+#ifdef HOST_SYSTEM
+	if (extended && strlen(HOST_SYSTEM) > 0)
+		versionstr += " (" HOST_SYSTEM ")";
 #endif
 	cout << versionstr << '\n';
 	if (extended) {
@@ -269,11 +270,11 @@
 		versionInfo.add("xxhash", XXH64HashFunction::version(), 3, 100);
 		versionInfo.add("zlib", zlibVersion());
 		versionInfo.add("Ghostscript", Ghostscript().revisionstr(), true);
+		versionInfo.add("mutool", PDFHandler::mutoolVersion(), true);
 #ifndef DISABLE_WOFF
 		versionInfo.add("brotli", BrotliEncoderVersion(), 3, 0x1000);
 //		versionInfo.add("woff2", woff2::version, 3, 0x100);
-		versionInfo.add("fontforge", ff_version());
-		versionInfo.add("ttfautohint", TTFAutohint().version(), true);
+		versionInfo.add("ttfautohint", ttf::TTFAutohint().version(), true);
 #endif
 #ifdef MIKTEX
 		versionInfo.add("MiKTeX", FileFinder::instance().version());
@@ -371,6 +372,10 @@
 	PsSpecialHandler::SHADING_SEGMENT_SIZE = max(1, cmdline.gradSegmentsOpt.value());
 	PsSpecialHandler::SHADING_SIMPLIFY_DELTA = cmdline.gradSimplifyOpt.value();
 	PsSpecialHandler::BITMAP_FORMAT = util::tolower(cmdline.bitmapFormatOpt.value());
+#ifdef TTFDEBUG
+	ttf::TTFWriter::CREATE_PS_GLYPH_OUTLINES = cmdline.debugGlyphsOpt.given();
+#endif
+	PsSpecialHandler::EMBED_BITMAP_DATA = cmdline.embedBitmapsOpt.given();
 	if (!PSInterpreter::imageDeviceKnown(PsSpecialHandler::BITMAP_FORMAT)) {
 		ostringstream oss;
 		oss << "unknown image format '" << PsSpecialHandler::BITMAP_FORMAT << "'\nknown formats:\n";

Deleted: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.c
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.c	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.c	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,84 +0,0 @@
-/*************************************************************************
-** ffwrapper.c                                                          **
-**                                                                      **
-** 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 <fontforge.h>
-#include "ffwrapper.h"
-
-#ifdef _NDEBUG
-static void no_post_error (const char *title, const char *error, ...) {}
-static void no_warning (const char *format, ...) {}
-#endif
-
-
-/** Initializes the FontForge library. */
-void ff_init () {
-	InitSimpleStuff();
-#ifdef _NDEBUG
-	ui_interface.post_error = &no_post_error;
-	ui_interface.logwarning = &no_warning;
-#endif
-}
-
-
-int ff_version () {
-	return FONTFORGE_VERSIONDATE_RAW;
-}
-
-
-/** Runs the autohinter for all glyphs in a given font.
- *  @param[in,out] sf the font to be autohinted
- *  @param[in] order2 if != 0, target font requires quadratic rather than cubic splines */
-static void ff_autohint (SplineFont *sf, int order2) {
-	BlueData bd;
-	GlobalInstrCt gic;
-	if (order2)
-		SFConvertToOrder2(sf);
-	QuickBlues(sf, ly_fore, &bd);
-	if (order2)
-		InitGlobalInstrCt(&gic, sf, ly_fore, &bd);
-	for (int i=0; i < sf->glyphcnt; i++) {
-		SplineChar *sc = sf->glyphs[i];
-		if (sc != NULL) {
-			SplineChar *sc = sf->glyphs[i];
-			SplineCharAutoHint(sc, ly_fore, &bd); // generate hints
-			if (order2)
-				NowakowskiSCAutoInstr(&gic, sc);  // generate TTF instructions
-		}
-	}
-	if (order2)
-		FreeGlobalInstrCt(&gic);
-}
-
-
-/** Creates a TrueType font from a FontForge SFD file.
- *  @param[in] sfdname name of SFD file
- *  @param[in] ttfname name of TrueType file
- *  @param[in] autohint run the autohinter if != 0 */
-int ff_sfd_to_ttf (const char *sfdname, const char *ttfname, int autohint) {
-	int ret=0;
-	SplineFont *sf = SFDRead((char*)sfdname);
-	if (sf) {
-		if (autohint)
-			ff_autohint(sf, true);
-		ret = WriteTTFFont((char*)ttfname, sf, ff_ttf, 0, 0, 0, sf->map, ly_fore);
-		SplineFontFree(sf);
-	}
-	return ret;
-}

Deleted: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.h
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.h	2023-01-20 00:50:02 UTC (rev 65592)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/ffwrapper.h	2023-01-20 01:55:04 UTC (rev 65593)
@@ -1,37 +0,0 @@
-/*************************************************************************
-** ffwrapper.h                                                          **
-**                                                                      **
-** 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 FFWRAPPER_H
-#define FFWRAPPER_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void ff_init ();
-int ff_version ();
-int ff_sfd_to_ttf (const char *sfdname, const char *ttfname, int autohint);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-

Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/Base14Fonts.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/Base14Fonts.cpp	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/Base14Fonts.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,65 @@
+/*************************************************************************
+** Base14Fonts.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 <algorithm>
+#include "Base14Fonts.hpp"
+
+using namespace std;
+
+extern const MemoryFontData Dingbats_cff;
+extern const MemoryFontData NimbusMonoPS_Bold_cff;
+extern const MemoryFontData NimbusMonoPS_BoldItalic_cff;
+extern const MemoryFontData NimbusMonoPS_Italic_cff;
+extern const MemoryFontData NimbusMonoPS_Regular_cff;
+extern const MemoryFontData NimbusRoman_Bold_cff;
+extern const MemoryFontData NimbusRoman_BoldItalic_cff;
+extern const MemoryFontData NimbusRoman_Italic_cff;
+extern const MemoryFontData NimbusRoman_Regular_cff;
+extern const MemoryFontData NimbusSans_Bold_cff;
+extern const MemoryFontData NimbusSans_BoldItalic_cff;
+extern const MemoryFontData NimbusSans_Italic_cff;
+extern const MemoryFontData NimbusSans_Regular_cff;
+extern const MemoryFontData StandardSymbolsPS_cff;
+
+const MemoryFontData* find_base14_font (const string &fontname) {
+	struct FontData {
+		const char *name;
+		const MemoryFontData *font;
+	} names[14] = {
+		{"Courier", &NimbusMonoPS_Regular_cff},
+		{"Courier-Oblique", &NimbusMonoPS_Italic_cff},
+		{"Courier-Bold", &NimbusMonoPS_Bold_cff},
+		{"Courier-BoldOblique", &NimbusMonoPS_BoldItalic_cff},
+		{"Helvetica", &NimbusSans_Regular_cff},
+		{"Helvetica-Oblique", &NimbusSans_Italic_cff},
+		{"Helvetica-Bold", &NimbusSans_Bold_cff},
+		{"Helvetica-BoldOblique", &NimbusSans_BoldItalic_cff},
+		{"Times-Roman", &NimbusRoman_Regular_cff},
+		{"Times-Italic", &NimbusRoman_Italic_cff},
+		{"Times-Bold", &NimbusRoman_Bold_cff},
+		{"Times-BoldItalic", &NimbusRoman_BoldItalic_cff},
+		{"Symbol", &StandardSymbolsPS_cff},
+		{"ZapfDingbats", &Dingbats_cff}
+	};
+	auto it = find_if(begin(names), end(names), [&fontname](const FontData &data) {
+		return data.name == fontname;
+	});
+	return it != end(names) ? it->font : nullptr;
+}


Property changes on: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/Base14Fonts.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/Base14Fonts.hpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/Base14Fonts.hpp	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/Base14Fonts.hpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,32 @@
+/*************************************************************************
+** Base14Fonts.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 <cstddef>
+#include <string>
+
+struct MemoryFontData {
+	MemoryFontData () =delete;
+	const char *data;
+	size_t size;
+};
+
+const MemoryFontData* find_base14_font (const std::string &name);

Added: trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/Dingbats.cff.cpp
===================================================================
--- trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/Dingbats.cff.cpp	                        (rev 0)
+++ trunk/Build/source/texk/dvisvgm/dvisvgm-src/src/fonts/Dingbats.cff.cpp	2023-01-20 01:55:04 UTC (rev 65593)
@@ -0,0 +1,785 @@
+#include "Base14Fonts.hpp"
+
+extern const MemoryFontData Dingbats_cff = {
+"\x01\x00\x04\x02\x00\x01\x01\x01\x09\x44\x69\x6e\x67\x62\x61\x74\x73\x00\x01\x01\x01\x39\xf8\xe4\x00\xf8\xe5\x01\xf8\xe6\x0c\x00"
+"\xf8\xe7\x02\xf8\xe7\x03\xf8\x18\x04\x43\x0c\x03\xaf\x0c\x04\x8a\xfb\x24\xfa\x69\xf9\xc7\x05\x1d\x00\x4c\x9a\x04\x0d\x1c\x05\x2a"
+"\x0f\x1c\x05\x31\x10\x1c\x05\x3b\x11\x9f\x1c\x60\x1e\x12\x00\xcd\x02\x00\x01\x00\x03\x00\x05\x00\x09\x00\x0b\x00\x0d\x00\x0f\x00"
+"\x13\x00\x17\x00\x1b\x00\x1e\x00\x21\x00\x24\x00\x27\x00\x2a\x00\x2d\x00\x31\x00\x34\x00\x37\x00\x3a\x00\x3d\x00\x40\x00\x43\x00"
+"\x46\x00\x49\x00\x4c\x00\x4f\x00\x52\x00\x55\x00\x57\x00\x59\x00\x5b\x00\x5d\x00\x60\x00\x63\x00\x66\x00\x69\x00\x6c\x00\x6f\x00"
+"\x72\x00\x75\x00\x78\x00\x7b\x00\x7e\x00\x81\x00\x84\x00\x87\x00\x8a\x00\x8d\x00\x90\x00\x93\x00\x96\x00\x99\x00\x9c\x00\x9f\x00"
+"\xa2\x00\xa5\x00\xa8\x00\xab\x00\xae\x00\xb1\x00\xb4\x00\xb7\x00\xba\x00\xbd\x00\xc0\x00\xc3\x00\xc6\x00\xc9\x00\xcc\x00\xcf\x00"
+"\xd2\x00\xd5\x00\xd8\x00\xdb\x00\xde\x00\xe1\x00\xe4\x00\xe7\x00\xea\x00\xee\x00\xf1\x00\xf5\x00\xf8\x00\xfb\x00\xfe\x01\x01\x01"
+"\x04\x01\x07\x01\x0a\x01\x0d\x01\x10\x01\x13\x01\x16\x01\x1a\x01\x1d\x01\x20\x01\x23\x01\x26\x01\x29\x01\x2c\x01\x30\x01\x33\x01"
+"\x37\x01\x3a\x01\x3d\x01\x40\x01\x43\x01\x46\x01\x4a\x01\x4e\x01\x52\x01\x56\x01\x5a\x01\x5e\x01\x62\x01\x66\x01\x6a\x01\x6e\x01"
+"\x72\x01\x76\x01\x7a\x01\x7e\x01\x82\x01\x86\x01\x8a\x01\x8e\x01\x92\x01\x96\x01\x9a\x01\x9e\x01\xa2\x01\xa6\x01\xaa\x01\xae\x01"
+"\xb2\x01\xb6\x01\xba\x01\xbe\x01\xc2\x01\xc6\x01\xca\x01\xce\x01\xd2\x01\xd6\x01\xda\x01\xde\x01\xe2\x01\xe6\x01\xea\x01\xee\x01"
+"\xf2\x01\xf6\x01\xfa\x01\xfe\x02\x02\x02\x06\x02\x0a\x02\x0e\x02\x12\x02\x16\x02\x1a\x02\x1e\x02\x22\x02\x26\x02\x2a\x02\x2e\x02"
+"\x32\x02\x36\x02\x3a\x02\x3e\x02\x42\x02\x46\x02\x4a\x02\x4e\x02\x52\x02\x56\x02\x5a\x02\x5e\x02\x62\x02\x66\x02\x6a\x02\x6e\x02"
+"\x72\x02\x76\x02\x7a\x02\x7e\x02\x82\x02\x86\x02\x8a\x02\x8e\x02\x92\x02\x96\x02\x9a\x02\x9e\x02\xa2\x02\xa6\x02\xaa\x02\xae\x02"
+"\xb2\x02\xb6\x02\xba\x02\xbe\x02\xf4\x03\x34\x03\x3c\x61\x31\x61\x32\x61\x32\x30\x32\x61\x33\x61\x34\x61\x35\x61\x31\x31\x39\x61"
+"\x31\x31\x38\x61\x31\x31\x37\x61\x31\x31\x61\x31\x32\x61\x31\x33\x61\x31\x34\x61\x31\x35\x61\x31\x36\x61\x31\x30\x35\x61\x31\x37"
+"\x61\x31\x38\x61\x31\x39\x61\x32\x30\x61\x32\x31\x61\x32\x32\x61\x32\x33\x61\x32\x34\x61\x32\x35\x61\x32\x36\x61\x32\x37\x61\x32"
+"\x38\x61\x36\x61\x37\x61\x38\x61\x39\x61\x31\x30\x61\x32\x39\x61\x33\x30\x61\x33\x31\x61\x33\x32\x61\x33\x33\x61\x33\x34\x61\x33"
+"\x35\x61\x33\x36\x61\x33\x37\x61\x33\x38\x61\x33\x39\x61\x34\x30\x61\x34\x31\x61\x34\x32\x61\x34\x33\x61\x34\x34\x61\x34\x35\x61"
+"\x34\x36\x61\x34\x37\x61\x34\x38\x61\x34\x39\x61\x35\x30\x61\x35\x31\x61\x35\x32\x61\x35\x33\x61\x35\x34\x61\x35\x35\x61\x35\x36"
+"\x61\x35\x37\x61\x35\x38\x61\x35\x39\x61\x36\x30\x61\x36\x31\x61\x36\x32\x61\x36\x33\x61\x36\x34\x61\x36\x35\x61\x36\x36\x61\x36"
+"\x37\x61\x36\x38\x61\x36\x39\x61\x37\x30\x61\x37\x31\x61\x37\x32\x61\x37\x33\x61\x37\x34\x61\x32\x30\x33\x61\x37\x35\x61\x32\x30"
+"\x34\x61\x37\x36\x61\x37\x37\x61\x37\x38\x61\x37\x39\x61\x38\x31\x61\x38\x32\x61\x38\x33\x61\x38\x34\x61\x39\x37\x61\x39\x38\x61"
+"\x39\x39\x61\x31\x30\x30\x61\x38\x39\x61\x39\x30\x61\x39\x33\x61\x39\x34\x61\x39\x31\x61\x39\x32\x61\x32\x30\x35\x61\x38\x35\x61"
+"\x32\x30\x36\x61\x38\x36\x61\x38\x37\x61\x38\x38\x61\x39\x35\x61\x39\x36\x61\x31\x30\x31\x61\x31\x30\x32\x61\x31\x30\x33\x61\x31"
+"\x30\x34\x61\x31\x30\x36\x61\x31\x30\x37\x61\x31\x30\x38\x61\x31\x31\x32\x61\x31\x31\x31\x61\x31\x31\x30\x61\x31\x30\x39\x61\x31"
+"\x32\x30\x61\x31\x32\x31\x61\x31\x32\x32\x61\x31\x32\x33\x61\x31\x32\x34\x61\x31\x32\x35\x61\x31\x32\x36\x61\x31\x32\x37\x61\x31"
+"\x32\x38\x61\x31\x32\x39\x61\x31\x33\x30\x61\x31\x33\x31\x61\x31\x33\x32\x61\x31\x33\x33\x61\x31\x33\x34\x61\x31\x33\x35\x61\x31"
+"\x33\x36\x61\x31\x33\x37\x61\x31\x33\x38\x61\x31\x33\x39\x61\x31\x34\x30\x61\x31\x34\x31\x61\x31\x34\x32\x61\x31\x34\x33\x61\x31"
+"\x34\x34\x61\x31\x34\x35\x61\x31\x34\x36\x61\x31\x34\x37\x61\x31\x34\x38\x61\x31\x34\x39\x61\x31\x35\x30\x61\x31\x35\x31\x61\x31"
+"\x35\x32\x61\x31\x35\x33\x61\x31\x35\x34\x61\x31\x35\x35\x61\x31\x35\x36\x61\x31\x35\x37\x61\x31\x35\x38\x61\x31\x35\x39\x61\x31"
+"\x36\x30\x61\x31\x36\x31\x61\x31\x36\x33\x61\x31\x36\x34\x61\x31\x39\x36\x61\x31\x36\x35\x61\x31\x39\x32\x61\x31\x36\x36\x61\x31"
+"\x36\x37\x61\x31\x36\x38\x61\x31\x36\x39\x61\x31\x37\x30\x61\x31\x37\x31\x61\x31\x37\x32\x61\x31\x37\x33\x61\x31\x36\x32\x61\x31"
+"\x37\x34\x61\x31\x37\x35\x61\x31\x37\x36\x61\x31\x37\x37\x61\x31\x37\x38\x61\x31\x37\x39\x61\x31\x39\x33\x61\x31\x38\x30\x61\x31"
+"\x39\x39\x61\x31\x38\x31\x61\x32\x30\x30\x61\x31\x38\x32\x61\x32\x30\x31\x61\x31\x38\x33\x61\x31\x38\x34\x61\x31\x39\x37\x61\x31"
+"\x38\x35\x61\x31\x39\x34\x61\x31\x39\x38\x61\x31\x38\x36\x61\x31\x39\x35\x61\x31\x38\x37\x61\x31\x38\x38\x61\x31\x38\x39\x61\x31"
+"\x39\x30\x61\x31\x39\x31\x32\x2e\x30\x30\x28\x55\x52\x57\x29\x2b\x2b\x2c\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x32\x30\x31\x33"
+"\x20\x62\x79\x20\x28\x55\x52\x57\x29\x2b\x2b\x20\x44\x65\x73\x69\x67\x6e\x20\x26\x20\x44\x65\x76\x65\x6c\x6f\x70\x6d\x65\x6e\x74"
+"\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x55\x52\x57\x29\x2b\x2b\x2c\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x32\x30\x31\x33"
+"\x20\x62\x79\x20\x28\x55\x52\x57\x29\x2b\x2b\x20\x44\x65\x73\x69\x67\x6e\x20\x26\x20\x44\x65\x76\x65\x6c\x6f\x70\x6d\x65\x6e\x74"
+"\x44\x69\x6e\x67\x62\x61\x74\x73\x00\x00\x01\x00\x01\x00\x01\x87\xc8\x01\x04\x20\x5e\x80\x0d\xa1\x4e\xf1\x0d\x00\xcb\x02\x00\x01"
+"\x00\x04\x00\x07\x00\xba\x01\x6f\x02\x26\x03\xec\x04\xf2\x05\xf3\x06\x9c\x07\x66\x07\xcc\x08\x9f\x0a\x5d\x0c\x0f\x0d\xb9\x0e\x7b"
+"\x0f\x43\x10\x02\x10\xbf\x11\x71\x11\xc6\x12\x66\x12\x92\x12\xc6\x13\xe2\x15\x02\x15\x52\x15\x6f\x15\x9b\x15\xc7\x15\xe2\x16\x21"
+"\x16\x73\x16\xd9\x17\x54\x17\xe5\x18\x89\x19\x12\x1a\x02\x1a\x6a\x1a\xea\x1b\x12\x1b\x5d\x1b\x89\x1b\xc5\x1c\x49\x1c\xb7\x1d\x60"
+"\x1d\xc1\x1e\x1a\x1e\x5a\x1e\xac\x1e\xf9\x1f\xa1\x20\x4c\x20\xd0\x21\x84\x21\xc1\x22\x16\x22\xa3\x23\x64\x24\xca\x25\xe4\x27\x1e"
+"\x28\x15\x29\x99\x2c\x26\x2c\xeb\x2e\x13\x2e\xbd\x2f\xff\x30\xa1\x31\xe3\x33\x14\x33\xca\x34\xd1\x35\xdc\x36\x04\x36\x60\x36\x6c"
+"\x36\x88\x36\xa3\x36\xc3\x36\xe5\x36\xf3\x37\x01\x37\x13\x37\x5c\x37\x7b\x37\x86\x37\x94\x37\xa2\x37\xe9\x38\x2d\x38\x86\x38\xdd"
+"\x39\x1d\x39\x58\x39\x83\x39\xae\x39\xc5\x39\xdb\x39\xf5\x3a\x10\x3a\x28\x3a\x40\x3a\x5d\x3a\x7b\x3a\xe4\x3b\x4a\x3b\xe7\x3c\x41"
+"\x3c\x9f\x3c\xf3\x3d\x57\x3e\x64\x3f\x37\x3f\xa9\x3f\xd3\x40\x1a\x40\x6a\x40\xa3\x41\x06\x41\x96\x41\xf9\x42\x68\x42\xdc\x43\x3e"
+"\x43\x9e\x44\x11\x44\x7e\x44\xc0\x45\x30\x45\xbd\x45\xf9\x46\x63\x46\xde\x47\x35\x47\x99\x48\x04\x48\x93\x48\xac\x48\xf7\x49\x67"
+"\x49\x90\x49\xd0\x4a\x32\x4a\x5a\x4a\xc4\x4b\x29\x4b\x88\x4b\x9d\x4b\xed\x4c\x61\x4c\x8d\x4c\xeb\x4d\x58\x4d\x81\x4d\xde\x4e\x44"
+"\x4e\x95\x4e\xb9\x4e\xd6\x4f\x0e\x4f\x4d\x4f\x69\x4f\x84\x4f\xa0\x4f\xd4\x50\x25\x50\x3d\x50\x56\x50\x89\x50\xcd\x50\xe4\x51\x04"
+"\x51\x23\x51\x36\x51\x6a\x51\x9b\x51\xb3\x51\xd9\x52\x0b\x52\x3d\x52\x78\x52\xb1\x52\xe0\x53\x13\x53\x4c\x53\x82\x53\xce\x54\x66"
+"\x54\xc8\x55\x26\x55\x8b\x56\x00\x56\x52\x56\xbc\x57\x36\x57\xad\x58\x49\x58\xf0\x59\x49\xfc\xc5\x0e\xfc\xc5\x0e\xf7\x1b\xf8\xfd"
+"\xf7\x0c\x15\x2b\xf7\x02\xf8\x36\xc2\x05\xb4\x42\x4a\x9f\x4b\x1b\x7e\x79\x8a\x8a\x7a\x1f\xfb\x9d\x7c\x5d\xb7\x69\xa4\x6d\x97\x19"
+"\x49\xa4\x8a\x8c\x95\x1a\x8e\x8c\x90\x8d\x8f\x1e\x99\xa6\x8d\x93\x9b\x1a\xc4\x54\xbe\x4e\x5d\x66\x67\x5d\x59\xb3\x62\xcb\x7b\x1e"
+"\xee\x79\xc8\x65\xb4\x45\x08\x68\x69\x57\x71\x67\x1b\x7b\x73\x8f\x92\x6f\x1f\x90\x74\x75\x8f\x7a\x1b\x5d\x64\x65\x5d\x52\xc0\x5a"
+"\xc7\xc1\xb1\xaf\xbe\x91\x8a\x91\x8a\x90\x1f\x88\x99\x89\x94\x8e\x1a\x93\x93\x91\x97\x1e\xbc\x8a\x05\x97\xcc\x91\x91\xb8\x1f\xf0"
+"\xfb\x06\x05\xfc\x09\xf8\x71\x15\xb5\xb5\x65\x65\x6b\x75\x74\x70\x5e\x5d\xb1\xb1\xa9\xa5\xa4\xa9\x1f\x73\xfb\xf8\x15\xba\xaf\x6b"
+"\x61\x69\x70\x70\x68\x5f\x62\xb1\xb3\xab\xa7\xa4\xaf\x1f\x0e\xf7\x0e\xf8\xb9\xf7\xef\x15\xf8\x0d\xf7\x25\x05\xab\x68\x76\x94\x67"
+"\x1b\x70\x68\x84\x7c\x64\x1f\xfb\xcc\xfb\x0a\x05\xa2\x59\x3e\xa2\x70\x1b\x6f\x8d\x81\x90\x96\x1a\x8e\x8d\x91\x8e\x92\x1e\x91\x99"
+"\x8f\x9c\x99\x1a\xbe\x5d\xb4\x50\x4e\x60\x63\x51\x4f\xbe\x62\xd5\x1e\xd1\x8d\x05\xc8\xb7\x74\x60\x9e\x1f\x63\x7d\x5b\x70\x50\x1b"
+"\x47\x8c\x05\x40\x57\x5f\x4d\x53\xb5\x65\xc8\xc8\xb7\xb3\xc1\x97\x89\x96\x87\x94\x1f\x81\xa2\x8b\x8b\x90\x1a\x95\x93\x90\x9b\x8d"
+"\x1e\xcc\x94\x92\x8d\xea\xb1\xf7\xc9\xfb\x06\x18\x7d\xb3\xa9\x85\xab\x1b\xb5\xa4\x95\xa8\xa7\x1f\xfd\xa9\xf8\x08\x15\xb5\xab\x6e"
+"\x63\x64\x70\x70\x64\x5f\x69\xaa\xb2\xb1\xa8\xa6\xb4\x1f\x94\xfb\xdd\x15\xb2\xa6\x70\x65\x60\x6e\x6f\x5d\x64\x6f\xa5\xaf\xb2\xae"
+"\xae\xb4\x1f\x0e\xf7\x1b\xf8\xfd\xf8\xcb\x15\x2f\x93\x26\xfb\x06\x05\x91\x5e\x4c\x91\x7d\x1b\x5b\x8a\x05\x7e\x83\x90\x94\x8e\x8d"
+"\x94\x8e\x99\x1f\x8c\x90\x8c\x90\x91\x1a\xbe\x65\xaf\x55\x4f\x56\x5a\x52\x5d\xb1\x65\xba\x9b\xa2\x8f\x90\xa2\x1e\x92\xa7\xa3\x8f"
+"\x9b\x1b\xaf\xbf\x72\x68\xad\x1f\x75\x5d\x44\x53\x56\x7f\x3f\x79\x8b\x8b\x7c\x84\x08\x61\x77\x71\x66\x65\x1a\x5d\xb0\x67\xb9\xc8"
+"\xc2\xbe\xc4\x9b\x88\x94\x7e\xa5\x1e\x89\x90\x8a\x8f\x8e\x1a\x95\x8d\x8d\xcc\xa4\x1e\xa9\x96\xac\xa3\xba\xb9\xf7\x9d\x7c\x18\x8a"
+"\x9c\x9f\x8a\x96\x1b\xcb\xcb\x9e\xb5\xd5\x1f\xfc\x36\xc1\x05\xfb\xe2\xfb\x77\x15\xa6\xa1\x73\x6c\x64\x61\x65\x60\x6d\x72\xa5\xa9"
+"\xb1\xb9\xb1\xb8\x1f\x62\xf7\xfa\x15\xb1\xa6\x72\x67\x62\x67\x6b\x5c\x67\x6f\xa4\xab\xb3\xb2\xb0\xb6\x1f\x0e\xf7\x21\xf7\x4a\xf7"
+"\x7a\x15\x59\x63\x64\x5a\x59\xb2\x63\xbd\xbc\xb3\xb3\xbc\xbc\x63\xb3\x5b\x1f\x91\x72\x15\xab\xa5\x6e\x67\x67\x71\x6f\x6a\x68\x6e"
+"\xa8\xaf\xae\xa8\xa8\xaf\x1f\x84\xf8\x46\x15\x59\x63\x63\x5b\x59\xb2\x63\xbc\xbd\xb2\xb3\xbc\xbb\x64\xb4\x5b\x1f\x8e\x72\x15\xab"
+"\xa5\x6f\x68\x68\x71\x6f\x6a\x69\x6f\xa8\xad\xae\xa8\xa7\xad\x1f\xf7\xb2\xfb\x69\x15\x72\x77\x75\x6d\x6e\x9e\x74\xa4\xa4\xa0\xa4"
+"\xa8\xa7\x77\xa1\x72\x1f\x8d\x78\x15\x98\x96\x7f\x7b\x79\x7f\x7c\x7d\x7c\x81\x98\x9c\x9d\x97\x98\x9a\x1f\xf8\x6d\xf7\x2d\x15\xc0"
+"\x5a\x65\x9d\x53\x1b\x58\x52\x79\x65\x4a\x1f\xfb\x36\x2c\x05\x9f\x74\x7d\x92\x7c\x1b\x87\x85\x8a\x89\x84\x1f\x83\x6b\x7b\x89\x76"
+"\x1b\x7e\x85\x8c\x8f\x81\x1f\xa0\xab\x94\xa3\xa7\x1a\xd4\x49\xc7\x39\x33\x50\x50\x33\x58\x9f\x60\xb0\x70\x1e\xaa\x75\xb4\x80\xd0"
+"\x88\xc7\x88\x94\x89\x9b\x84\x08\x97\x85\x93\x7f\x7e\x1a\x71\x71\x7d\x59\x89\x1e\x2e\x89\x6d\x85\x66\x74\x08\x61\x71\x75\x61\x54"
+"\x1a\x32\xc5\x50\xe3\xe0\xc7\xc3\xd8\xaa\x83\xa3\x76\xac\x1e\x8e\x9c\x93\x8d\x94\x1b\x96\x9d\x88\x88\x9f\x1f\x89\x93\x93\x8a\x91"
+"\x1b\x91\x8f\x8c\x8e\x8f\x1f\xbb\xa9\xf7\x53\xfb\x13\x05\x6f\xb6\xc5\x77\xb2\x1b\xc3\xc2\xa2\xb1\xac\x1f\xfb\xd6\xf7\x60\x05\xfb"
+"\x58\x35\x15\x87\x85\x84\x8a\x84\x1b\x45\x8d\x05\x6b\x69\x7b\x7c\x87\x8c\x86\x8e\x88\x1f\x9e\x74\x91\x7b\x6f\x1a\x46\x5b\x5a\x47"
+"\x43\x5c\xbb\xd5\xdd\xbe\xb9\xe7\x1e\xc4\x06\xd0\xa8\xa0\xbb\x8c\x8b\x8e\x8a\x8d\x1f\xf7\xb9\xf7\x3f\xc2\xab\x8b\x8b\x96\x90\x19"
+"\x9c\xb0\xa9\x94\xa6\x1b\xaf\xa6\x7f\x6d\xae\x1f\xfc\x37\xfb\xa9\x15\xf2\xca\xf7\xc5\xfb\x56\x05\x70\x68\x71\x80\x6b\x1b\x5e\x62"
+"\x9c\xbb\x42\x1f\xfb\xc0\xf7\x75\x15\x7e\x9e\x6d\x97\x64\x8c\x08\x48\x06\x37\x54\xbd\xd8\xd3\xbb\xbe\xcf\xd0\xbe\x5b\x4a\x76\x86"
+"\x77\x82\x7e\x1f\x7c\x74\x8b\x8b\x85\x1a\x7a\xa4\x82\xb9\x99\x96\x8c\x8d\x90\x1e\x95\xad\x8b\x8b\x96\x1b\x98\x92\x87\x7d\x94\x1f"
+"\x0e\xfb\x0c\xf7\x37\xf7\x1e\x15\xf8\x1c\x06\x98\x8c\x8c\x8b\x8c\x8c\x8e\x8c\x8e\xa2\x8c\xaf\x5a\xf7\x21\x7d\xab\x78\x9e\x08\x6d"
+"\xad\x8b\x8b\x99\x1a\x96\x8b\x92\x8d\x97\x1e\xac\x84\x97\x81\x95\x71\x08\x85\xa9\xa6\x88\xbb\x1b\xa6\x94\x8c\x8f\x9f\x1f\x87\xbc"
+"\x82\xa4\x78\x99\x08\xa9\x66\xfb\x1b\xa4\xfb\x0c\x1b\xfb\x0d\xfb\x1a\x72\x6d\x65\x1f\x79\x7d\x82\x72\x86\x5a\x08\x87\xa0\x93\x8a"
+"\xa7\x1b\xba\xa7\x8e\x91\xa9\x1f\x95\xa5\x97\x95\xab\x92\x08\x8d\x7f\x8c\x84\x80\x1a\x7e\x8a\x8a\x81\x80\x1e\x84\x82\x83\x83\x83"
+"\x82\x81\x7f\x8a\x89\x87\x83\x68\x35\x88\x85\x71\x40\x8d\x5c\x8d\x7e\x92\x8a\x08\xf7\x08\xf7\xe1\x15\x93\xcd\x8c\x8b\xa4\x1b\xa5"
+"\x8b\x8b\x83\xcd\x1f\x7a\x62\x05\x8d\x62\x7a\x8c\x7a\x1b\x7b\x79\x8a\x89\x62\x1f\xd9\x6d\x15\xbf\xb6\x5f\x57\x55\x60\x60\x55\x56"
+"\x5f\xb6\xc1\xc1\xb7\xb5\xc2\x1f\xf7\xd7\x92\x15\x86\x75\x7d\x89\x66\x1b\x6c\x7c\x8c\x91\x64\x1f\x70\x92\x97\x87\xde\x1b\xb6\x8e"
+"\x8d\xa8\x95\x1f\xfd\x1f\x16\x6f\x96\x90\x88\xae\x1b\xb3\xac\x8d\x8f\x98\x1f\x98\x8e\x8e\x8f\x91\x9d\x08\x86\x67\x6b\x89\x63\x1b"
+"\x71\x85\x8c\x91\x78\x1f\x0e\x59\xf7\x2d\xf7\x17\x15\x51\xce\x70\xd0\xdb\x1a\xf7\x45\xf7\x28\xf7\x26\xf7\x46\xf7\x48\xf7\x29\xfb"
+"\x26\xfb\x45\xfb\x4a\xfb\x2d\xfb\x25\xfb\x53\x2e\x48\xb3\xc2\x9a\x91\x98\x91\x8c\x8e\x8a\x8a\x8d\x1e\x88\x90\x94\x88\x91\x1b\xa5"
+"\xc3\xd3\xae\x90\x89\x8e\x87\x8f\x1f\x7d\x98\x88\x92\x96\x1a\xa9\xbc\xf4\xa8\xaa\x1e\x9a\x9b\x91\x8e\xa1\x8e\x96\x8d\x8f\x8d\x90"
+"\x92\x08\x9f\xa5\x97\xb3\xb4\x1a\x99\x83\x8f\x6e\x62\x84\x88\x63\x69\x1e\x2f\x23\x41\xfb\x3c\x25\x1a\x82\x8c\x84\x8e\x88\x1e\x92"
+"\x84\x8c\x89\x89\x1a\x89\x89\x89\x89\x88\x1e\x7f\x7b\x86\x7d\x78\x1a\x47\xdc\x58\xf7\x01\xf7\x63\xf7\x37\xf7\x32\xf7\x5c\xf7\x5a"
+"\xfb\x37\xf7\x38\xfb\x5a\xfb\x57\xfb\x38\xfb\x36\xfb\x54\x37\xb1\x2a\xbc\x61\x1e\x85\x92\x94\x88\x93\x1b\x8e\x8f\x8b\x8e\x92\x1f"
+"\xf7\xf3\xf8\x68\x15\x87\x53\x7f\x69\x71\x68\x08\x86\x98\x97\x89\x9a\x1b\x9a\x8c\x8c\x9c\x95\x1f\x9a\xa6\x91\x9f\xa6\x1a\x95\x8a"
+"\x8c\x84\x92\x1e\x7e\x97\x81\x90\x7d\x90\x08\xfb\x2f\xfb\xf9\x15\x7b\x54\x74\x6a\x64\x74\x08\x80\x9b\xa0\x82\x94\x1b\xa2\xb8\xc8"
+"\xa9\x93\x86\x91\x75\x9d\x1f\x0e\x5a\xf8\xfd\xf7\x26\x15\x99\x95\xae\xc2\x90\xa0\xfb\x25\xf7\x09\x18\x58\x6f\x5e\x5f\x76\x1e\xfb"
+"\xe6\x98\x15\x96\x6c\xa3\x62\x9c\x7a\xf7\x3a\xd7\x18\x5d\xa6\x75\xb2\xc4\x1a\xf7\x43\xf7\xb0\x15\x90\x7c\x81\x8c\x76\x1b\x76\x7c"
+"\x89\x87\x7d\x1f\x76\xfb\x4d\x05\x9a\xa4\xa1\x92\xa6\x1b\xa8\xa0\x84\x7c\xa0\x1f\x43\x84\x15\x52\x5e\x5e\x53\x53\xb8\x5e\xc3\xc3"
+"\xb8\xb8\xc3\xc2\x5e\xb9\x54\x1f\x8f\xf7\x97\x15\xfb\x5f\xfb\x37\x26\x0a\xfb\x5e\xf7\x34\xfb\x35\xf7\x5c\xf7\x5b\xf7\x35\xf7\x35"
+"\xf7\x5b\xf7\x58\x25\x0a\x71\x04\xd7\xde\x6a\x56\xc5\x1f\xd4\x49\xb1\x35\x2b\x1a\xfb\x4c\xfb\x2a\xfb\x2a\xfb\x4c\xfb\x4e\xfb\x28"
+"\xf7\x29\xf7\x50\xdb\xaa\xdb\xc2\xc7\x1e\xd5\xce\xe0\xb0\xf1\x1b\x0e\x5b\xae\xf7\xef\x15\xae\x7e\x6a\xfb\x0b\xbe\x92\xd5\xee\x05"
+"\x86\xb9\xde\x84\x91\x1b\xc3\x8a\x8b\x8b\x94\x87\x08\x94\x87\x90\x83\x80\x1a\x81\x8a\x87\x75\x38\x1e\x34\xfb\x59\x05\xb0\x06\x9f"
+"\x8c\x8f\x8d\x9c\xa4\xb2\xc1\x18\xc8\x06\x91\x90\x93\x94\x93\x86\x94\x85\x1f\x6a\x06\xbc\xd0\x05\xc7\x06\x91\x91\x93\x93\x94\x85"
+"\x94\x84\x1f\x6c\x06\xd5\xee\x93\x8c\x8b\x8b\xb6\x8d\x19\xb1\x8c\x97\x8c\xa6\x8e\x08\xbb\x91\xa2\x96\x9d\x1a\x9e\x5f\x97\x3f\x8f"
+"\x1e\x45\x8d\x82\x8c\x41\xef\x05\xaa\x06\x92\x91\x93\x94\x94\x85\x93\x85\x1f\x4f\x06\x5a\xd0\x05\xac\x06\x91\x90\x93\x94\x93\x86"
+"\x93\x85\x1f\x4e\x06\x64\xc2\x7a\xa3\x87\x8e\x77\x8c\x19\x66\x06\xe2\xfb\x59\x05\xa0\x3b\x8d\x83\x81\x1a\x7a\x7f\x82\x71\x8a\x1e"
+"\x62\x8a\x05\x81\x76\x89\x88\x6b\x1f\x77\x89\x77\x89\x77\x8a\x7f\x89\x18\x41\xee\x58\x93\xac\xfb\x0b\x05\x0e\xfb\x29\xf9\x23\xf8"
+"\xc0\x15\xfd\x00\xfc\x37\xf9\x00\x06\xfc\xed\xf8\x0e\x15\xf7\x64\xfb\x36\x05\x85\x07\x85\x07\xfb\x64\xfb\x36\x05\xf8\xda\x74\x15"
+"\xfc\xda\x06\xf7\x64\xf7\x36\x05\x67\x9b\xa8\x78\xb1\x1b\xb1\xa8\x9e\xaf\x9b\x1f\xf7\x64\xf7\x59\x15\xfb\xe4\x07\xfb\x64\xf7\x36"
+"\x05\x91\x07\x91\x07\xf7\x64\xf7\x4c\x15\xfb\x64\xfb\x36\x05\xaf\x7b\x6e\x9e\x65\x1b\x65\x6e\x78\x67\x7b\x1f\xfb\x64\xf7\x36\x05"
+"\x0e\xf7\x0d\xf9\x2a\xf8\x3c\x15\xa0\xb3\x85\x83\xad\x1f\x82\xb2\x93\x89\x9e\x1b\xa2\xaf\x90\x8f\x9c\x1f\x9d\x90\x93\x92\x96\x1a"
+"\x98\x7f\x97\x6e\x9a\x1e\x66\x9e\xfb\x00\xb3\x5b\x97\x08\x96\x5d\xfb\x19\x9a\x58\x1b\x73\x7e\x88\x80\x71\x1f\x5d\x78\x5c\x74\x6c"
+"\x7a\x6e\x7b\x84\x89\x67\x88\x5b\x87\x8a\x8b\x80\x82\x08\x74\x79\x7b\x55\x50\x1a\x5b\x97\x54\x9b\x72\x1e\x8f\x84\x8b\x8b\xba\x82"
+"\xa1\x88\x97\x8a\x9c\x89\x9f\x89\x8d\x8b\x91\x89\x90\x89\x90\x88\x95\x85\x08\x61\xd7\x8d\x8a\xb5\x1b\xad\xcf\x94\x99\xc7\x1f\xb0"
+"\x93\x9c\x9a\xa6\x1a\x93\x8a\x92\x8a\x94\x1e\xaa\x95\x95\x95\xa3\x1a\x9d\x87\x95\x7c\x9b\x1e\xae\x99\x9c\x9c\xa1\x1a\xa0\x83\x95"
+"\x66\xac\x1e\xfc\x8b\xd1\x15\x97\x83\x86\x8f\x82\x1b\x5c\x66\x36\xfb\x00\x21\xa9\x4a\xbb\x96\x93\x8e\x96\x94\x1f\x8a\x88\x89\x8b"
+"\x8a\x1b\x5b\x6f\xc5\xef\xd2\x9c\xcd\xa3\xa4\x1f\x97\x97\x92\x8d\xa1\x8c\x08\x0e\xef\xae\xf8\x8f\x15\xfb\xee\x07\xf5\x7e\x96\xa4"
+"\x05\xde\xbc\x06\xa2\x8a\xa0\x88\x91\x88\x92\x89\x9b\x83\xa4\x7d\x08\x72\xb9\xa2\x86\xc8\x1b\xb5\x06\x95\x06\x78\x98\x9e\x82\xa9"
+"\x1b\xd4\xd1\xb3\xb4\x99\x85\x97\x78\xa1\x1f\x93\x95\x8c\x90\x97\x1a\xa3\x82\x9c\x73\x9a\x1e\x90\x96\x8d\x91\x91\x1a\x97\x86\x94"
+"\x7e\x9a\x1e\xa9\xea\x90\x8f\xa8\x1f\xc8\x91\xa8\x9d\xaa\x1a\xa0\x78\xa0\x6b\x98\x1e\x99\x68\xfb\x02\x94\xfb\x15\x1b\x70\x79\x8a"
+"\x87\x69\x1f\x98\x78\x7b\x90\x76\x1b\x6c\x6d\x80\x6d\x5d\x1f\x71\x61\x76\x82\x72\x1b\x86\x89\x8b\x8c\x84\x1f\xad\x07\x2b\x69\x15"
+"\xca\xfb\xa4\x56\x06\xe1\xf7\x81\x15\xae\x8c\x96\x8f\xa9\x9d\xbf\xac\x8b\x8b\x9a\x93\x08\x97\xa5\xa0\x92\x99\x1b\xa0\xa2\x81\x7c"
+"\x9a\x1f\xd2\x44\x05\x97\x7e\x93\x7d\x81\x1a\x7b\x78\x7d\x76\x75\x7d\x92\xa4\x6e\x1e\x51\xbc\x7f\x7d\xb5\x55\x05\x70\x73\x6c\x7d"
+"\x6a\x1b\x7f\x77\x8e\x90\x75\x1f\x7e\x8e\x83\x7c\xce\x74\x05\xc1\x06\x99\x5d\x94\x81\xae\x85\x8c\x69\x95\x7c\xa4\x86\x08\x7e\x07"
+"\x8a\x75\x82\x8b\x7f\x1b\x56\x62\x94\x9f\x6b\x1f\x84\x90\x83\x90\x83\x90\x7d\x93\x80\x91\x84\x8e\x7d\x8f\x80\x8d\x73\x8c\x08\xf7"
+"\xbf\xf7\x9d\x15\x8e\xb4\x9f\x8c\xa3\x1b\xde\xf3\x83\x83\xa5\x1f\xa5\x83\x98\x7f\x7d\x1a\x82\x85\x82\x82\x87\x1e\x83\x77\x29\x85"
+"\x2b\x1b\x86\x7e\x8b\x8c\x78\x1f\xa3\x62\x15\x98\x82\x8f\x85\x82\x1a\x79\x7e\x7e\x66\x7b\x1e\x73\x58\x59\x79\x7c\x1b\x77\x79\x9b"
+"\x9d\xa0\xa6\xa7\xa0\x8d\x8f\x8a\x89\x90\x1f\x85\x9b\x99\x89\x9a\x1b\xaa\xa5\x96\xa4\xa1\x1f\x8d\x8e\x8b\x8b\x8d\x8d\x08\x9f\x3f"
+"\x15\x96\x97\x7e\x7e\x77\x78\x76\x6f\x80\x1f\x7e\x6b\x61\x80\x76\x1b\x7c\x7e\x96\x99\x99\x90\x8f\xa7\x93\x1f\x90\x8c\x96\x90\x9a"
+"\x92\x08\xb1\xd9\x8b\x8b\x90\x1b\x4c\xfb\x06\x15\x8e\x97\x94\x8d\x8c\x1b\xa3\x96\x9a\x92\x97\x91\x08\x8e\x8f\x8e\x8c\x8c\x1b\x93"
+"\x96\x79\x7f\x74\x4d\x6d\x5b\x73\x79\x97\x9b\x93\x8d\x8d\x9a\x8e\x1f\x0e\xfb\xb6\xf7\xcc\xf8\x55\x15\x7f\xa8\x84\xa0\x7c\xb6\x08"
+"\xf7\x0f\x62\x72\xb4\x69\x1b\x6c\x6e\x6e\x6b\x76\x9d\x49\x9e\x56\x1f\xa9\x3a\x8c\x88\x90\x78\x08\x91\x7c\x7f\x8f\x83\x1b\x6d\x63"
+"\x63\x6e\x7d\x8e\x79\x90\x77\x1f\x67\x6e\x6d\x64\x5f\xa0\x50\xab\x5c\x1f\x56\xb0\xc9\x6e\xdb\x1b\xd9\xde\xb5\xc7\xb7\x1f\xa9\xb5"
+"\x9f\xcf\xc6\x1a\xb3\x85\xae\x7e\xa9\x1e\x84\x9d\x84\x90\x72\x91\x88\x8c\x81\x8e\x81\x8e\x08\xc0\xf7\x2a\x97\xb4\xb1\x1a\xac\x74"
+"\xa6\x70\x81\x80\x87\x83\x82\x1e\x71\x76\x7e\x73\x71\x42\x85\x7c\x79\x5c\x78\x59\x08\xfb\x7e\xfb\x8e\x15\x74\x07\x98\x73\x98\x77"
+"\x95\x82\x08\x7a\x9e\xa6\x7e\x9d\x1b\x94\x9a\x91\x92\x94\x1f\x95\x93\x8f\x93\x9b\x1a\x8f\x8b\x92\x8a\x92\x1e\xa1\x06\x90\x5a\x90"
+"\x80\xab\x6c\x95\x94\x18\x8a\x90\x8a\x90\x8a\x8d\x08\x83\xa9\x86\x9f\x92\x1a\xa0\xa8\xbc\xa8\xa7\x1e\xa4\xa5\x9c\x93\xb1\x92\x08"
+"\xa6\x07\x76\x8b\x8b\x86\x5b\x1f\x81\x8a\x55\x99\x7c\x92\x08\x79\x94\x7b\xa2\x9b\x1a\x92\x8e\x96\x90\x97\x1e\xa7\x82\x8b\x8b\xb0"
+"\x85\xf7\x15\x75\x8b\x8b\x8f\x89\x08\xa8\x7d\x97\x72\x5a\x1a\xfb\x26\x2c\x25\xfb\x1c\x5b\x5b\x98\xa0\x73\x1e\x7e\x96\x69\xc0\x85"
+"\x9b\x08\x74\xd3\x8b\x8b\x90\x1a\x9d\xa5\xa5\x9d\x9b\x8f\x86\x57\xae\x1e\xb0\x54\x8b\x8b\x86\x1a\x81\x79\x7f\x7e\x75\x60\xb6\xac"
+"\x7f\x1e\xf7\x59\xf7\x76\x15\x8e\x7c\x80\x8c\x83\x1b\x85\x80\x89\x89\x7e\x1f\x86\x94\x8b\x8b\x7d\xb2\x08\x61\xf7\x07\x84\xa1\xac"
+"\x1a\x9a\x95\x97\x97\x97\x93\x84\x7a\x94\x1e\x97\x73\xb4\xfb\x04\xa7\x36\x08\xc4\x16\xf7\x71\xd7\x91\x98\xa3\x1b\x96\x95\x7f\x7d"
+"\x76\x65\xfb\x14\x6e\x44\x1f\xfb\x8f\x63\x15\xa0\x87\x93\x85\x94\x7d\x08\xb3\x4d\xaa\x4d\x7c\x1a\x81\x80\x80\x7f\x80\x7a\x96\x9a"
+"\x7d\x1e\x65\xb5\x67\xc7\x9f\x1a\x95\x90\x92\x9c\x98\x1e\x8f\x8e\x8b\x8c\x8f\x8d\x08\xf7\x1d\xfb\x1e\x15\x74\xc2\xa5\x83\x96\x89"
+"\xaa\x87\x19\x0e\x9b\xdd\xf7\x5e\x15\x98\x7a\x53\xfb\x03\x05\x88\x85\x89\x87\x8a\x1a\x89\x8e\x89\x8d\x8d\x8e\x8c\x8d\x90\x1e\xe3"
+"\xab\xbf\xc3\x05\x7b\xc7\xa6\x86\xae\x1b\x9e\xad\x8e\x91\xd4\x1f\xf3\x80\xe7\xa2\x99\x53\x05\xf7\x2a\x06\xa2\xf7\x22\x05\xf2\x07"
+"\x74\xd2\xfb\x2a\x94\x7d\x77\x6d\x8c\x80\x8f\x74\x9a\x19\x2f\xc6\xd5\xdf\x05\x90\x91\x8d\x8f\x92\x1a\xa6\x77\xa4\x75\x83\x82\x88"
+"\x86\x87\x1e\x35\x2b\x4f\xae\x4a\x6e\x65\x6f\x30\x35\x19\x74\x48\x87\x7d\x80\x5d\x08\xf8\xa2\xe1\x15\x96\x57\x8e\x72\x6b\x1a\x72"
+"\x89\x75\x83\x5e\x1e\x79\x4f\x71\x86\x71\x1b\x78\x81\x8c\x95\x50\x1f\x6f\x87\x74\x88\x7d\x88\x08\x86\x73\x78\x88\x80\x1b\x81\x62"
+"\x92\x8d\x85\x1f\x89\x8c\x89\x8d\x8c\x1a\x8c\x8d\x8c\x8d\x8d\x8c\x08\x97\x95\x8f\x91\x96\x1a\x9f\x7a\x9e\x78\x89\x8a\x8a\x8a\x8b"
+"\x8b\x8a\x8c\x8a\x1e\x94\x80\x90\x7c\x7f\x1a\x7c\x85\x81\x83\x1e\x7d\x8c\x05\x77\x06\x7d\x82\x94\x98\x9f\x96\x9d\x9b\x93\x1f\xa7"
+"\x98\x9f\x98\x8d\x8b\xa1\x8c\x19\xf7\x10\x06\xa1\x9e\x8f\x90\x91\x9c\x08\x7a\x62\x76\x84\x77\x1b\x7d\x8c\xba\xc0\x8c\x94\x8c\x93"
+"\x8c\x8f\x19\x8c\x93\x8c\x90\x8e\x1a\x8e\x89\x91\x88\x95\x1e\xc7\xd1\xf7\x0c\x45\x05\xfb\xef\x4e\x15\x71\x49\x85\x7c\x78\x75\x72"
+"\x76\x19\x79\x06\xa6\xc5\x82\xa6\x79\x95\xa6\xe5\x8f\x97\x8c\x8c\xa0\x9e\x19\xd6\xcd\x05\x9f\xa1\xc0\xaa\x96\x1b\x93\x94\x85\x74"
+"\xa9\x1f\xfb\xcd\xfc\x3c\x15\x8a\x88\x88\x8b\x88\x1b\x84\x85\x90\x92\x8e\x8d\x94\x8d\x8e\x1f\x9a\xa5\x05\x9c\x95\x8b\x8b\x90\x1b"
+"\x94\xa1\x6c\x7d\x85\x87\x87\x83\x88\x1f\xa0\xf7\x55\x15\x92\x84\x8d\x86\x7f\x1a\x67\x7c\x71\x77\x88\x86\x8b\x8c\x86\x1e\xf7\xb0"
+"\xf7\x3c\x15\x5e\x6e\x59\x71\x84\x83\x8c\x8d\x82\x1e\xf8\x5b\xf7\x01\x15\x9c\x61\x92\x68\x52\x1a\x5a\x86\x6b\x7f\x5e\x1e\x21\x82"
+"\x05\x9b\xc2\x92\xbb\xbe\x1a\xa7\x89\x99\x81\xd4\x1e\x0e\xd3\xf7\x56\xf8\xbe\x15\x6a\x64\x58\x61\x78\x9a\x7a\x9b\xaa\xb1\xbe\xb6"
+"\x9e\x7e\x9b\x7c\x1f\xd2\xe2\x15\xfb\x29\x72\x3a\xfb\x1c\xb4\xfb\x2e\xf8\x46\xfb\x99\x9b\x82\x93\x88\xa8\x89\x19\xf7\xa9\x06\xa3"
+"\x97\x93\x9b\x91\x89\x8f\x86\x95\x1f\xfb\x23\xf7\x8f\x80\x9f\x86\x90\x7b\x94\x19\x81\x91\x05\xfc\x3f\xf7\x7a\x15\xad\xfb\x0b\x42"
+"\xfb\x0f\xfb\x0d\x71\x6a\xf7\x16\xd0\xf7\x07\x05\xf9\x29\xfc\x33\x15\xa1\x6a\x8b\x8a\x82\x1a\x7f\x7d\x72\x7d\x7f\x1e\x84\x84\x7d"
+"\x87\x7c\x1b\xfb\x49\x06\xe9\xca\xb3\xd0\x93\xf7\x01\x08\xfc\x3b\xf7\xaf\x15\xf8\x1e\xfb\x84\x05\x8e\x79\x8c\x83\x7d\x1a\x7d\x8a"
+"\x81\x88\x77\x1e\xfc\x02\xf7\x6f\x05\x7f\x77\x15\xf8\x05\xfb\x73\x87\x70\x67\x4f\x74\x79\x19\xfc\x05\xf7\x73\x05\x7f\x77\x15\xf8"
+"\x01\xfb\x70\x7b\x78\x6a\x6e\x7e\x85\x19\xfc\x32\xf7\x91\x05\x0e\xe9\xf7\x25\xf8\x3c\x15\x72\x7d\x6f\x59\x58\x98\x6f\xa5\xa4\x99"
+"\xa7\xbd\xbe\x7d\xa7\x72\x1f\x82\xfb\xaf\x15\xf8\x60\x06\x8c\x9e\x8c\x8b\x8e\x1b\x95\x8d\x8b\x8b\x99\x95\xf7\x75\xf7\x31\x18\xa9"
+"\x9f\x8c\x8d\x98\x1a\x97\x8a\x8d\x6d\x9f\x1e\xfb\x75\xf7\x31\x88\x8d\x88\x8d\x87\x8e\x19\x88\x8e\x86\x8c\x85\x8c\x08\x89\x83\x8b"
+"\x8c\x7e\x1f\xfc\x60\x06\x26\xfb\x0b\x05\xfb\x40\x07\xf7\x54\x94\x15\x39\x28\x39\xea\x05\xf7\x36\x07\xdd\xea\xdd\x29\x05\xf8\x38"
+"\xfb\x7b\x15\xa7\xc8\x97\xbb\xb8\x1a\xb7\x7f\xb9\x6f\xc9\x1e\xf7\x32\xfb\x01\x05\x92\x7a\x8d\x81\x7a\x1a\x7a\x89\x81\x84\x7b\x1e"
+"\xfb\x61\xf7\x6d\x15\x97\x79\x97\x6d\x96\x6b\x08\xfc\x14\x06\x49\xdb\x05\xd1\xfb\x85\x15\xf7\x17\xf8\x18\x07\x90\x79\x8d\x7c\x6a"
+"\x1a\x6b\x89\x7c\x86\x79\x1e\x88\x6c\x15\x7a\x60\x87\x80\x81\x75\x08\xfc\x42\x06\xcf\xd7\x05\x0e\xd3\xf7\x2d\xf7\x9c\x15\x7a\x7d"
+"\x7b\x78\x61\xb2\x58\xac\x9b\x97\x9b\x9e\xb6\x66\xbd\x6b\x1f\xf7\x04\xfb\x6a\x15\xf8\x37\xf7\x91\xa6\x9a\x8d\x8d\x98\xa2\x19\xf7"
+"\x22\xf7\x8d\x05\x91\x95\x8d\x90\x90\x1a\x9b\x7f\x93\x73\x1e\xfb\xa9\x06\x70\x89\x81\x88\x7b\x82\xfc\x46\xfb\x97\x18\x62\xfb\x2e"
+"\xdc\xfb\x1a\x05\xf7\x21\x8a\x15\xfb\x10\xa2\x46\xf7\x07\xac\xf7\x15\xf7\x0d\x71\xd4\xfb\x0f\x05\xf8\x3a\xf7\x49\x15\x83\xf7\x00"
+"\x63\xd0\x2d\xc9\x08\xf7\x49\x06\x97\x9b\x88\x87\x90\x1f\x9a\x7f\x9b\x70\x7e\x1a\x81\x8b\x8a\x75\x6b\x1e\xfc\x8c\xfc\x37\x15\xa7"
+"\xf3\xf8\x02\xf7\x6f\x05\x8e\x77\x8c\x81\x7d\x1a\x7d\x8a\x82\x88\x7a\x1e\xfc\x0e\xfb\x07\x15\x4c\xf4\xf8\x05\xf7\x71\xa2\x7a\xaf"
+"\x4f\x8e\x70\x19\xfc\x4f\x2a\x15\xfb\x03\xa0\xf8\x32\xf7\x8f\x98\x85\xab\x6f\x9b\x78\x19\x0e\xf5\xf7\x3b\xf8\x83\x15\x3e\x54\x4b"
+"\x31\x50\xa5\x5a\xb7\x70\x1f\x81\x9c\x95\x89\xa7\x1b\xf7\x33\x06\xb6\x97\xa3\xa2\xad\x1b\xa2\x9e\x7d\x69\xa0\x1f\x4e\xb2\x99\x7f"
+"\xb0\x1b\xb8\xc8\xa6\xce\xf7\x02\x1f\xce\xb4\xb4\xa9\xb6\xb2\x3f\xcb\x81\x92\x61\xa6\x08\xdc\xfb\x16\x4e\xa7\x5d\x1b\x66\x75\x7a"
+"\x60\x74\x1f\x5c\x74\x72\x75\x6e\x1b\x6c\x75\xa4\xbc\x7e\x1f\xf8\x35\xfb\x20\x15\x2b\x06\xba\x7f\x77\xa2\x6c\x1b\x65\x6c\x65\x5c"
+"\x5e\xa8\x66\xb0\xab\xa1\xa3\xbc\x97\x1f\xeb\x42\x06\x64\x58\x25\x5b\x6b\x1b\x70\x77\x99\xae\x76\x1f\xc4\x68\x77\x9a\x65\x1b\x60"
+"\x68\x72\x63\x7c\x1f\xfb\x1e\x06\x5b\x60\xc2\xc8\xcd\xb7\xc0\xc2\x1f\xf7\x16\x06\x5a\x9f\xa9\x73\xb4\x1b\xb0\xa1\x9d\xc2\xac\x1f"
+"\xb6\xa5\x9c\x98\xaa\x1b\xa1\x9b\x85\x72\xbb\x1f\xbb\x71\xa3\x7d\xa3\x7a\x08\x0e\xf7\x1b\xfa\x3e\xf7\xee\x15\x8c\x87\x8a\x8c\x87"
+"\x1b\x88\x8c\x8b\x8b\x84\x8d\x40\x9e\x5f\xaf\x42\xef\x08\xc5\x61\x69\xa2\x61\x1b\x5b\x5b\x62\x53\x7b\x1f\x7f\x5e\x8b\x8b\x86\x7e"
+"\x08\x6e\x80\x7e\x82\x6f\x1b\x73\x7e\x93\xa7\x7b\x1f\xc3\x6b\x8b\x8b\xfb\x37\x1b\x50\x79\x88\x7f\x77\x1f\x6c\x77\x7a\x5e\x4c\x1a"
+"\x4a\xa0\x5a\xae\x7b\x1e\x83\x9e\x99\x8a\xcc\x1b\xf7\x2c\x8b\x8b\xcb\xb3\x1f\xa0\x99\x94\x91\xa2\x1b\xac\x9a\x7c\x5d\x98\x1f\x9b"
+"\x51\x8b\x8b\x93\x7e\x08\x66\xa1\xb0\x75\xb2\x1b\xb6\xac\xa2\xc6\xb6\x1f\xd5\xf3\xb9\xaf\xe4\x9f\x08\xfb\x94\x9b\x15\xd2\x89\x05"
+"\xf2\x85\x93\x8a\x84\x1a\x84\x63\x86\x45\x89\x1e\x43\x89\x7f\x8a\x05\x68\x7d\x76\x78\x6e\x1b\x68\x70\xaa\xb2\xb2\xa7\xab\xad\xa7"

@@ Diff output truncated at 1234567 characters. @@


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