From 6b6a57de24d436e9b5f47fd031f5347de05e7e80 Mon Sep 17 00:00:00 2001 From: Peter Breitenlohner Date: Thu, 22 Dec 2011 12:05:55 +0000 Subject: dvisvgm 1.0.10 git-svn-id: svn://tug.org/texlive/trunk@24907 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/texk/dvisvgm/ChangeLog | 5 + Build/source/texk/dvisvgm/configure | 26 +- .../texk/dvisvgm/dvisvgm-1.0.10-PATCHES/TL-Changes | 20 + .../patch-03-texlive_gs_init | 13 + Build/source/texk/dvisvgm/dvisvgm-1.0.10/AUTHORS | 10 + Build/source/texk/dvisvgm/dvisvgm-1.0.10/COPYING | 674 ++ Build/source/texk/dvisvgm/dvisvgm-1.0.10/INSTALL | 229 + .../texk/dvisvgm/dvisvgm-1.0.10/LGPL-2.1.txt | 504 ++ .../source/texk/dvisvgm/dvisvgm-1.0.10/Makefile.am | 9 + .../source/texk/dvisvgm/dvisvgm-1.0.10/Makefile.in | 706 ++ Build/source/texk/dvisvgm/dvisvgm-1.0.10/NEWS | 235 + Build/source/texk/dvisvgm/dvisvgm-1.0.10/README | 112 + .../source/texk/dvisvgm/dvisvgm-1.0.10/aclocal.m4 | 1109 +++ .../source/texk/dvisvgm/dvisvgm-1.0.10/config.h.in | 166 + Build/source/texk/dvisvgm/dvisvgm-1.0.10/configure | 7789 ++++++++++++++++++++ .../texk/dvisvgm/dvisvgm-1.0.10/configure.ac | 157 + .../texk/dvisvgm/dvisvgm-1.0.10/doc/Makefile.am | 39 + .../texk/dvisvgm/dvisvgm-1.0.10/doc/Makefile.in | 456 ++ .../texk/dvisvgm/dvisvgm-1.0.10/doc/dvisvgm.1 | 927 +++ .../texk/dvisvgm/dvisvgm-1.0.10/doc/dvisvgm.txt.in | 567 ++ .../dvisvgm/dvisvgm-1.0.10/potracelib/Makefile.am | 13 + .../dvisvgm/dvisvgm-1.0.10/potracelib/Makefile.in | 458 ++ .../dvisvgm/dvisvgm-1.0.10/potracelib/auxiliary.h | 78 + .../dvisvgm/dvisvgm-1.0.10/potracelib/bitmap.h | 97 + .../texk/dvisvgm/dvisvgm-1.0.10/potracelib/curve.c | 108 + .../texk/dvisvgm/dvisvgm-1.0.10/potracelib/curve.h | 77 + .../dvisvgm/dvisvgm-1.0.10/potracelib/decompose.c | 514 ++ .../dvisvgm/dvisvgm-1.0.10/potracelib/decompose.h | 16 + .../texk/dvisvgm/dvisvgm-1.0.10/potracelib/lists.h | 285 + .../dvisvgm/dvisvgm-1.0.10/potracelib/potracelib.c | 114 + .../dvisvgm/dvisvgm-1.0.10/potracelib/potracelib.h | 139 + .../dvisvgm/dvisvgm-1.0.10/potracelib/progress.h | 79 + .../texk/dvisvgm/dvisvgm-1.0.10/potracelib/trace.c | 1245 ++++ .../texk/dvisvgm/dvisvgm-1.0.10/potracelib/trace.h | 15 + .../dvisvgm-1.0.10/src/BgColorSpecialHandler.cpp | 37 + .../dvisvgm-1.0.10/src/BgColorSpecialHandler.h | 34 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Bitmap.cpp | 124 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Bitmap.h | 109 + .../dvisvgm/dvisvgm-1.0.10/src/BoundingBox.cpp | 253 + .../texk/dvisvgm/dvisvgm-1.0.10/src/BoundingBox.h | 86 + .../texk/dvisvgm/dvisvgm-1.0.10/src/CRC32.cpp | 112 + .../source/texk/dvisvgm/dvisvgm-1.0.10/src/CRC32.h | 51 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Calculator.cpp | 178 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Calculator.h | 56 + .../dvisvgm-1.0.10/src/CmdLineParserBase.cpp | 309 + .../dvisvgm/dvisvgm-1.0.10/src/CmdLineParserBase.h | 96 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Color.cpp | 126 + .../source/texk/dvisvgm/dvisvgm-1.0.10/src/Color.h | 59 + .../dvisvgm-1.0.10/src/ColorSpecialHandler.cpp | 269 + .../dvisvgm-1.0.10/src/ColorSpecialHandler.h | 43 + .../dvisvgm/dvisvgm-1.0.10/src/CommandLine.cpp | 319 + .../texk/dvisvgm/dvisvgm-1.0.10/src/CommandLine.h | 151 + .../texk/dvisvgm/dvisvgm-1.0.10/src/DLLoader.cpp | 53 + .../texk/dvisvgm/dvisvgm-1.0.10/src/DLLoader.h | 52 + .../texk/dvisvgm/dvisvgm-1.0.10/src/DVIActions.cpp | 26 + .../texk/dvisvgm/dvisvgm-1.0.10/src/DVIActions.h | 56 + .../texk/dvisvgm/dvisvgm-1.0.10/src/DVIReader.cpp | 680 ++ .../texk/dvisvgm/dvisvgm-1.0.10/src/DVIReader.h | 147 + .../texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVG.cpp | 342 + .../texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVG.h | 70 + .../dvisvgm/dvisvgm-1.0.10/src/DVIToSVGActions.cpp | 343 + .../dvisvgm/dvisvgm-1.0.10/src/DVIToSVGActions.h | 102 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Directory.cpp | 115 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Directory.h | 53 + .../dvisvgm-1.0.10/src/DvisvgmSpecialHandler.cpp | 202 + .../dvisvgm-1.0.10/src/DvisvgmSpecialHandler.h | 35 + .../dvisvgm-1.0.10/src/EmSpecialHandler.cpp | 230 + .../dvisvgm/dvisvgm-1.0.10/src/EmSpecialHandler.h | 58 + .../texk/dvisvgm/dvisvgm-1.0.10/src/FileFinder.cpp | 323 + .../texk/dvisvgm/dvisvgm-1.0.10/src/FileFinder.h | 37 + .../texk/dvisvgm/dvisvgm-1.0.10/src/FilePath.cpp | 256 + .../texk/dvisvgm/dvisvgm-1.0.10/src/FilePath.h | 59 + .../texk/dvisvgm/dvisvgm-1.0.10/src/FileSystem.cpp | 333 + .../texk/dvisvgm/dvisvgm-1.0.10/src/FileSystem.h | 48 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Font.cpp | 392 + .../source/texk/dvisvgm/dvisvgm-1.0.10/src/Font.h | 260 + .../texk/dvisvgm/dvisvgm-1.0.10/src/FontCache.cpp | 387 + .../texk/dvisvgm/dvisvgm-1.0.10/src/FontCache.h | 74 + .../dvisvgm/dvisvgm-1.0.10/src/FontEncoding.cpp | 159 + .../texk/dvisvgm/dvisvgm-1.0.10/src/FontEncoding.h | 48 + .../texk/dvisvgm/dvisvgm-1.0.10/src/FontEngine.cpp | 369 + .../texk/dvisvgm/dvisvgm-1.0.10/src/FontEngine.h | 76 + .../dvisvgm/dvisvgm-1.0.10/src/FontManager.cpp | 252 + .../texk/dvisvgm/dvisvgm-1.0.10/src/FontManager.h | 82 + .../texk/dvisvgm/dvisvgm-1.0.10/src/FontMap.cpp | 234 + .../texk/dvisvgm/dvisvgm-1.0.10/src/FontMap.h | 60 + .../dvisvgm/dvisvgm-1.0.10/src/GFGlyphTracer.cpp | 92 + .../dvisvgm/dvisvgm-1.0.10/src/GFGlyphTracer.h | 60 + .../texk/dvisvgm/dvisvgm-1.0.10/src/GFReader.cpp | 352 + .../texk/dvisvgm/dvisvgm-1.0.10/src/GFReader.h | 110 + .../texk/dvisvgm/dvisvgm-1.0.10/src/GFTracer.cpp | 102 + .../texk/dvisvgm/dvisvgm-1.0.10/src/GFTracer.h | 47 + .../dvisvgm/dvisvgm-1.0.10/src/Ghostscript.cpp | 236 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Ghostscript.h | 103 + .../source/texk/dvisvgm/dvisvgm-1.0.10/src/Glyph.h | 28 + .../dvisvgm-1.0.10/src/GlyphTracerMessages.h | 65 + .../texk/dvisvgm/dvisvgm-1.0.10/src/GraphicPath.h | 339 + .../dvisvgm/dvisvgm-1.0.10/src/InputBuffer.cpp | 137 + .../texk/dvisvgm/dvisvgm-1.0.10/src/InputBuffer.h | 145 + .../dvisvgm/dvisvgm-1.0.10/src/InputReader.cpp | 279 + .../texk/dvisvgm/dvisvgm-1.0.10/src/InputReader.h | 85 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Length.cpp | 84 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Length.h | 62 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Makefile.am | 50 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Makefile.in | 613 ++ .../texk/dvisvgm/dvisvgm-1.0.10/src/Matrix.cpp | 410 ++ .../texk/dvisvgm/dvisvgm-1.0.10/src/Matrix.h | 93 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Message.cpp | 259 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Message.h | 114 + .../dvisvgm/dvisvgm-1.0.10/src/MessageException.h | 39 + .../dvisvgm/dvisvgm-1.0.10/src/MetafontWrapper.cpp | 133 + .../dvisvgm/dvisvgm-1.0.10/src/MetafontWrapper.h | 43 + .../dvisvgm/dvisvgm-1.0.10/src/PSInterpreter.cpp | 305 + .../dvisvgm/dvisvgm-1.0.10/src/PSInterpreter.h | 116 + .../texk/dvisvgm/dvisvgm-1.0.10/src/PageRanges.cpp | 135 + .../texk/dvisvgm/dvisvgm-1.0.10/src/PageRanges.h | 50 + .../texk/dvisvgm/dvisvgm-1.0.10/src/PageSize.cpp | 156 + .../texk/dvisvgm/dvisvgm-1.0.10/src/PageSize.h | 48 + .../source/texk/dvisvgm/dvisvgm-1.0.10/src/Pair.h | 79 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Process.cpp | 143 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Process.h | 41 + .../dvisvgm-1.0.10/src/PsSpecialHandler.cpp | 718 ++ .../dvisvgm/dvisvgm-1.0.10/src/PsSpecialHandler.h | 130 + .../texk/dvisvgm/dvisvgm-1.0.10/src/SVGTree.cpp | 331 + .../texk/dvisvgm/dvisvgm-1.0.10/src/SVGTree.h | 104 + .../dvisvgm/dvisvgm-1.0.10/src/SignalHandler.cpp | 85 + .../dvisvgm/dvisvgm-1.0.10/src/SignalHandler.h | 50 + .../dvisvgm/dvisvgm-1.0.10/src/SpecialActions.h | 80 + .../dvisvgm/dvisvgm-1.0.10/src/SpecialHandler.h | 58 + .../dvisvgm/dvisvgm-1.0.10/src/SpecialManager.cpp | 146 + .../dvisvgm/dvisvgm-1.0.10/src/SpecialManager.h | 71 + .../dvisvgm/dvisvgm-1.0.10/src/StreamReader.cpp | 162 + .../texk/dvisvgm/dvisvgm-1.0.10/src/StreamReader.h | 64 + .../dvisvgm/dvisvgm-1.0.10/src/StreamWriter.cpp | 81 + .../texk/dvisvgm/dvisvgm-1.0.10/src/StreamWriter.h | 46 + .../texk/dvisvgm/dvisvgm-1.0.10/src/System.cpp | 53 + .../texk/dvisvgm/dvisvgm-1.0.10/src/System.h | 29 + .../source/texk/dvisvgm/dvisvgm-1.0.10/src/TFM.cpp | 149 + Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TFM.h | 59 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Terminal.cpp | 191 + .../texk/dvisvgm/dvisvgm-1.0.10/src/Terminal.h | 56 + .../dvisvgm-1.0.10/src/TpicSpecialHandler.cpp | 315 + .../dvisvgm-1.0.10/src/TpicSpecialHandler.h | 51 + .../texk/dvisvgm/dvisvgm-1.0.10/src/VFActions.h | 38 + .../texk/dvisvgm/dvisvgm-1.0.10/src/VFReader.cpp | 190 + .../texk/dvisvgm/dvisvgm-1.0.10/src/VFReader.h | 65 + .../texk/dvisvgm/dvisvgm-1.0.10/src/VectorStream.h | 46 + .../dvisvgm/dvisvgm-1.0.10/src/XMLDocTypeNode.h | 41 + .../dvisvgm/dvisvgm-1.0.10/src/XMLDocument.cpp | 100 + .../texk/dvisvgm/dvisvgm-1.0.10/src/XMLDocument.h | 44 + .../texk/dvisvgm/dvisvgm-1.0.10/src/XMLNode.cpp | 293 + .../texk/dvisvgm/dvisvgm-1.0.10/src/XMLNode.h | 124 + .../texk/dvisvgm/dvisvgm-1.0.10/src/XMLString.cpp | 102 + .../texk/dvisvgm/dvisvgm-1.0.10/src/XMLString.h | 38 + .../texk/dvisvgm/dvisvgm-1.0.10/src/dvisvgm.cpp | 385 + .../texk/dvisvgm/dvisvgm-1.0.10/src/gzstream.cpp | 172 + .../texk/dvisvgm/dvisvgm-1.0.10/src/gzstream.h | 121 + .../source/texk/dvisvgm/dvisvgm-1.0.10/src/iapi.h | 300 + .../texk/dvisvgm/dvisvgm-1.0.10/src/ierrors.h | 153 + .../texk/dvisvgm/dvisvgm-1.0.10/src/macros.h | 45 + .../texk/dvisvgm/dvisvgm-1.0.10/src/options.xml | 138 + .../texk/dvisvgm/dvisvgm-1.0.10/src/psdefs.psc | 69 + .../source/texk/dvisvgm/dvisvgm-1.0.10/src/types.h | 84 + .../dvisvgm-1.0.10/tests/BoundingBoxTest.cpp | 53 + .../dvisvgm/dvisvgm-1.0.10/tests/CRC32Test.cpp | 71 + .../dvisvgm-1.0.10/tests/CalculatorTest.cpp | 60 + .../dvisvgm-1.0.10/tests/ColorSpecialTest.cpp | 91 + .../dvisvgm-1.0.10/tests/CommandLineTest.cpp | 216 + .../dvisvgm/dvisvgm-1.0.10/tests/DirectoryTest.cpp | 66 + .../dvisvgm-1.0.10/tests/FileFinderTest.cpp | 82 + .../dvisvgm/dvisvgm-1.0.10/tests/FilePathTest.cpp | 89 + .../dvisvgm-1.0.10/tests/FileSystemTest.cpp | 119 + .../dvisvgm-1.0.10/tests/FontManagerTest.cpp | 76 + .../dvisvgm/dvisvgm-1.0.10/tests/FontMapTest.cpp | 63 + .../dvisvgm/dvisvgm-1.0.10/tests/GFReaderTest.cpp | 252 + .../dvisvgm-1.0.10/tests/GraphicPathTest.cpp | 82 + .../dvisvgm/dvisvgm-1.0.10/tests/LengthTest.cpp | 120 + .../texk/dvisvgm/dvisvgm-1.0.10/tests/Makefile.am | 145 + .../texk/dvisvgm/dvisvgm-1.0.10/tests/Makefile.in | 845 +++ .../dvisvgm/dvisvgm-1.0.10/tests/MatrixTest.cpp | 68 + .../dvisvgm-1.0.10/tests/MessageExceptionTest.cpp | 78 + .../dvisvgm-1.0.10/tests/PSInterpreterTest.cpp | 178 + .../dvisvgm/dvisvgm-1.0.10/tests/PageRagesTest.cpp | 167 + .../dvisvgm/dvisvgm-1.0.10/tests/PageSizeTest.cpp | 73 + .../texk/dvisvgm/dvisvgm-1.0.10/tests/PairTest.cpp | 125 + .../tests/SplittedCharInputBufferTest.cpp | 181 + .../dvisvgm-1.0.10/tests/StreamInputBufferTest.cpp | 203 + .../dvisvgm-1.0.10/tests/StreamReaderTest.cpp | 100 + .../dvisvgm-1.0.10/tests/StreamWriterTest.cpp | 114 + .../dvisvgm/dvisvgm-1.0.10/tests/TypesTest.cpp | 57 + .../dvisvgm-1.0.10/tests/VectorStreamTest.cpp | 42 + .../texk/dvisvgm/dvisvgm-1.0.10/tests/check-conv | 50 + .../texk/dvisvgm/dvisvgm-1.0.10/tests/cmr10.600gf | Bin 0 -> 24244 bytes .../dvisvgm-1.0.10/tests/frktest-nf-cmp.svg | 1223 +++ .../dvisvgm-1.0.10/tests/frktest-wf-cmp.svg | 353 + .../texk/dvisvgm/dvisvgm-1.0.10/tests/frktest.dvi | Bin 0 -> 2072 bytes .../dvisvgm/dvisvgm-1.0.10/tests/normalize.xsl | 135 + .../dvisvgm/dvisvgm-1.0.10/tests/sample-nf-cmp.svg | 204 + .../dvisvgm/dvisvgm-1.0.10/tests/sample-wf-cmp.svg | 201 + .../texk/dvisvgm/dvisvgm-1.0.10/tests/sample.dvi | Bin 0 -> 1320 bytes .../texk/dvisvgm/dvisvgm-1.0.9-PATCHES/TL-Changes | 21 - .../dvisvgm-1.0.9-PATCHES/patch-03-texlive_gs_init | 13 - Build/source/texk/dvisvgm/dvisvgm-1.0.9/AUTHORS | 10 - Build/source/texk/dvisvgm/dvisvgm-1.0.9/COPYING | 674 -- Build/source/texk/dvisvgm/dvisvgm-1.0.9/INSTALL | 229 - .../source/texk/dvisvgm/dvisvgm-1.0.9/LGPL-2.1.txt | 504 -- .../source/texk/dvisvgm/dvisvgm-1.0.9/Makefile.am | 9 - .../source/texk/dvisvgm/dvisvgm-1.0.9/Makefile.in | 706 -- Build/source/texk/dvisvgm/dvisvgm-1.0.9/NEWS | 230 - Build/source/texk/dvisvgm/dvisvgm-1.0.9/README | 112 - Build/source/texk/dvisvgm/dvisvgm-1.0.9/aclocal.m4 | 1109 --- .../source/texk/dvisvgm/dvisvgm-1.0.9/config.h.in | 166 - Build/source/texk/dvisvgm/dvisvgm-1.0.9/configure | 7789 -------------------- .../source/texk/dvisvgm/dvisvgm-1.0.9/configure.ac | 157 - .../texk/dvisvgm/dvisvgm-1.0.9/doc/Makefile.am | 39 - .../texk/dvisvgm/dvisvgm-1.0.9/doc/Makefile.in | 456 -- .../texk/dvisvgm/dvisvgm-1.0.9/doc/dvisvgm.1 | 851 --- .../texk/dvisvgm/dvisvgm-1.0.9/doc/dvisvgm.txt.in | 541 -- .../dvisvgm/dvisvgm-1.0.9/potracelib/Makefile.am | 13 - .../dvisvgm/dvisvgm-1.0.9/potracelib/Makefile.in | 458 -- .../dvisvgm/dvisvgm-1.0.9/potracelib/auxiliary.h | 78 - .../texk/dvisvgm/dvisvgm-1.0.9/potracelib/bitmap.h | 97 - .../texk/dvisvgm/dvisvgm-1.0.9/potracelib/curve.c | 108 - .../texk/dvisvgm/dvisvgm-1.0.9/potracelib/curve.h | 77 - .../dvisvgm/dvisvgm-1.0.9/potracelib/decompose.c | 514 -- .../dvisvgm/dvisvgm-1.0.9/potracelib/decompose.h | 16 - .../texk/dvisvgm/dvisvgm-1.0.9/potracelib/lists.h | 285 - .../dvisvgm/dvisvgm-1.0.9/potracelib/potracelib.c | 114 - .../dvisvgm/dvisvgm-1.0.9/potracelib/potracelib.h | 139 - .../dvisvgm/dvisvgm-1.0.9/potracelib/progress.h | 79 - .../texk/dvisvgm/dvisvgm-1.0.9/potracelib/trace.c | 1245 ---- .../texk/dvisvgm/dvisvgm-1.0.9/potracelib/trace.h | 15 - .../dvisvgm-1.0.9/src/BgColorSpecialHandler.cpp | 37 - .../dvisvgm-1.0.9/src/BgColorSpecialHandler.h | 34 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Bitmap.cpp | 124 - .../source/texk/dvisvgm/dvisvgm-1.0.9/src/Bitmap.h | 109 - .../texk/dvisvgm/dvisvgm-1.0.9/src/BoundingBox.cpp | 253 - .../texk/dvisvgm/dvisvgm-1.0.9/src/BoundingBox.h | 86 - .../texk/dvisvgm/dvisvgm-1.0.9/src/CRC32.cpp | 112 - .../source/texk/dvisvgm/dvisvgm-1.0.9/src/CRC32.h | 51 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Calculator.cpp | 178 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Calculator.h | 56 - .../dvisvgm-1.0.9/src/CmdLineParserBase.cpp | 309 - .../dvisvgm/dvisvgm-1.0.9/src/CmdLineParserBase.h | 96 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Color.cpp | 126 - .../source/texk/dvisvgm/dvisvgm-1.0.9/src/Color.h | 59 - .../dvisvgm-1.0.9/src/ColorSpecialHandler.cpp | 269 - .../dvisvgm-1.0.9/src/ColorSpecialHandler.h | 43 - .../texk/dvisvgm/dvisvgm-1.0.9/src/CommandLine.cpp | 319 - .../texk/dvisvgm/dvisvgm-1.0.9/src/CommandLine.h | 151 - .../texk/dvisvgm/dvisvgm-1.0.9/src/DLLoader.cpp | 53 - .../texk/dvisvgm/dvisvgm-1.0.9/src/DLLoader.h | 52 - .../texk/dvisvgm/dvisvgm-1.0.9/src/DVIActions.cpp | 26 - .../texk/dvisvgm/dvisvgm-1.0.9/src/DVIActions.h | 56 - .../texk/dvisvgm/dvisvgm-1.0.9/src/DVIReader.cpp | 680 -- .../texk/dvisvgm/dvisvgm-1.0.9/src/DVIReader.h | 147 - .../texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVG.cpp | 340 - .../texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVG.h | 70 - .../dvisvgm/dvisvgm-1.0.9/src/DVIToSVGActions.cpp | 343 - .../dvisvgm/dvisvgm-1.0.9/src/DVIToSVGActions.h | 102 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Directory.cpp | 115 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Directory.h | 53 - .../dvisvgm-1.0.9/src/DvisvgmSpecialHandler.cpp | 202 - .../dvisvgm-1.0.9/src/DvisvgmSpecialHandler.h | 35 - .../dvisvgm/dvisvgm-1.0.9/src/EmSpecialHandler.cpp | 230 - .../dvisvgm/dvisvgm-1.0.9/src/EmSpecialHandler.h | 58 - .../texk/dvisvgm/dvisvgm-1.0.9/src/FileFinder.cpp | 323 - .../texk/dvisvgm/dvisvgm-1.0.9/src/FileFinder.h | 37 - .../texk/dvisvgm/dvisvgm-1.0.9/src/FilePath.cpp | 256 - .../texk/dvisvgm/dvisvgm-1.0.9/src/FilePath.h | 59 - .../texk/dvisvgm/dvisvgm-1.0.9/src/FileSystem.cpp | 333 - .../texk/dvisvgm/dvisvgm-1.0.9/src/FileSystem.h | 48 - .../source/texk/dvisvgm/dvisvgm-1.0.9/src/Font.cpp | 392 - Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Font.h | 260 - .../texk/dvisvgm/dvisvgm-1.0.9/src/FontCache.cpp | 387 - .../texk/dvisvgm/dvisvgm-1.0.9/src/FontCache.h | 74 - .../dvisvgm/dvisvgm-1.0.9/src/FontEncoding.cpp | 159 - .../texk/dvisvgm/dvisvgm-1.0.9/src/FontEncoding.h | 48 - .../texk/dvisvgm/dvisvgm-1.0.9/src/FontEngine.cpp | 369 - .../texk/dvisvgm/dvisvgm-1.0.9/src/FontEngine.h | 76 - .../texk/dvisvgm/dvisvgm-1.0.9/src/FontManager.cpp | 252 - .../texk/dvisvgm/dvisvgm-1.0.9/src/FontManager.h | 82 - .../texk/dvisvgm/dvisvgm-1.0.9/src/FontMap.cpp | 237 - .../texk/dvisvgm/dvisvgm-1.0.9/src/FontMap.h | 60 - .../dvisvgm/dvisvgm-1.0.9/src/GFGlyphTracer.cpp | 92 - .../texk/dvisvgm/dvisvgm-1.0.9/src/GFGlyphTracer.h | 60 - .../texk/dvisvgm/dvisvgm-1.0.9/src/GFReader.cpp | 352 - .../texk/dvisvgm/dvisvgm-1.0.9/src/GFReader.h | 110 - .../texk/dvisvgm/dvisvgm-1.0.9/src/GFTracer.cpp | 102 - .../texk/dvisvgm/dvisvgm-1.0.9/src/GFTracer.h | 47 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Ghostscript.cpp | 236 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Ghostscript.h | 103 - .../source/texk/dvisvgm/dvisvgm-1.0.9/src/Glyph.h | 28 - .../dvisvgm-1.0.9/src/GlyphTracerMessages.h | 65 - .../texk/dvisvgm/dvisvgm-1.0.9/src/GraphicPath.h | 322 - .../texk/dvisvgm/dvisvgm-1.0.9/src/InputBuffer.cpp | 137 - .../texk/dvisvgm/dvisvgm-1.0.9/src/InputBuffer.h | 145 - .../texk/dvisvgm/dvisvgm-1.0.9/src/InputReader.cpp | 279 - .../texk/dvisvgm/dvisvgm-1.0.9/src/InputReader.h | 85 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Length.cpp | 84 - .../source/texk/dvisvgm/dvisvgm-1.0.9/src/Length.h | 62 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Makefile.am | 50 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Makefile.in | 613 -- .../texk/dvisvgm/dvisvgm-1.0.9/src/Matrix.cpp | 410 -- .../source/texk/dvisvgm/dvisvgm-1.0.9/src/Matrix.h | 93 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Message.cpp | 161 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Message.h | 81 - .../dvisvgm/dvisvgm-1.0.9/src/MessageException.h | 39 - .../dvisvgm/dvisvgm-1.0.9/src/MetafontWrapper.cpp | 133 - .../dvisvgm/dvisvgm-1.0.9/src/MetafontWrapper.h | 43 - .../dvisvgm/dvisvgm-1.0.9/src/PSInterpreter.cpp | 305 - .../texk/dvisvgm/dvisvgm-1.0.9/src/PSInterpreter.h | 116 - .../texk/dvisvgm/dvisvgm-1.0.9/src/PageRanges.cpp | 135 - .../texk/dvisvgm/dvisvgm-1.0.9/src/PageRanges.h | 50 - .../texk/dvisvgm/dvisvgm-1.0.9/src/PageSize.cpp | 156 - .../texk/dvisvgm/dvisvgm-1.0.9/src/PageSize.h | 48 - Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Pair.h | 79 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Process.cpp | 143 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Process.h | 41 - .../dvisvgm/dvisvgm-1.0.9/src/PsSpecialHandler.cpp | 718 -- .../dvisvgm/dvisvgm-1.0.9/src/PsSpecialHandler.h | 130 - .../texk/dvisvgm/dvisvgm-1.0.9/src/SVGTree.cpp | 330 - .../texk/dvisvgm/dvisvgm-1.0.9/src/SVGTree.h | 104 - .../dvisvgm/dvisvgm-1.0.9/src/SignalHandler.cpp | 85 - .../texk/dvisvgm/dvisvgm-1.0.9/src/SignalHandler.h | 50 - .../dvisvgm/dvisvgm-1.0.9/src/SpecialActions.h | 80 - .../dvisvgm/dvisvgm-1.0.9/src/SpecialHandler.h | 58 - .../dvisvgm/dvisvgm-1.0.9/src/SpecialManager.cpp | 146 - .../dvisvgm/dvisvgm-1.0.9/src/SpecialManager.h | 71 - .../dvisvgm/dvisvgm-1.0.9/src/StreamReader.cpp | 162 - .../texk/dvisvgm/dvisvgm-1.0.9/src/StreamReader.h | 64 - .../dvisvgm/dvisvgm-1.0.9/src/StreamWriter.cpp | 81 - .../texk/dvisvgm/dvisvgm-1.0.9/src/StreamWriter.h | 46 - .../texk/dvisvgm/dvisvgm-1.0.9/src/System.cpp | 53 - .../source/texk/dvisvgm/dvisvgm-1.0.9/src/System.h | 29 - .../source/texk/dvisvgm/dvisvgm-1.0.9/src/TFM.cpp | 149 - Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TFM.h | 59 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Terminal.cpp | 165 - .../texk/dvisvgm/dvisvgm-1.0.9/src/Terminal.h | 53 - .../dvisvgm-1.0.9/src/TpicSpecialHandler.cpp | 315 - .../dvisvgm/dvisvgm-1.0.9/src/TpicSpecialHandler.h | 51 - .../texk/dvisvgm/dvisvgm-1.0.9/src/VFActions.h | 38 - .../texk/dvisvgm/dvisvgm-1.0.9/src/VFReader.cpp | 190 - .../texk/dvisvgm/dvisvgm-1.0.9/src/VFReader.h | 65 - .../texk/dvisvgm/dvisvgm-1.0.9/src/VectorStream.h | 46 - .../dvisvgm/dvisvgm-1.0.9/src/XMLDocTypeNode.h | 41 - .../texk/dvisvgm/dvisvgm-1.0.9/src/XMLDocument.cpp | 100 - .../texk/dvisvgm/dvisvgm-1.0.9/src/XMLDocument.h | 44 - .../texk/dvisvgm/dvisvgm-1.0.9/src/XMLNode.cpp | 293 - .../texk/dvisvgm/dvisvgm-1.0.9/src/XMLNode.h | 124 - .../texk/dvisvgm/dvisvgm-1.0.9/src/XMLString.cpp | 102 - .../texk/dvisvgm/dvisvgm-1.0.9/src/XMLString.h | 38 - .../texk/dvisvgm/dvisvgm-1.0.9/src/dvisvgm.cpp | 383 - .../texk/dvisvgm/dvisvgm-1.0.9/src/gzstream.cpp | 172 - .../texk/dvisvgm/dvisvgm-1.0.9/src/gzstream.h | 121 - Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/iapi.h | 300 - .../texk/dvisvgm/dvisvgm-1.0.9/src/ierrors.h | 153 - .../source/texk/dvisvgm/dvisvgm-1.0.9/src/macros.h | 45 - .../texk/dvisvgm/dvisvgm-1.0.9/src/options.xml | 138 - .../texk/dvisvgm/dvisvgm-1.0.9/src/psdefs.psc | 69 - .../source/texk/dvisvgm/dvisvgm-1.0.9/src/types.h | 84 - .../dvisvgm-1.0.9/tests/BoundingBoxTest.cpp | 53 - .../texk/dvisvgm/dvisvgm-1.0.9/tests/CRC32Test.cpp | 71 - .../dvisvgm/dvisvgm-1.0.9/tests/CalculatorTest.cpp | 60 - .../dvisvgm-1.0.9/tests/ColorSpecialTest.cpp | 91 - .../dvisvgm-1.0.9/tests/CommandLineTest.cpp | 216 - .../dvisvgm/dvisvgm-1.0.9/tests/DirectoryTest.cpp | 66 - .../dvisvgm/dvisvgm-1.0.9/tests/FileFinderTest.cpp | 82 - .../dvisvgm/dvisvgm-1.0.9/tests/FilePathTest.cpp | 89 - .../dvisvgm/dvisvgm-1.0.9/tests/FileSystemTest.cpp | 119 - .../dvisvgm-1.0.9/tests/FontManagerTest.cpp | 76 - .../dvisvgm/dvisvgm-1.0.9/tests/FontMapTest.cpp | 63 - .../dvisvgm/dvisvgm-1.0.9/tests/GFReaderTest.cpp | 252 - .../dvisvgm-1.0.9/tests/GraphicPathTest.cpp | 82 - .../dvisvgm/dvisvgm-1.0.9/tests/LengthTest.cpp | 120 - .../texk/dvisvgm/dvisvgm-1.0.9/tests/Makefile.am | 145 - .../texk/dvisvgm/dvisvgm-1.0.9/tests/Makefile.in | 845 --- .../dvisvgm/dvisvgm-1.0.9/tests/MatrixTest.cpp | 68 - .../dvisvgm-1.0.9/tests/MessageExceptionTest.cpp | 78 - .../dvisvgm-1.0.9/tests/PSInterpreterTest.cpp | 178 - .../dvisvgm/dvisvgm-1.0.9/tests/PageRagesTest.cpp | 167 - .../dvisvgm/dvisvgm-1.0.9/tests/PageSizeTest.cpp | 73 - .../texk/dvisvgm/dvisvgm-1.0.9/tests/PairTest.cpp | 125 - .../tests/SplittedCharInputBufferTest.cpp | 181 - .../dvisvgm-1.0.9/tests/StreamInputBufferTest.cpp | 203 - .../dvisvgm-1.0.9/tests/StreamReaderTest.cpp | 100 - .../dvisvgm-1.0.9/tests/StreamWriterTest.cpp | 114 - .../texk/dvisvgm/dvisvgm-1.0.9/tests/TypesTest.cpp | 57 - .../dvisvgm-1.0.9/tests/VectorStreamTest.cpp | 42 - .../texk/dvisvgm/dvisvgm-1.0.9/tests/check-conv | 50 - .../texk/dvisvgm/dvisvgm-1.0.9/tests/cmr10.600gf | Bin 24244 -> 0 bytes .../dvisvgm/dvisvgm-1.0.9/tests/frktest-nf-cmp.svg | 1223 --- .../dvisvgm/dvisvgm-1.0.9/tests/frktest-wf-cmp.svg | 353 - .../texk/dvisvgm/dvisvgm-1.0.9/tests/frktest.dvi | Bin 2072 -> 0 bytes .../texk/dvisvgm/dvisvgm-1.0.9/tests/normalize.xsl | 135 - .../dvisvgm/dvisvgm-1.0.9/tests/sample-nf-cmp.svg | 204 - .../dvisvgm/dvisvgm-1.0.9/tests/sample-wf-cmp.svg | 201 - .../texk/dvisvgm/dvisvgm-1.0.9/tests/sample.dvi | Bin 1320 -> 0 bytes Build/source/texk/dvisvgm/version.ac | 2 +- 399 files changed, 42116 insertions(+), 41826 deletions(-) create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10-PATCHES/TL-Changes create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10-PATCHES/patch-03-texlive_gs_init create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/AUTHORS create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/COPYING create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/INSTALL create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/LGPL-2.1.txt create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/Makefile.am create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/Makefile.in create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/NEWS create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/README create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/aclocal.m4 create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/config.h.in create mode 100755 Build/source/texk/dvisvgm/dvisvgm-1.0.10/configure create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/configure.ac create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/Makefile.am create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/Makefile.in create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/dvisvgm.1 create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/dvisvgm.txt.in create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/Makefile.am create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/Makefile.in create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/auxiliary.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/bitmap.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/curve.c create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/curve.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/decompose.c create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/decompose.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/lists.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/potracelib.c create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/potracelib.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/progress.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/trace.c create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/trace.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BgColorSpecialHandler.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BgColorSpecialHandler.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Bitmap.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Bitmap.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BoundingBox.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BoundingBox.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CRC32.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CRC32.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Calculator.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Calculator.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CmdLineParserBase.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CmdLineParserBase.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Color.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Color.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/ColorSpecialHandler.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/ColorSpecialHandler.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CommandLine.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CommandLine.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DLLoader.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DLLoader.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIActions.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIActions.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIReader.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIReader.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVG.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVG.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVGActions.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVGActions.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Directory.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Directory.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DvisvgmSpecialHandler.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DvisvgmSpecialHandler.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/EmSpecialHandler.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/EmSpecialHandler.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileFinder.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileFinder.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FilePath.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FilePath.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileSystem.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileSystem.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Font.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Font.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontCache.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontCache.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEncoding.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEncoding.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEngine.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEngine.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontManager.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontManager.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontMap.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontMap.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFGlyphTracer.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFGlyphTracer.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFReader.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFReader.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFTracer.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFTracer.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Ghostscript.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Ghostscript.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Glyph.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GlyphTracerMessages.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GraphicPath.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputBuffer.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputBuffer.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputReader.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputReader.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Length.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Length.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Makefile.am create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Makefile.in create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Matrix.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Matrix.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Message.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Message.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/MessageException.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/MetafontWrapper.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/MetafontWrapper.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PSInterpreter.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PSInterpreter.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageRanges.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageRanges.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageSize.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageSize.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Pair.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Process.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Process.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PsSpecialHandler.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PsSpecialHandler.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SVGTree.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SVGTree.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SignalHandler.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SignalHandler.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialActions.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialHandler.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialManager.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialManager.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamReader.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamReader.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamWriter.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamWriter.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/System.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/System.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TFM.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TFM.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Terminal.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Terminal.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TpicSpecialHandler.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TpicSpecialHandler.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VFActions.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VFReader.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VFReader.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VectorStream.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLDocTypeNode.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLDocument.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLDocument.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLNode.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLNode.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLString.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLString.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/dvisvgm.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/gzstream.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/gzstream.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/iapi.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/ierrors.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/macros.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/options.xml create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/psdefs.psc create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/types.h create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/BoundingBoxTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/CRC32Test.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/CalculatorTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/ColorSpecialTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/CommandLineTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/DirectoryTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FileFinderTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FilePathTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FileSystemTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FontManagerTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FontMapTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/GFReaderTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/GraphicPathTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/LengthTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/Makefile.am create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/Makefile.in create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/MatrixTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/MessageExceptionTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PSInterpreterTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PageRagesTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PageSizeTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PairTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/SplittedCharInputBufferTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/StreamInputBufferTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/StreamReaderTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/StreamWriterTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/TypesTest.cpp create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/VectorStreamTest.cpp create mode 100755 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/check-conv create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/cmr10.600gf create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/frktest-nf-cmp.svg create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/frktest-wf-cmp.svg create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/frktest.dvi create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/normalize.xsl create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/sample-nf-cmp.svg create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/sample-wf-cmp.svg create mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/sample.dvi delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9-PATCHES/TL-Changes delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9-PATCHES/patch-03-texlive_gs_init delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/AUTHORS delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/COPYING delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/INSTALL delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/LGPL-2.1.txt delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/Makefile.am delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/Makefile.in delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/NEWS delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/README delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/aclocal.m4 delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/config.h.in delete mode 100755 Build/source/texk/dvisvgm/dvisvgm-1.0.9/configure delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/configure.ac delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/Makefile.am delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/Makefile.in delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/dvisvgm.1 delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/dvisvgm.txt.in delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/Makefile.am delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/Makefile.in delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/auxiliary.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/bitmap.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/curve.c delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/curve.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/decompose.c delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/decompose.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/lists.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/potracelib.c delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/potracelib.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/progress.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/trace.c delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/trace.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BgColorSpecialHandler.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BgColorSpecialHandler.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Bitmap.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Bitmap.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BoundingBox.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BoundingBox.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CRC32.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CRC32.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Calculator.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Calculator.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CmdLineParserBase.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CmdLineParserBase.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Color.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Color.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/ColorSpecialHandler.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/ColorSpecialHandler.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CommandLine.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CommandLine.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DLLoader.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DLLoader.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIActions.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIActions.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIReader.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIReader.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVG.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVG.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVGActions.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVGActions.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Directory.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Directory.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DvisvgmSpecialHandler.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DvisvgmSpecialHandler.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/EmSpecialHandler.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/EmSpecialHandler.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileFinder.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileFinder.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FilePath.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FilePath.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileSystem.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileSystem.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Font.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Font.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontCache.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontCache.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEncoding.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEncoding.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEngine.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEngine.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontManager.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontManager.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontMap.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontMap.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFGlyphTracer.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFGlyphTracer.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFReader.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFReader.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFTracer.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFTracer.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Ghostscript.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Ghostscript.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Glyph.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GlyphTracerMessages.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GraphicPath.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputBuffer.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputBuffer.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputReader.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputReader.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Length.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Length.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Makefile.am delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Makefile.in delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Matrix.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Matrix.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Message.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Message.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/MessageException.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/MetafontWrapper.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/MetafontWrapper.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PSInterpreter.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PSInterpreter.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageRanges.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageRanges.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageSize.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageSize.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Pair.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Process.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Process.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PsSpecialHandler.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PsSpecialHandler.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SVGTree.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SVGTree.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SignalHandler.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SignalHandler.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialActions.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialHandler.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialManager.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialManager.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamReader.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamReader.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamWriter.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamWriter.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/System.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/System.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TFM.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TFM.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Terminal.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Terminal.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TpicSpecialHandler.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TpicSpecialHandler.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VFActions.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VFReader.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VFReader.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VectorStream.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLDocTypeNode.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLDocument.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLDocument.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLNode.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLNode.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLString.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLString.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/dvisvgm.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/gzstream.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/gzstream.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/iapi.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/ierrors.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/macros.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/options.xml delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/psdefs.psc delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/types.h delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/BoundingBoxTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/CRC32Test.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/CalculatorTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/ColorSpecialTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/CommandLineTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/DirectoryTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FileFinderTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FilePathTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FileSystemTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FontManagerTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FontMapTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/GFReaderTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/GraphicPathTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/LengthTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/Makefile.am delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/Makefile.in delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/MatrixTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/MessageExceptionTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PSInterpreterTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PageRagesTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PageSizeTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PairTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/SplittedCharInputBufferTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/StreamInputBufferTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/StreamReaderTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/StreamWriterTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/TypesTest.cpp delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/VectorStreamTest.cpp delete mode 100755 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/check-conv delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/cmr10.600gf delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/frktest-nf-cmp.svg delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/frktest-wf-cmp.svg delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/frktest.dvi delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/normalize.xsl delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/sample-nf-cmp.svg delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/sample-wf-cmp.svg delete mode 100644 Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/sample.dvi (limited to 'Build/source/texk/dvisvgm') diff --git a/Build/source/texk/dvisvgm/ChangeLog b/Build/source/texk/dvisvgm/ChangeLog index 9753c50e3e9..403474338f6 100644 --- a/Build/source/texk/dvisvgm/ChangeLog +++ b/Build/source/texk/dvisvgm/ChangeLog @@ -1,3 +1,8 @@ +2011-12-22 Peter Breitenlohner + + * Imported release 1.0.10. + * version.ac: Adapted. + 2011-11-17 Peter Breitenlohner * Imported release 1.0.9. diff --git a/Build/source/texk/dvisvgm/configure b/Build/source/texk/dvisvgm/configure index fcb9793ccec..6cc25b0c961 100755 --- a/Build/source/texk/dvisvgm/configure +++ b/Build/source/texk/dvisvgm/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for dvisvgm 1.0.9. +# Generated by GNU Autoconf 2.68 for dvisvgm 1.0.10. # # Report bugs to . # @@ -570,12 +570,12 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='dvisvgm' PACKAGE_TARNAME='dvisvgm' -PACKAGE_VERSION='1.0.9' -PACKAGE_STRING='dvisvgm 1.0.9' +PACKAGE_VERSION='1.0.10' +PACKAGE_STRING='dvisvgm 1.0.10' PACKAGE_BUGREPORT='tex-k@tug.org' PACKAGE_URL='' -ac_unique_file="dvisvgm-1.0.9/src/dvisvgm.cpp" +ac_unique_file="dvisvgm-1.0.10/src/dvisvgm.cpp" # Factoring default headers for most tests. ac_includes_default="\ #include @@ -1338,7 +1338,7 @@ if test "$ac_init_help" = "long"; then # 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 1.0.9 to adapt to many kinds of systems. +\`configure' configures dvisvgm 1.0.10 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1408,7 +1408,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of dvisvgm 1.0.9:";; + short | recursive ) echo "Configuration of dvisvgm 1.0.10:";; esac cat <<\_ACEOF @@ -1535,7 +1535,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -dvisvgm configure 1.0.9 +dvisvgm configure 1.0.10 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -2227,7 +2227,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by dvisvgm $as_me 1.0.9, which was +It was created by dvisvgm $as_me 1.0.10, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -7610,7 +7610,7 @@ fi # Define the identity of the package. PACKAGE='dvisvgm' - VERSION='1.0.9' + VERSION='1.0.10' cat >>confdefs.h <<_ACEOF @@ -17284,7 +17284,7 @@ Usage: $0 [OPTIONS] Report bugs to ." lt_cl_version="\ -dvisvgm config.lt 1.0.9 +dvisvgm config.lt 1.0.10 configured by $0, generated by GNU Autoconf 2.68. Copyright (C) 2011 Free Software Foundation, Inc. @@ -18980,7 +18980,7 @@ CPPFLAGS=$kpse_save_CPPFLAGS LIBS=$kpse_save_LIBS -DVISVGM_TREE=dvisvgm-1.0.9 +DVISVGM_TREE=dvisvgm-1.0.10 ac_config_files="$ac_config_files Makefile" @@ -19536,7 +19536,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by dvisvgm $as_me 1.0.9, which was +This file was extended by dvisvgm $as_me 1.0.10, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -19602,7 +19602,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -dvisvgm config.status 1.0.9 +dvisvgm config.status 1.0.10 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10-PATCHES/TL-Changes b/Build/source/texk/dvisvgm/dvisvgm-1.0.10-PATCHES/TL-Changes new file mode 100644 index 00000000000..93d68b58c59 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10-PATCHES/TL-Changes @@ -0,0 +1,20 @@ +Changes applied to the dvisvgm-1.0.10 tree as obtained from: + http://downloads.sourceforge.net/dvisvgm/dvisvgm-1.0.10.tar.gz + +Removed: + config.guess + config.sub + depcomp + install-sh + missing + +Converted Dos/Win line ends to native: + potracelib/auxiliary.h + potracelib/bitmap.h + potracelib/curve.c + potracelib/decompose.h + potracelib/lists.h + potracelib/progress.h + potracelib/trace.c + potracelib/trace.h + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10-PATCHES/patch-03-texlive_gs_init b/Build/source/texk/dvisvgm/dvisvgm-1.0.10-PATCHES/patch-03-texlive_gs_init new file mode 100644 index 00000000000..046f366232e --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10-PATCHES/patch-03-texlive_gs_init @@ -0,0 +1,13 @@ +diff -ur dvisvgm-1.0.10.orig/src/FileFinder.cpp dvisvgm-1.0.10/src/FileFinder.cpp +--- dvisvgm-1.0.10.orig/src/FileFinder.cpp 2011-10-05 18:04:40.000000000 +0200 ++++ dvisvgm-1.0.10/src/FileFinder.cpp 2011-12-22 12:03:19.222930951 +0100 +@@ -84,6 +84,9 @@ + kpse_set_program_enabled(kpse_tfm_format, 1, kpse_src_env); + kpse_set_program_enabled(kpse_mf_format, 1, kpse_src_env); + kpse_make_tex_discard_errors = false; // don't suppress messages of mktexFOO tools ++#ifdef TEXLIVEWIN32 ++ texlive_gs_init(); ++#endif + #endif + _initialized = true; + init_font_map(usermapname); diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/AUTHORS b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/AUTHORS new file mode 100644 index 00000000000..837e1e96bfb --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/AUTHORS @@ -0,0 +1,10 @@ +Martin Gieseking + author of dvisvgm + +Peter Selinger + author of the potrace library + +Deepak Bandyopadhyay, Lutz Kettner + authors of gzstream library + dvisvgm uses a slightly modified version + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/COPYING b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/COPYING new file mode 100644 index 00000000000..94a9ed024d3 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/INSTALL b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/INSTALL new file mode 100644 index 00000000000..a4b34144dcf --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/INSTALL @@ -0,0 +1,229 @@ +Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/LGPL-2.1.txt b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/LGPL-2.1.txt new file mode 100644 index 00000000000..602bfc94635 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/LGPL-2.1.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/Makefile.am new file mode 100644 index 00000000000..d0557a0e78c --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/Makefile.am @@ -0,0 +1,9 @@ +## This file is part of dvisvgm +## Copyright (C) 2005-2011 Martin Gieseking +## +## Process this file with automake. + +AUTOMAKE_OPTIONS = foreign +EXTRA_DIST = COPYING LGPL-2.1.txt +SUBDIRS = potracelib src tests doc + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/Makefile.in new file mode 100644 index 00000000000..fb7ee798f04 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/Makefile.in @@ -0,0 +1,706 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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. + +@SET_MAKE@ +VPATH = @srcdir@ +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@ +target_triplet = @target@ +subdir = . +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(top_srcdir)/configure AUTHORS COPYING INSTALL NEWS \ + config.guess config.sub depcomp install-sh missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_LDFLAGS = @AM_LDFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATE = @DATE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXTRA_LIBS = @EXTRA_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +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@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +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@ +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@ +sbindir = @sbindir@ +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@ +AUTOMAKE_OPTIONS = foreign +EXTRA_DIST = COPYING LGPL-2.1.txt +SUBDIRS = potracelib src tests doc +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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 +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @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 + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile config.h +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ + dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-generic distclean-hdr distclean-tags \ + distcleancheck distdir distuninstallcheck 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 installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am + + +# 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: diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/NEWS b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/NEWS new file mode 100644 index 00000000000..6236d65df47 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/NEWS @@ -0,0 +1,235 @@ +dvisvgm-1.0.10 (2011-12-18) +- introduced environment variable DVISVGM_COLORS to allow user-defined message colors +- fixed linking issue concerning libfreetype +- fixed potential clashes of character IDs + +dvisvgm-1.0.9 (2011-10-13) +- fixed segfault occurred in TeX Live Win32 caused by mf.exe being unavailable + (thanks to Akira Kakuto for tracking down the issue) +- updated bundled potrace library to version 1.10 +- some minor code improvements + +dvisvgm-1.0.8 (2011-05-31) +- PS handler: added evaluation of PS operators save, restore, and grestoreall +- PS handler: fixed potention segfault caused by invisible zero-length paths +- fixed computation of current drawing position influenced by PS and DVI actions +- don't stop Metafont conversions on errors any longer in order to convert + buggy MF fonts properly + +dvisvgm-1.0.7 (2011-05-06) +- improved overall handling of PS specials +- fixed broken PS special subset 'ps::' +- fixed scaling of PS line properties (width, dash distance, etc.) +- fixed semantics of TPIC special 'ip' (doesn't draw polygon outlines any longer) + +dvisvgm-1.0.6 (2011-04-21) +- fixed segfault occured if a (malformed) DVI file calls set_char/put_char + whithout preceding font definition +- added CTRL-C handler +- MiKTeX support updated to version 2.9 +- some code refactorings + +dvisvgm-1.0.5 (2011-03-01) +- added optional integer argument to option -n to disable generation of elements +- added missing unit to width/height attributes of svg root element (SF bug #3185773) +- added integrity check to font cache files +- updated bundled potrace library to version 1.9 +- fixed a couple of minor issues + +dvisvgm-1.0.4 (2010-12-18) +- added missing line width/dash pattern scaling to PS handler +- fixed scaling issue in PS positioning +- fixed compilation issue related to FreeType 2.4.0 + +dvisvgm-1.0.3 (2010-08-06) +- applied some more portability patches for TeX Live +- fixed a potential memory issue +- fixed a transformation issue regarding special 'psfile' (SF bug #3037372) + +dvisvgm-1.0.2 (2010-06-22) +- applied latest TeX Live portability patches sent by Peter Breitenlohner and Karl Berry +- fixed a potrace name clash occurred on Mac OS X Tiger +- fixed putchar() name clash occurred on Solaris +- fixed a couple of conversion warnings +- updated the test suite + +dvisvgm-1.0.1 (2010-06-11) +- fixed a memory issue in the PS handler that could lead to a segfault (SF bug #3013392) +- fixed a recursion issue in the PS handler +- suppress ANSI color code when terminating + +dvisvgm-1.0 (2010-06-08) +- conversion of multiple pages (must be enabled explicitly, see option --pages) +- added transparency support to the PS handler +- improved conversion results of the PS handler +- added support for computation of local bounding boxes +- optional colorization of dvisvgm messages (option --color) +- improved progress indicator (option --progress) +- a couple of improvements of the build system + +dvisvgm-0.9.1 (2010-04-23) +- CSS style definitions omit unnecessary fonts now +- SVG validity was broken when using font elements +- fixed two memory issues that could lead to segfaults + +dvisvgm-0.9 (2010-03-25) +- added option --exact and corresponding algorithms to compute the exact + bounding boxes of characters +- added option --keep that prevents deleting temporary font files +- extended option --trace-all by an optional boolean argument controlling + the re-tracing of glyphs +- fixed bug in evaluation of embedded PS headers +- several code refactorings + +dvisvgm-0.8.8 (2010-02-02) +- added option --libgs and evaluation of environment variable LIBGS + to overwrite the expected file name of the GS shared library + (only available if dvisvgm isn't linked against libgs and GS support + isn't completely disabled) +- option --bbox can now be used to enlarge the minimal bounding box by + a given amount +- fixed bug in evaluation of option --page +- applied patches sent by Peter Breitenlohner to prepare the integration of + dvisvgm into TeX Live +- some code refactorings + +dvisvgm-0.8.7 (2009-11-09) +- fixed a bounding box issue concerning italic corrections +- PS handler: zero-length paths are now drawn as dots +- PS handler: fixed a path positioning issue +- PS handler: colors set by color specials are now considered properly +- added macro {?nl} to be used with special dvisvgm:raw + +dvisvgm-0.8.6 (2009-10-13) +- renamed command-line option --bbox-format to --bbox +- option --bbox can now be used to set an arbitrary bounding box +- added the two special variants "dvisvgm:bbox abs" and "dvisvgm:bbox fix" +- PS clipping path sequences and intersections are now handled correctly +- fixed a PS bounding box bug +- fixed a couple of PS positioning issues reported by John Bowman +- fixed a bit shift overflow in the font tracer occurred on 64-bit systems + +dvisvgm-0.8.5 (2009-10-01) +- added an optional depth parameter to special dvisvgm:raw +- updated the man page +- added LGPL license text needed for the gzstream wrapper classes + +dvisvgm-0.8.4 (2009-09-17) +- improved the command-line parser to be more POSIX-compliant +- added a simple progress indicator for time-consuming special operations +- option --cache prints more information about the cached fonts +- fixed a clipping bug in the PostScript handler + (thanks to John Bowman for also providing a patch for this issue) +- fixed a bug in computation of the PS bounding box +- fixed a memory bug in the GF tracer module + +dvisvgm-0.8.3 (2009-08-28) +- added basic evaluation of the PostScript "show" operator + (handles PSTricks Type 3 fonts properly now) +- improved checks for Ghostscript and potrace library in configure script +- external Ghostscript and potrace development files are used if available +- PostScript header/prologue files are now loaded regardless of converted page +- replaced command-line option variant --cache=? by --cache + +dvisvgm-0.8.2 (2009-08-24) +- changed license of dvisvgm to GPL version 3 or later +- replaced getopt-based command-line parser by own implementation + in order to simplify future internationalizations +- fixed memory bug in fontmap reader + +dvisvgm-0.8.1 (2009-08-02) +- added evaluation of more psfile parameters +- fixed computation of bounding box in psfile special +- fixed compilation errors and a conversion bug occurred on x64 systems + +dvisvgm-0.8 (2009-07-27) +- experimental evaluation of PostScript specials has been added (requires + a recent version of the Ghostscript shared library libgs.so or gsdll32.dll) +- several code improvements and refactorings +- fixed compilation bug occurred when using GCC 4.4.x + +dvisvgm-0.7.3 (2009-04-24) +- fixed bug in font map reader that could cause a segmentation fault +- fixed bug in creation of shorthand path drawing commands +- fixed bug in TPIC special handler + +dvisvgm-0.7.2 (2009-04-02) +- font caching has been added (speeds up embedding of bitmap fonts) +- added option --trace-all that enables tracing of all glyphs of all + bitmap fonts used in the current DVI file. Even glyphs that are currently + not needed are considered. This avoids multiple calls of Metafont for the + same fonts. In combination with the new caching functionality this can + drastically increase the speed of successive dvisvgm calls. +- if option --no-fonts is used, all glyph sizes are now computed correctly +- use shorthand path commands in SVG fonts if possible + +dvisvgm-0.7.1 (2009-03-09) +- evaluation of a subset of emTeX specials has been added +- specials for embedding of raw SVG snippets have been added +- evaluation of TPIC specials has been added +- added background color support +- added option -n, --no-fonts that replaces fonts by paths + (enables applications w/o SVG font support to render dvisvgm's output properly) +- moved defs to top of SVG file to make Firefox's SVG renderer happy +- fixed bug in color handler + +dvisvgm-0.7 (2009-02-16) +- basic support for evaluation of specials has been added +- evaluation of color specials has been added +- renamed command-line option -S to --no-specials and inverted previous behavior +- selected special sets can be disabled by optional arguments to --no-specials + (currently only color specials) +- added option --no-style (see manpage for further details) +- added optional '+' flag to option --map-file (see manpage for further details) +- fixed \magnificaton bug (dvi magnification factor is now applied properly) +- fixed buggy call of maketfm/makemf in Windows/MiKTeX version +- fixed buggy evaluation of command-line argument -m/--map-file +- several internal code improvements + +dvisvgm-0.6.1 (2009-01-29) +- added support for dvips map files +- removed dependency on dvipdfm's map file (now ps2pk.map, psfonts.map or dvipdfm.map is used by default) +- fixed compilation bug #2535497 +- some internal refactorings + +dvisvgm-0.6 (2009-01-23) +- added support for varying font encodings +- updated MiKTeX support using its COM interface +- fixed incomplete handling of nested virtual fonts +- fixed a font handling bug that could cause segmentation faults +- fixed bug in matrix transformation code +- updated bundled potrace library to version 1.8 + +dvisvgm-0.5 (2007-03-26) +- redesigned and improved font handling +- added support for virtual fonts +- evaluation of dvipdfm's map file to find font files with differing + names (e.g. cork-lmr10 => lmr10) +- automatic invocation of mktexmf etc. in case of missing font files (tfm, mf) +- command-line option -m has been renamed to -M +- added command-line options -m/--map-file and -n/--no-mktexmf +- memory bug in StreamCounter class has been fixed +- added sources of Peter Selinger's potrace library (part of potrace, http://potrace.sourceforge.net) + to simplify the build process + +dvisvgm-0.4.3 (2007-01-03) +- problem with changed freetype API (freetype version >= 2.2.1) has been fixed +- updated MiKTeX support to version 2.5 +- minor code improvements +- some unit tests based on CxxTest (http://cxxtest.sourceforge.net) have been added + +dvisvgm-0.4.2 (2005-09-22) +- added SVG transformation options +- some bugfixes in command line frontend and TFM handling +- code refactorings to improve modularity and extensibility + +dvisvgm-0.4.1 (2005-09-02) +- added option -b to specify the bounding box +- added a manual page + +dvisvgm-0.4 (2005-08-24) +- Added a glyph tracing module that vectorizes Metafont's bitmap output + if no corresponding Type 1 font file is available. + +dvisvgm-0.3 (2005-08-10) +- Initial public release with basic conversion functionality. diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/README b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/README new file mode 100644 index 00000000000..2157b7d6078 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/README @@ -0,0 +1,112 @@ +dvisvgm -- A DVI to SVG converter + +DESCRIPTION + + dvisvgm is a utility for TeX/LaTeX users. It converts + DVI files to the XML-based scalable vector graphics format SVG. + + +DEPENDENCIES + + dvisvgm relies on the following free libraries: + * FreeType 2 (http://www.freetype.org) + This library is used to extract glyph outlines + from PFB files. + + * Ghostscript (http://pages.cs.wisc.edu/~ghost) + The PostScript special handler requires the Ghostscript + library libgs.so (Linux) or gsdll32.dll (Windows) to be + installed. If the configure script finds the corresponing + Ghostscript development files on the system, it directly + links against libgs.so. Otherwise, the library is looked up + at runtime and PostScript support is enabled only if libgs.so + could be found. + Due to incompatible changes of the Ghostscript API, dvisvgm + requires Ghostscript 8.31 or later. + + * kpathsea + This library is part of the Web2C package and is + usually installed in conjunction with a TeX distribution. + kpathsea provides functions for searching files in the + large texmf tree. + + * potracelib (http://potrace.sourceforge.net) + Peter Selinger's bitmap tracing library is utilized to + vectorize Metafont's bitmap output. + The latest version of the library is bundled with the + source tarball. + + * zlib (http://www.zlib.org) + Compressed SVG files are produced by using functions + of this library and the Gzstream wrapper classes + (http://www.cs.unc.edu/Research/compgeom/gzstream) + which are licensed under LGPL version 2.1 (or optionally any + later version) and should be included with this package. + + If you want to build and run the testsuite located in the tests + subdirectory, you also need the googletest libraries + (http://code.google.com/p/googletest). + + +COMPILATION + + Quick installation info: + * type "./configure" + * type "make" + * type "make install" as root (or "sudo make install") + + For generic configuration instructions see the file INSTALL. + + The configure script should recognize all necessary parameters. + If a library is installed but not detected, specify its location + as commandline parameter of configure, e.g. + ./configure --with-freetype=/usr/local/freetype + (all available options can be displayed with ./configure --help) + + The tracer module calls Metafont in case of lacking TFM or PFB files + via a system call. Please ensure that Metafont is installed and + reachable through the search path. + + If you don't like compiling the sources yourself, you can + download pre-compiled executables for Windows and MiKTeX + from sourceforge.net instead (see below). + + +USAGE + Information about the command-line interface and the available options + can be found in the manual page. + + +ADDITIONAL INFORMATION + This packacke is available from CTAN (dviware/dvisvgm) and can + be downloaded from the project website at sourceforge.net as well: + + http://dvisvgm.sourceforge.net + + Here you can find the sources, precompiled binaries and further additional + information about the converter and related topics. + + If you've found a bug please let me know. You can either send me an + email or preferably use the bug reporting facilities at sourceforge.net + (see http://sourceforge.net/projects/dvisvgm). + + +COPYRIGHT + + Copyright (C) 2005-2011 Martin Gieseking + + 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 . + + See the file COPYING for details. + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/aclocal.m4 b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/aclocal.m4 new file mode 100644 index 00000000000..866c84ad432 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/aclocal.m4 @@ -0,0 +1,1109 @@ +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file 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. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, +[m4_warning([this file was generated for autoconf 2.68. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 1 (pkg-config-0.24) +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +# only at the first occurence in configure.ac, so if the first place +# it's called might be skipped (such as if it is within an "if", you +# have to call PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT]) + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .]) + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])# PKG_CHECK_MODULES + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file 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. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file 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. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file 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. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# Free Software Foundation, Inc. +# +# This file 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. + +# serial 10 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file 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. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file 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. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file 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. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file 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. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file 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. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file 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. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file 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. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file 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. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file 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. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file 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. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file 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. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file 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. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/config.h.in b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/config.h.in new file mode 100644 index 00000000000..b027999e9b3 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/config.h.in @@ -0,0 +1,166 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if the `closedir' function returns void instead of `int'. */ +#undef CLOSEDIR_VOID + +/* Set to 1 if PostScript support should be disabled */ +#undef DISABLE_GS + +/* Define to 1 if `TIOCGWINSZ' requires . */ +#undef GWINSZ_IN_SYS_IOCTL + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_DIRENT_H + +/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ +#undef HAVE_DOPRNT + +/* Define to 1 if you have the `ftime' function. */ +#undef HAVE_FTIME + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `dl' library (-ldl). */ +#undef HAVE_LIBDL + +/* Define to 1 if you have the `gs' library (-lgs). */ +#undef HAVE_LIBGS + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBINTL_H + +/* Define to 1 if you have the `kpathsea' library (-lkpathsea). */ +#undef HAVE_LIBKPATHSEA + +/* Define to 1 if you have the `m' library (-lm). */ +#undef HAVE_LIBM + +/* Define to 1 if you have the `potrace' library (-lpotrace). */ +#undef HAVE_LIBPOTRACE + +/* Define to 1 if you have the `z' library (-lz). */ +#undef HAVE_LIBZ + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#undef HAVE_MALLOC + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `memset' function. */ +#undef HAVE_MEMSET + +/* Define to 1 if you have the header file, and it defines `DIR'. */ +#undef HAVE_NDIR_H + +/* Define to 1 if `stat' has the bug that it succeeds when given the + zero-length file name argument. */ +#undef HAVE_STAT_EMPTY_STRING_BUG + +/* Define to 1 if stdbool.h conforms to C99. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strcasecmp' function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strtol' function. */ +#undef HAVE_STRTOL + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_SYS_DIR_H + +/* Define to 1 if you have the header file, and it defines `DIR'. + */ +#undef HAVE_SYS_NDIR_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIMEB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `vprintf' function. */ +#undef HAVE_VPRINTF + +/* Define to 1 if the system has the type `_Bool'. */ +#undef HAVE__BOOL + +/* Define to 1 if `lstat' dereferences a symlink specified with a trailing + slash. */ +#undef LSTAT_FOLLOWS_SLASHED_SYMLINK + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* The machine triplet of the target system */ +#undef TARGET_SYSTEM + +/* Define to 1 if your declares `struct tm'. */ +#undef TM_IN_SYS_TIME + +/* Version number of package */ +#undef VERSION + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to rpl_malloc if the replacement function should be used. */ +#undef malloc + +/* Define to `unsigned int' if does not define. */ +#undef size_t diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/configure b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/configure new file mode 100755 index 00000000000..f9c831aeb7d --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/configure @@ -0,0 +1,7789 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.68 for dvisvgm 1.0.10. +# +# Report bugs to . +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: martin.gieseking@uos.de about your system, including +$0: any error possibly output before this message. Then +$0: install a modern shell, or manually run the script +$0: under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='dvisvgm' +PACKAGE_TARNAME='dvisvgm' +PACKAGE_VERSION='1.0.10' +PACKAGE_STRING='dvisvgm 1.0.10' +PACKAGE_BUGREPORT='martin.gieseking@uos.de' +PACKAGE_URL='' + +ac_unique_file="src" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +AM_LDFLAGS +AM_CPPFLAGS +EXTRA_LIBS +DATE +LIBOBJS +FREETYPE_LIBS +FREETYPE_CFLAGS +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG +EGREP +GREP +CPP +RANLIB +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +ac_ct_CC +CFLAGS +CC +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CXX +CPPFLAGS +LDFLAGS +CXXFLAGS +CXX +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +with_zlib +' + ac_precious_vars='build_alias +host_alias +target_alias +CXX +CXXFLAGS +LDFLAGS +LIBS +CPPFLAGS +CCC +CC +CFLAGS +CPP +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR +FREETYPE_CFLAGS +FREETYPE_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # 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 1.0.10 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/dvisvgm] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of dvisvgm 1.0.10:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-zlib=DIR location of the zlib library + +Some influential environment variables: + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CC C compiler command + CFLAGS C compiler flags + CPP C preprocessor + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path + FREETYPE_CFLAGS + C compiler flags for FREETYPE, overriding pkg-config + FREETYPE_LIBS + linker flags for FREETYPE, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +dvisvgm configure 1.0.10 +generated by GNU Autoconf 2.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## -------------------------------------- ## +## Report this to martin.gieseking@uos.de ## +## -------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by dvisvgm $as_me 1.0.10, which was +generated by GNU Autoconf 2.68. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +DATE="December 2011" + +ac_config_headers="$ac_config_headers config.h" + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if ${ac_cv_target+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- +am__api_version='1.11' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$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 +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$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_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$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 +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='dvisvgm' + VERSION='1.0.10' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + + +cat >>confdefs.h <<_ACEOF +#define TARGET_SYSTEM "$target" +_ACEOF + + +# Checks for programs. +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$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 +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$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_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 +$as_echo_n "checking whether the C++ compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C++ compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 +$as_echo_n "checking for C++ compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$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 +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$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_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$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 +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$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 +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$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_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$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' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +for ac_func in ftime gettimeofday +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in sys/time.h sys/timeb.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether termios.h defines TIOCGWINSZ" >&5 +$as_echo_n "checking whether termios.h defines TIOCGWINSZ... " >&6; } +if ${ac_cv_sys_tiocgwinsz_in_termios_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#ifdef TIOCGWINSZ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + ac_cv_sys_tiocgwinsz_in_termios_h=yes +else + ac_cv_sys_tiocgwinsz_in_termios_h=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5 +$as_echo "$ac_cv_sys_tiocgwinsz_in_termios_h" >&6; } + +if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5 +$as_echo_n "checking whether sys/ioctl.h defines TIOCGWINSZ... " >&6; } +if ${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#ifdef TIOCGWINSZ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes +else + ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5 +$as_echo "$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6; } + + if test $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h = yes; then + +$as_echo "#define GWINSZ_IN_SYS_IOCTL 1" >>confdefs.h + + fi +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "kpathsea/kpathsea.h" "ac_cv_header_kpathsea_kpathsea_h" "$ac_includes_default" +if test "x$ac_cv_header_kpathsea_kpathsea_h" = xyes; then : + +else + as_fn_error $? "please install the kpathsea development package" "$LINENO" 5 +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for kpse_find_file in -lkpathsea" >&5 +$as_echo_n "checking for kpse_find_file in -lkpathsea... " >&6; } +if ${ac_cv_lib_kpathsea_kpse_find_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lkpathsea $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char kpse_find_file (); +int +main () +{ +return kpse_find_file (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_kpathsea_kpse_find_file=yes +else + ac_cv_lib_kpathsea_kpse_find_file=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kpathsea_kpse_find_file" >&5 +$as_echo "$ac_cv_lib_kpathsea_kpse_find_file" >&6; } +if test "x$ac_cv_lib_kpathsea_kpse_find_file" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBKPATHSEA 1 +_ACEOF + + LIBS="-lkpathsea $LIBS" + +else + as_fn_error $? "libkpathsea not found, please install the corresponding package first" "$LINENO" 5 +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking kpathsea version" >&5 +$as_echo_n "checking kpathsea version... " >&6; } +if test "$cross_compiling" = yes; then : + kpseversion=unknown +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + int main() { + FILE *f; + f = fopen("kpseversion", "w"); + if(!f) exit(1); + fprintf(f, "%s\n", KPSEVERSION); + fclose(f); + exit(0); + } +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + kpseversion=`cat kpseversion|sed 's/kpathsea version //'` +else + kpseversion= +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$kpseversion\"" >&5 +$as_echo "\"$kpseversion\"" >&6; } +rm -f kpseversion +if test -z "$kpseversion"; then + as_fn_error $? "Could not compile a simple kpathsea program -- check your installation" "$LINENO" 5 +fi + + +# Check how to link potracelib +HAVE_LIBPOTRACE=1 +ac_fn_c_check_header_mongrel "$LINENO" "potracelib.h" "ac_cv_header_potracelib_h" "$ac_includes_default" +if test "x$ac_cv_header_potracelib_h" = xyes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5 +$as_echo_n "checking for sqrt in -lm... " >&6; } +if ${ac_cv_lib_m_sqrt+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sqrt (); +int +main () +{ +return sqrt (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_sqrt=yes +else + ac_cv_lib_m_sqrt=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrt" >&5 +$as_echo "$ac_cv_lib_m_sqrt" >&6; } +if test "x$ac_cv_lib_m_sqrt" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBM 1 +_ACEOF + + LIBS="-lm $LIBS" + +fi + # required to pass potrace check + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for potrace_trace in -lpotrace" >&5 +$as_echo_n "checking for potrace_trace in -lpotrace... " >&6; } +if ${ac_cv_lib_potrace_potrace_trace+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpotrace $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char potrace_trace (); +int +main () +{ +return potrace_trace (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_potrace_potrace_trace=yes +else + ac_cv_lib_potrace_potrace_trace=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_potrace_potrace_trace" >&5 +$as_echo "$ac_cv_lib_potrace_potrace_trace" >&6; } +if test "x$ac_cv_lib_potrace_potrace_trace" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPOTRACE 1 +_ACEOF + + LIBS="-lpotrace $LIBS" + +else + HAVE_LIBPOTRACE=0 +fi + +else + HAVE_LIBPOTRACE=0 +fi + + + +if test "$HAVE_LIBPOTRACE" -eq 0; then + AM_CPPFLAGS="$AM_CXXFLAGS -I\${srcdir}/../potracelib -I\${srcdir}/../../potracelib" + EXTRA_LIBS="$EXTRA_LIBS ../potracelib/libpotrace.a " + { $as_echo "$as_me:${as_lineno-$LINENO}: Using bundled potrace library" >&5 +$as_echo "$as_me: Using bundled potrace library" >&6;} +fi + + +# Check how to link Ghostscript +HAVE_LIBGS=1 +ac_fn_c_check_header_mongrel "$LINENO" "ghostscript/iapi.h" "ac_cv_header_ghostscript_iapi_h" "$ac_includes_default" +if test "x$ac_cv_header_ghostscript_iapi_h" = xyes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gsapi_new_instance in -lgs" >&5 +$as_echo_n "checking for gsapi_new_instance in -lgs... " >&6; } +if ${ac_cv_lib_gs_gsapi_new_instance+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgs $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gsapi_new_instance (); +int +main () +{ +return gsapi_new_instance (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_gs_gsapi_new_instance=yes +else + ac_cv_lib_gs_gsapi_new_instance=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gs_gsapi_new_instance" >&5 +$as_echo "$ac_cv_lib_gs_gsapi_new_instance" >&6; } +if test "x$ac_cv_lib_gs_gsapi_new_instance" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBGS 1 +_ACEOF + + LIBS="-lgs $LIBS" + +else + HAVE_LIBGS=0 +fi + +else + HAVE_LIBGS=0 +fi + + + +if test "$HAVE_LIBGS" -eq 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDL 1 +_ACEOF + + LIBS="-ldl $LIBS" + +else + +$as_echo "#define DISABLE_GS 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: PostScript support disabled" >&5 +$as_echo "$as_me: WARNING: PostScript support disabled" >&2;} +fi + +else + # query Ghostscript version + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ghostscript version" >&5 +$as_echo_n "checking Ghostscript version... " >&6; } + if test "$cross_compiling" = yes; then : + gsversion=unknown +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + int main () { + gsapi_revision_t r; + if (gsapi_revision(&r, sizeof(gsapi_revision_t)) == 0) { + FILE *f; + f = fopen("gsversion", "w"); + if (!f) exit(1); + fprintf(f, "%ld\n", r.revision); + fclose(f); + exit(0); + } + } +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gsversion=`cat gsversion` +else + gsversion= +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$gsversion\"" >&5 +$as_echo "\"$gsversion\"" >&6; } + rm -f gsversion + if test "$gsversion" -lt 831; then + # current Ghostscript API was introduced in version 8.31 + # older versions are not supported + LIBS=`echo $LIBS | sed "s/-lgs //" $LIBS` + +$as_echo "#define DISABLE_GS 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ghostscript version < 8.31 found; PostScript support disabled" >&5 +$as_echo "$as_me: WARNING: Ghostscript version < 8.31 found; PostScript support disabled" >&2;} + fi +fi + +# Check for pkg-config + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi + +# Check for libraries. + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE" >&5 +$as_echo_n "checking for FREETYPE... " >&6; } + +if test -n "$FREETYPE_CFLAGS"; then + pkg_cv_FREETYPE_CFLAGS="$FREETYPE_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FREETYPE_CFLAGS=`$PKG_CONFIG --cflags "freetype2" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$FREETYPE_LIBS"; then + pkg_cv_FREETYPE_LIBS="$FREETYPE_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FREETYPE_LIBS=`$PKG_CONFIG --libs "freetype2" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + FREETYPE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "freetype2" 2>&1` + else + FREETYPE_PKG_ERRORS=`$PKG_CONFIG --print-errors "freetype2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$FREETYPE_PKG_ERRORS" >&5 + + as_fn_error $? "Package requirements (freetype2) were not met: + +$FREETYPE_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables FREETYPE_CFLAGS +and FREETYPE_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details." "$LINENO" 5 + +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables FREETYPE_CFLAGS +and FREETYPE_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details" "$LINENO" 5; } + +else + FREETYPE_CFLAGS=$pkg_cv_FREETYPE_CFLAGS + FREETYPE_LIBS=$pkg_cv_FREETYPE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi +CXXFLAGS="$CXXFLAGS ${FREETYPE_CFLAGS}" +LIBS="$LIBS ${FREETYPE_LIBS}" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzopen in -lz" >&5 +$as_echo_n "checking for gzopen in -lz... " >&6; } +if ${ac_cv_lib_z_gzopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gzopen (); +int +main () +{ +return gzopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_gzopen=yes +else + ac_cv_lib_z_gzopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzopen" >&5 +$as_echo "$ac_cv_lib_z_gzopen" >&6; } +if test "x$ac_cv_lib_z_gzopen" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBZ 1 +_ACEOF + + LIBS="-lz $LIBS" + +fi + + +# Check for header files. +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do + as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } +if eval \${$as_ac_Header+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include <$ac_hdr> + +int +main () +{ +if ((DIR *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_ac_Header=yes" +else + eval "$as_ac_Header=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_ac_Header + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +_ACEOF + +ac_header_dirent=$ac_hdr; break +fi + +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dir; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_opendir+:} false; then : + break +fi +done +if ${ac_cv_search_opendir+:} false; then : + +else + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' x; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_opendir+:} false; then : + break +fi +done +if ${ac_cv_search_opendir+:} false; then : + +else + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +for ac_header in libintl.h stdlib.h string.h strings.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +# Check for typedefs, structures, and compiler characteristics. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if ${ac_cv_header_stdbool_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifndef bool + "error: bool is not defined" +#endif +#ifndef false + "error: false is not defined" +#endif +#if false + "error: false is not 0" +#endif +#ifndef true + "error: true is not defined" +#endif +#if true != 1 + "error: true is not 1" +#endif +#ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" +#endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + +int +main () +{ + + bool e = &s; + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdbool_h=yes +else + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } +ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE__BOOL 1 +_ACEOF + + +fi + +if test $ac_cv_header_stdbool_h = yes; then + +$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_const=yes +else + ac_cv_c_const=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +$as_echo "#define const /**/" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 +$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } +if ${ac_cv_struct_tm+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include + +int +main () +{ +struct tm tm; + int *p = &tm.tm_sec; + return !p; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_struct_tm=time.h +else + ac_cv_struct_tm=sys/time.h +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 +$as_echo "$ac_cv_struct_tm" >&6; } +if test $ac_cv_struct_tm = sys/time.h; then + +$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h + +fi + + +# Check for library functions. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether closedir returns void" >&5 +$as_echo_n "checking whether closedir returns void... " >&6; } +if ${ac_cv_func_closedir_void+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_closedir_void=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header_dirent> +#ifndef __cplusplus +int closedir (); +#endif + +int +main () +{ +return closedir (opendir (".")) != 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_closedir_void=no +else + ac_cv_func_closedir_void=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_closedir_void" >&5 +$as_echo "$ac_cv_func_closedir_void" >&6; } +if test $ac_cv_func_closedir_void = yes; then + +$as_echo "#define CLOSEDIR_VOID 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 +$as_echo_n "checking for error_at_line... " >&6; } +if ${ac_cv_lib_error_at_line+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +error_at_line (0, 0, "", 0, "an error occurred"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_error_at_line=yes +else + ac_cv_lib_error_at_line=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 +$as_echo "$ac_cv_lib_error_at_line" >&6; } +if test $ac_cv_lib_error_at_line = no; then + case " $LIBOBJS " in + *" error.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS error.$ac_objext" + ;; +esac + +fi + +for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_malloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *malloc (); +#endif + +int +main () +{ +return ! malloc (0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_malloc_0_nonnull=yes +else + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then : + +$as_echo "#define HAVE_MALLOC 1" >>confdefs.h + +else + $as_echo "#define HAVE_MALLOC 0" >>confdefs.h + + case " $LIBOBJS " in + *" malloc.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS malloc.$ac_objext" + ;; +esac + + +$as_echo "#define malloc rpl_malloc" >>confdefs.h + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 +$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } +if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f conftest.sym conftest.file +echo >conftest.file +if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then + if test "$cross_compiling" = yes; then : + ac_cv_func_lstat_dereferences_slashed_symlink=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + /* Linux will dereference the symlink and fail, as required by POSIX. + That is better in the sense that it means we will not + have to compile and use the lstat wrapper. */ + return lstat ("conftest.sym/", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_lstat_dereferences_slashed_symlink=yes +else + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +else + # If the `ln -s' command failed, then we probably don't even + # have an lstat function. + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f conftest.sym conftest.file + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 +$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } + +test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && + +cat >>confdefs.h <<_ACEOF +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +_ACEOF + + +if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then + case " $LIBOBJS " in + *" lstat.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS lstat.$ac_objext" + ;; +esac + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5 +$as_echo_n "checking whether stat accepts an empty string... " >&6; } +if ${ac_cv_func_stat_empty_string_bug+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_stat_empty_string_bug=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + return stat ("", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_stat_empty_string_bug=no +else + ac_cv_func_stat_empty_string_bug=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5 +$as_echo "$ac_cv_func_stat_empty_string_bug" >&6; } +if test $ac_cv_func_stat_empty_string_bug = yes; then + case " $LIBOBJS " in + *" stat.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS stat.$ac_objext" + ;; +esac + + +cat >>confdefs.h <<_ACEOF +#define HAVE_STAT_EMPTY_STRING_BUG 1 +_ACEOF + +fi + +for ac_func in vprintf +do : + ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" +if test "x$ac_cv_func_vprintf" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VPRINTF 1 +_ACEOF + +ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" +if test "x$ac_cv_func__doprnt" = xyes; then : + +$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h + +fi + +fi +done + + +for ac_func in memset strcasecmp strtol +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +# add options for selection of "optional" library locations +# currently these libraries are mandatory; the --with-foo options +# are used to specify the locations explicitely + + +# Check whether --with-zlib was given. +if test "${with_zlib+set}" = set; then : + withval=$with_zlib; if test "$withval" != no; then + if test "$withval" != yes; then + ZLIB_DIR=$withval + fi + fi +fi + + +if test "$withval" != no; then + if test -n "$ZLIB_DIR"; then + CPPFLAGS="$CPPFLAGS -I$ZLIB_DIR -I$ZLIB_DIR/include" + LDFLAGS="$LDFLAGS -L$ZLIB_DIR/lib" + fi +fi + + + + + +ac_config_files="$ac_config_files Makefile potracelib/Makefile src/Makefile tests/Makefile doc/dvisvgm.txt doc/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 +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by dvisvgm $as_me 1.0.10, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +dvisvgm config.status 1.0.10 +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "potracelib/Makefile") CONFIG_FILES="$CONFIG_FILES potracelib/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; + "doc/dvisvgm.txt") CONFIG_FILES="$CONFIG_FILES doc/dvisvgm.txt" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/configure.ac b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/configure.ac new file mode 100644 index 00000000000..39a012bd760 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/configure.ac @@ -0,0 +1,157 @@ +# This file is part of dvisvgm +# Copyright (C) 2005-2011 Martin Gieseking +# +# Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.59) +AC_INIT([dvisvgm],[1.0.10],[martin.gieseking@uos.de]) +DATE="December 2011" +AC_CONFIG_SRCDIR(src) +AC_CONFIG_HEADER(config.h) +AC_CANONICAL_HOST +AC_CANONICAL_TARGET +AM_INIT_AUTOMAKE + +AH_TEMPLATE([TARGET_SYSTEM], [The machine triplet of the target system]) +AC_DEFINE_UNQUOTED([TARGET_SYSTEM], ["$target"]) + +# Checks for programs. +AC_PROG_CXX +AC_PROG_CC + +AC_PROG_RANLIB +AC_LANG(C) + +AC_CHECK_FUNCS([ftime gettimeofday]) +AC_CHECK_HEADERS([sys/time.h sys/timeb.h]) +AC_HEADER_TIOCGWINSZ + +AC_CHECK_HEADER([kpathsea/kpathsea.h], , + [AC_MSG_ERROR([please install the kpathsea development package])]) +AC_CHECK_LIB(kpathsea, kpse_find_file, , + [AC_MSG_ERROR([libkpathsea not found, please install the corresponding package first])]) + +AC_MSG_CHECKING([kpathsea version]) +AC_RUN_IFELSE([AC_LANG_SOURCE([#include + #include + int main() { + FILE *f; + f = fopen("kpseversion", "w"); + if(!f) exit(1); + fprintf(f, "%s\n", KPSEVERSION); + fclose(f); + exit(0); + }])], + [kpseversion=`cat kpseversion|sed 's/kpathsea version //'`], [kpseversion=], [kpseversion=unknown]) +AC_MSG_RESULT("$kpseversion") +rm -f kpseversion +if test -z "$kpseversion"; then + AC_MSG_ERROR([Could not compile a simple kpathsea program -- check your installation]) +fi + + +# Check how to link potracelib +HAVE_LIBPOTRACE=1 +AC_CHECK_HEADER([potracelib.h], + [AC_CHECK_LIB(m, sqrt) # required to pass potrace check + AC_CHECK_LIB(potrace, potrace_trace, , HAVE_LIBPOTRACE=0)], HAVE_LIBPOTRACE=0) + +if test "$HAVE_LIBPOTRACE" -eq 0; then + AM_CPPFLAGS="$AM_CXXFLAGS -I\${srcdir}/../potracelib -I\${srcdir}/../../potracelib" + EXTRA_LIBS="$EXTRA_LIBS ../potracelib/libpotrace.a " + AC_MSG_NOTICE([Using bundled potrace library]) +fi + + +# Check how to link Ghostscript +HAVE_LIBGS=1 +AC_CHECK_HEADER([ghostscript/iapi.h], + AC_CHECK_LIB(gs, gsapi_new_instance, , HAVE_LIBGS=0), HAVE_LIBGS=0) + +if test "$HAVE_LIBGS" -eq 0; then + AC_CHECK_LIB(dl, dlopen, , + [AC_DEFINE(DISABLE_GS, 1, [Set to 1 if PostScript support is to be disabled]) + AC_MSG_WARN(PostScript support disabled)]) +else + # query Ghostscript version + AC_MSG_CHECKING([Ghostscript version]) + AC_RUN_IFELSE([AC_LANG_SOURCE([#include + #include + int main () { + gsapi_revision_t r; + if (gsapi_revision(&r, sizeof(gsapi_revision_t)) == 0) { + FILE *f; + f = fopen("gsversion", "w"); + if (!f) exit(1); + fprintf(f, "%ld\n", r.revision); + fclose(f); + exit(0); + } + }])], + [gsversion=`cat gsversion`], [gsversion=], [gsversion=unknown]) + AC_MSG_RESULT("$gsversion") + rm -f gsversion + if test "$gsversion" -lt 831; then + # current Ghostscript API was introduced in version 8.31 + # older versions are not supported + LIBS=`echo $LIBS | sed "s/-lgs //" $LIBS` + AC_DEFINE(DISABLE_GS, 1, [Set to 1 if PostScript support should be disabled]) + AC_MSG_WARN([Ghostscript version < 8.31 found; PostScript support disabled]) + fi +fi + +# Check for pkg-config +PKG_PROG_PKG_CONFIG + +# Check for libraries. +PKG_CHECK_MODULES([FREETYPE], [freetype2]) +CXXFLAGS="$CXXFLAGS ${FREETYPE_CFLAGS}" +LIBS="$LIBS ${FREETYPE_LIBS}" + +AC_CHECK_LIB(z, gzopen) + +# Check for header files. +AC_HEADER_DIRENT +AC_HEADER_STDC +AC_CHECK_HEADERS([libintl.h stdlib.h string.h strings.h unistd.h]) + +# Check for typedefs, structures, and compiler characteristics. +AC_HEADER_STDBOOL +AC_C_CONST +AC_C_INLINE +AC_TYPE_SIZE_T +AC_STRUCT_TM + +# Check for library functions. +AC_FUNC_CLOSEDIR_VOID +AC_FUNC_ERROR_AT_LINE +AC_FUNC_MALLOC +AC_FUNC_STAT +AC_FUNC_VPRINTF +AC_CHECK_FUNCS([memset strcasecmp strtol]) + +# add options for selection of "optional" library locations +# currently these libraries are mandatory; the --with-foo options +# are used to specify the locations explicitely + +AC_ARG_WITH(zlib,[ --with-zlib=DIR location of the zlib library], + [if test "$withval" != no; then + if test "$withval" != yes; then + ZLIB_DIR=$withval + fi + fi]) + +if test "$withval" != no; then + if test -n "$ZLIB_DIR"; then + CPPFLAGS="$CPPFLAGS -I$ZLIB_DIR -I$ZLIB_DIR/include" + LDFLAGS="$LDFLAGS -L$ZLIB_DIR/lib" + fi +fi + +AC_SUBST(DATE) +AC_SUBST(EXTRA_LIBS) +AC_SUBST(AM_CPPFLAGS) +AC_SUBST(AM_LDFLAGS) +AC_CONFIG_FILES([Makefile potracelib/Makefile src/Makefile tests/Makefile doc/dvisvgm.txt doc/Makefile]) +AC_OUTPUT + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/Makefile.am new file mode 100644 index 00000000000..f8ff1dfe3cc --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/Makefile.am @@ -0,0 +1,39 @@ +## This file is part of dvisvgm +## Copyright (C) 2005-2011 Martin Gieseking +## +## Process this file with automake. + +man_MANS = dvisvgm.1 +EXTRA_DIST = $(man_MANS) + +dvisvgm.1: dvisvgm.txt + if [ `type -p a2x` ]; then \ + a2x -dmanpage -fmanpage -L -a icons -a 'iconsdir=.' $<; \ + rm -f dvisvgm.xml; \ + fi + +dvisvgm.pdf: dvisvgm.1 + echo '[ /Author (Martin Gieseking) /Title (dvisvgm manual page) /Subject (manual page of dvisvgm @VERSION@) /DOCINFO pdfmark' >tmp.ps + man -t ./$< >>tmp.ps + ps2pdf tmp.ps $@ + rm -f tmp.ps + +dvi-pdf: dvisvgm.dvi + dvipdfm $< + rm -f $< + +dvisvgm.dvi: dvisvgm.1 + groff -Tdvi -mandoc ./$< >$@ + +dvisvgm.html: dvisvgm.txt + asciidoc -a icons -a 'iconsdir=.' -a badges -a 'revnumber=@VERSION@' --unsafe -dmanpage $< + +html: dvisvgm.html +man: dvisvgm.1 +pdf: dvisvgm.pdf + +clean: + rm -f dvisvgm.pdf dvisvgm.html dvisvgm.xml dvisvgm.1 dvisvgm.txt + +distclean-local: + rm -f dvisvgm.1 diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/Makefile.in new file mode 100644 index 00000000000..d5cbd4e068e --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/Makefile.in @@ -0,0 +1,456 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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. + +@SET_MAKE@ +VPATH = @srcdir@ +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@ +target_triplet = @target@ +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/dvisvgm.txt.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = dvisvgm.txt +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +man1dir = $(mandir)/man1 +am__installdirs = "$(DESTDIR)$(man1dir)" +NROFF = nroff +MANS = $(man_MANS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_LDFLAGS = @AM_LDFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATE = @DATE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXTRA_LIBS = @EXTRA_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +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@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +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@ +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@ +sbindir = @sbindir@ +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@ +man_MANS = dvisvgm.1 +EXTRA_DIST = $(man_MANS) +all: all-am + +.SUFFIXES: +$(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 doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign doc/Makefile +.PRECIOUS: 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__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + 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): +dvisvgm.txt: $(top_builddir)/config.status $(srcdir)/dvisvgm.txt.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @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 $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-local + +dvi: dvi-am + +dvi-am: + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +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-man1 + +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 + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distclean-local 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-man1 install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-man \ + uninstall-man1 + + +dvisvgm.1: dvisvgm.txt + if [ `type -p a2x` ]; then \ + a2x -dmanpage -fmanpage -L -a icons -a 'iconsdir=.' $<; \ + rm -f dvisvgm.xml; \ + fi + +dvisvgm.pdf: dvisvgm.1 + echo '[ /Author (Martin Gieseking) /Title (dvisvgm manual page) /Subject (manual page of dvisvgm @VERSION@) /DOCINFO pdfmark' >tmp.ps + man -t ./$< >>tmp.ps + ps2pdf tmp.ps $@ + rm -f tmp.ps + +dvi-pdf: dvisvgm.dvi + dvipdfm $< + rm -f $< + +dvisvgm.dvi: dvisvgm.1 + groff -Tdvi -mandoc ./$< >$@ + +dvisvgm.html: dvisvgm.txt + asciidoc -a icons -a 'iconsdir=.' -a badges -a 'revnumber=@VERSION@' --unsafe -dmanpage $< + +html: dvisvgm.html +man: dvisvgm.1 +pdf: dvisvgm.pdf + +clean: + rm -f dvisvgm.pdf dvisvgm.html dvisvgm.xml dvisvgm.1 dvisvgm.txt + +distclean-local: + rm -f dvisvgm.1 + +# 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: diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/dvisvgm.1 b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/dvisvgm.1 new file mode 100644 index 00000000000..d61c4c2b7b3 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/dvisvgm.1 @@ -0,0 +1,927 @@ +'\" t +.\" Title: dvisvgm +.\" Author: [see the "AUTHOR" section] +.\" Generator: DocBook XSL Stylesheets v1.76.1 +.\" Date: 12/18/2011 +.\" Manual: dvisvgm Manual +.\" Source: dvisvgm 1.0.10 +.\" Language: English +.\" +.TH "DVISVGM" "1" "12/18/2011" "dvisvgm 1\&.0\&.10" "dvisvgm Manual" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +dvisvgm \- converts DVI files to the XML\-based SVG format +.SH "SYNOPSIS" +.sp +\fBdvisvgm\fR [ \fIoptions\fR ] \fIfile\fR [\&.dvi] +.SH "DESCRIPTION" +.sp +The command\-line utility \fBdvisvgm\fR converts DVI files, as generated by TeX/LaTeX, to the XML\-based scalable vector graphics format SVG\&. Since the current SVG standard 1\&.1 doesn\(cqt specify multi\-page graphics, \fBdvisvgm\fR creates separate SVG files for each DVI page\&. Because of compatibility reasons, only the first page is converted by default\&. In order to select a different page or arbitrary page sequences, use option \fB\-p\fR which is described below\&. +.sp +\fBdvisvgm\fR should properly convert all pages that are made up of fonts and rules only\&. However, the utility also supports a couple of DVI extensions defined in terms of \fIDVI specials\fR\&. For a more detailed overview, see section \fBsupport of specials\fR below\&. +.sp +As SVG is a vector based graphics format, \fBdvisvgm\fR tries to convert the glyph outlines of all used fonts into scalable path descriptions\&. The fastest way to do that is to extract the path information from PFB (PostScript Type 1) files\&. So, if \fBdvisvgm\fR is able to find a PFB file for a required font, it will read the necessary information from this file\&. +.sp +TeX\(cqs main source for font descriptions is Metafont though, which produces bitmap output\&. That\(cqs why not all obtainable TeX fonts are available in PFB format\&. In these cases \fBdvisvgm\fR tries to vectorize Metafont\(cqs output (GF fonts) by tracing the glyph bitmaps\&. The results are not as perfect as most (manually optimized) PFB outlines but are nonetheless really nice in most cases\&. +.SH "OPTIONS" +.PP +\fB\-a, \-\-trace\-all\fR=[\fIretrace\fR] +.RS 4 +This option forces dvisvgm to trace not only the actually needed glyphs but all glyphs of all bitmap fonts used in the DVI file\&. Since the tracing results are stored in the font cache, all following DVI conversions (without option +\fB\-\-trace\-all\fR) where these fonts are involved, will be much faster\&. By default, dvisvgm traces only the actually needed glyphs and adds them to the cache\&. The boolean option +\fIretrace\fR +determines how to handle glyphs already stored in the cache\&. By default, these glyphs are skipped\&. Setting argument +\fIretrace\fR +to +\fIyes\fR +or +\fItrue\fR +forces dvisvgm to trace the corresponding bitmaps again\&. +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +This option only takes affect if font caching is active\&. Thus, +\fB\-\-trace\-all\fR +cannot be combined with option +\fB\-\-cache=none\fR\&. +.sp .5v +.RE +.RE +.PP +\fB\-b, \-\-bbox\fR=\fIfmt\fR +.RS 4 +Sets the bounding box of the generated graphic to the specified format\&. The parameter +\fIfmt\fR +takes either one of the format specifiers listed below, or a sequence of four comma\- or whitespace\-separated length values +\fIx1\fR, +\fIy1\fR, +\fIx2\fR +and +\fIy2\fR\&. The latter define two diagonal corners of the bounding box\&. Each length value consists of a floating point number and an optional length unit (pt, bp, cm, mm, in, or pc)\&. If the unit is omitted, TeX points (pt) are assumed\&. +.sp +It\(cqs also possible to give only one length value +\fIl\fR\&. In this case the minimal bounding box is computed and enlarged by adding (\-\fIl\fR,\-\fIl\fR) to the upper left and (\fIl\fR,\fIl\fR) to the lower right corner\&. +.sp +Alternatively, the following format specifiers are supported: +.PP +\fBInternational DIN/ISO paper sizes\fR +.RS 4 +A\fIn\fR, B\fIn\fR, C\fIn\fR, D\fIn\fR, where +\fIn\fR +is a non\-negative integer, e\&.g\&. A4 or a4 for DIN/ISO A4 format (210mm \(mu 297mm)\&. +.RE +.PP +\fBNorth American paper sizes\fR +.RS 4 +invoice, executive, legal, letter, ledger +.RE +.PP +\fBSpecial bounding box sizes\fR +.RS 4 +.TS +tab(:); +lt lt +lt lt +lt lt. +T{ +\fBdvi\fR +T}:T{ +page size stored in the DVI file +T} +T{ +\fBmin\fR +T}:T{ +computes the minimal/tightest bounding box +T} +T{ +\fBnone\fR +T}:T{ +no bounding box is assigned +T} +.TE +.sp 1 +.RE +.RE +.PP +\fBPage orientation\fR +.RS 4 +The default page orientation for DIN/ISO and American paper sizes is +\fIportrait\fR, i\&.e\&. +\fIwidth\fR +< +\fIheight\fR\&. Appending +\fB\-landscape\fR +or simply +\fB\-l\fR +to the format string switches to +\fIlandscape\fR +mode (\fIwidth\fR +> +\fIheight\fR)\&. For symmetry reasons you can also explicitly add +\fB\-portrait\fR +or +\fB\-p\fR +to indicate the default portrait format\&. Note that these suffixes are part of the size string and not separate options\&. Thus, they must directly follow the size specifier without additional blanks\&. Furthermore, the orientation suffixes can\(cqt be used with +\fBdvi\fR, +\fBmin\fR, and +\fBnone\fR\&. +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +Option +\fB\-b, \-\-bbox\fR +only affects the bounding box and does not transform the page content\&. Hence, if you choose a landscape format, the page won\(cqt be rotated\&. +.sp .5v +.RE +.RE +.PP +\fB\-c, \-\-scale\fR=\fIsx\fR[,\fIsy\fR] +.RS 4 +Scales the page content horizontally by +\fIsx\fR +and vertically by +\fIsy\fR\&. This option is equivalent to +\fB\-TS\fR\fIsx\fR,\fIsy\fR\&. +.RE +.PP +\fB\-C, \-\-cache\fR[=\fIdir\fR] +.RS 4 +To speed up the conversion process of bitmap fonts, +\fBdvisvgm\fR +saves intermediate conversion information in cache files\&. By default, these files are stored in $HOME/\&.dvisvgm/cache\&. If you prefer a different location, use option +\fB\-\-cache\fR +to overwrite the default\&. Furthermore, it is also possible to disable the font caching mechanism completely with option +\fB\-\-cache=none\fR\&. If argument +\fIdir\fR +is omitted, dvisvgm prints the path of the default cache directory and some information about the stored fonts\&. Additionally, outdated and corrupted cache files are removed\&. +.RE +.PP +\fB\-\-color\fR +.RS 4 +Enables colorization of messages printed during the conversion process\&. The colors can be customized via the environment variable +DVISVGM_COLORS\&. See ENVIRONMENT section below for further information\&. +.RE +.PP +\fB\-e, \-\-exact\fR +.RS 4 +If this option is given, dvisvgm computes the precise bounding box of each character\&. By default, the values stored in the font\(cqs TFM file are used to determine a glyph\(cqs extent\&. As these values are intended to realize optimal character placements and are not designed to represent the exact dimensions, they don\(cqt necessarily correspond with the bounds of the visual glyphs\&. Thus, width and/or height of some glyphs may be larger than the respective TFM values\&. As a result, this can lead to clipped characters at the bounds of the SVG graphic\&. With option +\fB\-\-exact\fR, dvisvgm analyzes the actual shape of each character and derives a usually tight bounding box\&. +.RE +.PP +\fB\-h, \-\-help\fR +.RS 4 +Prints a short summary of all available command\-line options\&. +.RE +.PP +\fB\-\-libgs=filename\fR +.RS 4 +This option is only available if the Ghostscript library is not directly linked to dvisvgm and PostScript support was not completely disabled during compilation\&. In this case, dvisvgm tries to load the shared GS library dynamically during runtime\&. By default, it expects the library\(cqs name to be libgs\&.so (on Unix\-like systems) or gsdll32\&.dll (Windows)\&. Option +\fB\-\-libgs\fR +can be used to give a different name\&. Alternatively, the GS library name can also be set by the environment variable +LIBGS\&. The latter has less precedence than the command\-line option\&. +.RE +.PP +\fB\-l, \-\-list\-specials\fR +.RS 4 +Prints a list of registered special handlers and exits\&. Each handler processes a set of special statements belonging to the same category\&. The categories are usually identified by the prefix of the special statements\&. It\(cqs usually a leading word separated from the rest of the statement by a colon or a blank, e\&.g\&. +\fIcolor\fR +or +\fIps\fR\&. +.RE +.PP +\fB\-\-keep\fR +.RS 4 +Disables the removal of temporary files as created by Metafont (usually \&.gf, \&.tfm, and \&.log files)\&. +.RE +.PP +\fB\-m, \-\-map\-file\fR=\fIfile\fR +.RS 4 +Sets the map file used to look up font names and encodings\&. +\fBdvisvgm\fR +does not provide its own map file but tries to use available ones coming with +\fBdvips\fR +or +\fBdvipdfm\fR\&. If option +\fB\-m\fR +is not given, +\fBdvisvgm\fR +looks for +ps2pk\&.map, +dvipdfm\&.map, and +psfonts\&.map +(in this order)\&. Without further options, the file specified by option +\fB\-m\fR +will be used instead of the default maps\&. If you want +\fBdvisgvm\fR +to load the given file additionally to the default maps, add a leading +\fI+\fR +to the file/path, e\&.g\&. +\-\-map\-file=+myfonts\&.map\&. For further information about the file format, see the manuals of +\fBdvips\fR +and +\fBdvipdfm\fR\&. +.RE +.PP +\fB\-M, \-\-mag\fR=\fIfactor\fR +.RS 4 +Sets the maginfication factor applied in conjunction with Metafont calls prior tracing the glyphs\&. The larger this value the better the tracing results\&. Nevertheless, large magnification values can cause Metafont arithmetic errors due to number overflows\&. So, use this option with care\&. The default setting usually produces nice results\&. +.RE +.PP +\fB\-n, \-\-no\-fonts\fR[=\fIvariant\fR] +.RS 4 +If this option is given, +\fBdvisvgm\fR +doesn\(cqt create SVG font elements but uses paths instead\&. The resulting SVG files tends to be larger but concurrently more compatible with most applications that don\(cqt support SVG fonts yet\&. The optional argument +\fIvariant\fR +selects the method how to substitute fonts by paths\&. Variant 0 creates +\fIpath\fR +and +\fIuse\fR +elements\&. Variant 1 creates +\fIpath\fR +elements only\&. Option +\fB\-\-no\-fonts\fR +implies +\fB\-\-no\-styles\fR\&. +.RE +.PP +\fB\-S, \-\-no\-specials\fR[=\fInames\fR] +.RS 4 +Disable processing of special commands embedded in the DVI file\&. If no further parameter is given, all specials are ignored\&. To selectively disable sets of specials, an optional comma\-separated list of names can be appended to this option\&. A +\fIname\fR +is the unique identifier referencing the intended special handler\&. Option +\fB\-\-list\-specials\fR +lists all currently available handlers and their names\&. All unsupported special statements are silently ignored\&. +.RE +.PP +\fB\-\-no\-styles\fR +.RS 4 +By default, +\fBdvisvgm\fR +uses CSS styles and class attributes to reference fonts because it\(cqs more compact than repeatedly set the complete font information in each text element\&. However, if you prefer direct font references, the default behavior can be disabled with option +\fB\-\-no\-styles\fR\&. +.RE +.PP +\fB\-\-no\-mktexmf\fR +.RS 4 +Suppresses the generation of missing font files\&. If +\fBdvisvgm\fR +can\(cqt find a font file through the kpathsea lookup mechanism, it calls the external tools mktextfm or mktexmf by\&. This option disables these calls\&. +.RE +.PP +\fB\-o, \-\-output\fR=\fIpattern\fR +.RS 4 +Sets the name pattern of the output file\&. Parameter +\fIpattern\fR +is a string that may contain the variables +\fB%f\fR +and +\fB%p\fR\&. +\fB%f\fR +stands for the base name of the DVI file, i\&.e\&. the DVI filename without suffix, and +\fB%p\fR +is the current page number\&. By default, the pattern is +\fB%f\-%p\&.svg\fR +if the DVI file consists of more than one page, and +\fB%f\&.svg\fR +otherwise\&. That means, a DVI file +\fIfoo\&.dvi\fR +is converted to +\fIfoo\&.svg\fR +if +\fIfoo\&.dvi\fR +is a single\-page document\&. Otherwise, multiple SVG files +\fIfoo\-01\&.svg\fR, +\fIfoo\-02\&.svg\fR, etc\&. are produced\&. In Windows environments, the percent sign indicates dereferenced environment variables, and must therefore be protected by a second percent sign, e\&.g\&. +\fB\-\-output=%%f\-%%p\fR\&. +.RE +.PP +\fB\-p, \-\-page\fR=\fIranges\fR +.RS 4 +This option sets 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\&. +\fBdvisvgm\fR +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 in case option +\fB\-\-page\fR +is not given\&. Usually, page ranges consist of two numbers denoting the first and last page to be converted\&. If the conversion is to be started 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 +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 page\&. Instead, the physical page count is expected, where the first page always gets number 1\&. +.RE +.PP +\fB\-P, \-\-progress\fR[=\fIdelay\fR] +.RS 4 +Enables a simple progress indicator shown when time\-consuming operations like PostScript specials are processed\&. The indicator doesn\(cqt appear before the given delay (in seconds) has elapsed\&. The default delay value is 0\&.5 seconds\&. +.RE +.PP +\fB\-r, \-\-rotate\fR=\fIangle\fR +.RS 4 +Rotates the page content clockwise by +\fIangle\fR +degrees around the page center\&. This option is equivalent to +\fB\-TR\fR\fIangle\fR\&. +.RE +.PP +\fB\-s, \-\-stdout\fR +.RS 4 +Don\(cqt write the SVG output to a file but redirect it to +\fBstdout\fR\&. +.RE +.PP +\fB\-t, \-\-translate\fR=\fItx\fR[,\fIty\fR] +.RS 4 +Translates (moves) the page content in direction of vector (\fItx\fR,\fIty\fR)\&. This option is equivalent to +\fB\-TT\fR\fItx\fR,\fIty\fR\&. +.RE +.PP +\fB\-T, \-\-transform\fR=\fIcommands\fR +.RS 4 +Applies a sequence of transformations to the SVG content\&. Each transformation is described by a +\fIcommand\fR +beginning with a capital letter followed by a list of comma\-separated parameters\&. Following transformation commands are supported: +.PP +\fBT\fR \fItx\fR[,\fIty\fR] +.RS 4 +Translates (moves) the page in direction of vector (\fItx\fR,\fIty\fR)\&. If +\fIty\fR +is omitted, +\fIty\fR=0 is assumed\&. The expected unit length of +\fItx\fR +and +\fIty\fR +are TeX points (1pt = 1/72\&.27in)\&. However, there are several constants defined to simplify the unit conversion (see below)\&. +.RE +.PP +\fBS\fR \fIsx\fR[,\fIsy\fR] +.RS 4 +Scales the page horizontally by +\fIsx\fR +and vertically by +\fIsy\fR\&. If +\fIsy\fR +is omitted, +\fIsy\fR=\fIsx\fR +is assumed\&. +.RE +.PP +\fBR\fR \fIangle\fR[,\fIx\fR,\fIy\fR] +.RS 4 +Rotates the page clockwise by +\fIangle\fR +degrees around point (\fIx\fR,\fIy\fR)\&. If the optional arguments +\fIx\fR +and +\fIy\fR +are omitted, the page will be rotated around its center depending on the chosen page format\&. When option +\fB\-bnone\fR +is given, the rotation center is origin (0,0)\&. +.RE +.PP +\fBKX\fR \fIangle\fR +.RS 4 +Skews the page along the +\fIx\fR\-axis by +\fIangle\fR +degrees\&. Argument +\fIangle\fR +can take any value except 90+180\fIk\fR, where +\fIk\fR +is an integer\&. +.RE +.PP +\fBKY\fR \fIangle\fR +.RS 4 +Skews the page along the +\fIy\fR\-axis by +\fIangle\fR +degrees\&. Argument +\fIangle\fR +can take any value except 90+180\fIk\fR, where +\fIk\fR +is an integer\&. +.RE +.PP +\fBFH\fR [\fIy\fR] +.RS 4 +Mirrors (flips) the page at the horizontal line through point (0,\fIy\fR)\&. Omitting the optional argument leads to +\fIy\fR=\fIh\fR/2, where +\fIh\fR +denotes the page height (see +\fIpre\-defined constants\fR +below)\&. +.RE +.PP +\fBFV\fR [\fIx\fR] +.RS 4 +Mirrors (flips) the page at the vertical line through point (\fIx\fR,0)\&. Omitting the optional argument leads to +\fIx\fR=\fIw\fR/2, where +\fIw\fR +denotes the page width (see +\fIpre\-defined constants\fR +below)\&. +.RE +.PP +\fBM\fR \fIm1\fR,\&...,\fIm6\fR +.RS 4 +Applies a transformation described by the 3\(mu3 matrix ((\fIm1\fR,\fIm2\fR,\fIm3\fR),(\fIm4\fR,\fIm5\fR,\fIm6\fR),(0,0,1)), where the inner triples denote the rows\&. +.RE +.sp +.if n \{\ +.sp +.\} +.RS 4 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.br +.ps +1 +\fBNote\fR +.ps -1 +.br +All transformation commands of option +\fB\-T, \-\-transform\fR +are applied in the order of their appearance\&. Multiple commands can optionally be separated by spaces\&. In this case the whole transformation string has to be enclosed in double quotes\&. All parameters are expressions of floating point type\&. You can either give plain numbers or arithmetic terms combined by the operators +\fB+\fR +(addition), +\fB\-\fR +(substraction), +\fB*\fR +(multiplication), +\fB/\fR +(division) or +\fB%\fR +(modulo) with common associativity and precedence rules\&. Parentheses may be used as well\&. +.sp +Additionally, some pre\-defined constants are provided: +.TS +tab(:); +lt lt +lt lt +lt lt +lt lt. +T{ +\fBux\fR +T}:T{ +horizontal position of upper left page corner in TeX point units +T} +T{ +\fBuy\fR +T}:T{ +vertical position of upper left page corner in TeX point units +T} +T{ +\fBh\fR +T}:T{ +page height in TeX point units (0 in case of +\fB\-bnone\fR) +T} +T{ +\fBw\fR +T}:T{ +page width in TeX point units (0 in case of +\fB\-bnone\fR) +T} +.TE +.sp 1 +Furthermore, you can use the length constants +\fBpt\fR, +\fBmm\fR, +\fBcm\fR +and +\fBin\fR, e\&.g\&. +2cm +or +1\&.6in\&. Thus, option +\-TT1in,0R45 +moves the page content 1 inch to the right and rotates it by 45 degrees around the page center afterwards\&. +.sp +For single transformations you can also use options +\fB\-c\fR, +\fB\-t\fR +and +\fB\-r\fR\&. Note that the order in which these options are given is not significant, i\&.e\&. you can\(cqt use them to describe transformation sequences\&. They are simply independent shorthand options for common transformations\&. +.sp .5v +.RE +.RE +.SH "SUPPORT OF SPECIALS" +.sp +\fBdvisvgm\fR supports several sets of \fIspecial commands\fR that can be used to enrich DVI files with additional features, like color, graphics or hyperlinks\&. The evaluation of special commands is delegated to various handlers\&. Each handler is responsible for all special statements of the same command set, i\&.e\&. commands beginning with the same prefix\&. To get a list of actually provided special handlers, use option \fB\-\-list\-specials\fR (see above)\&. +.PP +\fBbgcolor\fR +.RS 4 +Special statement for changing the background/page color\&. Since SVG 1\&.1 doesn\(cqt support background colors, +\fBdvisvgm\fR +inserts a rectangle of the chosen color\&. In the current version, this rectangle always gets the size of the minimal bounding box\&. This command is part of the color special set but is handled separately in order to let the user turn it off\&. For an overview of the command syntax, see the documentation of +\fBdvips\fR, for instance\&. +.RE +.PP +\fBcolor\fR +.RS 4 +Statements of this command set provide instructions to change the text/paint color\&. For an overview of the exact syntax, see the documentation of +\fBdvips\fR, for instance\&. +.RE +.PP +\fBdvisvgm\fR +.RS 4 + +\fBdvisvgm\fR +offers its own small set of specials\&. The following list gives a brief overview\&. +.PP +\fBdvisvgm:raw\fR \fItext\fR +.RS 4 +Adds an arbitrary sequence of characters to the SVG output\&. +\fBdvisvgm\fR +does not perform any validation here, thus the user has to ensure that the resulting SVG is still valid\&. Parameter +\fItext\fR +may contain the macros +\fB{?x}\fR, +\fB{?y}\fR, and +\fB{?color}\fR +that are expanded to the current +\fIx\fR +or +\fIy\fR +coordinate and the current color, respectively\&. Also, macro +\fB{?nl}\fR +expands to a newline character\&. +.RE +.PP +\fBdvisvgm:img\fR \fIwidth\fR \fIheight\fR \fIfile\fR +.RS 4 +Creates an image element at the current graphic position referencing the given file\&. JPEG, PNG, and SVG images can be used here\&. However, +\fBdvisvgm\fR +does not check the file format or the file name suffix\&. The lengths +\fIwidth\fR +and +\fIheight\fR +must be given as plain floating point numbers in TeX point units (1in = 72\&.27pt)\&. +.RE +.PP +\fBdvisvgm:bbox\fR n[ew] \fIname\fR +.RS 4 +Defines or resets a local bounding box called +\fIname\fR\&. The name may consist of letters and digits\&. While processing a DVI page, dvisvgm continuously updates the (global) bounding box of the current page in order to determine the minimal rectangle containing all visible page components (characters, images, drawing elements etc\&.) Additionally to the global bounding box, the user can request an arbitrary number of named local bounding boxes\&. Once defined, these boxes are updated together with the global bounding box starting with the first character that follows the definition\&. Thus, the local boxes can be used to compute the extent of parts of the page\&. This is useful for scenarios where the generated SVG file is post\-processed\&. In conjunction with special dvisvgm:raw, the macro +\fB{?bbox \fR\fB\fIname\fR\fR\fB}\fR +expands to the four values +\fIx\fR, +\fIy\fR, +\fIw\fR, and +\fIh\fR +(separated by spaces) specifying the coordinates of the upper left corner, width, and height of the local box +\fIname\fR\&. If box +\fIname\fR +wasn\(cqt previously defined, all four values equal zero\&. +.RE +.PP +\fBdvisvgm:bbox\fR \fIwidth\fR \fIheight\fR [\fIdepth\fR] +.RS 4 +Updates the bounding box of the current page by embedding a virtual rectangle (\fIx\fR, +\fIy\fR, +\fIwidth\fR, +\fIheight\fR) where the lower left corner is located at the current DVI drawing position (\fIx\fR,\fIy\fR)\&. If the optional parameter +\fIdepth\fR +is specified, dvisvgm embeds a second rectangle (\fIx\fR, +\fIy\fR, +\fIwidth\fR, \-\fIdepth\fR)\&. The lengths +\fIwidth\fR, +\fIheight\fR +and +\fIdepth\fR +must be given as plain floating point numbers in TeX point units (1in = 72\&.27pt)\&. Depending on size and position of the virtual rectangle, this command either enlarges the overall bounding box or leaves it as is\&. It\(cqs not possible to reduce its extent\&. This special should be used in conjunction with +\fBdvisvgm:raw\fR +in order to update the viewport of the page properly\&. +.RE +.PP +\fBdvisvgm:bbox\fR a[bs] \fIx1\fR \fIy1\fR \fIx2\fR \fIy2\fR +.RS 4 +This variant of the bbox special updates the bounding box by embedding a virtual rectangle (\fIx1\fR,\fIy1\fR,\fIx2\fR,\fIy2\fR)\&. The points (\fIx1\fR,\fIy1\fR) and (\fIx2\fR,\fIy2\fR) denote two diagonal corners of the rectangle given in TeX point units\&. +.RE +.PP +\fBdvisvgm:bbox\fR f[ix] \fIx1\fR \fIy1\fR \fIx2\fR \fIy2\fR +.RS 4 +This variant of the bbox special assigns an absolute (final) bounding box to the resulting SVG\&. After executing this command, dvisvgm doesn\(cqt further alter the bounding box coordinates, except this special is called again later\&. The points (\fIx1\fR,\fIy1\fR) and (\fIx2\fR,\fIy2\fR) denote two diagonal corners of the rectangle given in TeX point units\&. +.sp +The following TeX snippet adds two raw SVG elements to the output and updates the bounding box accordingly: +.sp +.if n \{\ +.RS 4 +.\} +.nf +\especial{dvisvgm:raw } +\especial{dvisvgm:bbox 20 10 10} + +\especial{dvisvgm:raw } +\especial{dvisvgm:bbox abs 10 200 100 250} +.fi +.if n \{\ +.RE +.\} +.RE +.RE +.PP +\fBem\fR +.RS 4 +These specials were introduced with the emTeX distribution by Eberhard Mattes\&. They provide line drawing statements, instructions for embedding MSP, PCX, and BMP image files, as well as two PCL commands\&. +\fBdvisvgm\fR +supports only the line drawing statements and ignores all other em specials silently\&. A description of the command syntax can be found in the DVI driver documentation coming with emTeX (see CTAN)\&. +.RE +.PP +\fBps\fR +.RS 4 +The famous DVI driver +\fBdvips\fR +introduced its own set of specials in order to embed PostScript code into DVI files, which greatly improves the capabilities of DVI documents\&. One aim of +\fBdvisvgm\fR +is to completely evaluate all PostScript snippets and to convert a large amount of it to SVG\&. However, in contrast to +\fBdvips\fR, +\fBdvisvgm\fR +uses floating point arithmetics to compute the precise position of each graphic element, i\&.e\&. it doesn\(cqt round the corrdinates\&. Therefore, the relative locations of the graphic elements may slightly differ from those computed by +\fBdvips\fR\&. +.sp +Since PostScript is a rather complex language, +\fBdvisvgm\fR +does not try to implement its own PostScript interpreter but relies on Ghostscript instead\&. If the Ghostscript library was not linked while building dvisvgm, it is looked up and dynamically loaded during runtime\&. In this case, dvisvgm looks for +\fIlibgs\&.so\fR +on Unix\-like systems, and for +\fIgsdll32\&.dll\fR +on Windows\&. You can override these default file names with the environment variable +LIBGS\&. The library must be installed and must be reachable through the ld search path (*nix) or the PATH environment variable (Windows)\&. If it cannot be found, the evaluation of PostScript specials is disabled\&. Use option +\fB\-\-list\-specials\fR +to check whether PS support is available, i\&.e\&. the entry +\fIps\fR +is present\&. +.RE +.PP +\fBtpic\fR +.RS 4 +The TPIC special set defines instructions for drawing simple geometric objects\&. Some LaTeX packages, like eepic and tplot, use these specials to describe graphics\&. +.RE +.SH "EXAMPLES" +.sp +.if n \{\ +.RS 4 +.\} +.nf +dvisvgm file +.fi +.if n \{\ +.RE +.\} +.sp +Converts first page of \fIfile\&.dvi\fR to \fIfile\&.svg\fR\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +dvisvgm \-z file +.fi +.if n \{\ +.RE +.\} +.sp +Converts first page of \fIfile\&.dvi\fR to \fIfile\&.svgz\fR with default compression level 9\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +dvisvgm \-p5 \-z3 \-ba4\-l \-onewfile file +.fi +.if n \{\ +.RE +.\} +.sp +Converts fifth page of \fIfile\&.dvi\fR to \fInewfile\&.svgz\fR with compression level 3\&. The bounding box is set to DIN/ISO A4 in landscape format\&. +.sp +.if n \{\ +.RS 4 +.\} +.nf +dvisvgm \-\-transform="R20,w/3,2h/5 T1cm,1cm S2,3" file +.fi +.if n \{\ +.RE +.\} +.sp +Converts first page of \fIfile\&.dvi\fR to \fIfile\&.svg\fR where three transformations are applied\&. +.SH "ENVIRONMENT" +.sp +\fBdvisvgm\fR uses the \fBkpathsea\fR library for locating the files that it opens\&. Hence, the environment variables described in the library\(cqs documentation influence the converter\&. +.sp +If dvisvgm was linked without the Ghostscript library, and if PostScript support has not been disabled, the shared Ghostscript library is looked up during runtime\&. The environment variable LIBGS can be used to specify path and file name of the library\&. +.sp +The pre\-compiled Windows version of \fBdvisvgm\fR requires a working installation of MiKTeX 2\&.9 or above\&. To enable evaluation of PostScript specials, the original Ghostscript DLL must be present and reachable through the search path\&. +.sp +The environment variable DVISVGM_COLORS specifies the colors used to highlight various parts of dvisvgm\(cqs message output\&. It is only evaluated if option \fB\-\-color\fR is given\&. The value of DVISVGM_COLORS is a list of colon\-separated entries of the form \fIgg\fR=\fIBF\fR, where \fIgg\fR denotes one of the color group indicators listed below, and \fIBF\fR are two hexadecimal digits specifying the background (first digit) and foreground/text color (second digit)\&. The color color values are defined as follows: 0=black, 1=red, 2=green, 3=yellow, 4=blue, 5=magenta, 6=cyan, 7:gray, 8=bright red, 9=bright green, A=bright yellow, B=bright blue, C=bright magenta, D=bright cyan, E=bright gray, F=white\&. Depending on the terminal, the colors may differ\&. Rather than changing always both the text and background color, it\(cqs also possible to change only one of them: An asterisk (*) in place of a hexadecimal digit indicates the default text or background color of the terminal\&. +.sp +All malformed entries in the list are silently ignored\&. +.TS +tab(:); +lt lt +lt lt +lt lt +lt lt +lt lt +lt lt +lt lt +lt lt. +T{ +.sp +\fBer\fR +T}:T{ +.sp +error messages +T} +T{ +.sp +\fBwn\fR +T}:T{ +.sp +warning messages +T} +T{ +.sp +\fBpn\fR +T}:T{ +.sp +messages about page numbers +T} +T{ +.sp +\fBps\fR +T}:T{ +.sp +page size messages +T} +T{ +.sp +\fBfw\fR +T}:T{ +.sp +information about the files written +T} +T{ +.sp +\fBsm\fR +T}:T{ +.sp +state messages +T} +T{ +.sp +\fBtr\fR +T}:T{ +.sp +messages of the glyph tracer +T} +T{ +.sp +\fBpi\fR +T}:T{ +.sp +progress indicator +T} +.TE +.sp 1 +.sp +\fBExample:\fR 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 (*)\&. +.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\&. +.TS +tab(:); +lt lt +lt lt +lt lt +lt lt +lt lt +lt lt +lt lt +lt lt +lt lt. +T{ +.sp +\fB*\&.enc\fR +T}:T{ +.sp +Font encoding files +T} +T{ +.sp +\fB*\&.fgd\fR +T}:T{ +.sp +Font glyph data files (cache files created by dvisvgm) +T} +T{ +.sp +\fB*\&.map\fR +T}:T{ +.sp +Font map files +T} +T{ +.sp +\fB*\&.mf\fR +T}:T{ +.sp +Metafont input files +T} +T{ +.sp +\fB*\&.pfb\fR +T}:T{ +.sp +PostScript Type 1 font files +T} +T{ +.sp +\fB*\&.pro\fR +T}:T{ +.sp +PostScript header/prologue files +T} +T{ +.sp +\fB*\&.tfm\fR +T}:T{ +.sp +TeX font metric files +T} +T{ +.sp +\fB*\&.ttf\fR +T}:T{ +.sp +TrueType font files +T} +T{ +.sp +\fB*\&.vf\fR +T}:T{ +.sp +Virtual font files +T} +.TE +.sp 1 +.SH "SEE ALSO" +.sp +\fBtex(1), mf(1), mktexmf(1), grodvi(1), potrace(1)\fR, and the \fBkpathsea library\fR info documentation\&. +.SH "RESOURCES" +.PP +Project home page +.RS 4 + +http://dvisvgm\&.sourceforge\&.net +.RE +.PP +SourceForge project site +.RS 4 + +http://sourceforge\&.net/projects/dvisvgm +.RE +.SH "AUTHOR" +.sp +Written by Martin Gieseking +.SH "COPYING" +.sp +Copyright \(co 2005\-2011 by 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\&. diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/dvisvgm.txt.in b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/dvisvgm.txt.in new file mode 100644 index 00000000000..a11afb1470b --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/doc/dvisvgm.txt.in @@ -0,0 +1,567 @@ +////////////////////////////////////////////////////////////////////////// +// This file is part of dvisvgm -- the DVI to SVG converter // +// Copyright (C) 2005-2011 Martin Gieseking // +// // +// 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 . // +////////////////////////////////////////////////////////////////////////// + +dvisvgm(1) +========== +Martin Gieseking <@PACKAGE_BUGREPORT@> +:man source: dvisvgm +:man version: @VERSION@ +:man manual: dvisvgm Manual + +NAME +---- +dvisvgm - converts DVI files to the XML-based SVG format + + +SYNOPSIS +-------- +*dvisvgm* [ 'options' ] 'file' [.dvi] + + +DESCRIPTION +----------- +The command-line utility *dvisvgm* converts DVI files, as generated by TeX/LaTeX, to the +XML-based scalable vector graphics format SVG. Since the current SVG standard 1.1 doesn't +specify multi-page graphics, *dvisvgm* creates separate SVG files for each DVI page. +Because of compatibility reasons, only the first page is converted by default. In order +to select a different page or arbitrary page sequences, use option *-p* which is described below. + +*dvisvgm* should properly convert all pages that are made up of fonts and rules only. +However, the utility also supports a couple of DVI extensions defined in terms of 'DVI specials'. +For a more detailed overview, see section *support of specials* below. + +As SVG is a vector based graphics format, *dvisvgm* tries to convert the glyph +outlines of all used fonts into scalable path descriptions. The fastest way to do that +is to extract the path information from PFB (PostScript Type 1) files. So, if *dvisvgm* is able +to find a PFB file for a required font, it will read the necessary information from this file. + +TeX's main source for font descriptions is Metafont though, which produces bitmap output. That's why +not all obtainable TeX fonts are available in PFB format. In these cases *dvisvgm* tries +to vectorize Metafont's output (GF fonts) by tracing the glyph bitmaps. The results are not +as perfect as most (manually optimized) PFB outlines but are nonetheless really nice in most cases. + + +OPTIONS +------- +*-a, --trace-all*=['retrace']:: +This option forces dvisvgm to trace not only the actually needed glyphs but all +glyphs of all bitmap fonts used in the DVI file. Since the tracing results are stored in +the font cache, all following DVI conversions (without option *--trace-all*) where these +fonts are involved, will be much faster. By default, dvisvgm traces only the actually +needed glyphs and adds them to the cache. +The boolean option 'retrace' determines how to handle glyphs already stored in the cache. +By default, these glyphs are skipped. Setting argument 'retrace' to 'yes' or +'true' forces dvisvgm to trace the corresponding bitmaps again. ++ +[NOTE] +This option only takes affect if font caching is active. Thus, *--trace-all* cannot be +combined with option *--cache=none*. ++ + + +*-b, --bbox*='fmt':: +Sets the bounding box of the generated graphic to the specified format. The parameter 'fmt' +takes either one of the format specifiers listed below, or a sequence of four comma- or +whitespace-separated length values 'x1', 'y1', 'x2' and 'y2'. The latter define two diagonal +corners of the bounding box. Each length value consists of a floating point number and an optional +length unit (pt, bp, cm, mm, in, or pc). If the unit is omitted, TeX points (pt) are assumed. ++ +It's also possible to give only one length value 'l'. In this case the minimal bounding box +is computed and enlarged by adding (-'l',-'l') to the upper left and ('l','l') to the lower +right corner. ++ +Alternatively, the following format specifiers are supported: + + *International DIN/ISO paper sizes*;; + A__n__, B__n__, C__n__, D__n__, where 'n' is a non-negative integer, e.g. A4 or a4 for DIN/ISO A4 + format (210mm × 297mm). + + *North American paper sizes*;; + invoice, executive, legal, letter, ledger + + *Special bounding box sizes*;; +[horizontal] + *dvi*::: page size stored in the DVI file + *min*::: computes the minimal/tightest bounding box + *none*::: no bounding box is assigned + +// + *Page orientation*;; + The default page orientation for DIN/ISO and American paper sizes is 'portrait', + i.e. 'width' < 'height'. Appending *-landscape* or simply *-l* to the format + string switches to 'landscape' mode ('width' > 'height'). For symmetry reasons you can + also explicitly add *-portrait* or *-p* to indicate the default portrait format. + Note that these suffixes are part of the size string and not separate options. Thus, + they must directly follow the size specifier without additional blanks. + Furthermore, the orientation suffixes can't be used with *dvi*, *min*, and *none*. ++ +[NOTE] +Option *-b, --bbox* only affects the bounding box and does not transform the page content. +Hence, if you choose a landscape format, the page won't be rotated. ++ +// + +// +*-c, --scale*='sx'[,'sy']:: +Scales the page content horizontally by 'sx' and vertically by 'sy'. This option is equivalent +to *-TS*'sx','sy'. + + +*-C, --cache*[='dir']:: +To speed up the conversion process of bitmap fonts, *dvisvgm* saves intermediate conversion +information in cache files. By default, these files are stored in $HOME/.dvisvgm/cache. If you prefer +a different location, use option *--cache* to overwrite the default. Furthermore, it is also possible +to disable the font caching mechanism completely with option *--cache=none*. If argument 'dir' is omitted, +dvisvgm prints the path of the default cache directory and some information about the stored fonts. +Additionally, outdated and corrupted cache files are removed. + + +*--color*:: +Enables colorization of messages printed during the conversion process. The colors can be customized +via the environment variable +DVISVGM_COLORS+. See ENVIRONMENT section below for further information. + + +*-e, --exact*:: +If this option is given, dvisvgm computes the precise bounding box of each character. By default, +the values stored in the font's TFM file are used to determine a glyph's extent. As these values are +intended to realize optimal character placements and are not designed to represent the exact dimensions, +they don't necessarily correspond with the bounds of the visual glyphs. Thus, width and/or height +of some glyphs may be larger than the respective TFM values. As a result, this can lead to clipped +characters at the bounds of the SVG graphic. With option *--exact*, dvisvgm analyzes the actual shape +of each character and derives a usually tight bounding box. + + +*-h, --help*:: +Prints a short summary of all available command-line options. + + +*--libgs=filename*:: +This option is only available if the Ghostscript library is not directly linked to dvisvgm and +PostScript support was not completely disabled during compilation. In this case, dvisvgm tries +to load the shared GS library dynamically during runtime. By default, it expects the library's name +to be libgs.so (on Unix-like systems) or gsdll32.dll (Windows). Option *--libgs* can be used to give +a different name. Alternatively, the GS library name can also be set by the environment variable +LIBGS+. +The latter has less precedence than the command-line option. + + +*-l, --list-specials*:: +Prints a list of registered special handlers and exits. Each handler processes a set of special +statements belonging to the same category. The categories are usually identified by the +prefix of the special statements. It's usually a leading word separated from the rest of the +statement by a colon or a blank, e.g. 'color' or 'ps'. + + +*--keep*:: +Disables the removal of temporary files as created by Metafont (usually .gf, .tfm, and .log files). + + +*-m, --map-file*='file':: +Sets the map file used to look up font names and encodings. *dvisvgm* does not provide +its own map file but tries to use available ones coming with *dvips* or *dvipdfm*. If +option *-m* is not given, *dvisvgm* looks for +ps2pk.map+, +dvipdfm.map+, and +psfonts.map+ (in this order). +Without further options, the file specified by option *-m* will be used instead of the +default maps. If you want *dvisgvm* to load the given file additionally to the default maps, add a +leading '+' to the file/path, e.g. `--map-file=+myfonts.map`. +For further information about the file format, see the manuals of *dvips* and *dvipdfm*. + + +*-M, --mag*='factor':: +Sets the maginfication factor applied in conjunction with Metafont calls prior tracing the glyphs. +The larger this value the better the tracing results. Nevertheless, +large magnification values can cause Metafont arithmetic errors due to number +overflows. So, use this option with care. The default setting usually produces +nice results. + + +*-n, --no-fonts*[='variant']:: +If this option is given, *dvisvgm* doesn't create SVG font elements but uses paths instead. The +resulting SVG files tends to be larger but concurrently more compatible with most applications that +don't support SVG fonts yet. The optional argument 'variant' selects the method how to substitute fonts +by paths. Variant 0 creates 'path' and 'use' elements. Variant 1 creates 'path' elements only. +Option *--no-fonts* implies *--no-styles*. + + +*-S, --no-specials*[='names']:: +Disable processing of special commands embedded in the DVI file. If no further +parameter is given, all specials are ignored. To selectively disable sets of specials, +an optional comma-separated list of names can be appended to this option. A 'name' is the unique +identifier referencing the intended special handler. Option *--list-specials* lists all currently +available handlers and their names. +All unsupported special statements are silently ignored. + + +*--no-styles*:: +By default, *dvisvgm* uses CSS styles and class attributes to reference fonts because it's more +compact than repeatedly set the complete font information in each text element. However, if you +prefer direct font references, the default behavior can be disabled with option *--no-styles*. + + +*--no-mktexmf*:: +Suppresses the generation of missing font files. If *dvisvgm* can't find a font file +through the kpathsea lookup mechanism, it calls the external tools mktextfm or mktexmf by. +This option disables these calls. + + +*-o, --output*='pattern':: +Sets the name pattern of the output file. Parameter 'pattern' is a string that may +contain the variables *%f* and *%p*. *%f* stands for the base name of the DVI file, i.e. +the DVI filename without suffix, and *%p* is the current page number. +By default, the pattern is *%f-%p.svg* if the DVI file consists of more than one page, and +*%f.svg* otherwise. That means, a DVI file 'foo.dvi' is converted to 'foo.svg' if 'foo.dvi' +is a single-page document. Otherwise, multiple SVG files 'foo-01.svg', 'foo-02.svg', etc. are +produced. In Windows environments, the percent sign indicates dereferenced environment +variables, and must therefore be protected by a second percent sign, e.g. *--output=%%f-%%p*. + + +*-p, --page*='ranges':: +This option sets the pages to be processed. Parameter 'ranges' 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'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 in case option *--page* is not given. +Usually, page ranges consist of two numbers denoting the first and last page to be converted. +If the conversion is to be started 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: *--page=-10* converts all +pages up to page 10, *--page=10-* converts all pages starting with page 10. +Please consider that the page values don't refer to the page numbers printed on the page. +Instead, the physical page count is expected, where the first page always gets number 1. + + +*-P, --progress*[='delay']:: +Enables a simple progress indicator shown when time-consuming operations like +PostScript specials are processed. The indicator doesn't appear before the given +delay (in seconds) has elapsed. The default delay value is 0.5 seconds. + + +*-r, --rotate*='angle':: +Rotates the page content clockwise by 'angle' degrees around the page center. +This option is equivalent to *-TR*'angle'. + + +*-s, --stdout*:: +Don't write the SVG output to a file but redirect it to *stdout*. + + +*-t, --translate*='tx'[,'ty']:: +Translates (moves) the page content in direction of vector ('tx','ty'). This option is +equivalent to *-TT*'tx','ty'. + + +*-T, --transform*='commands':: +Applies a sequence of transformations to the SVG content. Each transformation is described +by a 'command' beginning with a capital letter followed by a list of comma-separated +parameters. Following transformation commands are supported: + + *T* 'tx'[,'ty'];; + Translates (moves) the page in direction of vector ('tx','ty'). If 'ty' is omitted, + 'ty'=0 is assumed. + The expected unit length of 'tx' and 'ty' are TeX points (1pt = 1/72.27in). However, there + are several constants defined to simplify the unit conversion (see below). + + *S* 'sx'[,'sy'];; + Scales the page horizontally by 'sx' and vertically by 'sy'. If 'sy' is omitted, + 'sy'='sx' is assumed. + + *R* 'angle'[,'x','y'];; + Rotates the page clockwise by 'angle' degrees around point ('x','y'). If the optional + arguments 'x' and 'y' are omitted, the page will be rotated around its center depending on + the chosen page format. When option *-bnone* is given, the rotation center is origin (0,0). + + *KX* 'angle';; + Skews the page along the 'x'-axis by 'angle' degrees. Argument 'angle' can take any value + except 90+180__k__, where 'k' is an integer. + + *KY* 'angle';; + Skews the page along the 'y'-axis by 'angle' degrees. Argument 'angle' can take any value + except 90+180__k__, where 'k' is an integer. + + *FH* ['y'];; + Mirrors (flips) the page at the horizontal line through point (0,'y'). Omitting the optional argument + leads to 'y'='h'/2, where 'h' denotes the page height (see 'pre-defined constants' below). + + *FV* ['x'];; + Mirrors (flips) the page at the vertical line through point ('x',0). Omitting the optional argument + leads to 'x'='w'/2, where 'w' denotes the page width (see 'pre-defined constants' below). + + *M* 'm1',...,'m6';; + Applies a transformation described by the 3×3 matrix + \(('m1','m2','m3'),('m4','m5','m6'),(0,0,1)), where the inner triples denote + the rows. + ++ +[NOTE] +================================================================================================= +All transformation commands of option *-T, --transform* are applied in the order of their appearance. +Multiple commands can optionally be separated by spaces. In this case the whole transformation string +has to be enclosed in double quotes. All parameters are expressions of floating point type. You can either +give plain numbers or arithmetic terms combined by the operators *+* (addition), *-* (substraction), +*** (multiplication), */* (division) or *%* (modulo) with common associativity and +precedence rules. Parentheses may be used as well. + +Additionally, some pre-defined constants are provided: + +[horizontal] +*ux*:: horizontal position of upper left page corner in TeX point units +*uy*:: vertical position of upper left page corner in TeX point units +*h*:: page height in TeX point units (0 in case of *-bnone*) +*w*:: page width in TeX point units (0 in case of *-bnone*) + +Furthermore, you can use the length constants *pt*, *mm*, *cm* and *in*, e.g. ++2cm+ or +1.6in+. Thus, option +-TT1in,0R45+ moves the page content 1 inch to the right and rotates it +by 45 degrees around the page center afterwards. + +For single transformations you can also use options *-c*, *-t* and *-r*. Note that +the order in which these options are given is not significant, i.e. you can't use them to describe +transformation sequences. They are simply independent shorthand options for common transformations. + +================================================================================================= ++ + +*-v, --verbosity*='level':: +Controls the type of messages printed during a *dvisvgm* run: +[horizontal] + *0*;; no message output + *1*;; error messages only + *2*;; warning messages only + *4*;; informational messages only + ++ +[NOTE] +By adding these values you can combine the categories. The default level is 7, i.e. all +messages are printed. ++ + + +*-V, --version*[='extended']:: +Prints the version of dvisvgm and exits. If the optional argument is set to 'yes', the +version numbers of the linked libraries are printed as well. + + +*-z, --zip*[='level']:: +Creates a compressed SVG file with suffix .svgz. The optional argument specifies the compression +level. Valid values are in the range of 1 to 9 (default value is 9). Larger values cause better +compression results but take more computation time. ++ +CAUTION: This option cannot be combined with *-s, --stdout*. + + +SUPPORT OF SPECIALS +------------------- +*dvisvgm* supports several sets of 'special commands' that can be used to enrich DVI files with additional +features, like color, graphics or hyperlinks. The evaluation of special commands is delegated to various handlers. +Each handler is responsible for all special statements of the same command set, i.e. commands beginning +with the same prefix. To get a list of actually provided special handlers, use option *--list-specials* (see above). + +*bgcolor*:: +Special statement for changing the background/page color. Since SVG 1.1 doesn't support background colors, +*dvisvgm* inserts a rectangle of the chosen color. In the current version, this rectangle always gets the size +of the minimal bounding box. This command is part of the color special set but is handled separately in order +to let the user turn it off. For an overview of the command syntax, see the documentation of *dvips*, for instance. + + +*color*:: +Statements of this command set provide instructions to change the text/paint color. For an overview of the +exact syntax, see the documentation of *dvips*, for instance. + +*dvisvgm*:: +*dvisvgm* offers its own small set of specials. The following list gives a brief overview. + *dvisvgm:raw* 'text';; + Adds an arbitrary sequence of characters to the SVG output. *dvisvgm* does not perform any validation here, + thus the user has to ensure that the resulting SVG is still valid. Parameter 'text' may + contain the macros *{?x}*, *{?y}*, and *{?color}* that are expanded to the current 'x' or 'y' coordinate + and the current color, respectively. Also, macro *{?nl}* expands to a newline character. + + *dvisvgm:img* 'width' 'height' 'file';; + Creates an image element at the current graphic position referencing the given file. JPEG, PNG, and SVG images + can be used here. However, *dvisvgm* does not check the file format or the file name suffix. The lengths 'width' + and 'height' must be given as plain floating point numbers in TeX point units (1in = 72.27pt). + + *dvisvgm:bbox* n[ew] 'name';; + Defines or resets a local bounding box called 'name'. The name may consist of letters and digits. + While processing a DVI page, dvisvgm continuously updates the (global) bounding box of the current page in order to + determine the minimal rectangle containing all visible page components (characters, images, drawing elements etc.) + Additionally to the global bounding box, the user can request an arbitrary number of named local bounding boxes. + Once defined, these boxes are updated together with the global bounding box starting with the first character that + follows the definition. Thus, the local boxes can be used to compute the extent of parts of the page. This is useful + for scenarios where the generated SVG file is post-processed. + In conjunction with special dvisvgm:raw, the macro *{?bbox 'name'}* expands to the four values 'x', 'y', 'w', and 'h' + (separated by spaces) specifying the coordinates of the upper left corner, width, and height of the local box 'name'. + If box 'name' wasn't previously defined, all four values equal zero. + + *dvisvgm:bbox* 'width' 'height' ['depth'];; + Updates the bounding box of the current page by embedding a virtual rectangle ('x', 'y', 'width', 'height') + where the lower left corner is located at the current DVI drawing position ('x','y'). If the optional parameter 'depth' + is specified, dvisvgm embeds a second rectangle ('x', 'y', 'width', -__depth__). The lengths 'width', 'height' and + 'depth' must be given as plain floating point numbers in TeX point units (1in = 72.27pt). Depending on size and position + of the virtual rectangle, this command either enlarges the overall bounding box or leaves it as is. It's not possible + to reduce its extent. This special should be used in conjunction with *dvisvgm:raw* in order to update the viewport + of the page properly. + + *dvisvgm:bbox* a[bs] 'x1' 'y1' 'x2' 'y2';; + This variant of the bbox special updates the bounding box by embedding a virtual rectangle ('x1','y1','x2','y2'). + The points ('x1','y1') and ('x2','y2') denote two diagonal corners of the rectangle given in TeX point units. + + *dvisvgm:bbox* f[ix] 'x1' 'y1' 'x2' 'y2';; + This variant of the bbox special assigns an absolute (final) bounding box to the resulting SVG. After executing + this command, dvisvgm doesn't further alter the bounding box coordinates, except this special is called again later. + The points ('x1','y1') and ('x2','y2') denote two diagonal corners of the rectangle given in TeX point units. ++ +The following TeX snippet adds two raw SVG elements to the output and updates the bounding box accordingly: ++ +------------------------------------------------------------------------------------ +\special{dvisvgm:raw } +\special{dvisvgm:bbox 20 10 10} + +\special{dvisvgm:raw } +\special{dvisvgm:bbox abs 10 200 100 250} +------------------------------------------------------------------------------------ ++ + +*em*:: +These specials were introduced with the emTeX distribution by Eberhard Mattes. They provide line drawing +statements, instructions for embedding MSP, PCX, and BMP image files, as well as two PCL commands. +*dvisvgm* supports only the line drawing statements and ignores all other em specials silently. +A description of the command syntax can be found in the DVI driver documentation coming with emTeX (see CTAN). + +// *html*:: +// The hyperref package uses a set of HTML anchor tags to indicate hyperlinks in DVI files. +// *dvisvgm* converts them to corresponding SVG elements. + +*ps*:: +The famous DVI driver *dvips* introduced its own set of specials in order to embed PostScript code into DVI files, +which greatly improves the capabilities of DVI documents. One aim of *dvisvgm* is to completely evaluate all +PostScript snippets and to convert a large amount of it to SVG. However, in contrast to *dvips*, *dvisvgm* uses floating point +arithmetics to compute the precise position of each graphic element, i.e. it doesn't round the corrdinates. Therefore, +the relative locations of the graphic elements may slightly differ from those computed by *dvips*. ++ +Since PostScript is a rather complex language, *dvisvgm* does not try to implement its own PostScript interpreter but relies on +Ghostscript instead. If the Ghostscript library was not linked while building dvisvgm, it is looked up and dynamically loaded +during runtime. In this case, dvisvgm looks for 'libgs.so' on Unix-like systems, and for 'gsdll32.dll' on Windows. +You can override these default file names with the environment variable +LIBGS+. +The library must be installed and must be reachable through the ld search path (\*nix) or the PATH environment +variable (Windows). If it cannot be found, the evaluation of PostScript specials is disabled. +Use option *--list-specials* to check whether PS support is available, i.e. the entry 'ps' is present. + +*tpic*:: +The TPIC special set defines instructions for drawing simple geometric objects. Some LaTeX packages, like +eepic and tplot, use these specials to describe graphics. + + +EXAMPLES +-------- +-------------- +dvisvgm file +-------------- +Converts first page of 'file.dvi' to 'file.svg'. + +--------------- +dvisvgm -z file +--------------- +Converts first page of 'file.dvi' to 'file.svgz' with default compression level 9. + +------------------------------------- +dvisvgm -p5 -z3 -ba4-l -onewfile file +------------------------------------- +Converts fifth page of 'file.dvi' to 'newfile.svgz' with compression level 3. +The bounding box is set to DIN/ISO A4 in landscape format. + +----------------------------------------------------- +dvisvgm --transform="R20,w/3,2h/5 T1cm,1cm S2,3" file +----------------------------------------------------- +Converts first page of 'file.dvi' to 'file.svg' where three transformations are applied. + + +ENVIRONMENT +----------- +*dvisvgm* uses the *kpathsea* library for locating the files that it opens. +Hence, the environment variables described in the library's documentation influence the converter. + +If dvisvgm was linked without the Ghostscript library, and if PostScript support has not been disabled, +the shared Ghostscript library is looked up during runtime. The environment variable +LIBGS+ can be +used to specify path and file name of the library. + +The pre-compiled Windows version of *dvisvgm* requires a working installation of MiKTeX 2.9 or above. +To enable evaluation of PostScript specials, the original Ghostscript DLL must be present and reachable +through the search path. + +The environment variable +DVISVGM_COLORS+ specifies the colors used to highlight various parts of dvisvgm's +message output. It is only evaluated if option *--color* is given. The value of +DVISVGM_COLORS+ is a list of +colon-separated entries of the form 'gg'='BF', where 'gg' denotes one of the color group indicators listed +below, and 'BF' are two hexadecimal digits specifying the background (first digit) and foreground/text color +(second digit). The color color values are defined as follows: 0=black, 1=red, 2=green, 3=yellow, 4=blue, +5=magenta, 6=cyan, 7:gray, 8=bright red, 9=bright green, A=bright yellow, B=bright blue, C=bright magenta, +D=bright cyan, E=bright gray, F=white. Depending on the terminal, the colors may differ. Rather than changing +always both the text and background color, it's also possible to change only one of them: An asterisk (*) in +place of a hexadecimal digit indicates the default text or background color of the terminal. + +All malformed entries in the list are silently ignored. + +[horizontal] +*er*:: error messages +*wn*:: warning messages +*pn*:: messages about page numbers +*ps*:: page size messages +*fw*:: information about the files written +*sm*:: state messages +*tr*:: messages of the glyph tracer +*pi*:: progress indicator + +*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 (+*+). + +FILES +----- +The location of the following files is determined by the kpathsea library. +To check the actual kpathsea configuration you can use the *kpsewhich* utility. + +[horizontal] +**.enc*:: Font encoding files +**.fgd*:: Font glyph data files (cache files created by dvisvgm) +**.map*:: Font map files +**.mf*:: Metafont input files +**.pfb*:: PostScript Type 1 font files +**.pro*:: PostScript header/prologue files +**.tfm*:: TeX font metric files +**.ttf*:: TrueType font files +**.vf*:: Virtual font files + +SEE ALSO +-------- +*tex(1), mf(1), mktexmf(1), grodvi(1), potrace(1)*, and the *kpathsea library* info documentation. + + +RESOURCES +--------- +Project home page::: http://dvisvgm.sourceforge.net +SourceForge project site::: http://sourceforge.net/projects/dvisvgm + + +AUTHOR +------ +Written by {author} <{email}> + + +COPYING +------- +Copyright (C) 2005-2011 by 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. + +// vim: set syntax=asciidoc: diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/Makefile.am new file mode 100644 index 00000000000..97bf78f50f4 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/Makefile.am @@ -0,0 +1,13 @@ +VERSION=1.8 +noinst_LIBRARIES = libpotrace.a +libpotrace_a_SOURCES = curve.c curve.h trace.c trace.h decompose.c \ + decompose.h potracelib.c potracelib.h lists.h auxiliary.h bitmap.h \ + progress.h + +curve.o: potracelib.h lists.h curve.h auxiliary.h +decompose.o: potracelib.h curve.h auxiliary.h lists.h bitmap.h decompose.h +decompose.o: progress.h +potracelib.o: potracelib.h curve.h auxiliary.h decompose.h progress.h trace.h +potracelib.o: ../config.h +trace.o: potracelib.h curve.h auxiliary.h lists.h trace.h progress.h + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/Makefile.in new file mode 100644 index 00000000000..e7ca5bae59e --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/Makefile.in @@ -0,0 +1,458 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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. + +@SET_MAKE@ + +VPATH = @srcdir@ +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@ +target_triplet = @target@ +subdir = potracelib +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +ARFLAGS = cru +libpotrace_a_AR = $(AR) $(ARFLAGS) +libpotrace_a_LIBADD = +am_libpotrace_a_OBJECTS = curve.$(OBJEXT) trace.$(OBJEXT) \ + decompose.$(OBJEXT) potracelib.$(OBJEXT) +libpotrace_a_OBJECTS = $(am_libpotrace_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(libpotrace_a_SOURCES) +DIST_SOURCES = $(libpotrace_a_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_LDFLAGS = @AM_LDFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATE = @DATE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXTRA_LIBS = @EXTRA_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +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@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = 1.8 +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +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@ +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@ +sbindir = @sbindir@ +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@ +noinst_LIBRARIES = libpotrace.a +libpotrace_a_SOURCES = curve.c curve.h trace.c trace.h decompose.c \ + decompose.h potracelib.c potracelib.h lists.h auxiliary.h bitmap.h \ + progress.h + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .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 potracelib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign potracelib/Makefile +.PRECIOUS: 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__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + 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) + -rm -f libpotrace.a + $(libpotrace_a_AR) libpotrace.a $(libpotrace_a_OBJECTS) $(libpotrace_a_LIBADD) + $(RANLIB) libpotrace.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curve.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decompose.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/potracelib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trace.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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 +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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-noinstLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -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 -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-noinstLIBRARIES ctags distclean distclean-compile \ + distclean-generic 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 pdf pdf-am ps ps-am tags uninstall \ + uninstall-am + + +curve.o: potracelib.h lists.h curve.h auxiliary.h +decompose.o: potracelib.h curve.h auxiliary.h lists.h bitmap.h decompose.h +decompose.o: progress.h +potracelib.o: potracelib.h curve.h auxiliary.h decompose.h progress.h trace.h +potracelib.o: ../config.h +trace.o: potracelib.h curve.h auxiliary.h lists.h trace.h progress.h + +# 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: diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/auxiliary.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/auxiliary.h new file mode 100644 index 00000000000..fbd1db4c166 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/auxiliary.h @@ -0,0 +1,78 @@ +/* Copyright (C) 2001-2011 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 + +/* ---------------------------------------------------------------------- */ +/* 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 */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/bitmap.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/bitmap.h new file mode 100644 index 00000000000..2df04b46fbe --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/bitmap.h @@ -0,0 +1,97 @@ +/* Copyright (C) 2001-2011 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 +#include + +/* 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 + (y)*(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) + +/* free the given bitmap. Leaves errno untouched. */ +static inline void bm_free(potrace_bitmap_t *bm) { + if (bm) { + free(bm->map); + } + free(bm); +} + +/* return new un-initialized bitmap. NULL with errno on error */ +static inline potrace_bitmap_t *bm_new(int w, int h) { + potrace_bitmap_t *bm; + int dy = (w + BM_WORDBITS - 1) / BM_WORDBITS; + + 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 *) malloc(dy * h * BM_WORDSIZE); + if (!bm->map) { + free(bm); + return NULL; + } + return bm; +} + +/* clear the given bitmap. Set all bits to c. */ +static inline void bm_clear(potrace_bitmap_t *bm, int c) { + memset(bm->map, c ? -1 : 0, bm->dy * bm->h * BM_WORDSIZE); +} + +/* duplicate the given bitmap. Return NULL on error with errno set. */ +static inline potrace_bitmap_t *bm_dup(const potrace_bitmap_t *bm) { + potrace_bitmap_t *bm1 = bm_new(bm->w, bm->h); + if (!bm1) { + return NULL; + } + memcpy(bm1->map, bm->map, bm->dy * bm->h * BM_WORDSIZE); + return bm1; +} + +/* invert the given bitmap. */ +static inline void bm_invert(potrace_bitmap_t *bm) { + int i; + for (i = 0; i < bm->dy * bm->h; i++) { + bm->map[i] ^= BM_ALLBITS; + } +} + +#endif /* BITMAP_H */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/curve.c b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/curve.c new file mode 100644 index 00000000000..414fb5de9ee --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/curve.c @@ -0,0 +1,108 @@ +/* Copyright (C) 2001-2011 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 */ + +#include +#include +#include + +#include "potracelib.h" +#include "lists.h" +#include "curve.h" + +#define SAFE_MALLOC(var, n, typ) \ + if ((var = (typ *)malloc((n)*sizeof(typ))) == NULL) goto malloc_error + +/* ---------------------------------------------------------------------- */ +/* allocate and free path objects */ + +path_t *potrace_path_new(void) { + path_t *p = NULL; + privpath_t *priv = NULL; + + SAFE_MALLOC(p, 1, path_t); + memset(p, 0, sizeof(path_t)); + SAFE_MALLOC(priv, 1, privpath_t); + memset(priv, 0, sizeof(privpath_t)); + p->priv = priv; + return p; + + malloc_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 potrace_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) { + potrace_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_MALLOC(curve->tag, n, int); + SAFE_MALLOC(curve->c, n, dpoint3_t); + SAFE_MALLOC(curve->vertex, n, dpoint_t); + SAFE_MALLOC(curve->alpha, n, double); + SAFE_MALLOC(curve->alpha0, n, double); + SAFE_MALLOC(curve->beta, n, double); + return 0; + + malloc_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; +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/curve.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/curve.h new file mode 100644 index 00000000000..e98efdf5cfd --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/curve.h @@ -0,0 +1,77 @@ +/* Copyright (C) 2001-2011 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 *potrace_path_new(void); +void potrace_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 */ + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/decompose.c b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/decompose.c new file mode 100644 index 00000000000..376af015df3 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/decompose.c @@ -0,0 +1,514 @@ +/* Copyright (C) 2001-2011 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. */ + + +#include +#include +#include +#include + +#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; yh; 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; yy1; y++) { + for (i=imin; i0) { + 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 (xhipriv->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; kpriv->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; kpriv->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, 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 = potrace_path_new(); + if (!p) { + goto error; + } + + p->priv->pt = pt; + p->priv->len = len; + p->area = area; + 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=0; y--) { + for (x=x0; xw; x+=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) { + potrace_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) { + potrace_path_free(p); + } + return -1; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/decompose.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/decompose.h new file mode 100644 index 00000000000..89b01e5045c --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/decompose.h @@ -0,0 +1,16 @@ +/* Copyright (C) 2001-2011 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 */ + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/lists.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/lists.h new file mode 100644 index 00000000000..078129afce5 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/lists.h @@ -0,0 +1,285 @@ +/* Copyright (C) 2001-2011 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 */ + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/potracelib.c b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/potracelib.c new file mode 100644 index 00000000000..c483ea335b9 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/potracelib.c @@ -0,0 +1,114 @@ +/* Copyright (C) 2001-2011 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. */ + +#include +#include + +#include "potracelib.h" +#include "curve.h" +#include "decompose.h" +#include "trace.h" +#include "progress.h" + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* 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, ¶m_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 1.10"; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/potracelib.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/potracelib.h new file mode 100644 index 00000000000..99e17e424ae --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/potracelib.h @@ -0,0 +1,139 @@ +/* Copyright (C) 2001-2011 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 */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/progress.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/progress.h new file mode 100644 index 00000000000..93a1fa3f04c --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/progress.h @@ -0,0 +1,79 @@ +/* Copyright (C) 2001-2011 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 */ + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/trace.c b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/trace.c new file mode 100644 index 00000000000..f1e88a90862 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/trace.c @@ -0,0 +1,1245 @@ +/* Copyright (C) 2001-2011 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 */ + +#include +#include +#include +#include + +#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_MALLOC(var, n, typ) \ + if ((var = (typ *)malloc((n)*sizeof(typ))) == NULL) goto malloc_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 && blen; + 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_MALLOC(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; ipt[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 + x*x; + pp->sums[i+1].xy = pp->sums[i].xy + x*y; + pp->sums[i+1].y2 = pp->sums[i].y2 + y*y; + } + return 0; + + malloc_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= 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_MALLOC(pivk, n, int); + SAFE_MALLOC(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 ilon, n, int); + + /* determine pivot points: for each i, let pivk[i] be the furthest k + such that all j with 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'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; + + malloc_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=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_MALLOC(pen, n+1, double); + SAFE_MALLOC(prev, n+1, int); + SAFE_MALLOC(clip0, n, int); + SAFE_MALLOC(clip1, n+1, int); + SAFE_MALLOC(seg0, n+1, int); + SAFE_MALLOC(seg1, n+1, int); + + /* calculate clipped paths */ + for (i=0; ilon[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; i0; 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_MALLOC(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; + + malloc_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_MALLOC(ctr, m, dpoint_t); + SAFE_MALLOC(dir, m, dpoint_t); + SAFE_MALLOC(q, m, quadform_t); + + r = privcurve_init(&pp->curve, m); + if (r) { + goto malloc_error; + } + + /* calculate "optimal" point-slope representation for each line + segment */ + for (i=0; iQ[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; + + malloc_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; ivertex[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; ivertex[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 icurve.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_MALLOC(pt, m+1, int); + SAFE_MALLOC(pen, m+1, double); + SAFE_MALLOC(len, m+1, int); + SAFE_MALLOC(opt, m+1, opti_t); + SAFE_MALLOC(convc, m, int); + SAFE_MALLOC(areac, m+1, double); + + /* pre-calculate convexity: +1 = right turn, -1 = left turn, 0 = corner */ + for (i=0; icurve.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; icurve.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 malloc_error; + } + SAFE_MALLOC(s, om, double); + SAFE_MALLOC(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; iocurve.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; + + malloc_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; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/trace.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/trace.h new file mode 100644 index 00000000000..dc2b9247adb --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/potracelib/trace.h @@ -0,0 +1,15 @@ +/* Copyright (C) 2001-2011 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 */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BgColorSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BgColorSpecialHandler.cpp new file mode 100644 index 00000000000..979d76bdd0f --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BgColorSpecialHandler.cpp @@ -0,0 +1,37 @@ +/************************************************************************* +** BgColorSpecialHandler.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include "BgColorSpecialHandler.h" +#include "ColorSpecialHandler.h" +#include "SpecialActions.h" + +using namespace std; + + +bool BgColorSpecialHandler::process (const char *prefix, istream &is, SpecialActions *actions) { + ColorSpecialHandler csh; + return csh.process(prefix, is, actions); +} + + +const char** BgColorSpecialHandler::prefixes () const { + static const char *pfx[] = {"background", 0}; + return pfx; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BgColorSpecialHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BgColorSpecialHandler.h new file mode 100644 index 00000000000..d3b0a75ccca --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BgColorSpecialHandler.h @@ -0,0 +1,34 @@ +/************************************************************************* +** BgColorSpecialHandler.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef BGCOLORSPECIALHANDLER_H +#define BGCOLORSPECIALHANDLER_H + +#include "SpecialManager.h" + +struct BgColorSpecialHandler : SpecialHandler +{ + const char* info () const {return "background color special";} + const char* name () const {return "bgcolor";} + const char** prefixes () const; + bool process (const char *prefix, std::istream &is, SpecialActions *actions); +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Bitmap.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Bitmap.cpp new file mode 100644 index 00000000000..4c2a0510bc8 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Bitmap.cpp @@ -0,0 +1,124 @@ +/************************************************************************* +** Bitmap.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "Bitmap.h" +#include "macros.h" + +using namespace std; + +Bitmap::Bitmap () : _rows(0), _cols(0), _xshift(0), _yshift(0), _bpr(0), _bytes(0) +{ +} + + +/** Constructs a Bitmap */ +Bitmap::Bitmap (int minx, int maxx, int miny , int maxy) { + resize(minx, maxx, miny, maxy); +} + + +/** Resizes the bitmap and clears all pixels. + * @param[in] minx index of leftmost pixel column + * @param[in] maxx index of rightmost pixel column + * @param[in] miny index of bottom row + * @param[in] maxy index of top row */ +void Bitmap::resize (int minx, int maxx, int miny , int maxy) { + _rows = abs(maxy-miny)+1; + _cols = abs(maxx-minx)+1; + _xshift = minx; + _yshift = miny; + _bpr = _cols/8 + (_cols % 8 ? 1 : 0); // bytes per row + _bytes.resize(_rows*_bpr); + FORALL(_bytes, vector::iterator, it) + *it = 0; +} + + +/** Sets n pixels of row r to 1 starting at pixel c. + * @param[in] r number of row + * @param[in] c number of column (pixel) + * @param[in] n number of bits to be set */ +void Bitmap::setBits (int r, int c, int n) { + r -= _yshift; + c -= _xshift; + UInt8 *byte = &_bytes[r*_bpr + c/8];// + (c%8 ? 1 : 0); + while (n > 0) { + int b = 7 - c%8; // number of leftmost bit in current byte to be set + int m = min(n, b+1); // number of bits to be set in current byte + int bitseq = (1 << m)-1; // sequence of n set bits (bits 0..n-1 are set) + bitseq <<= b-m+1; // move bit sequence so that bit b is the leftmost set bit + *byte |= UInt8(bitseq); // apply bit sequence to current byte + byte++; + n -= m; + c += m; + } +} + + +void Bitmap::forAllPixels (ForAllData &data) const { + for (int y=_rows-1; y >= 0 ; y--) { + for (int c=0; c < _bpr; c++) { + UInt8 byte = _bytes[y*_bpr+c]; + int x; + for (int b=7; (b >= 0) && ((x = 8*c+(7-b)) < _cols); b--) { + data.pixel(x, y, byte & (1 << b), *this); + } + } + } +} + + +struct BBoxData : public Bitmap::ForAllData +{ + BBoxData () : maxx(0), maxy(0) {} + void pixel (int x, int y, bool set, const Bitmap &bm) { + if (set) { + maxx = max(maxx, x); + maxy = max(maxy, y); + } + } + int maxx, maxy; +}; + + +void Bitmap::bbox (int &w, int &h) const { + BBoxData data; + forAllPixels(data); + w = data.maxx+1; + h = data.maxy+1; +} + + +ostream& Bitmap::write (ostream &os) const { +#if 0 + for (int r=_rows-1; r >= 0 ; r--) { + for (int c=0; c < _bpr; c++) { + UInt8 byte = _bytes[r*_bpr+c]; + for (int b=128; b; b>>=1) + os << (byte & b ? '*' : '-'); + os << ' '; + } + os << endl; + } +#endif + return os; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Bitmap.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Bitmap.h new file mode 100644 index 00000000000..a9a6be61b2a --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Bitmap.h @@ -0,0 +1,109 @@ +/************************************************************************* +** Bitmap.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef BITMAP_H +#define BITMAP_H + +#include +#include +#include "types.h" + + +class Bitmap +{ + public: + struct ForAllData { + virtual ~ForAllData() {} + virtual void pixel (int x, int y, bool set, Bitmap &bm) {} + virtual void pixel (int x, int y, bool set, const Bitmap &bm) {} + }; + + public: + Bitmap (); + Bitmap (int minx, int maxx, int miny , int maxy); + void resize (int minx, int maxx, int miny , int maxy); + void setBits(int r, int c, int n); + const UInt8* operator[] (int r) const {return &_bytes[r*_bpr];} + int height () const {return _rows;} + int width () const {return _cols;} + int xshift () const {return _xshift;} + int yshift () const {return _yshift;} + int bytesPerRow () const {return _bpr;} + bool empty () const {return (!_rows && !_cols) || _bytes.empty();} + void bbox (int &w, int &h) const; + void forAllPixels (ForAllData &data) const; + + template + int copy (std::vector &target, bool vflip=false) const; + +// template +// void write (std::ostream &os, const std::vector &v) const; + + std::ostream& write (std::ostream &os) const; + + private: + int _rows, _cols; ///< number of rows, columns + int _xshift, _yshift; ///< horizontal/vertical shift + int _bpr; ///< number of bytes per row + std::vector _bytes; +}; + + +/** Copies the bitmap to a new target area and reorganize the bits. + * @param[out] target points to first T of new bitmap (must be deleted after usage) + * @param[in] vflip true if the new bitmap should be flipped vertically + * @return number of Ts per row */ +template +int Bitmap::copy (std::vector &target, bool vflip) const { + const int s = sizeof(T); + const int tpr = _bpr/s + (_bpr%s ? 1 : 0); // number of Ts per row + target.resize(_rows*tpr); + for (int r=0; r < _rows; r++) { + int targetrow = vflip ? _rows-r-1 : r; + for (int b=0; b < _bpr; b++) { + T &t = target[targetrow*tpr + b/s]; + T chunk = (T)_bytes[r*_bpr+b] << (8*(s-1-b%s)); + if (b % s == 0) + t = chunk; + else + t |= chunk; + } + } + return tpr; +} + + +/* +template +void Bitmap::write (std::ostream &os, const std::vector &v) const { + const int s = sizeof(T); + const int tpr = _bpr/s + (_bpr%s ? 1 : 0); // number of Ts per row + for (int r=_rows-1; r >= 0; r--) { + for (int t=0; t < tpr; t++) { + for (T b=(T)1<<(8*s-1); b; b>>=1) + os << ((v[r*tpr+t] & b) ? '*' : '-'); + os << ' '; + } + os << std::endl; + } +}*/ + + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BoundingBox.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BoundingBox.cpp new file mode 100644 index 00000000000..c5ab55e27a9 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BoundingBox.cpp @@ -0,0 +1,253 @@ +/************************************************************************* +** BoundingBox.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include "BoundingBox.h" +#include "Matrix.h" +#include "XMLNode.h" + +using namespace std; + + +BoundingBox::BoundingBox () + : ulx(0), uly(0), lrx(0), lry(0), _valid(false), _locked(false) +{ +} + + +BoundingBox::BoundingBox (double ulxx, double ulyy, double lrxx, double lryy) + : ulx(min(ulxx,lrxx)), uly(min(ulyy,lryy)), + lrx(max(ulxx,lrxx)), lry(max(ulyy,lryy)), + _valid(true), _locked(false) +{ +} + + +BoundingBox::BoundingBox (const DPair &p1, const DPair &p2) + : ulx(min(p1.x(), p2.x())), uly(min(p1.y(), p2.y())), + lrx(max(p1.x(), p2.x())), lry(max(p1.y(), p2.y())), + _valid(true), _locked(false) +{ +} + + +BoundingBox::BoundingBox (const Length &ulxx, const Length &ulyy, const Length &lrxx, const Length &lryy) + : ulx(min(ulxx.pt(),lrxx.pt())), uly(min(ulyy.pt(),lryy.pt())), + lrx(max(ulxx.pt(),lrxx.pt())), lry(max(ulyy.pt(),lryy.pt())), + _valid(true), _locked(false) +{ +} + + +/** Removes leading and trailing whitespace from the given string. */ +static string& strip (string &str) { + size_t n=0; + while (n < str.length() && isspace(str[n])) + ++n; + str.erase(0, n); + n=str.length()-1; + while (n > 0 && isspace(str[n])) + --n; + str.erase(n+1); + return str; +} + + +/** Sets or modifies the bounding box. If 'boxstr' consists of 4 length values, + * they denote the absolute position of two diagonal corners of the box. In case + * of a single length value l the current box is enlarged by adding (-l,-l) the upper + * left and (l,l) to the lower right corner. + * @param[in] boxstr whitespace and/or comma separated string of lengths. */ +void BoundingBox::set (string boxstr) { + vector coord; + const size_t len = boxstr.length(); + size_t l=0; + strip(boxstr); + string lenstr; + do { + while (l < len && isspace(boxstr[l])) + l++; + size_t r=l; + while (r < len && !isspace(boxstr[r]) && boxstr[r] != ',') + r++; + lenstr = boxstr.substr(l, r-l); + if (!lenstr.empty()) { + coord.push_back(Length(lenstr)); + if (boxstr[r] == ',') + r++; + l = r; + } + } while (!lenstr.empty() && coord.size() < 4); + + switch (coord.size()) { + case 1: + ulx -= coord[0].pt(); + uly -= coord[0].pt(); + lrx += coord[0].pt(); + lry += coord[0].pt(); + break; + case 2: + ulx -= coord[0].pt(); + uly -= coord[1].pt(); + lrx += coord[0].pt(); + lry += coord[1].pt(); + break; + case 4: + ulx = min(coord[0].pt(), coord[2].pt()); + uly = min(coord[1].pt(), coord[3].pt()); + lrx = max(coord[0].pt(), coord[2].pt()); + lry = max(coord[1].pt(), coord[3].pt()); + break; + default: + throw BoundingBoxException("1, 2 or 4 length parameters expected"); + } +} + + +/** Enlarges the box so that point (x,y) is enclosed. */ +void BoundingBox::embed (double x, double y) { + if (!_locked) { + if (_valid) { + if (x < ulx) + ulx = x; + else if (x > lrx) + lrx = x; + if (y < uly) + uly = y; + else if (y > lry) + lry = y; + } + else { + ulx = lrx = x; + uly = lry = y; + _valid = true; + } + } +} + + +/** Enlarges the box so that box bb is enclosed. */ +void BoundingBox::embed (const BoundingBox &bb) { + if (!_locked && bb._valid) { + if (_valid) { + embed(bb.ulx, bb.uly); + embed(bb.lrx, bb.lry); + } + else { + ulx = bb.ulx; + uly = bb.uly; + lrx = bb.lrx; + lry = bb.lry; + _valid = true; + } + } +} + + +void BoundingBox::embed (const DPair &c, double r) { + embed(BoundingBox(c.x()-r, c.y()-r, c.x()+r, c.y()+r)); +} + + +void BoundingBox::expand (double m) { + if (!_locked) { + ulx -= m; + uly -= m; + lrx += m; + lry += m; + } +} + + +/** Intersects the current box with bbox and applies the result to *this. + * If both boxes are disjoint, *this is not altered. + * @param[in] bbox box to intersect with + * @return false if *this is locked or both boxes are disjoint */ +bool BoundingBox::intersect (const BoundingBox &bbox) { + if (_locked || lrx < bbox.ulx || lry < bbox.uly || ulx > bbox.lrx || uly > bbox.lry) + return false; + ulx = max(ulx, bbox.ulx); + uly = max(uly, bbox.uly); + lrx = min(lrx, bbox.lrx); + lry = min(lry, bbox.lry); + return true; +} + + +void BoundingBox::operator += (const BoundingBox &bb) { + if (!_locked) { + ulx += bb.ulx; + uly += bb.uly; + lrx += bb.lrx; + lry += bb.lry; + } +} + + +void BoundingBox::scale (double sx, double sy) { + if (!_locked) { + ulx *= sx; + lrx *= sx; + if (sx < 0) swap(ulx, lrx); + uly *= sy; + lry *= sy; + if (sy < 0) swap(uly, lry); + } +} + + +void BoundingBox::transform (const Matrix &tm) { + if (!_locked) { + DPair ul = tm * DPair(lrx, lry); + DPair lr = tm * DPair(ulx, uly); + DPair ll = tm * DPair(ulx, lry); + DPair ur = tm * DPair(lrx, uly); + ulx = min(min(ul.x(), lr.x()), min(ur.x(), ll.x())); + uly = min(min(ul.y(), lr.y()), min(ur.y(), ll.y())); + lrx = max(max(ul.x(), lr.x()), max(ur.x(), ll.x())); + lry = max(max(ul.y(), lr.y()), max(ur.y(), ll.y())); + } +} + + +string BoundingBox::toSVGViewBox () const { + ostringstream oss; + oss << ulx << ' ' << uly << ' ' << width() << ' ' << height(); + return oss.str(); +} + + +ostream& BoundingBox::write (ostream &os) const { + return os << '(' << ulx << ", " << uly + << ", " << lrx << ", " << lry << ')'; +} + + +XMLElementNode* BoundingBox::toSVGRect () const { + XMLElementNode *rect = new XMLElementNode("rect"); + rect->addAttribute("x", minX()); + rect->addAttribute("y", minY()); + rect->addAttribute("width", width()); + rect->addAttribute("height", height()); + rect->addAttribute("fill", "none"); + return rect; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BoundingBox.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BoundingBox.h new file mode 100644 index 00000000000..952fbdfd3af --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/BoundingBox.h @@ -0,0 +1,86 @@ +/************************************************************************* +** BoundingBox.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef BOUNDINGBOX_H +#define BOUNDINGBOX_H + +#include +#include +#include "Length.h" +#include "MessageException.h" +#include "Pair.h" +#include "macros.h" +#include "types.h" + + +class Matrix; +class XMLElementNode; + + +struct BoundingBoxException : MessageException +{ + BoundingBoxException (const std::string &msg) : MessageException(msg) {} +}; + + +class BoundingBox +{ + public: + BoundingBox (); + BoundingBox (double ulxx, double ulyy, double lrxx, double lryy); + BoundingBox (const DPair &p1, const DPair &p2); + BoundingBox (const Length &ulxx, const Length &ulyy, const Length &lrxx, const Length &lryy); + BoundingBox (const std::string &boxstr) {set(boxstr);} + void set (std::string boxstr); + void embed (double x, double y); + void embed (const BoundingBox &bb); + void embed (const DPair &p) {embed(p.x(), p.y());} + void embed (const DPair &c, double r); + + template + void embed (const Pair &p) {embed(p.x(), p.y());} + + void expand (double m); + bool intersect (const BoundingBox &bbox); + double minX () const {return ulx;} + double minY () const {return uly;} + double maxX () const {return lrx;} + double maxY () const {return lry;} + double width () const {return lrx-ulx;} + double height () const {return lry-uly;} + void lock () {_locked = true;} + void unlock () {_locked = false;} + void operator += (const BoundingBox &bb); + void scale (double sx, double sy); + void transform (const Matrix &tm); + std::string toSVGViewBox () const; + std::ostream& write (std::ostream &os) const; + XMLElementNode* toSVGRect () const; + + private: + double ulx, uly; ///< coordinates of upper left vertex (in TeX point units) + double lrx, lry; ///< coordinates of lower right vertex (in TeX point unitx) + bool _valid : 1; ///< true if the box coordinates are properly set + bool _locked : 1; ///< if true, the box data is read-only +}; + +IMPLEMENT_OUTPUT_OPERATOR(BoundingBox) + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CRC32.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CRC32.cpp new file mode 100644 index 00000000000..339375a6b06 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CRC32.cpp @@ -0,0 +1,112 @@ +/************************************************************************* +** CRC32.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include "CRC32.h" + +using namespace std; + + +CRC32::CRC32 () : _crc32(0xFFFFFFFF) +{ + const UInt32 poly = 0xEDB88320; + for (int i = 0; i < 256; i++) { + UInt32 crc=i; + for (int j=8; j > 0; j--) { + if (crc & 1) + crc = (crc >> 1) ^ poly; + else + crc >>= 1; + } + _tab[i] = crc; + } +} + + +/** Resets CRC32 sum to 0. */ +void CRC32::reset () { + _crc32 = 0xFFFFFFFF; +} + + +/** Appends string bytes to the previous data and computes the resulting checksum. + * @param[in] data string to update the checksum with */ +void CRC32::update (const char *data) { + update((const UInt8*)data, strlen(data)); +} + + +/** Appends a single value to the previous data and computes the resulting checksum. + * @param[in] n value to update the checksum with + * @param[in] bytes number of bytes to consider (0-4) */ +void CRC32::update (UInt32 n, int bytes) { + for (int i=bytes-1; i >= 0; --i) { + UInt8 byte = UInt8((n >> (8*i)) & 0xff); + update(&byte, 1); + } +} + + +/** Appends a sequence of bytes to the previous data and computes the resulting checksum. + * @param[in] bytes pointer to array of bytes + * @param[in] len number of bytes in array */ +void CRC32::update (const UInt8 *bytes, size_t len) { + for (size_t i=0; i < len; ++i) + _crc32 = ((_crc32 >> 8) & 0x00FFFFFF) ^ _tab[(_crc32 ^ *bytes++) & 0xFF]; +} + + +void CRC32::update (istream &is) { + char buf [4096]; + while (is) { + is.read(buf, 4096); + update((UInt8*)buf, is.gcount()); + } +} + + +/** Returns the checksum computed from values added with the update functions. */ +UInt32 CRC32::get () const { + return _crc32 ^ 0xFFFFFFFF; +} + + +/** Computes the CRC32 checksum of a sequence of bytes. + * @param[in] bytes pointer to array of bytes + * @param[in] len number of bytes in array + * @return CRC32 checksum */ +UInt32 CRC32::compute (const UInt8 *bytes, size_t len) { + CRC32 crc32; + crc32.update(bytes, len); + return crc32.get(); +} + + +/** Computes the CRC32 checksum of a string. */ +UInt32 CRC32::compute (const char *str) { + return compute((const UInt8*)str, strlen(str)); +} + + +UInt32 CRC32::compute (istream &is) { + CRC32 crc32; + crc32.update(is); + return crc32.get(); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CRC32.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CRC32.h new file mode 100644 index 00000000000..4dd323ad3df --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CRC32.h @@ -0,0 +1,51 @@ +/************************************************************************* +** CRC32.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef CRC32_H +#define CRC32_H + +#include +#include +#include "types.h" + +class CRC32 +{ + public: + CRC32 (); + void update (const UInt8 *bytes, size_t len); + void update (UInt32 n, int bytes=4); + void update (const char *str); + void update (std::istream &is); + UInt32 get () const; + void reset (); + static UInt32 compute (const UInt8 *bytes, size_t len); + static UInt32 compute (const char *str); + static UInt32 compute (std::istream &is); + + protected: + CRC32 (const CRC32 &crc32) {} + + private: + UInt32 _crc32; + UInt32 _tab[256]; +}; + + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Calculator.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Calculator.cpp new file mode 100644 index 00000000000..33502d6cec2 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Calculator.cpp @@ -0,0 +1,178 @@ +/************************************************************************* +** Calculator.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "Calculator.h" + +using namespace std; + +// token types +const char END = 0; +const char NUMBER = 1; +const char NAME = 2; + + +#include + + +/** Evaluates a given arithmetic expression and returns its value. + * The evaluator is implemented as a recursive descendent parser. + * @param[in] is reads expression from this stream + * @return expression value */ +double Calculator::eval (istream &is) { + double ret = expr(is, false); + if (lookAhead(is) > 0) + throw CalculatorException("expression syntax error"); + return ret; +} + + +/** Evaluates a given arithmetic expression and returns its value. + * @param[in] expr expression to evaluate + * @return expression value */ +double Calculator::eval (const string &expr) { + istringstream iss; + iss.str(expr); + return eval(iss); +} + + +/** Evaluates the root rule of the expression grammar. */ +double Calculator::expr (istream &is, bool skip) { // expr: + double left = term(is, skip); + while (1) + switch (lookAhead(is)) { + case '+': left += term(is, true); break; // term '+' term => $1 + $3 + case '-': left -= term(is, true); break; // term '-' term => $1 - $3 + default : return left; // term => $1 + } +} + + +double Calculator::term (istream &is, bool skip) { // term: + double left = prim(is, skip); + while (1) + switch (lookAhead(is)) { + case '*': left *= prim(is, true); break; // prim '*' prim => $1 * $3 + case '/': { // prim '/' prim => $1 / $3 + double denom = prim(is, true); + if (denom == 0) + throw CalculatorException("division by zero"); + left /= denom; + break; + } + case '%': { // prim '%' prim => $1 mod $3 + double denom = prim(is, true); + if (denom == 0) + throw CalculatorException("division by zero"); + left -= denom*floor(left/denom); + break; + } + default: // prim => $1 + return left; + } +} + + +double Calculator::prim (istream &is, bool skip) { // prim: + if (skip) + lex(is); + switch (lookAhead(is)) { + case NUMBER: { // NUMBER => $1 + lex(is); + double ret = numValue; + if (lookAhead(is) == NAME) { // NUMBER NAME => $1 * $2 + lex(is); + ret *= getVariable(strValue); + } + return ret; + } + case NAME: { // NAME => getVariable($1) + lex(is); + return getVariable(strValue); + } + case '-': // '-' prim => -$2 + return -prim(is, true); + case '(': { // '(' expr ')' => $2 + double e = expr(is, true); + if (lookAhead(is) != ')') + throw CalculatorException("')' expected"); + lex(is); + return e; + } + default: + throw CalculatorException("primary expression expected"); + } +} + + +/** Determines type of next token without swallowing it. That means + * the same token will be read again next time. */ +char Calculator::lookAhead (istream &is) { + while (isspace(is.peek())) // skip whitespace + is.get(); + if (is.eof()) + return END; + int c = is.peek(); + if (isdigit(c) || c == '.') + return NUMBER; + if (isalpha(c)) + return NAME; + return char(c); +} + + +/** Reads next token and returns its type. The token value is either assigned + * to the object members numValue or strValue depending on the type. The token + * type is represented by a unique integer. In contrast to method 'lookAhead' + * lex consumes the read token. + * @param[in] is next token is read from this stream + * @return token type */ +char Calculator::lex (istream &is) { + int tokenType = lookAhead(is); + switch (tokenType) { + case NUMBER: + is >> numValue; + break; + case NAME: { + strValue.clear(); + while (isalpha(is.peek())) + strValue += char(is.get()); + break; + } + default: + tokenType = is.get(); + } + return char(tokenType); +} + + +/** Returns the value of a previously defined variable. If there + * is no variable of the given name, a CalculatorException is thrown. + * @param[in] name name of variable + * @return assigned value */ +double Calculator::getVariable (const string &name) const { + map::const_iterator it = variables.find(name); + if (it == variables.end()) + throw CalculatorException("undefined variable '" + name + "'"); + return it->second; +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Calculator.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Calculator.h new file mode 100644 index 00000000000..ce4f6698b20 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Calculator.h @@ -0,0 +1,56 @@ +/************************************************************************* +** Calculator.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef CALCULATOR_H +#define CALCULATOR_H + +#include +#include +#include +#include "MessageException.h" + + +struct CalculatorException : public MessageException +{ + CalculatorException (const std::string &msg) : MessageException(msg) {} +}; + +class Calculator +{ + public: + double eval (std::istream &is); + double eval (const std::string &expr); + void setVariable (const std::string &name, double value) {variables[name] = value;} + double getVariable (const std::string &name) const; + + protected: + double expr (std::istream &is, bool skip); + double term (std::istream &is, bool skip); + double prim (std::istream &is, bool skip); + char lex (std::istream &is); + char lookAhead (std::istream &is); + + private: + std::map variables; + double numValue; + std::string strValue; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CmdLineParserBase.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CmdLineParserBase.cpp new file mode 100644 index 00000000000..6c18f221ad3 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CmdLineParserBase.cpp @@ -0,0 +1,309 @@ +/************************************************************************* +** CmdLineParserBase.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "CmdLineParserBase.h" +#include "InputBuffer.h" +#include "InputReader.h" +#include "Message.h" + +using namespace std; + +void CmdLineParserBase::init () { + _error = false; + _files.clear(); +} + + +/** Parses all options given on the command line. + * @param[in] printErrors enable/disable printing of error messages */ +void CmdLineParserBase::parse (int argc, char **argv, bool printErrors) { + init(); + _printErrors = printErrors; + bool filesOnly = false; // + for (int i=1; i < argc; i++) { + CharInputBuffer ib(argv[i], strlen(argv[i])); + BufferInputReader ir(ib); + if (filesOnly || ir.peek() != '-') + _files.push_back(argv[i]); + else { + ir.get(); + if (ir.peek() == '-') { + // scan long option + ir.get(); + if (ir.eof()) // "--" only + filesOnly = true; // treat all following options as filenames + else { + string longname; + while (isalnum(ir.peek()) || ir.peek() == '-') + longname += char(ir.get()); + if (const Option *opt = option(longname)) + (*opt->handler)(this, ir, *opt, true); + else if (!_error) { + if (printErrors) + Message::estream(false) << "unknown option --" << longname << '\n'; + _error = true; + } + } + } + else { + // scan short option(s) + bool combined = false; // multiple short options combined, e.g -abc + do { + int shortname = ir.get(); + if (const Option *opt = option(shortname)) { + if (!combined || opt->argmode == 0) { + if (opt->argmode == 'r' && strlen(argv[i]) == 2) { // required argument separated by whitespace? + if (i+1 < argc && argv[i+1][0] != '-') + ib.assign(argv[++i]); + } + (*opt->handler)(this, ir, *opt, false); + if (opt->argmode == 0) + combined = true; + } + else { + if (printErrors) + Message::estream(false) << "option -" << char(shortname) << " must be given separately\n"; + _error = true; + } + } + else if (shortname > 0) { + if (printErrors) + Message::estream(false) << "unknown option -" << char(shortname) << '\n'; + _error = true; + } + } + while (!_error && combined && !ir.eof()); + } + } + } +} + + +/** Prints an error message to stdout. + * @param[in] opt error occurred in this option + * @param[in] longopt the long option name was scanned + * @param[in] msg message to be printed */ +void CmdLineParserBase::error (const Option &opt, bool longopt, const char *msg) const { + if (_printErrors) { + Message::estream(false) << "option "; + if (longopt) + Message::estream(false) << "--" << opt.longname; + else + Message::estream(false) << '-' << opt.shortname; + Message::estream(false) << ": " << msg << '\n'; + } + _error = true; +} + + +/** Lists the scanned filenames. Just for debugging purposes. */ +void CmdLineParserBase::status () const { + cout << "file names:\n"; + for (size_t i=0; i < _files.size(); i++) + cout << " " << _files[i] << endl; + cout << endl; +} + + +/** Returns the option information of a given short option name. + * If the option name can't be found 0 is returned. + * @param[in] longname long version of the option without leading hyphen (e.g. p, not -p) */ +const CmdLineParserBase::Option* CmdLineParserBase::option (char shortname) const { + for (const Option *opts = options(); opts->longname; ++opts) + if (opts->shortname == shortname) + return opts; + return 0; +} + + +/** Returns the option information of a given long option name. + * Parameter 'longname' hasn't to be the complete long option name. The function looks up + * all options that start with 'longname'. If a unique or an exact match was found, it's returned. + * Otherwise, the return value is 0. + * @param[in] longname long version of the option without leading hyphens (e.g. param, not --param) */ +const CmdLineParserBase::Option* CmdLineParserBase::option (const string &longname) const { + vector matches; // all matching options + size_t len = longname.length(); + for (const Option *opts = options(); opts->longname; ++opts) { + if (string(opts->longname, len) == longname) { + if (len == strlen(opts->longname)) // exact match? + return opts; + matches.push_back(opts); + } + } + switch (matches.size()) { + default: + if (_printErrors) { + Message::estream(false) << "option --" << longname << " is ambiguous ("; + for (size_t i=0; i < matches.size(); i++) { + if (i > 0) + Message::estream(false) << ", "; + Message::estream(false) << matches[i]->longname; + } + Message::estream(false) << ")\n"; + } + _error = true; + + case 0 : return 0; + case 1 : return matches[0]; + } +} + + +/** Returns true if a valid separator between option and argument was found. + * Arguments of long options are preceded by a '='. The argument of a short option + * directly follows the option without a separation character. + * @param[in] ir argument is read from this InputReader + * @param[in] opt scans argument of this option + * @param[in] longopt true if the long option name was given */ +bool CmdLineParserBase::checkArgPrefix (InputReader &ir, const Option &opt, bool longopt) const { + if (longopt) { + if (ir.peek() == '=') + ir.get(); + else { + error(opt, longopt, "'=' expected"); + return false; + } + } + return true; +} + + +/** Returns true if a given option has no argument, .e.g. -p or --param. + * @param[in] ir argument is read from this InputReader + * @param[in] opt scans argument of this option + * @param[in] longopt true if the long option name was given */ +bool CmdLineParserBase::checkNoArg (InputReader &ir, const Option &opt, bool longopt) const { + if (ir.eof()) + return true; + error(opt, longopt, "no argument expected"); + return false; +} + + +/** Gets an integer argument of a given option, e.g. -p5 or --param=5. + * @param[in] ir argument is read from this InputReader + * @param[in] opt scans argument of this option + * @param[in] longopt true if the long option name was given + * @param[out] arg the scanned option argument + * @return true if argument could be scanned without errors */ +bool CmdLineParserBase::getIntArg (InputReader &ir, const Option &opt, bool longopt, int &arg) const { + if (checkArgPrefix(ir, opt, longopt)) { + if (ir.parseInt(arg) && ir.eof()) + return true; + error(opt, longopt, "integer value expected"); + } + return false; +} + + +/** Gets an unsigned integer argument of a given option, e.g. -p5 or --param=5. + * @param[in] ir argument is read from this InputReader + * @param[in] opt scans argument of this option + * @param[in] longopt true if the long option name was given + * @param[out] arg the scanned option argument + * @return true if argument could be scanned without errors */ +bool CmdLineParserBase::getUIntArg (InputReader &ir, const Option &opt, bool longopt, unsigned &arg) const { + if (checkArgPrefix(ir, opt, longopt)) { + if (ir.parseUInt(arg) && ir.eof()) + return true; + error(opt, longopt, "unsigned integer value expected"); + } + return false; +} + + +/** Gets a double (floating point) argument of a given option, e.g. -p2.5 or --param=2.5. + * @param[in] ir argument is read from this InputReader + * @param[in] opt scans argument of this option + * @param[in] longopt true if the long option name was given + * @param[out] arg the scanned option argument + * @return true if argument could be scanned without errors */ +bool CmdLineParserBase::getDoubleArg (InputReader &ir, const Option &opt, bool longopt, double &arg) const { + if (checkArgPrefix(ir, opt, longopt)) { + if (ir.parseDouble(arg) != 0 && ir.eof()) + return true; + error(opt, longopt, "floating point value expected"); + } + return false; +} + + +/** Gets a string argument of a given option, e.g. -pstr or --param=str. + * @param[in] ir argument is read from this InputReader + * @param[in] opt scans argument of this option + * @param[in] longopt true if the long option name was given + * @param[out] arg the scanned option argument + * @return true if argument could be scanned without errors */ +bool CmdLineParserBase::getStringArg (InputReader &ir, const Option &opt, bool longopt, string &arg) const { + if (checkArgPrefix(ir, opt, longopt)) { + arg.clear(); + while (!ir.eof()) + arg += char(ir.get()); + if (!arg.empty()) + return true; + error(opt, longopt, "string argument expected"); + } + return false; +} + + +/** Gets a boolean argument of a given option, e.g. -pyes or --param=yes. + * @param[in] ir argument is read from this InputReader + * @param[in] opt scans argument of this option + * @param[in] longopt true if the long option name was given + * @param[out] arg the scanned option argument + * @return true if argument could be scanned without errors */ +bool CmdLineParserBase::getBoolArg (InputReader &ir, const Option &opt, bool longopt, bool &arg) const { + if (checkArgPrefix(ir, opt, longopt)) { + string str; + while (!ir.eof()) + str += char(ir.get()); + if (str == "yes" || str == "y" || str == "true" || str == "1") { + arg = true; + return true; + } + else if (str == "no" || str == "n" || str == "false" || str == "0") { + arg = false; + return true; + } + error(opt, longopt, "boolean argument expected (yes, no, true, false, 0, 1)"); + } + return false; +} + + +/** Gets a (single) character argument of a given option, e.g. -pc or --param=c. + * @param[in] ir argument is read from this InputReader + * @param[in] opt scans argument of this option + * @param[in] longopt true if the long option name was given + * @param[out] arg the scanned option argument + * @return true if argument could be scanned without errors */ +bool CmdLineParserBase::getCharArg (InputReader &ir, const Option &opt, bool longopt, char &arg) const { + if (checkArgPrefix(ir, opt, longopt)) { + arg = char(ir.get()); + if (arg >= 0 && ir.eof()) + return true; + error(opt, longopt, "character argument expected"); + } + return false; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CmdLineParserBase.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CmdLineParserBase.h new file mode 100644 index 00000000000..1be54e022a5 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CmdLineParserBase.h @@ -0,0 +1,96 @@ +/************************************************************************* +** CmdLineParserBase.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef CMDLINEPARSERBASE_H +#define CMDLINEPARSERBASE_H + +#include +#include + +class InputReader; + +class CmdLineParserBase +{ + protected: + struct Option; + + struct OptionHandler { + virtual ~OptionHandler () {} + virtual void operator () (CmdLineParserBase *obj, InputReader &ir, const Option &opt, bool longopt) const=0; + }; + + template + class OptionHandlerImpl : public OptionHandler { + protected: + typedef void (T::*LocalHandler)(InputReader &ir, const Option &opt, bool longopt); + + public: + OptionHandlerImpl (LocalHandler handler) : _handler(handler) {} + + void operator () (CmdLineParserBase *obj, InputReader &ir, const Option &opt, bool longopt) const { + if (T *tobj = dynamic_cast(obj)) + (tobj->*_handler)(ir, opt, longopt); + } + + private: + LocalHandler _handler; + }; + + struct Option { + ~Option () {delete handler;} + char shortname; + const char *longname; + char argmode; // mode of option argument: '\0'=none, 'o'=optional, 'r'=required + const OptionHandler *handler; + }; + + public: + virtual void parse (int argc, char **argv, bool printErrors=true); + virtual void help () const {} + virtual int numFiles () const {return _files.size();} + virtual const char* file (size_t n) {return n < _files.size() ? _files[n].c_str() : 0;} + virtual void status () const; + virtual bool error () const {return _error;} + + protected: + CmdLineParserBase () : _error(false) {} + CmdLineParserBase (const CmdLineParserBase &cmd) {} + virtual ~CmdLineParserBase () {} + virtual void init (); + virtual void error (const Option &opt, bool longopt, const char *msg) const; + bool checkArgPrefix (InputReader &ir, const Option &opt, bool longopt) const; + bool checkNoArg (InputReader &ir, const Option &opt, bool longopt) const; + bool getIntArg (InputReader &ir, const Option &opt, bool longopt, int &arg) const; + bool getUIntArg (InputReader &ir, const Option &opt, bool longopt, unsigned &arg) const; + bool getDoubleArg (InputReader &ir, const Option &opt, bool longopt, double &arg) const; + bool getStringArg (InputReader &ir, const Option &opt, bool longopt, std::string &arg) const; + bool getBoolArg (InputReader &ir, const Option &opt, bool longopt, bool &arg) const; + bool getCharArg (InputReader &ir, const Option &opt, bool longopt, char &arg) const; + const Option* option (char shortname) const; + const Option* option (const std::string &longname) const; + virtual const Option* options () const {return 0;} + + private: + bool _printErrors; ///< if true, print error messages + mutable bool _error; ///< error occured while parsing options + std::vector _files; ///< filename parameters +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Color.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Color.cpp new file mode 100644 index 00000000000..630c3798cda --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Color.cpp @@ -0,0 +1,126 @@ +/************************************************************************* +** Color.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include "Color.h" + +using namespace std; + + + +const Color Color::BLACK(0); +const Color Color::WHITE(UInt8(255), UInt8(255), UInt8(255)); + + +static inline UInt8 float_to_byte (float v) { + return (UInt8) (floor(255*v+0.5)); +} + + +void Color::set (float r, float g, float b) { + set(float_to_byte(r), float_to_byte(g), float_to_byte(b)); +} + + +void Color::setHSB (float h, float s, float b) { + vector hsb(3), rgb(3); + hsb[0] = h; + hsb[1] = s; + hsb[2] = b; + HSB2RGB(hsb, rgb); + set(rgb[0], rgb[1], rgb[2]); +} + + +void Color::setCMYK (float c, float m, float y, float k) { + vector cmyk(4), rgb(3); + cmyk[0] = c; + cmyk[1] = m; + cmyk[2] = y; + cmyk[3] = k; + CMYK2RGB(cmyk, rgb); + set(rgb[0], rgb[1], rgb[2]); +} + + +void Color::operator *= (double c) { + UInt32 rgb=0; + for (int i=0; i < 3; i++) { + rgb |= UInt32(floor((_rgb & 0xff)*c+0.5)) << (8*i); + _rgb >>= 8; + } + _rgb = rgb; +} + + +string Color::rgbString () const { + ostringstream oss; + oss << '#'; + for (int i=2; i >= 0; i--) { + oss << setbase(16) << setfill('0') << setw(2) + << (((_rgb >> (8*i)) & 0xff)); + } + return oss.str(); +} + + +/** Approximates a CMYK color by an RGB triple. The component values + * are expected to be normalized, i.e. 0 <= cmyk[i],rgb[j] <= 1. + * @param[in] cmyk color in CMYK space + * @param[out] rgb RGB approximation */ +void Color::CMYK2RGB (const vector &cmyk, vector &rgb) { + for (int i=0; i < 3; i++) + rgb[i] = 1.0f-min(1.0f, cmyk[i]+cmyk[3]); +} + + +/** Converts a color given in HSB coordinates to RGB. + * @param[in] hsb color in HSB space + * @param[out] rgb color in RGB space */ +void Color::HSB2RGB (const vector &hsb, vector &rgb) { + if (hsb[1] == 0) + rgb[0] = rgb[1] = rgb[2] = hsb[2]; + else { + float h = hsb[0]-floor(hsb[0]); + int i = int(6*h); + float f = float(6.0*h-i); + float p = hsb[2]*(1-hsb[1]); + float q = hsb[2]*(1-hsb[1]*f); + float t = hsb[2]*(1-hsb[1]*(1-f)); + switch (i) { + case 0 : rgb[0]=hsb[2]; rgb[1]=t; rgb[2]=p; break; + case 1 : rgb[0]=q; rgb[1]=hsb[2]; rgb[2]=p; break; + case 2 : rgb[0]=p; rgb[1]=hsb[2]; rgb[2]=t; break; + case 3 : rgb[0]=p; rgb[1]=q; rgb[2]=hsb[2]; break; + case 4 : rgb[0]=t; rgb[1]=p; rgb[2]=hsb[2]; break; + case 5 : rgb[0]=hsb[2]; rgb[1]=p; rgb[2]=q; break; + default: ; // prevent compiler warning + } + } +} + + +void Color::getRGB (float &r, float &g, float &b) const { + r = float(((_rgb >> 16) & 255) / 255.0); + g = float(((_rgb >> 8) & 255) / 255.0); + b = float((_rgb & 255) / 255.0); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Color.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Color.h new file mode 100644 index 00000000000..d1d8ce3f6cc --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Color.h @@ -0,0 +1,59 @@ +/************************************************************************* +** Color.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef COLOR_H +#define COLOR_H + +#include +#include +#include "types.h" + +class Color +{ + public: + static const Color BLACK; + static const Color WHITE; + + public: + Color () : _rgb(0) {} + Color (UInt32 rgb) : _rgb(rgb) {} + Color (UInt8 r, UInt8 g, UInt8 b) {set(r,g,b);} + Color (float r, float g, float b) {set(r,g,b);} + Color (const std::vector &rgb) {set(rgb[0], rgb[1], rgb[2]);} + operator UInt32 () const {return _rgb;} + bool operator == (const Color &c) {return _rgb == c._rgb;} + bool operator != (const Color &c) {return _rgb != c._rgb;} + void set (UInt8 r, UInt8 g, UInt8 b) {_rgb = (r << 16) | (g << 8) | b;} + void set (float r, float g, float b); + void setGray (UInt8 g) {set(g,g,g);} + void setGray (float g) {set(g,g,g);} + void setHSB (float h, float s, float b); + void setCMYK (float c, float m, float y, float k); + void getRGB (float &r, float &g, float &b) const; + void operator *= (double c); + std::string rgbString () const; + static void CMYK2RGB (const std::vector &cmyk, std::vector &rgb); + static void HSB2RGB (const std::vector &hsb, std::vector &rgb); + + private: + UInt32 _rgb; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/ColorSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/ColorSpecialHandler.cpp new file mode 100644 index 00000000000..2dfbb5fc606 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/ColorSpecialHandler.cpp @@ -0,0 +1,269 @@ +/************************************************************************* +** ColorSpecialHandler.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include "ColorSpecialHandler.h" +#include "SpecialActions.h" + +using namespace std; + + + +/** Approximates a CMYK color by an RGB triple. The component values + * are expected to be normalized, i.e. 0 <= cmyk[i],rgb[j] <= 1. + * @param[in] cmyk color in CMYK space + * @param[out] rgb RGB approximation */ +static void cmyk_to_rgb (const vector &cmyk, vector &rgb) { + for (int i=0; i < 3; i++) + rgb[i] = 1.0f-min(1.0f, cmyk[i]+cmyk[3]); +} + + +/** Converts a color given in HSB coordinates to RGB. + * @param[in] hsb color in HSB space + * @param[out] rgb color in RGB space */ +static void hsb_to_rgb (const vector &hsb, vector &rgb) { + if (hsb[1] == 0) + rgb[0] = rgb[1] = rgb[2] = hsb[2]; + else { + float h = hsb[0]-floor(hsb[0]); + float i = floor(6*h); + float f = 6.0f*h-i; + float p = hsb[2]*(1-hsb[1]); + float q = hsb[2]*(1-hsb[1]*f); + float t = hsb[2]*(1-hsb[1]*(1-f)); + switch (int(i)) { + case 0 : rgb[0]=hsb[2]; rgb[1]=t; rgb[2]=p; break; + case 1 : rgb[0]=q; rgb[1]=hsb[2]; rgb[2]=p; break; + case 2 : rgb[0]=p; rgb[1]=hsb[2]; rgb[2]=t; break; + case 3 : rgb[0]=p; rgb[1]=q; rgb[2]=hsb[2]; break; + case 4 : rgb[0]=t; rgb[1]=p; rgb[2]=hsb[2]; break; + case 5 : rgb[0]=hsb[2]; rgb[1]=p; rgb[2]=q; break; + default: ; // prevent compiler warning + } + } +} + + +/** Converts a gray value to RGB. + * @param[in] gray normalized gray value (0 <= gray <= 1) + * @param[out] rgb resulting RGB triple */ +static void gray_to_rgb (const float gray, vector &rgb) { + for (int i=0; i < 3; i++) + rgb[i] = gray; +} + + +static float read_float (istream &is) { + is.clear(); + float v; + is >> v; + if (is.fail()) + throw SpecialException("number expected"); + return v; +} + + +/** Reads multiple float values from a given stream. The number of + * values read is determined by the size of the result vector. + * @param[in] is stream to be read from + * @param[out] v the resulting floats */ +static void read_floats (istream &is, vector &v) { + for (size_t i=0; i < v.size(); i++) + v[i] = read_float(is); +} + + +static bool color_constant (const string &c, vector &rgb) { + // converted color constants from color.pro + const struct { + const char *name; + const float rgb[3]; + } + constants[] = { + {"Apricot", {1, 0.68f, 0.48f}}, + {"Aquamarine", {0.18f, 1, 0.7f}}, + {"Bittersweet", {0.76f, 0.01f, 0}}, + {"Black", {0, 0, 0}}, + {"Blue", {0, 0, 1}}, + {"BlueGreen", {0.15f, 1, 0.67f}}, + {"BlueViolet", {0.1f, 0.05f, 0.96f}}, + {"BrickRed", {0.72f, 0, 0}}, + {"Brown", {0.4f, 0, 0}}, + {"BurntOrange", {1, 0.49f, 0}}, + {"CadetBlue", {0.38f, 0.43f, 0.77f}}, + {"CarnationPink", {1, 0.37f, 1}}, + {"Cerulean", {0.06f, 0.89f, 1}}, + {"CornflowerBlue", {0.35f, 0.87f, 1}}, + {"Cyan", {0, 1, 1}}, + {"Dandelion", {1, 0.71f, 0.16f}}, + {"DarkOrchid", {0.6f, 0.2f, 0.8f}}, + {"Emerald", {0, 1, 0.5f}}, + {"ForestGreen", {0, 0.88f, 0}}, + {"Fuchsia", {0.45f, 0.01f, 0.92f}}, + {"Goldenrod", {1, 0.9f, 0.16f}}, + {"Gray", {0.5f, 0.5f, 0.5f}}, + {"Green", {0, 1, 0}}, + {"GreenYellow", {0.85f, 1, 0.31f}}, + {"JungleGreen", {0.01f, 1, 0.48f}}, + {"Lavender", {1, 0.52f, 1}}, + {"LimeGreen", {0.5f, 1, 0}}, + {"Magenta", {1, 0, 1}}, + {"Mahogany", {0.65f, 0, 0}}, + {"Maroon", {0.68f, 0, 0}}, + {"Melon", {1, 0.54f, 0.5f}}, + {"MidnightBlue", {0, 0.44f, 0.57f}}, + {"Mulberry", {0.64f, 0.08f, 0.98f}}, + {"NavyBlue", {0.06f, 0.46f, 1}}, + {"OliveGreen", {0, 0.6f, 0}}, + {"Orange", {1, 0.39f, 0.13f}}, + {"OrangeRed", {1, 0, 0.5f}}, + {"Orchid", {0.68f, 0.36f, 1}}, + {"Peach", {1, 0.5f, 0.3f}}, + {"Periwinkle", {0.43f, 0.45f, 1}}, + {"PineGreen", {0, 0.75f, 0.16f}}, + {"Plum", {0.5f, 0, 1}}, + {"ProcessBlue", {0.04f, 1, 1}}, + {"Purple", {0.55f, 0.14f, 1}}, + {"RawSienna", {0.55f, 0, 0}}, + {"Red", {1, 0, 0}}, + {"RedOrange", {1, 0.23f, 0.13f}}, + {"RedViolet", {0.59f, 0, 0.66f}}, + {"Rhodamine", {1, 0.18f, 1}}, + {"RoyalBlue", {0, 0.5f, 1}}, + {"RoyalPurple", {0.25f, 0.1f, 1}}, + {"RubineRed", {1, 0, 0.87f}}, + {"Salmon", {1, 0.47f, 0.62f}}, + {"SeaGreen", {0.31f, 1, 0.5f}}, + {"Sepia", {0.3f, 0, 0}}, + {"SkyBlue", {0.38f, 1, 0.88f}}, + {"SpringGreen", {0.74f, 1, 0.24f}}, + {"Tan", {0.86f, 0.58f, 0.44f}}, + {"TealBlue", {0.12f, 0.98f, 0.64f}}, + {"Thistle", {0.88f, 0.41f, 1}}, + {"Turquoise", {0.15f, 1, 0.8f}}, + {"Violet", {0.21f, 0.12f, 1}}, + {"VioletRed", {1, 0.19f, 1}}, + {"White", {1, 1, 1}}, + {"WildStrawberry", {1, 0.04f, 0.61f}}, + {"Yellow", {1, 1, 0}}, + {"YellowGreen", {0.56f, 1, 0.26f}}, + {"YellowOrange", {1, 0.58f, 0}} + }; + // binary search + int first=0, last=68-1; + while (first <= last) { + int mid = first+(last-first)/2; + int cmp = strcmp(constants[mid].name, c.c_str()); + if (cmp > 0) + last = mid-1; + else if (cmp < 0) + first = mid+1; + else { + rgb[0] = constants[mid].rgb[0]; + rgb[1] = constants[mid].rgb[1]; + rgb[2] = constants[mid].rgb[2]; + return true; + } + } + return false; +} + + +/** Reads a color statement from an input stream and converts it to RGB. + * A color statement has the following syntax: + * + * Currently, the following color models are supported: rgb, cmyk, hsb and gray. + * Examples: rgb 1 0.5 0, gray 0.5 + * @param[in] model if model != "" this value specifies the model, otherwise it's read from the stream + * @param[in] is stream to be read from + * @param[out] resulting RGB triple + * @return true if statement has successfully been read */ +static void read_color (string model, istream &is, vector &rgb) { + if (model.empty()) + is >> model; + if (model == "rgb") + read_floats(is, rgb); + else if (model == "cmyk") { + vector cmyk(4); + read_floats(is, cmyk); + cmyk_to_rgb(cmyk, rgb); + } + else if (model == "hsb") { + vector hsb(3); + read_floats(is, hsb); + hsb_to_rgb(hsb, rgb); + } + else if (model == "gray") + gray_to_rgb(read_float(is), rgb); + else if (!color_constant(model, rgb)) + throw SpecialException("unknown color statement"); + if (rgb[0] > 1 || rgb[1] > 1 || rgb[2] > 1) { + ostringstream oss; + oss << "invalid RGB value (" << rgb[0] << ',' << rgb[1] << ',' << rgb[2] << ')'; + throw SpecialException(oss.str()); + } +} + + +bool ColorSpecialHandler::process (const char *prefix, istream &is, SpecialActions *actions) { + vector rgb(3); + if (prefix && strcmp(prefix, "background") == 0) { + read_color("", is, rgb); + actions->setBgColor(rgb); + } + else { + string cmd; + is >> cmd; + if (cmd == "push") { // color push + read_color("", is, rgb); + _colorStack.push(rgb); + } + else if (cmd == "pop") { + if (!_colorStack.empty()) // color pop + _colorStack.pop(); + } + else { // color + read_color(cmd, is, rgb); + while (!_colorStack.empty()) + _colorStack.pop(); + _colorStack.push(rgb); + } + if (actions) { + if (_colorStack.empty()) + actions->setColor(Color::BLACK); + else + actions->setColor(_colorStack.top()); + } + } + return true; +} + + +const char** ColorSpecialHandler::prefixes () const { + static const char *pfx[] = {"color", 0}; + return pfx; +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/ColorSpecialHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/ColorSpecialHandler.h new file mode 100644 index 00000000000..0e098631354 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/ColorSpecialHandler.h @@ -0,0 +1,43 @@ +/************************************************************************* +** ColorSpecialHandler.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef COLORSPECIALHANDLER_H +#define COLORSPECIALHANDLER_H + +#include +#include +#include "SpecialHandler.h" + + +class ColorSpecialHandler : public SpecialHandler +{ + typedef std::vector RGB; + + public: + bool process (const char *prefix, std::istream &is, SpecialActions *actions); + const char* name () const {return "color";} + const char* info () const {return "complete support of color specials";} + const char** prefixes () const; + + private: + std::stack _colorStack; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CommandLine.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CommandLine.cpp new file mode 100644 index 00000000000..ccba1e74f08 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CommandLine.cpp @@ -0,0 +1,319 @@ +// This file was automatically generated by opt2cpp. +// It is part of the dvisvgm package and published under the terms +// of the GNU General Public License version 3 or later. +// See file COPYING for further details. +// (C) 2009-2011 Martin Gieseking + +#include +#include +#include +#include "InputReader.h" +#include "CommandLine.h" + +using namespace std; + +const CmdLineParserBase::Option CommandLine::_options[] = { + {'b', "bbox", 'r', new OptionHandlerImpl(&CommandLine::handle_bbox)}, + {'C', "cache", 'o', new OptionHandlerImpl(&CommandLine::handle_cache)}, + {'\0', "color", 0, new OptionHandlerImpl(&CommandLine::handle_color)}, + {'e', "exact", 0, new OptionHandlerImpl(&CommandLine::handle_exact)}, + {'h', "help", 0, new OptionHandlerImpl(&CommandLine::handle_help)}, + {'\0', "keep", 0, new OptionHandlerImpl(&CommandLine::handle_keep)}, +#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) + {'\0', "libgs", 'r', new OptionHandlerImpl(&CommandLine::handle_libgs)}, +#endif + {'l', "list-specials", 0, new OptionHandlerImpl(&CommandLine::handle_list_specials)}, + {'M', "mag", 'r', new OptionHandlerImpl(&CommandLine::handle_mag)}, + {'m', "map-file", 'r', new OptionHandlerImpl(&CommandLine::handle_map_file)}, + {'n', "no-fonts", 'o', new OptionHandlerImpl(&CommandLine::handle_no_fonts)}, + {'\0', "no-mktexmf", 0, new OptionHandlerImpl(&CommandLine::handle_no_mktexmf)}, + {'S', "no-specials", 'o', new OptionHandlerImpl(&CommandLine::handle_no_specials)}, + {'\0', "no-styles", 0, new OptionHandlerImpl(&CommandLine::handle_no_styles)}, + {'o', "output", 'r', new OptionHandlerImpl(&CommandLine::handle_output)}, + {'p', "page", 'r', new OptionHandlerImpl(&CommandLine::handle_page)}, + {'P', "progress", 'o', new OptionHandlerImpl(&CommandLine::handle_progress)}, + {'r', "rotate", 'r', new OptionHandlerImpl(&CommandLine::handle_rotate)}, + {'c', "scale", 'r', new OptionHandlerImpl(&CommandLine::handle_scale)}, + {'s', "stdout", 0, new OptionHandlerImpl(&CommandLine::handle_stdout)}, + {'a', "trace-all", 'o', new OptionHandlerImpl(&CommandLine::handle_trace_all)}, + {'T', "transform", 'r', new OptionHandlerImpl(&CommandLine::handle_transform)}, + {'t', "translate", 'r', new OptionHandlerImpl(&CommandLine::handle_translate)}, + {'v', "verbosity", 'r', new OptionHandlerImpl(&CommandLine::handle_verbosity)}, + {'V', "version", 'o', new OptionHandlerImpl(&CommandLine::handle_version)}, + {'z', "zip", 'o', new OptionHandlerImpl(&CommandLine::handle_zip)}, + {0, 0, 0, 0} +}; + +void CommandLine::init () { + CmdLineParserBase::init(); + _bbox_given = false; + _cache_given = false; + _color_given = false; + _exact_given = false; + _help_given = false; + _keep_given = false; +#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) + _libgs_given = false; +#endif + _list_specials_given = false; + _mag_given = false; + _map_file_given = false; + _no_fonts_given = false; + _no_mktexmf_given = false; + _no_specials_given = false; + _no_styles_given = false; + _output_given = false; + _page_given = false; + _progress_given = false; + _rotate_given = false; + _scale_given = false; + _stdout_given = false; + _trace_all_given = false; + _transform_given = false; + _translate_given = false; + _verbosity_given = false; + _version_given = false; + _zip_given = false; + + _bbox_arg = "min"; + _cache_arg.clear(); +#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) + _libgs_arg.clear(); +#endif + _mag_arg = 4; + _map_file_arg.clear(); + _no_fonts_arg = 0; + _no_specials_arg.clear(); + _output_arg.clear(); + _page_arg = "1"; + _progress_arg = 0.5; + _rotate_arg = 0; + _scale_arg.clear(); + _trace_all_arg = false; + _transform_arg.clear(); + _translate_arg.clear(); + _verbosity_arg = 7; + _version_arg = false; + _zip_arg = 9; +} + +void CommandLine::help () const { + puts("This program converts DVI files, as created by TeX/LaTeX, to\nthe XML-based scalable vector graphics format SVG.\n\nUsage: dvisvgm [options] dvifile\n"); + puts("Input options:"); + puts(" -p, --page=ranges choose pages to convert [1]"); + puts(" -m, --map-file=[+]filename set [additional] font map file name"); + puts("\nSVG output options:"); + puts(" -b, --bbox=size set size of bounding box [min]"); + puts(" -o, --output=pattern set name pattern of output files"); + puts(" -s, --stdout write SVG output to stdout"); + puts(" -n, --no-fonts[=variant] draw glyphs by using path elements [0]"); + puts(" --no-styles don't use styles to reference fonts"); + puts(" -z, --zip[=level] create compressed .svgz file [9]"); + puts("\nSVG transformations:"); + puts(" -r, --rotate=angle rotate page content clockwise"); + puts(" -c, --scale=sx[,sy] scale page content"); + puts(" -t, --translate=tx[,ty] shift page content"); + puts(" -T, --transform=commands transform page content"); + puts("\nProcessing options:"); + puts(" -C, --cache[=dir] set/print path of cache directory"); + puts(" -e, --exact compute exact glyph boxes"); + puts(" --keep keep temporary files"); +#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) + puts(" --libgs=filename set name of Ghostscript shared library"); +#endif + puts(" -M, --mag=factor magnification of Metafont output [4]"); + puts(" --no-mktexmf don't try to create missing fonts"); + puts(" -S, --no-specials[=prefixes] don't process [selected] specials"); + puts(" -a, --trace-all[=retrace] trace all glyphs of bitmap fonts [no]"); + puts("\nMessage options:"); + puts(" --color colorize messages"); + puts(" -h, --help print this help and exit"); + puts(" -l, --list-specials print supported special sets and exit"); + puts(" -P, --progress[=delay] enable progess indicator [0.5]"); + puts(" -v, --verbosity=level set verbosity level (0-7) [7]"); + puts(" -V, --version[=extended] print version and exit [no]"); +} + + +void CommandLine::handle_bbox(InputReader &ir, const Option &opt, bool longopt) { + if (getStringArg(ir, opt, longopt, _bbox_arg)) + _bbox_given = true; +} + + +void CommandLine::handle_cache(InputReader &ir, const Option &opt, bool longopt) { + if (ir.eof() || getStringArg(ir, opt, longopt, _cache_arg)) + _cache_given = true; +} + + +void CommandLine::handle_color(InputReader &ir, const Option &opt, bool longopt) { + _color_given = true; +} + + +void CommandLine::handle_exact(InputReader &ir, const Option &opt, bool longopt) { + _exact_given = true; +} + + +void CommandLine::handle_help(InputReader &ir, const Option &opt, bool longopt) { + _help_given = true; +} + + +void CommandLine::handle_keep(InputReader &ir, const Option &opt, bool longopt) { + _keep_given = true; +} + + +#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) +void CommandLine::handle_libgs(InputReader &ir, const Option &opt, bool longopt) { + if (getStringArg(ir, opt, longopt, _libgs_arg)) + _libgs_given = true; +} +#endif + + +void CommandLine::handle_list_specials(InputReader &ir, const Option &opt, bool longopt) { + _list_specials_given = true; +} + + +void CommandLine::handle_mag(InputReader &ir, const Option &opt, bool longopt) { + if (getDoubleArg(ir, opt, longopt, _mag_arg)) + _mag_given = true; +} + + +void CommandLine::handle_map_file(InputReader &ir, const Option &opt, bool longopt) { + if (getStringArg(ir, opt, longopt, _map_file_arg)) + _map_file_given = true; +} + + +void CommandLine::handle_no_fonts(InputReader &ir, const Option &opt, bool longopt) { + if (ir.eof() || getIntArg(ir, opt, longopt, _no_fonts_arg)) + _no_fonts_given = true; +} + + +void CommandLine::handle_no_mktexmf(InputReader &ir, const Option &opt, bool longopt) { + _no_mktexmf_given = true; +} + + +void CommandLine::handle_no_specials(InputReader &ir, const Option &opt, bool longopt) { + if (ir.eof() || getStringArg(ir, opt, longopt, _no_specials_arg)) + _no_specials_given = true; +} + + +void CommandLine::handle_no_styles(InputReader &ir, const Option &opt, bool longopt) { + _no_styles_given = true; +} + + +void CommandLine::handle_output(InputReader &ir, const Option &opt, bool longopt) { + if (getStringArg(ir, opt, longopt, _output_arg)) + _output_given = true; +} + + +void CommandLine::handle_page(InputReader &ir, const Option &opt, bool longopt) { + if (getStringArg(ir, opt, longopt, _page_arg)) + _page_given = true; +} + + +void CommandLine::handle_progress(InputReader &ir, const Option &opt, bool longopt) { + if (ir.eof() || getDoubleArg(ir, opt, longopt, _progress_arg)) + _progress_given = true; +} + + +void CommandLine::handle_rotate(InputReader &ir, const Option &opt, bool longopt) { + if (getDoubleArg(ir, opt, longopt, _rotate_arg)) + _rotate_given = true; +} + + +void CommandLine::handle_scale(InputReader &ir, const Option &opt, bool longopt) { + if (getStringArg(ir, opt, longopt, _scale_arg)) + _scale_given = true; +} + + +void CommandLine::handle_stdout(InputReader &ir, const Option &opt, bool longopt) { + _stdout_given = true; +} + + +void CommandLine::handle_trace_all(InputReader &ir, const Option &opt, bool longopt) { + if (ir.eof() || getBoolArg(ir, opt, longopt, _trace_all_arg)) + _trace_all_given = true; +} + + +void CommandLine::handle_transform(InputReader &ir, const Option &opt, bool longopt) { + if (getStringArg(ir, opt, longopt, _transform_arg)) + _transform_given = true; +} + + +void CommandLine::handle_translate(InputReader &ir, const Option &opt, bool longopt) { + if (getStringArg(ir, opt, longopt, _translate_arg)) + _translate_given = true; +} + + +void CommandLine::handle_verbosity(InputReader &ir, const Option &opt, bool longopt) { + if (getUIntArg(ir, opt, longopt, _verbosity_arg)) + _verbosity_given = true; +} + + +void CommandLine::handle_version(InputReader &ir, const Option &opt, bool longopt) { + if (ir.eof() || getBoolArg(ir, opt, longopt, _version_arg)) + _version_given = true; +} + + +void CommandLine::handle_zip(InputReader &ir, const Option &opt, bool longopt) { + if (ir.eof() || getIntArg(ir, opt, longopt, _zip_arg)) + _zip_given = true; +} + + +void CommandLine::status () const { + cout << 'b'<< setw(20) << "bbox " << bbox_given() << setw(10) << bbox_arg() << endl; + cout << 'C'<< setw(20) << "cache " << cache_given() << setw(10) << cache_arg() << endl; + cout << ' '<< setw(20) << "color " << color_given() << endl; + cout << 'e'<< setw(20) << "exact " << exact_given() << endl; + cout << 'h'<< setw(20) << "help " << help_given() << endl; + cout << ' '<< setw(20) << "keep " << keep_given() << endl; +#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) + cout << ' '<< setw(20) << "libgs " << libgs_given() << setw(10) << libgs_arg() << endl; +#endif + cout << 'l'<< setw(20) << "list-specials " << list_specials_given() << endl; + cout << 'M'<< setw(20) << "mag " << mag_given() << setw(10) << mag_arg() << endl; + cout << 'm'<< setw(20) << "map-file " << map_file_given() << setw(10) << map_file_arg() << endl; + cout << 'n'<< setw(20) << "no-fonts " << no_fonts_given() << setw(10) << no_fonts_arg() << endl; + cout << ' '<< setw(20) << "no-mktexmf " << no_mktexmf_given() << endl; + cout << 'S'<< setw(20) << "no-specials " << no_specials_given() << setw(10) << no_specials_arg() << endl; + cout << ' '<< setw(20) << "no-styles " << no_styles_given() << endl; + cout << 'o'<< setw(20) << "output " << output_given() << setw(10) << output_arg() << endl; + cout << 'p'<< setw(20) << "page " << page_given() << setw(10) << page_arg() << endl; + cout << 'P'<< setw(20) << "progress " << progress_given() << setw(10) << progress_arg() << endl; + cout << 'r'<< setw(20) << "rotate " << rotate_given() << setw(10) << rotate_arg() << endl; + cout << 'c'<< setw(20) << "scale " << scale_given() << setw(10) << scale_arg() << endl; + cout << 's'<< setw(20) << "stdout " << stdout_given() << endl; + cout << 'a'<< setw(20) << "trace-all " << trace_all_given() << setw(10) << trace_all_arg() << endl; + cout << 'T'<< setw(20) << "transform " << transform_given() << setw(10) << transform_arg() << endl; + cout << 't'<< setw(20) << "translate " << translate_given() << setw(10) << translate_arg() << endl; + cout << 'v'<< setw(20) << "verbosity " << verbosity_given() << setw(10) << verbosity_arg() << endl; + cout << 'V'<< setw(20) << "version " << version_given() << setw(10) << version_arg() << endl; + cout << 'z'<< setw(20) << "zip " << zip_given() << setw(10) << zip_arg() << endl; + CmdLineParserBase::status(); +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CommandLine.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CommandLine.h new file mode 100644 index 00000000000..5d1eb7bd078 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/CommandLine.h @@ -0,0 +1,151 @@ +// This file was automatically generated by opt2cpp. +// It is part of the dvisvgm package and published under the terms +// of the GNU General Public License version 3 or later. +// See file COPYING for further details. +// (C) 2009-2011 Martin Gieseking + +#ifndef COMMANDLINE_H +#define COMMANDLINE_H + +#if HAVE_CONFIG_H +#include "config.h" +#endif +#include "CmdLineParserBase.h" + +class CommandLine : public CmdLineParserBase +{ + public: + CommandLine () {init();} + CommandLine (int argc, char **argv, bool printErrors) {parse(argc, argv, printErrors);} + void help () const; + void status () const; + bool page_given () const {return _page_given;} + const std::string& page_arg () const {return _page_arg;} + bool map_file_given () const {return _map_file_given;} + const std::string& map_file_arg () const {return _map_file_arg;} + bool bbox_given () const {return _bbox_given;} + const std::string& bbox_arg () const {return _bbox_arg;} + bool output_given () const {return _output_given;} + const std::string& output_arg () const {return _output_arg;} + bool stdout_given () const {return _stdout_given;} + bool no_fonts_given () const {return _no_fonts_given;} + int no_fonts_arg () const {return _no_fonts_arg;} + bool no_styles_given () const {return _no_styles_given;} + bool zip_given () const {return _zip_given;} + int zip_arg () const {return _zip_arg;} + bool rotate_given () const {return _rotate_given;} + double rotate_arg () const {return _rotate_arg;} + bool scale_given () const {return _scale_given;} + const std::string& scale_arg () const {return _scale_arg;} + bool translate_given () const {return _translate_given;} + const std::string& translate_arg () const {return _translate_arg;} + bool transform_given () const {return _transform_given;} + const std::string& transform_arg () const {return _transform_arg;} + bool cache_given () const {return _cache_given;} + const std::string& cache_arg () const {return _cache_arg;} + bool exact_given () const {return _exact_given;} + bool keep_given () const {return _keep_given;} +#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) + bool libgs_given () const {return _libgs_given;} + const std::string& libgs_arg () const {return _libgs_arg;} +#endif + bool mag_given () const {return _mag_given;} + double mag_arg () const {return _mag_arg;} + bool no_mktexmf_given () const {return _no_mktexmf_given;} + bool no_specials_given () const {return _no_specials_given;} + const std::string& no_specials_arg () const {return _no_specials_arg;} + bool trace_all_given () const {return _trace_all_given;} + bool trace_all_arg () const {return _trace_all_arg;} + bool color_given () const {return _color_given;} + bool help_given () const {return _help_given;} + bool list_specials_given () const {return _list_specials_given;} + bool progress_given () const {return _progress_given;} + double progress_arg () const {return _progress_arg;} + bool verbosity_given () const {return _verbosity_given;} + unsigned verbosity_arg () const {return _verbosity_arg;} + bool version_given () const {return _version_given;} + bool version_arg () const {return _version_arg;} + + protected: + void init (); + const CmdLineParserBase::Option* options () const {return _options;} + void handle_page (InputReader &ir, const Option &opt, bool longopt); + void handle_map_file (InputReader &ir, const Option &opt, bool longopt); + void handle_bbox (InputReader &ir, const Option &opt, bool longopt); + void handle_output (InputReader &ir, const Option &opt, bool longopt); + void handle_stdout (InputReader &ir, const Option &opt, bool longopt); + void handle_no_fonts (InputReader &ir, const Option &opt, bool longopt); + void handle_no_styles (InputReader &ir, const Option &opt, bool longopt); + void handle_zip (InputReader &ir, const Option &opt, bool longopt); + void handle_rotate (InputReader &ir, const Option &opt, bool longopt); + void handle_scale (InputReader &ir, const Option &opt, bool longopt); + void handle_translate (InputReader &ir, const Option &opt, bool longopt); + void handle_transform (InputReader &ir, const Option &opt, bool longopt); + void handle_cache (InputReader &ir, const Option &opt, bool longopt); + void handle_exact (InputReader &ir, const Option &opt, bool longopt); + void handle_keep (InputReader &ir, const Option &opt, bool longopt); +#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) + void handle_libgs (InputReader &ir, const Option &opt, bool longopt); +#endif + void handle_mag (InputReader &ir, const Option &opt, bool longopt); + void handle_no_mktexmf (InputReader &ir, const Option &opt, bool longopt); + void handle_no_specials (InputReader &ir, const Option &opt, bool longopt); + void handle_trace_all (InputReader &ir, const Option &opt, bool longopt); + void handle_color (InputReader &ir, const Option &opt, bool longopt); + void handle_help (InputReader &ir, const Option &opt, bool longopt); + void handle_list_specials (InputReader &ir, const Option &opt, bool longopt); + void handle_progress (InputReader &ir, const Option &opt, bool longopt); + void handle_verbosity (InputReader &ir, const Option &opt, bool longopt); + void handle_version (InputReader &ir, const Option &opt, bool longopt); + + private: + static const CmdLineParserBase::Option _options[]; + bool _page_given; + std::string _page_arg; + bool _map_file_given; + std::string _map_file_arg; + bool _bbox_given; + std::string _bbox_arg; + bool _output_given; + std::string _output_arg; + bool _stdout_given; + bool _no_fonts_given; + int _no_fonts_arg; + bool _no_styles_given; + bool _zip_given; + int _zip_arg; + bool _rotate_given; + double _rotate_arg; + bool _scale_given; + std::string _scale_arg; + bool _translate_given; + std::string _translate_arg; + bool _transform_given; + std::string _transform_arg; + bool _cache_given; + std::string _cache_arg; + bool _exact_given; + bool _keep_given; +#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) + bool _libgs_given; + std::string _libgs_arg; +#endif + bool _mag_given; + double _mag_arg; + bool _no_mktexmf_given; + bool _no_specials_given; + std::string _no_specials_arg; + bool _trace_all_given; + bool _trace_all_arg; + bool _color_given; + bool _help_given; + bool _list_specials_given; + bool _progress_given; + double _progress_arg; + bool _verbosity_given; + unsigned _verbosity_arg; + bool _version_given; + bool _version_arg; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DLLoader.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DLLoader.cpp new file mode 100644 index 00000000000..8d6c48c4c85 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DLLoader.cpp @@ -0,0 +1,53 @@ +/************************************************************************* +** DLLoader.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include "DLLoader.h" + + +DLLoader::DLLoader (const char *dlname) { +#ifdef __WIN32__ + _handle = LoadLibrary(dlname); +#else + _handle = dlopen(dlname, RTLD_LAZY); +#endif +} + + +DLLoader::~DLLoader () { + if (_handle) { +#ifdef __WIN32__ + FreeLibrary(_handle); +#else + dlclose(_handle); +#endif + } +} + + +void* DLLoader::loadFunction (const char *name) { + if (_handle) { +#ifdef __WIN32__ + return (void*)GetProcAddress(_handle, name); +#else + return dlsym(_handle, name); +#endif + } + return 0; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DLLoader.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DLLoader.h new file mode 100644 index 00000000000..c68533e3486 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DLLoader.h @@ -0,0 +1,52 @@ +/************************************************************************* +** DLLoader.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef DLLOADER_H +#define DLLOADER_H + +#ifdef __WIN32__ + #undef NOMINMAX + #define NOMINMAX 1 + #include +#else + #include +#endif + + +class DLLoader +{ + public: + DLLoader (const char *dlname); + virtual ~DLLoader (); + bool loaded () const {return _handle != 0;} + + protected: + DLLoader () : _handle(0) {} + void* loadFunction (const char *name); + + private: +#ifdef __WIN32__ + HINSTANCE _handle; +#else + void *_handle; +#endif +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIActions.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIActions.cpp new file mode 100644 index 00000000000..355a59efaba --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIActions.cpp @@ -0,0 +1,26 @@ +/************************************************************************* +** DVIActions.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include "DVIActions.h" + +const double DVIActions::BP = 72.0/72.27; +const double DVIActions::IN = 1.0/72.27; +const double DVIActions::CM = 2.54*IN; +const double DVIActions::MM = 25.4*IN; diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIActions.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIActions.h new file mode 100644 index 00000000000..42ae3330b07 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIActions.h @@ -0,0 +1,56 @@ +/************************************************************************* +** DVIActions.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef DVIACTIONS_H +#define DVIACTIONS_H + +#include +#include "Message.h" +#include "types.h" + +class BoundingBox; +class Font; +class SpecialManager; + + +struct DVIActions +{ + static const double BP; + static const double IN; + static const double CM; + static const double MM; + virtual ~DVIActions () {} + virtual void setChar (double x, double y, unsigned c, const Font *f) {} + virtual void setRule (double x, double y, double height, double width) {} + virtual void moveToX (double x) {} + virtual void moveToY (double y) {} + virtual void defineFont (int num, const Font *font) {} + virtual void setFont (int num, const Font *font) {} + virtual void special (const std::string &s) {} + virtual void preamble (const std::string &cmt) {} + virtual void postamble () {} + virtual void beginPage (unsigned n, Int32 *c) {} + virtual void endPage () {} + virtual BoundingBox& bbox () =0; + virtual const SpecialManager* setProcessSpecials (const char *ignorelist) {return 0;} + virtual void progress (size_t current, size_t total, const char *id=0) {} +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIReader.cpp new file mode 100644 index 00000000000..b4ba8bc00d6 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIReader.cpp @@ -0,0 +1,680 @@ +/************************************************************************* +** DVIReader.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include +#include "types.h" +#include "DVIActions.h" +#include "DVIReader.h" +#include "Font.h" +#include "FontManager.h" +#include "Message.h" +#include "SignalHandler.h" +#include "VectorStream.h" +#include "macros.h" + +using namespace std; + +bool DVIReader::COMPUTE_PAGE_LENGTH = false; + + +DVIReader::DVIReader (istream &is, DVIActions *a) : StreamReader(is), _actions(a) +{ + _inPage = false; + _pageHeight = _pageWidth = 0; + _scaleFactor = 0.0; + _tx = _ty = 0; // no cursor translation + _prevYPos = numeric_limits::min(); + _inPostamble = false; + _totalPages = 0; // we don't know the correct value yet + _currFontNum = 0; + _currPageNum = 0; + _pageLength = 0; + _pagePos = 0; +} + + +DVIActions* DVIReader::replaceActions (DVIActions *a) { + DVIActions *prev_actions = _actions; + _actions = a; + return prev_actions; +} + + +/** Evaluates the next DVI command, and computes the corresponding handler. + * @param[in] compute_size if true, the size of variable-length parameters is computed + * @param[out] handler handler for current DVI command + * @param[out] number of parameter bytes + * @param[out] param the handler must be called with this parameter + * @return opcode of current DVI command */ +int DVIReader::evalCommand (bool compute_size, CommandHandler &handler, int &length, int ¶m) { + struct DVICommand { + CommandHandler handler; + int length; // number of parameter bytes + }; + + /* Each cmdFOO command reads the necessary number of bytes from the stream, so executeCommand + doesn't need to know the exact DVI command format. Some cmdFOO methods are used for multiple + DVI commands because they only differ in length of their parameters. */ + static const DVICommand commands[] = { + {&DVIReader::cmdSetChar, 1}, {&DVIReader::cmdSetChar, 2}, {&DVIReader::cmdSetChar, 3}, {&DVIReader::cmdSetChar, 4}, // 128-131 + {&DVIReader::cmdSetRule, 8}, // 132 + {&DVIReader::cmdPutChar, 1}, {&DVIReader::cmdPutChar, 2}, {&DVIReader::cmdPutChar, 3}, {&DVIReader::cmdPutChar, 4}, // 133-136 + {&DVIReader::cmdPutRule, 8}, // 137 + {&DVIReader::cmdNop, 0}, // 138 + {&DVIReader::cmdBop, 44}, {&DVIReader::cmdEop, 0}, // 139-140 + {&DVIReader::cmdPush, 0}, {&DVIReader::cmdPop, 0}, // 141-142 + {&DVIReader::cmdRight, 1}, {&DVIReader::cmdRight, 2}, {&DVIReader::cmdRight, 3}, {&DVIReader::cmdRight, 4}, // 143-146 + {&DVIReader::cmdW0, 0}, // 147 + {&DVIReader::cmdW, 1}, {&DVIReader::cmdW, 2}, {&DVIReader::cmdW, 3}, {&DVIReader::cmdW, 4}, // 148-151 + {&DVIReader::cmdX0, 0}, // 152 + {&DVIReader::cmdX, 1}, {&DVIReader::cmdX, 2}, {&DVIReader::cmdX, 3}, {&DVIReader::cmdX, 4}, // 153-156 + {&DVIReader::cmdDown, 1}, {&DVIReader::cmdDown, 2}, {&DVIReader::cmdDown, 3}, {&DVIReader::cmdDown, 4}, // 157-160 + {&DVIReader::cmdY0, 0}, // 161 + {&DVIReader::cmdY, 1}, {&DVIReader::cmdY, 2}, {&DVIReader::cmdY, 3}, {&DVIReader::cmdY, 4}, // 162-165 + {&DVIReader::cmdZ0, 0}, // 166 + {&DVIReader::cmdZ, 1}, {&DVIReader::cmdZ, 2}, {&DVIReader::cmdZ, 3}, {&DVIReader::cmdZ, 4}, // 167-170 + {&DVIReader::cmdFontNum, 1}, {&DVIReader::cmdFontNum, 2}, {&DVIReader::cmdFontNum, 3}, {&DVIReader::cmdFontNum, 4}, // 235-238 + {&DVIReader::cmdXXX, 1}, {&DVIReader::cmdXXX, 2}, {&DVIReader::cmdXXX, 3}, {&DVIReader::cmdXXX, 4}, // 239-242 + {&DVIReader::cmdFontDef, 1}, {&DVIReader::cmdFontDef, 2}, {&DVIReader::cmdFontDef, 3}, {&DVIReader::cmdFontDef, 4}, // 243-246 + {&DVIReader::cmdPre, 0}, {&DVIReader::cmdPost, 0}, {&DVIReader::cmdPostPost, 0} // 247-249 + }; + + const int opcode = in().get(); + if (!in() || opcode < 0) // at end of file + throw InvalidDVIFileException("invalid file"); + + param = -1; + if (opcode >= 0 && opcode <= 127) { + handler = &DVIReader::cmdSetChar0; + length = 0; + param = opcode; + } + else if (opcode >= 171 && opcode <= 234) { + handler = &DVIReader::cmdFontNum0; + length = 0; + param = opcode-171; + } + else if (opcode >= 250) { + ostringstream oss; + oss << "undefined DVI command (opcode " << opcode << ')'; + throw DVIException(oss.str()); + } + else { + const int offset = opcode <= 170 ? 128 : 235-(170-128+1); + handler = commands[opcode-offset].handler; + if (!compute_size) + length = commands[opcode-offset].length; + else { + if (opcode >= 239 && opcode <= 242) { // specials + int len = opcode-238; + UInt32 bytes = readUnsigned(len); + in().seekg(-len, ios_base::cur); + length = len+bytes; + } + else if (opcode >= 243 && opcode <= 246) { // fontdefs + int len = opcode-242; + len += 12; + in().seekg(len, ios_base::cur); // skip fontnum, checksum, ssize, dsize + UInt32 bytes = readUnsigned(1); // length of font path + bytes += readUnsigned(1); // length of font name + in().seekg(-len-2, ios_base::cur); + length = len+bytes; + } + else + length = commands[opcode-offset].length; + } + } + if (param < 0) + param = length; + return opcode; +} + + +/** Reads a single DVI command from the current position of the input stream and calls the + * corresponding cmdFOO method. + * @return opcode of the executed command */ +int DVIReader::executeCommand () { + SignalHandler::instance().check(); + CommandHandler handler; + int len; // number of parameter bytes + int param; // parameter of handler + streampos pos = in().tellg(); + int opcode = evalCommand(false, handler, len, param); + (this->*handler)(param); + if (_currPos.v+_ty != _prevYPos) { + _tx = _ty = 0; + _prevYPos = _currPos.v; + } + if (COMPUTE_PAGE_LENGTH && _inPage && _actions) { + // ensure progress() is called at 0% + if (opcode == 139) // bop? + _actions->progress(0, _pageLength); + // ensure progress() is called at 100% + if (in().peek() == 140) // eop reached? + _pagePos = _pageLength; + else + _pagePos += in().tellg()-pos; + _actions->progress(_pagePos, _pageLength); + } + return opcode; +} + + +/** Executes all DVI commands read from the input stream. */ +void DVIReader::executeAll () { + int opcode = 0; + while (!in().eof() && opcode >= 0) { + try { + opcode = executeCommand(); + } + catch (const InvalidDVIFileException &e) { + // end of stream reached + opcode = -1; + } + } +} + + +#if 0 +/** Executes all DVI commands from the preamble to postpost. */ +bool DVIReader::executeDocument () { + in().clear(); // reset all status bits + if (!in()) + return false; + in().seekg(0); // move file pointer to first byte of the input stream + while (!in().eof() && executeCommand() != 249); // stop reading after postpost (249) + return true; +} + +bool DVIReader::executeAllPages () { + in().clear(); // reset all status bits + if (!in()) + return false; + in().seekg(0); // move file pointer to first byte of the input stream + while (!in().eof() && executeCommand() != 248); // stop reading when postamble (248) is reached + return true; +} +#endif + + +/** Reads and executes the commands of a single page. + * This methods stops reading after the page's eop command has been executed. + * @param[in] n number of page to be executed + * @returns true if page was read successfully */ +bool DVIReader::executePage (unsigned n) { + in().clear(); // reset all status bits + if (!in()) + throw DVIException("invalid DVI file"); + in().seekg(-1, ios_base::end); // stream pointer to last byte + while (in().peek() == 223) + in().seekg(-1, ios_base::cur); // skip fill bytes + in().seekg(-4, ios_base::cur); // now on first byte of q (pointer to begin of postamble) + UInt32 q = readUnsigned(4); // pointer to begin of postamble + in().seekg(q, ios_base::beg); // now on begin of postamble + if (executeCommand() != 248) // execute postamble command but not the fontdefs + return false; + if (n < 1 || n > _totalPages) + return false; + in().seekg(_prevBop, ios_base::beg); // now on last bop + _inPostamble = false; // we jumped out of the postamble + unsigned pageCount = _totalPages; + for (; pageCount > n && _prevBop > 0; pageCount--) { + in().seekg(41, ios_base::cur); // skip bop and 10*4 \count bytes => now on pointer to prev bop + _prevBop = readSigned(4); + in().seekg(_prevBop, ios_base::beg); + } + _currPageNum = n; + while (pageCount == n && executeCommand() != 140); // 140 == eop + return true; +} + + +bool DVIReader::executePages (unsigned first, unsigned last) { + in().clear(); + if (!in()) + throw DVIException("invalid DVI file"); + if (first > last) + swap(first, last); + in().seekg(-1, ios_base::end); // stream pointer to last byte + while (in().peek() == 223) + in().seekg(-1, ios_base::cur); // skip fill bytes + in().seekg(-4, ios_base::cur); // now on first byte of q (pointer to begin of postamble) + UInt32 q = readUnsigned(4); // pointer to begin of postamble + in().seekg(q, ios_base::beg); // now on begin of postamble + if (executeCommand() != 248) // execute postamble command but not the fontdefs + return false; + first = max(1u, min(first, _totalPages)); + last = max(1u, min(last, _totalPages)); + in().seekg(_prevBop, ios_base::beg); // now on last bop + _inPostamble = false; // we jumped out of the postamble + unsigned count = _totalPages; + for (; count > first && _prevBop > 0; count--) { + in().seekg(41, ios_base::cur); // skip bop and 10*4 \count bytes => now on pointer to prev bop + _prevBop = readSigned(4); + in().seekg(_prevBop, ios_base::beg); + } + while (first <= last) { + _currPageNum = first++; + while (executeCommand () != 140); // 140 == eop + } + return true; +} + + +void DVIReader::executePreamble () { + in().clear(); + if (!in()) + throw DVIException("invalid DVI file"); + in().seekg(0, ios_base::beg); + if (in().get() != 247) + throw DVIException("invalid DVI file"); + cmdPre(0); +} + + +/** Reads and executes the commands of the postamble. */ +void DVIReader::executePostamble () { + in().clear(); // reset all status bits + if (!in()) + throw DVIException("invalid DVI file"); + in().seekg(-1, ios_base::end); // stream pointer to last byte + while (in().peek() == 223) + in().seekg(-1, ios_base::cur); // skip fill bytes + + in().seekg(-4, ios_base::cur); // now on first byte of q (pointer to begin of postamble) + UInt32 q = readUnsigned(4); // pointer to begin of postamble + in().seekg(q, ios_base::beg); // now on begin of postamble + while (executeCommand() != 249); // read all commands until postpost (= 249) is reached +} + + +/** Returns the current x coordinate in TeX point units. + * This is the horizontal position where the next output would be placed. */ +double DVIReader::getXPos () const { + return _currPos.h+_tx; +} + + +/** Returns the current y coordinate in TeX point units. + * This is the vertical position where the next output would be placed. */ +double DVIReader::getYPos () const { + return _currPos.v+_ty; +} + + +double DVIReader::getPageHeight () const { + return _pageHeight; +} + + +double DVIReader::getPageWidth () const { + return _pageWidth; +} + +///////////////////////////////////// + +/** Reads and executes DVI preamble command. */ +void DVIReader::cmdPre (int) { + UInt32 i = readUnsigned(1); // identification number (should be 2) + UInt32 num = readUnsigned(4); // numerator units of measurement + UInt32 den = readUnsigned(4); // denominator units of measurement + _mag = readUnsigned(4); // magnification + UInt32 k = readUnsigned(1); // length of following comment + string cmt = readString(k); // comment + if (i != 2) { + ostringstream oss; + oss << "DVI format version " << i << " not supported"; + throw DVIException(oss.str()); + } + // 1 dviunit * num/den == multiples of 0.0000001m + // 1 dviunit * _scaleFactor: length of 1 dviunit in TeX points * _mag/1000 + _scaleFactor = num/25400000.0*7227.0/den*_mag/1000.0; + if (_actions) + _actions->preamble(cmt); +} + + +/** Reads and executes DVI postamble command. */ +void DVIReader::cmdPost (int) { + _prevBop = readUnsigned(4); // pointer to previous bop + UInt32 num = readUnsigned(4); + UInt32 den = readUnsigned(4); + _mag = readUnsigned(4); + _pageHeight = readUnsigned(4); // height of tallest page in dvi units + _pageWidth = readUnsigned(4); // width of widest page in dvi units + readUnsigned(2); // max. stack depth + _totalPages = readUnsigned(2); // total number of pages + // 1 dviunit * num/den == multiples of 0.0000001m + // 1 dviunit * _scaleFactor: length of 1 dviunit in TeX points * _mag/1000 + _scaleFactor = num/25400000.0*7227.0/den*_mag/1000.0; + _pageHeight *= _scaleFactor; // to pt units + _pageWidth *= _scaleFactor; + _inPostamble = true; + if (_actions) + _actions->postamble(); +} + + +/** Reads and executes DVI postpost command. */ +void DVIReader::cmdPostPost (int) { + _inPostamble = false; + readUnsigned(4); // pointer to begin of postamble + UInt32 i = readUnsigned(1); // identification byte (should be 2) + if (i == 2) + while (readUnsigned(1) == 223); // skip fill bytes (223), eof bit should be set now + else + throw DVIException("invalid identification value in postpost"); +} + + +/** Reads and executes Begin-Of-Page command. */ +void DVIReader::cmdBop (int) { + Int32 c[10]; + for (int i=0; i < 10; i++) + c[i] = readSigned(4); + readSigned(4); // pointer to peceeding bop (-1 in case of first page) + _currPos.reset(); // set all DVI registers to 0 + while (!_posStack.empty()) + _posStack.pop(); + _currFontNum = 0; + _inPage = true; + _pageLength = 0; + _pagePos = 0; + if (COMPUTE_PAGE_LENGTH) { + // compute number of bytes in current page + int length, param; + CommandHandler handler; + // read all commands until eop is found + while (evalCommand(true, handler, length, param) != 140) { + in().seekg(length, ios_base::cur); + _pageLength += length+1; // parameter length + opcode length (1 byte) + } + ++_pageLength; // add length of eop command (1 byte) + in().seekg(-int(_pageLength), ios_base::cur); // go back to first command following bop + _pageLength += 45; // add length of bop command + } + beginPage(_currPageNum, c); + if (_actions) + _actions->beginPage(_currPageNum, c); +} + + +/** Reads and executes End-Of-Page command. */ +void DVIReader::cmdEop (int) { + if (!_posStack.empty()) + throw DVIException("stack not empty at end of page"); + _inPage = false; + endPage(); + if (_actions) + _actions->endPage(); +} + + +/** Reads and executes push command. */ +void DVIReader::cmdPush (int) { + _posStack.push(_currPos); +} + + +/** Reads and executes pop command (restores pushed position information). */ +void DVIReader::cmdPop (int) { + if (_posStack.empty()) + throw DVIException("stack empty at pop command"); + else { + DVIPosition prevPos = _currPos; + _currPos = _posStack.top(); + _posStack.pop(); + if (_actions) { + if (prevPos.h != _currPos.h) + _actions->moveToX(_currPos.h + _tx); + if (prevPos.v != _currPos.v) + _actions->moveToY(_currPos.v + _ty); + } + } +} + + +/** Helper function that actually sets/puts a charater. It is called by the + * cmdSetChar and cmdPutChar methods. + * @param[in] c character to typeset + * @param[in] moveCursor if true, register h is increased by the character width + * @throw DVIException if method is called ouside a bop/eop pair */ +void DVIReader::putChar (UInt32 c, bool moveCursor) { + if (!_inPage) + throw DVIException("set_char or put_char outside of page"); + + FontManager &fm = FontManager::instance(); + Font *font = fm.getFont(_currFontNum); + if (!font) + throw DVIException("no font selected"); + + if (VirtualFont *vf = dynamic_cast(font)) { // is current font a virtual font? + vector *dvi = const_cast*>(vf->getDVI(c)); // get DVI snippet that describes character c + if (dvi) { + DVIPosition pos = _currPos; // save current cursor position + _currPos.x = _currPos.y = _currPos.w = _currPos.z = 0; + int save_fontnum = _currFontNum; // save current font number + fm.enterVF(vf); // new font number context + cmdFontNum0(fm.vfFirstFontNum(vf)); + double save_scale = _scaleFactor; + _scaleFactor = vf->scaledSize()/(1 << 20); + + VectorInputStream vis(*dvi); + istream &is = replaceStream(vis); + try { + executeAll(); // execute DVI fragment + } + catch (const DVIException &e) { + // Message::estream(true) << "invalid dvi in vf: " << e.getMessage() << endl; // @@ + } + replaceStream(is); // restore previous input stream + _scaleFactor = save_scale; // restore previous scale factor + fm.leaveVF(); // restore previous font number context + cmdFontNum0(save_fontnum); // restore previous font number + _currPos = pos; // restore previous cursor position + } + } + else if (_actions) { + _actions->setChar(_currPos.h+_tx, _currPos.v+_ty, c, font); + } + if (moveCursor) + _currPos.h += font->charWidth(c) * font->scaleFactor() * _mag/1000.0; +} + + +/** Reads and executes set_char_x command. Puts a character at the current + * position and advances the cursor. + * @param[in] c character to set + * @throw DVIException if method is called ouside a bop/eop pair */ +void DVIReader::cmdSetChar0 (int c) { + putChar(c, true); +} + + +/** Reads and executes setx command. Puts a character at the current + * position and advances the cursor. + * @param[in] len number of parameter bytes (possible values: 1-4) + * @throw DVIException if method is called ouside a bop/eop pair */ +void DVIReader::cmdSetChar (int len) { + // According to the dvi specification all character codes are unsigned + // except len == 4. At the moment all char codes are treated as unsigned... + UInt32 c = readUnsigned(len); // if len == 4 c may be signed + putChar(c, true); +} + + +/** Reads and executes putx command. Puts a character at the current + * position but doesn't change the cursor position. + * @param[in] len number of parameter bytes (possible values: 1-4) + * @throw DVIException if method is called ouside a bop/eop pair */ +void DVIReader::cmdPutChar (int len) { + // According to the dvi specification all character codes are unsigned + // except len == 4. At the moment all char codes are treated as unsigned... + Int32 c = readUnsigned(len); + putChar(c, false); +} + + +/** Reads and executes set_rule command. Puts a solid rectangle at the current + * position and updates the cursor position. + * @throw DVIException if method is called ouside a bop/eop pair */ +void DVIReader::cmdSetRule (int) { + if (_inPage) { + double height = _scaleFactor*readSigned(4); + double width = _scaleFactor*readSigned(4); + if (_actions && height > 0 && width > 0) + _actions->setRule(_currPos.h+_tx, _currPos.v+_ty, height, width); + _currPos.h += width; + if (_actions && (height <= 0 || width <= 0)) + _actions->moveToX(_currPos.h+_tx); + } + else + throw DVIException("set_rule outside of page"); +} + + +/** Reads and executes set_rule command. Puts a solid rectangle at the current + * position but leaves the cursor position unchanged. + * @throw DVIException if method is called ouside a bop/eop pair */ +void DVIReader::cmdPutRule (int) { + if (_inPage) { + double height = _scaleFactor*readSigned(4); + double width = _scaleFactor*readSigned(4); + if (_actions && height > 0 && width > 0) + _actions->setRule(_currPos.h+_tx, _currPos.v+_ty, height, width); + } + else + throw DVIException("put_rule outside of page"); +} + + +void DVIReader::cmdNop (int) {} + +void DVIReader::cmdRight (int len) {_currPos.h += _scaleFactor*readSigned(len); if (_actions) _actions->moveToX(_currPos.h+_tx);} +void DVIReader::cmdDown (int len) {_currPos.v += _scaleFactor*readSigned(len); if (_actions) _actions->moveToY(_currPos.v+_ty);} +void DVIReader::cmdX0 (int) {_currPos.h += _currPos.x; if (_actions) _actions->moveToX(_currPos.h+_tx);} +void DVIReader::cmdY0 (int) {_currPos.v += _currPos.y; if (_actions) _actions->moveToY(_currPos.v+_ty);} +void DVIReader::cmdW0 (int) {_currPos.h += _currPos.w; if (_actions) _actions->moveToX(_currPos.h+_tx);} +void DVIReader::cmdZ0 (int) {_currPos.v += _currPos.z; if (_actions) _actions->moveToY(_currPos.v+_ty);} +void DVIReader::cmdX (int len) {_currPos.x = _scaleFactor*readSigned(len); cmdX0(0);} +void DVIReader::cmdY (int len) {_currPos.y = _scaleFactor*readSigned(len); cmdY0(0);} +void DVIReader::cmdW (int len) {_currPos.w = _scaleFactor*readSigned(len); cmdW0(0);} +void DVIReader::cmdZ (int len) {_currPos.z = _scaleFactor*readSigned(len); cmdZ0(0);} + + +void DVIReader::cmdXXX (int len) { + if (_inPage) { + UInt32 numBytes = readUnsigned(len); + string s = readString(numBytes); + if (_actions) + _actions->special(s); + } + else + throw DVIException("special outside of page"); +} + + +/** Selects a previously defined font by its number. + * @param[in] num font number + * @throw DVIException if font number is undefined */ +void DVIReader::cmdFontNum0 (int num) { + if (Font *font = FontManager::instance().getFont(num)) { + _currFontNum = num; + if (_actions && !dynamic_cast(font)) + _actions->setFont(FontManager::instance().fontID(num), font); // all fonts get a recomputed ID + } + else { + ostringstream oss; + oss << "undefined font number " << num; + throw DVIException(oss.str()); + } +} + + +/** Selects a previously defined font. + * @param[in] len size of font number variable (in bytes) + * @throw DVIException if font number is undefined */ +void DVIReader::cmdFontNum (int len) { + UInt32 num = readUnsigned(len); + cmdFontNum0(num); +} + + +/** Helper function to handle a font definition. + * @param[in] fontnum local font number + * @param[in] name font name + * @param[in] checksum checksum to be compared with TFM checksum + * @param[in] ds design size in TeX point units + * @param[in] ss scaled size in TeX point units */ +void DVIReader::defineFont (UInt32 fontnum, const string &name, UInt32 cs, double ds, double ss) { + FontManager &fm = FontManager::instance(); + int id = fm.registerFont(fontnum, name, cs, ds, ss); + Font *font = fm.getFontById(id); + if (VirtualFont *vf = dynamic_cast(font)) { + // read vf file, register its font and character definitions + fm.enterVF(vf); + ifstream ifs(vf->path(), ios::binary); + VFReader vfReader(ifs); + vfReader.replaceActions(this); + vfReader.executeAll(); + fm.leaveVF(); + } + if (_actions) + _actions->defineFont(id, font); +} + + +/** Defines a new font. + * @param[in] len size of font number variable (in bytes) */ +void DVIReader::cmdFontDef (int len) { + UInt32 fontnum = readUnsigned(len); // font number + UInt32 checksum = readUnsigned(4); // font checksum (to be compared with corresponding TFM checksum) + UInt32 ssize = readUnsigned(4); // scaled size of font in DVI units + UInt32 dsize = readUnsigned(4); // design size of font in DVI units + UInt32 pathlen = readUnsigned(1); // length of font path + UInt32 namelen = readUnsigned(1); // length of font name + string fontpath = readString(pathlen); + string fontname = readString(namelen); + + defineFont(fontnum, fontname, checksum, dsize*_scaleFactor, ssize*_scaleFactor); +} + + +/** This template method is called by the VFReader after reading a font definition from a VF file. + * @param[in] fontnum local font number + * @param[in] name font name + * @param[in] checksum checksum to be compared with TFM checksum + * @param[in] dsize design size in TeX point units + * @param[in] ssize scaled size in TeX point units */ +void DVIReader::defineVFFont (UInt32 fontnum, string path, string name, UInt32 checksum, double dsize, double ssize) { + VirtualFont *vf = FontManager::instance().getVF(); + defineFont(fontnum, name, checksum, dsize, ssize * vf->scaleFactor()); +} + + +/** This template method is called by the VFReader after reading a character definition from a VF file. + * @param[in] c character number + * @param[in] dvi DVI fragment describing the character */ +void DVIReader::defineVFChar (UInt32 c, vector *dvi) { + FontManager::instance().assignVfChar(c, dvi); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIReader.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIReader.h new file mode 100644 index 00000000000..524310457f8 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIReader.h @@ -0,0 +1,147 @@ +/************************************************************************* +** DVIReader.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef DVIREADER_H +#define DVIREADER_H + +#include +#include +#include +#include +#include "MessageException.h" +#include "StreamReader.h" +#include "VFActions.h" +#include "types.h" + + +struct DVIException : public MessageException +{ + DVIException (const std::string &msg) : MessageException(msg) {} +}; + +struct InvalidDVIFileException : public DVIException +{ + InvalidDVIFileException(const std::string &msg) : DVIException(msg) {} +}; + +class DVIActions; +class FileFinder; + +class DVIReader : public StreamReader, protected VFActions +{ + typedef void (DVIReader::*CommandHandler)(int); + + struct DVIPosition + { + double h, v; + double x, w, y, z; + DVIPosition () {reset();} + void reset () {h = v = x = w = y = z = 0.0;} + }; + + public: + DVIReader (std::istream &is, DVIActions *a=0); + + bool executeDocument (); + void executeAll (); + bool executeAllPages (); + void executePreamble (); + void executePostamble (); + bool executePage (unsigned n); + bool executePages (unsigned first, unsigned last); + bool inPostamble () const {return _inPostamble;} + double getXPos () const; + double getYPos () const; + void finishLine () {_prevYPos = std::numeric_limits::min();} + void translateToX (double x) {_tx=x-_currPos.h-_tx;} + void translateToY (double y) {_ty=y-_currPos.v-_ty;} + double getPageWidth () const; + double getPageHeight () const; + int getCurrentFontNumber () const {return _currFontNum;} + unsigned getCurrentPageNumber () const {return _currPageNum;} + unsigned getTotalPages () const {return _totalPages;} + DVIActions* getActions () const {return _actions;} + DVIActions* replaceActions (DVIActions *a); + + protected: + int executeCommand (); + int evalCommand (bool compute_size, CommandHandler &handler, int &length, int ¶m); + void putChar (UInt32 c, bool moveCursor); + void defineFont (UInt32 fontnum, const std::string &name, UInt32 cs, double ds, double ss); + virtual void beginPage (unsigned n, Int32 *c) {} + virtual void endPage () {} + + // VFAction methods + void defineVFFont (UInt32 fontnum, std::string path, std::string name, UInt32 checksum, double dsize, double ssize); + void defineVFChar (UInt32 c, std::vector *dvi); + + // the following methods represent the DVI commands + // they are called by executeCommand and should not be used directly + void cmdSetChar0 (int c); + void cmdSetChar (int len); + void cmdPutChar (int len); + void cmdSetRule (int len); + void cmdPutRule (int len); + void cmdNop (int len); + void cmdBop (int len); + void cmdEop (int len); + void cmdPush (int len); + void cmdPop (int len); + void cmdRight (int len); + void cmdDown (int len); + void cmdX0 (int len); + void cmdY0 (int len); + void cmdW0 (int len); + void cmdZ0 (int len); + void cmdX (int len); + void cmdY (int len); + void cmdW (int len); + void cmdZ (int len); + void cmdFontDef (int len); + void cmdFontNum0 (int n); + void cmdFontNum (int len); + void cmdXXX (int len); + void cmdPre (int len); + void cmdPost (int len); + void cmdPostPost (int len); + + private: + DVIActions *_actions; ///< actions to be performed on various DVI events + bool _inPage; ///< true if between bop and eop + unsigned _totalPages; ///< total number of pages in dvi file + unsigned _currPageNum; ///< current page number + int _currFontNum; ///< current font number + double _scaleFactor; ///< 1 dvi unit = scaleFactor * TeX points + UInt32 _mag; ///< magnification factor * 1000 + bool _inPostamble; ///< true if stream pointer is inside the postamble + Int32 _prevBop; ///< pointer to previous bop + double _pageHeight, _pageWidth; ///< page height and width in TeX points + DVIPosition _currPos; ///< current cursor position + std::stack _posStack; + double _prevYPos; ///< previous vertical cursor position + double _tx, _ty; ///< tranlation of cursor position + size_t _pageLength; ///< number of bytes between current bop end eop + std::streampos _pagePos; ///< distance of current DVI command from bop (in bytes) + + public: + static bool COMPUTE_PAGE_LENGTH; ///< if true, the bop handler computes the number of bytes of the current page +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVG.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVG.cpp new file mode 100644 index 00000000000..34f4efcc49d --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVG.cpp @@ -0,0 +1,342 @@ +/************************************************************************* +** DVIToSVG.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#define VERSION_STR VERSION " (" TARGET_SYSTEM ")" +#else +#define VERSION_STR "" +#endif + +#include +#include +#include +#include +#include "Calculator.h" +#include "DVIToSVG.h" +#include "DVIToSVGActions.h" +#include "Font.h" +#include "FontManager.h" +#include "FileFinder.h" +#include "GlyphTracerMessages.h" +#include "InputBuffer.h" +#include "InputReader.h" +#include "Matrix.h" +#include "Message.h" +#include "PageRanges.h" +#include "PageSize.h" +#include "SVGTree.h" +#include "TFM.h" +#include "XMLDocument.h" +#include "XMLDocTypeNode.h" +#include "XMLNode.h" +#include "XMLString.h" +// +/////////////////////////////////// +// special handlers + +#include "BgColorSpecialHandler.h" +#include "ColorSpecialHandler.h" +#include "DvisvgmSpecialHandler.h" +#include "EmSpecialHandler.h" +//#include "HtmlSpecialHandler.h" +#if !defined(DISABLE_GS) + #include "PsSpecialHandler.h" +#endif +#include "TpicSpecialHandler.h" +/////////////////////////////////// + + +using namespace std; + + +/** Returns time stamp of current date/time. */ +static string datetime () { + time_t t; + time(&t); + struct tm *tm = localtime(&t); + char *timestr = asctime(tm); + timestr[24] = 0; // remove newline + return timestr; +} + +class PSHeaderActions : public DVIActions +{ + public : + PSHeaderActions (DVIToSVG &dvisvg) : _dvisvg(dvisvg) {} + + void special (const std::string &s) { + // execute PS headers only + if (!s.empty() && (s[0] == '!' || s.substr(0, 7) == "header=")) + _dvisvg.specialManager().process(s, 0); + } + + BoundingBox& bbox () {return _bbox;} + + private: + DVIToSVG &_dvisvg; + BoundingBox _bbox; +}; + + +/** 'a': trace all glyphs even if some of them are already cached + * 'm': trace missing glyphs, i.e. glyphs not yet cached + * 0 : only trace actually required glyphs */ +char DVIToSVG::TRACE_MODE = 0; + + +DVIToSVG::DVIToSVG (istream &is, DVIToSVG::Output &out) : DVIReader(is), _out(out) +{ + replaceActions(new DVIToSVGActions(*this, _svg)); +} + + +DVIToSVG::~DVIToSVG () { + delete replaceActions(0); +} + + +/** Starts the conversion process. + * @param[in] first number of first page to convert + * @param[in] last number of last page to convert + * @param[out] pageinfo (number of converted pages, number of total pages) */ +void DVIToSVG::convert (unsigned first, unsigned last, pair *pageinfo) { + if (getTotalPages() == 0) { + executePreamble(); + executePostamble(); // collect scaling and font information + } + if (first > last) + swap(first, last); + if (first > getTotalPages()) { + ostringstream oss; + oss << "file contains only " << getTotalPages() << " page"; + if (getTotalPages() > 1) + oss << 's'; + throw DVIException(oss.str()); + } + last = min(last, getTotalPages()); + + if (first > 1) { + // ensure loading of PostScript prologues given at the beginning of the first page + // (prologue files are always referenced in first page) + PSHeaderActions headerActions(*this); + DVIActions *save = replaceActions(&headerActions); + executePage(1); + replaceActions(save); + } + for (unsigned i=first; i <= last; ++i) { + executePage(i); + embedFonts(_svg.rootNode()); + _svg.write(_out.getPageStream(getCurrentPageNumber(), getTotalPages())); + string fname = _out.filename(i, getTotalPages()); + Message::mstream(false, Message::MC_PAGE_WRITTEN) << "\npage written to " << (fname.empty() ? "" : fname) << '\n'; + _svg.reset(); + static_cast(getActions())->reset(); + } + if (pageinfo) { + pageinfo->first = last-first+1; + pageinfo->second = getTotalPages(); + } +} + + +/** Convert DVI pages specified by a page range string. + * @param[in] rangestr string describing the pages to convert + * @param[out] pageinfo (number of converted pages, number of total pages) */ +void DVIToSVG::convert (const string &rangestr, pair *pageinfo) { + if (getTotalPages() == 0) { + executePreamble(); + executePostamble(); // collect scaling and font information + } + PageRanges ranges; + if (!ranges.parse(rangestr, getTotalPages())) + throw MessageException("invalid page range format"); + FORALL(ranges, PageRanges::ConstIterator, it) + convert(it->first, it->second); + if (pageinfo) { + pageinfo->first = ranges.pages(); + pageinfo->second = getTotalPages(); + } +} + + +/** This template method is called by parent class DVIReader before + * executing the BOP actions. + * @param[in] c contains information about the page (page number etc.) */ +void DVIToSVG::beginPage (unsigned n, Int32 *c) { + if (dynamic_cast(getActions())) { + Message::mstream().indent(0); + Message::mstream(false, Message::MC_PAGE_NUMBER) << "processing page " << n << " [" << c[0] << ']'; + Message::mstream().indent(1); + _svg.appendToDoc(new XMLCommentNode(" This file was generated by dvisvgm "VERSION_STR" ")); + _svg.appendToDoc(new XMLCommentNode(" " + datetime() + " ")); + } +} + + +/** This template method is called by parent class DVIReader before + * executing the EOP actions. */ +void DVIToSVG::endPage () { + if (!dynamic_cast(getActions())) + return; + + _specialManager.notifyEndPage(); + // set bounding box and apply page transformations + BoundingBox &bbox = getActions()->bbox(); + if (!_transCmds.empty()) { + Calculator calc; + calc.setVariable("ux", bbox.minX()); + calc.setVariable("uy", bbox.minY()); + calc.setVariable("w", bbox.width()); + calc.setVariable("h", bbox.height()); + calc.setVariable("pt", 1); + calc.setVariable("in", 72.27); + calc.setVariable("cm", 72.27/2.54); + calc.setVariable("mm", 72.27/25.4); + Matrix matrix(_transCmds, calc); + static_cast(getActions())->setPageMatrix(matrix); + if (_bboxString == "min") + bbox.transform(matrix); + } + if (string("dvi none min").find(_bboxString) == string::npos) { + istringstream iss(_bboxString); + StreamInputReader ir(iss); + ir.skipSpace(); + if (isalpha(ir.peek())) { + // set explicitly given page format + PageSize size(_bboxString); + if (size.valid()) { + // convention: DVI position (0,0) equals (1in, 1in) relative + // to the upper left vertex of the page (see DVI specification) + const double border = -72.27; + bbox = BoundingBox(border, border, size.widthInPT()+border, size.heightInPT()+border); + } + } + else { // set/modify bounding box by explicitly given values + try { + bbox.set(_bboxString); + } + catch (const MessageException &e) { + } + } + } + else if (_bboxString == "dvi") { + // center page content + double dx = (getPageWidth()-bbox.width())/2; + double dy = (getPageHeight()-bbox.height())/2; + bbox += BoundingBox(-dx, -dy, dx, dy); + } + if (_bboxString != "none") { + if (bbox.width() == 0) + Message::wstream(false) << "\npage is empty\n"; + else { + _svg.setBBox(bbox); + + Message::mstream(false) << '\n'; + Message::mstream(false, Message::MC_PAGE_SIZE) << "page size: " << bbox.width() << "pt" + " x " << bbox.height() << "pt" + " (" << bbox.width()/72.27*25.4 << "mm" + " x " << bbox.height()/72.27*25.4 << "mm)"; + Message::mstream(false) << '\n'; + } + } +} + + +static void collect_chars (map > &fm) { + typedef const map > UsedCharsMap; + FORALL(fm, UsedCharsMap::const_iterator, it) { + if (it->first->uniqueFont() != it->first) { + FORALL(it->second, set::const_iterator, cit) + fm[it->first->uniqueFont()].insert(*cit); + } + } +} + + +/** Adds the font information to the SVG tree. + * @param[in] svgElement the font nodes are added to this node */ +void DVIToSVG::embedFonts (XMLElementNode *svgElement) { + if (!svgElement) + return; + if (!getActions()) // no dvi actions => no chars written => no fonts to embed + return; + + typedef map > UsedCharsMap; + const DVIToSVGActions *svgActions = static_cast(getActions()); + UsedCharsMap &usedChars = svgActions->getUsedChars(); + + collect_chars(usedChars); + + GlyphTracerMessages messages; + FORALL(usedChars, UsedCharsMap::const_iterator, it) { + const Font *font = it->first; + if (const PhysicalFont *ph_font = dynamic_cast(font)) { + if (TRACE_MODE) + ph_font->traceAllGlyphs(TRACE_MODE == 'a', &messages); + + if (font->path()) // does font file exist? + _svg.append(*ph_font, it->second, &messages); + else + Message::wstream(true) << "can't embed font '" << font->name() << "'\n"; + } + else + Message::wstream(true) << "can't embed font '" << font->name() << "'\n"; + } + _svg.appendFontStyles(svgActions->getUsedFonts()); +} + + +/** Enables or disables processing of specials. If ignorelist == 0, all + * supported special handlers are loaded. To disable selected sets of specials, + * the corresponding prefixes can be given separated by non alpha-numeric characters, + * e.g. "color, ps, em" or "color: ps em" etc. + * A single "*" in the ignore list disables all specials. + * @param[in] ignorelist list of special prefixes to ignore + * @return the SpecialManager that handles special statements */ +const SpecialManager* DVIToSVG::setProcessSpecials (const char *ignorelist) { + if (ignorelist && strcmp(ignorelist, "*") == 0) { // ignore all specials? + _specialManager.unregisterHandlers(); + } + else { + // add special handlers + SpecialHandler *handlers[] = { + 0, // placeholder for PsSpecialHandler + new BgColorSpecialHandler, // handles background color special + new ColorSpecialHandler, // handles color specials + new DvisvgmSpecialHandler, // handles raw SVG embeddings + new EmSpecialHandler, // handles emTeX specials +// new HtmlSpecialHandler, // handles hyperref specials + new TpicSpecialHandler, // handles tpic specials + 0 + }; + SpecialHandler **p = handlers; +#if !defined(DISABLE_GS) + if (Ghostscript().available()) + *p = new PsSpecialHandler; + else +#endif + p++; + _specialManager.unregisterHandlers(); + _specialManager.registerHandlers(p, ignorelist); + } + return &_specialManager; +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVG.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVG.h new file mode 100644 index 00000000000..0e5fa7da7d8 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVG.h @@ -0,0 +1,70 @@ +/************************************************************************* +** DVIToSVG.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef DVITOSVG_H +#define DVITOSVG_H + +#include +#include +#include +#include "DVIReader.h" +#include "SpecialManager.h" +#include "SVGTree.h" + + +class DVIToSVG : public DVIReader +{ + public: + /** DVIToSVG uses this interface to get the output streams for the SVG files. */ + struct Output { + virtual ~Output () {} + virtual std::ostream& getPageStream (int page, int numPages) const =0; + virtual std::string filename (int page, int numPages) const =0; + }; + + public: + DVIToSVG (std::istream &is, Output &out); + ~DVIToSVG (); + void convert (unsigned firstPage, unsigned lastPage, std::pair *pageinfo=0); + void convert (const std::string &range, std::pair *pageinfo=0); + const SpecialManager* setProcessSpecials (const char *ignorelist=0); + const SpecialManager& specialManager () const {return _specialManager;} + void setPageSize (const std::string &name) {_bboxString = name;} + void setTransformation (const std::string &cmds) {_transCmds = cmds;} + + public: + static char TRACE_MODE; + + protected: + DVIToSVG (const DVIToSVG &); + DVIToSVG operator = (const DVIToSVG &); + void beginPage (unsigned n, Int32 *c); + void endPage (); + void embedFonts (XMLElementNode *svgElement); + + private: + SVGTree _svg; + Output &_out; + std::string _bboxString; + std::string _transCmds; + SpecialManager _specialManager; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVGActions.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVGActions.cpp new file mode 100644 index 00000000000..0a55195cd3b --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVGActions.cpp @@ -0,0 +1,343 @@ +/************************************************************************* +** DVIToSVGActions.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "BoundingBox.h" +#include "DVIToSVG.h" +#include "DVIToSVGActions.h" +#include "Font.h" +#include "FontManager.h" +#include "GlyphTracerMessages.h" +#include "SpecialManager.h" +#include "System.h" +#include "XMLNode.h" +#include "XMLString.h" + +using namespace std; + + +double DVIToSVGActions::PROGRESSBAR_DELAY=1000; // initial delay in seconds (values >= 1000 disable the progressbar) +bool DVIToSVGActions::EXACT_BBOX = false; + + +DVIToSVGActions::DVIToSVGActions (DVIToSVG &dvisvg, SVGTree &svg) + : _svg(svg), _dvisvg(dvisvg), _pageMatrix(0), _bgcolor(Color::WHITE), _boxes(0) +{ + _currentFontNum = -1; + _pageCount = 0; +} + + +DVIToSVGActions::~DVIToSVGActions () { + delete _pageMatrix; + delete _boxes; +} + + +void DVIToSVGActions::reset() { + _usedChars.clear(); + _usedFonts.clear(); + _bbox = BoundingBox(); + _currentFontNum = -1; + _bgcolor = Color::WHITE; +} + + +void DVIToSVGActions::setPageMatrix (const Matrix &matrix) { + delete _pageMatrix; + _pageMatrix = new Matrix(matrix); +} + + +void DVIToSVGActions::moveToX (double x) { + _dvisvg.specialManager().notifyPositionChange(getX(), getY()); + _svg.setX(getX()); // get current horizontal DVI position +} + + +void DVIToSVGActions::moveToY (double y) { + _dvisvg.specialManager().notifyPositionChange(getX(), getY()); + _svg.setY(y); +} + + +/** This method is called when a "set char" command was found in the DVI file. + * It draws a character of the current font. + * @param[in] x horizontal position of left bounding box edge + * @param[in] y vertical position of the character's baseline + * @param[in] c character code relative to the current font + * @param[in] font font to be used */ +void DVIToSVGActions::setChar (double x, double y, unsigned c, const Font *font) { + // If we use SVG fonts there is no need to record all font name/char/size combinations + // because the SVG font mechanism handles this automatically. It's sufficient to + // 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); + + _svg.appendChar(c, x, y, *font); + // update bounding box + double wl=0, wr=0, h=0, d=0; // left/right width, height, and depth of character c + static string fontname; + GlyphTracerMessages callback(fontname != font->name(), false); + fontname = font->name(); + BoundingBox charbox; + const PhysicalFont *ph_font = dynamic_cast(font); + if (EXACT_BBOX && ph_font && ph_font->getGlyphBox(c, charbox, &callback)) { + if ((wl = charbox.minX()) > 0) wl=0; + if ((wr = charbox.maxX()) < 0) wr=0; + if ((h = charbox.maxY()) < 0) h=0; + if ((d = -charbox.minY()) < 0) d=0; + } + else { + double s = font->scaleFactor(); + wr = s*(font->charWidth(c) + font->italicCorr(c)); + h = s*font->charHeight(c); + d = s*font->charDepth(c); + } + + BoundingBox bbox(x+wl, y-h, x+wr, y+d); +/* XMLElementNode *rect = new XMLElementNode("rect"); + rect->addAttribute("x", x+wl); + rect->addAttribute("y", y-h); + rect->addAttribute("width", (-wl+wr)); + rect->addAttribute("height", (h+d)); + rect->addAttribute("fill", "none"); + rect->addAttribute("stroke", "red"); + rect->addAttribute("stroke-width", "0.5"); + _svg.appendToPage(rect);*/ + if (!getMatrix().isIdentity()) + bbox.transform(getMatrix()); + embed(bbox); +} + + +/** This method is called when a "set rule" or "put rule" command was found in the + * DVI file. It draws a solid unrotated rectangle. + * @param[in] x horizontal position of left edge + * @param[in] y vertical position of bottom(!) edge + * @param[in] height length of the vertical edges + * @param[in] width length of the horizontal edges */ +void DVIToSVGActions::setRule (double x, double y, double height, double width) { +/* x *= BP; + y *= BP; + height *= BP; + width *= BP; */ + // (x,y) is the lower left corner of the rectangle + XMLElementNode *rect = new XMLElementNode("rect"); + rect->addAttribute("x", x); + rect->addAttribute("y", y-height); + rect->addAttribute("height", height); + rect->addAttribute("width", width); + if (!getMatrix().isIdentity()) + rect->addAttribute("transform", getMatrix().getSVG()); + if (getColor() != Color::BLACK) + rect->addAttribute("fill", _svg.getColor().rgbString()); + _svg.appendToPage(rect); + + // update bounding box + BoundingBox bb(x, y+height, x+width, y); + if (!getMatrix().isIdentity()) + bb.transform(getMatrix()); + embed(bb); +} + + +/** This method is called when a "set font" command was found in the DVI file. The + * font must be previously defined. + * @param[in] num unique number of the font in the DVI file (not necessarily equal to the DVI font number) + * @param[in] font pointer to the font object (always represents a physical font and never a virtual font) */ +void DVIToSVGActions::setFont (int num, const Font *font) { + _currentFontNum = num; + _svg.setFont(num, font); +} + + +/** This method is called when a "special" command was found in the DVI file. + * @param[in] s the special expression */ +void DVIToSVGActions::special (const string &s) { + try { + _dvisvg.specialManager().process(s, this, this); + // @@ output message in case of unsupported specials? + } + catch (const SpecialException &e) { + Message::estream(true) << "error in special '" << s << "': " << e.what() << '\n'; + } +} + + +void DVIToSVGActions::beginSpecial (const char *prefix) { +} + + +void DVIToSVGActions::endSpecial (const char *) { +} + + +/** This method is called when the DVI preamble was read + * @param[in] cmt preamble comment text. */ +void DVIToSVGActions::preamble (const string &cmt) { +} + + +void DVIToSVGActions::postamble () { +} + + +/** This method is called when a "begin of page (bop)" command was found in the DVI file. + * @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 n, Int32 *c) { + _svg.newPage(++_pageCount); + _bbox = BoundingBox(); // clear bounding box + if (_boxes) + _boxes->clear(); +} + + +/** This method is called when an "end of page (eop)" command was found in the DVI file. */ +void DVIToSVGActions::endPage () { + if (_pageMatrix) + _svg.transformPage(*_pageMatrix); + if (_bgcolor != Color::WHITE) { + XMLElementNode *r = new XMLElementNode("rect"); + r->addAttribute("x", _bbox.minX()); + r->addAttribute("y", _bbox.minY()); + r->addAttribute("width", _bbox.width()); + r->addAttribute("height", _bbox.height()); + r->addAttribute("fill", _bgcolor.rgbString()); + _svg.prependToPage(r); + } +} + + +void DVIToSVGActions::setBgColor (const Color &color) { + _bgcolor = color; +} + + +void DVIToSVGActions::embed(const BoundingBox& bbox) { + _bbox.embed(bbox); + if (_boxes) { + FORALL(*_boxes, BoxMap::iterator, it) + it->second.embed(bbox); + } +} + + +void DVIToSVGActions::embed(const DPair& p, double r) { + if (r == 0) + _bbox.embed(p); + else + _bbox.embed(p, r); + if (_boxes) + FORALL(*_boxes, BoxMap::iterator, it) + it->second.embed(p, r); +} + + +BoundingBox& DVIToSVGActions::bbox(const string& name, bool reset) { + if (!_boxes) + _boxes = new BoxMap; + BoundingBox &box = (*_boxes)[name]; + if (reset) + box = BoundingBox(); + return box; +} + + +/** This method is called by subprocesses like the PS handler when + * a computation step has finished. Since the total number of steps + * can't be determined in advance, we don't show a percent value but + * a rotating dash. */ +void DVIToSVGActions::progress (const char *id) { + if (PROGRESSBAR_DELAY < 1000) { + static double time=0; + // slow down updating of the progress indicator to prevent flickering + if (System::time() - time > 0.1) { + progress(0, 0, id); + time = System::time(); + } + } +} + + +/** Returns the number of digits of a given integer. */ +static int digits (int n) { + if (n == 0) + return 1; + if (n > 0) + return int(log10(double(n))+1); + return int(log10(double(-n))+2); +} + + +/** Draws a simple progress indicator. + * @param[in] current current iteration step (of 'total' steps) + * @param[in] total total number of iteration steps + * @param[in] id ID of the subprocess providing the information */ +void DVIToSVGActions::progress (size_t current, size_t total, const char *id) { + static double time=0; + static bool draw=false; // show progress indicator? + static int step = -1; // >=0: rotating dash + static size_t prev_current=0, prev_total=1; + static const char *prev_id=0; + const char *tips = "-\\|/"; + if (current == 0 && total > 0) { + time = System::time(); + draw = false; + Message::mstream() << '\n'; + } + // don't show the progress indicator before the given time has elapsed + if (!draw && System::time()-time > PROGRESSBAR_DELAY) + draw = true; + if (draw && (System::time() - time > 0.1 || (total > 0 && current == total) || prev_id != id)) { + if (total == 0) { + current = prev_current; + total = prev_total; + step = (step+1) % 4; + } + else { + prev_current = current; + prev_total = total; + step = -1; + } + // adapt length of progress indicator to terminal width + int cols = Terminal::columns(); + int width = (cols == 0 || cols > 60) ? 50 : 49-60+cols; + double factor = double(current)/double(total); + int length = int(width*factor); + Message::mstream(false, Message::MC_PROGRESS) + << '[' << string(length, '=') + << (factor < 1.0 ? (step < 0 ? ' ' : tips[step]) : '=') + << string(width-length, ' ') + << "] " << string(3-digits(int(100*factor)), ' ') << int(100*factor) + << "%\r"; + // overprint indicator when finished + if (factor == 1.0) + Message::estream().clearline(); + time = System::time(); + prev_id = id; + } +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVGActions.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVGActions.h new file mode 100644 index 00000000000..bc103952f30 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DVIToSVGActions.h @@ -0,0 +1,102 @@ +/************************************************************************* +** DVIToSVGActions.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef DVITOSVGACTIONS_H +#define DVITOSVGACTIONS_H + +#include +#include +#include "BoundingBox.h" +#include "DVIActions.h" +#include "Matrix.h" +#include "SpecialActions.h" +#include "SpecialManager.h" +#include "SVGTree.h" +#include "DVIReader.h" + + +class DVIToSVG; +class FileFinder; +class Font; +class XMLNode; + +class DVIToSVGActions : public DVIActions, public SpecialActions, public SpecialManager::Listener +{ + typedef std::map > CharMap; + typedef std::set FontSet; + typedef std::map BoxMap; + + public: + DVIToSVGActions (DVIToSVG &dvisvg, SVGTree &svg); + ~DVIToSVGActions (); + void reset (); + void setChar (double x, double y, unsigned c, const Font *f); + void setRule (double x, double y, double height, double width); + void setBgColor (const Color &color); + void setColor (const Color &color) {_svg.setColor(color);} + void setMatrix (const Matrix &m) {_svg.setMatrix(m);} + const Matrix& getMatrix () const {return _svg.getMatrix();} + Color getColor () const {return _svg.getColor();} + void appendToPage (XMLNode *node) {_svg.appendToPage(node);} + void appendToDefs (XMLNode *node) {_svg.appendToDefs(node);} + void moveToX (double x); + void moveToY (double y); + void setFont (int num, const Font *font); + void special (const std::string &s); + void preamble (const std::string &cmt); + void postamble (); + void beginPage (unsigned n, Int32 *c); + void endPage (); + void beginSpecial (const char *prefix); + void endSpecial (const char *prefix); + void progress (size_t current, size_t total, const char *id=0); + void progress (const char *id); + CharMap& getUsedChars () const {return _usedChars;} + const FontSet& getUsedFonts () const {return _usedFonts;} + void setPageMatrix (const Matrix &tm); + double getX() const {return _dvisvg.getXPos();} + double getY() const {return _dvisvg.getYPos();} + void setX (double x) {_dvisvg.translateToX(x); _svg.setX(x);} + void setY (double y) {_dvisvg.translateToY(y); _svg.setY(y);} + void finishLine () {_dvisvg.finishLine();} + BoundingBox& bbox () {return _bbox;} + BoundingBox& bbox (const std::string &name, bool reset=false); + void embed (const BoundingBox &bbox); + void embed (const DPair &p, double r=0); + + public: + static double PROGRESSBAR_DELAY; ///< progress bar doesn't appear before this time has elapsed (in sec) + static bool EXACT_BBOX; + + private: + SVGTree &_svg; + DVIToSVG &_dvisvg; + BoundingBox _bbox; + int _pageCount; + int _currentFontNum; + mutable CharMap _usedChars; + FontSet _usedFonts; + Matrix *_pageMatrix; // transformation of whole page + Color _bgcolor; + BoxMap *_boxes; +}; + + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Directory.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Directory.cpp new file mode 100644 index 00000000000..86a8b446ceb --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Directory.cpp @@ -0,0 +1,115 @@ +/************************************************************************* +** Directory.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include "Directory.h" + +using namespace std; + +#ifdef __WIN32__ + #include +#else + #include + #include +#endif + + +Directory::Directory () { +#if __WIN32__ + handle = INVALID_HANDLE_VALUE; +#else + dir = 0; +#endif +} + + +Directory::Directory (string dirname) { + open(dirname); +} + +Directory::~Directory () { + close(); +} + + +bool Directory::open (string dname) { + _dirname = dname; +#ifdef __WIN32__ + firstread = true; + if (dname[dname.length()-1] == '/' || dname[dname.length()-1] == '\\') + dname = dname.substr(0, dname.length()-1); + dname += "\\*"; + handle = FindFirstFile(dname.c_str(), &fileData); + return handle != INVALID_HANDLE_VALUE; +#else + dir = opendir(_dirname.c_str()); + return dir; +#endif +} + + +void Directory::close () { +#ifdef __WIN32__ + FindClose(handle); +#else + closedir(dir); +#endif +} + + +/** Reads first/next directory entry. + * @param[in] type type of entry to return (a: file or dir, f: file, d: dir) + * @return name of entry */ +const char* Directory::read (char type) { +#ifdef __WIN32__ + if (handle == INVALID_HANDLE_VALUE) + return 0; + while (firstread || FindNextFile(handle, &fileData)) { + firstread = false; + if (fileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + if (type == 'a' || type == 'd') + return fileData.cFileName; + } + else if (type == 'a' || type == 'f') + return fileData.cFileName; + } + FindClose(handle); + handle = INVALID_HANDLE_VALUE; + return 0; +#else + if (!dir) + return 0; + while ((dirent = readdir(dir))) { + string path = string(_dirname) + "/" + dirent->d_name; + struct stat stats; + stat(path.c_str(), &stats); + if (S_ISDIR(stats.st_mode)) { + if (type == 'a' || type == 'd') + return dirent->d_name; + } + else if (type == 'a' || type == 'f') + return dirent->d_name; + } + closedir(dir); + dir = 0; + return 0; +#endif +} + + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Directory.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Directory.h new file mode 100644 index 00000000000..f877b05a807 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Directory.h @@ -0,0 +1,53 @@ +/************************************************************************* +** Directory.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef DIRECTORY_H +#define DIRECTORY_H + +#include +#ifdef __WIN32__ + #include +#else + #include +#endif + +class Directory +{ + public: + Directory (); + Directory (std::string path); + ~Directory (); + bool open (std::string path); + void close (); + const char* read (char type='a'); + + private: + std::string _dirname; +#ifdef __WIN32__ + bool firstread; + HANDLE handle; + WIN32_FIND_DATA fileData; +#else + DIR *dir; + struct dirent *dirent; +#endif +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DvisvgmSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DvisvgmSpecialHandler.cpp new file mode 100644 index 00000000000..2e44169362a --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DvisvgmSpecialHandler.cpp @@ -0,0 +1,202 @@ +/************************************************************************* +** DvisvgmSpecialHandler.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include "DvisvgmSpecialHandler.h" +#include "InputBuffer.h" +#include "InputReader.h" +#include "SpecialActions.h" +#include "XMLNode.h" +#include "XMLString.h" + +using namespace std; + + +/** Replaces constants of the form {?name} by their corresponding value. + * @param[in,out] str text to expand + * @param[in] actions interfcae to the world outside the special handler */ +static void expand_constants (string &str, SpecialActions *actions) { + struct Constant { + const char *name; + string val; + } + constants[] = { + {"x", XMLString(actions->getX())}, + {"y", XMLString(actions->getY())}, + {"color", actions->getColor().rgbString()}, + {"nl", "\n"}, + {0, ""} + }; + bool repl_bbox = true; + while (repl_bbox) { + size_t pos = str.find(string("{?bbox ")); + if (pos == string::npos) + repl_bbox = false; + else { + size_t endpos = pos+7; + while (endpos < str.length() && isalnum(str[endpos])) + ++endpos; + if (str[endpos] == '}') { + BoundingBox &box=actions->bbox(str.substr(pos+7, endpos-pos-7)); + str.replace(pos, endpos-pos+1, box.toSVGViewBox()); + } + else + repl_bbox = false; + } + } + for (const Constant *p=constants; p->name; p++) { + const string pattern = string("{?")+p->name+"}"; + size_t pos = str.find(pattern); + while (pos != string::npos) { + str.replace(pos, strlen(p->name)+3, p->val); + pos = str.find(pattern, pos+p->val.length()); // look for further matches + } + } +} + + +/** Embeds the virtual rectangle (x, y ,w , h) into the current bounding box, + * where (x,y) is the lower left vertex composed of the current DVI position. + * @param[in] w width of the rectangle in TeX point units + * @param[in] h height of the rectangle in TeX point units + * @param[in] d depth of the rectangle in TeX point units */ +static void update_bbox (double w, double h, double d, SpecialActions *actions) { + double x = actions->getX(); + double y = actions->getY(); + actions->embed(BoundingBox(x, y, x+w, y-h)); + actions->embed(BoundingBox(x, y, x+w, y+d)); +} + + +/** Inserts raw text into the SVG tree. + * @param[in,out] in the raw text is read from this input buffer + * @param[in] actions interfcae to the world outside the special handler + * @param[in] group true if the text should be wrapped by a group element */ +static void raw (InputReader &in, SpecialActions *actions, bool group=false) { + string str; + while (!in.eof()) { + int c = in.get(); + if (isprint(c)) + str += char(c); + } + expand_constants(str, actions); + if (!str.empty()) { + XMLNode *node = new XMLTextNode(str); + if (group) { + XMLElementNode *g = new XMLElementNode("g"); + g->addAttribute("x", actions->getX()); + g->addAttribute("y", actions->getY()); + if (actions->getColor() != Color::BLACK) + g->addAttribute("fill", actions->getColor().rgbString()); + g->append(node); + node = g; + } + actions->appendToPage(node); + } +} + + +/** Evaluates the special dvisvgm:bbox. + * variant 1: dvisvgm:bbox [r[el]] [] + * variant 2: dvisvgm:bbox a[bs] + * variant 3: dvisvgm:bbox f[ix] + * variant 4: dvisvgm:bbox n[ew] */ +static void bbox (InputReader &in, SpecialActions *actions) { + in.skipSpace(); + int c = in.peek(); + if (isalpha(c)) { + while (!isspace(in.peek())) // skip trailing characters + in.get(); + if (c == 'n') { + in.skipSpace(); + string name; + while (isalnum(in.peek())) + name += char(in.get()); + in.skipSpace(); + if (!name.empty() && in.eof()) + actions->bbox(name, true); // create new user box + } + else if (c == 'a' || c == 'f') { + double p[4]; + for (int i=0; i < 4; i++) + p[i] = in.getDouble(); + BoundingBox b(p[0], p[1], p[2], p[3]); + if (c == 'a') + actions->embed(b); + else { + actions->bbox() = b; + actions->bbox().lock(); + } + } + } + else + c = 'r'; // no mode specifier => relative box parameters + + if (c == 'r') { + double w = in.getDouble(); + double h = in.getDouble(); + double d = in.getDouble(); + update_bbox(w, h, d, actions); + } +} + + +static void img (InputReader &in, SpecialActions *actions) { + double w = in.getDouble(); + double h = in.getDouble(); + string f = in.getString(); + update_bbox(w, h, 0, actions); + XMLElementNode *img = new XMLElementNode("image"); + img->addAttribute("x", actions->getX()); + img->addAttribute("y", actions->getY()); + img->addAttribute("width", w); + img->addAttribute("height", h); + img->addAttribute("xlink:href", f); + if (actions && !actions->getMatrix().isIdentity()) + img->addAttribute("transform", actions->getMatrix().getSVG()); + actions->appendToPage(img); +} + + +/** Evaluates and executes a dvisvgm special statement. + * @param[in] prefix special prefix read by the SpecialManager + * @param[in] is the special statement is read from this stream + * @param[in,out] in the raw text is read from this input buffer */ +bool DvisvgmSpecialHandler::process (const char *prefix, istream &is, SpecialActions *actions) { + if (actions) { + StreamInputBuffer ib(is); + BufferInputReader in(ib); + string cmd = in.getWord(); + if (cmd == "raw") // raw + raw(in, actions); + else if (cmd == "bbox") // bbox [r] or bbox a + bbox(in, actions); + else if (cmd == "img") { // img + img(in, actions); + } + } + return true; +} + + +const char** DvisvgmSpecialHandler::prefixes () const { + static const char *pfx[] = {"dvisvgm:", 0}; + return pfx; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DvisvgmSpecialHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DvisvgmSpecialHandler.h new file mode 100644 index 00000000000..1d15f864cf4 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/DvisvgmSpecialHandler.h @@ -0,0 +1,35 @@ +/************************************************************************* +** DvisvgmSpecialHandler.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef DVISVGMSPECIALHANDLER_H +#define DVISVGMSPECIALHANDLER_H + +#include "SpecialHandler.h" + +class DvisvgmSpecialHandler : public SpecialHandler +{ + public: + const char* name () const {return "dvisvgm";} + const char* info () const {return "special set for embedding raw SVG snippets";} + const char** prefixes () const; + bool process (const char *prefix, std::istream &in, SpecialActions *actions); +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/EmSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/EmSpecialHandler.cpp new file mode 100644 index 00000000000..5fa5346b4ca --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/EmSpecialHandler.cpp @@ -0,0 +1,230 @@ +/************************************************************************* +** EmSpecialHandler.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include "EmSpecialHandler.h" +#include "InputBuffer.h" +#include "InputReader.h" +#include "SpecialActions.h" +#include "XMLNode.h" + +using namespace std; + + +EmSpecialHandler::EmSpecialHandler () : _linewidth(0.4), _actions(0) { +} + + +/** Computes the "cut vector" that is used to compute the line shape. + * Because each line has a width > 0 the actual shape of the line is a tetragon. + * The 4 vertices can be influenced by the cut parameter c that specifies + * a horizontal, vertical or orthogonal cut of a line end. Depending on c and the + * line's slope a cut vector v can be computed that, relatively to endpoint p, denotes + * the 2 vertices of that line end: v1=p+v and v2=p-v. + * @param[in] c cut direction ('h', 'v' or 'p') + * @param[in] v direction vector of line to be drawn + * @param[in] lw width of line to be drawn + * @return the "cut vector" */ +static DPair cut_vector (char c, const DPair &v, double lw) { + if (c == 'p') + return v.ortho()/v.length() * (lw/2); + DPair cut; + if (c == 'v' && v.x() != 0) { + double slope = v.y()/v.x(); + double h = sqrt(lw*lw*(1+slope*slope)); + cut.y(0.5*h); + } + else if (v.y() != 0) { // c == 'h' + double slope = v.x()/v.y(); + double h = sqrt(lw*lw*(1+slope*slope)); + double sgn = slope < 0 ? 1.0 : -1.0; + cut.x(0.5*h*sgn); + } + return cut; +} + + +/** Creates the SVG element that will a the line. + * @param[in] p1 first endpoint in TeX point units + * @param[in] p2 second endpoint in TeX point units + * @param[in] c1 cut method of first endpoint ('h', 'v' or 'p') + * @param[in] c2 cut method of second endpoint ('h', 'v' or 'p') + * @param[in] lw line width in TeX point units */ +static void create_line (const DPair &p1, const DPair &p2, char c1, char c2, double lw, SpecialActions *actions) { + XMLElementNode *node=0; + DPair dir = p2-p1; + if (dir.x() == 0 || dir.y() == 0 || (c1 == 'p' && c2 == 'p')) { + // draw regular line + node = new XMLElementNode("line"); + node->addAttribute("x1", p1.x()); + node->addAttribute("y1", p1.y()); + node->addAttribute("x2", p2.x()); + node->addAttribute("y2", p2.y()); + node->addAttribute("stroke-width", lw); + node->addAttribute("stroke", actions->getColor().rgbString()); + // update bounding box + actions->embed(p1); + actions->embed(p2); + } + else { + // draw polygon + DPair cv1 = cut_vector(c1, dir, lw); + DPair cv2 = cut_vector(c2, dir, lw); + DPair q11 = p1+cv1, q12 = p1-cv1; + DPair q21 = p2+cv2, q22 = p2-cv2; + node = new XMLElementNode("polygon"); + ostringstream oss; + oss << q11.x() << ',' << q11.y() << ' ' + << q12.x() << ',' << q12.y() << ' ' + << q22.x() << ',' << q22.y() << ' ' + << q21.x() << ',' << q21.y(); + node->addAttribute("points", oss.str()); + if (actions->getColor() != Color::BLACK) + node->addAttribute("fill", actions->getColor().rgbString()); + // update bounding box + actions->embed(q11); + actions->embed(q12); + actions->embed(q21); + actions->embed(q22); + } + actions->appendToPage(node); +} + + +static double read_length (InputReader &in) { + struct Unit { + const char *name; + double factor; + } + units[] = { + {"pt", 1.0}, + {"pc", 12.0}, + {"in", 72.27}, + {"bp", 72.27/72}, + {"cm", 72.27/2.54}, + {"mm", 72.27/25.4}, + {"dd", 1238.0/1157}, + {"cc", 1238.0/1157*12}, + {"sp", 1.0/65536}, + {0, 0} + }; + double len = in.getDouble(); + in.skipSpace(); + for (Unit *p=units; p->name; p++) + if (in.check(p->name)) { + len *= p->factor; + break; + } + return len; +} + + +bool EmSpecialHandler::process (const char *prefix, istream &is, SpecialActions *actions) { + // em:moveto => move graphic cursor to dvi cursor + // em:lineto => draw line from graphic cursor to dvi cursor, move graphic cursor to dvi cursor + // em:linewidth => set line width to + // em:point [,[,]] => defines point as (,); if and/or is missing, + // the corresponding dvi cursor coordinate is inserted + // and are lengths + // em:line [h|v|p], [h|v|p] [,] => draws line of width from point # to point # + // point number suffixes: + // h: cut line horizontally + // v: cut line vertically + // p: cut line orthogonally to line direction (default) + // if is omitted, the global line width is used + // + // supported length units: pt, pc, in, bp, cm, mm, dd, cc, sp + // default line width: 0.4pt + + if (actions) { + _actions = actions; // save pointer to SpecialActions for later use in endPage + StreamInputBuffer ib(is, 128); + BufferInputReader in(ib); + string cmd = in.getWord(); + if (cmd == "moveto") + _pos = DPair(actions->getX(), actions->getY()); + else if (cmd == "lineto") { + DPair p(actions->getX(), actions->getY()); + create_line(_pos, p, 'p', 'p', _linewidth, actions); + _pos = p; + } + else if (cmd == "linewidth") + _linewidth = read_length(in); + else if (cmd == "point") { + DPair p(actions->getX(), actions->getY()); + int n = in.getInt(); + if (in.getPunct() == ',') { + p.x(in.getDouble()); + if (in.getPunct() == ',') + p.y(in.getDouble()); + } + _points[n] = p; + } + else if (cmd == "line") { + int n1 = in.getInt(); + int c1 = 'p'; + if (isalpha(in.peek())) + c1 = in.get(); + in.getPunct(); + int n2 = in.getInt(); + int c2 = 'p'; + if (isalpha(in.peek())) + c2 = in.get(); + double lw = _linewidth; + if (in.getPunct() == ',') + lw = read_length(in); + map::iterator it1=_points.find(n1); + map::iterator it2=_points.find(n2); + if (it1 != _points.end() && it2 != _points.end()) + create_line(it1->second, it2->second, char(c1), char(c2), lw, actions); + else { + // Line endpoints havn't necessarily to be defined before + // a line definition. If a point wasn't defined yet we push the line + // in a wait list and process the lines at the end of the page. + _lines.push_back(Line(n1, n2, char(c1), char(c2), lw)); + } + } + } + return true; +} + + +/** This method is called at the end of a DVI page. Here we have to draw all pending + * lines that are still in the line list. All line endpoints must be defined until here. */ +void EmSpecialHandler::dviEndPage () { + if (_actions) { + FORALL(_lines, list::iterator, it) { + map::iterator pit1=_points.find(it->p1); + map::iterator pit2=_points.find(it->p2); + if (pit1 != _points.end() && pit2 != _points.end()) + create_line(pit1->second, pit2->second, it->c1, it->c2, it->width, _actions); + // all lines with still undefined points are ignored + } + } + // line and point definitions are local to a page + _lines.clear(); + _points.clear(); +} + + +const char** EmSpecialHandler::prefixes () const { + static const char *pfx[] = {"em:", 0}; + return pfx; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/EmSpecialHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/EmSpecialHandler.h new file mode 100644 index 00000000000..090d775b71d --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/EmSpecialHandler.h @@ -0,0 +1,58 @@ +/************************************************************************* +** EmSpecialHandler.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef EMSPECIALHANDLER_H +#define EMSPECIALHANDLER_H + +#include +#include +#include "Pair.h" +#include "SpecialHandler.h" + + +class EmSpecialHandler : public SpecialHandler +{ + struct Line { + Line (int pp1, int pp2, char cc1, char cc2, double w) : p1(pp1), p2(pp2), c1(cc1), c2(cc2), width(w) {} + int p1, p2; ///< point numbers of line ends + char c1, c2; ///< cut type of line ends (h, v or p) + double width; ///< line width + }; + + public: + EmSpecialHandler (); + const char* name () const {return "em";} + const char* info () const {return "line drawing statements of the emTeX special set";} + const char** prefixes () const; + bool process (const char *prefix, std::istream &in, SpecialActions *actions); + void dviEndPage (); + + protected: + bool isEndPageListener () const {return true;} + + private: + std::map _points; ///< points defined by special em:point + std::list _lines; ///< list of lines with undefined end points + double _linewidth; ///< global line width + DPair _pos; ///< current position of "graphic cursor" + SpecialActions *_actions; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileFinder.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileFinder.cpp new file mode 100644 index 00000000000..457a9a88df1 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileFinder.cpp @@ -0,0 +1,323 @@ +/************************************************************************* +** FileFinder.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include +#include "FileFinder.h" +#include "FileSystem.h" +#include "Message.h" +#include "macros.h" + +using namespace std; + +#ifdef MIKTEX + #include "MessageException.h" + #import + using namespace MiKTeXSession2_9; + + static ISession2Ptr miktex_session; +#else + // unfortunately, the kpathsea headers are not C++-ready, + // so we have to wrap it with some ugly code + namespace KPS { + extern "C" { + #include + } + } + using namespace KPS; +#endif + +// --------------------------------------------------- +// static member variables of FileFinder::Impl + +static bool _initialized = false; +static bool _mktex_enabled = false; +static FontMap _fontmap; + +// --------------------------------------------------- + +static const char* find_file (const std::string &fname); +static const char* find_mapped_file (std::string fname); +static const char* mktex (const std::string &fname); +static void init_font_map (const char *usermapname); + + +/** Initializes the file finder. This function must be called before any other + * FileFinder function. + * @param[in] progname name of appllication using the FileFinder + * @param[in] enable_mktexmf if true, tfm and mf file generation is activated + * @param[in] usermapname optional path to mapfile; if 0, the default files are used */ +void FileFinder::init (const char *progname, bool enable_mktexmf, const char *usermapname) { + if (_initialized) + return; + + _mktex_enabled = enable_mktexmf; +#ifdef MIKTEX + if (FAILED(CoInitialize(0))) + throw MessageException("COM library could not be initialized\n"); + + HRESULT hres = miktex_session.CreateInstance(L"MiKTeX.Session"); + if (FAILED(hres)) + throw MessageException("MiKTeX.Session could not be initialized"); +#else + kpse_set_program_name(progname, NULL); + // enable tfm and mf generation (actually invoked by calls of kpse_make_tex) + kpse_set_program_enabled(kpse_tfm_format, 1, kpse_src_env); + kpse_set_program_enabled(kpse_mf_format, 1, kpse_src_env); + kpse_make_tex_discard_errors = false; // don't suppress messages of mktexFOO tools +#ifdef TEXLIVEWIN32 + texlive_gs_init(); +#endif +#endif + _initialized = true; + init_font_map(usermapname); +} + + +/** Cleans up the FileFinder. This function must be called before leaving the + * applications main() function. */ +void FileFinder::finish () { +#ifdef MIKTEX + if (_initialized) { + miktex_session = 0; // avoid automatic calling of Release() after CoUninitialize() + CoUninitialize(); + } +#endif + _initialized = false; +} + + +std::string FileFinder::version () { +#ifdef MIKTEX + bool autoinit=false; + if (!_initialized) { + init("", false); + autoinit = true; + } + + try { + MiKTeXSetupInfo info = miktex_session->GetMiKTeXSetupInfo(); + _bstr_t version = info.version; + if (autoinit) + FileFinder::finish(); + return string(version); + } + catch (_com_error e) { + if (autoinit) + FileFinder::finish(); + throw MessageException((const char*)e.Description()); + } +#else + if (const char *v = strrchr(KPSEVERSION, ' ')) + return v+1; +#endif + return "unknown"; +} + + +/** Determines filetype by the filename extension and calls kpse_find_file + * to actually look up the file. + * @param[in] fname name of file to look up + * @return file path on success, 0 otherwise */ +static const char* find_file (const std::string &fname) { + if (!_initialized) + return 0; + + size_t pos = fname.rfind('.'); + if (pos == std::string::npos) + return 0; // no extension => no search + const std::string ext = fname.substr(pos+1); // file extension +#ifdef MIKTEX + _bstr_t path; + static string ret; + try { + if (miktex_session->FindFile(fname.c_str(), path.GetAddress())) { + ret = path; + return ret.c_str(); + } + } + catch (_com_error e) { + throw MessageException((const char*)e.Description()); + } + return 0; + +#else + static std::string buf; + +#ifdef TEXLIVEWIN32 + if (ext == "exe") { + // lookup exe files in directory where dvisvgm is located + if (const char *path = kpse_var_value("SELFAUTOLOC")) { + buf = std::string(path) + "/" + fname; + return FileSystem::exists(buf.c_str()) ? buf.c_str() : 0; + } + return 0; + } +#endif + + static std::map types; + if (types.empty()) { + types["tfm"] = kpse_tfm_format; + types["pfb"] = kpse_type1_format; + types["vf"] = kpse_vf_format; + types["mf"] = kpse_mf_format; + types["ttf"] = kpse_truetype_format; + types["map"] = kpse_fontmap_format; + types["sty"] = kpse_tex_format; + types["enc"] = kpse_enc_format; + types["pro"] = kpse_tex_ps_header_format; + } + std::map::iterator it = types.find(ext.c_str()); + if (it == types.end()) + return 0; + + if (char *path = kpse_find_file(fname.c_str(), it->second, 0)) { + // In the current version of libkpathsea, each call of kpse_find_file produces + // a memory leak since the path buffer is not freed. I don't think we can do + // anything against it here... + buf = path; + std::free(path); + return buf.c_str(); + } + return 0; +#endif +} + + +/** Checks whether the given file is mapped to a different name and if the + * file can be found under this name. + * @param[in] fname name of file to look up + * @param[in] fontmap font mappings + * @return file path on success, 0 otherwise */ +static const char* find_mapped_file (std::string fname) { + size_t pos = fname.rfind('.'); + if (pos == std::string::npos) + return 0; + const std::string ext = fname.substr(pos+1); // file extension + const std::string base = fname.substr(0, pos); + const char *mapped_name = _fontmap.lookup(base); + if (mapped_name) { + fname = std::string(mapped_name) + "." + ext; + const char *path; + if ((path = find_file(fname)) || (path = mktex(fname))) + return path; + } + return 0; +} + + +/** Runs external mktexFOO tool to create missing tfm or mf file. + * @param[in] fname name of file to build + * @return file path on success, 0 otherwise */ +static const char* mktex (const std::string &fname) { + if (!_initialized) + return 0; + + size_t pos = fname.rfind('.'); + if (!_mktex_enabled || pos == std::string::npos) + return 0; + + std::string ext = fname.substr(pos+1); // file extension + if (ext != "tfm" && ext != "mf") + return 0; + + std::string base = fname.substr(0, pos); + const char *path = 0; +#ifdef MIKTEX + // maketfm and makemf are located in miktex/bin which is in the search PATH + string toolname = (ext == "tfm" ? "miktex-maketfm" : "miktex-makemf"); + system((toolname+".exe "+fname).c_str()); + path = find_file(fname); +#else + kpse_file_format_type type = (ext == "tfm" ? kpse_tfm_format : kpse_mf_format); + path = kpse_make_tex(type, fname.c_str()); +#endif + return path; +} + + +/** Initializes a font map by reading the map file(s). + * @param[in,out] fontmap font map to be initialized */ +static void init_font_map (const char *usermapname) { + bool additional = (usermapname && *usermapname == '+'); // read additional map entries? + if (additional) + usermapname++; + if (usermapname) { + // try to read user font map file + const char *mappath = 0; + if (!_fontmap.read(usermapname)) { + if ((mappath = find_file(usermapname))) + _fontmap.read(mappath); + else + Message::wstream(true) << "map file '" << usermapname << "' not found\n"; + } + } + if (!usermapname || additional) { + const char *mapfiles[] = {"ps2pk.map", "dvipdfm.map", "psfonts.map", 0}; + const char *mf=0; + for (const char **p=mapfiles; *p && !mf; p++) + if ((mf = find_file(*p))!=0) + _fontmap.read(mf); + if (!mf) + Message::wstream(true) << "none of the default map files could be found"; + } +} + + +/** Searches a file in the TeX directory tree. + * If the file doesn't exist, maximal two further steps are applied + * (if "extended" is true): + * - checks whether the filename is mapped to a different name and returns + * the path to that name + * - in case of tfm or mf files: invokes the external mktextfm/mktexmf tool + * to create the missing file + * @param[in] fname name of file to look up + * @param[in] extended if true, use fontmap lookup and mktexFOO calls + * @return path to file on success, 0 otherwise */ +const char* FileFinder::lookup (const std::string &fname, bool extended) { + const char *path; + if ((path = find_file(fname)) || (extended && ((path = find_mapped_file(fname)) || (path = mktex(fname))))) + return path; + return 0; +} + + +/** Returns the path to the corresponding encoding file for a given font file. + * @param[in] fname name of the font file + * @return path to encoding file on success, 0 otherwise */ +const char* FileFinder::lookupEncFile (std::string fname) { + if (const char *encname = lookupEncName(fname)) { + fname = std::string(encname) + ".enc"; + const char *path = find_file(fname); + if (path) + return path; + } + return 0; +} + + +const char* FileFinder::lookupEncName (std::string fname) { + size_t pos = fname.rfind('.'); + if (pos != std::string::npos) + fname = fname.substr(0, pos); // strip extension + return _fontmap.encoding(fname); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileFinder.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileFinder.h new file mode 100644 index 00000000000..6dcdf335e1c --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileFinder.h @@ -0,0 +1,37 @@ +/************************************************************************* +** FileFinder.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef KPSFILEFINDER_H +#define KPSFILEFINDER_H + +#include +#include "FontMap.h" + +struct FileFinder +{ + static void init (const char *progname, bool enable_mktexmf, const char *usermapname=0); + static void finish (); + static std::string version (); + static const char* lookup (const std::string &fname, bool extended=true); + static const char* lookupEncFile (std::string fontname); + static const char* lookupEncName (std::string fname); +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FilePath.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FilePath.cpp new file mode 100644 index 00000000000..3875fdc21b8 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FilePath.cpp @@ -0,0 +1,256 @@ +/************************************************************************* +** FilePath.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include "FilePath.h" +#include "FileSystem.h" +#include "MessageException.h" +#include "macros.h" + +using namespace std; + + +/** Removes redundant slashes from a given path. */ +static string& single_slashes (string &str) { + size_t pos=0; + while ((pos = str.find("//", pos)) != string::npos) + str.replace(pos, 2, "/"); + return str; +} + + +#ifdef __WIN32__ +static char strip_drive_letter (string &path) { + char letter = 0; + if (path.length() >= 2 && path[1] == ':' && isalpha(path[0])) { + letter = tolower(path[0]); + path.erase(0, 2); + } + return letter; +} + + +static char adapt_current_path (string &path, char target_drive) { + if (char current_drive = strip_drive_letter(path)) { + if (target_drive != current_drive) { + if (target_drive == 0) + target_drive = current_drive; + if (path.empty() || path[0] != '/') { + if (FileSystem::chdir((string(1, target_drive) + ":").c_str())) { + path.insert(0, FileSystem::getcwd()+"/"); + strip_drive_letter(path); + } + else + throw MessageException("drive " + string(1, target_drive) + ": not accessible"); + } + } + } + return target_drive; +} + + +static void tolower (string &str) { + for (size_t i=0; i < str.length(); ++i) + str[i] = tolower(str[i]); +} +#endif + + +/** Constructs a FilePath object from a given path. Relative paths are + * relative to the current working directory. + * @param[in] path absolute or relative path to a file or directory */ +FilePath::FilePath (const string &path) { + init(path, !FileSystem::isDirectory(path.c_str()), FileSystem::getcwd()); +} + + +/** Constructs a FilePath object. + * @param[in] path absolute or relative path to a file or directory + * @param[in] isfile true if 'path' references a file, false if a directory is referenced + * @param[in] current_dir if 'path' is a relative path expression it will be related to 'current_dir' */ +FilePath::FilePath (const string &path, bool isfile, string current_dir) { + init(path, isfile, current_dir); +} + + +/** Initializes a FilePath object. This method should be called by the constructors only. + * @param[in] path absolute or relative path to a file or directory + * @param[in] isfile true if 'path' references a file, false if a directory is referenced + * @param[in] current_dir if 'path' is a relative path expression it will be related to 'current_dir' */ +void FilePath::init (string path, bool isfile, string current_dir) { + single_slashes(path); + single_slashes(current_dir); +#ifdef __WIN32__ + tolower(path); + _drive = strip_drive_letter(path); +#endif + if (isfile) { + size_t pos = path.rfind('/'); + _fname = path.substr((pos == string::npos) ? 0 : pos+1); + if (pos != string::npos) + path.erase(pos); + else + path.clear(); + } + if (current_dir.empty()) + current_dir = FileSystem::getcwd(); +#ifdef __WIN32__ + tolower(current_dir); + _drive = adapt_current_path(current_dir, _drive); +#endif + if (!path.empty()) { + if (path[0] == '/') + current_dir.clear(); + else if (current_dir[0] != '/') + current_dir = "/"; + else { + FilePath curr(current_dir, false, "/"); + current_dir = curr.absolute(); +#ifdef __WIN32__ + adapt_current_path(current_dir, _drive); +#endif + } + } + path.insert(0, current_dir + "/"); + string elem; + FORALL (path, string::const_iterator, it) { + if (*it == '/') { + add(elem); + elem.clear(); + } + else + elem += *it; + } + add(elem); +} + + +/** Adds a location step to the current path. */ +void FilePath::add (const string &dir) { + if (dir == ".." && !_dirs.empty()) + _dirs.pop_back(); + else if (dir.length() > 0 && dir != ".") + _dirs.push_back(dir); +} + + +/** Returns the suffix of the filename. If FilePath represents the + * location of a directory (and not of a file) an empty string + * is returned. */ +string FilePath::suffix () const { + size_t start = 0; + // ignore leading dots + while (start < _fname.length() && _fname[start] == '.') + start++; + string sub = _fname.substr(start); + size_t pos = sub.rfind('.'); + if (pos != string::npos && pos < sub.length()-1) + return sub.substr(pos+1); + return ""; +} + + +/** Changes the suffix of the filename. If FilePath represents the + * location of a directory (and not of a file) nothing happens. + * @param[in] s new suffix */ +void FilePath::suffix (const string &s) { + if (!_fname.empty()) { + string current_suffix = suffix(); + if (!current_suffix.empty()) + _fname.erase(_fname.length()-current_suffix.length()-1); + _fname += "."+s; + } +} + + +/** Returns the filename without suffix. + * Example: FilePath("/a/b/c.def", true) == "c" */ +string FilePath::basename () const { + if (!_fname.empty()) { + size_t len = suffix().length(); + if (len > 0) + len++; // strip dot too + return _fname.substr(0, _fname.length()-len); + } + return ""; +} + + +/** Returns the absolute path string of this FilePath. + * @param[in] with_filename if false, the filename is omitted + * @return the absolute path string */ +string FilePath::absolute (bool with_filename) const { + string path; + FORALL (_dirs, ConstIterator, it) { + path += "/" + *it; + } + if (path.empty()) + path = "/"; + if (with_filename && !_fname.empty()) + path += "/"+_fname; +#ifdef __WIN32__ + if (_drive) + path.insert(0, string(1, _drive) + ":"); +#endif + return single_slashes(path); +} + + +/** Returns a path string of this FilePath relative to reldir. If we wanted to + * navigate from /a/b/c/d to /a/b/e/f using the shell command "cd", we could do that + * with the relative path argument: "cd ../../e/f". This function returns such a relative + * path. Example: FilePath("/a/b/e/f").relative("/a/b/c/d") => "../../e/f". + * @param[in] reldir absolute path to a directory + * @param[in] with_filename if false, the filename is omitted + * @return the relative path string */ +string FilePath::relative (string reldir, bool with_filename) const { + if (reldir.empty()) + reldir = FileSystem::getcwd(); +#ifdef __WIN32__ + adapt_current_path(reldir, _drive); +#endif + if (reldir[0] != '/') + return absolute(); + FilePath rel(reldir, false); + string path; +#ifdef __WIN32__ + if (rel._drive && rel._drive != _drive) + path += string(1, _drive) + ":"; +#endif + ConstIterator i = _dirs.begin(); + ConstIterator j = rel._dirs.begin(); + while (i != _dirs.end() && j != rel._dirs.end() && *i == *j) + ++i, ++j; + for (; j != rel._dirs.end(); ++j) + path += "../"; + for (; i != _dirs.end(); ++i) + path += *i + "/"; + if (!path.empty()) + path.erase(path.length()-1, 1); // remove trailing slash + if (with_filename && !_fname.empty()) { + if (!path.empty() && path != "/") + path += "/"; + path += _fname; + } + if (path.empty()) + path = "."; + return single_slashes(path); +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FilePath.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FilePath.h new file mode 100644 index 00000000000..4702cb8d969 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FilePath.h @@ -0,0 +1,59 @@ +/************************************************************************* +** FilePath.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef FILEPATH_H +#define FILEPATH_H + +#include +#include + +class FilePath +{ + typedef std::vector Directories; + typedef Directories::iterator Iterator; + typedef Directories::const_iterator ConstIterator; + public: + FilePath (const std::string &path); + FilePath (const std::string &path, bool isfile, std::string current_dir=""); + std::string absolute (bool with_filename=true) const; + std::string relative (std::string reldir="", bool with_filename=true) const; + std::string basename () const; + std::string suffix () const; + void suffix (const std::string &s); + size_t depth () const {return _dirs.size();} + bool isFile () const {return !_fname.empty();} + bool empty () const {return _dirs.empty() && _fname.empty();} + const std::string& filename () const {return _fname;} + void filename (const std::string &fname) {_fname = fname;} + + protected: + void init (std::string path, bool isfile, std::string current_dir); + void add (const std::string &elem); + + private: + Directories _dirs; + std::string _fname; +#ifdef __WIN32__ + char _drive; +#endif +}; + + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileSystem.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileSystem.cpp new file mode 100644 index 00000000000..f53b84b42b4 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileSystem.cpp @@ -0,0 +1,333 @@ +/************************************************************************* +** FileSystem.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include "FileSystem.h" +#include "macros.h" + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_UNISTD_H +#include +#endif + + +using namespace std; + +#ifdef __WIN32__ + #include + #include + const char *FileSystem::DEVNULL = "nul"; + const char FileSystem::PATHSEP = '\\'; + #define unlink _unlink +#else + #include + #include + #include + #include + const char *FileSystem::DEVNULL = "/dev/null"; + const char FileSystem::PATHSEP = '/'; +#endif + + +bool FileSystem::remove (const string &fname) { + return unlink(fname.c_str()) == 0; +} + + +/** Copies a file. + * @param[in] src path of file to copy + * @param[in] dest path of target file + * @param[in] remove_src remove file 'src' if true + * @return true on success */ +bool FileSystem::copy (const string &src, const string &dest, bool remove_src) { + ifstream ifs(src.c_str(), ios::in|ios::binary); + ofstream ofs(dest.c_str(), ios::out|ios::binary); + if (ifs && ofs) { + ofs << ifs.rdbuf(); + if (!ifs.fail() && !ofs.fail() && remove_src) { + ofs.close(); + ifs.close(); + return remove(src); + } + else + return !remove_src; + } + return false; +} + + +bool FileSystem::rename (const string &oldname, const string &newname) { + return ::rename(oldname.c_str(), newname.c_str()) == 0; +} + + +UInt64 FileSystem::filesize (const string &fname) { +#ifdef __WIN32__ + // unfortunately, stat doesn't work properly under Windows + // so we have to use this freaky code + WIN32_FILE_ATTRIBUTE_DATA attr; + GetFileAttributesExA(fname.c_str(), GetFileExInfoStandard, &attr); + return (static_cast(attr.nFileSizeHigh) << (8*sizeof(attr.nFileSizeLow))) | attr.nFileSizeLow; +#else + struct stat attr; + return (stat(fname.c_str(), &attr) == 0) ? attr.st_size : 0; +#endif +} + + +string FileSystem::adaptPathSeperators (string path) { + for (size_t i=0; i < path.length(); i++) + if (path[i] == PATHSEP) + path[i] = '/'; + return path; +} + + +string FileSystem::getcwd () { + char buf[1024]; +#ifdef __WIN32__ + return adaptPathSeperators(_getcwd(buf, 1024)); +#else + return ::getcwd(buf, 1024); +#endif +} + + +/** Changes the work directory. + * @param[in] path to new work directory + * @return true on success */ +bool FileSystem::chdir (const char *dir) { + bool success = false; + if (dir) { +#ifdef __WIN32__ + success = (_chdir(dir) == 0); +#else + success = (chdir(dir) == 0); +#endif + } + return success; +} + + +/** Returns the user's home directory. */ +const char* FileSystem::userdir () { +#ifdef __WIN32__ + const char *drive=getenv("HOMEDRIVE"); + const char *path=getenv("HOMEPATH"); + if (drive && path) { + static string ret = string(drive)+path; + if (!ret.empty()) + return ret.c_str(); + } + return 0; +#else + const char *dir=getenv("HOME"); + if (!dir) { + if (const char *user=getenv("USER")) { + if (struct passwd *pw=getpwnam(user)) + dir = pw->pw_dir; + } + } + return dir; +#endif +} + + +/** Private wrapper function for mkdir: creates a single folder. + * @param[in] dir folder name + * @return true on success */ +static bool s_mkdir (const char *dir) { + bool success = true; + if (!FileSystem::exists(dir)) { +#ifdef __WIN32__ + success = (_mkdir(dir) == 0); +#else + success = (mkdir(dir, 0776) == 0); +#endif + } + return success; +} + + +static bool inline s_rmdir (const char *dir) { +#ifdef __WIN32__ + return (_rmdir(dir) == 0); +#else + return (rmdir(dir) == 0); +#endif +} + + +/** Removes leading and trailing whitespace from a string. */ +static string trim (const string &str) { + int first=0, last=str.length()-1; + while (isspace(str[first])) + first++; + while (isspace(str[last])) + last--; + return str.substr(first, last-first+1); +} + + +/** Creates a new folder relative to the current work directory. If necessary, + * the parent folders are also created. + * @param[in] dir single folder name or path to folder + * @return true if folder(s) could be created */ +bool FileSystem::mkdir (const char *dir) { + bool success = false; + if (dir) { + success = true; + const string dirstr = adaptPathSeperators(trim(dir)); + for (size_t pos=1; success && (pos = dirstr.find('/', pos)) != string::npos; pos++) + success &= s_mkdir(dirstr.substr(0, pos).c_str()); + success &= s_mkdir(dirstr.c_str()); + } + return success; +} + + +/** Removes a directory and its contents. + * @param[in] dirname path to directory + * @return true on success */ +bool FileSystem::rmdir (const char *dirname) { + bool ok = false; + if (dirname && isDirectory(dirname)) { + ok = true; +#ifdef __WIN32__ + string pattern = string(dirname) + "/*"; + WIN32_FIND_DATA data; + HANDLE h = FindFirstFile(pattern.c_str(), &data); + bool ready = (h == INVALID_HANDLE_VALUE); + while (!ready && ok) { + const char *fname = data.cFileName; + string path = string(dirname) + "/" + fname; + if (isDirectory(path.c_str())) { + if (strcmp(fname, ".") != 0 && strcmp(fname, "..") != 0) + ok = rmdir(path.c_str()) && s_rmdir(path.c_str()); + } + else if (isFile(path.c_str())) + ok = remove(path); + else + ok = false; + ready = !FindNextFile(h, &data); + } + FindClose(h); +#else + if (DIR *dir = opendir(dirname)) { + struct dirent *ent; + while ((ent = readdir(dir)) && ok) { + const char *fname = ent->d_name; + string path = string(fname) + "/" + fname; + if (isDirectory(path.c_str())) { + if (strcmp(fname, ".") != 0 && strcmp(fname, "..") != 0) + ok = rmdir(path.c_str()) && s_rmdir(path.c_str()); + } + else if (isFile(path.c_str())) + ok = remove(path); + else + ok = false; + } + closedir(dir); + } +#endif + ok = s_rmdir(dirname); + } + return ok; +} + + +/** Checks if a file or directory exits. */ +bool FileSystem::exists (const char *fname) { + if (!fname) + return false; +#ifdef __WIN32__ + return GetFileAttributes(fname) != INVALID_FILE_ATTRIBUTES; +#else + struct stat attr; + return stat(fname, &attr) == 0; +#endif +} + + +/** Returns true if 'fname' references a directory. */ +bool FileSystem::isDirectory (const char *fname) { + if (!fname) + return false; +#ifdef __WIN32__ + return GetFileAttributes(fname) & FILE_ATTRIBUTE_DIRECTORY; +#else + struct stat attr; + return stat(fname, &attr) == 0 && S_ISDIR(attr.st_mode); +#endif +} + + +/** Returns true if 'fname' references a file. */ +bool FileSystem::isFile (const char *fname) { + if (!fname) + return false; +#ifdef __WIN32__ + ifstream ifs(fname); + return ifs; +#else + struct stat attr; + return stat(fname, &attr) == 0 && S_ISREG(attr.st_mode); +#endif +} + + +int FileSystem::collect (const char *dirname, vector &entries) { + entries.clear(); +#ifdef __WIN32__ + string pattern = string(dirname) + "/*"; + WIN32_FIND_DATA data; + HANDLE h = FindFirstFile(pattern.c_str(), &data); + bool ready = (h == INVALID_HANDLE_VALUE); + while (!ready) { + string fname = data.cFileName; + string path = string(dirname)+"/"+fname; + string typechar = isFile(path.c_str()) ? "f" : isDirectory(path.c_str()) ? "d" : "?"; + if (fname != "." && fname != "..") + entries.push_back(typechar+fname); + ready = !FindNextFile(h, &data); + } + FindClose(h); +#else + if (DIR *dir = opendir(dirname)) { + struct dirent *ent; + while ((ent = readdir(dir))) { + string fname = ent->d_name; + string path = string(dirname)+"/"+fname; + string typechar = isFile(path.c_str()) ? "f" : isDirectory(path.c_str()) ? "d" : "?"; + if (fname != "." && fname != "..") + entries.push_back(typechar+fname); + } + closedir(dir); + } +#endif + return entries.size(); +} + + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileSystem.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileSystem.h new file mode 100644 index 00000000000..b53b42b09a8 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FileSystem.h @@ -0,0 +1,48 @@ +/************************************************************************* +** FileSystem.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef FILESYSTEM_H +#define FILESYSTEM_H + +#include +#include +#include "types.h" + +struct FileSystem +{ + static bool remove (const std::string &fname); + static bool rename (const std::string &oldname, const std::string &newname); + static bool copy (const std::string &src, const std::string &dest, bool remove_src=false); + static UInt64 filesize (const std::string &fname); + static std::string adaptPathSeperators (std::string path); + static std::string getcwd (); + static bool chdir (const char *dir); + static bool exists (const char *file); + static bool mkdir (const char *dir); + static bool rmdir (const char *fname); + static int collect (const char *dirname, std::vector &entries); + static bool isDirectory (const char *fname); + static bool isFile (const char *fname); + static const char* userdir (); + static const char* DEVNULL; + static const char PATHSEP; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Font.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Font.cpp new file mode 100644 index 00000000000..ac0cd0cf60f --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Font.cpp @@ -0,0 +1,392 @@ +/************************************************************************* +** Font.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include +#include "FileSystem.h" +#include "Font.h" +#include "FontEngine.h" +#include "FileFinder.h" +#include "GFGlyphTracer.h" +#include "Glyph.h" +#include "Message.h" +#include "MetafontWrapper.h" +#include "TFM.h" +#include "VFReader.h" +#include "macros.h" +#include "FileSystem.h" +#include "SignalHandler.h" +#include "SVGTree.h" + +using namespace std; + + +/** Returns true if 'unicode' is a valid unicode value in XML documents. + * XML version 1.0 doesn't allow various unicode character references + * ( for example). */ +static bool valid_unicode (UInt32 unicode) { + UInt32 ranges[] = { + 0x0000, 0x0020, + 0x007f, 0x0084, + 0x0086, 0x009f, + 0xfdd0, 0xfddf + }; + for (int i=0; i < 4; i++) + if (unicode >= ranges[2*i] && unicode <= ranges[2*i+1]) + return false; + return true; +} + + +UInt32 Font::unicode (UInt32 c) const { + // @@ this should be optimized :-) + return valid_unicode(c) ? c : 0x3400+c; +} + + +/////////////////////////////////////////////////////////////////////////////////////// + + +TFMFont::TFMFont (string name, UInt32 cs, double ds, double ss) + : tfm(0), fontname(name), checksum(cs), dsize(ds), ssize(ss) +{ +} + + +TFMFont::~TFMFont () { + delete tfm; +} + + +/** Returns a font metrics object for the current font. + * @throw FontException if TFM file can't be found */ +const TFM* TFMFont::getTFM () const { + if (!tfm) { + tfm = TFM::createFromFile(fontname.c_str()); + if (!tfm) + throw FontException("can't find "+fontname+".tfm"); + } + return tfm; +} + + +double TFMFont::charWidth (int c) const {return getTFM()->getCharWidth(c);} +double TFMFont::charDepth (int c) const {return getTFM()->getCharDepth(c);} +double TFMFont::charHeight (int c) const {return getTFM()->getCharHeight(c);} +double TFMFont::italicCorr (int c) const {return getTFM()->getItalicCorr(c);} + +////////////////////////////////////////////////////////////////////////////// + +// static class variables +bool PhysicalFont::KEEP_TEMP_FILES = false; +const char *PhysicalFont::CACHE_PATH = 0; +double PhysicalFont::METAFONT_MAG = 4; +FontCache PhysicalFont::_cache; + + + +Font* PhysicalFont::create (string name, UInt32 checksum, double dsize, double ssize, PhysicalFont::Type type) { + return new PhysicalFontImpl(name, checksum, dsize, ssize, type); +} + + +const char* PhysicalFont::path () const { + string ext; + switch (type()) { + case PFB: ext = "pfb"; break; + case TTF: ext = "ttf"; break; + case MF : ext = "mf"; break; + } + return FileFinder::lookup(name()+"."+ext); +} + + +/** Returns the number of units per EM. The EM square is the virtual area a glyph is designed on. + * All coordinates used to specify portions of the glyph are relative to the origin (0,0) at the + * lower left corner of this square, while the upper right corner is located at (m,m), where m + * is an integer value defined with the font, and returned by this function. */ +int PhysicalFont::unitsPerEm() const { + if (type() == MF) + return 1000; + FontEngine::instance().setFont(*this); + return FontEngine::instance().getUnitsPerEM(); +} + + +int PhysicalFont::hAdvance () const { + if (type() == MF) + return 0; + FontEngine::instance().setFont(*this); + return FontEngine::instance().getHAdvance(); +} + + +double PhysicalFont::hAdvance (int c) const { + if (type() == MF) + return unitsPerEm()*charWidth(c)/designSize(); + FontEngine::instance().setFont(*this); + if (FontEncoding *enc = encoding()) + return FontEngine::instance().getHAdvance(enc->getEntry(c)); + return FontEngine::instance().getHAdvance(c); +} + + +string PhysicalFont::glyphName (int c) const { + if (type() == MF) + return ""; + FontEngine::instance().setFont(*this); + if (FontEncoding *enc = encoding()) + return enc->getEntry(c); + return FontEngine::instance().getGlyphName(c); +} + + +int PhysicalFont::ascent () const { + if (type() == MF) + return 0; + FontEngine::instance().setFont(*this); + return FontEngine::instance().getAscender(); +} + + +int PhysicalFont::descent () const { + if (type() == MF) + return 0; + FontEngine::instance().setFont(*this); + return FontEngine::instance().getDescender(); +} + + +/** 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 + * @param[in] cb optional callback object for tracer class + * @return true if outline could be computed */ +bool PhysicalFont::getGlyph (int c, GraphicPath &glyph, GFGlyphTracer::Callback *cb) const { + if (type() == MF) { + const Glyph *cached_glyph=0; + if (CACHE_PATH) { + _cache.write(CACHE_PATH); + _cache.read(name().c_str(), CACHE_PATH); + cached_glyph = _cache.getGlyph(c); + } + if (cached_glyph) { + glyph = *cached_glyph; + return true; + } + else { + string gfname; + if (createGF(gfname)) { + try { + GFGlyphTracer tracer(gfname, unitsPerEm()/getTFM()->getDesignSize(), cb); + tracer.setGlyph(glyph); + tracer.executeChar(c); + glyph.closeOpenSubPaths(); + if (CACHE_PATH) + _cache.setGlyph(c, glyph); + return true; + } + catch (GFException &e) { + // @@ print error message + } + } + else { + Message::wstream(true) << "failed creating " << name() << ".gf\n"; + } + } + } + else { // PFB or TTF + bool ok=true; + FontEngine::instance().setFont(*this); + if (FontEncoding *enc = encoding()) { + if (const char *encname = enc->getEntry(c)) + ok = FontEngine::instance().traceOutline(encname, glyph, false); + } + else + ok = FontEngine::instance().traceOutline((unsigned char)c, glyph, false); + glyph.closeOpenSubPaths(); + return ok; + } + return false; +} + + +/** Creates a GF file for this font object. + * @param[out] gfname name of GF font file + * @return true on success */ +bool PhysicalFont::createGF (string &gfname) const { + SignalHandler::instance().check(); + gfname = name()+".gf"; + MetafontWrapper mf(name()); + bool ok = mf.make("ljfour", METAFONT_MAG); // call Metafont if necessary + return ok && mf.success() && getTFM(); +} + + +/** Traces all glyphs of the current font and stores them in the cache. If caching is disabled, nothing happens. + * @param[in] includeCached if true, glyphs already cached are traced again + * @param[in] cb optional callback methods called by the tracer + * @return number of glyphs traced */ +int PhysicalFont::traceAllGlyphs (bool includeCached, GFGlyphTracer::Callback *cb) const { + int count = 0; + if (type() == MF && CACHE_PATH) { + if (const TFM *tfm = getTFM()) { + int fchar = tfm->firstChar(); + int lchar = tfm->lastChar(); + string gfname; + Glyph glyph; + if (createGF(gfname)) { + _cache.read(name().c_str(), CACHE_PATH); + GFGlyphTracer tracer(gfname, unitsPerEm()/getTFM()->getDesignSize(), cb); + tracer.setGlyph(glyph); + for (int i=fchar; i <= lchar; i++) { + if (includeCached || !_cache.getGlyph(i)) { + glyph.newpath(); + tracer.executeChar(i); + glyph.closeOpenSubPaths(); + _cache.setGlyph(i, glyph); + ++count; + } + } + _cache.write(CACHE_PATH); + } + } + } + return count; +} + + +/** Computes the exact bounding box of a glyph. + * @param[in] c character code of the glyph + * @param[out] bbox the computed bounding box + * @param[in] optional calback object forwarded to the tracer + * @return true if the box could be computed successfully */ +bool PhysicalFont::getGlyphBox(int c, BoundingBox& bbox, GFGlyphTracer::Callback* cb) const { + Glyph glyph; + if (getGlyph(c, glyph, cb)) { + glyph.computeBBox(bbox); + double s = scaledSize()/unitsPerEm(); + bbox.scale(s, s); + return true; + } + return false; +} + + +Font* VirtualFont::create (string name, UInt32 checksum, double dsize, double ssize) { + return new VirtualFontImpl(name, checksum, dsize, ssize); +} + + +////////////////////////////////////////////////////////////////////////////// + + +PhysicalFontImpl::PhysicalFontImpl (string name, UInt32 cs, double ds, double ss, PhysicalFont::Type type) + : TFMFont(name, cs, ds, ss), _filetype(type), _charmap(0) +{ +} + + +PhysicalFontImpl::~PhysicalFontImpl () { + if (CACHE_PATH) + _cache.write(CACHE_PATH); + if (!KEEP_TEMP_FILES) + tidy(); + delete _charmap; +} + + +UInt32 PhysicalFontImpl::unicode (UInt32 c) const { + if (type() == MF) + return Font::unicode(c); + + if (_charmap == 0) { + FontEngine &fe = FontEngine::instance(); + if (fe.setFont(*this)) { + _charmap = new map; + fe.buildTranslationMap(*_charmap); + } + } + typedef map::const_iterator ConstIterator; + ConstIterator it = _charmap->find(c); + if (it != _charmap->end()) + return it->second; + + // No unicode equivalent found in font file. + // Now we should look for a smart alternative but at the moment + // it's sufficient to simply choose a valid unused unicode value... + map reverse_map; + FORALL(*_charmap, ConstIterator, it) + reverse_map[it->second] = it->first; + // can we use charcode itself as unicode replacement? + if (valid_unicode(c) && (reverse_map.empty() || reverse_map.find(c) != reverse_map.end())) + return c; + return 0x3400+c; +} + + +void PhysicalFontImpl::tidy () const { + if (type() == MF) { + const char *ext[] = {"gf", "tfm", "log", 0}; + for (const char **p=ext; *p; ++p) { + if (FileSystem::exists((name()+"."+(*p)).c_str())) + FileSystem::remove(name()+"."+(*p)); + } + } +} + + +////////////////////////////////////////////////////////////////////////////// + +VirtualFontImpl::VirtualFontImpl (string name, UInt32 cs, double ds, double ss) + : TFMFont(name, cs, ds, ss) +{ +} + + +VirtualFontImpl::~VirtualFontImpl () { + // delete dvi vectors received by VFReaderAction + for (map::iterator i=charDefs.begin(); i != charDefs.end(); ++i) + delete i->second; +} + + +const char* VirtualFontImpl::path () const { + return FileFinder::lookup(name()+".vf"); +} + + +void VirtualFontImpl::assignChar (UInt32 c, DVIVector *dvi) { + if (dvi) { + if (charDefs.find(c) == charDefs.end()) + charDefs[c] = dvi; + else + delete dvi; + } +} + + +const vector* VirtualFontImpl::getDVI (int c) const { + map::const_iterator it = charDefs.find(c); + return (it == charDefs.end() ? 0 : it->second); +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Font.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Font.h new file mode 100644 index 00000000000..adddcb98458 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Font.h @@ -0,0 +1,260 @@ +/************************************************************************* +** Font.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef FONT_H +#define FONT_H + +#include +#include +#include +#include "FontCache.h" +#include "FontEncoding.h" +#include "GFGlyphTracer.h" +#include "Glyph.h" +#include "GraphicPath.h" +#include "MessageException.h" +#include "VFActions.h" +#include "VFReader.h" +#include "types.h" + +class TFM; + + +/** Abstract base for all font classes. */ +struct Font +{ + virtual ~Font () {} + virtual Font* clone (double ds, double sc) const =0; + virtual const Font* uniqueFont () const =0; + virtual std::string name () const =0; + virtual double designSize () const =0; + virtual double scaledSize () const =0; + virtual double scaleFactor () const {return scaledSize()/designSize();} + virtual double charWidth (int c) const =0; + virtual double charDepth (int c) const =0; + virtual double charHeight (int c) const =0; + virtual double italicCorr (int c) const =0; + virtual const TFM* getTFM () const =0; + virtual const char* path () const =0; + virtual FontEncoding* encoding () const {return FontEncoding::encoding(name());} + virtual bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=0) const =0; + virtual UInt32 unicode (UInt32 c) const; + virtual void tidy () const {} +}; + + +/** Empty font without any glyphs. Instances of this class are used + * if no physical or virtual font file can be found. + * The metric values returned by the member functions are based on cmr10. */ +struct EmptyFont : public Font +{ + public: + EmptyFont (std::string name) : fontname(name) {} + Font* clone (double ds, double sc) const {return new EmptyFont(*this);} + const Font* uniqueFont () const {return this;} + std::string name () const {return fontname;} + double designSize () const {return 10;} // cmr10 design size in pt + double scaledSize () const {return 10;} // cmr10 scaled size in pt + double charWidth (int c) const {return 9.164;} // width of cmr10's 'M' in pt + double charHeight (int c) const {return 6.833;} // height of cmr10's 'M' in pt + double charDepth (int c) const {return 0;} + double italicCorr (int c) const {return 0;} + const TFM* getTFM () const {return 0;} + const char* path () const {return 0;} + bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=0) const {return false;} + + private: + std::string fontname; +}; + + +/** Interface for all physical fonts. */ +class PhysicalFont : public virtual Font +{ + public: + enum Type {MF, PFB, TTF}; + static Font* create (std::string name, UInt32 checksum, double dsize, double ssize, PhysicalFont::Type type); + virtual Type type () const =0; + virtual bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=0) const; + virtual bool getGlyphBox (int c, BoundingBox &bbox, GFGlyphTracer::Callback *cb=0) const; + virtual int hAdvance () const; + virtual double hAdvance (int c) const; + std::string glyphName (int c) const; + virtual int unitsPerEm () const; + virtual int ascent () const; + virtual int descent () const; + virtual int traceAllGlyphs (bool includeCached, GFGlyphTracer::Callback *cb=0) const; + const char* path () const; + + protected: + bool createGF (std::string &gfname) const; + + public: + static bool KEEP_TEMP_FILES; + static const char *CACHE_PATH; ///< path to cache directory (0 if caching is disabled) + static double METAFONT_MAG; ///< magnification factor for Metafont calls + + protected: + static FontCache _cache; +}; + + +/** Interface for all virtual fonts. */ +class VirtualFont : public virtual Font +{ + friend class FontManager; + public: + typedef std::vector DVIVector; + + public: + static Font* create (std::string name, UInt32 checksum, double dsize, double ssize); + virtual const DVIVector* getDVI (int c) const =0; + bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=0) const {return false;} + + protected: + virtual void assignChar (UInt32 c, DVIVector *dvi) =0; +}; + + +class TFMFont : public virtual Font +{ + public: + TFMFont (std::string name, UInt32 checksum, double dsize, double ssize); + ~TFMFont (); + const TFM* getTFM () const; + std::string name () const {return fontname;} + double designSize () const {return dsize;} + double scaledSize () const {return ssize;} + double charWidth (int c) const; + double charDepth (int c) const; + double charHeight (int c) const; + double italicCorr (int c) const; + + private: + mutable TFM *tfm; + std::string fontname; + UInt32 checksum; ///< cheksum to be compared with TFM checksum + double dsize; ///< design size in TeX point units + double ssize; ///< scaled size +}; + + +class PhysicalFontProxy : public PhysicalFont +{ + friend class PhysicalFontImpl; + public: + Font* clone (double ds, double sc) const {return new PhysicalFontProxy(*this, ds, sc);} + const Font* uniqueFont () const {return pf;} + std::string name () const {return pf->name();} + double designSize () const {return dsize;} + double scaledSize () const {return ssize;} + double charWidth (int c) const {return pf->charWidth(c);} + double charDepth (int c) const {return pf->charDepth(c);} + double charHeight (int c) const {return pf->charHeight(c);} + double italicCorr (int c) const {return pf->italicCorr(c);} + const TFM* getTFM () const {return pf->getTFM();} + Type type () const {return pf->type();} + UInt32 unicode (UInt32 c) const {return pf->unicode(c);} + + protected: + PhysicalFontProxy (const PhysicalFont *font, double ds, double ss) : pf(font), dsize(ds), ssize(ss) {} + PhysicalFontProxy (const PhysicalFontProxy &proxy, double ds, double ss) : pf(proxy.pf), dsize(ds), ssize(ss) {} + + private: + const PhysicalFont *pf; + double dsize; ///< design size in TeX point units + double ssize; ///< scaled size +}; + + +class PhysicalFontImpl : public PhysicalFont, public TFMFont +{ + friend class PhysicalFont; + public: + ~PhysicalFontImpl(); + Font* clone (double ds, double ss) const {return new PhysicalFontProxy(this, ds, ss);} + const Font* uniqueFont () const {return this;} + Type type () const {return _filetype;} + UInt32 unicode (UInt32 c) const; + void tidy () const; + + protected: + PhysicalFontImpl (std::string name, UInt32 checksum, double dsize, double ssize, PhysicalFont::Type type); + + private: + Type _filetype; + mutable std::map *_charmap; +}; + + +class VirtualFontProxy : public VirtualFont +{ + friend class VirtualFontImpl; + public: + Font* clone (double ds, double ss) const {return new VirtualFontProxy(*this, ds, ss);} + const Font* uniqueFont () const {return vf;} + std::string name () const {return vf->name();} + const DVIVector* getDVI (int c) const {return vf->getDVI(c);} + double designSize () const {return dsize;} + double scaledSize () const {return ssize;} + double charWidth (int c) const {return vf->charWidth(c);} + double charDepth (int c) const {return vf->charDepth(c);} + double charHeight (int c) const {return vf->charHeight(c);} + double italicCorr (int c) const {return vf->italicCorr(c);} + const TFM* getTFM () const {return vf->getTFM();} + const char* path () const {return vf->path();} + + protected: + VirtualFontProxy (const VirtualFont *font, double ds, double ss) : vf(font), dsize(ds), ssize(ss) {} + VirtualFontProxy (const VirtualFontProxy &proxy, double ds, double ss) : vf(proxy.vf), dsize(ds), ssize(ss) {} + void assignChar (UInt32 c, DVIVector *dvi) {delete dvi;} + + private: + const VirtualFont *vf; + double dsize; ///< design size in TeX point units + double ssize; ///< scaled size in TeX point units +}; + + +class VirtualFontImpl : public VirtualFont, public TFMFont +{ + friend class VirtualFont; + public: + ~VirtualFontImpl (); + Font* clone (double ds, double ss) const {return new VirtualFontProxy(this, ds, ss);} + const Font* uniqueFont () const {return this;} + const DVIVector* getDVI (int c) const; + const char* path () const; + + protected: + VirtualFontImpl (std::string name, UInt32 checksum, double dsize, double ssize); + void assignChar (UInt32 c, DVIVector *dvi); + + private: + std::map charDefs; ///< dvi subroutines defining the characters +}; + + +struct FontException : public MessageException +{ + FontException (std::string msg) : MessageException(msg) {} +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontCache.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontCache.cpp new file mode 100644 index 00000000000..c4ca8ad1fbf --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontCache.cpp @@ -0,0 +1,387 @@ +/************************************************************************* +** FontCache.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include +#include +#include "CRC32.h" +#include "FileSystem.h" +#include "FontCache.h" +#include "Glyph.h" +#include "Pair.h" +#include "StreamReader.h" +#include "StreamWriter.h" +//#include "gzstream.h" +#include "types.h" + +using namespace std; + +const UInt8 FontCache::VERSION = 5; + + +static Pair32 read_pair (int bytes, StreamReader &sr) { + Int32 x = sr.readSigned(bytes); + Int32 y = sr.readSigned(bytes); + return Pair32(x, y); +} + + +FontCache::FontCache () : _changed(false) +{ +} + + +FontCache::~FontCache () { + clear(); +} + + +/** Removes all data from the cache. This does not affect the cache files. */ +void FontCache::clear () { + _glyphs.clear(); + _fontname.clear(); +} + + +/** Assigns glyph data to a character and adds it to the cache. + * @param[in] c character code + * @param[in] glyph font glyph data */ +void FontCache::setGlyph (int c, const Glyph &glyph) { + _glyphs[c] = glyph; + _changed = true; +} + + +/** Returns the corresponding glyph data of a given character of the current font. + * @param[in] c character code + * @return font glyph data (0 if no matching data was found) */ +const Glyph* FontCache::getGlyph (int c) const { + GlyphMap::const_iterator it = _glyphs.find(c); + return (it != _glyphs.end()) ? &it->second : 0; +} + + +/** Writes the current cache data to a file (only if anything changed after + * the last call of read()). + * @param[in] fontname name of current font + * @param[in] dir directory where the cache file should go + * @return true if writing was successful */ +bool FontCache::write (const char *fontname, const char *dir) const { + if (!_changed) + return true; + + if (fontname && strlen(fontname) > 0) { + if (dir == 0 || strlen(dir) == 0) + dir = FileSystem::getcwd().c_str(); + ostringstream oss; + oss << dir << '/' << fontname << ".fgd"; +// ogzstream ofs(oss.str().c_str(), 9, ios::binary|ios::out); + ofstream ofs(oss.str().c_str(), ios::binary); + return write(fontname, ofs); + } + return false; +} + + +bool FontCache::write (const char* dir) const { + return _fontname.empty() ? false : write(_fontname.c_str(), dir); +} + + +/** Returns the minimal number of bytes needed to store the given value. */ +static int max_int_size (Int32 value) { + Int32 limit = 0x7f; + for (int i=1; i <= 4; i++) { + if ((value < 0 && -value <= limit+1) || (value >= 0 && value <= limit)) + return i; + limit = (limit << 8) | 0xff; + } + return 4; +} + + +/** Returns the minimal number of bytes needed to store the biggest + * pair component of the given vector. */ +static int max_int_size (const Pair *pairs, size_t n) { + int ret=0; + for (size_t i=0; i < n; i++) { + ret = max(ret, max_int_size(pairs[i].x())); + ret = max(ret, max_int_size(pairs[i].y())); + } + return ret; +} + + +/** Writes the current cache data to a stream (only if anything changed after + * the last call of read()). + * @param[in] fontname name of current font + * @param[in] os output stream + * @return true if writing was successful */ +bool FontCache::write (const char *fontname, ostream &os) const { + if (!_changed) + return true; + if (!os) + return false; + + StreamWriter sw(os); + CRC32 crc32; + + struct WriteActions : Glyph::Actions { + WriteActions (StreamWriter &sw, CRC32 &crc32) : _sw(sw), _crc32(crc32) {} + + void draw (char cmd, const Glyph::Point *points, int n) { + int bytes = max_int_size(points, n); + int cmdchar = (bytes << 5) | (cmd - 'A'); + _sw.writeUnsigned(cmdchar, 1, _crc32); + for (int i=0; i < n; i++) { + _sw.writeSigned(points[i].x(), bytes, _crc32); + _sw.writeSigned(points[i].y(), bytes, _crc32); + } + } + StreamWriter &_sw; + CRC32 &_crc32; + } actions(sw, crc32); + + sw.writeUnsigned(VERSION, 1, crc32); + sw.writeUnsigned(0, 4); // space for checksum + sw.writeString(fontname, crc32, true); + sw.writeUnsigned(_glyphs.size(), 4, crc32); + FORALL(_glyphs, GlyphMap::const_iterator, it) { + const Glyph &glyph = it->second; + sw.writeUnsigned(it->first, 4, crc32); + sw.writeUnsigned(glyph.size(), 2, crc32); + glyph.iterate(actions, false); + } + os.seekp(1); + sw.writeUnsigned(crc32.get(), 4); // insert CRC32 checksum + os.seekp(0, ios::end); + return true; +} + + +/** Reads font glyph information from a file. + * @param[in] fontname name of font data to read + * @param[in] dir directory where the cache files are located + * @return true if reading was successful */ +bool FontCache::read (const char *fontname, const char *dir) { + if (_fontname == fontname) + return true; + clear(); + if (fontname && strlen(fontname) > 0) { + if (dir == 0 || strlen(dir) == 0) + dir = FileSystem::getcwd().c_str(); + ostringstream oss; + oss << dir << '/' << fontname << ".fgd"; + ifstream ifs(oss.str().c_str(), ios::binary); +// igzstream ifs(oss.str().c_str(), 9, ios::binary|ios::in); + return read(fontname, ifs); + } + return false; +} + + +/** Reads font glyph information from a stream. + * @param[in] fontname name of font data to read + * @param[in] dir input stream + * @return true if reading was successful */ +bool FontCache::read (const char *fontname, istream &is) { + if (_fontname == fontname) + return true; + clear(); + _fontname = fontname; + if (!is) + return false; + + StreamReader sr(is); + CRC32 crc32; + if (sr.readUnsigned(1, crc32) != VERSION) + return false; + + UInt32 crc32_cmp = sr.readUnsigned(4); + crc32.update(is); + if (crc32.get() != crc32_cmp) + return false; + + is.clear(); + is.seekg(5); // continue reading after checksum + + string fname = sr.readString(); + if (fname != fontname) + return false; + + UInt32 num_glyphs = sr.readUnsigned(4); + while (num_glyphs-- > 0) { + UInt32 c = sr.readUnsigned(4); // character code + UInt16 s = sr.readUnsigned(2); // number of path commands + Glyph &glyph = _glyphs[c]; + while (s-- > 0) { + UInt8 cmdval = sr.readUnsigned(1); + UInt8 cmdchar = (cmdval & 0x1f) + 'A'; + int bytes = cmdval >> 5; + switch (cmdchar) { + case 'C': { + Pair32 p1 = read_pair(bytes, sr); + Pair32 p2 = read_pair(bytes, sr); + Pair32 p3 = read_pair(bytes, sr); + glyph.cubicto(p1, p2, p3); + break; + } + case 'L': + glyph.lineto(read_pair(bytes, sr)); + break; + case 'M': + glyph.moveto(read_pair(bytes, sr)); + break; + case 'Q': { + Pair32 p1 = read_pair(bytes, sr); + Pair32 p2 = read_pair(bytes, sr); + glyph.conicto(p1, p2); + break; + } + case 'Z': + glyph.closepath(); + } + } + } + _changed = false; + return true; +} + + +/** Collects font cache information. + * @param[in] dirname path to font cache directory + * @param[out] infos the collected font information + * @param[out] invalid names of outdated/corrupted cache files + * @return true on success */ +bool FontCache::fontinfo (const char *dirname, vector &infos, vector &invalid) { + infos.clear(); + invalid.clear(); + if (dirname) { + vector fnames; + FileSystem::collect(dirname, fnames); + FORALL(fnames, vector::iterator, it) { + if ((*it)[0] == 'f' && it->length() > 5 && it->substr(it->length()-4) == ".fgd") { + FontInfo info; + string path = string(dirname)+"/"+(it->substr(1)); + ifstream ifs(path.c_str(), ios::binary); + if (fontinfo(ifs, info)) + infos.push_back(info); + else + invalid.push_back(it->substr(1)); + } + } + } + return infos.size() > 0; +} + + +/** Collects font cache information of a single font. + * @param[in] is input stream of the cache file + * @param[out] info the collected data + * @return true if data could be read, false if cache file is unavailable, outdated, or corrupted */ +bool FontCache::fontinfo (std::istream &is, FontInfo &info) { + info.name.clear(); + info.numchars = info.numbytes = info.numcmds = 0; + if (is) { + is.clear(); + is.seekg(0); + StreamReader sr(is); + CRC32 crc32; + if ((info.version = sr.readUnsigned(1, crc32)) != VERSION) + return false; + + info.checksum = sr.readUnsigned(4); + crc32.update(is); + if (crc32.get() != info.checksum) + return false; + + is.clear(); + is.seekg(5); // continue reading after checksum + + info.name = sr.readString(); + info.numchars = sr.readUnsigned(4); + for (UInt32 i=0; i < info.numchars; i++) { + sr.readUnsigned(4); // character code + UInt16 s = sr.readUnsigned(2); // number of path commands + while (s-- > 0) { + UInt8 cmdval = sr.readUnsigned(1); + UInt8 cmdchar = (cmdval & 0x1f) + 'A'; + int bytes = cmdval >> 5; + int bc = 0; + switch (cmdchar) { + case 'C': bc = 6*bytes; break; + case 'H': + case 'L': + case 'M': + case 'T': + case 'V': bc = 2*bytes; break; + case 'Q': + case 'S': bc = 4*bytes; break; + case 'Z': break; + default : return false; + } + info.numbytes += bc+1; // command length + command + info.numcmds++; + is.seekg(bc, ios_base::cur); + } + info.numbytes += 6; // number of path commands + char code + } + info.numbytes += 6+info.name.length(); // version + 0-byte + fontname + number of chars + } + return true; +} + + +/** Collects font cache information and write it to a stream. + * @param[in] dirname path to font cache directory + * @param[in] os output is written to this stream + * @param[in] purge if true, outdated and corrupted cache files are removed */ +void FontCache::fontinfo (const char *dirname, ostream &os, bool purge) { + if (dirname) { + vector infos; + vector invalid_files; + if (fontinfo(dirname, infos, invalid_files)) { + os << "cache format version " << infos[0].version << endl; + typedef map SortMap; + SortMap sortmap; + FORALL(infos, vector::iterator, it) + sortmap[it->name] = &(*it); + + FORALL(sortmap, SortMap::iterator, it) { + os << dec << setfill(' ') << left + << setw(10) << left << it->second->name + << setw(5) << right << it->second->numchars << " char" << (it->second->numchars == 1 ? ' ':'s') + << setw(10) << right << it->second->numcmds << " cmd" << (it->second->numcmds == 1 ? ' ':'s') + << setw(12) << right << it->second->numbytes << " byte" << (it->second->numbytes == 1 ? ' ':'s') + << setw(6) << "crc:" << setw(8) << hex << right << setfill('0') << it->second->checksum + << endl; + } + } + else + os << "cache is empty\n"; + FORALL(invalid_files, vector::iterator, it) { + string path=string(dirname)+"/"+(*it); + if (FileSystem::remove(path)) + os << "invalid cache file " << (*it) << " removed\n"; + } + } +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontCache.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontCache.h new file mode 100644 index 00000000000..5ab7b885210 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontCache.h @@ -0,0 +1,74 @@ +/************************************************************************* +** FontCache.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef FONTCACHE_H +#define FONTCACHE_H + +#include +#include +#include +#include "types.h" +#include "Glyph.h" + +#ifdef VERSION +#undef VERSION +#endif + + +class FontCache +{ + typedef std::map GlyphMap; + + public: + struct FontInfo + { + std::string name; // fontname + UInt16 version; // file format version + UInt32 checksum; // CRC32 checksum of file data + UInt32 numchars; // number of characters + UInt32 numbytes; // number of bytes + UInt32 numcmds; // number of path commands + }; + + public: + FontCache (); + ~FontCache (); + bool read (const char *fontname, const char *dir); + bool read (const char *fontname, std::istream &is); + bool write (const char *dir) const; + bool write (const char *fontname, const char *dir) const; + bool write (const char *fontname, std::ostream &os) const; + const Glyph* getGlyph (int c) const; + void setGlyph (int c, const Glyph &glyph); + void clear (); + const std::string& fontname () const {return _fontname;} + + static bool fontinfo (const char *dirname, std::vector &infos, std::vector &invalid); + static bool fontinfo (std::istream &is, FontInfo &info); + static void fontinfo (const char *dirname, std::ostream &os, bool purge=false); + + private: + static const UInt8 VERSION; + std::string _fontname; + GlyphMap _glyphs; + bool _changed; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEncoding.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEncoding.cpp new file mode 100644 index 00000000000..e02e859933d --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEncoding.cpp @@ -0,0 +1,159 @@ +/************************************************************************* +** FontEncoding.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include "Font.h" +#include "FontEncoding.h" +#include "InputBuffer.h" +#include "InputReader.h" +#include "FileFinder.h" +#include "Message.h" + +using namespace std; + +static string read_entry (InputReader &in); +static bool valid_name_char (int c); + + +FontEncoding::FontEncoding (const string &encname) : _encname(encname) +{ + read(); +} + + +const char* FontEncoding::path () const { + return FileFinder::lookup(_encname+".enc"); +} + + +/** Search for suitable enc-file and read its encoding information. + * The file contents must be a valid PostScript vector with 256 entries. */ +void FontEncoding::read () { + if (const char *p = path()) { + ifstream ifs(p); + read(ifs); + } + else + Message::mstream(true) << "encoding file '" << _encname << ".enc' not found\n"; +} + + +/** Read encoding information from stream. */ +void FontEncoding::read (istream &is) { + StreamInputBuffer ib(is, 256); + BufferInputReader in(ib); + _table.resize(256); + + // find beginning of vector + while (!in.eof()) { + in.skipSpace(); + if (in.peek() == '%') + in.skipUntil("\n"); + else + if (in.get() == '[') + break; + } + + // read vector entries + int n=0; + while (!in.eof()) { + in.skipSpace(); + if (in.peek() == '%') + in.skipUntil("\n"); + else if (in.peek() == ']') { + in.get(); + break; + } + else { + string entry = read_entry(in); + if (entry == ".notdef") + entry.clear(); + if (n < 256) + _table[n++] = entry; + } + } + // remove trailing .notdef names + for (n--; n > 0 && _table[n].empty(); n--); + _table.resize(n+1); +} + + +static string read_entry (InputReader &in) { + string entry; + bool accept_slashes=true; + while (!in.eof() && ((in.peek() == '/' && accept_slashes) || valid_name_char(in.peek()))) { + if (in.peek() != '/') + accept_slashes = false; + entry += in.get(); + } + if (entry.length() > 1) { + // strip leading slashes + // According to the PostScript specification, a single slash without further + // following characters is a valid name. + size_t n=0; + while (n < entry.length() && entry[n] == '/') + n++; + entry = entry.substr(n); + } + return entry; +} + + +static bool valid_name_char (int c) { + const char *delimiters = "<>(){}[]/~%"; + return isprint(c) && !isspace(c) && !strchr(delimiters, c); +} + + +/** Returns an entry of the encoding table. + * @param[in] c character code + * @return character name assigned to charcter code c*/ +const char* FontEncoding::getEntry (int c) const { + if (c >= 0 && (size_t)c < _table.size()) + return !_table[c].empty() ? _table[c].c_str() : 0; + return 0; +} + + +struct EncodingMap : public map +{ + ~EncodingMap () { + for (EncodingMap::iterator it=begin(); it != end(); ++it) + delete it->second; + } +}; + + +/** Returns the encoding of a font. + * @param[in] fontname name of font whose encoding will be returned + * @return pointer to encoding object, or 0 if there is no encoding defined */ +FontEncoding* FontEncoding::encoding (const string &fontname) { + static EncodingMap encmap; + if (const char *encname = FileFinder::lookupEncName(fontname)) { + EncodingMap::const_iterator it = encmap.find(encname); + if (it != encmap.end()) + return it->second; + FontEncoding *enc = new FontEncoding(encname); + encmap[encname] = enc; + return enc; + } + return 0; +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEncoding.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEncoding.h new file mode 100644 index 00000000000..6766611f64f --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEncoding.h @@ -0,0 +1,48 @@ +/************************************************************************* +** FontEncoding.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef FONTENCODING_H +#define FONTENCODING_H + +#include +#include +#include +#include +#include "types.h" + + +class FontEncoding +{ + public: + FontEncoding (const std::string &name); + void read (); + void read (std::istream &is); + int size () const {return _table.size();} + std::string name () const {return _encname;} + const char* getEntry (int c) const; + const char* path () const; + static FontEncoding* encoding (const std::string &fontname); + + private: + std::string _encname; + std::vector _table; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEngine.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEngine.cpp new file mode 100644 index 00000000000..991813fc1a5 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEngine.cpp @@ -0,0 +1,369 @@ +/************************************************************************* +** FontEngine.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include FT_GLYPH_H +#include FT_OUTLINE_H +#include FT_TRUETYPE_TABLES_H +#include "Font.h" +#include "FontEngine.h" +#include "Message.h" +#include "macros.h" + +using namespace std; + + +FontEngine::FontEngine () { + _currentFace = 0; + _currentChar = _currentGlyphIndex = 0; + _horDeviceRes = _vertDeviceRes = 300; + _ptSize = 0; + if (FT_Init_FreeType(&_library)) + Message::estream(true) << "FontEngine: error initializing FreeType library\n"; +} + + +FontEngine::~FontEngine () { + if (_currentFace && FT_Done_Face(_currentFace)) + Message::estream(true) << "FontEngine: error removing glyph\n"; + if (FT_Done_FreeType(_library)) + Message::estream(true) << "FontEngine: error removing FreeType library\n"; +} + + +/** Returns the singleton instance of this class. */ +FontEngine& FontEngine::instance () { + static FontEngine engine; + return engine; +} + + +string FontEngine::version () { + FT_Int major, minor, patch; + FT_Library &lib = instance()._library; + FT_Library_Version(lib, &major, &minor, &patch); + ostringstream oss; + oss << major << '.' << minor << '.' << patch; + return oss.str(); +} + + +void FontEngine::setDeviceResolution (int x, int y) { + _horDeviceRes = x; + _vertDeviceRes = y; +} + + +/** Builds a table that maps glyph indexes to char codes. + * @param[in] face font face to be used + * @param[out] reverseMap the resulting map */ +static void build_reverse_map (FT_Face face, map &reverseMap) { + FT_UInt glyphIndex; + UInt32 charcode = FT_Get_First_Char(face, &glyphIndex); + while (glyphIndex) { +// if (reverseMap.find(glyphIndex) == reverseMap.end()) + reverseMap[glyphIndex] = charcode; + charcode = FT_Get_Next_Char(face, charcode, &glyphIndex); + } +} + + +/** Sets the font to be used. + * @param[in] fname path to font file + * @param[in] ptSize font size in point units + * @return true on success */ +bool FontEngine::setFont (const string &fname, int ptSize) { + if (FT_New_Face(_library, fname.c_str(), 0, &_currentFace)) { + Message::estream(true) << "FontEngine: error reading file " << fname << '\n'; + return false; + } + if (ptSize && FT_Set_Char_Size(_currentFace, 0, ptSize*64, _horDeviceRes, _vertDeviceRes)) { + Message::estream(true) << "FontEngine: error setting character size\n"; + return false; + } + // look for a custom character map + for (int i=0; i < _currentFace->num_charmaps; i++) { + FT_CharMap charmap = _currentFace->charmaps[i]; + if (charmap->encoding == FT_ENCODING_ADOBE_CUSTOM) { + FT_Set_Charmap(_currentFace, charmap); + break; + } + } + _ptSize = ptSize; + return true; +} + + +bool FontEngine::setFont (const Font &font) { + if (fname != font.name()) { + fname = font.name(); + return setFont(font.path()); + } + return true; +} + + +void FontEngine::buildTranslationMap (map &translationMap) const { + FT_CharMap unicodeMap=0, customMap=0; + for (int i=0; i < _currentFace->num_charmaps; i++) { + FT_CharMap charmap = _currentFace->charmaps[i]; + if (charmap->encoding == FT_ENCODING_ADOBE_CUSTOM) + customMap = charmap; + else if (charmap->encoding == FT_ENCODING_UNICODE) + unicodeMap = charmap; + } + if (unicodeMap == 0 || customMap == 0) + return; + + map reverseMap; + build_reverse_map(_currentFace, reverseMap); + + FT_Set_Charmap(_currentFace, unicodeMap); + FT_UInt glyphIndex; + UInt32 charcode = FT_Get_First_Char(_currentFace, &glyphIndex); + while (glyphIndex) { + translationMap[reverseMap[glyphIndex]] = charcode; + charcode = FT_Get_Next_Char(_currentFace, charcode, &glyphIndex); + } + FT_Set_Charmap(_currentFace, customMap); +} + + +const char* FontEngine::getFamilyName () const { + return _currentFace ? _currentFace->family_name : 0; +} + + +const char* FontEngine::getStyleName () const { + return _currentFace ? _currentFace->style_name : 0; +} + + +int FontEngine::getUnitsPerEM () const { + return _currentFace ? _currentFace->units_per_EM : 0; +} + + +int FontEngine::getAscender () const { + return _currentFace ? _currentFace->ascender : 0; +} + + +int FontEngine::getDescender () const { + return _currentFace ? _currentFace->descender : 0; +} + + +int FontEngine::getHAdvance () const { + if (_currentFace) { + TT_OS2 *table = static_cast(FT_Get_Sfnt_Table(_currentFace, ft_sfnt_os2)); + return table ? table->xAvgCharWidth : 0; + } + return 0; +} + + +int FontEngine::getHAdvance (unsigned c) const { + if (_currentFace) { + int index = FT_Get_Char_Index(_currentFace, (FT_ULong)c); + FT_Load_Glyph(_currentFace, index, FT_LOAD_NO_SCALE); + return _currentFace->glyph->metrics.horiAdvance; + } + return 0; +} + + +int FontEngine::getHAdvance (const char *name) const { + if (_currentFace && name) { + int index = FT_Get_Name_Index(_currentFace, (FT_String*)name); + FT_Load_Glyph(_currentFace, index, FT_LOAD_NO_SCALE); + return _currentFace->glyph->metrics.horiAdvance; + } + return 0; +} + + +/** 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 glyph name for a given charater code. + * @param[in] c char code + * @return glyph name */ +string FontEngine::getGlyphName (unsigned c) const { + if (_currentFace && FT_HAS_GLYPH_NAMES(_currentFace)) { + char buf[256]; + int index = FT_Get_Char_Index(_currentFace, c); + FT_Get_Glyph_Name(_currentFace, index, buf, 256); + return string(buf); + } + return ""; +} + + +/* Returns the character code for a given glyph name. + * @param name glyph name + * @return char code or 0 if name couldn't be found +int FontEngine::getCharByGlyphName (const char *name) const { + if (_currentFace && FT_HAS_GLYPH_NAMES(_currentFace)) { + int index = FT_Get_Name_Index(_currentFace, (FT_String*)name); + map::const_iterator it = _reverseMap.find(index); + if (it != _reverseMap.end()) + return it->second; + } + return 0; +}*/ + + +vector FontEngine::getPanose () const { + vector panose(10); + if (_currentFace) { + TT_OS2 *table = static_cast(FT_Get_Sfnt_Table(_currentFace, ft_sfnt_os2)); + if (table) + for (int i=0; i < 10; i++) + panose[i] = table->panose[i]; + } + return panose; +} + + +bool FontEngine::setCharSize (int ptSize) { + if (_currentFace) { + if (FT_Set_Char_Size(_currentFace, 0, ptSize*64, _horDeviceRes, _vertDeviceRes)) { + Message::estream(true) << "FontEngine: error setting character size\n"; + return false; + } + _ptSize = ptSize; + return true; + } + Message::wstream(true) << "FontEngine: can't set char size, no font face selected\n"; + return false; +} + + +// handle API change in freetype version 2.2.1 +#if FREETYPE_MAJOR > 2 || (FREETYPE_MAJOR == 2 && (FREETYPE_MINOR > 2 || (FREETYPE_MINOR == 2 && FREETYPE_PATCH >= 1))) + typedef const FT_Vector *FTVectorPtr; +#else + typedef FT_Vector *FTVectorPtr; +#endif + +// Callback functions used by traceOutline +static int moveto (FTVectorPtr to, void *user) { + Glyph *glyph = static_cast(user); + glyph->moveto(to->x, to->y); + return 0; +} + + +static int lineto (FTVectorPtr to, void *user) { + Glyph *glyph = static_cast(user); + glyph->lineto(to->x, to->y); + return 0; +} + + +static int conicto (FTVectorPtr control, FTVectorPtr to, void *user) { + Glyph *glyph = static_cast(user); + glyph->conicto(control->x, control->y, to->x, to->y); + return 0; +} + + +static int cubicto (FTVectorPtr control1, FTVectorPtr control2, FTVectorPtr to, void *user) { + Glyph *glyph = static_cast(user); + glyph->cubicto(control1->x, control1->y, control2->x, control2->y, to->x, to->y); + return 0; +} + + +/** Traces the outline of a glyph by calling the corresponding "drawing" functions. + * Each glyph is composed of straight lines, quadratic (conic) or cubic B�zier curves. + * This function takes all these outline segments and processes them by calling + * the corresponding functions. The functions must be provided in form of a + * FEGlyphCommands object. + * @param[in] index index of the glyph that will be traced + * @param[in] commands the drawing commands to be executed + * @param[in] scale if true the current pt size will be considered otherwise the plain TrueType units are used. + * @return false on errors */ +static bool trace_outline (FT_Face face, int index, Glyph &glyph, bool scale) { + if (face) { + if (FT_Load_Glyph(face, index, scale ? FT_LOAD_DEFAULT : FT_LOAD_NO_SCALE)) { + Message::estream(true) << "can't load glyph " << int(index) << '\n'; + return false; + } + + if (face->glyph->format != FT_GLYPH_FORMAT_OUTLINE) { + Message::estream(true) << "no outlines found in glyph " << int(index) << '\n'; + return false; + } + FT_Outline outline = face->glyph->outline; + const FT_Outline_Funcs funcs = {moveto, lineto, conicto, cubicto, 0, 0}; + FT_Outline_Decompose(&outline, &funcs, &glyph); + return true; + } + Message::wstream(true) << "FontEngine: can't trace outline, no font face selected\n"; + return false; +} + + + +/** Traces the outline of a glyph by calling the corresponding "drawing" functions. + * Each glyph is composed of straight lines, quadratic (conic) or cubic B�zier curves. + * This function takes all these outline segments and processes them by calling + * the corresponding functions. The functions must be provided in form of a + * FEGlyphCommands object. + * @param[in] chr the glyph of this character will be traced + * @param[in] commands the drawing commands to be executed + * @param[in] scale if true the current pt size will be considered otherwise + * the plain TrueType units are used. + * @return false on errors */ +bool FontEngine::traceOutline (unsigned char chr, Glyph &glyph, bool scale) const { + if (_currentFace) { + int index = FT_Get_Char_Index(_currentFace, chr); + return trace_outline(_currentFace, index, glyph, scale); + } + Message::wstream(true) << "FontEngine: can't trace outline, no font face selected\n"; + return false; +} + + +bool FontEngine::traceOutline (const char *name, Glyph &glyph, bool scale) const { + if (_currentFace) { + int index = FT_Get_Name_Index(_currentFace, (FT_String*)name); + return trace_outline(_currentFace, index, glyph, scale); + } + Message::wstream(true) << "FontEngine: can't trace outline, no font face selected\n"; + return false; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEngine.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEngine.h new file mode 100644 index 00000000000..678bc43c180 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontEngine.h @@ -0,0 +1,76 @@ +/************************************************************************* +** FontEngine.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef FONTENGINE_H +#define FONTENGINE_H + +#include +#include FT_FREETYPE_H +#include +#include +#include +#include "types.h" +#include "Glyph.h" + +class Font; + +/** This class provides methods to handle font files and font data. + * It's a wrapper for the Freetype font library. */ +class FontEngine +{ + public: + ~FontEngine (); + static FontEngine& instance (); + static std::string version (); + void setDeviceResolution (int x, int y); + bool setFont (const Font &font); + bool setCharSize (int ptSize); + bool traceOutline (unsigned char chr, Glyph &glyph, bool scale=true) const; + bool traceOutline (const char *name, Glyph &glyph, bool scale) const; + const char* getFamilyName () const; + const char* getStyleName () const; + int getUnitsPerEM () const; + int getAscender () const; + int getDescender () const; + int getHAdvance () const; + int getHAdvance (unsigned int c) const; + int getHAdvance (const char *name) const; + int getFirstChar () const; + int getNextChar () const; + int getCharSize () const {return _ptSize;} + std::vector getPanose () const; + std::string getGlyphName (unsigned int c) const; + int getCharByGlyphName (const char *name) const; + void buildTranslationMap (std::map &translationMap) const; + + protected: + FontEngine (); + bool setFont (const std::string &fname, int ptSize=0); + + private: + int _horDeviceRes, _vertDeviceRes; + mutable unsigned int _currentChar, _currentGlyphIndex; + FT_Face _currentFace; + FT_Library _library; + int _ptSize; + std::string fname; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontManager.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontManager.cpp new file mode 100644 index 00000000000..8f6958cdb42 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontManager.cpp @@ -0,0 +1,252 @@ +/************************************************************************* +** FontManager.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "Font.h" +#include "FontEncoding.h" +#include "FontManager.h" +#include "FileFinder.h" +#include "Message.h" +#include "macros.h" + +using namespace std; + + +FontManager::~FontManager () { + FORALL(_fonts, vector::iterator, i) + delete *i; +} + + +/** Returns the singleton instance */ +FontManager& FontManager::instance () { + static FontManager fm; + return fm; +} + + +/** Returns a unique ID that identifies the font. + * @param[in] n local font number, as used in DVI and VF files + * @return non-negative font ID if font was found, -1 otherwise */ +int FontManager::fontID (int n) const { + if (_vfStack.empty()) { + Num2IdMap::const_iterator it = _num2id.find(n); + return (it == _num2id.end()) ? -1 : it->second; + } + VfNum2IdMap::const_iterator vit = _vfnum2id.find(_vfStack.top()); + if (vit == _vfnum2id.end()) + return -1; + const Num2IdMap &num2id = vit->second; + Num2IdMap::const_iterator it = num2id.find(n); + return (it == num2id.end()) ? -1 : it->second; +} + + +/** Returns a unique ID that identifies the font. Not the font object but the + * font pointer is looked up to get the ID. Thus, two different pointers + * referencing different objects of the same font are mapped to different IDs. + * @param[in] font pointer to font object to be identified + * @return non-negative font ID if font was found, -1 otherwise */ +int FontManager::fontID (const Font *font) const { + for (size_t i=0; i < _fonts.size(); i++) + if (_fonts[i] == font) + return i; + return -1; +} + + +/** Returns a unique ID that identifies the font. + * @param[in] name name of font to be identified, e.g. cmr10 + * @return non-negative font ID if font was found, -1 otherwise */ +int FontManager::fontID (const string &name) const { + map::const_iterator it = _name2id.find(name); + if (it == _name2id.end()) + return -1; + return it->second; +} + + +int FontManager::fontnum (int id) const { + if (id < 0 || size_t(id) > _fonts.size()) + return -1; + if (_vfStack.empty()) { + FORALL(_num2id, Num2IdMap::const_iterator, i) + if (i->second == id) + return i->first; + } + else { + VfNum2IdMap::const_iterator it = _vfnum2id.find(_vfStack.top()); + if (it == _vfnum2id.end()) + return -1; + const Num2IdMap &num2id = it->second; + FORALL(num2id, Num2IdMap::const_iterator, i) + if (i->second == id) + return i->first; + } + return -1; +} + + +int FontManager::vfFirstFontNum (VirtualFont *vf) const { + VfFirstFontMap::const_iterator it = _vfFirstFontMap.find(vf); + return (it == _vfFirstFontMap.end()) ? -1 : (int) it->second; +} + + +/** Returns a previously registered font. + * @param[in] n local font number, as used in DVI and VF files + * @return pointer to font if font was found, 0 otherwise */ +Font* FontManager::getFont (int n) const { + int id = fontID(n); + return (id < 0) ? 0 : _fonts[id]; +} + + +Font* FontManager::getFont (const string &name) const { + int id = fontID(name); + if (id < 0) + return 0; + return _fonts[id]; +} + + +Font* FontManager::getFontById (int id) const { + if (id < 0 || size_t(id) >= _fonts.size()) + return 0; + return _fonts[id]; +} + + +/** Returns the current active virtual font. */ +VirtualFont* FontManager::getVF () const { + return _vfStack.empty() ? 0 : _vfStack.top(); +} + + +/** Registers a new font to be managed by the FontManager. If there is + * already a registered font assigned to number n, nothing happens. + * @param[in] fontnum local font number, as used in DVI and VF files + * @param[in] name fontname, e.g. cmr10 + * @param[in] checksum checksum to be compared with TFM checksum + * @param[in] dsize design size in TeX point units + * @param[in] ssize scaled size in TeX point units + * @return id of registered font */ +int FontManager::registerFont (UInt32 fontnum, string name, UInt32 checksum, double dsize, double ssize) { + int id = fontID(fontnum); + if (id >= 0) + return id; + + Font *newfont = 0; + int newid = _fonts.size(); // the new font gets this ID + Name2IdMap::iterator it = _name2id.find(name); + if (it != _name2id.end()) { // font with same name already registered? + Font *font = _fonts[it->second]; + newfont = font->clone(dsize, ssize); + } + else { + if (FileFinder::lookup(name+".pfb")) + newfont = PhysicalFont::create(name, checksum, dsize, ssize, PhysicalFont::PFB); + else if (FileFinder::lookup(name+".ttf")) + newfont = PhysicalFont::create(name, checksum, dsize, ssize, PhysicalFont::TTF); + else if (FileFinder::lookup(name+".vf")) + newfont = VirtualFont::create(name, checksum, dsize, ssize); + else if (FileFinder::lookup(name+".mf")) + newfont = PhysicalFont::create(name, checksum, dsize, ssize, PhysicalFont::MF); + else { + newfont = new EmptyFont(name); + Message::wstream(true) << "font '" << name << "' not found\n"; + } + _name2id[name] = newid; + } + _fonts.push_back(newfont); + if (_vfStack.empty()) // register font referenced in dvi file? + _num2id[fontnum] = newid; + else { // register font referenced in vf file + VirtualFont *vf = const_cast(_vfStack.top()); + _vfnum2id[vf][fontnum] = newid; + if (_vfFirstFontMap.find(vf) == _vfFirstFontMap.end()) // first fontdef of VF? + _vfFirstFontMap[vf] = fontnum; + } + return newid; +} + + +/** Enters a new virtual font frame. + * This method must be called before processing a VF character. + * @param[in] vf virtual font */ +void FontManager::enterVF (VirtualFont *vf) { + if (vf) + _vfStack.push(vf); +} + + +/** Leaves a previously entered virtual font frame. */ +void FontManager::leaveVF () { + if (!_vfStack.empty()) + _vfStack.pop(); +} + + +/** Assigns a sequence of DVI commands to a char code. + * @param[in] c character code + * @param[in] dvi points to vector with DVI commands */ +void FontManager::assignVfChar (int c, vector *dvi) { + if (!_vfStack.empty() && dvi) + _vfStack.top()->assignChar(c, dvi); +} + + +ostream& FontManager::write (ostream &os, Font *font, int level) { +#if 0 + if (font) { + int id = -1; + for (int i=0; i < fonts.size() && id < 0; i++) + if (fonts[i] == font) + id = i; + + VirtualFont *vf = dynamic_cast(font); + for (int j=0; j < level+1; j++) + os << " "; + os << "id " << id + << " fontnum " << fontnum(id) << " " + << (vf ? "VF" : "PF") << " " + << font->name() + << endl; + + if (vf) { + enterVF(vf); + const Num2IdMap &num2id = vfnum2id.find(vf)->second; + FORALL(num2id, Num2IdMap::const_iterator, i) { + Font *font = fonts[i->second]; + write(os, font, level+1); + } + leaveVF(); + } + } + else { + for (int i=0; i < fonts.size(); i++) + write(os, fonts[i], level); + os << endl; + } +#endif + return os; +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontManager.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontManager.h new file mode 100644 index 00000000000..14f6d2aae71 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontManager.h @@ -0,0 +1,82 @@ +/************************************************************************* +** FontManager.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef FONTMANAGER_H +#define FONTMANAGER_H + +#include +#include +#include +#include +#include +#include +#include "types.h" + + +class FileFinder; +class Font; +class TFM; +class VirtualFont; + +/** This class provides methods for easy DVI font handling. + * DVI and VF files use local font numbers to reference fonts. For SVG output + * we need a single list with unique IDs of all physical fonts. Characters of + * virtual fonts are completely replaced by their DVI description so they don't + * appear anywhere in the output. */ +class FontManager +{ + typedef std::map Num2IdMap; + typedef std::map Name2IdMap; + typedef std::map VfNum2IdMap; + typedef std::map VfFirstFontMap; + typedef std::stack VfStack; + + public: + ~FontManager (); + static FontManager& instance (); + int registerFont (UInt32 fontnum, std::string fontname, UInt32 checksum, double dsize, double scale); + Font* getFont (int n) const; + Font* getFont (const std::string &name) const; + Font* getFontById (int id) const; + VirtualFont* getVF () const; + int fontID (int n) const; + int fontID (const Font *font) const; + int fontID (const std::string &name) const; + int fontnum (int id) const; + int vfFirstFontNum (VirtualFont *vf) const; + void enterVF (VirtualFont *vf); + void leaveVF (); + void assignVfChar (int c, std::vector *dvi); + const std::vector& getFonts () const {return _fonts;} + std::ostream& write (std::ostream &os, Font *font=0, int level=0); + + protected: + FontManager () {} + + private: + std::vector _fonts; ///< all registered Fonts + Num2IdMap _num2id; ///< DVI font number -> fontID + Name2IdMap _name2id; ///< fontname -> fontID + VfNum2IdMap _vfnum2id; + VfStack _vfStack; ///< stack of currently processed virtual fonts + VfFirstFontMap _vfFirstFontMap; ///< VF -> local font number of first font defined in VF +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontMap.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontMap.cpp new file mode 100644 index 00000000000..803cebb9dad --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontMap.cpp @@ -0,0 +1,234 @@ +/************************************************************************* +** FontMap.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include "Directory.h" +#include "FontMap.h" + +using namespace std; + +enum FontMapFieldType {FM_ERROR=0, FM_NONE, FM_NAME, FM_PS_CODE, FM_HEADER, FM_ENC, FM_FONT}; + + +static char* str_tolower (char *str); +static inline char* get_extension (char *fname); +static FontMapFieldType read_entry (char* &first, char* &last, bool name_only=false); + + + +FontMap::FontMap (const string &fname) { + read(fname); +} + + +bool FontMap::read (const string &fname) { + ifstream ifs(fname.c_str()); + if (ifs) { + if (fname.find("dvipdfm") != string::npos) + readPdfMap(ifs); + else + readPsMap(ifs); + return true; + } + return false; +} + + +/** Read map file in dvips format. + * @param[in] is data is read from this stream */ +void FontMap::readPsMap (istream &is) { + char buf[512]; + while (is && !is.eof()) { + is.getline(buf, 512); + if (!buf[0] || strchr(" %#;*", buf[0])) // comment? + continue; + char *first=buf, *last=buf, *end=buf+is.gcount()-1; + MapEntry entry; + string name; + while (last < end && *first) { + last = first; + switch (read_entry(first, last)) { + case FM_NAME: + if (name.empty()) + name = first; + break; + case FM_ENC: + entry.encname = first; break; + case FM_FONT: + entry.fontname = first; break; + case FM_ERROR: + continue; + default: + break; + } + first = last+1; + } + // strip filename suffix + size_t len; + if ((len = entry.encname.length()) > 4 && entry.encname.substr(len-4) == ".enc") + entry.encname = entry.encname.substr(0, len-4); + if ((len = entry.fontname.length()) > 4 && entry.fontname[len-4] == '.') + entry.fontname = entry.fontname.substr(0, len-4); + + if (!name.empty() && ((name != entry.fontname && !entry.fontname.empty()) || !entry.encname.empty())) + _fontMap[name] = entry; + } +} + + +/** Read map file in dvipdfm format. + * [|default|none] [] [options] + * The optional trailing dvipdfm-parameters -r, -e and -s are ignored. + * @param[in] is data is read from this stream */ +void FontMap::readPdfMap (istream &is) { + char buf[512]; + while (is && !is.eof()) { + is.getline(buf, 512); + if (!buf[0] || strchr(" %#;*", buf[0])) // comment? + continue; + char *first=buf, *last=buf, *end=buf+is.gcount()-1; + vector fields; + for (int i=0; i < 3 && last < end && *first; i++) { + FontMapFieldType type = read_entry(first, last, true); + if (*first == '-') + break; + if (type == FM_NAME) + fields.push_back(first); + first = last+1; + } + if (fields.size() > 1 && (fields[1] == "default" || fields[1] == "none")) + fields[1].clear(); + + if (fields.size() < 2) + continue; + if ((fields.size() == 2 && fields[1].empty()) || (fields.size() == 3 && fields[1].empty() && fields[0] == fields[2])) + continue; + + _fontMap[fields[0]].fontname = fields[fields.size() == 2 ? 0 : 2]; + _fontMap[fields[0]].encname = fields[1]; + } +} + + + +static char* str_tolower (char *str) { + for (char *p=str; *p; p++) + *p = tolower(*p); + return str; +} + + +static inline char* get_extension (char *fname) { + if (char* p=strrchr(fname, '.')) + return p+1; + return 0; +} + + + + +/** Reads a single line entry. + * @param[in,out] first pointer to first char of entry + * @param[in,out] last pointer to last char of entry + * @param[in] name_only true, if special meanings of \" and < should be ignored + * @return entry type */ +static FontMapFieldType read_entry (char* &first, char* &last, bool name_only) { + while (*first && isspace(*first)) + first++; + if (!name_only) { + if (*first == '"') { + last = first+1; + while (*last && *last != '"') + last++; + if (*last == 0) // quote not closed => skip invalid line + return FM_ERROR; + return FM_PS_CODE; + } + else if (*first == '<') { + FontMapFieldType type=FM_HEADER; + first++; + if (isspace(*first)) + first++; + else if (*first == '<' || *first == '[') { + type = (*first == '<') ? FM_FONT : FM_ENC; + first++; + } + if (read_entry(first, last, true) != FM_NAME) + return FM_ERROR; + if (type == FM_HEADER) { + if (char *ext = get_extension(first)) { + ext = str_tolower(ext); + if (strcmp(ext, "enc")==0) + return FM_ENC; + if (strcmp(ext, "pfb")==0 || strcmp(ext, "pfa")==0) + return FM_FONT; + } + } + return type; + } + } + last = first; + while (*last && !isspace(*last)) + last++; + *last = 0; + return (first < last) ? FM_NAME : FM_NONE; +} + + +ostream& FontMap::write (ostream &os) const { + for (map::const_iterator i=_fontMap.begin(); i != _fontMap.end(); ++i) + os << i->first << " -> " << i->second.fontname << " [" << i->second.encname << "]\n"; + return os; +} + + +void FontMap::readdir (const string &dirname) { + Directory dir(dirname); + while (const char *fname = dir.read('f')) { + if (strlen(fname) >= 4 && strcmp(fname+strlen(fname)-4, ".map") == 0) { + string path = dirname + "/" + fname; + read(path.c_str()); + } + } +} + + +/** Returns name of font that is mapped to a given font. + * @param[in] fontname name of font whose mapped name is retrieved + * @returns name of mapped font */ +const char* FontMap::lookup (const string &fontname) const { + ConstIterator it = _fontMap.find(fontname); + if (it == _fontMap.end()) + return 0; + return it->second.fontname.c_str(); +} + + +/** Returns the name of the assigned encoding for a given font. + * @param[in] fontname name of font whose encoding is returned + * @return name of encoding, 0 if there is no encoding assigned */ +const char* FontMap::encoding (const string &fontname) const { + ConstIterator it = _fontMap.find(fontname); + if (it == _fontMap.end() || it->second.encname.empty()) + return 0; + return it->second.encname.c_str(); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontMap.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontMap.h new file mode 100644 index 00000000000..ec2c69af0f6 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/FontMap.h @@ -0,0 +1,60 @@ +/************************************************************************* +** FontMap.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef FONTMAP_H +#define FONTMAP_H + +#include +#include +#include +#include +#include + + +class FontMap +{ + struct MapEntry + { + std::string fontname; ///< target font name + std::string encname; ///< name of font encoding + }; + + typedef std::map::const_iterator ConstIterator; + + public: + FontMap () {} + FontMap (const std::string &fname); + FontMap (std::istream &is); + bool read (const std::string &fname); + void readdir (const std::string &dirname); + void clear () {_fontMap.clear();} + std::ostream& write (std::ostream &os) const; + const char* lookup(const std::string &fontname) const; + const char* encoding (const std::string &fontname) const; + + protected: + void readPsMap (std::istream &is); + void readPdfMap (std::istream &is); + + private: + std::map _fontMap; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFGlyphTracer.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFGlyphTracer.cpp new file mode 100644 index 00000000000..9dbb4b5fa71 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFGlyphTracer.cpp @@ -0,0 +1,92 @@ +/************************************************************************* +** GFGlyphTracer.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include "GFGlyphTracer.h" +#include "Pair.h" + +using namespace std; + +GFGlyphTracer::GFGlyphTracer () : GFTracer(_ifs, 0), _glyph(0), _callback(0) +{ +} + +/** Constructs a new glyph tracer. + * @param[in] is GF input stream + * @param[in] upp target units per TeX point */ +GFGlyphTracer::GFGlyphTracer (string &fname, double upp, Callback *cb) + : GFTracer(_ifs, upp), _glyph(0), _callback(cb) +{ + if (_callback) + _callback->setFont(fname); + _ifs.open(fname.c_str(), ios::binary); +} + + +void GFGlyphTracer::reset (string &fname, double upp) { + if (_callback) + _callback->setFont(fname); + if (_ifs.is_open()) + _ifs.close(); + unitsPerPoint(upp); + _ifs.open(fname.c_str(), ios::binary); +} + + +bool GFGlyphTracer::executeChar (UInt8 c) { + if (_glyph) { + if (_callback) + _callback->beginChar(c); + bool ok = GFTracer::executeChar(c); + if (_callback) { + if (ok) + _callback->endChar(c); + else + _callback->emptyChar(c); + return ok; + } + } + return false; +} + + +void GFGlyphTracer::moveTo (double x, double y) { + _glyph->moveto(int(x), int(y)); +} + + +void GFGlyphTracer::lineTo (double x, double y) { + _glyph->lineto(int(x), int(y)); +} + + +void GFGlyphTracer::curveTo (double c1x, double c1y, double c2x, double c2y, double x, double y) { + _glyph->cubicto(int(c1x), int(c1y), int(c2x), int(c2y), int(x), int(y)); +} + + +void GFGlyphTracer::closePath () { + _glyph->closepath(); +} + + +void GFGlyphTracer::endChar (UInt32 c) { + _glyph->newpath(); + GFTracer::endChar(c); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFGlyphTracer.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFGlyphTracer.h new file mode 100644 index 00000000000..14a927fcef9 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFGlyphTracer.h @@ -0,0 +1,60 @@ +/************************************************************************* +** GFGlyphTracer.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef GFGLYPHTRACER_H +#define GFGLYPHTRACER_H + +#include +#include +#include "GFTracer.h" +#include "Glyph.h" + +class GFGlyphTracer : public GFTracer +{ + public: + struct Callback { + virtual ~Callback () {} + virtual void setFont (const std::string &fontname) {} + virtual void beginChar (UInt8 c) {} + virtual void endChar (UInt8 c) {} + virtual void emptyChar (UInt8 c) {} + }; + + public: + GFGlyphTracer (); + GFGlyphTracer (std::string &fname, double upp, Callback *cb=0); + void reset (std::string &fname, double upp); + void setCallback (Callback *cb) {_callback = cb;} + bool executeChar (UInt8 c); + void moveTo (double x, double y); + void lineTo (double x, double y); + void curveTo (double c1x, double c1y, double c2x, double c2y, double x, double y); + void closePath (); + void endChar (UInt32 c); + void setGlyph (Glyph &glyph) {_glyph = &glyph;} + const Glyph& getGlyph () const {return *_glyph;} + + private: + std::ifstream _ifs; + Glyph *_glyph; + Callback *_callback; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFReader.cpp new file mode 100644 index 00000000000..b47c175f048 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFReader.cpp @@ -0,0 +1,352 @@ +/************************************************************************* +** GFReader.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "GFReader.h" +#include "macros.h" +#include "SignalHandler.h" + +using namespace std; + +struct GFCommand +{ + void (GFReader::*method)(int); + int numBytes; +}; + + +static inline double fix2double (Int32 fix) { + return double(fix)/(1 << 20); +} + + +static inline double scaled2double (Int32 scaled) { + return double(scaled)/(1 << 16); +} + + +GFReader::GFReader (istream &is) : _in(is) +{ + _minX = _maxX = _minY = _maxY = _x = _y = 0; +} + + +UInt32 GFReader::readUnsigned (int bytes) { + UInt32 ret = 0; + for (int i=bytes-1; i >= 0 && !_in.eof(); i--) { + UInt32 b = _in.get(); + ret |= b << (8*i); + } + return ret; +} + + +Int32 GFReader::readSigned (int bytes) { + Int32 ret = _in.get(); + if (ret & 128) // negative value? + ret |= 0xffffff00; + for (int i=bytes-2; i >= 0 && !_in.eof(); i--) + ret = (ret << 8) | _in.get(); + return ret; +} + + +string GFReader::readString (int bytes) { + vector buf(bytes+1); + if (bytes > 0) + _in.get(&buf[0], bytes+1); // reads 'bytes' bytes (pos. bytes+1 is set to 0) + else + buf[0] = 0; + return &buf[0]; +} + + +/** Reads a single GF command from the current position of the input stream and calls the + * corresponding cmdFOO method. + * @return opcode of the executed command */ +int GFReader::executeCommand () { + SignalHandler::instance().check(); + /* Each cmdFOO command reads the necessary number of bytes from the stream so executeCommand + doesn't need to know the exact GF command format. Some cmdFOO methods are used for multiple + GF commands because they only differ in the size of their parameters. */ + static const GFCommand commands[] = { + {&GFReader::cmdPaint, 1}, {&GFReader::cmdPaint, 2}, {&GFReader::cmdPaint, 3}, // 64-66 + {&GFReader::cmdBoc, 0}, {&GFReader::cmdBoc1, 0}, // 67-68 + {&GFReader::cmdEoc, 0}, // 69 + {&GFReader::cmdSkip, 0}, {&GFReader::cmdSkip, 1}, {&GFReader::cmdSkip, 2},{&GFReader::cmdSkip, 3}, // 70-73 + {&GFReader::cmdXXX, 1}, {&GFReader::cmdXXX, 2}, {&GFReader::cmdXXX, 3}, {&GFReader::cmdXXX, 4}, // 239-242 + {&GFReader::cmdYYY, 0}, // 243 + {&GFReader::cmdNop, 0}, // 244 + {&GFReader::cmdCharLoc, 0}, {&GFReader::cmdCharLoc0, 0}, // 245-246 + {&GFReader::cmdPre, 0}, {&GFReader::cmdPost, 0}, {&GFReader::cmdPostPost, 0} // 247-249 + }; + + int opcode = _in.get(); + if (opcode < 0) // at end of file? + throw GFException("unexpected end of file"); + + if (opcode >= 0 && opcode <= 63) + cmdPaint0(opcode); + else if (opcode >= 74 && opcode <= 238) + cmdNewRow(opcode-74); + else if (opcode >= 250) { + ostringstream oss; + oss << "undefined GF command (opcode " << opcode << ")"; + throw GFException(oss.str()); + } + else { + int offset = opcode <= 73 ? 64 : 239-(73-64+1); + const GFCommand &cmd = commands[opcode-offset]; + if (cmd.method) + (this->*cmd.method)(cmd.numBytes); + } + return opcode; +} + + +bool GFReader::executeChar (UInt8 c) { + _in.clear(); + if (_charInfoMap.empty()) + executePostamble(); // read character info + _in.clear(); + Iterator it = _charInfoMap.find(c); + if (_in && it != _charInfoMap.end()) { + _in.seekg(it->second.location, ios_base::beg); + while (executeCommand() != 69); // execute all commands until eoc is reached + return true; + } + return false; +} + + +bool GFReader::executeAllChars () { + _in.clear(); + if (_charInfoMap.empty()) + executePostamble(); // read character info + _in.clear(); + if (_in) { + _in.seekg(0); + while (executeCommand() != 248); // execute all commands until postamble is reached + return true; + } + return false; +} + + +bool GFReader::executePostamble () { + _in.clear(); + if (!_in) + return false; + _in.seekg(-1, ios_base::end); + while (_in.peek() == 223) // skip fill bytes + _in.seekg(-1, ios_base::cur); + _in.seekg(-4, ios_base::cur); + UInt32 q = readUnsigned(4); // pointer to begin of postamble + _in.seekg(q, ios_base::beg); // now on begin of postamble + while (executeCommand() != 249); // execute all commands until postpost is reached + return true; +} + + +/** Returns the design size of this font int TeX point units. */ +double GFReader::getDesignSize () const { + return fix2double(_designSize); +} + +/** Returns the number of horizontal pixels per point. */ +double GFReader::getHPixelsPerPoint () const { + return scaled2double(_hppp); +} + +/** Returns the number of vertical pixels per point. */ +double GFReader::getVPixelsPerPoint () const { + return scaled2double(_vppp); +} + +/** Returns the width of character c in TeX point units */ +double GFReader::getCharWidth (UInt32 c) const { + ConstIterator it = _charInfoMap.find(c%256); + return it == _charInfoMap.end() ? 0 : it->second.width*getDesignSize()/(1<<24); +} + +/////////////////////// + + +/** Reads the preamble. */ +void GFReader::cmdPre (int) { + UInt32 i = readUnsigned(1); + if (i == 131) { + UInt32 k = readUnsigned(1); + string s = readString(k); + preamble(s); + } + else + throw GFException("invalid identification number in GF preamble"); +} + + +/** Reads the postamble. */ +void GFReader::cmdPost (int) { + readUnsigned(4); // pointer to byte after final eoc + _designSize = readUnsigned(4); // design size of font in points + _checksum = readUnsigned(4); // checksum + _hppp = readUnsigned(4); // horizontal pixels per point (scaled int) + _vppp = readUnsigned(4); // vertical pixels per point (scaled int) + _in.seekg(16, ios_base::cur); // skip x and y bounds + postamble(); +} + + +/** Reads trailing bytes at end of stream. */ +void GFReader::cmdPostPost (int) { + readUnsigned(4); // pointer to begin of postamble + UInt32 i = readUnsigned(1); + if (i == 131) + while (readUnsigned(1) == 223); // skip fill bytes + else + throw GFException("invalid identification number in GF preamble"); +} + + +/** Inverts "paint color" (black to white or vice versa) of n pixels + * and advances the cursor by n. + * @param[in] n number of pixels to be inverted */ +void GFReader::cmdPaint0 (int n) { + if (_penDown) // set pixels? + _bitmap.setBits(_y, _x, n); + _x += n; + _penDown = !_penDown; // inverse pen state +} + + +/** Inverts "paint color" (black to white or vice versa) of n pixels + * and advances the cursor by n. The number n of pixels is read from + * the input stream. + * @param[in] len size of n in bytes */ +void GFReader::cmdPaint (int len) { + UInt32 pixels = readUnsigned(len); + cmdPaint0(pixels); +} + + +/** Beginning of character (generic format). */ +void GFReader::cmdBoc (int) { + _currentChar = readSigned(4); + readSigned(4); // pointer to previous boc with same c mod 256 + _minX = readSigned(4); + _maxX = readSigned(4); + _minY = readSigned(4); + _maxY = readSigned(4); + _x = _minX; + _y = _maxY; + _penDown = false; + _bitmap.resize(_minX, _maxX, _minY, _maxY); + beginChar(_currentChar); +} + + +/** Beginning of character (compact format). */ +void GFReader::cmdBoc1 (int) { + _currentChar = readUnsigned(1); + UInt32 dx = readUnsigned(1); + _maxX = readUnsigned(1); + _minX = _maxX - dx; + UInt32 dy = readUnsigned(1); + _maxY = readUnsigned(1); + _minY = _maxY - dy; + _x = _minX; + _y = _maxY; + _penDown = false; + _bitmap.resize(_minX, _maxX, _minY, _maxY); + beginChar(_currentChar); +} + + +/** End of character. */ +void GFReader::cmdEoc (int) { + endChar(_currentChar); +} + + +/** Moves cursor to the beginning of a following row and sets + * paint color to white. + * @param[in] len if 0: move to next row, otherwise: number of bytes to read. + * The read value denotes the number of rows to be skipped. */ +void GFReader::cmdSkip (int len) { + if (len == 0) + _y--; + else + _y -= readUnsigned(len)+1; + _x = _minX; + _penDown = false; +} + + +/** Moves cursor to pixel number 'col' in the next row and sets + * the paint color to black. + * @param[in] col pixel/column number */ +void GFReader::cmdNewRow (int col) { + _x = _minX + col ; + _y--; + _penDown = true; +} + + +void GFReader::cmdXXX (int len) { + UInt32 n = readUnsigned(len); + string str = readString(n); + special(str); +} + + +void GFReader::cmdYYY (int) { + Int32 y = readSigned(4); + numspecial(y); +} + + +/** Does nothing. */ +void GFReader::cmdNop (int) { +} + + +/** Reads character locator (part of postamble) */ +void GFReader::cmdCharLoc0 (int) { + UInt8 c = readUnsigned(1); // character code mod 256 + UInt8 dm = readUnsigned(1); // + Int32 w = readSigned(4); // (1<<24)*characterWidth/designSize + Int32 p = readSigned(4); // pointer to begin of (last) character data + Int32 dx = 65536*dm; + Int32 dy = 0; + _charInfoMap[c] = CharInfo(dx, dy, w, p); +} + + +/** Reads character locator (part of postamble) */ +void GFReader::cmdCharLoc (int) { + UInt32 c = readUnsigned(1); // character code mod 256 + Int32 dx = readSigned(4); // horizontal escapement (scaled pixel units) + Int32 dy = readSigned(4); // vertical escapement (scaled pixel units) + Int32 w = readSigned(4); // (1<<24)*characterWidth/designSize + Int32 p = readSigned(4); // pointer to begin of (last) character data + _charInfoMap[c] = CharInfo(dx, dy, w, p); +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFReader.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFReader.h new file mode 100644 index 00000000000..cbc9fec3e77 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFReader.h @@ -0,0 +1,110 @@ +/************************************************************************* +** GFReader.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef GFREADER_H +#define GFREADER_H + +#include +#include +#include +#include "Bitmap.h" +#include "MessageException.h" +#include "types.h" + + +class CharInfo; + + +struct GFException : public MessageException +{ + GFException (const std::string &msg) : MessageException(msg) {} +}; + + +class GFReader +{ + struct CharInfo + { + CharInfo () : dx(0), dy(0), width(0), location(0) {} + CharInfo (Int32 dxx, Int32 dyy, Int32 w, UInt32 p) : dx(dxx), dy(dyy), width(w), location(p) {} + + Int32 dx, dy; + Int32 width; // 2^24 * (true width)/(design size) + UInt32 location; + }; + + typedef std::map::iterator Iterator; + typedef std::map::const_iterator ConstIterator; + public: + GFReader (std::istream &is); + virtual ~GFReader () {} + bool executeChar (UInt8 c); + bool executeAllChars (); + bool executePostamble (); + virtual void preamble (const std::string &str) {} + virtual void postamble () {} + virtual void beginChar (UInt32 c) {} + virtual void endChar (UInt32 c) {} + virtual void special (std::string str) {} + virtual void numspecial (Int32 y) {} + const Bitmap& getBitmap () const {return _bitmap;} + double getDesignSize () const; + double getHPixelsPerPoint () const; + double getVPixelsPerPoint () const; + double getCharWidth (UInt32 c) const; + UInt32 getChecksum () const {return _checksum;} + + protected: + Int32 readSigned (int bytes); + UInt32 readUnsigned (int bytes); + std::string readString (int len); + int executeCommand (); + std::istream& getInputStream () const {return _in;} + + void cmdPre (int); + void cmdPost (int); + void cmdPostPost (int); + void cmdPaint0 (int pixels); + void cmdPaint (int len); + void cmdBoc (int); + void cmdBoc1 (int); + void cmdEoc (int); + void cmdSkip (int len); + void cmdNewRow (int col); + void cmdXXX (int len); + void cmdYYY (int); + void cmdNop (int); + void cmdCharLoc0 (int); + void cmdCharLoc (int); + + private: + std::istream &_in; + Int32 _minX, _maxX, _minY, _maxY; + Int32 _x, _y; // current pen location (pixel units) + Int32 _currentChar; + Bitmap _bitmap; // bitmap of current char + FixWord _designSize; // designSize + ScaledInt _hppp, _vppp; // horizontal and vertical pixel per point + UInt32 _checksum; + std::map _charInfoMap; + bool _penDown; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFTracer.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFTracer.cpp new file mode 100644 index 00000000000..981d45dda10 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFTracer.cpp @@ -0,0 +1,102 @@ +/************************************************************************* +** GFTracer.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include "GFTracer.h" +#include "Glyph.h" +#include "Message.h" + +#ifdef __MSVC__ +#include +#else +extern "C" { +#include +} +#endif + +using namespace std; + + +GFTracer::GFTracer (istream &is) + : GFReader(is), _unitsPerPoint(0.0) +{ +} + + +/** Constructs a new GFTracer. + * @param[in] is GF file is read from this stream + * @param[in] upp target units per TeX point */ +GFTracer::GFTracer (istream &is, double upp) + : GFReader(is), _unitsPerPoint(upp) +{ +} + + +void GFTracer::beginChar (UInt32 c) { +} + + +void GFTracer::endChar (UInt32 c) { + const Bitmap &bitmap = getBitmap(); + if (bitmap.empty()) + return; + + // prepare potrace's bitmap structure + vector buffer; + potrace_bitmap_t pobitmap; + pobitmap.w = bitmap.width(); + pobitmap.h = bitmap.height(); + pobitmap.dy = bitmap.copy(buffer); + pobitmap.map = &buffer[0]; + potrace_param_t *param = potrace_param_default(); + potrace_state_t *state = potrace_trace(param, &pobitmap); + potrace_param_free(param); + + if (!state || state->status == POTRACE_STATUS_INCOMPLETE) + Message::wstream(true) << "error while tracing character\n"; + else { + double hsf=1.0, vsf=1.0; // horizontal a d vertical scale factor + if (_unitsPerPoint != 0.0) { + hsf = _unitsPerPoint/getHPixelsPerPoint(); // horizontal scale factor + vsf = _unitsPerPoint/getVPixelsPerPoint(); // vertical scale factor + } + for (potrace_path_t *path = state->plist; path; path = path->next) { + potrace_dpoint_t &p = path->curve.c[path->curve.n-1][2]; // start/end point + moveTo(hsf*(p.x+bitmap.xshift()), vsf*(p.y+bitmap.yshift())); + for (int i=0; i < path->curve.n; i++) { + if (path->curve.tag[i] == POTRACE_CURVETO) { + curveTo(hsf*(path->curve.c[i][0].x+bitmap.xshift()), vsf*(path->curve.c[i][0].y+bitmap.yshift()), + hsf*(path->curve.c[i][1].x+bitmap.xshift()), vsf*(path->curve.c[i][1].y+bitmap.yshift()), + hsf*(path->curve.c[i][2].x+bitmap.xshift()), vsf*(path->curve.c[i][2].y+bitmap.yshift())); + } + else { + lineTo(hsf*(path->curve.c[i][1].x+bitmap.xshift()), vsf*(path->curve.c[i][1].y+bitmap.yshift())); + if (i == path->curve.n-1) + closePath(); + else + lineTo(hsf*(path->curve.c[i][2].x+bitmap.xshift()), vsf*(path->curve.c[i][2].y+bitmap.yshift())); + } + } + } + } + potrace_state_free(state); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFTracer.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFTracer.h new file mode 100644 index 00000000000..6d6a4351a05 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GFTracer.h @@ -0,0 +1,47 @@ +/************************************************************************* +** GFTracer.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef GFTRACER_H +#define GFTRACER_H + +#include +#include "GFReader.h" + +class GFTracer : public GFReader +{ + public: + GFTracer (std::istream &is); + GFTracer (std::istream &is, double upp); + virtual ~GFTracer () {} + virtual void moveTo (double x, double y) {} + virtual void lineTo (double x, double y) {} + virtual void curveTo (double c1x, double c1y, double c2x, double c2y, double x, double y) {} + virtual void closePath () {} + void beginChar (UInt32 c); + void endChar (UInt32 c); + + protected: + void unitsPerPoint(double upp) {_unitsPerPoint = upp;} + + private: + double _unitsPerPoint; ///< target units per TeX point +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Ghostscript.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Ghostscript.cpp new file mode 100644 index 00000000000..d7534b045ce --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Ghostscript.cpp @@ -0,0 +1,236 @@ +/************************************************************************* +** Ghostscript.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include "Ghostscript.h" +#if !defined(DISABLE_GS) + +#include +#include +#include + +using namespace std; + +#ifdef __WIN32__ + #define GS_DL_NAME "gsdll32.dll" +#else + #define GS_DL_NAME "libgs.so" +#endif + + +string Ghostscript::LIBGS_NAME; + + +/** Loads the Ghostscript library but does not create an instance. This + * constructor should only be used to call available() and revision(). */ +Ghostscript::Ghostscript () +#if !defined(HAVE_LIBGS) + : DLLoader(LIBGS_NAME.empty() ? GS_DL_NAME : LIBGS_NAME.c_str()) +#endif +{ + _inst = 0; +} + + +/** Tries to load the shared library and to initialize Ghostscript. + * @param[in] argc number of parameters in array argv + * @param[in] argv parameters passed to Ghostscript + * @param[in] caller this parameter is passed to all callback functions */ +Ghostscript::Ghostscript (int argc, const char **argv, void *caller) +#if !defined(HAVE_LIBGS) + : DLLoader(LIBGS_NAME.empty() ? GS_DL_NAME : LIBGS_NAME.c_str()) +#endif +{ + _inst = 0; + init(argc, argv, caller); +} + + +/** Exits Ghostscript and unloads the dynamic library. */ +Ghostscript::~Ghostscript () { + if (_inst) { + exit(); + delete_instance(); + } +} + + +bool Ghostscript::init (int argc, const char **argv, void *caller) { + if (!_inst) { + int status = new_instance(&_inst, caller); + if (status < 0) + _inst = 0; + else { + init_with_args(argc, (char**)argv); + } + } + return _inst != 0; +} + + +/** Returns true if Ghostscript library was found and can be loaded. */ +bool Ghostscript::available () { +#if defined(HAVE_LIBGS) + return true; +#else + return loaded(); +#endif +} + + +/** Retrieves version information about Ghostscript. + * @param[out] r takes the revision information (see GS API documentation for further details) + * @return true on success */ +bool Ghostscript::revision (gsapi_revision_t *r) { +#if defined(HAVE_LIBGS) + return (gsapi_revision(r, sizeof(gsapi_revision_t)) == 0); +#else + if (PFN_gsapi_revision fn = (PFN_gsapi_revision)loadFunction("gsapi_revision")) + return (fn(r, sizeof(gsapi_revision_t)) == 0); + return false; +#endif +} + + +string Ghostscript::revision () { + gsapi_revision_t r; + if (revision(&r)) { + ostringstream oss; + oss << r.product << ' ' << (r.revision/100) << '.' << setfill('0') << setw(2) << (r.revision%100); + return oss.str(); + } + return ""; +} + + +/** Creates a new instance of Ghostscript. This method is called by the constructor and + * should not be used elsewhere. + * @param[out] psinst handle of newly created instance (or 0 on error) + * @param[in] caller pointer forwarded to callback functions */ +int Ghostscript::new_instance (void **psinst, void *caller) { +#if defined(HAVE_LIBGS) + return gsapi_new_instance(psinst, caller); +#else + if (PFN_gsapi_new_instance fn = (PFN_gsapi_new_instance)loadFunction("gsapi_new_instance")) + return fn(psinst, caller); + *psinst = 0; + return 0; +#endif +} + + +/** Destroys the current instance of Ghostscript. This method is called by the destructor + * and should not be used elsewhere. */ +void Ghostscript::delete_instance () { +#if defined(HAVE_LIBGS) + gsapi_delete_instance(_inst); +#else + if (PFN_gsapi_delete_instance fn = (PFN_gsapi_delete_instance)loadFunction("gsapi_delete_instance")) + fn(_inst); +#endif +} + + +/** Exits the interpreter. Must be called before destroying the GS instance. */ +int Ghostscript::exit () { +#if defined(HAVE_LIBGS) + return gsapi_exit(_inst); +#else + if (PFN_gsapi_exit fn = (PFN_gsapi_exit)loadFunction("gsapi_exit")) + return fn(_inst); + return 0; +#endif +} + + +/** Sets the I/O callback functions. + * @param[in] in pointer to stdin handler + * @param[in] out pointer to stdout handler + * @param[in] err pointer to stderr handler */ +int Ghostscript::set_stdio (Stdin in, Stdout out, Stderr err) { +#if defined(HAVE_LIBGS) + return gsapi_set_stdio(_inst, in, out, err); +#else + if (PFN_gsapi_set_stdio fn = (PFN_gsapi_set_stdio)loadFunction("gsapi_set_stdio")) + return fn(_inst, in, out, err); + return 0; +#endif +} + + +/** Initializes Ghostscript with a set of optional parameters. This + * method is called by the constructor and should not be used elsewhere. + * @param[in] argc number of paramters + * @param[in] argv parameters passed to Ghostscript */ +int Ghostscript::init_with_args (int argc, char **argv) { +#if defined(HAVE_LIBGS) + return gsapi_init_with_args(_inst, argc, argv); +#else + if (PFN_gsapi_init_with_args fn = (PFN_gsapi_init_with_args)loadFunction("gsapi_init_with_args")) + return fn(_inst, argc, argv); + return 0; +#endif +} + + +/** Tells Ghostscript that several calls of run_string_continue will follow. */ +int Ghostscript::run_string_begin (int user_errors, int *pexit_code) { +#if defined(HAVE_LIBGS) + return gsapi_run_string_begin(_inst, user_errors, pexit_code); +#else + if (PFN_gsapi_run_string_begin fn = (PFN_gsapi_run_string_begin)loadFunction("gsapi_run_string_begin")) + return fn(_inst, user_errors, pexit_code); + *pexit_code = 0; + return 0; +#endif +} + + +/** Executes a chunk of PostScript commands given by a buffer of characters. The size of + * this buffer must not exceed 64KB. Longer programs can be split into arbitrary smaller chunks + * and passed to Ghostscript by successive calls of run_string_continue. + * @param[in] str buffer containing the PostScript code + * @param[in] length number of characters in buffer + * @param[in] user_errors if non-negative, the default PS error values will be generated, otherwise this value is returned + * @param[out] pexit_code takes the PS error code */ +int Ghostscript::run_string_continue (const char *str, unsigned length, int user_errors, int *pexit_code) { +#if defined(HAVE_LIBGS) + return gsapi_run_string_continue(_inst, str, length, user_errors, pexit_code); +#else + if (PFN_gsapi_run_string_continue fn = (PFN_gsapi_run_string_continue)loadFunction("gsapi_run_string_continue")) + return fn(_inst, str, length, user_errors, pexit_code); + *pexit_code = 0; + return 0; +#endif +} + + +/** Terminates the successive code feeding. Must be called after the last call of run_string_continue. */ +int Ghostscript::run_string_end (int user_errors, int *pexit_code) { +#if defined(HAVE_LIBGS) + return gsapi_run_string_end(_inst, user_errors, pexit_code); +#else + if (PFN_gsapi_run_string_end fn = (PFN_gsapi_run_string_end)loadFunction("gsapi_run_string_end")) + return fn(_inst, user_errors, pexit_code); + *pexit_code = 0; + return 0; +#endif +} + +#endif // !DISABLE_GS diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Ghostscript.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Ghostscript.h new file mode 100644 index 00000000000..ab9bb000841 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Ghostscript.h @@ -0,0 +1,103 @@ +/************************************************************************* +** Ghostscript.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef GHOSTSCRIPT_H +#define GHOSTSCRIPT_H + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#if defined(DISABLE_GS) + #include "iapi.h" +#elif defined(HAVE_LIBGS) + #include +#else + #include "DLLoader.h" + #include "iapi.h" +#endif + +#if defined(__WIN32__) && !defined(_Windows) + #define _Windows +#endif + +#if defined(DISABLE_GS) +struct Ghostscript +{ + typedef int (GSDLLCALLPTR Stdin) (void *caller, char *buf, int len); + typedef int (GSDLLCALLPTR Stdout) (void *caller, const char *str, int len); + typedef int (GSDLLCALLPTR Stderr) (void *caller, const char *str, int len); + + Ghostscript () {} + Ghostscript (int argc, const char **argv, void *caller=0) {} + bool available () {return false;} + bool revision (gsapi_revision_t *r) {return false;} + std::string revision () {return "";} + int set_stdio (Stdin in, Stdout out, Stderr err) {return 0;} + int run_string_begin (int user_errors, int *pexit_code) {return 0;} + int run_string_continue (const char *str, unsigned int length, int user_errors, int *pexit_code) {return 0;} + int run_string_end (int user_errors, int *pexit_code) {return 0;} + int exit () {return 0;} +}; + +#else + +/** Wrapper class of (a subset of) the Ghostscript API. */ +class Ghostscript +#if !defined(HAVE_LIBGS) +: public DLLoader +#endif +{ + public: + typedef int (GSDLLCALLPTR Stdin) (void *caller, char *buf, int len); + typedef int (GSDLLCALLPTR Stdout) (void *caller, const char *str, int len); + typedef int (GSDLLCALLPTR Stderr) (void *caller, const char *str, int len); + + public: + Ghostscript (); + Ghostscript (int argc, const char **argv, void *caller=0); + ~Ghostscript (); + bool init (int argc, const char **argv, void *caller=0); + bool available (); + bool revision (gsapi_revision_t *r); + std::string revision (); + int set_stdio (Stdin in, Stdout out, Stderr err); + int run_string_begin (int user_errors, int *pexit_code); + int run_string_continue (const char *str, unsigned int length, int user_errors, int *pexit_code); + int run_string_end (int user_errors, int *pexit_code); + int exit (); + + static std::string LIBGS_NAME; + + protected: + Ghostscript (const Ghostscript &gs) {} + int init_with_args (int argc, char **argv); + int new_instance (void **psinst, void *caller); + void delete_instance (); + + private: + void *_inst; ///< Ghostscript handle needed to call the gsapi_foo functions +}; + +#endif // DISABLE_GS + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Glyph.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Glyph.h new file mode 100644 index 00000000000..5866f23737b --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Glyph.h @@ -0,0 +1,28 @@ +/************************************************************************* +** Glyph.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef GLYPH_H +#define GLYPH_H + +#include "GraphicPath.h" + +typedef GraphicPath Glyph; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GlyphTracerMessages.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GlyphTracerMessages.h new file mode 100644 index 00000000000..909d0db6979 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GlyphTracerMessages.h @@ -0,0 +1,65 @@ +/************************************************************************* +** GlyphTracerMessages.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef GLYPHTRACERMESSAGES_H +#define GLYPHTRACERMESSAGES_H + +#include +#include "GFGlyphTracer.h" +#include "Message.h" +#include "types.h" + +class GlyphTracerMessages : public GFGlyphTracer::Callback +{ + public: + GlyphTracerMessages (bool sfmsg=true, bool autonl=true) : _sfmsg(sfmsg), _autonl(autonl) {} + + ~GlyphTracerMessages () { + if (_autonl) + Message::mstream() << '\n'; + } + + void endChar (UInt8 c) { + std::ostringstream oss; + oss << '['; + if (isprint(c)) + oss << c; + else + oss << '#' << unsigned(c); + oss << ']'; + Message::mstream(false, Message::MC_TRACING) << oss.str(); + } + + void setFont (const std::string &fname) { + if (_sfmsg && fname != _fname) { + if (!_fname.empty()) + Message::mstream() << '\n'; + Message::mstream(false, Message::MC_STATE) << "tracing glyphs of " << fname.substr(0, fname.length()-3) << '\n'; + _fname = fname; + } + } + + private: + std::string _fname; + bool _sfmsg, _autonl; +}; + + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GraphicPath.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GraphicPath.h new file mode 100644 index 00000000000..d496cf1bfa3 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/GraphicPath.h @@ -0,0 +1,339 @@ +/************************************************************************* +** GraphicPath.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef GRAPHICPATH_H +#define GRAPHICPATH_H + +#include +#include +#include +#include "BoundingBox.h" +#include "Matrix.h" +#include "Pair.h" + + +template +class GraphicPath +{ + public: + typedef Pair Point; + + struct Command { + enum Type {MOVETO, LINETO, CONICTO, CUBICTO, CLOSEPATH}; + + Command (Type t) : type(t) {} + + Command (Type t, const Point &p) : type(t) { + params[0] = p; + } + + Command (Type t, const Point &p1, const Point &p2) : type(t) { + params[0] = p1; + params[1] = p2; + } + + Command (Type t, const Point &p1, const Point &p2, const Point &p3) : type(t) { + params[0] = p1; + params[1] = p2; + params[2] = p3; + } + + int numParams () const { + switch (type) { + case CLOSEPATH : return 0; + case MOVETO : + case LINETO : return 1; + case CONICTO : return 2; + case CUBICTO : return 3; + } + return 0; + } + + void transform (const Matrix &matrix) { + for (int i=0; i < numParams(); i++) + params[i] = matrix * params[i]; + } + + Type type; + Point params[3]; + }; + + struct Actions + { + virtual ~Actions () {} + virtual void moveto (const Point &p) {} + virtual void lineto (const Point &p) {} + virtual void hlineto (const T &y) {} + virtual void vlineto (const T &x) {} + virtual void sconicto (const Point &p) {} + virtual void conicto (const Point &p1, const Point &p2) {} + virtual void scubicto (const Point &p1, const Point &p2) {} + virtual void cubicto (const Point &p1, const Point &p2, const Point &p3) {} + virtual void closepath () {} + virtual void draw (char cmd, const Point *points, int n) {} + virtual bool quit () {return false;} + }; + + typedef typename std::vector::iterator Iterator; + typedef typename std::vector::const_iterator ConstIterator; + typedef typename std::vector::const_reverse_iterator ConstRevIterator; + + public: + void newpath () { + _commands.clear(); + } + + /// Returns true if path is empty (there is nothing to draw) + bool empty () const { + return _commands.empty(); + } + + + /// Returns the number of path commands used to describe the path. + size_t size () const { + return _commands.size(); + } + + void moveto (const T &x, const T &y) { + moveto(Point(x, y)); + } + + void moveto (const Point &p) { + // avoid sequences of several MOVETOs; always use latest + if (_commands.empty() || _commands.back().type != Command::MOVETO) + _commands.push_back(Command(Command::MOVETO, p)); + else + _commands.back().params[0] = p; + } + + void lineto (const T &x, const T &y) { + lineto(Point(x, y)); + } + + void lineto (const Point &p) { + _commands.push_back(Command(Command::LINETO, p)); + } + + void conicto (const T &x1, const T &y1, const T &x2, const T &y2) { + conicto(Point(x1, y1), Point(x2, y2)); + } + + void conicto (const Point &p1, const Point &p2) { + _commands.push_back(Command(Command::CONICTO, p1, p2)); + } + + void cubicto (const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3) { + cubicto(Point(x1, y1), Point(x2, y2), Point(x3, y3)); + } + + void cubicto (const Point &p1, const Point &p2, const Point &p3) { + _commands.push_back(Command(Command::CUBICTO, p1, p2, p3)); + } + + void closepath () { + _commands.push_back(Command(Command::CLOSEPATH)); + } + + + const std::vector& commands () const { + return _commands; + } + + + /** Detects all open subpaths and closes them by adding a closePath command. + * Most font formats only support closed outline paths so there are no explicit closePath statements + * in the glyph's outline description. All open paths are automatically closed by the renderer. + * This method detects all open paths and adds the missing closePath statement. */ + void closeOpenSubPaths () { + Command *prevCommand = 0; + FORALL(_commands, Iterator, it) { + if (it->type == Command::MOVETO && prevCommand && prevCommand->type != Command::CLOSEPATH) { + prevCommand = &(*it); + it = _commands.insert(it, Command(Command::CLOSEPATH))+1; +// ++it; // skip inserted closePath command in next iteration step + } + else + prevCommand = &(*it); + } + if (!_commands.empty() && _commands.back().type != Command::CLOSEPATH) + closepath(); + } + + + /** Writes the path data as SVG path drawing command to a given output stream. + * @param[in] os output stream used to write the SVG commands to + * @param[in] sx horizontal scale factor + * @param[in] sy vertical scale factor + * @param[in] dx horizontal translation in TeX point units + * @param[in] sy vertical translation in TeX point units */ + void writeSVG (std::ostream &os, double sx=1.0, double sy=1.0, double dx=0.0, double dy=0.0) const { + struct WriteActions : Actions { + WriteActions (std::ostream &os, double sx, double sy, double dx, double dy) + : _os(os), _sx(sx), _sy(sy), _dx(dx), _dy(dy) {} + + void draw (char cmd, const Point *points, int n) { + _os << cmd; + switch (cmd) { + case 'H': _os << _sx*points->x()+_dx; break; + case 'V': _os << _sy*points->y()+_dy; break; + default : + for (int i=0; i < n; i++) { + if (i > 0) + _os << ' '; + _os << _sx*points[i].x()+_dx << ' ' << _sy*points[i].y()+_dy; + } + } + } + std::ostream &_os; + double _sx, _sy, _dx, _dy; + } actions(os, sx, sy, dx, dy); + iterate(actions, true); + } + + + /** Computes the bounding box of the current path. + * @param[out] bbox the computed bounding box */ + void computeBBox (BoundingBox &bbox) const { + struct BBoxActions : Actions { + BBoxActions (BoundingBox &bb) : bbox(bb) {} + void moveto (const Point &p) {bbox.embed(p);} + void lineto (const Point &p) {bbox.embed(p);} + void conicto (const Point &p1, const Point &p2) {bbox.embed(p1); bbox.embed(p2);} + void cubicto (const Point &p1, const Point &p2, const Point &p3) {bbox.embed(p1); bbox.embed(p2); bbox.embed(p3);} + BoundingBox &bbox; + } actions(bbox); + iterate(actions, false); + } + + + /** Checks whether the current path describes a dot/point only (with no extent). + * @param[out] p coordinates of the point if path describes a dot + * @return true if path is a dot/point */ + bool isDot (Point &p) const { + struct DotActions : Actions { + DotActions () : differs(false) {} + void moveto (const Point &p) {point = p;} + void lineto (const Point &p) {differs = (p != point);} + void conicto (const Point &p1, const Point &p2) {differs = (point != p1 || point != p2);} + void cubicto (const Point &p1, const Point &p2, const Point &p3) {differs = (point != p1 || point != p2 || point != p3);} + bool quit () {return differs;} + Point point; + bool differs; + } actions; + iterate(actions, false); + p = actions.point; + return !actions.differs; + } + + + /** Transforms the path according to a given Matrix. + * @param[in] matrix Matrix describing the affine transformation */ + void transform (const Matrix &matrix) { + FORALL(_commands, Iterator, it) + it->transform(matrix); + } + + void iterate (Actions &actions, bool optimize) const; + + private: + std::vector _commands; +}; + + +/** Iterates over all commands defining this path and calls the corresponding template methods. + * In the case of successive bezier curve sequences, control points or tangent slopes are often + * identical so that the path description contains redundant information. SVG provides shorthand + * curve commands that require less parameters. If 'optimize' is true, this method detects such + * command sequences. + * @param[in] actions template methods called by each iteration step + * @param[in] optimize if true, shorthand drawing commands (sconicto, scubicto,...) are considered */ +template +void GraphicPath::iterate (Actions &actions, bool optimize) const { + ConstIterator prev = _commands.end(); // pointer to preceding command + Point fp; // first point of current path + Point cp; // current point + Point pstore[2]; + for (ConstIterator it=_commands.begin(); it != _commands.end() && !actions.quit(); ++it) { + const Point *params = it->params; + switch (it->type) { + case Command::MOVETO: + actions.moveto(params[0]); + actions.draw('M', params, 1); + fp = params[0]; + break; + case Command::LINETO: + if (optimize) { + if (cp.x() == params[0].x()) { + actions.vlineto(params[0].y()); + actions.draw('V', params, 1); + } + else if (cp.y() == params[0].y()) { + actions.hlineto(params[0].x()); + actions.draw('H', params, 1); + } + else { + actions.lineto(params[0]); + actions.draw('L', params, 1); + } + } + else { + actions.lineto(params[0]); + actions.draw('L', params, 1); + } + break; + case Command::CONICTO: + if (optimize && prev != _commands.end() && prev->type == Command::CONICTO && params[0] == pstore[1]*T(2)-pstore[0]) { + actions.sconicto(params[1]); + actions.draw('T', params+1, 1); + } + else { + actions.conicto(params[0], params[1]); + actions.draw('Q', params, 2); + } + pstore[0] = params[0]; // store control point and + pstore[1] = params[1]; // curve endpoint + break; + case Command::CUBICTO: + // is first control point reflection of preceding second control point? + if (optimize && prev != _commands.end() && prev->type == Command::CUBICTO && params[0] == pstore[1]*T(2)-pstore[0]) { + actions.scubicto(params[1], params[2]); + actions.draw('S', params+1, 2); + } + else { + actions.cubicto(params[0], params[1], params[2]); + actions.draw('C', params, 3); + } + pstore[0] = params[1]; // store second control point and + pstore[1] = params[2]; // curve endpoint + break; + case Command::CLOSEPATH: + actions.closepath(); + actions.draw('Z', params, 0); + cp = fp; + } + // update current point + const int np = it->numParams(); + if (np > 0) + cp = it->params[np-1]; + prev = it; + } +} + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputBuffer.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputBuffer.cpp new file mode 100644 index 00000000000..f5e7125f80b --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputBuffer.cpp @@ -0,0 +1,137 @@ +/************************************************************************* +** InputBuffer.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "InputBuffer.h" + +using namespace std; + + +StreamInputBuffer::StreamInputBuffer (istream &is, unsigned bufsize) + : _is(is), _bufsize(bufsize), _buf1(new UInt8[_bufsize]), _buf2(new UInt8[_bufsize]), _bufptr(_buf1) +{ + _size1 = fillBuffer(_buf1); + _size2 = fillBuffer(_buf2); +} + + +StreamInputBuffer::~StreamInputBuffer () { + delete [] _buf1; + delete [] _buf2; +} + + +int StreamInputBuffer::get () { + if (pos() == _size1) { + if (_size2 == 0) + return -1; + swap(_buf1, _buf2); + _size1 = _size2; + _bufptr = _buf1; + _size2 = fillBuffer(_buf2); + } + UInt8 c = *_bufptr++; + return c; +} + + +/** Returns the next character to be read without skipping it. + * Same as peek(0). */ +int StreamInputBuffer::peek () const { + if (pos() < _size1) + return *_bufptr; + return _size2 > 0 ? *_buf2 : -1; +} + + +/** Returns the n-th next character without skipping it. */ +int StreamInputBuffer::peek (unsigned n) const { + if (pos()+n < _size1) + return *(_bufptr+n); + if (pos()+n < _size1+_size2) + return *(_buf2 + pos()+n-_size1); + return -1; +} + + +/** Fills the buffer by reading a sequence of characters from the assigned + * input stream. + * @param[in] buf pointer to character buffer to be filled + * @return number of characters read */ +int StreamInputBuffer::fillBuffer (UInt8 *buf) { + if (_is && !_is.eof()) { + _is.read((char*)buf, _bufsize); + return _is.gcount(); + } + return 0; +} + +/////////////////////////////////////////////// + +SplittedCharInputBuffer::SplittedCharInputBuffer (const char *buf1, unsigned s1, const char *buf2, unsigned s2) { + _buf[0] = buf1; + _buf[1] = buf2; + _size[0] = buf1 ? s1 : 0; + _size[1] = buf2 ? s2 : 0; + _index = _size[0] ? 0 : 1; +} + + +int SplittedCharInputBuffer::get () { + if (_size[_index] == 0) + return -1; + int ret = *_buf[_index]++; + _size[_index]--; + if (_index == 0 && _size[0] == 0) + _index++; + return ret; +} + + +int SplittedCharInputBuffer::peek () const { + return _size[_index] ? *_buf[_index] : -1; +} + + +int SplittedCharInputBuffer::peek (unsigned n) const { + if (n < _size[_index]) + return _buf[_index][n]; + n -= _size[_index]; + if (_index == 0 && n < _size[1]) + return _buf[1][n]; + return -1; +} + +/////////////////////////////////////////////// + + +int TextStreamInputBuffer::get () { + int c = StreamInputBuffer::get(); + if (c == '\n') { + _line++; + _col = 1; + } + else + _col++; + return c; +} + + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputBuffer.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputBuffer.h new file mode 100644 index 00000000000..910f66429e9 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputBuffer.h @@ -0,0 +1,145 @@ +/************************************************************************* +** InputBuffer.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef INPUTBUFFER_H +#define INPUTBUFFER_H + +#include +#include +#include +#include +#include +#include "types.h" + +struct InputBuffer +{ + virtual ~InputBuffer () {} + virtual int get () =0; + virtual int peek () const =0; + virtual int peek (unsigned n) const =0; + virtual bool eof () const =0; + virtual void invalidate () =0; +}; + + +class StreamInputBuffer : public InputBuffer +{ + public: + StreamInputBuffer (std::istream &is, unsigned bufsize=1024); + ~StreamInputBuffer (); + int get (); + int peek () const; + int peek (unsigned n) const; + bool eof () const {return pos() == _size1 && _size2 == 0;} + void invalidate () {_bufptr = _buf1+_size1; _size2 = 0;} + + protected: + int fillBuffer (UInt8 *buf); + unsigned pos () const {return _bufptr-_buf1;} + + private: + std::istream &_is; + const unsigned _bufsize; ///< maximal number of bytes each buffer can hold + UInt8 *_buf1; ///< pointer to first buffer + UInt8 *_buf2; ///< pointer to second buffer + unsigned _size1; ///< number of bytes in buffer 1 + unsigned _size2; ///< number of bytes in buffer 2 + UInt8 *_bufptr; ///< pointer to next byte to read +}; + + +class StringInputBuffer : public InputBuffer +{ + public: + StringInputBuffer (const std::string &str) : _str(str), _pos(0) {} + int get () {return _pos < _str.length() ? _str[_pos++] : -1;} + int peek () const {return _pos < _str.length() ? _str[_pos] : -1;} + int peek (unsigned n) const {return _pos+n < _str.length() ? _str[_pos+n] : -1;} + bool eof () const {return _pos >= _str.length();} + void invalidate () {_pos = _str.length();} + + private: + const std::string &_str; + unsigned _pos; +}; + + +class CharInputBuffer : public InputBuffer +{ + public: + CharInputBuffer (const char *buf, unsigned size) : _pos(buf), _size(buf ? size : 0) {} + + int get () { + if (_size <= 0) + return -1; + else { + _size--; + return *_pos++; + } + } + + + void assign (const char *buf, unsigned size) { + _pos = buf; + _size = size; + } + + void assign (const char *buf) {assign(buf, std::strlen(buf));} + int peek () const {return _size > 0 ? *_pos : -1;} + int peek (unsigned n) const {return _size >= n ? _pos[n] : -1;} + bool eof () const {return _size <= 0;} + void invalidate () {_size = 0;} + + private: + const char *_pos; + unsigned _size; +}; + + +class SplittedCharInputBuffer : public InputBuffer +{ + public: + SplittedCharInputBuffer (const char *buf1, unsigned s1, const char *buf2, unsigned s2); + int get (); + int peek () const; + int peek (unsigned n) const; + bool eof () const {return _size[_index] == 0;} + void invalidate () {_size[_index] = 0;} + + private: + const char *_buf[2]; + unsigned _size[2]; + int _index; +}; + + +class TextStreamInputBuffer : public StreamInputBuffer +{ + public: + TextStreamInputBuffer (std::istream &is) : StreamInputBuffer(is), _line(1), _col(1) {} + int get (); + int line () const {return _line;} + int col () const {return _col;} + + private: + int _line, _col; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputReader.cpp new file mode 100644 index 00000000000..76652da26a8 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputReader.cpp @@ -0,0 +1,279 @@ +/************************************************************************* +** InputReader.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "InputReader.h" + +using namespace std; + + +/** Skips n characters. */ +void InputReader::skip (unsigned n) { + while (n-- > 0) + get(); +} + + +/** Moves the buffer pointer to the next non-space character. A following call + * of get() returns this character. */ +void InputReader::skipSpace () { + while (isspace(peek())) + get(); +} + + +/** Tries to find a given string and skips all characters preceding that string. + * @param[in] s string to look for (must not be longer than the maximal buffer size) + * @param[in] consume if true, the buffer pointer is moved to the first charater following string s + * @return true if s was found */ +bool InputReader::skipUntil (const char *s, bool consume) { + bool found = false; + while (!eof() && !(found = check(s, consume))) + get(); + return found; +} + + +/** Checks if the next characters to be read match a given string. + * @param[in] s string to be matched + * @param[in] consume if true, the characters of the matched string are skipped + * @return true if s matches */ +bool InputReader::check (const char *s, bool consume) { + unsigned count = 0; + for (const char *p=s; *p; p++) { + if (peek(count++) != *p) + return false; + } + if (consume) + skip(count); + return true; +} + + +int InputReader::compare (const char *s, bool consume) { + unsigned count = 0; + for (const char *p=s; *p; p++) { + int c = peek(count++); + if (c != *p) + return *p < c ? -1 : 1; + } + if (consume) + skip(count); + return 0; +} + + +/** Reads an integer from the buffer. All characters that are part of + * the read integer constant are skipped. If this function returns false, + * the buffer pointer points to the same position as before the function call. + * @param[out] val contains the read integer value on success + * @param[in] accept_sign if false, only positive integers (without sign) are accepted + * @return true if integer could be read */ +bool InputReader::parseInt (int &val, bool accept_sign) { + val = 0; + int fac=1; + char sign; // explicitly given sign + if (accept_sign && ((sign = peek()) == '+' || sign == '-')) { + if (isdigit(peek(1))) { + get(); // skip sign + if (sign == '-') + fac = -1; + } + else + return false; + } + else if (!isdigit(peek())) + return false; + + while (isdigit(peek())) + val = val*10 + (get()-'0'); + val *= fac; + return true; +} + + +bool InputReader::parseUInt (unsigned &val) { + val = 0; + if (!isdigit(peek())) + return false; + while (isdigit(peek())) + val = val*10 + (get()-'0'); + return true; +} + + +bool InputReader::parseInt (int base, int &val) { + if (base < 2 || base > 32) + return false; + + const char *digits = "0123456789abcdefghijklmnopqrstuvwxyz"; + const char maxdigit = digits[base-1]; + char c; + if (!isalnum(c = tolower(peek())) || c > maxdigit) + return false; + + val = 0; + while (isalnum(c = tolower(peek())) && c <= maxdigit) { + get(); + int digit = c - (c <= '9' ? '0' : 'a'-10); + val = val*base + digit; + } + return true; +} + + +/** Reads a double from the buffer. All characters that are part of + * the read double constant are skipped. If this function returns false, + * the buffer pointer points to the same position as before the function call. + * @param[out] val contains the read double value on success + * @return number details: 0=no number, 'i'=integer, 'f'=floating point number */ +char InputReader::parseDouble (double &val) { + int fac=1; + int int_part=0; + bool is_float = false; + if (parseInt(int_part)) { // match [+-]?[0-9]+\.? + if (peek() == '.') { + get(); + is_float = true; + } + if (int_part < 0) { + fac = -1; + int_part = -int_part; + } + } + else { // match [+-]?\. + char sign; // explicitly given sign + if ((sign = peek()) == '+' || sign == '-') { // match [+-]?\.[0-9] + if (peek(1) != '.' || !isdigit(peek(2))) + return 0; + if (sign == '-') + fac = -1; + skip(2); // skip sign and dot + } + else if (peek() == '.' && isdigit(peek(1))) + get(); + else + return 0; + is_float = true; + } + // parse fractional part + double frac_part=0.0; + for (double u=10; isdigit(peek()); u*=10) + frac_part += (get()-'0')/u; + val = (int_part + frac_part) * fac; + // parse exponent + char c; + if (tolower(peek()) == 'e' && (isdigit(c=peek(1)) || ((c == '+' || c == '-') && isdigit(peek(2))))) { + get(); // skip 'e' + int exp; + parseInt(exp); + val *= pow(10.0, exp); + is_float = true; + } + return is_float ? 'f' : 'i'; +} + + +/** Reads an integer value from the buffer. If no valid integer constant + * could be found at the current position 0 is returned. */ +int InputReader::getInt () { + skipSpace(); + int val; + return parseInt(val) ? val : 0; +} + + +/** Reads an double value from the buffer. If no valid double constant + * could be found at the current position 0 is returned. */ +double InputReader::getDouble () { + skipSpace(); + double val; + return parseDouble(val) ? val : 0.0; +} + + +string InputReader::getWord () { + string ret; + skipSpace(); + while (isalpha(peek())) + ret += get(); + return ret; +} + + +char InputReader::getPunct () { + skipSpace(); + if (ispunct(peek())) + return get(); + return 0; +} + + +string InputReader::getString (char quotechar) { + string ret; + skipSpace(); + if (quotechar == 0) { + while (!eof() && !isspace(peek()) && isprint(peek())) + ret += get(); + } + else if (peek() == quotechar) { + get(); + while (!eof() && peek() != quotechar) + ret += get(); + get(); + } + return ret; +} + + +int InputReader::parseAttributes (map &attr) { + bool ready=false; + while (!eof() && !ready) { + string key; + skipSpace(); + while (isalnum(peek())) + key += get(); + skipSpace(); + if (peek() == '=') { + get(); + skipSpace(); + string val = getString(); + attr[key] = val; + } + else + ready = true; + } + return attr.size(); +} + +////////////////////////////////////////// + + +int StreamInputReader::peek (unsigned n) const { + if (n == 0) + return peek(); + vector chars(n); + _is.read(&chars[0], n); + int ret = peek(); + for (int i=n-1; i >= 0; i--) + _is.putback(chars[i]); + return ret; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputReader.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputReader.h new file mode 100644 index 00000000000..0e3d23f5eb0 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/InputReader.h @@ -0,0 +1,85 @@ +/************************************************************************* +** InputReader.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef INPUTREADER_H +#define INPUTREADER_H + +#include +#include +#include +#include "InputBuffer.h" + + +struct InputReader +{ + virtual ~InputReader() {} + virtual int get () =0; + virtual int peek () const =0; + virtual int peek (unsigned n) const =0; + virtual bool eof () const =0; + virtual bool check (char c) const {return peek() == c;} + virtual bool check (const char *s, bool consume=true); + virtual int compare (const char *s, bool consume=true); + virtual void skip (unsigned n); + virtual bool skipUntil (const char *s, bool consume=true); + virtual void skipSpace (); + virtual int getInt (); + virtual bool parseInt (int &val, bool accept_sign=true); + virtual bool parseInt (int base, int &val); + virtual bool parseUInt (unsigned &val); + virtual char parseDouble (double &val); + virtual double getDouble (); + virtual std::string getWord (); + virtual char getPunct (); + virtual std::string getString (char quotechar=0); + virtual int parseAttributes (std::map &attr); + virtual operator bool () const {return !eof();} +}; + + +class StreamInputReader : public InputReader +{ + public: + StreamInputReader (std::istream &is) : _is(is) {} + int get () {return _is.get();} + int peek () const {return _is.peek();} + int peek (unsigned n) const; + bool eof () const {return !_is || _is.eof();} + + private: + std::istream &_is; +}; + + +class BufferInputReader : public InputReader +{ + public: + BufferInputReader (InputBuffer &ib) : _ib(&ib) {} + void assign (InputBuffer &ib) {_ib = &ib;} + int get () {return _ib->get();} + int peek () const {return _ib->peek();} + int peek (unsigned n) const {return _ib->peek(n);} + bool eof () const {return _ib->eof();} + + private: + InputBuffer *_ib; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Length.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Length.cpp new file mode 100644 index 00000000000..7ae102df7c5 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Length.cpp @@ -0,0 +1,84 @@ +/************************************************************************* +** Length.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include "InputReader.h" +#include "Length.h" + +#define UNIT(c1,c2) ((c1 << 8)|c2) + +using namespace std; + + +void Length::set (const string &len) { + switch (len.length()) { + case 0: + _pt = 0; + break; + case 1: + if (isdigit(len[0])) + _pt = len[0] - '0'; + else + throw UnitException("invalid length: "+len); + break; + default: + istringstream iss(len); + StreamInputReader ir(iss); + double val; + if (!ir.parseDouble(val)) + throw UnitException("invalid length: "+len); + string unit = ir.getWord(); + set(val, unit); + } +} + + +void Length::set (double val, Unit unit) { + switch (unit) { + case PT: _pt = val; break; + case BP: _pt = val*72.27/72; break; + case IN: _pt = val*72.27; break; + case CM: _pt = val/2.54*72.27; break; + case MM: _pt = val/25.4*72.27; break; + case PC: _pt = val/12*72.27; break; + } +} + + +void Length::set (double val, string unitstr) { + if (unitstr.empty()) + unitstr = "pt"; + else if (unitstr.length() != 2) + throw UnitException("invalid length unit: "+unitstr); + + Unit unit; + switch (UNIT(unitstr[0], unitstr[1])) { + case UNIT('p','t'): unit = PT; break; + case UNIT('b','p'): unit = BP; break; + case UNIT('i','n'): unit = IN; break; + case UNIT('c','m'): unit = CM; break; + case UNIT('m','m'): unit = MM; break; + case UNIT('p','c'): unit = PC; break; + default: + throw UnitException("invalid length unit: "+unitstr); + } + set(val, unit); +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Length.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Length.h new file mode 100644 index 00000000000..c062af5b256 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Length.h @@ -0,0 +1,62 @@ +/************************************************************************* +** Length.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef LENGTH_H +#define LENGTH_H + +#include +#include "MessageException.h" + +#ifdef IN +#undef IN +#endif + +struct UnitException : MessageException +{ + UnitException (const std::string &msg) : MessageException(msg) {} +}; + + +class Length +{ + public: + enum Unit {PT, BP, CM, MM, IN, PC}; + + public: + Length () : _pt(0) {} + Length (double val, Unit unit=PT) {set(val, unit);} + Length (double val, const std::string &unit) {set(val, unit);} + Length (const std::string &len) {set(len);} + void set (double val, Unit unit); + void set (double val, std::string unit); + void set (const std::string &len); + + double pt () const {return _pt;} + double in () const {return _pt/72.27;} + double bp () const {return in()*72;} + double cm () const {return in()*2.54;} + double mm () const {return cm()*10;} + double pc () const {return in()*12;} + + private: + double _pt; // length in TeX point units +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Makefile.am new file mode 100644 index 00000000000..ce57433d0be --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Makefile.am @@ -0,0 +1,50 @@ +## This file is part of dvisvgm +## Copyright (C) 2005-2011 Martin Gieseking +## +## Process this file with automake. + +bin_PROGRAMS = dvisvgm +noinst_LIBRARIES = libdvisvgm.a + +dvisvgm_SOURCES = gzstream.h \ + dvisvgm.cpp gzstream.cpp + +dvisvgm_LDADD = $(noinst_LIBRARIES) @EXTRA_LIBS@ +dvisvgm_DEPENDENCIES = $(noinst_LIBRARIES) @EXTRA_LIBS@ + +libdvisvgm_a_SOURCES = Bitmap.h BoundingBox.h BgColorSpecialHandler.h Calculator.h CmdLineParserBase.h Color.h CRC32.h \ + ColorSpecialHandler.h CommandLine.h Directory.h DLLoader.h DVIActions.h DVIReader.h DvisvgmSpecialHandler.h DVIToSVG.h \ + DVIToSVGActions.h EmSpecialHandler.h FileFinder.h FilePath.h FileSystem.h Font.h FontCache.h FontEncoding.h FontEngine.h \ + FontManager.h FontMap.h GFReader.h GFTracer.h GFGlyphTracer.h Ghostscript.h Glyph.h GlyphTracerMessages.h \ + GraphicPath.h InputBuffer.h InputReader.h Length.h macros.h Matrix.h Message.h MessageException.h MetafontWrapper.h \ + PageRanges.h PageSize.h Pair.h Process.h PSInterpreter.h PsSpecialHandler.h SignalHandler.h SpecialActions.h \ + SpecialHandler.h SpecialManager.h StreamReader.h StreamWriter.h SVGTree.h System.h Terminal.h TpicSpecialHandler.h \ + TFM.h types.h VectorStream.h VFActions.h VFReader.h XMLDocTypeNode.h XMLDocument.h XMLNode.h XMLString.h \ + BgColorSpecialHandler.cpp Bitmap.cpp BoundingBox.cpp Calculator.cpp CmdLineParserBase.cpp Color.cpp \ + ColorSpecialHandler.cpp CommandLine.cpp CRC32.cpp Directory.cpp DLLoader.cpp DVIActions.cpp DVIReader.cpp \ + DvisvgmSpecialHandler.cpp DVIToSVG.cpp DVIToSVGActions.cpp EmSpecialHandler.cpp FileFinder.cpp FilePath.cpp \ + FileSystem.cpp Font.cpp FontCache.cpp FontEncoding.cpp FontEngine.cpp FontManager.cpp FontMap.cpp GFReader.cpp \ + GFGlyphTracer.cpp GFTracer.cpp Ghostscript.cpp InputBuffer.cpp InputReader.cpp Length.cpp Matrix.cpp Message.cpp \ + MetafontWrapper.cpp PageRanges.cpp PageSize.cpp Process.cpp PSInterpreter.cpp PsSpecialHandler.cpp SignalHandler.cpp \ + SpecialManager.cpp StreamReader.cpp StreamWriter.cpp SVGTree.cpp System.cpp Terminal.cpp TFM.cpp TpicSpecialHandler.cpp \ + VFReader.cpp XMLDocument.cpp XMLNode.cpp XMLString.cpp + +EXTRA_DIST = options.xml psdefs.psc iapi.h ierrors.h + +AM_CXXFLAGS = -Wall -Wnon-virtual-dtor + +# the commandline parser is generated from options.xml by opt2cpp +CommandLine.cpp: options.xml + if test -f opt2cpp.xsl; then \ + rm -f $@ $*.h; \ + xsltproc opt2cpp.xsl $<; \ + fi + +# Create a C string definition containing the PostScript routines psdefs.ps needed by class PSInterpreter +psdefs.psc: psdefs.ps + if test -f $<; then \ + ps2c PSInterpreter::PSDEFS $< >$@; \ + fi + +psdefs.ps: ; + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Makefile.in new file mode 100644 index 00000000000..95f21b43ab4 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Makefile.in @@ -0,0 +1,613 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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. + +@SET_MAKE@ + + +VPATH = @srcdir@ +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@ +target_triplet = @target@ +bin_PROGRAMS = dvisvgm$(EXEEXT) +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +ARFLAGS = cru +libdvisvgm_a_AR = $(AR) $(ARFLAGS) +libdvisvgm_a_LIBADD = +am_libdvisvgm_a_OBJECTS = BgColorSpecialHandler.$(OBJEXT) \ + Bitmap.$(OBJEXT) BoundingBox.$(OBJEXT) Calculator.$(OBJEXT) \ + CmdLineParserBase.$(OBJEXT) Color.$(OBJEXT) \ + ColorSpecialHandler.$(OBJEXT) CommandLine.$(OBJEXT) \ + CRC32.$(OBJEXT) Directory.$(OBJEXT) DLLoader.$(OBJEXT) \ + DVIActions.$(OBJEXT) DVIReader.$(OBJEXT) \ + DvisvgmSpecialHandler.$(OBJEXT) DVIToSVG.$(OBJEXT) \ + DVIToSVGActions.$(OBJEXT) EmSpecialHandler.$(OBJEXT) \ + FileFinder.$(OBJEXT) FilePath.$(OBJEXT) FileSystem.$(OBJEXT) \ + Font.$(OBJEXT) FontCache.$(OBJEXT) FontEncoding.$(OBJEXT) \ + FontEngine.$(OBJEXT) FontManager.$(OBJEXT) FontMap.$(OBJEXT) \ + GFReader.$(OBJEXT) GFGlyphTracer.$(OBJEXT) GFTracer.$(OBJEXT) \ + Ghostscript.$(OBJEXT) InputBuffer.$(OBJEXT) \ + InputReader.$(OBJEXT) Length.$(OBJEXT) Matrix.$(OBJEXT) \ + Message.$(OBJEXT) MetafontWrapper.$(OBJEXT) \ + PageRanges.$(OBJEXT) PageSize.$(OBJEXT) Process.$(OBJEXT) \ + PSInterpreter.$(OBJEXT) PsSpecialHandler.$(OBJEXT) \ + SignalHandler.$(OBJEXT) SpecialManager.$(OBJEXT) \ + StreamReader.$(OBJEXT) StreamWriter.$(OBJEXT) \ + SVGTree.$(OBJEXT) System.$(OBJEXT) Terminal.$(OBJEXT) \ + TFM.$(OBJEXT) TpicSpecialHandler.$(OBJEXT) VFReader.$(OBJEXT) \ + XMLDocument.$(OBJEXT) XMLNode.$(OBJEXT) XMLString.$(OBJEXT) +libdvisvgm_a_OBJECTS = $(am_libdvisvgm_a_OBJECTS) +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_dvisvgm_OBJECTS = dvisvgm.$(OBJEXT) gzstream.$(OBJEXT) +dvisvgm_OBJECTS = $(am_dvisvgm_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(libdvisvgm_a_SOURCES) $(dvisvgm_SOURCES) +DIST_SOURCES = $(libdvisvgm_a_SOURCES) $(dvisvgm_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_LDFLAGS = @AM_LDFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATE = @DATE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXTRA_LIBS = @EXTRA_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +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@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +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@ +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@ +sbindir = @sbindir@ +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@ +noinst_LIBRARIES = libdvisvgm.a +dvisvgm_SOURCES = gzstream.h \ + dvisvgm.cpp gzstream.cpp + +dvisvgm_LDADD = $(noinst_LIBRARIES) @EXTRA_LIBS@ +dvisvgm_DEPENDENCIES = $(noinst_LIBRARIES) @EXTRA_LIBS@ +libdvisvgm_a_SOURCES = Bitmap.h BoundingBox.h BgColorSpecialHandler.h Calculator.h CmdLineParserBase.h Color.h CRC32.h \ + ColorSpecialHandler.h CommandLine.h Directory.h DLLoader.h DVIActions.h DVIReader.h DvisvgmSpecialHandler.h DVIToSVG.h \ + DVIToSVGActions.h EmSpecialHandler.h FileFinder.h FilePath.h FileSystem.h Font.h FontCache.h FontEncoding.h FontEngine.h \ + FontManager.h FontMap.h GFReader.h GFTracer.h GFGlyphTracer.h Ghostscript.h Glyph.h GlyphTracerMessages.h \ + GraphicPath.h InputBuffer.h InputReader.h Length.h macros.h Matrix.h Message.h MessageException.h MetafontWrapper.h \ + PageRanges.h PageSize.h Pair.h Process.h PSInterpreter.h PsSpecialHandler.h SignalHandler.h SpecialActions.h \ + SpecialHandler.h SpecialManager.h StreamReader.h StreamWriter.h SVGTree.h System.h Terminal.h TpicSpecialHandler.h \ + TFM.h types.h VectorStream.h VFActions.h VFReader.h XMLDocTypeNode.h XMLDocument.h XMLNode.h XMLString.h \ + BgColorSpecialHandler.cpp Bitmap.cpp BoundingBox.cpp Calculator.cpp CmdLineParserBase.cpp Color.cpp \ + ColorSpecialHandler.cpp CommandLine.cpp CRC32.cpp Directory.cpp DLLoader.cpp DVIActions.cpp DVIReader.cpp \ + DvisvgmSpecialHandler.cpp DVIToSVG.cpp DVIToSVGActions.cpp EmSpecialHandler.cpp FileFinder.cpp FilePath.cpp \ + FileSystem.cpp Font.cpp FontCache.cpp FontEncoding.cpp FontEngine.cpp FontManager.cpp FontMap.cpp GFReader.cpp \ + GFGlyphTracer.cpp GFTracer.cpp Ghostscript.cpp InputBuffer.cpp InputReader.cpp Length.cpp Matrix.cpp Message.cpp \ + MetafontWrapper.cpp PageRanges.cpp PageSize.cpp Process.cpp PSInterpreter.cpp PsSpecialHandler.cpp SignalHandler.cpp \ + SpecialManager.cpp StreamReader.cpp StreamWriter.cpp SVGTree.cpp System.cpp Terminal.cpp TFM.cpp TpicSpecialHandler.cpp \ + VFReader.cpp XMLDocument.cpp XMLNode.cpp XMLString.cpp + +EXTRA_DIST = options.xml psdefs.psc iapi.h ierrors.h +AM_CXXFLAGS = -Wall -Wnon-virtual-dtor +all: all-am + +.SUFFIXES: +.SUFFIXES: .cpp .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 src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile +.PRECIOUS: 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__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + 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) +libdvisvgm.a: $(libdvisvgm_a_OBJECTS) $(libdvisvgm_a_DEPENDENCIES) + -rm -f libdvisvgm.a + $(libdvisvgm_a_AR) libdvisvgm.a $(libdvisvgm_a_OBJECTS) $(libdvisvgm_a_LIBADD) + $(RANLIB) libdvisvgm.a +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) +dvisvgm$(EXEEXT): $(dvisvgm_OBJECTS) $(dvisvgm_DEPENDENCIES) + @rm -f dvisvgm$(EXEEXT) + $(CXXLINK) $(dvisvgm_OBJECTS) $(dvisvgm_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BgColorSpecialHandler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Bitmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BoundingBox.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CRC32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Calculator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CmdLineParserBase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Color.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ColorSpecialHandler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CommandLine.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DLLoader.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DVIActions.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DVIReader.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DVIToSVG.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DVIToSVGActions.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Directory.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DvisvgmSpecialHandler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EmSpecialHandler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileFinder.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FilePath.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileSystem.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Font.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontCache.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontEncoding.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontEngine.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontManager.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontMap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GFGlyphTracer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GFReader.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GFTracer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Ghostscript.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InputBuffer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InputReader.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Length.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Matrix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Message.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MetafontWrapper.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSInterpreter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PageRanges.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PageSize.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Process.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PsSpecialHandler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SVGTree.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SignalHandler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SpecialManager.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamReader.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamWriter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/System.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TFM.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Terminal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TpicSpecialHandler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VFReader.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLDocument.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLNode.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLString.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvisvgm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gzstream.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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 +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(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) $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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-binPROGRAMS clean-generic clean-noinstLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -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-binPROGRAMS + +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 -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-noinstLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS 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 pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-binPROGRAMS + + +# the commandline parser is generated from options.xml by opt2cpp +CommandLine.cpp: options.xml + if test -f opt2cpp.xsl; then \ + rm -f $@ $*.h; \ + xsltproc opt2cpp.xsl $<; \ + fi + +# Create a C string definition containing the PostScript routines psdefs.ps needed by class PSInterpreter +psdefs.psc: psdefs.ps + if test -f $<; then \ + ps2c PSInterpreter::PSDEFS $< >$@; \ + fi + +psdefs.ps: ; + +# 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: diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Matrix.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Matrix.cpp new file mode 100644 index 00000000000..0e3dbc93024 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Matrix.cpp @@ -0,0 +1,410 @@ +/************************************************************************* +** Matrix.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include "Calculator.h" +#include "Matrix.h" + +using namespace std; + +static double deg2rad (double deg) { + const double PI = acos(-1.0); + return PI*deg/180.0; +} + + +static double round (double x, int n) { + double pow10 = pow(10.0, n); + return floor(x*pow10+0.5)/pow10; +} + + +/** Creates a diagonal matrix ((d,0,0),(0,d,0),(0,0,d)). + * @param[in] d value of diagonal elements */ +Matrix::Matrix (double d) { + for (int i=0; i < 3; i++) + for (int j=0; j < 3; j++) + values[i][j] = (i==j ? d : 0); +} + + +/** Creates the matrix ((v0,v1,v2),(v3,v4,v5),(v6,v7,v8)). + * Expects that array v consists of 'size' elements. If size is less than 9, the + * remaining matrix components will be set to those of the identity matrix. + * @param[in] v array containing the matrix components + * @param[in] size size of array v */ +Matrix::Matrix (double v[], unsigned size) { + set(v, size); +} + + +/** Creates the matrix ((v0,v1,v2),(v3,v4,v5),(v6,v7,v8)). + * If vector v has less than 9 elements, the remaining matrix components will be set to + * those of the identity matrix. + * @param[in] v array containing the matrix components */ +Matrix::Matrix (const std::vector &v) { + set(v); +} + + +Matrix::Matrix (const string &cmds, Calculator &calc) { + parse(cmds, calc); +} + + +Matrix& Matrix::set (double v[], unsigned size) { + size = min(size, 9u); + for (unsigned i=0; i < size; i++) + values[i/3][i%3] = v[i]; + for (unsigned i=size; i < 9; i++) + values[i/3][i%3] = (i%4 ? 0 : 1); + return *this; +} + + +Matrix& Matrix::set (const vector &v) { + unsigned size = min((unsigned)v.size(), 9u); + for (unsigned i=0; i < size; i++) + values[i/3][i%3] = v[i]; + for (unsigned i=size; i < 9; i++) + values[i/3][i%3] = (i%4 ? 0 : 1); + return *this; +} + + +Matrix& Matrix::translate (double tx, double ty) { + if (tx != 0 || ty != 0) { + TranslationMatrix t(tx, ty); + rmultiply(t); + } + return *this; +} + + +Matrix& Matrix::scale (double sx, double sy) { + if (sx != 1 || sy != 1) { + ScalingMatrix s(sx, sy); + rmultiply(s); + } + return *this; +} + + +/** Multiplies this matrix by ((cos d, -sin d, 0), (sin d, cos d, 0), (0,0,1)) that + * describes an anti-clockwise rotation by d degrees. + * @param[in] deg rotation angle in degrees */ +Matrix& Matrix::rotate (double deg) { + RotationMatrix r(deg); + rmultiply(r); + return *this; +} + + +Matrix& Matrix::xskew (double deg) { + double t = tan(deg2rad(deg)); + if (t != 0) { + double v[] = {1, t}; + Matrix t(v, 2); + rmultiply(t); + } + return *this; +} + + +Matrix& Matrix::yskew (double deg) { + double t = tan(deg2rad(deg)); + if (t != 0) { + double v[] = {1, 0, 0, t}; + Matrix t(v, 4); + rmultiply(t); + } + return *this; +} + + +Matrix& Matrix::flip (bool haxis, double a) { + double s = 1; + if (haxis) // mirror at horizontal axis? + s = -1; + double v[] = {-s, 0, (haxis ? 0 : 2*a), 0, s, (haxis ? 2*a : 0), 0, 0, 1}; + Matrix t(v); + rmultiply(t); + return *this; +} + + +/** Swaps rows and columns of the matrix. */ +Matrix& Matrix::transpose () { + for (int i=0; i < 3; i++) + for (int j=i+1; j < 3; j++) + swap(values[i][j], values[j][i]); + return *this; +} + + +/** Multiplies this matrix M with matrix tm (tm is the factor on the left side): M := tm * M */ +Matrix& Matrix::lmultiply (const Matrix &tm) { + Matrix ret; + for (int i=0; i < 3; i++) + for (int j=0; j < 3; j++) + for (int k=0; k < 3; k++) + ret.values[i][j] += values[i][k] * tm.values[k][j]; + return *this = ret; +} + + +/** Multiplies this matrix M with matrix tm (tm is the factor on the right side): M := M * tm */ +Matrix& Matrix::rmultiply (const Matrix &tm) { + Matrix ret; + for (int i=0; i < 3; i++) + for (int j=0; j < 3; j++) + for (int k=0; k < 3; k++) + ret.values[i][j] += tm.values[i][k] * values[k][j]; + return *this = ret; +} + + +DPair Matrix::operator * (const DPair &p) const { + double pp[] = {p.x(), p.y(), 1}; + double ret[]= {0, 0}; + for (int i=0; i < 2; i++) + for (int j=0; j < 3; j++) + ret[i] += values[i][j] * pp[j]; + return DPair(ret[0], ret[1]); +} + + +/** Returns true if this matrix equals. Checks equality by comparing the matrix components. */ +bool Matrix::operator == (const Matrix &m) const { + for (int i=0; i < 2; i++) + for (int j=0; j < 3; j++) + if (values[i][j] != m.values[i][j]) + return false; + return true; +} + + +/** Returns true if this matrix doesn't equal m. Checks inequality by comparing the matrix components. */ +bool Matrix::operator != (const Matrix &m) const { + for (int i=0; i < 2; i++) + for (int j=0; j < 3; j++) + if (values[i][j] != m.values[i][j]) + return true; + return false; +} + + +/** Returns true if this matrix is the identity matrix ((1,0,0),(0,1,0),(0,0,1)). */ +bool Matrix::isIdentity() const { + for (int i=0; i < 2; i++) + for (int j=0; j < 3; j++) { + const double &v = values[i][j]; + if ((i == j && v != 1) || (i != j && v != 0)) + return false; + } + return true; +} + + +/** Checks whether this matrix describes a plain translation (without any other transformations). + * If so, the parameters tx and ty are filled with the translation components. + * @param[out] tx horizontal translation + * @param[out] ty vertical translation + * @return true if matrix describes a pure translation */ +bool Matrix::isTranslation (double &tx, double &ty) const { + tx = values[0][2]; + ty = values[1][2]; + for (int i=0; i < 3; i++) + for (int j=0; j < 2; j++) { + const double &v = values[i][j]; + if ((i == j && v != 1) || (i != j && v != 0)) + return false; + } + return values[2][2] == 1; +} + + +/** Gets a parameter for the transformation command. + * @param[in] is parameter chars are read from this stream + * @param[in] calc parameters can be arithmetic expressions, so we need a calculator to evaluate them + * @param[in] def default value if parameter is optional + * @param[in] optional true if parameter is optional + * @param[in] leadingComma true if first non-blank must be a comma + * @return value of argument */ +static double getArgument (istream &is, Calculator &calc, double def, bool optional, bool leadingComma) { + while (isspace(is.peek())) + is.get(); + if (!optional && leadingComma && is.peek() != ',') + throw ParserException("',' expected"); + if (is.peek() == ',') { + is.get(); // skip comma + optional = false; // now we expect a parameter + } + string expr; + while (is && !isupper(is.peek()) && is.peek() != ',') + expr += is.get(); + if (expr.length() == 0) { + if (optional) + return def; + else + throw ParserException("parameter expected"); + } + return calc.eval(expr); +} + + +Matrix& Matrix::parse (istream &is, Calculator &calc) { + *this = Matrix(1); + while (is) { + while (isspace(is.peek())) + is.get(); + char cmd = is.get(); + switch (cmd) { + case 'T': { + double tx = getArgument(is, calc, 0, false, false); + double ty = getArgument(is, calc, 0, true, true); + translate(tx, ty); + break; + } + case 'S': { + double sx = getArgument(is, calc, 1, false, false); + double sy = getArgument(is, calc, sx, true, true ); + scale(sx, sy); + break; + } + case 'R': { + double a = getArgument(is, calc, 0, false, false); + double x = getArgument(is, calc, calc.getVariable("ux")+calc.getVariable("w")/2, true, true); + double y = getArgument(is, calc, calc.getVariable("uy")+calc.getVariable("h")/2, true, true); + translate(-x, -y); + rotate(a); + translate(x, y); + break; + } + case 'F': { + char c = is.get(); + if (c != 'H' && c != 'V') + throw ParserException("'H' or 'V' expected"); + double a = getArgument(is, calc, 0, false, false); + flip(c == 'H', a); + break; + } + case 'K': { + char c = is.get(); + if (c != 'X' && c != 'Y') + throw ParserException("transformation command 'K' must be followed by 'X' or 'Y'"); + double a = getArgument(is, calc, 0, false, false); + if (fabs(cos(deg2rad(a))) <= numeric_limits::epsilon()) { + ostringstream oss; + oss << "illegal skewing angle: " << a << " degrees"; + throw ParserException(oss.str()); + } + if (c == 'X') + xskew(a); + else + yskew(a); + break; + } + case 'M': { + double v[9]; + for (int i=0; i < 6; i++) + v[i] = getArgument(is, calc, i%4 ? 0 : 1, i!=0, i!=0); + // third row (0, 0, 1) + v[6] = v[7] = 0; + v[8] = 1; + Matrix tm(v); + rmultiply(tm); + break; + } + default: + ostringstream oss; + oss << "transformation command expected (found '" << cmd << "' instead)"; + throw ParserException(oss.str()); + } + } + return *this; +} + + +Matrix& Matrix::parse (const string &cmds, Calculator &calc) { + istringstream iss; + iss.str(cmds); + return parse(iss, calc); +} + + +/** Returns an SVG matrix expression that can be used in transform attributes. + * ((a,b,c),(d,e,f),(0,0,1)) => matrix(a d b e c f) */ +string Matrix::getSVG () const { + ostringstream oss; + oss << "matrix("; + for (int i=0; i < 3; i++) { + for (int j=0; j < 2; j++) { + if (i > 0 || j > 0) + oss << ' '; + oss << round(values[j][i], 3); + } + } + oss << ')'; + return oss.str(); +} + + +ostream& Matrix::write (ostream &os) const { + os << '('; + for (int i=0; i < 3; i++) { + os << '(' << values[i][0]; + for (int j=1; j < 3; j++) + os << ',' << values[i][j]; + os << ')'; + if (i < 2) + os << ','; + } + os << ')'; + return os; +} + + +////////////////////////////////////////////////////////////////// + + +TranslationMatrix::TranslationMatrix (double tx, double ty) { + double v[] = {1, 0, tx, 0, 1, ty}; + set(v, 6); +} + + +ScalingMatrix::ScalingMatrix (double sx, double sy) { + double v[] = {sx, 0, 0, 0, sy}; + set(v, 5); +} + + +RotationMatrix::RotationMatrix (double deg) { + double rad = deg2rad(deg); + double c = cos(rad); + double s = sin(rad); + double v[] = {c, -s, 0, s, c}; + set(v, 5); +} + + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Matrix.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Matrix.h new file mode 100644 index 00000000000..5c3b7442081 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Matrix.h @@ -0,0 +1,93 @@ +/************************************************************************* +** Matrix.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef MATRIX_H +#define MATRIX_H + +#include +#include +#include +#include "MessageException.h" +#include "Pair.h" + + +struct ParserException : public MessageException +{ + ParserException (const std::string &msg) : MessageException(msg) {} +}; + +class Calculator; + +class Matrix +{ + public: + Matrix (const std::string &cmds, Calculator &calc); + Matrix (double d=0); + Matrix (double v[], unsigned size=9); + Matrix (const std::vector &v); + Matrix& set (double v[], unsigned size); + Matrix& set (const std::vector &v); + Matrix& transpose (); + Matrix& parse (std::istream &is, Calculator &c); + Matrix& parse (const std::string &cmds, Calculator &c); + Matrix& lmultiply (const Matrix &tm); + Matrix& rmultiply (const Matrix &tm); + Matrix& translate (double tx, double ty); + Matrix& scale (double sx, double sy); + Matrix& rotate (double deg); + Matrix& xskew (double deg); + Matrix& yskew (double deg); + Matrix& flip (bool h, double a); + DPair operator * (const DPair &p) const; + bool operator == (const Matrix &m) const; + bool operator != (const Matrix &m) const; + bool isIdentity() const; + bool isTranslation (double &tx, double &ty) const; + std::string getSVG () const; + std::ostream& write (std::ostream &os) const; + + private: + double values[3][3]; // row x col +}; + + +struct TranslationMatrix : public Matrix +{ + TranslationMatrix (double tx, double ty); +}; + + +struct ScalingMatrix : public Matrix +{ + ScalingMatrix (double sx, double sy); +}; + + +struct RotationMatrix : public Matrix +{ + RotationMatrix (double deg); +}; + + +inline std::ostream& operator << (std::ostream &os, const Matrix &m) { + return m.write(os); +} + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Message.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Message.cpp new file mode 100644 index 00000000000..8ce0d3db236 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Message.cpp @@ -0,0 +1,259 @@ +/************************************************************************* +** Message.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include +#include +#include "Message.h" +#include "Terminal.h" + +using namespace std; + +MessageStream::MessageStream () : _os(0), _nl(false) { +} + + +MessageStream::MessageStream (std::ostream &os) + : _os(&os), _nl(true), _col(1), _indent(0) +{ + Terminal::init(os); +} + + +MessageStream::~MessageStream () { + if (_os && Message::COLORIZE) + Terminal::finish(*_os); +} + + +void MessageStream::putChar (const char c, ostream &os) { + switch (c) { + case '\r': + os << '\r'; + _nl = true; + _col = 1; + return; + case '\n': + if (!_nl) { + _col = 1; + _nl = true; + os << '\n'; + } + return; + default: + if (_nl) { + os << string(_indent, ' '); + _col += _indent; + } + else { + const int cols = Terminal::columns(); + if (cols > 0 && _col >= cols) { + os << '\n' << string(_indent, ' '); + _col = _indent+1; + } + else + _col++; + } + _nl = false; + if (!_nl || c != '\n') + os << c; + } +} + + +MessageStream& MessageStream::operator << (const char *str) { + if (_os) { + const int len = strlen(str); + const int cols = Terminal::columns(); + if (cols > 0 && _col+len > cols && _indent+len <= cols) + putChar('\n', *_os); + for (const char *p=str; *p; ++p) + putChar(*p, *_os); + } + return *this; +} + + +MessageStream& MessageStream::operator << (const char &c) { + if (_os) + putChar(c, *_os); + return *this; +} + + +void MessageStream::indent (bool reset) { + if (reset) + _indent = 0; + _indent += 2; +} + + +void MessageStream::outdent (bool all) { + if (all) + _indent = 0; + else if (_indent > 0) + _indent -= 2; +} + + +void MessageStream::clearline () { + if (_os) { + int cols = Terminal::columns(); + *_os << '\r' << string(cols ? cols-1 : 79, ' ') << '\r'; + _nl = true; + _col = 1; + } +} + +static MessageStream nullStream; +static MessageStream messageStream(cerr); + + +////////////////////////////// + +// maximal verbosity +int Message::LEVEL = Message::MESSAGES | Message::WARNINGS | Message::ERRORS; +bool Message::COLORIZE = false; +bool Message::_initialized = false; +Message::Color Message::_classColors[9]; + + +/** Returns the stream for usual messages. */ +MessageStream& Message::mstream (bool prefix, MessageClass mclass) { + init(); + MessageStream *ms = (LEVEL & MESSAGES) ? &messageStream : &nullStream; + if (COLORIZE && ms && ms->os()) { + Terminal::fgcolor(_classColors[mclass].foreground, *ms->os()); + Terminal::bgcolor(_classColors[mclass].background, *ms->os()); + } + if (prefix) + *ms << "\nMESSAGE: "; + return *ms; +} + + +/** Returns the stream for warning messages. */ +MessageStream& Message::wstream (bool prefix) { + init(); + MessageStream *ms = (LEVEL & WARNINGS) ? &messageStream : &nullStream; + if (COLORIZE && ms && ms->os()) { + Terminal::fgcolor(_classColors[MC_WARNING].foreground, *ms->os()); + Terminal::bgcolor(_classColors[MC_WARNING].background, *ms->os()); + } + if (prefix) + *ms << "\nWARNING: "; + return *ms; +} + + +/** Returns the stream for error messages. */ +MessageStream& Message::estream (bool prefix) { + init(); + MessageStream *ms = (LEVEL & ERRORS) ? &messageStream : &nullStream; + if (COLORIZE && ms && ms->os()) { + Terminal::fgcolor(_classColors[MC_ERROR].foreground, *ms->os()); + Terminal::bgcolor(_classColors[MC_ERROR].background, *ms->os()); + } + if (prefix) + *ms << "\nERROR: "; + return *ms; +} + + +static bool colorchar2int (char colorchar, int *val) { + colorchar = tolower(colorchar); + if (colorchar >= '0' && colorchar <= '9') + *val = int(colorchar-'0'); + else if (colorchar >= 'a' && colorchar <= 'f') + *val = int(colorchar-'a'+10); + else if (colorchar == '*') + *val = -1; + else + return false; + return true; +} + + +/** Initializes the Message class. Sets the colors for each message set. + * The colors can be changed via environment variable DVISVGM_COLORS. Its + * value must be a sequence of color entries of the form gg:BF where the + * two-letter ID gg specifies a message set, B the hex digit of the + * background, and F the hex digit of the foreground/text color. + * Color codes: + * - 1: red, 2: green, 4: blue + * - 0-7: dark colors + * - 8-F: light colors + * - *: default color + * Example: num:01 sets page number messages to red on black background */ +void Message::init () { + if (_initialized || !Message::COLORIZE) + return; + + // set default message colors + _classColors[MC_ERROR] = Color(Terminal::RED, true); + _classColors[MC_WARNING] = Color(Terminal::YELLOW); + _classColors[MC_PAGE_NUMBER] = Color(Terminal::BLUE, true); + _classColors[MC_PAGE_SIZE] = Color(Terminal::MAGENTA); + _classColors[MC_PAGE_WRITTEN] = Color(Terminal::GREEN); + _classColors[MC_STATE] = Color(Terminal::CYAN); + _classColors[MC_TRACING] = Color(Terminal::BLUE); + _classColors[MC_PROGRESS] = Color(Terminal::MAGENTA); + + if (const char *color_str = getenv("DVISVGM_COLORS")) { + map classes; + classes["er"] = MC_ERROR; + classes["wn"] = MC_WARNING; + classes["pn"] = MC_PAGE_NUMBER; + classes["ps"] = MC_PAGE_SIZE; + classes["fw"] = MC_PAGE_WRITTEN; + classes["sm"] = MC_STATE; + classes["tr"] = MC_TRACING; + classes["pi"] = MC_PROGRESS; + const char *p=color_str; + + // skip leading whitespace + while (isspace(*p)) + ++p; + + // iterate over color assignments + while (strlen(p) >= 5) { + map::iterator it = classes.find(string(p, 2)); + if (it != classes.end() && p[2] == '=') { + int bgcolor, fgcolor; + if (colorchar2int(p[3], &bgcolor) && colorchar2int(p[4], &fgcolor)) { + _classColors[it->second].background = bgcolor; + _classColors[it->second].foreground = fgcolor; + } + } + p += 5; + + // skip trailing characters in a malformed entry + while (!isspace(*p) && *p != ':' && *p != ';') + ++p; + // skip separation characters + while (isspace(*p) || *p == ':' || *p == ';') + ++p; + } + } + _initialized = true; +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Message.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Message.h new file mode 100644 index 00000000000..cb6ff92a2d8 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Message.h @@ -0,0 +1,114 @@ +/************************************************************************* +** Message.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef MESSAGE_H +#define MESSAGE_H + +#include +#include +#include +#include +#include "Terminal.h" +#include "types.h" + + +class Message; + +class MessageStream +{ + friend class Message; + + public: + MessageStream (); + MessageStream (std::ostream &os); + ~MessageStream (); + + template + MessageStream& operator << (const T &obj) { + std::ostringstream oss; + oss << obj; + (*this) << oss.str(); + return *this; + } + + MessageStream& operator << (const char *str); + MessageStream& operator << (const char &c); + MessageStream& operator << (const std::string &str) {return (*this) << str.c_str();} + + void indent (int level) {_indent = std::max(0, level*2);} + void indent (bool reset=false); + void outdent (bool all=false); + void clearline (); + + protected: + void putChar (const char c, std::ostream &os); + std::ostream* os () {return _os;} + + private: + std::ostream *_os; + bool _nl; ///< true if previous character was a newline + int _col; ///< current terminal column + int _indent; ///< indentation width (number of columns/characters) +}; + + +class Message +{ + struct Color { + Color () : foreground(-1), background(-1) {} + Color (Int8 fgcolor) : foreground(fgcolor), background(-1) {} + Color (Int8 fgcolor, bool light) : foreground(fgcolor + (light ? 8 : 0)), background(-1) {} + Color (Int8 fgcolor, Int8 bgcolor) : foreground(fgcolor), background(bgcolor) {} + Int8 foreground; + Int8 background; + }; + + public: + enum MessageClass { + MC_ERROR, + MC_WARNING, + MC_MESSAGE, + MC_PAGE_NUMBER, + MC_PAGE_SIZE, + MC_PAGE_WRITTEN, + MC_STATE, + MC_TRACING, + MC_PROGRESS, + }; + + public: + static MessageStream& mstream (bool prefix=false, MessageClass mclass=MC_MESSAGE); + static MessageStream& estream (bool prefix=false); + static MessageStream& wstream (bool prefix=false); + + enum {ERRORS=1, WARNINGS=2, MESSAGES=4}; + static int LEVEL; + static bool COLORIZE; + + protected: + static void init (); + + + private: + static Color _classColors[]; + static bool _initialized; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/MessageException.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/MessageException.h new file mode 100644 index 00000000000..338c9daac9f --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/MessageException.h @@ -0,0 +1,39 @@ +/************************************************************************* +** MessageException.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef MESSAGEEXCEPTION_H +#define MESSAGEEXCEPTION_H + +#include +#include + + +class MessageException : public std::exception +{ + public: + MessageException (const std::string &msg) : message(msg) {} + virtual ~MessageException () throw() {} + const char* what () const throw() {return message.c_str();} + + private: + std::string message; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/MetafontWrapper.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/MetafontWrapper.cpp new file mode 100644 index 00000000000..fe41a5b34d1 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/MetafontWrapper.cpp @@ -0,0 +1,133 @@ +/************************************************************************* +** MetafontWrapper.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include +#include "FileSystem.h" +#include "FileFinder.h" +#include "Message.h" +#include "MetafontWrapper.h" +#include "Process.h" +#include "SignalHandler.h" +#include "macros.h" + +using namespace std; + + +MetafontWrapper::MetafontWrapper (const string &fname) : _fontname(fname) +{ +} + + +/** Calls Metafont and evaluates the logfile. If a gf file was successfully + * generated the dpi value is stripped from the filename + * (e.g. cmr10.600gf => cmr10.gf). This makes life easier... + * @param[in] mode Metafont mode, e.g. "ljfour" + * @param[in] mag magnification factor + * @return true on success */ +bool MetafontWrapper::call (const string &mode, double mag) { + if (!FileFinder::lookup(_fontname+".mf")) + return false; // mf file not available => no need to call the "slow" Metafont + FileSystem::remove(_fontname+".gf"); + +#ifdef __WIN32__ +#ifdef TEXLIVEWIN32 + const char *mfname = "mf-nowin.exe"; +#else + const char *mfname = "mf.exe"; +#endif + const char *cmd = FileFinder::lookup(mfname, false); + if (!cmd) { + Message::estream(true) << "can't run Metafont (" << mfname << " not found)\n"; + return false; + } +#else + const char *cmd = "mf"; +#endif + ostringstream oss; + oss << "\"\\mode=" << mode << ";" + "mag:=" << mag << ";" + "batchmode;" + "input " << _fontname << "\""; + Message::mstream(false, Message::MC_STATE) << "\nrunning Metafont for " << _fontname << '\n'; + Process mf_process(cmd, oss.str().c_str()); + mf_process.run(); + + // try to read Metafont's logfile and get name of created GF file + ifstream ifs((_fontname+".log").c_str()); + if (ifs) { + char buf[128]; + while (ifs) { + ifs.getline(buf, 128); + string line = buf; + if (line.substr(0, 15) == "! Interruption.") + SignalHandler::instance().trigger(true); + if (line.substr(0, 17) == "Output written on") { + size_t pos = line.find("gf ", 18+_fontname.length()); + if (pos != string::npos) { + string gfname = line.substr(18, pos-16); // GF filename found + FileSystem::rename(gfname, _fontname+".gf"); + } + break; + } + } + } + ifstream gf((_fontname+".gf").c_str()); + return gf; +} + + +/** Calls Metafont if output files (tfm and gf) don't already exist. + * @param[in] mode Metafont mode to be used (e.g. 'ljfour') + * @param[in] mag magnification factor + * @return true on success */ +bool MetafontWrapper::make (const string &mode, double mag) { + ifstream tfm((_fontname+".tfm").c_str()); + ifstream gf((_fontname+".gf").c_str()); + if (gf && tfm) // @@ distinguish between gf and tfm + return true; + return call(mode, mag); +} + + +bool MetafontWrapper::success () const { + ifstream tfm((_fontname+".tfm").c_str()); + ifstream gf((_fontname+".gf").c_str()); + return tfm && gf; +} + + +/** Remove all files created by a Metafont call (tfm, gf, log). + * @param[in] keepGF if true, GF files won't be removed */ +void MetafontWrapper::removeOutputFiles (bool keepGF) { + removeOutputFiles(_fontname, keepGF); +} + + +/** Remove all files created by a Metafont call for a given font (tfm, gf, log). + * @param[in] fontname name of font whose temporary files should be removed + * @param[in] keepGF if true, GF files will be kept */ +void MetafontWrapper::removeOutputFiles (const string &fontname, bool keepGF) { + const char *ext[] = {"gf", "tfm", "log", 0}; + for (const char **p = keepGF ? ext+2 : ext; *p; ++p) + FileSystem::remove(fontname + "." + *p); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/MetafontWrapper.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/MetafontWrapper.h new file mode 100644 index 00000000000..c042fef3c89 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/MetafontWrapper.h @@ -0,0 +1,43 @@ +/************************************************************************* +** MetafontWrapper.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef METAFONTWRAPPER_H +#define METAFONTWRAPPER_H + +#include + + +class FileFinder; + +class MetafontWrapper +{ + public: + MetafontWrapper (const std::string &fontname); + bool call (const std::string &mode, double mag); + bool make (const std::string &mode, double mag); + bool success () const; + void removeOutputFiles (bool keepGF=false); + static void removeOutputFiles (const std::string &fontname, bool keepGF=false); + + private: + std::string _fontname; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PSInterpreter.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PSInterpreter.cpp new file mode 100644 index 00000000000..1f741cb212b --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PSInterpreter.cpp @@ -0,0 +1,305 @@ +/************************************************************************* +** PSInterpreter.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include +#include "FileFinder.h" +#include "InputReader.h" +#include "Message.h" +#include "PSInterpreter.h" +#include "psdefs.psc" +#include "SignalHandler.h" + +using namespace std; + + +const char *PSInterpreter::GSARGS[] = { + "gs", // dummy name + "-q", // be quiet, suppress gs banner + "-dSAFER", // disallow writing of files + "-dNODISPLAY", // we don't need a display device + "-dNOPAUSE", // keep going + "-dWRITESYSTEMDICT", // leave systemdict writable as some operators must be replaced + "-dNOPROMPT", +// "-dNOBIND", +}; + + +/** Constructs a new PSInterpreter object. + * @param[in] actions template methods to be executed after recognizing the corresponding PS operator. */ +PSInterpreter::PSInterpreter (PSActions *actions) + : _mode(PS_NONE), _actions(actions), _inError(false), _initialized(false) +{ +} + + +void PSInterpreter::init () { + if (!_initialized) { + _gs.init(sizeof(GSARGS)/sizeof(char*), GSARGS, this); + _gs.set_stdio(input, output, error); + _initialized = true; + // Before executing any random PS code redefine some operators and run + // initializing PS code. This cannot be done in the constructor because we + // need the completely initialized PSInterpreter object here. + execute(PSDEFS); + } +} + + +PSActions* PSInterpreter::setActions (PSActions *actions) { + PSActions *old_actions = _actions; + _actions = actions; + return old_actions; +} + + +/** Executes a chunk of PostScript code. + * @param[in] str buffer containing the code + * @param[in] len number of characters in buffer + * @param[in] flush If true, a final 'flush' is sent which forces the + * output buffer to be written immediately.*/ +void PSInterpreter::execute (const char *str, size_t len, bool flush) { + init(); + if (_mode != PS_QUIT) { + int status; + if (_mode == PS_NONE) { + _gs.run_string_begin(0, &status); + _mode = PS_RUNNING; + } + const char *p=str; + // feed Ghostscript with code chunks that are not larger than 64KB + // => see documentation of gsapi_run_string_foo() + while (PS_RUNNING && len > 0) { + SignalHandler::instance().check(); + size_t chunksize = min(len, (size_t)0xffff); + _gs.run_string_continue(p, chunksize, 0, &status); + p += chunksize; + len -= chunksize; + if (status == -101) { // e_Quit + _gs.exit(); + _mode = PS_QUIT; + } + else if (status <= -100) { + _gs.exit(); + _mode = PS_QUIT; + throw PSException("fatal PostScript error"); + } + } + if (flush) { + // force writing contents of output buffer + _gs.run_string_continue("\nflush ", 7, 0, &status); + } + } +} + + +/** Executes a chunk of PostScript code read from a stream. The method returns on EOF. + * @param[in] is the input stream */ +void PSInterpreter::execute (istream &is) { + char buf[4096]; + while (is && !is.eof()) { + is.read(buf, 4096); + execute(buf, is.gcount(), false); + } + execute("\n", 1); +} + + +/** This callback function handles input from stdin to Ghostscript. Currently not needed. + * @param[in] inst pointer to calling instance of PSInterpreter + * @param[in] buf takes the read characters + * @param[in] len size of buffer buf + * @return number of read characters */ +int GSDLLCALL PSInterpreter::input (void *inst, char *buf, int len) { + return 0; +} + + +/** This callback function handles output from Ghostscript to stdout. It looks for + * emitted commands staring with "dvi." and executes them by calling method callActions. + * Ghostscript sends the text in chunks by several calls of this function. + * Unfortunately, the PostScript specification wants error messages also to be sent to stdout + * instead of stderr. Thus, we must collect and concatenate the chunks until an evaluable text + * snippet is completely received. Furthermore, error messages have to be recognized and to be + * filtered out. + * @param[in] inst pointer to calling instance of PSInterpreter + * @param[in] buf contains the characters to be output + * @param[in] len number of characters in buf + * @return number of processed characters (equals 'len') */ +int GSDLLCALL PSInterpreter::output (void *inst, const char *buf, int len) { + PSInterpreter *self = static_cast(inst); + if (self && self->_actions) { + const size_t MAXLEN = 512; // maximal line length (longer lines are of no interest) + const char *end = buf+len-1; // last position of buf + for (const char *first=buf, *last=buf; first <= end; last++, first=last) { + // move first and last to begin and end of the next line, respectively + while (last <= end && *last != '\n') + last++; + size_t linelength = last-first+1; + if (linelength > MAXLEN) // skip long lines since they don't contain any relevant information + continue; + + vector &linebuf = self->_linebuf; // just a shorter name... + if ((*last == '\n' || !self->active())) { + if (linelength + linebuf.size() > 5) { // prefix "dvi." plus final newline + SplittedCharInputBuffer ib(linebuf.empty() ? 0 : &linebuf[0], linebuf.size(), first, linelength); + BufferInputReader in(ib); + in.skipSpace(); + if (self->_inError) { + if (in.check("dvi.enderror")) { + // @@ + self->_errorMessage.clear(); + self->_inError = false; + } + else + self->_errorMessage += string(first, linelength); + } + if (in.check("dvi.")) { + if (in.check("beginerror")) // all following output belongs to an error message + self->_inError = true; + else + self->callActions(in); + } + } + linebuf.clear(); + } + else { // no line end found => + // save remaining characters and prepend them to the next incoming chunk of characters + linelength--; // last == end+1 => linelength is 1 too large + if (linebuf.size() + linelength > MAXLEN) + linebuf.clear(); // don't care for long lines + else { + size_t currsize = linebuf.size(); + linebuf.resize(currsize+linelength); + memcpy(&linebuf[currsize], first, linelength); + } + } + } + } + return len; +} + + +/** Converts a vector of strings to a vector of doubles. + * @param[in] str the strings to be converted + * @param[out] d the resulting doubles */ +static void str2double (const vector &str, vector &d) { + for (size_t i=0; i < str.size(); i++) { + istringstream iss(str[i]); + iss >> d[i]; + } +} + + +/** Evaluates a command emitted by Ghostscript and invokes the corresponding + * method of interface class PSActions. + * @param[in] in reader pointing to the next command */ +void PSInterpreter::callActions (InputReader &in) { + // array of currently supported operators (must be ascendingly sorted) + static const struct Operator { + const char *name; // name of operator + int pcount; // number of parameters (< 0 : variable number of parameters) + void (PSActions::*op)(vector &p); // operation handler + } operators [] = { + {"applyscalevals", 3, &PSActions::applyscalevals}, + {"clip", 0, &PSActions::clip}, + {"closepath", 0, &PSActions::closepath}, + {"curveto", 6, &PSActions::curveto}, + {"eoclip", 0, &PSActions::eoclip}, + {"eofill", 0, &PSActions::eofill}, + {"fill", 0, &PSActions::fill}, + {"grestore", 0, &PSActions::grestore}, + {"grestoreall", 0, &PSActions::grestoreall}, + {"gsave", 0, &PSActions::gsave}, + {"initclip", 0, &PSActions::initclip}, + {"lineto", 2, &PSActions::lineto}, + {"moveto", 2, &PSActions::moveto}, + {"newpath", 0, &PSActions::newpath}, + {"querypos", 2, &PSActions::querypos}, + {"restore", 1, &PSActions::restore}, + {"rotate", 1, &PSActions::rotate}, + {"save", 1, &PSActions::save}, + {"scale", 2, &PSActions::scale}, + {"setcmykcolor", 4, &PSActions::setcmykcolor}, + {"setdash", -1, &PSActions::setdash}, + {"setgray", 1, &PSActions::setgray}, + {"sethsbcolor", 3, &PSActions::sethsbcolor}, + {"setlinecap", 1, &PSActions::setlinecap}, + {"setlinejoin", 1, &PSActions::setlinejoin}, + {"setlinewidth", 1, &PSActions::setlinewidth}, + {"setmatrix", 6, &PSActions::setmatrix}, + {"setmiterlimit", 1, &PSActions::setmiterlimit}, + {"setopacityalpha", 1, &PSActions::setopacityalpha}, + {"setrgbcolor", 3, &PSActions::setrgbcolor}, + {"stroke", 0, &PSActions::stroke}, + {"translate", 2, &PSActions::translate}, + }; + if (_actions) { + in.skipSpace(); + // binary search + int first=0, last=sizeof(operators)/sizeof(Operator)-1; + while (first <= last) { + int mid = first+(last-first)/2; + int cmp = in.compare(operators[mid].name); + if (cmp > 0) + last = mid-1; + else if (cmp < 0) + first = mid+1; + else { + // collect parameters and call handler + vector params; + int pcount = operators[mid].pcount; + if (pcount < 0) { // variable number of parameters? + in.skipSpace(); + while (!in.eof()) { // read all available parameters + params.push_back(in.getString()); + in.skipSpace(); + } + } + else { // fixed number of parameters + for (int i=0; i < pcount; i++) { + in.skipSpace(); + params.push_back(in.getString()); + } + } + vector v(params.size()); + str2double(params, v); + (_actions->*operators[mid].op)(v); + _actions->executed(); + } + } + } +} + + +/** This callback function handles output from Ghostscript to stderr. + * @param[in] inst pointer to calling instance of PSInterpreter + * @param[in] buf contains the characters to be output + * @param[in] len number of chars in buf + * @return number of processed characters */ +int GSDLLCALL PSInterpreter::error (void *inst, const char *buf, int len) { + ostringstream oss; + oss << "PostScript error:\n"; + oss.write(buf, len); + return len; +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PSInterpreter.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PSInterpreter.h new file mode 100644 index 00000000000..c33ad43a237 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PSInterpreter.h @@ -0,0 +1,116 @@ +/************************************************************************* +** PSInterpreter.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef PSINTERPRETER_H +#define PSINTERPRETER_H + +#include +#include +#include +#include +#include "Ghostscript.h" +#include "InputReader.h" +#include "MessageException.h" + + +struct PSException : public MessageException +{ + PSException (const std::string &msg) : MessageException(msg) {} +}; + + +/** This interface provides the template methods called by PSInterpreter when executing a PS snippet. + * Each method corresponds to a PostScript operator of the same name. */ +struct PSActions +{ + virtual ~PSActions () {} + virtual void applyscalevals (std::vector &p) =0; + virtual void clip (std::vector &p) =0; + virtual void closepath (std::vector &p) =0; + virtual void curveto (std::vector &p) =0; + virtual void eoclip (std::vector &p) =0; + virtual void eofill (std::vector &p) =0; + virtual void fill (std::vector &p) =0; + virtual void gsave (std::vector &p) =0; + virtual void grestore (std::vector &p) =0; + virtual void grestoreall (std::vector &p) =0; + virtual void initclip (std::vector &p) =0; + virtual void lineto (std::vector &p) =0; + virtual void moveto (std::vector &p) =0; + virtual void newpath (std::vector &p) =0; + virtual void querypos (std::vector &p) =0; + virtual void restore (std::vector &p) =0; + virtual void rotate (std::vector &p) =0; + virtual void save (std::vector &p) =0; + virtual void scale (std::vector &p) =0; + virtual void setcmykcolor (std::vector &cmyk) =0; + virtual void setdash (std::vector &p) =0; + virtual void setgray (std::vector &p) =0; + virtual void sethsbcolor (std::vector &hsb) =0; + virtual void setlinecap (std::vector &p) =0; + virtual void setlinejoin (std::vector &p) =0; + virtual void setlinewidth (std::vector &p) =0; + virtual void setmatrix (std::vector &p) =0; + virtual void setmiterlimit (std::vector &p) =0; + virtual void setopacityalpha (std::vector &p) =0; + virtual void setrgbcolor (std::vector &rgb) =0; + virtual void stroke (std::vector &p) =0; + virtual void translate (std::vector &p) =0; + virtual void executed () {} // triggered if one of the above PS operators has been executed +}; + + +/** This class provides methods to execute chunks of PostScript code and calls + * several template methods on invocation of selected PS operators (see PSActions). */ +class PSInterpreter +{ + enum Mode {PS_NONE, PS_RUNNING, PS_QUIT}; + + public: + PSInterpreter (PSActions *actions=0); + void execute (const char *str, size_t len, bool flush=true); + void execute (const char *str) {execute(str, std::strlen(str));} + void execute (const std::string &str) {execute(str.c_str());} + void execute (std::istream &is); + bool active () const {return _mode != PS_QUIT;} + PSActions* setActions (PSActions *actions); + + protected: + void init (); + // callback functions + static int GSDLLCALL input (void *inst, char *buf, int len); + static int GSDLLCALL output (void *inst, const char *buf, int len); + static int GSDLLCALL error (void *inst, const char *buf, int len); + + void callActions (InputReader &cib); + + private: + Ghostscript _gs; + Mode _mode; ///< current execution mode + PSActions *_actions; ///< actions to be performed + std::vector _linebuf; + std::string _errorMessage; ///< text of error message + bool _inError; ///< true if scanning error message + bool _initialized; ///< true if PSInterpreter has been completely initialized + static const char *GSARGS[]; ///< parameters passed to Ghostscript + static const char *PSDEFS; ///< initial PostScript definitions +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageRanges.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageRanges.cpp new file mode 100644 index 00000000000..9c985972b72 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageRanges.cpp @@ -0,0 +1,135 @@ +/************************************************************************* +** PageRanges.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include "InputBuffer.h" +#include "InputReader.h" +#include "PageRanges.h" + +#include "macros.h" + +using namespace std; + + +/** 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 + * @param[in] max_page greatest allowed value + * @param[out] ranges the extracted range sequence + * @return true on success; false denotes a syntax error */ +bool PageRanges::parse (string str, int max_page) { + StringInputBuffer ib(str); + BufferInputReader ir(ib); + while (ir) { + 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() == '-') { + while (ir.peek() == '-') + ir.get(); + ir.skipSpace(); + if (isdigit(ir.peek())) + last = ir.getInt(); + } + else + last = first; + ir.skipSpace(); + if (ir.peek() == ',') { + ir.get(); + if (ir.eof()) + return false; + } + else if (!ir.eof()) + return false; + if (first > last) + swap(first, last); + first = max(1, first); + last = max(first, last); + if (max_page > 0) { + first = min(first, max_page); + last = min(last, max_page); + } + insert(first, last); + } + return true; +} + + +/** Adds a page range to the range collection. + * @param[in] first first page of new range + * @param[in] last last page of new range */ +void PageRanges::insert (int first, int last) { + if (first > last) + swap(first, last); + Container::iterator it = _ranges.begin(); + while (it != _ranges.end() && first > it->first+1 && first > it->second+1) + ++it; + if (it == _ranges.end() || last < it->first-1 || first > it->second+1) + it = _ranges.insert(it, Range(first, last)); + else if ((first < it->first && last >= it->first-1) || (first <= it->second+1 && last > it->second)) { + it->first = min(it->first, first); + it->second = max(it->second, last); + } + // merge adjacent ranges + if (it != _ranges.end()) { + Container::iterator l = it; + Container::iterator r = it; + if (l == _ranges.begin()) + l = _ranges.end(); + else + --l; + ++r; + bool l_modified = false; + bool r_modified = false; + if (l != _ranges.end() && l->second >= it->first-1) { + l->first = min(l->first, it->first); + l->second = max(l->second, it->second); + l_modified = true; + } + if (r != _ranges.end() && r->first <= it->second+1) { + r->first = min(r->first, it->first); + r->second = max(r->second, it->second); + r_modified = true; + } + if (l_modified || r_modified) { + _ranges.erase(it); + if (l_modified && r_modified && l->second >= r->first-1) { + l->first = min(l->first, r->first); + l->second = max(l->second, r->second); + _ranges.erase(r); + } + } + } +} + + +/** Returns the number of pages. */ +size_t PageRanges::pages () const { + size_t sum=0; + for (ConstIterator it=_ranges.begin(); it != _ranges.end(); ++it) + sum += it->second - it->first + 1; + return sum; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageRanges.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageRanges.h new file mode 100644 index 00000000000..f15641b9f70 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageRanges.h @@ -0,0 +1,50 @@ +/************************************************************************* +** PageRanges.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef PAGERANGES_H +#define PAGERANGES_H + +#include +#include +#include + +class PageRanges +{ + public: + typedef std::pair Range; + typedef std::list Container; + typedef Container::iterator Iterator; + typedef Container::const_iterator ConstIterator; + + public: + bool parse (std::string str, int max_page=0); + void insert (int first, int last); + size_t pages () const; + size_t size () const {return _ranges.size();} + const Container& ranges () const {return _ranges;} + ConstIterator begin () const {return _ranges.begin();} + ConstIterator end () const {return _ranges.end();} + + private: + Container _ranges; + int _max; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageSize.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageSize.cpp new file mode 100644 index 00000000000..88990136285 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageSize.cpp @@ -0,0 +1,156 @@ +/************************************************************************* +** PageSize.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include +#include "PageSize.h" + +using namespace std; + +// make sure tolower is a function (and not a macro) +// so that 'transform' can be applied +static int my_tolower (int c) { + return tolower(c); +} + + +/** Computes width and height of ISO/DIN An in millimeters. + * @param[in] n the A level (e.g. n=4 => DIN A4) + * @param[out] width contains the page width when function returns + * @param[out] height contains the page height when function returns */ +static void computeASize (int n, double &width, double &height) { + double sqrt2 = sqrt(2.0); + height = floor(1189.0/pow(sqrt2, n)+0.5); + width = floor(height/sqrt2+0.5); +} + + +/** Computes width and height of ISO/DIN Bn in millimeters. + * @param[in] n the B level (e.g. n=4 => DIN B4) + * @param[out] width contains the page width when function returns + * @param[out] height contains the page height when function returns */ +static void computeBSize (int n, double &width, double &height) { + double w, h; + computeASize(n, width, height); + computeASize(n-1, w, h); + width = floor(sqrt(width * w)+0.5); + height = floor(sqrt(height * h)+0.5); +} + + +/** Computes width and height of ISO/DIN Cn in millimeters. + * @param[in] n the C level (e.g. n=4 => DIN C4) + * @param[out] width contains the page width when function returns + * @param[out] height contains the page height when function returns */ +static void computeCSize (int n, double &width, double &height) { + double w, h; + computeASize(n, width, height); + computeBSize(n, w, h); + width = floor(sqrt(width * w)+0.5); + height = floor(sqrt(height * h)+0.5); +} + + +/** Computes width and height of ISO/DIN Dn in millimeters. + * @param[in] n the D level (e.g. n=4 => DIN D4) + * @param[out] width contains the page width when function returns + * @param[out] height contains the page height when function returns */ +static void computeDSize (int n, double &width, double &height) { + double w, h; + computeASize(n, width, height); + computeBSize(n+1, w, h); + width = floor(sqrt(width * w)+0.5); + height = floor(sqrt(height * h)+0.5); +} + + +/** Constructs a PageSize object of given size. + * @param[in] name specifies the page size, e.g. "A4" or "letter" */ +PageSize::PageSize (string name) : width(0), height(0) { + resize(name); +} + + +void PageSize::resize (double w, double h) { + width = w; + height = h; +} + +void PageSize::resize (string name) { + if (name.length() < 2) + throw PageSizeException("unknown page format: "+name); + + transform(name.begin(), name.end(), name.begin(), my_tolower); + // extract optional suffix + size_t pos = name.rfind("-"); + bool landscape = false; + if (pos != string::npos) { + string suffix = name.substr(pos); + name = name.substr(0, pos); + if (suffix == "-l" || suffix == "-landscape") + landscape = true; + else if (suffix != "-p" && suffix != "-portrait") + throw PageSizeException("invalid page format suffix: " + suffix); + } + + if (name == "invoice") { + width = 140; + height = 216; + } + else if (name == "executive") { + width = 184; + height = 267; + } + else if (name == "legal") { + width = 216; + height = 356; + } + else if (name == "letter") { + width = 216; + height = 279; + } + else if (name == "ledger") { + width = 279; + height = 432; + } + else if (isdigit(name[1]) && name.length() < 5) { // limit length of number to prevent arithmetic errors + istringstream iss(name.substr(1)); + int n; + iss >> n; + switch (name[0]) { + case 'a' : computeASize(n, width, height); break; + case 'b' : computeBSize(n, width, height); break; + case 'c' : computeCSize(n, width, height); break; + case 'd' : computeDSize(n, width, height); break; + default : throw PageSizeException("invalid page format: "+name); + } + } + if (width == 0 || height == 0) + throw PageSizeException("unknown page format: "+name); + if (landscape) + swap(width, height); + + const double ptpmm = 72.27/25.4; // TeX points per millimeter (72.27pt = 1in = 25.4mm) + width *= ptpmm; + height *= ptpmm; +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageSize.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageSize.h new file mode 100644 index 00000000000..c2ca163e051 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PageSize.h @@ -0,0 +1,48 @@ +/************************************************************************* +** PageSize.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef PAGESIZE_H +#define PAGESIZE_H + +#include "MessageException.h" + +struct PageSizeException : public MessageException +{ + PageSizeException (const std::string &msg) : MessageException(msg) {} +}; + +class PageSize +{ + public: + PageSize (double w=0, double h=0) : width(w), height(h) {} + PageSize (std::string name); + void resize (std:: string name); + void resize (double w, double h); + double widthInPT () const {return width;} + double heightInPT () const {return height;} + double widthInMM () const {return width*25.4/72.27;} + double heightInMM () const {return height*25.4/72.27;} + bool valid () const {return width > 0 && height > 0;} + + private: + double width, height; // in pt +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Pair.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Pair.h new file mode 100644 index 00000000000..9e6d1f0d0d1 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Pair.h @@ -0,0 +1,79 @@ +/************************************************************************* +** Pair.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef PAIR_H +#define PAIR_H + +#include +#include +#include "macros.h" +#include "types.h" + +template +class Pair +{ + public: + Pair (T x=0, T y=0) : _x(x), _y(y) {} + Pair operator += (const Pair &p) {_x += p._x; _y += p._y; return *this;} + Pair operator -= (const Pair &p) {_x -= p._x; _y -= p._y; return *this;} + Pair operator *= (T c) {_x *= c; _y *= c; return *this;} + Pair operator /= (T c) {_x /= c; _y /= c; return *this;} + Pair ortho () const {return Pair(-_y, _x);} + double length () const {return std::sqrt(_x*_x + _y*_y);} + bool operator == (const Pair &p) const {return _x == p._x && _y == p._y;} + bool operator != (const Pair &p) const {return _x != p._x || _y != p._y;} + T x () const {return _x;} + T y () const {return _y;} + void x (const T &xx) {_x = xx;} + void y (const T &yy) {_y = yy;} + std::ostream& write (std::ostream &os) const {return os << '(' << _x << ',' << _y << ')';} + + private: + T _x, _y; +}; + + +struct Pair32 : public Pair +{ + Pair32 (Int32 x=0, Int32 y=0) : Pair(x, y) {} + explicit Pair32 (double x, double y) : Pair(Int32(x+0.5), Int32(y+0.5)) {} + Pair32 (const Pair &p) : Pair(p) {} +// operator Pair () {return *this;} +}; + +typedef Pair DPair; + +template +IMPLEMENT_ARITHMETIC_OPERATOR(Pair, +) + +template +IMPLEMENT_ARITHMETIC_OPERATOR(Pair, -) + +template +IMPLEMENT_ARITHMETIC_OPERATOR2(Pair, T, *) + +template +IMPLEMENT_ARITHMETIC_OPERATOR2(Pair, T, /) + +template +IMPLEMENT_OUTPUT_OPERATOR(Pair) + +IMPLEMENT_ARITHMETIC_OPERATOR2(Pair32, Int32, *) +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Process.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Process.cpp new file mode 100644 index 00000000000..7ad4874f3d5 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Process.cpp @@ -0,0 +1,143 @@ +/************************************************************************* +** Process.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + + +#ifdef __WIN32__ +#include +#else +#include +#include +#include +#include +#endif + +#include +#include "FileSystem.h" +#include "Process.h" +#include "SignalHandler.h" +#include "macros.h" + +using namespace std; + +Process::Process (const string &cmd, const string ¶mstr) + : _cmd(cmd), _paramstr(paramstr) +{ +} + + +#ifndef __WIN32__ +/** Extracts whitespace-sparated parameters from a string. + * @param[in] paramstr the parameter string + * @param[out] params vector holding the extracted parameters */ +static void split_paramstr (string paramstr, vector ¶ms) { + size_t left=0, right=0; // index of first and last character of current parameter + char quote=0; // current quote character, 0=none + const size_t len = paramstr.length(); + while (left <= right && right < len) { + while (left < len && isspace(paramstr[left])) + ++left; + if (left < len && (paramstr[left] == '"' || paramstr[left] == '\'')) + quote = paramstr[left++]; + right = left; + while (right < len && (quote || !isspace(paramstr[right]))) { + if (quote && paramstr[right] == quote) { + quote=0; + break; + } + else + ++right; + } + if (right < len) + paramstr[right]=0; + if (left < len) + params.push_back(¶mstr[left]); + left = ++right; + } +} +#endif + + +/** Runs the process and waits until it's finished. + * @param[in] quiet if true, output to stdout/stderr is suppressed + * @return true if process terminated properly + * @throw SignalException if CTRL-C was pressed during execution */ +bool Process::run (bool quiet) { +#ifdef __WIN32__ + SECURITY_ATTRIBUTES sa; + ZeroMemory(&sa, sizeof(sa)); + sa.nLength = sizeof(sa); + sa.bInheritHandle = true; + + STARTUPINFO si; + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + si.dwFlags = STARTF_USESTDHANDLES; + HANDLE devnull = CreateFile("nul", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, &sa, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + si.hStdInput = GetStdHandle(STD_INPUT_HANDLE); + si.hStdError = GetStdHandle(STD_ERROR_HANDLE); + si.hStdOutput = quiet ? devnull : GetStdHandle(STD_OUTPUT_HANDLE); + PROCESS_INFORMATION pi; + ZeroMemory(&pi, sizeof(pi)); + + string cmdline = _cmd+" "+_paramstr; + CreateProcess(NULL, (LPSTR)cmdline.c_str(), NULL, NULL, true, 0, NULL, NULL, &si, &pi); + WaitForSingleObject(pi.hProcess, INFINITE); + DWORD exitcode = (DWORD)-1; + GetExitCodeProcess(pi.hProcess, &exitcode); + CloseHandle(devnull); + return exitcode == 0; +#else + pid_t pid = fork(); + if (pid == 0) { // child process + if (quiet) { + int devnull = open(FileSystem::DEVNULL, O_WRONLY); + if (devnull >= 0) { + dup2(devnull, STDOUT_FILENO); + dup2(devnull, STDERR_FILENO); + close(devnull); + } + } + vector params; + params.push_back(_cmd.c_str()); + split_paramstr(_paramstr, params); + params.push_back(0); // trailing NULL marks end + execvp(_cmd.c_str(), const_cast(¶ms[0])); + exit(1); + } + if (pid > 0) { // main process + int status; + for (;;) { + waitpid(pid, &status, WNOHANG); + if (WIFEXITED(status)) // child process exited normally + return WEXITSTATUS(status) == 0; + + try { + SignalHandler::instance().check(); + } + catch (SignalException &e) { // caught ctrl-c + kill(pid, SIGKILL); + throw e; + } + } + } + return false; +#endif +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Process.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Process.h new file mode 100644 index 00000000000..2b9e79e43ce --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Process.h @@ -0,0 +1,41 @@ +/************************************************************************* +** Process.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef PROCESS_H +#define PROCESS_H + +#include + +class Process +{ + public: + Process (const std::string &cmd, const std::string ¶mstr); + bool run (bool quiet=true); + + protected: + Process (const Process& orig) {} + + private: + std::string _cmd; + std::string _paramstr; +}; + +#endif + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PsSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PsSpecialHandler.cpp new file mode 100644 index 00000000000..98dab7909a1 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PsSpecialHandler.cpp @@ -0,0 +1,718 @@ +/************************************************************************* +** PsSpecialHandler.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include +#include "FileFinder.h" +#include "Ghostscript.h" +#include "Message.h" +#include "PsSpecialHandler.h" +#include "SpecialActions.h" +#include "XMLNode.h" +#include "XMLString.h" + +using namespace std; + + +static inline double str2double (const string &str) { + double ret; + istringstream iss(str); + iss >> ret; + return ret; +} + + +PsSpecialHandler::PsSpecialHandler () : _psi(this), _actions(0), _initialized(false) +{ +} + + +PsSpecialHandler::~PsSpecialHandler () { + // ensure no further PS actions are performed + _psi.setActions(0); +} + + +/** Initializes the PostScript handler. It's called by the first use of process(). The + * deferred initialization speeds up the conversion of DVI files that doesn't contain + * PS specials. */ +void PsSpecialHandler::initialize (SpecialActions *actions) { + if (!_initialized) { + // initial values of graphics state + _linewidth = 1; + _linecap = _linejoin = 0; + _miterlimit = 4; + _xmlnode = 0; + _opacityalpha = 1; // fully opaque + _sx = _sy = _cos = 1.0; + + // execute dvips prologue/header files + const char *headers[] = {"tex.pro", "texps.pro", "special.pro", /*"color.pro",*/ 0}; + for (const char **p=headers; *p; ++p) { + if (const char *path = FileFinder::lookup(*p, false)) { + ifstream ifs(path); + _psi.execute(ifs); + } + else + Message::wstream(true) << "PostScript header file " << *p << " not found\n"; + } + // push dictionary "TeXDict" with dvips definitions on dictionary stack + // and initialize basic dvips PostScript variables + ostringstream oss; + oss << " TeXDict begin 0 0 1000 72 72 () @start " + " 0 0 moveto "; + if (actions) { + float r, g, b; + actions->getColor().getRGB(r, g, b); + oss << r << ' ' << g << ' ' << b << " setrgbcolor "; + } + _psi.execute(oss.str()); + _initialized = true; + } +} + + +const char* PsSpecialHandler::info () const { + static string str; + str = "dvips PostScript specials (using " + Ghostscript().revision() + ")"; + return str.c_str(); +} + + +/** Move PS graphic position to current DVI location. */ +void PsSpecialHandler::moveToDVIPos () { + if (_actions) { + const double bp=72.0/72.27; // pt -> bp + const double x = _actions->getX()*bp; + const double y = _actions->getY()*bp; + ostringstream oss; + oss << '\n' << x << ' ' << y << " moveto "; + _psi.execute(oss.str()); + _currentpoint = DPair(x, y); + } +} + + +/** Executes a PS snippet and moves the DVI cursor to the current DVI position afterwards. + * It's just a shorthand function as this action sequence is required several times. + * @param[in] psi PS interpreter instance + * @param[in] is stream to read the PS code from + * @param[in] pos current PS graphic position + * @param[in] actions special actions */ +static void exec_and_syncpos (PSInterpreter &psi, istream &is, const DPair &pos, SpecialActions *actions) { + psi.execute(is); + psi.execute("\nquerypos "); // retrieve current PS position (stored in 'pos') + const double pt = 72.27/72.0; // bp -> pt + actions->setX(pos.x()*pt); + actions->setY(pos.y()*pt); +} + + +bool PsSpecialHandler::process (const char *prefix, istream &is, SpecialActions *actions) { + if (!_initialized) + initialize(actions); + _actions = actions; + + if (*prefix == '"') { + // read and execute literal PostScript code (isolated by a wrapping save/restore pair) + moveToDVIPos(); + _psi.execute("\n@beginspecial @setspecial "); + _psi.execute(is); + _psi.execute("\n@endspecial "); + } + else if (*prefix == '!') { + // execute literal PostScript header + _psi.execute("\nTeXDict begin @defspecial "); + _psi.execute(is); + _psi.execute("\n@fedspecial end "); + } + else if (strcmp(prefix, "header=") == 0) { + // read and execute PS header files + string fname; + is >> fname; + if (const char *path = FileFinder::lookup(fname, false)) { + ifstream ifs(path); + _psi.execute(ifs); + } + else + Message::estream(true) << "PS header file '" << fname << "' not found"; + } + else if (strcmp(prefix, "psfile=") == 0 || strcmp(prefix, "PSfile=") == 0) { + if (_actions) { + StreamInputReader in(is); + string fname = in.getString(in.peek() == '"' ? '"' : 0); + map attr; + in.parseAttributes(attr); + psfile(fname, attr); + } + } + else if (strcmp(prefix, "ps::") == 0) { + _actions->finishLine(); // reset DVI position on next DVI command + if (is.peek() == '[') { + // collect characters inside the brackets + string code; + for (int i=0; i < 9 && is.peek() != ']' && !is.eof(); ++i) + code += is.get(); + if (is.peek() == ']') + code += is.get(); + + if (code == "[begin]" || code == "[nobreak]") { + moveToDVIPos(); + exec_and_syncpos(_psi, is, _currentpoint, _actions); + } + else { + // no move to DVI position here + if (code != "[end]") // PS array? + _psi.execute(code); + exec_and_syncpos(_psi, is, _currentpoint, _actions); + } + } + else { // ps:: behaves like ps::[end] + // no move to DVI position here + exec_and_syncpos(_psi, is, _currentpoint, _actions); + } + } + else { // ps: ... + _actions->finishLine(); + moveToDVIPos(); + StreamInputReader in(is); + if (in.check(" plotfile ")) { // ps: plotfile fname + string fname = in.getString(); + ifstream ifs(fname.c_str()); + if (ifs) + _psi.execute(ifs); + else + Message::wstream(true) << "file '" << fname << "' not found in ps: plotfile\n"; + } + else { + // ps: is almost identical to ps::[begin] but does + // a final repositioning to the current DVI location + exec_and_syncpos(_psi, is, _currentpoint, _actions); + moveToDVIPos(); + } + } + return true; +} + + +/** Handles psfile special. + * @param[in] fname EPS file to be included + * @param[in] attr attributes given with \special psfile */ +void PsSpecialHandler::psfile (const string &fname, const map &attr) { + ifstream ifs(fname.c_str()); + if (!ifs) + Message::wstream(true) << "file '" << fname << "' not found in special 'psfile'\n"; + else { + map::const_iterator it; + const double pt = 72.27/72.0; // bp -> pt + + // bounding box of EPS figure + double llx = (it = attr.find("llx")) != attr.end() ? str2double(it->second)*pt : 0; + double lly = (it = attr.find("lly")) != attr.end() ? str2double(it->second)*pt : 0; + double urx = (it = attr.find("urx")) != attr.end() ? str2double(it->second)*pt : 0; + double ury = (it = attr.find("ury")) != attr.end() ? str2double(it->second)*pt : 0; + + // desired width/height of resulting figure + double rwi = (it = attr.find("rwi")) != attr.end() ? str2double(it->second)/10.0*pt : -1; + double rhi = (it = attr.find("rhi")) != attr.end() ? str2double(it->second)/10.0*pt : -1; + if (rwi == 0 || rhi == 0 || urx-llx == 0 || ury-lly == 0) + return; + + // user transformations (default values chosen according to dvips manual) + double hoffset = (it = attr.find("hoffset")) != attr.end() ? str2double(it->second)*pt : 0; + double voffset = (it = attr.find("voffset")) != attr.end() ? str2double(it->second)*pt : 0; +// double hsize = (it = attr.find("hsize")) != attr.end() ? str2double(it->second) : 612; +// double vsize = (it = attr.find("vsize")) != attr.end() ? str2double(it->second) : 792; + double hscale = (it = attr.find("hscale")) != attr.end() ? str2double(it->second) : 100; + double vscale = (it = attr.find("vscale")) != attr.end() ? str2double(it->second) : 100; + double angle = (it = attr.find("angle")) != attr.end() ? str2double(it->second) : 0; + + Matrix m(1); + m.rotate(angle).scale(hscale/100, vscale/100).translate(hoffset, voffset); + BoundingBox bbox(llx, lly, urx, ury); + bbox.transform(m); + + double sx = rwi/bbox.width(); + double sy = rhi/bbox.height(); + if (sx < 0) sx = sy; + if (sy < 0) sy = sx; + if (sx < 0) sx = sy = 1.0; + + // save current DVI position (in pt units) + const double x = _actions->getX(); + const double y = _actions->getY(); + + // all following drawings are relative to (0,0) + _actions->setX(0); + _actions->setY(0); + moveToDVIPos(); + + _xmlnode = new XMLElementNode("g"); + _psi.execute("\n@beginspecial @setspecial "); // enter \special environment + _psi.execute(ifs); // process EPS file + _psi.execute("\n@endspecial "); // leave special environment + if (!_xmlnode->empty()) { // has anything been drawn? + Matrix m(1); + m.rotate(angle).scale(hscale/100, vscale/100).translate(hoffset, voffset); + m.translate(-llx, lly); + m.scale(sx, sy); // resize image to width "rwi" and height "rhi" + m.translate(x, y); // move image to current DVI position + _xmlnode->addAttribute("transform", m.getSVG()); + _actions->appendToPage(_xmlnode); + } + else + delete _xmlnode; + _xmlnode = 0; + + // restore DVI position + _actions->setX(x); + _actions->setY(y); + moveToDVIPos(); + + // update bounding box + m.scale(sx, -sy); + m.translate(x, y); + bbox = BoundingBox(0, 0, fabs(urx-llx), fabs(ury-lly)); + bbox.transform(m); + _actions->embed(bbox); + } +} + +/////////////////////////////////////////////////////// + +void PsSpecialHandler::gsave (vector &p) { + _clipStack.dup(); +} + + +void PsSpecialHandler::grestore (vector &p) { + _clipStack.pop(); +} + + +void PsSpecialHandler::grestoreall (vector &p) { + _clipStack.pop(-1, true); +} + + +void PsSpecialHandler::save (vector &p) { + _clipStack.dup(static_cast(p[0])); +} + + +void PsSpecialHandler::restore (vector &p) { + _clipStack.pop(static_cast(p[0])); +} + + +void PsSpecialHandler::moveto (vector &p) { + _path.moveto(p[0], p[1]); +} + + +void PsSpecialHandler::lineto (vector &p) { + _path.lineto(p[0], p[1]); +} + + +void PsSpecialHandler::curveto (vector &p) { + _path.cubicto(p[0], p[1], p[2], p[3], p[4], p[5]); +} + + +void PsSpecialHandler::closepath (vector &p) { + _path.closepath(); +} + + +/** Draws the current path recorded by previously executed path commands (moveto, lineto,...). + * @param[in] p not used */ +void PsSpecialHandler::stroke (vector &p) { + if (!_path.empty() && _actions) { + BoundingBox bbox; + if (!_actions->getMatrix().isIdentity()) { + _path.transform(_actions->getMatrix()); + if (!_xmlnode) + bbox.transform(_actions->getMatrix()); + } + + const double pt = 72.27/72.0; // factor to convert bp -> pt + ScalingMatrix scale(pt, pt); + _path.transform(scale); + bbox.transform(scale); + + XMLElementNode *path=0; + Pair point; + if (_path.isDot(point)) { // zero-length path? + if (_linecap == 1) { // round line ends? => draw dot + double x = point.x(); + double y = point.y(); + double r = _linewidth/2.0; + path = new XMLElementNode("circle"); + path->addAttribute("cx", XMLString(x)); + path->addAttribute("cy", XMLString(y)); + path->addAttribute("r", XMLString(r)); + path->addAttribute("fill", _actions->getColor().rgbString()); + bbox = BoundingBox(x-r, y-r, x+r, y+r); + } + } + else { + // compute bounding box + _path.computeBBox(bbox); + bbox.expand(_linewidth/2); + + ostringstream oss; + _path.writeSVG(oss); + path = new XMLElementNode("path"); + path->addAttribute("d", oss.str()); + path->addAttribute("stroke", _actions->getColor().rgbString()); + path->addAttribute("fill", "none"); + if (_linewidth != 1) + path->addAttribute("stroke-width", XMLString(_linewidth)); + if (_miterlimit != 4) + path->addAttribute("stroke-miterlimit", XMLString(_miterlimit)); + if (_linecap > 0) // default value is "butt", no need to set it explicitely + path->addAttribute("stroke-linecap", XMLString(_linecap == 1 ? "round" : "square")); + if (_linejoin > 0) // default value is "miter", no need to set it explicitely + path->addAttribute("stroke-linejoin", XMLString(_linecap == 1 ? "round" : "bevel")); + if (_opacityalpha < 1) + path->addAttribute("stroke-opacity", XMLString(_opacityalpha)); + if (_dashpattern.size() > 0) { + ostringstream oss; + for (size_t i=0; i < _dashpattern.size(); i++) { + if (i > 0) + oss << ','; + oss << _dashpattern[i]; + } + path->addAttribute("stroke-dasharray", oss.str()); + if (_dashoffset != 0) + path->addAttribute("stroke-dashoffset", _dashoffset); + } + } + if (path && _clipStack.top()) { + // assign clipping path and clip bounding box + path->addAttribute("clip-path", XMLString("url(#clip")+XMLString(_clipStack.topID())+XMLString(")")); + BoundingBox clipbox; + _clipStack.top()->computeBBox(clipbox); + bbox.intersect(clipbox); + } + + if (_xmlnode) + _xmlnode->append(path); + else { + _actions->appendToPage(path); + _actions->embed(bbox); + } + _path.newpath(); + } +} + + +/** Draws a closed path filled with the current color. + * @param[in] p not used + * @param[in] evenodd true: use even-odd fill algorithm, false: use nonzero fill algorithm */ +void PsSpecialHandler::fill (vector &p, bool evenodd) { + if (!_path.empty() && _actions) { + // compute bounding box + BoundingBox bbox; + _path.computeBBox(bbox); + if (!_actions->getMatrix().isIdentity()) { + _path.transform(_actions->getMatrix()); + if (!_xmlnode) + bbox.transform(_actions->getMatrix()); + } + + const double pt = 72.27/72.0; // factor to convert bp -> pt + ScalingMatrix scale(pt, pt); + _path.transform(scale); + bbox.transform(scale); + + ostringstream oss; + _path.writeSVG(oss); + XMLElementNode *path = new XMLElementNode("path"); + path->addAttribute("d", oss.str()); + if (_actions->getColor() != Color::BLACK) + path->addAttribute("fill", _actions->getColor().rgbString()); + if (_clipStack.top()) { + // assign clipping path and clip bounding box + path->addAttribute("clip-path", XMLString("url(#clip")+XMLString(_clipStack.topID())+XMLString(")")); + BoundingBox clipbox; + _clipStack.top()->computeBBox(clipbox); + bbox.intersect(clipbox); + } + if (evenodd) // SVG default fill rule is "nonzero" algorithm + path->addAttribute("fill-rule", "evenodd"); + if (_opacityalpha < 1) + path->addAttribute("fill-opacity", XMLString(_opacityalpha)); + if (_xmlnode) + _xmlnode->append(path); + else { + _actions->appendToPage(path); + _actions->embed(bbox); + } + _path.newpath(); + } +} + + +/** Clears the current clipping path. + * @param[in] p not used */ +void PsSpecialHandler::initclip (vector &p) { + _clipStack.push(); // push empty path +} + + +/** Assigns a new clipping path. + * @param[in] p not used + * @param[in] evenodd true: use even-odd fill algorithm, false: use nonzero fill algorithm */ +void PsSpecialHandler::clip (vector &p, bool evenodd) { + // when this method is called, _path contains the clipping path + if (!_path.empty() && _actions) { + if (!_actions->getMatrix().isIdentity()) + _path.transform(_actions->getMatrix()); + + const double pt = 72.27/72.0; // factor to convert bp -> pt + ScalingMatrix scale(pt, pt); + _path.transform(scale); + + + int oldID = _clipStack.topID(); + _clipStack.replace(_path); + int newID = _clipStack.topID(); + + ostringstream oss; + _path.writeSVG(oss); + XMLElementNode *path = new XMLElementNode("path"); + path->addAttribute("d", oss.str()); + if (evenodd) + path->addAttribute("clip-rule", "evenodd"); + + XMLElementNode *clip = new XMLElementNode("clipPath"); + clip->addAttribute("id", XMLString("clip")+XMLString(newID)); + if (oldID) + clip->addAttribute("clip-path", XMLString("url(#clip")+XMLString(oldID)+XMLString(")")); + + clip->append(path); + _actions->appendToDefs(clip); + } +} + + +/** Clears current path */ +void PsSpecialHandler::newpath (vector &p) { + _path.newpath(); +} + + +void PsSpecialHandler::setmatrix (vector &p) { + if (_actions) { + // Ensure vector p has 6 elements. If necessary, add missing ones + // using corresponding values of the identity matrix. + if (p.size() < 6) { + p.resize(6); + for (int i=p.size(); i < 6; i++) + p[i] = (i%3 ? 0 : 1); + } + // PS matrix [a b c d e f] equals ((a,b,0),(c,d,0),(e,f,1)). + // Since PS uses left multiplications, we must transpose and reorder + // the matrix to ((a,c,e),(b,d,f),(0,0,1)). This is done by the + // following swaps. + swap(p[1], p[2]); // => (a, c, b, d, e, f) + swap(p[2], p[4]); // => (a, c, e, d, b, f) + swap(p[3], p[4]); // => (a, c, e, b, d, f) + Matrix m(p); + _actions->setMatrix(m); + } +} + + +// In contrast to SVG, PostScript transformations are applied in +// reverse order (M' = T*M). Thus, the transformation matrices must be +// left-multiplied in the following methods scale(), translate() and rotate(). + + +void PsSpecialHandler::scale (vector &p) { + if (_actions) { + Matrix m = _actions->getMatrix(); + ScalingMatrix s(p[0], p[1]); + m.lmultiply(s); + _actions->setMatrix(m); + } +} + + +void PsSpecialHandler::translate (vector &p) { + if (_actions) { + Matrix m = _actions->getMatrix(); + TranslationMatrix t(p[0], p[1]); + m.lmultiply(t); + _actions->setMatrix(m); + } +} + + +void PsSpecialHandler::rotate (vector &p) { + if (_actions) { + Matrix m = _actions->getMatrix(); + RotationMatrix r(p[0]); + m.lmultiply(r); + _actions->setMatrix(m); + } +} + +void PsSpecialHandler::setgray (vector &p) { + if (_actions) { + Color c; + c.setGray((float)p[0]); + _actions->setColor(c); + } +} + + +void PsSpecialHandler::setrgbcolor (vector &p) { + if (_actions) + _actions->setColor(Color((float)p[0], (float)p[1], (float)p[2])); +} + + +void PsSpecialHandler::setcmykcolor (vector &p) { + if (_actions) { + Color c; + c.setCMYK((float)p[0], (float)p[1], (float)p[2], (float)p[3]); + _actions->setColor(c); + } +} + + +void PsSpecialHandler::sethsbcolor (vector &p) { + if (_actions) { + Color c; + c.setHSB((float)p[0], (float)p[1], (float)p[2]); + _actions->setColor(c); + } +} + + +/** Sets the dash parameters used for stroking. + * @param[in] p dash pattern array m1,...,mn plus trailing dash offset */ +void PsSpecialHandler::setdash (vector &p) { + _dashpattern.clear(); + for (size_t i=0; i < p.size()-1; i++) + _dashpattern.push_back(scale(p[i])); + _dashoffset = scale(p.back()); +} + + +/** This method is called by the PSInterpreter if an PS operator has been executed. */ +void PsSpecialHandler::executed () { + if (_actions) + _actions->progress("ps"); +} + +//////////////////////////////////////////// + +void PsSpecialHandler::ClippingStack::push () { + if (!_stack.empty()) + _stack.push(Entry(0, -1)); +} + + +void PsSpecialHandler::ClippingStack::push (const Path &path, int saveID) { + if (path.empty()) + _stack.push(Entry(0, saveID)); + else { + _paths.push_back(path); + _stack.push(Entry(_paths.size(), saveID)); + } +} + + +/** Pops a single or several elements from the clipping stack. + * The method distingushes between the following cases: + * 1) saveID < 0 and grestoreall == false: + * pop top element if it was pushed by gsave (its saveID is < 0 as well) + * 2) saveID < 0 and grestoreall == true + * repeat popping until stack is empty or the top element was pushed + * by save (its saveID is >= 0) + * 3) saveID >= 0: + * pop all elements until the saveID of the top element equals parameter saveID */ +void PsSpecialHandler::ClippingStack::pop (int saveID, bool grestoreall) { + if (!_stack.empty()) { + if (saveID < 0) { // grestore? + if (_stack.top().saveID < 0) // pushed by 'gsave'? + _stack.pop(); + // pop all further elements pushed by 'gsave' if grestoreall == true + while (grestoreall && !_stack.empty() && _stack.top().saveID < 0) + _stack.pop(); + } + else { + // pop elements pushed by 'gsave' + while (!_stack.empty() && _stack.top().saveID != saveID) + _stack.pop(); + // pop element pushed by 'save' + if (!_stack.empty()) + _stack.pop(); + } + } +} + + +/** Returns a pointer to the path on top of the stack, or 0 if the stack is empty. */ +PsSpecialHandler::Path* PsSpecialHandler::ClippingStack::top () { + return (!_stack.empty() && _stack.top().pathID) + ? &_paths[_stack.top().pathID-1] + : 0; +} + + +/** Pops all elements from the stack. */ +void PsSpecialHandler::ClippingStack::clear() { + _paths.clear(); + while (!_stack.empty()) + _stack.pop(); +} + + +/** Replaces the top element by a new one. + * @param[in] path new path to be on top of the stack */ +void PsSpecialHandler::ClippingStack::replace (const Path &path) { + if (_stack.empty()) + push(path, -1); + else { + _paths.push_back(path); + _stack.top().pathID = _paths.size(); + } +} + + +/** Duplicates the top element, i.e. the top element is pushed again. */ +void PsSpecialHandler::ClippingStack::dup (int saveID) { + _stack.push(_stack.empty() ? Entry(0, -1) : _stack.top()); + _stack.top().saveID = saveID; +} + + +const char** PsSpecialHandler::prefixes () const { + static const char *pfx[] = {"header=", "psfile=", "PSfile=", "ps:", "ps::", "!", "\"", 0}; + return pfx; +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PsSpecialHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PsSpecialHandler.h new file mode 100644 index 00000000000..39898926812 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/PsSpecialHandler.h @@ -0,0 +1,130 @@ +/************************************************************************* +** PsSpecialHandler.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef PSSPECIALHANDLER_H +#define PSSPECIALHANDLER_H + +#include +#include +#include "GraphicPath.h" +#include "PSInterpreter.h" +#include "SpecialHandler.h" + +class XMLElementNode; + +class PsSpecialHandler : public SpecialHandler, protected PSActions +{ + typedef GraphicPath Path; + + class ClippingStack + { + public: + void push (); + void push (const Path &path, int saveID=-1); + void replace (const Path &path); + void dup (int saveID=-1); + void pop (int saveID=-1, bool grestore=false); + void clear (); + bool empty () {return _stack.empty();} + Path* top (); + int topID () {return _stack.empty() ? 0 : _stack.top().pathID;} + + private: + struct Entry { + int pathID; ///< index referencing a path of the pool + int saveID; ///< if >=0, path was pushed by 'save', and saveID holds the ID of the + Entry (int pid, int sid) : pathID(pid), saveID(sid) {} + }; + std::vector _paths; ///< pool of all clipping paths + std::stack _stack; + }; + + public: + PsSpecialHandler (); + ~PsSpecialHandler (); + const char* name () const {return "ps";} + const char* info () const; + const char** prefixes () const; + bool process (const char *prefix, std::istream &is, SpecialActions *actions); + + protected: + void initialize (SpecialActions *actions); + void moveToDVIPos (); + void psfile (const std::string &fname, const std::map &attr); + + /// scale given value by current PS scale factors + double scale (double v) const {return v*(_sx*_cos*_cos + _sy*(1-_cos*_cos));} + + void applyscalevals (std::vector &p) {_sx = p[0]; _sy = p[1]; _cos = p[2];} + void clip (std::vector &p) {clip(p, false);} + void clip (std::vector &p, bool evenodd); + void closepath (std::vector &p); + void curveto (std::vector &p); + void eoclip (std::vector &p) {clip(p, true);} + void eofill (std::vector &p) {fill(p, true);} + void fill (std::vector &p, bool evenodd); + void fill (std::vector &p) {fill(p, false);} + void grestore (std::vector &p); + void grestoreall (std::vector &p); + void gsave (std::vector &p); + void initclip (std::vector &p); + void lineto (std::vector &p); + void moveto (std::vector &p); + void newpath (std::vector &p); + void querypos (std::vector &p) {_currentpoint = DPair(p[0], p[1]);} + void restore (std::vector &p); + void rotate (std::vector &p); + void save (std::vector &p); + void scale (std::vector &p); + void setcmykcolor (std::vector &cmyk); + void setdash (std::vector &p); + void setgray (std::vector &p); + void sethsbcolor (std::vector &hsb); + void setlinecap (std::vector &p) {_linecap = UInt8(p[0]);} + void setlinejoin (std::vector &p) {_linejoin = UInt8(p[0]);} + void setlinewidth (std::vector &p) {_linewidth = p[0] ? scale(p[0])*1.00375 : 0.5;} + void setmatrix (std::vector &p); + void setmiterlimit (std::vector &p) {_miterlimit = p[0]*1.00375;} + void setopacityalpha (std::vector &p){_opacityalpha = p[0];} + void setrgbcolor (std::vector &rgb); + void stroke (std::vector &p); + void translate (std::vector &p); + void executed (); + + private: + PSInterpreter _psi; + SpecialActions *_actions; + bool _initialized; + XMLElementNode *_xmlnode; ///< if != 0, created SVG elements are appended to this node + Path _path; + DPair _currentpoint; ///< current PS position in bp units + double _sx, _sy; ///< horizontal and vertical scale factors retrieved by operator "applyscalevals" + double _cos; ///< cosine of angle between (1,0) and transform(1,0) + double _linewidth; ///< current linewidth + double _miterlimit; ///< current miter limit + double _opacityalpha; ///< opacity level (0=fully transparent, ..., 1=opaque) + UInt8 _linecap : 2; ///< current line cap (0=butt, 1=round, 2=projecting square) + UInt8 _linejoin : 2; ///< current line join (0=miter, 1=round, 2=bevel) + double _dashoffset; ///< current dash offset + std::vector _dashpattern; + ClippingStack _clipStack; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SVGTree.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SVGTree.cpp new file mode 100644 index 00000000000..25f6034a0c8 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SVGTree.cpp @@ -0,0 +1,331 @@ +/************************************************************************* +** SVGTree.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "BoundingBox.h" +#include "DVIToSVG.h" +#include "Font.h" +#include "FontManager.h" +#include "SVGTree.h" +#include "XMLDocument.h" +#include "XMLDocTypeNode.h" +#include "XMLNode.h" +#include "XMLString.h" + +using namespace std; + + +// static class variables +bool SVGTree::CREATE_STYLE=true; +bool SVGTree::USE_FONTS=true; +bool SVGTree::CREATE_USE_ELEMENTS=false; + + +SVGTree::SVGTree () : _font(0), _color(Color::BLACK), _matrix(1) { + _xchanged = _ychanged = false; + _fontnum = 0; + reset(); +} + + +/** Clears the SVG tree and initializes the root element. */ +void SVGTree::reset () { + _doc.clear(); + _root = new XMLElementNode("svg"); + _root->addAttribute("version", "1.1"); + _root->addAttribute("xmlns", "http://www.w3.org/2000/svg"); + _root->addAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); + _doc.setRootNode(_root); + _doc.append(new XMLDocTypeNode("svg", "PUBLIC", + "\"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"")); + _page = _text = _span = _defs = 0; +} + + +/** Sets the bounding box of the document. */ +void SVGTree::setBBox (const BoundingBox &bbox) { + _root->addAttribute("width", XMLString(bbox.width())+"pt"); + _root->addAttribute("height", XMLString(bbox.height())+"pt"); + _root->addAttribute("viewBox", bbox.toSVGViewBox()); +} + + +/** Starts a new page. + * @param[in] pageno number of new page */ +void SVGTree::newPage (int pageno) { + _page = new XMLElementNode("g"); + if (pageno >= 0) + _page->addAttribute("id", string("page")+XMLString(pageno)); + _root->append(_page); + _text = _span = 0; +} + + +void SVGTree::appendToDefs (XMLNode *node) { + if (!_defs) { + _defs = new XMLElementNode("defs"); + _root->prepend(_defs); + } + _defs->append(node); +} + + +/** Appends a single charater to the current text node. If necessary, and depending on output mode + * and further output states, new XML elements (text, tspan, g, ...) are created. + * @param[in] c character to be added + * @param[in] x x coordinate + * @param[in] y y coordinate + * @param[in] font font to be used */ +void SVGTree::appendChar (int c, double x, double y, const Font &font) { + XMLElementNode *node=_span; + if (USE_FONTS) { + // changes of fonts and transformations require a new text element + if (!_text || _font.changed() || _matrix.changed()) { + newTextNode(x, y); + node = _text; + _color.changed(true); + } + if (_xchanged || _ychanged || (_color.changed() && _color.get() != Color::BLACK)) { + // if drawing position was explicitly changed, create a new tspan element + _span = new XMLElementNode("tspan"); + if (_xchanged) { + _span->addAttribute("x", x); + _xchanged = false; + } + if (_ychanged) { + _span->addAttribute("y", y); + _ychanged = false; + } + if (_color.get() != Color::BLACK) { + _span->addAttribute("fill", _color.get().rgbString()); + _color.changed(false); + } + _text->append(_span); + node = _span; + } + if (!node) { + if (!_text) + newTextNode(x, y); + node = _text; + } + node->append(XMLString(font.unicode(c), false)); + } + else { + if (_color.changed() || _matrix.changed()) { + bool set_color = (_color.changed() && _color.get() != Color::BLACK); + bool set_matrix = (_matrix.changed() && !_matrix.get().isIdentity()); + if (set_color || set_matrix) { + _span = new XMLElementNode("g"); + if (_color.get() != Color::BLACK) + _span->addAttribute("fill", _color.get().rgbString()); + if (!_matrix.get().isIdentity()) + _span->addAttribute("transform", _matrix.get().getSVG()); + _page->append(_span); + node = _span; + _color.changed(false); + _matrix.changed(false); + } + else if (_color.get() == Color::BLACK && _matrix.get().isIdentity()) + node = _span = 0; + } + + if (!node) + node = _page; + if (CREATE_USE_ELEMENTS) { + ostringstream oss; + oss << "#g" << FontManager::instance().fontID(_font) << '-' << c; + XMLElementNode *use = new XMLElementNode("use"); + use->addAttribute("x", XMLString(x)); + use->addAttribute("y", XMLString(y)); + use->addAttribute("xlink:href", oss.str()); + node->append(use); + } + else { + Glyph glyph; + const PhysicalFont *font = dynamic_cast(_font.get()); + if (font && font->getGlyph(c, glyph)) { + double sx = font->scaledSize()/font->unitsPerEm(); + double sy = -sx; + ostringstream oss; + glyph.writeSVG(oss, sx, sy, x, y); + XMLElementNode *glyph_node = new XMLElementNode("path"); + glyph_node->addAttribute("d", oss.str()); + node->append(glyph_node); + } + } + } +} + + +/** Creates a new text element. This is a helper function used by appendChar(). + * @param[in] x current x coordinate + * @param[in] y current y coordinate */ +void SVGTree::newTextNode (double x, double y) { + _text = new XMLElementNode("text"); + _span = 0; // no tspan in text element yet + if (USE_FONTS) { + const Font *font = _font.get(); + if (CREATE_STYLE || !font) + _text->addAttribute("class", string("f")+XMLString(_fontnum)); + else { + _text->addAttribute("font-family", font->name()); + _text->addAttribute("font-size", font->scaledSize()); + } + } + _text->addAttribute("x", x); + _text->addAttribute("y", y); + if (!_matrix.get().isIdentity()) + _text->addAttribute("transform", _matrix.get().getSVG()); + _page->append(_text); + _font.changed(false); + _matrix.changed(false); + _xchanged = false; + _ychanged = false; +} + + +void SVGTree::setFont (int num, const Font *font) { + _font.set(font); + _fontnum = num; +} + + +void SVGTree::transformPage (const Matrix &m) { + _page->addAttribute("transform", m.getSVG()); +} + + +/** Creates an SVG element for a single glyph. + * @param[in] c character number + * @param[in] font font to extract the glyph from + * @return pointer to element node if glyph exists, 0 otherwise */ +static XMLElementNode* createGlyphNode (int c, const PhysicalFont &font, GFGlyphTracer::Callback *cb) { + Glyph glyph; + if (!font.getGlyph(c, glyph, cb) || (!SVGTree::USE_FONTS && !SVGTree::CREATE_USE_ELEMENTS)) + return 0; + + double sx=1.0, sy=1.0; + double upem = font.unitsPerEm(); + XMLElementNode *glyph_node=0; + if (SVGTree::USE_FONTS) { + glyph_node = new XMLElementNode("glyph"); + glyph_node->addAttribute("unicode", XMLString(font.unicode(c), false)); + glyph_node->addAttribute("horiz-adv-x", XMLString(font.hAdvance(c))); + string name = font.glyphName(c); + if (!name.empty()) + glyph_node->addAttribute("glyph-name", name); + } + else { + ostringstream oss; + oss << 'g' << FontManager::instance().fontID(&font) << '-' << c; + glyph_node = new XMLElementNode("path"); + glyph_node->addAttribute("id", oss.str()); + sx = font.scaledSize()/upem; + sy = -sx; + } + ostringstream oss; + glyph.writeSVG(oss, sx, sy); + glyph_node->addAttribute("d", oss.str()); + return glyph_node; +} + + +void SVGTree::appendFontStyles (const set &fonts) { + if (CREATE_STYLE && USE_FONTS && !fonts.empty() && _defs) { + XMLElementNode *styleNode = new XMLElementNode("style"); + styleNode->addAttribute("type", "text/css"); + _root->insertAfter(styleNode, _defs); + typedef map SortMap; + SortMap sortmap; + FORALL(fonts, set::const_iterator, it) + if (!dynamic_cast(*it)) // skip virtual fonts + sortmap[FontManager::instance().fontID(*it)] = *it; + ostringstream style; + // add font style definitions in ascending order + FORALL(sortmap, SortMap::const_iterator, it) { + style << "text.f" << it->first << ' ' + << "{font-family:" << it->second->name() + << ";font-size:" << it->second->scaledSize() << "}\n"; + } + XMLCDataNode *cdata = new XMLCDataNode(style.str()); + styleNode->append(cdata); + } +} + + +/** Appends glyph definitions of a given font to the defs section of the SVG tree. + * @param[in] font font to be appended + * @param[in] chars codes of the characters whose glyph outlines should be appended */ +void SVGTree::append (const PhysicalFont &font, const set &chars, GFGlyphTracer::Callback *cb) { + if (chars.empty()) + return; + + if (USE_FONTS) { + XMLElementNode *fontNode = new XMLElementNode("font"); + string fontname = font.name(); + fontNode->addAttribute("id", fontname); + fontNode->addAttribute("horiz-adv-x", XMLString(font.hAdvance())); + appendToDefs(fontNode); + + XMLElementNode *faceNode = new XMLElementNode("font-face"); + faceNode->addAttribute("font-family", fontname); + faceNode->addAttribute("units-per-em", XMLString(font.unitsPerEm())); + if (font.type() != PhysicalFont::MF) { + faceNode->addAttribute("ascent", XMLString(font.ascent())); + faceNode->addAttribute("descent", XMLString(font.descent())); + } + fontNode->append(faceNode); + + // add required missing-glyph element + XMLElementNode *missing = new XMLElementNode("missing-glyph"); + missing->addAttribute("d", ""); + fontNode->append(missing); + FORALL(chars, set::const_iterator, i) + fontNode->append(createGlyphNode(*i, font, cb)); + } + else if (CREATE_USE_ELEMENTS && &font != font.uniqueFont()) { + // If the same character is used in various sizes we don't want to embed the complete (lengthy) path + // description multiple times because they would only differ by a scale factor. Thus it's better to + // reference the already embedded path together with a transformation attribute and let the SVG renderer + // scale the glyph properly. This is only necessary if we don't want to use font but path elements. + FORALL(chars, set::const_iterator, it) { + ostringstream oss; + XMLElementNode *use = new XMLElementNode("use"); + oss << 'g' << FontManager::instance().fontID(&font) << '-' << *it; + use->addAttribute("id", oss.str()); + oss.str(""); + oss << "#g" << FontManager::instance().fontID(font.uniqueFont()) << '-' << *it; + use->addAttribute("xlink:href", oss.str()); + double scale = font.scaledSize()/font.uniqueFont()->scaledSize(); + if (scale != 1.0) { + oss.str(""); + oss << "scale(" << scale << ')'; + use->addAttribute("transform", oss.str()); + } + appendToDefs(use); + } + } + else { + FORALL(chars, set::const_iterator, i) + appendToDefs(createGlyphNode(*i, font, cb)); + } +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SVGTree.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SVGTree.h new file mode 100644 index 00000000000..a9659f72b37 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SVGTree.h @@ -0,0 +1,104 @@ +/************************************************************************* +** SVGTree.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef SVGTREE_H +#define SVGTREE_H + +#include +#include +#include "Color.h" +#include "GFGlyphTracer.h" +#include "Matrix.h" +#include "XMLDocument.h" +#include "XMLNode.h" + +class BoundingBox; +class Color; +class Font; +class Matrix; +class PhysicalFont; + +class SVGTree +{ + template + class Property { + public: + Property (const T &v) : _value(v), _changed(false) {} + + void set (const T &v) { + if (v != _value) { + _value = v; + _changed = true; + } + } + + const T& get () const {return _value;} + operator const T& () {return _value;} + bool changed () const {return _changed;} + void changed (bool c) {_changed = c;} + + private: + T _value; + bool _changed; + }; + + public: + SVGTree (); + void reset (); + void write (std::ostream &os) const {_doc.write(os);} + void newPage (int pageno); + void appendToDefs (XMLNode *node); + void appendToPage (XMLNode *node) {_page->append(node);} + void prependToPage (XMLNode *node){_page->prepend(node);} + void appendToDoc (XMLNode *node) {_doc.append(node);} + void appendToRoot (XMLNode *node) {_root->append(node);} + void appendChar (int c, double x, double y, const Font &font); + void appendFontStyles (const std::set &fonts); + void append (const PhysicalFont &font, const std::set &chars, GFGlyphTracer::Callback *cb=0); + void setBBox (const BoundingBox &bbox); + void setFont (int id, const Font *font); + void setX (double x) {_xchanged = true;} + void setY (double y) {_ychanged = true;} + void setMatrix (const Matrix &m) {_matrix.set(m);} + void setColor (const Color &c) {_color.set(c);} + void transformPage (const Matrix &m); + const Color& getColor () const {return _color.get();} + const Matrix& getMatrix () const {return _matrix.get();} + XMLElementNode* rootNode () const {return _root;} + + public: + static bool USE_FONTS; ///< if true, create font references and don't draw paths directly + static bool CREATE_STYLE; ///< should and class attributes be used to reference fonts? + static bool CREATE_USE_ELEMENTS; ///< allow generation of elements? + + protected: + void newTextNode (double x, double y); + + private: + XMLDocument _doc; + XMLElementNode *_root, *_page, *_text, *_span, *_defs; + bool _xchanged, _ychanged; + Property _font; + Property _color; + Property _matrix; + int _fontnum; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SignalHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SignalHandler.cpp new file mode 100644 index 00000000000..2f2b9817e81 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SignalHandler.cpp @@ -0,0 +1,85 @@ +/************************************************************************* +** SignalHandler.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include "SignalHandler.h" + +using namespace std; + +bool SignalHandler::_break = false; + + +SignalHandler::~SignalHandler() { + stop(); +} + + +/** Returns the singleton handler object. */ +SignalHandler& SignalHandler::instance() { + static SignalHandler handler; + return handler; +} + + +/** Starts listening to CTRL-C signals. + * @return true if handler was activated. */ +bool SignalHandler::start () { + if (!_active) { + _break = false; + if (signal(SIGINT, SignalHandler::callback) != SIG_ERR) { + _active = true; + return true; + } + } + return false; +} + + +/** Stops listening for CTRL-C signals. */ +void SignalHandler::stop () { + if (_active) { + signal(SIGINT, SIG_DFL); + _active = false; + } +} + + +/** Checks for incoming signals and throws an exception if CTRL-C was caught. + * @throw SignalException */ +void SignalHandler::check() { + if (_break) + throw SignalException(); +} + + +void SignalHandler::trigger (bool notify) { + _break = true; + if (notify) + check(); +} + + +/** This function is called on CTRL-C signals. */ +void SignalHandler::callback (int) { + _break = true; +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SignalHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SignalHandler.h new file mode 100644 index 00000000000..70d2abd8ee8 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SignalHandler.h @@ -0,0 +1,50 @@ +/************************************************************************* +** SignalHandler.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef SIGNALHANDLER_H +#define SIGNALHANDLER_H + +#include + +struct SignalException : public std::exception { +}; + + +class SignalHandler +{ + public: + ~SignalHandler (); + static SignalHandler& instance (); + bool start (); + void stop (); + void check (); + void trigger (bool notify); + bool active () const {return _active;} + + protected: + SignalHandler () : _active(false) {} + static void callback (int signal); + + private: + bool _active; ///< true if listening for signals + static bool _break; ///< true if signal has been caught +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialActions.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialActions.h new file mode 100644 index 00000000000..936ca866809 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialActions.h @@ -0,0 +1,80 @@ +/************************************************************************* +** SpecialActions.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef SPECIALACTIONS_H +#define SPECIALACTIONS_H + +#include +#include "BoundingBox.h" +#include "Color.h" +#include "Matrix.h" + +class XMLNode; + +struct SpecialActions +{ + virtual ~SpecialActions () {} + virtual double getX() const =0; + virtual double getY() const =0; + virtual void setX(double x) =0; + virtual void setY(double y) =0; + virtual void finishLine () =0; + virtual void setColor (const Color &color) =0; + virtual Color getColor () const =0; + virtual void setMatrix (const Matrix &m) =0; + virtual const Matrix& getMatrix () const =0; + virtual void setBgColor (const Color &color) =0; + virtual void appendToPage (XMLNode *node) =0; + virtual void appendToDefs (XMLNode *node) =0; + virtual BoundingBox& bbox () =0; + virtual BoundingBox& bbox (const std::string &name, bool reset=false) =0; + virtual void embed (const BoundingBox &bbox) =0; + virtual void embed (const DPair &p, double r=0) =0; + virtual void progress (const char *id) {} +}; + + +class SpecialEmptyActions : public SpecialActions +{ + public: + double getX() const {return 0;} + double getY() const {return 0;} + void setX(double x) {} + void setY(double y) {} + void finishLine () {} + void setColor (const Color &color) {} + void setBgColor (const Color &color) {} + Color getColor () const {return 0;} + void setMatrix (const Matrix &m) {} + const Matrix& getMatrix () const {return _matrix;} + void appendToPage (XMLNode *node) {} + void appendToDefs (XMLNode *node) {} + BoundingBox& bbox () {return _bbox;} + BoundingBox& bbox (const std::string &name, bool reset=false) {return _bbox;} + void embed (const BoundingBox &bbox) {} + void embed (const DPair &p, double r=0) {} + + private: + BoundingBox _bbox; + Matrix _matrix; +}; + + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialHandler.h new file mode 100644 index 00000000000..45c4905ddb5 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialHandler.h @@ -0,0 +1,58 @@ +/************************************************************************* +** SpecialHandler.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef SPECIALHANDLER_H +#define SPECIALHANDLER_H + +#include +#include +#include "MessageException.h" + + +class SpecialActions; +class SpecialManager; + + +struct SpecialException : public MessageException +{ + SpecialException (const std::string &msg) : MessageException(msg) {} +}; + + +class SpecialHandler +{ + friend class SpecialManager; + + public: + virtual ~SpecialHandler () {} + virtual const char** prefixes () const=0; + virtual const char* info () const=0; + virtual const char* name () const=0; + virtual bool process (const char *prefix, std::istream &is, SpecialActions *actions)=0; + virtual void dviMovedTo (double x, double y) {} + virtual void dviEndPage () {} + + protected: + virtual bool isEndPageListener () const {return false;} + virtual bool isPositionListener () const {return false;} +}; + + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialManager.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialManager.cpp new file mode 100644 index 00000000000..7698726de7c --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialManager.cpp @@ -0,0 +1,146 @@ +/************************************************************************* +** SpecialManager.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "SpecialActions.h" +#include "SpecialManager.h" +#include "macros.h" + +using namespace std; + + +SpecialManager::~SpecialManager () { + unregisterHandlers(); +} + + +void SpecialManager::unregisterHandlers () { + FORALL(_pool, vector::iterator, it) + delete *it; +} + + +/** Registers a single special handler. This method doesn't check if a + * handler of the same class is already registered. + * @param[in] pointer to handler to be registered */ +void SpecialManager::registerHandler (SpecialHandler *handler) { + if (handler) { + // get array of prefixes this handler is responsible for + _pool.push_back(handler); + for (const char **p=handler->prefixes(); *p; ++p) + _handlers[*p] = handler; + if (handler->isEndPageListener()) + _endPageListeners.push_back(handler); + if (handler->isPositionListener()) + _positionListeners.push_back(handler); + } +} + + +/** Registers a multiple special handlers. + * If ignorelist == 0, all given handlers are registered. To exclude selected sets of + * specials, the corresponding names can be given separated by non alpha-numeric characters, + * e.g. "color, ps, em" or "color: ps em" etc. + * @param[in] handlers pointer to zero-terminated array of handlers to be registered + * @param[in] ignorelist list of special names to be ignored */ +void SpecialManager::registerHandlers (SpecialHandler **handlers, const char *ignorelist) { + if (handlers) { + string ign = ignorelist ? ignorelist : ""; + FORALL(ign, string::iterator, it) + if (!isalnum(*it)) + *it = '%'; + ign = "%"+ign+"%"; + + for (; *handlers; handlers++) { + if (ign.find("%"+string((*handlers)->name())+"%") == string::npos) + registerHandler(*handlers); + else + delete *handlers; + } + } +} + + +/** Looks for an appropriate handler for a given special prefix. + * @param[in] prefix the special prefix, e.g. "color" or "em" + * @return in case of success: pointer to handler, 0 otherwise */ +SpecialHandler* SpecialManager::findHandler (const string &prefix) const { + ConstIterator it = _handlers.find(prefix); + if (it != _handlers.end()) + return it->second; + return 0; +} + + +/** Executes a special command. + * @param[in] special the special expression + * @param[in] actions actions the special handlers can perform + * @param[in] listener object that wants to be notified about the processing state + * @return true if a special handler was found + * @throw SpecialException in case of errors during special processing */ +bool SpecialManager::process (const string &special, SpecialActions *actions, Listener *listener) const { + istringstream iss(special); + string prefix; + int c; + while (isalnum(c=iss.get())) + prefix += c; + if (ispunct(c)) // also add seperation character to identifying prefix + prefix += c; + if (prefix == "ps:" && iss.peek() == ':') + prefix += iss.get(); + if (SpecialHandler *handler = findHandler(prefix)) { + if (listener) + listener->beginSpecial(prefix.c_str()); + bool ret = handler->process(prefix.c_str(), iss, actions); + if (listener) + listener->endSpecial(prefix.c_str()); + return ret; + } + return false; +} + + +void SpecialManager::notifyEndPage () const { + FORALL(_endPageListeners, HandlerPool::const_iterator, it) + (*it)->dviEndPage(); +} + + +void SpecialManager::notifyPositionChange (double x, double y) const { + FORALL(_positionListeners, HandlerPool::const_iterator, it) + (*it)->dviMovedTo(x, y); +} + + +void SpecialManager::writeHandlerInfo (ostream &os) const { + typedef map SortMap; + SortMap m; + FORALL(_handlers, ConstIterator, it) + m[it->second->name()] = it->second; + + FORALL(m, SortMap::iterator, it) { + os << setw(10) << left << it->second->name() << ' '; + if (it->second->info()) + os << it->second->info(); + os << endl; + } +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialManager.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialManager.h new file mode 100644 index 00000000000..555af4380ec --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/SpecialManager.h @@ -0,0 +1,71 @@ +/************************************************************************* +** SpecialManager.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef SPECIALMANAGER_H +#define SPECIALMANAGER_H + +#include +#include +#include +#include +#include "SpecialHandler.h" + +class SpecialActions; + +class SpecialManager +{ + public: + struct Listener + { + virtual ~Listener () {} + virtual void beginSpecial (const char *prefix)=0; + virtual void endSpecial (const char *prefix)=0; + }; + + private: + typedef std::vector HandlerPool; + typedef std::map HandlerMap; + typedef HandlerMap::iterator Iterator; + typedef HandlerMap::const_iterator ConstIterator; + + public: + SpecialManager () {} + virtual ~SpecialManager (); + void registerHandler (SpecialHandler *handler); + void registerHandlers (SpecialHandler **handlers, const char *ignorelist); + void unregisterHandlers (); + bool process (const std::string &special, SpecialActions *actions, Listener *listener=0) const; + void notifyEndPage () const; + void notifyPositionChange (double x, double y) const; + void writeHandlerInfo (std::ostream &os) const; + + protected: + SpecialManager (const SpecialManager &) {} + void operator = (const SpecialManager &) {} + SpecialHandler* findHandler (const std::string &prefix) const; + + private: + HandlerPool _pool; ///< stores pointers to all handlers + HandlerMap _handlers; ///< pointers to handlers for corresponding prefixes + HandlerPool _endPageListeners; + HandlerPool _positionListeners; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamReader.cpp new file mode 100644 index 00000000000..65c7149f780 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamReader.cpp @@ -0,0 +1,162 @@ +/************************************************************************* +** StreamReader.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include "CRC32.h" +#include "StreamReader.h" +#include "macros.h" + +using namespace std; + +StreamReader::StreamReader (istream &s) + : is(&s) +{ +} + + +istream& StreamReader::replaceStream (istream &in) { + istream &ret = *is; + is = ∈ + return ret; +} + + +/** Reads an unsigned integer from assigned input stream. + * @param[in] bytes number of bytes to read (max. 4) + * @return read integer */ +UInt32 StreamReader::readUnsigned (int bytes) { + UInt32 ret = 0; + for (bytes--; bytes >= 0 && !is->eof(); bytes--) { + UInt32 b = is->get(); + ret |= b << (8*bytes); + } + return ret; +} + + +/** Reads an unsigned integer from assigned input stream and updates the CRC32 checksum. + * @param[in] bytes number of bytes to read (max. 4) + * @param[in,out] crc32 checksum to be updated + * @return read integer */ +UInt32 StreamReader::readUnsigned (int bytes, CRC32 &crc32) { + UInt32 ret = readUnsigned(bytes); + crc32.update(ret, bytes); + return ret; +} + + +/** Reads an signed integer from assigned input stream. + * @param[in] bytes number of bytes to read (max. 4) + * @return read integer */ +Int32 StreamReader::readSigned (int bytes) { + Int32 ret = is->get(); + if (ret & 128) // negative value? + ret |= 0xffffff00; + for (bytes-=2; bytes >= 0 && !is->eof(); bytes--) + ret = (ret << 8) | is->get(); + return ret; +} + + +/** Reads an signed integer from assigned input stream and updates the CRC32 checksum. + * @param[in] bytes number of bytes to read (max. 4) + * @param[in,out] crc32 checksum to be updated + * @return read integer */ +Int32 StreamReader::readSigned (int bytes, CRC32 &crc32) { + Int32 ret = readSigned(bytes); + crc32.update(ret, bytes); + return ret; +} + + +/** Reads a string terminated by a 0-byte. */ +string StreamReader::readString () { + if (!is) + throw StreamReaderException("no stream assigned"); + string ret; + while (!is->eof() && is->peek() > 0) + ret += is->get(); + is->get(); // skip 0-byte + return ret; +} + + +/** Reads a string terminated by a 0-byte and updates the CRC32 checksum. + * @param[in,out] crc32 checksum to be updated + * @param[in] finalZero consider final 0-byte in checksum + * @return the string read */ +string StreamReader::readString (CRC32 &crc32, bool finalZero) { + string ret = readString(); + crc32.update((const UInt8*)ret.c_str(), ret.length()); + if (finalZero) + crc32.update(0, 1); + return ret; +} + + +/** Reads a string of a given length. + * @param[in] length number of characters to read + * @return the string read */ +string StreamReader::readString (int length) { + if (!is) + throw StreamReaderException("no stream assigned"); + char *buf = new char[length+1]; + if (length > 0) + is->get(buf, length+1); // reads 'length' bytes (pos. length+1 is set to 0) + else + *buf = 0; + string ret = buf; + delete [] buf; + return ret; +} + + +/** Reads a string of a given length and updates the CRC32 checksum. + * @param[in] length number of characters to read + * @param[in,out] crc32 checksum to be updated + * @return the string read */ +string StreamReader::readString (int length, CRC32 &crc32) { + string ret = readString(length); + crc32.update(ret.c_str()); + return ret; +} + + +vector& StreamReader::readBytes (int n, vector &bytes) { + if (n > 0) + in().read((char*)&bytes[0], n); + return bytes; +} + + +vector& StreamReader::readBytes (int n, vector &bytes, CRC32 &crc32) { + readBytes(n, bytes); + crc32.update(&bytes[0], bytes.size()); + return bytes; +} + + +int StreamReader::readByte (CRC32 &crc32) { + int ret = readByte(); + if (ret >= 0) { + const UInt8 c = UInt8(ret & 0xff); + crc32.update(&c, 1); + } + return ret; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamReader.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamReader.h new file mode 100644 index 00000000000..6fbd94e00de --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamReader.h @@ -0,0 +1,64 @@ +/************************************************************************* +** StreamReader.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef STREAMREADER_H +#define STREAMREADER_H + +#include +#include +#include +#include "MessageException.h" +#include "types.h" + +class CRC32; + +class StreamReader +{ + public: + StreamReader (std::istream &s); + virtual ~StreamReader () {} + std::istream& replaceStream (std::istream &s); + UInt32 readUnsigned (int n); + UInt32 readUnsigned (int n, CRC32 &crc32); + Int32 readSigned (int n); + Int32 readSigned (int n, CRC32 &crc32); + std::string readString (); + std::string readString (CRC32 &crc32, bool finalZero=false); + std::string readString (int length); + std::string readString (int length, CRC32 &crc32); + std::vector& readBytes (int n, std::vector &bytes); + std::vector& readBytes (int n, std::vector &bytes, CRC32 &crc32); + int readByte () {return is->get();} + int readByte (CRC32 &crc32); + + protected: + std::istream& in () {return *is;} + + private: + std::istream *is; +}; + + +struct StreamReaderException : public MessageException +{ + StreamReaderException (const std::string &msg) : MessageException(msg) {} +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamWriter.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamWriter.cpp new file mode 100644 index 00000000000..2a1e7b4a34f --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamWriter.cpp @@ -0,0 +1,81 @@ +/************************************************************************* +** StreamWriter.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include "CRC32.h" +#include "StreamWriter.h" + +using namespace std; + + +/** Writes an unsigned integer to the output stream. + * @param[in] val the value to write + * @param[in] n number of bytes to be considered */ +void StreamWriter::writeUnsigned (UInt32 val, int n) { + for (n--; n >= 0; n--) + _os.put((val >> (8*n)) & 0xff); +} + + +/** Writes a signed integer to the output stream. + * @param[in] val the value to write + * @param[in] n number of bytes to be considered */ +void StreamWriter::writeSigned (Int32 val, int n) { + writeUnsigned((UInt32)val, n); +} + + +/** Writes a signed integer to the output stream. + * @param[in] val the value to write + * @param[in] finalZero if true, a final 0-byte is appended */ +void StreamWriter::writeString (const string &str, bool finalZero) { + for (size_t i=0; i < str.length(); i++) + _os.put(str[i]); + if (finalZero) + _os.put(0); +} + + +/** Writes an unsigned integer to the output stream. + * @param[in] val the value to write + * @param[in] n number of bytes to be considered + * @param[in,out] crc32 checksum to be updated */ +void StreamWriter::writeUnsigned (UInt32 val, int n, CRC32 &crc32) { + writeUnsigned(val, n); + crc32.update(val, n); +} + + +/** Writes a signed integer to the output stream and updates the CRC32 checksum. + * @param[in] val the value to write + * @param[in] n number of bytes to be considered + * @param[in,out] crc32 checksum to be updated */ +void StreamWriter::writeSigned (Int32 val, int n, CRC32 &crc32) { + writeUnsigned((UInt32)val, n, crc32); +} + + +/** Writes a string to the output stream and updates the CRC32 checksum. + * @param[in] str the string to write + * @param[in,out] crc32 checksum to be updated + * @param[in] finalZero if true, a final 0-byte is appended */ +void StreamWriter::writeString (const std::string &str, CRC32 &crc32, bool finalZero) { + writeString(str, finalZero); + crc32.update((const UInt8*)str.c_str(), str.length() + (finalZero ? 1 : 0)); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamWriter.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamWriter.h new file mode 100644 index 00000000000..440bd94a2a9 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/StreamWriter.h @@ -0,0 +1,46 @@ +/************************************************************************* +** StreamWriter.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef STREAMWRITER_H +#define STREAMWRITER_H + +#include +#include "types.h" + + +class CRC32; + +class StreamWriter +{ + public: + StreamWriter (std::ostream &os) : _os(os) {} + virtual ~StreamWriter () {} + void writeUnsigned (UInt32 val, int n); + void writeSigned (Int32 val, int n); + void writeString (const std::string &str, bool finalZero=false); + void writeUnsigned (UInt32 val, int n, CRC32 &crc32); + void writeSigned (Int32 val, int n, CRC32 &crc32); + void writeString (const std::string &str, CRC32 &crc32, bool finalZero=false); + + private: + std::ostream &_os; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/System.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/System.cpp new file mode 100644 index 00000000000..b57c0662462 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/System.cpp @@ -0,0 +1,53 @@ +/************************************************************************* +** System.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include "System.h" + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#if defined (HAVE_SYS_TIME_H) +#include +#elif defined (HAVE_SYS_TIMEB_H) +#include +#endif + + +using namespace std; + + +/** Returns timestamp (wall time) in seconds. */ +double System::time () { +#if defined (HAVE_SYS_TIME_H) + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec + tv.tv_usec/1000000.0; +#elif defined (HAVE_SYS_TIMEB_H) + struct timeb tb; + ftime(&tb); + return tb.time + tb.millitm/1000.0; +#else + clock_t myclock = clock(); + return double(myclock)/CLOCKS_PER_SEC; +#endif +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/System.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/System.h new file mode 100644 index 00000000000..3485c27e6b5 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/System.h @@ -0,0 +1,29 @@ +/************************************************************************* +** System.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef SYSTEM_H +#define SYSTEM_H + +namespace System +{ + double time (); +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TFM.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TFM.cpp new file mode 100644 index 00000000000..d56185d0086 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TFM.cpp @@ -0,0 +1,149 @@ +/************************************************************************* +** TFM.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include "FileFinder.h" +#include "Message.h" +#include "StreamReader.h" +#include "TFM.h" + +using namespace std; + + +/** Reads a sequence of n TFM words (4 Bytes each). + * @param[in] is reads from this stream + * @param[out] v the read words + * @param[in] n number of words to be read + * @return dynamically allocated array containing the read words + * (must be deleted by the caller) */ +template +static void read_words (StreamReader &sr, vector &v, unsigned n) { + v.clear(); + v.resize(n); + for (unsigned i=0; i < n; i++) + v[i] = sr.readUnsigned(4); +} + + +/** Converts a TFM fix point value to double. */ +static double fix2double (FixWord fix) { + return double(fix)/(1 << 20); +} + + +TFM::TFM () : _checksum(0), _firstChar(0), _lastChar(0), _designSize(0) +{ +} + + +TFM::TFM (istream &is) { + readFromStream(is); +} + + +TFM* TFM::createFromFile (const char *fontname) { + string filename = string(fontname) + ".tfm"; + const char *path = FileFinder::lookup(filename); + ifstream ifs(path, ios_base::binary); + if (ifs) + return new TFM(ifs); + return 0; +} + + +bool TFM::readFromStream (istream &is) { + StreamReader sr(is); + is.seekg(2, ios_base::beg); // skip file size + UInt16 lh = UInt16(sr.readUnsigned(2)); // length of header in 4 byte words + _firstChar= UInt16(sr.readUnsigned(2)); // smalles character code in font + _lastChar = UInt16(sr.readUnsigned(2)); // largest character code in font + UInt16 nw = UInt16(sr.readUnsigned(2)); // number of words in width table + UInt16 nh = UInt16(sr.readUnsigned(2)); // number of words in height table + UInt16 nd = UInt16(sr.readUnsigned(2)); // number of words in depth table + UInt16 ni = UInt16(sr.readUnsigned(2)); // number of words in italic corr. table +// UInt16 nl = UInt16(sr.readUnsigned(2)); // number of words in lig/kern table +// UInt16 nk = UInt16(sr.readUnsigned(2)); // number of words in kern table +// UInt16 ne = UInt16(sr.readUnsigned(2)); // number of words in ext. char table +// UInt16 np = UInt16(sr.readUnsigned(2)); // number of font parameter words + + is.seekg(8, ios_base::cur); // move to header (skip above commented bytes) + _checksum = sr.readUnsigned(4); + _designSize = sr.readUnsigned(4); + is.seekg(24+lh*4, ios_base::beg); // move to char info table + read_words(sr, _charInfoTable, _lastChar-_firstChar+1); + read_words(sr, _widthTable, nw); + read_words(sr, _heightTable, nh); + read_words(sr, _depthTable, nd); + read_words(sr, _italicTable, ni); + return true; +} + + +/** Returns the design size of this font in TeX point units. */ +double TFM::getDesignSize () const { + return fix2double(_designSize); +} + + +// the char info word for each character consists of 4 bytes holding the following information: +// width index w, height index (h), depth index (d), italic correction index (it), +// tag (tg) and a remainder: +// +// byte 1 | byte 2 | byte 3 | byte 4 +// xxxxxxxx | xxxx xxxx | xxxxxx xx | xxxxxxxx +// w | h d | it tg | remainder + +/** Returns the width of char c in TeX point units. */ +double TFM::getCharWidth (int c) const { + if (c < _firstChar || c > _lastChar || unsigned(c-_firstChar) >= _charInfoTable.size()) + return 0; + int index = (_charInfoTable[c-_firstChar] >> 24) & 0xFF; + return fix2double(_widthTable[index]) * fix2double(_designSize); +} + + +/** Returns the height of char c in TeX point units. */ +double TFM::getCharHeight (int c) const { + if (c < _firstChar || c > _lastChar || unsigned(c-_firstChar) >= _charInfoTable.size()) + return 0; + int index = (_charInfoTable[c-_firstChar] >> 20) & 0x0F; + return fix2double(_heightTable[index]) * fix2double(_designSize); +} + + +/** Returns the depth of char c in TeX point units. */ +double TFM::getCharDepth (int c) const { + if (c < _firstChar || c > _lastChar || unsigned(c-_firstChar) >= _charInfoTable.size()) + return 0; + int index = (_charInfoTable[c-_firstChar] >> 16) & 0x0F; + return fix2double(_depthTable[index]) * fix2double(_designSize); +} + + +/** Returns the italic correction of char c in TeX point units. */ +double TFM::getItalicCorr (int c) const { + if (c < _firstChar || c > _lastChar || unsigned(c-_firstChar) >= _charInfoTable.size()) + return 0; + int index = (_charInfoTable[c-_firstChar] >> 10) & 0x3F; + return fix2double(_italicTable[index]) * fix2double(_designSize); +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TFM.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TFM.h new file mode 100644 index 00000000000..09accaea2c6 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TFM.h @@ -0,0 +1,59 @@ +/************************************************************************* +** TFM.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef TFM_H +#define TFM_H + +#include +#include +#include "types.h" + +class FileFinder; + +class TFM +{ + public: + TFM (); + TFM (std::istream &is); + static TFM* createFromFile (const char *fname); + double getDesignSize () const; + double getCharWidth (int c) const; + double getCharHeight (int c) const; + double getCharDepth (int c) const; + double getItalicCorr (int c) const; + UInt32 getChecksum () const {return _checksum;} + UInt16 firstChar () const {return _firstChar;} + UInt16 lastChar () const {return _lastChar;} + + protected: + bool readFromStream (std::istream &is); + + private: + UInt32 _checksum; + UInt16 _firstChar, _lastChar; + FixWord _designSize; ///< design size of the font in TeX points (7227 pt = 254 cm) + std::vector _charInfoTable; + std::vector _widthTable; ///< character widths in design size units + std::vector _heightTable; ///< character height in design size units + std::vector _depthTable; ///< character depth in design size units + std::vector _italicTable; ///< italic corrections in design size units +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Terminal.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Terminal.cpp new file mode 100644 index 00000000000..479e24a7c1b --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Terminal.cpp @@ -0,0 +1,191 @@ +/************************************************************************* +** Terminal.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include "Terminal.h" + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifdef HAVE_TERMIOS_H +#include +#endif + +#ifdef GWINSZ_IN_SYS_IOCTL +#include +#endif + +#ifdef __WIN32__ +#include +#endif + +#include + + +using namespace std; + + +const int Terminal::RED = 1; +const int Terminal::GREEN = 2; +const int Terminal::BLUE = 4; + +const int Terminal::CYAN = GREEN|BLUE; +const int Terminal::YELLOW = RED|GREEN; +const int Terminal::MAGENTA = RED|BLUE; +const int Terminal::WHITE = RED|GREEN|BLUE; +const int Terminal::DEFAULT = -1; +const int Terminal::BLACK = 0; + +#ifdef __WIN32__ +int Terminal::_defaultColor; +#endif + +int Terminal::_fgcolor = Terminal::DEFAULT; +int Terminal::_bgcolor = Terminal::DEFAULT; + + +/** Initializes the terminal. This method should be called before any of the others. + * @param[in,out] os terminal output stream (currently unused) */ +void Terminal::init (ostream &os) { +#ifdef __WIN32__ + HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); + if (h != INVALID_HANDLE_VALUE) { + CONSOLE_SCREEN_BUFFER_INFO info; + GetConsoleScreenBufferInfo(h, &info); + _defaultColor = (info.wAttributes & 0xff); + } +#endif +} + + +/** Finishes the terminal output. Should be called after last terminal action. + * @param[in,out] os terminal output stream */ +void Terminal::finish (ostream &os) { + fgcolor(DEFAULT, os); + bgcolor(DEFAULT, os); +} + + +/** Returns the number of terminal columns (number of characters per row). + * If it's not possible to retrieve information about the terminal size, 0 is returned. */ +int Terminal::columns () { +#if defined(TIOCGWINSZ) + struct winsize ws; + if (ioctl(fileno(stderr), TIOCGWINSZ, &ws) < 0) + return 0; + return ws.ws_col; +#elif defined(__WIN32__) + CONSOLE_SCREEN_BUFFER_INFO info; + if (!GetConsoleScreenBufferInfo(GetStdHandle(STD_ERROR_HANDLE), &info)) + return 0; + return info.dwSize.X; +#else + return 0; +#endif +} + + +/** Returns the number of terminal rows. + * If it's not possible to retrieve information about the terminal size, 0 is returned. */ +int Terminal::rows () { +#if defined(TIOCGWINSZ) + struct winsize ws; + if (ioctl(fileno(stderr), TIOCGWINSZ, &ws) < 0) + return 0; + return ws.ws_row; +#elif defined(__WIN32__) + CONSOLE_SCREEN_BUFFER_INFO info; + if (!GetConsoleScreenBufferInfo(GetStdHandle(STD_ERROR_HANDLE), &info)) + return 0; + return info.dwSize.Y; +#else + return 0; +#endif +} + + +/** Sets the foreground color. + * @param[in] color color code + * @param[in] os terminal output stream */ +void Terminal::fgcolor (int color, ostream &os) { + _fgcolor = color; + +#ifdef __WIN32__ + HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); + if (h != INVALID_HANDLE_VALUE) { + CONSOLE_SCREEN_BUFFER_INFO info; + GetConsoleScreenBufferInfo(h, &info); + if (_fgcolor == DEFAULT) + color = _defaultColor & 0x0f; + else { + // swap red and blue bits + color = (color & 0x0a) | ((color & 1) << 2) | ((color & 4) >> 2); + } + color = (info.wAttributes & 0xf0) | (color & 0x0f); + SetConsoleTextAttribute(h, (DWORD)color); + } +#else + bool light = false; + if (color != DEFAULT && color > 7) { + light = true; + color %= 8; + } + if (color == DEFAULT) { + os << "\x1B[0m"; + if (_bgcolor != DEFAULT) + bgcolor(_bgcolor, os); + } + else + os << "\x1B[" << (light ? '1': '0') << ';' << (30+(color & 0x07)) << 'm'; +#endif +} + + +/** Sets the background color. + * @param[in] color color code + * @param[in] os terminal output stream */ +void Terminal::bgcolor (int color, ostream &os) { + _bgcolor = color; +#ifdef __WIN32__ + HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); + if (h != INVALID_HANDLE_VALUE) { + CONSOLE_SCREEN_BUFFER_INFO info; + GetConsoleScreenBufferInfo(h, &info); + if (_bgcolor == DEFAULT) + color = (_defaultColor & 0xf0) >> 4; + else { + // swap red and blue bits + color = (color & 0x0a) | ((color & 1) << 2) | ((color & 4) >> 2); + } + color = (info.wAttributes & 0x0f) | ((color & 0x0f) << 4); + SetConsoleTextAttribute(h, (DWORD)color); + } +#else + if (color != DEFAULT && color > 7) + color %= 8; + if (color == DEFAULT) { + os << "\x1B[0m"; + if (_fgcolor != DEFAULT) + fgcolor(_fgcolor, os); + } + else + os << "\x1B[" << (40+(color & 0x07)) << 'm'; +#endif +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Terminal.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Terminal.h new file mode 100644 index 00000000000..5981d52e677 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/Terminal.h @@ -0,0 +1,56 @@ +/************************************************************************* +** Terminal.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef TERMINAL_H +#define TERMINAL_H + +#include + +class Terminal +{ + public: + static const int DEFAULT; + static const int BLACK; + static const int RED; + static const int GREEN; + static const int BLUE; + static const int CYAN; + static const int YELLOW; + static const int MAGENTA; + static const int WHITE; + + public: + static void init (std::ostream &os); + static void finish (std::ostream &os); + static int columns (); + static int rows (); + static void fgcolor (int color, std::ostream &os); + static void bgcolor (int color, std::ostream &os); + + private: + static int _fgcolor; ///< current foreground color + static int _bgcolor; ///< current background color + +#ifdef __WIN32__ + static int _defaultColor; +#endif +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TpicSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TpicSpecialHandler.cpp new file mode 100644 index 00000000000..fcd33a5bcf5 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TpicSpecialHandler.cpp @@ -0,0 +1,315 @@ +/************************************************************************* +** TpicSpecialHandler.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include "Color.h" +#include "InputBuffer.h" +#include "InputReader.h" +#include "SpecialActions.h" +#include "TpicSpecialHandler.h" +#include "XMLNode.h" +#include "XMLString.h" +#include "types.h" + +using namespace std; + + +TpicSpecialHandler::TpicSpecialHandler () { + reset(); +} + + +void TpicSpecialHandler::dviEndPage () { + reset(); +} + + +void TpicSpecialHandler::reset () { + _points.clear(); + _penwidth = 1.0; + _fill = -1.0; // no fill +} + + +/** Creates SVG elements that draw lines through the recorded points. + * @param[in] stroke if true, the (out)line is drawn (in black) + * @param[in] fill if true, enclosed area is filled with current color + * @param[in] ddist dash/dot distance of line in TeX point units + * (0:solid line, >0:dashed line, <0:dotted line) */ +void TpicSpecialHandler::drawLines (bool stroke, bool fill, double ddist, SpecialActions *actions) { + if (actions && _points.size() > 0) { + XMLElementNode *elem=0; + if (_points.size() == 1) { + const DPair &p = _points.back(); + elem = new XMLElementNode("circle"); + elem->addAttribute("cx", p.x()+actions->getX()); + elem->addAttribute("cy", p.y()+actions->getY()); + elem->addAttribute("r", _penwidth/2.0); + actions->embed(p, _penwidth/2.0); + } + else { + if (_points.size() == 2 || (!fill && _points.front() != _points.back())) { + elem = new XMLElementNode("polyline"); + elem->addAttribute("fill", "none"); + elem->addAttribute("stroke-linecap", "round"); + } + else { + if (_points.front() == _points.back()) + _points.pop_back(); + if (_fill < 0) + _fill = 1; + Color color = actions->getColor(); + color *= _fill; + elem = new XMLElementNode("polygon"); + elem->addAttribute("fill", fill ? color.rgbString() : "none"); + } + ostringstream oss; + FORALL(_points, vector::iterator, it) { + if (it != _points.begin()) + oss << ' '; + double x = it->x()+actions->getX(); + double y = it->y()+actions->getY(); + oss << x << ',' << y; + actions->embed(DPair(x, y)); + } + elem->addAttribute("points", oss.str()); + if (stroke) { // draw outline? + elem->addAttribute("stroke", "black"); + elem->addAttribute("stroke-width", XMLString(_penwidth)); + } + } + if (ddist > 0) + elem->addAttribute("stroke-dasharray", XMLString(ddist)); + else if (ddist < 0) { + ostringstream oss; + oss << _penwidth << ' ' << -ddist; + elem->addAttribute("stroke-dasharray", oss.str()); + } + actions->appendToPage(elem); + } + reset(); +} + + +void TpicSpecialHandler::drawSplines (double ddist, SpecialActions *actions) { + if (actions && _points.size() > 0) { + const size_t size = _points.size(); + if (size < 3) + drawLines(true, false, ddist, actions); + else { + double x = actions->getX(); + double y = actions->getY(); + DPair p(x,y); + ostringstream oss; + oss << 'M' << x+_points[0].x() << ',' << y+_points[0].y(); + DPair mid = p+_points[0]+(_points[1]-_points[0])/2.0; + oss << 'L' << mid.x() << ',' << mid.y(); + actions->embed(p+_points[0]); + for (size_t i=1; i < size-1; i++) { + const DPair p0 = p+_points[i-1]; + const DPair p1 = p+_points[i]; + const DPair p2 = p+_points[i+1]; + mid = p1+(p2-p1)/2.0; + oss << 'Q' << p1.x() << ',' << p1.y() + << ' ' << mid.x() << ',' << mid.y(); + actions->embed(mid); + actions->embed((p0+p1*6.0+p2)/8.0, _penwidth); + } + if (_points[0] == _points[size-1]) // closed path? + oss << 'Z'; + else { + oss << 'L' << x+_points[size-1].x() << ',' << y+_points[size-1].y(); + actions->embed(p+_points[size-1]); + } + + Color color = actions->getColor(); + color *= _fill; + XMLElementNode *path = new XMLElementNode("path"); + if (_fill >= 0) { + if (_points[0] != _points[size-1]) + oss << 'Z'; + path->addAttribute("fill", color.rgbString()); + } + else + path->addAttribute("fill", "none"); + + path->addAttribute("d", oss.str()); + path->addAttribute("stroke", actions->getColor().rgbString()); + path->addAttribute("stroke-width", XMLString(_penwidth)); + if (ddist > 0) + path->addAttribute("stroke-dasharray", XMLString(ddist)); + else if (ddist < 0) { + ostringstream oss; + oss << _penwidth << ' ' << -ddist; + path->addAttribute("stroke-dasharray", oss.str()); + } + actions->appendToPage(path); + } + } + reset(); +} + + +void TpicSpecialHandler::drawArc (double cx, double cy, double rx, double ry, double angle1, double angle2, SpecialActions *actions) { + if (actions) { + const double PI2 = 4*asin(1.0); + angle1 *= -1; + angle2 *= -1; + if (fabs(angle1) > PI2) { + int n = (int) (angle1/PI2); + angle1 = angle1 - n*PI2; + angle2 = angle2 - n*PI2; + } + + double x = cx + actions->getX(); + double y = cy + actions->getY(); + XMLElementNode *elem=0; + if (fabs(angle1-angle2) >= PI2) { // closed ellipse? + elem = new XMLElementNode("ellipse"); + elem->addAttribute("cx", XMLString(x)); + elem->addAttribute("cy", XMLString(y)); + elem->addAttribute("rx", XMLString(rx)); + elem->addAttribute("ry", XMLString(ry)); + } + else { + if (angle1 < 0) + angle1 = PI2+angle1; + if (angle2 < 0) + angle2 = PI2+angle2; + elem = new XMLElementNode("path"); + int large_arg = fabs(angle1-angle2) > PI2/2 ? 0 : 1; + int sweep = angle1 > angle2 ? 0 : 1; + if (angle1 > angle2) { + large_arg = 1-large_arg; + sweep = 1-sweep; + } + ostringstream oss; + oss << 'M' << x+rx*cos(angle1) << ',' << y+ry*sin(-angle1) + << 'A' << rx << ',' << ry + << " 0 " + << large_arg << ' ' << sweep << ' ' + << x+rx*cos(angle2) << ',' << y-ry*sin(angle2); + if (_fill >= 0) + oss << 'Z'; + elem->addAttribute("d", oss.str()); + } + elem->addAttribute("stroke-width", _penwidth); + elem->addAttribute("stroke", actions->getColor().rgbString()); + elem->addAttribute("stroke-linecap", "round"); + elem->addAttribute("fill", "none"); + if (_fill >= 0) { + Color color=actions->getColor(); + color *= _fill; + elem->addAttribute("fill", color.rgbString()); + } + else + elem->addAttribute("fill", "none"); + actions->appendToPage(elem); + actions->embed(BoundingBox(cx-rx, cy-ry, cx+rx, cy+ry)); + } + reset(); +} + + +#define cmd_id(c1,c2) ((c1 << 8) | c2) + +bool TpicSpecialHandler::process (const char *prefix, istream &is, SpecialActions *actions) { + if (!prefix || strlen(prefix) != 2) + return false; + + const double PT=0.07227; // factor for milli-inch to TeX points + StreamInputBuffer ib(is); + BufferInputReader in(ib); + switch (cmd_id(prefix[0], prefix[1])) { + case cmd_id('p','n'): // set pen width in milli-inches + _penwidth = in.getDouble()*PT; + break; + case cmd_id('b','k'): // set fill color to black + _fill = 0; + break; + case cmd_id('w','h'): // set fill color to white + _fill = 1; + break; + case cmd_id('s','h'): // set fill color to given gray level + in.skipSpace(); + _fill = in.eof() ? 0.5 : max(0.0, min(1.0, in.getDouble())); + break; + case cmd_id('t','x'): // set fill pattern + break; + case cmd_id('p','a'): { // add point to path + double x=in.getDouble()*PT; + double y=in.getDouble()*PT; + _points.push_back(DPair(x,y)); + break; + } + case cmd_id('f','p'): // draw solid lines through recorded points; close and fill path if fill color was defined + drawLines(true, _fill >= 0, 0, actions); + break; + case cmd_id('i','p'): // don't draw outlines but close the recorded path and fill the resulting polygon + drawLines(false, true, 0, actions); + break; + case cmd_id('d','a'): // as fp but draw dashed lines + drawLines(true, _fill >= 0, in.getDouble()*72.27, actions); + break; + case cmd_id('d','t'): // as fp but draw dotted lines + drawLines(true, _fill >= 0, -in.getDouble()*72.27, actions); + break; + case cmd_id('s','p'): { // draw quadratic splines through recorded points + double ddist = in.getDouble(); + drawSplines(ddist, actions); + break; + } + case cmd_id('a','r'): { // draw elliptical arc + double cx = in.getDouble()*PT; + double cy = in.getDouble()*PT; + double rx = in.getDouble()*PT; + double ry = in.getDouble()*PT; + double a1 = in.getDouble(); + double a2 = in.getDouble(); + drawArc(cx, cy, rx, ry, a1, a2, actions); + break; + } + case cmd_id('i','a'): { // fill elliptical arc + double cx = in.getDouble()*PT; + double cy = in.getDouble()*PT; + double rx = in.getDouble()*PT; + double ry = in.getDouble()*PT; + double a1 = in.getDouble(); + double a2 = in.getDouble(); + if (_fill < 0) + _fill = 1; + drawArc(cx, cy, rx, ry, a1, a2, actions); + if (_fill < 0) + _fill = -1; + break; + } + default: + return false; + } + return true; +} + + +const char** TpicSpecialHandler::prefixes () const { + static const char *pfx[] = {"ar", "bk", "da", "dt", "fp", "ia", "ip", "pa", "pn", "sh", "sp", "tx", "wh", 0}; + return pfx; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TpicSpecialHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TpicSpecialHandler.h new file mode 100644 index 00000000000..30bae57358a --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/TpicSpecialHandler.h @@ -0,0 +1,51 @@ +/************************************************************************* +** TpicSpecialHandler.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef TPICSPECIALHANDLER_H +#define TPICSPECIALHANDLER_H + +#include +#include "Pair.h" +#include "SpecialHandler.h" + +class TpicSpecialHandler : public SpecialHandler +{ + public: + TpicSpecialHandler (); + const char* info () const {return "TPIC specials";} + const char* name () const {return "tpic";} + const char** prefixes () const; + bool process (const char *prefix, std::istream &is, SpecialActions *actions); + void dviEndPage (); + + protected: + bool isEndPageListener () const {return true;} + void reset (); + void drawLines (bool stroke, bool fill, double ddist, SpecialActions *actions); + void drawSplines (double ddist, SpecialActions *actions); + void drawArc (double cx, double cy, double rx, double ry, double angle1, double angle2, SpecialActions *actions); + + private: + double _penwidth; ///< pen width in TeX point units + double _fill; ///< fill intensity [0,1]; if < 0, we don't fill anything + std::vector _points; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VFActions.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VFActions.h new file mode 100644 index 00000000000..898fd8850c1 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VFActions.h @@ -0,0 +1,38 @@ +/************************************************************************* +** VFActions.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef VFACTIONS_H +#define VFACTIONS_H + +#include +#include +#include "types.h" + + +struct VFActions +{ + virtual ~VFActions () {} + virtual void preamble (std::string comment, UInt32 checksum, double dsize) {} + virtual void postamble () {} + virtual void defineVFFont (UInt32 fontnum, std::string path, std::string name, UInt32 checksum, double dsize, double ssize) {} + virtual void defineVFChar (UInt32 c, std::vector *dvi) {} +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VFReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VFReader.cpp new file mode 100644 index 00000000000..57660c99825 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VFReader.cpp @@ -0,0 +1,190 @@ +/************************************************************************* +** VFReader.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include "Font.h" +#include "VFActions.h" +#include "VFReader.h" +#include "macros.h" + +using namespace std; + + +/** Converts a TFM fix point value to double. */ +inline static double fix2double (FixWord fix) { + return double(fix)/(1 << 20); +} + + +VFReader::VFReader (istream &is) + : StreamReader(is), actions(0) { +} + + +VFReader::~VFReader () { +} + + +VFActions* VFReader::replaceActions (VFActions *a) { + VFActions *ret = actions; + actions = a; + return ret; +} + + +/** Reads a single VF command from the current position of the input stream and calls the + * corresponding cmdFOO method. The execution can be influenced by a function of type ApproveOpcode. + * It takes an opcode and returns true if the command is supposed to be executed. + * @param[in] approve function to approve invocation of the action assigned to command + * @return opcode of the executed command */ +int VFReader::executeCommand (ApproveAction approve) { + int opcode = in().get(); + if (!in() || opcode < 0) // at end of file + throw VFException("invalid file"); + + bool approved = !approve || approve(opcode); + VFActions *act = actions; + if (!approved) + replaceActions(0); // disable actions + + if (opcode <= 241) // short character definition? + cmdShortChar(opcode); + else if (opcode >= 243 && opcode <= 246) // font definition? + cmdFontDef(opcode-243+1); + else { + switch (opcode) { + case 242: cmdLongChar(); break; // long character definition + case 247: cmdPre(); break; // preamble + case 248: cmdPost(); break; // postamble + default : { // invalid opcode + replaceActions(act); // reenable actions + ostringstream oss; + oss << "undefined VF command (opcode " << opcode << ')'; + throw VFException(oss.str()); + } + } + } + replaceActions(act); // reenable actions + return opcode; +} + + +bool VFReader::executeAll () { + in().clear(); // reset all status bits + if (!in()) + return false; + in().seekg(0); // move file pointer to first byte of the input stream + while (!in().eof() && executeCommand() != 248); // stop reading after post (248) + return true; +} + + +/// Returns true if op indicates the preamble or a font definition +static bool is_pre_or_fontdef (int op) {return op > 242;} +static bool is_chardef (int op) {return op < 243;} + + +bool VFReader::executePreambleAndFontDefs () { + in().clear(); + if (!in()) + return false; + in().seekg(0); // move file pointer to first byte of the input stream + while (!in().eof() && executeCommand(is_pre_or_fontdef) > 242); // stop reading after last font definition + return true; +} + + +bool VFReader::executeCharDefs () { + in().clear(); + if (!in()) + return false; + in().seekg(0); + while (!in().eof() && executeCommand(is_chardef) < 243); // stop reading after last char definition + return true; +} + +////////////////////////////////////////////////////////////////////////////// + +/** Reads and executes DVI preamble command. */ +void VFReader::cmdPre () { + UInt32 i = readUnsigned(1); // identification number (should be 2) + UInt32 k = readUnsigned(1); // length of following comment + string cmt = readString(k); // comment + UInt32 cs = readUnsigned(4); // check sum to be compared with TFM cecksum + UInt32 ds = readUnsigned(4); // design size (same as TFM design size) (fix_word) + designSize = fix2double(ds); + if (i != 202) + throw VFException("invalid identification value in preamble"); + if (actions) + actions->preamble(cmt, cs, ds); +} + + +void VFReader::cmdPost () { + while ((readUnsigned(1)) == 248); // skip fill bytes + if (actions) + actions->postamble(); +} + + +void VFReader::cmdLongChar () { + UInt32 pl = readUnsigned(4); // packet length (length of DVI subroutine) + if (actions) { + UInt32 cc = readUnsigned(4); // character code + readUnsigned(4); // character width from corresponding TFM file + vector *dvi = new vector(pl); // DVI subroutine + readBytes(pl, *dvi); + actions->defineVFChar(cc, dvi); // call template method for user actions + } + else + in().seekg(8+pl, ios::cur); // skip remaining char definition bytes +} + + +/** Reads and executes short_char_x command. + * @param[in] pl packet length (length of DVI subroutine) */ +void VFReader::cmdShortChar (int pl) { + if (actions) { + UInt32 cc = readUnsigned(1); // character code + readUnsigned(3); // character width from corresponding TFM file + vector *dvi = new vector(pl); // DVI subroutine + readBytes(pl, *dvi); + actions->defineVFChar(cc, dvi); // call template method for user actions + } + else + in().seekg(4+pl, ios::cur); // skip char definition bytes +} + + +void VFReader::cmdFontDef (int len) { + UInt32 fontnum = readUnsigned(len); // font number + UInt32 checksum = readUnsigned(4); // font checksum (to be compared with corresponding TFM checksum) + UInt32 ssize = readUnsigned(4); // scaled size of font relative to design size (fix_word) + UInt32 dsize = readUnsigned(4); // design size of font (same as TFM design size) (fix_word) + UInt32 pathlen = readUnsigned(1); // length of font path + UInt32 namelen = readUnsigned(1); // length of font name + string fontpath = readString(pathlen); + string fontname = readString(namelen); + if (actions) { + double ss = fix2double(ssize); + double ds = fix2double(dsize); + actions->defineVFFont(fontnum, fontpath, fontname, checksum, ds, ss*designSize); + } +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VFReader.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VFReader.h new file mode 100644 index 00000000000..22e51f30a0e --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VFReader.h @@ -0,0 +1,65 @@ +/************************************************************************* +** VFReader.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef VFREADER_H +#define VFREADER_H + +#include "MessageException.h" +#include "StreamReader.h" +#include "types.h" + + +struct VFException : public MessageException +{ + VFException (const std::string &msg) : MessageException(msg) {} +}; + + +class VFActions; + + +class VFReader : public StreamReader +{ + typedef bool (*ApproveAction)(int); + public: + VFReader (std::istream &is); + virtual ~VFReader (); + VFActions* replaceActions (VFActions *a); + bool executeAll (); + bool executePreambleAndFontDefs (); + bool executeCharDefs (); + + protected: + int executeCommand (ApproveAction approve=0); + + // the following methods represent the VF commands + // they are called by executeCommand and should not be used directly + void cmdPre (); + void cmdPost (); + void cmdShortChar (int pl); + void cmdLongChar (); + void cmdFontDef (int len); + + private: + VFActions *actions; ///< actions to execute when reading a VF command + double designSize; ///< design size of currently read VF +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VectorStream.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VectorStream.h new file mode 100644 index 00000000000..228089db9b2 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/VectorStream.h @@ -0,0 +1,46 @@ +/************************************************************************* +** VectorStream.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef VECTORSTREAM_H +#define VECTORSTREAM_H + +#include +#include + + +template +struct VectorStreamBuffer : public std::streambuf +{ + VectorStreamBuffer (std::vector &source) { + setg((char*)&source[0], (char*)&source[0], (char*)&source[0]+source.size()); + } +}; + + +template +class VectorInputStream : public std::istream +{ + public: + VectorInputStream (std::vector &source) : std::istream(&buf), buf(source) {} + private: + VectorStreamBuffer buf; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLDocTypeNode.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLDocTypeNode.h new file mode 100644 index 00000000000..490d398b6b7 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLDocTypeNode.h @@ -0,0 +1,41 @@ +/************************************************************************* +** XMLDocTypeNode.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef XMLDOCTYPENODE_H +#define XMLDOCTYPENODE_H + +#include "XMLNode.h" + +class XMLDocTypeNode : public XMLDeclarationNode +{ + public: + XMLDocTypeNode (const std::string &rootName, const std::string &type, const std::string ¶m) + : XMLDeclarationNode("DOCTYPE", rootName + " " + type + " " + param) {} +}; + + +class XMLEntityNode : public XMLDeclarationNode +{ + public: + XMLEntityNode (const std::string &n, const std::string &v) + : XMLDeclarationNode("ENTITY", n + " " + v) {} +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLDocument.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLDocument.cpp new file mode 100644 index 00000000000..39973266a7c --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLDocument.cpp @@ -0,0 +1,100 @@ +/************************************************************************* +** XMLDocument.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include "macros.h" +#include "XMLDocument.h" + +using namespace std; + +XMLDocument::XMLDocument (XMLElementNode *root) + : rootElement(root), emitted(false) +{ +} + + +XMLDocument::~XMLDocument () { + clear(); +} + + +void XMLDocument::clear () { + delete rootElement; + rootElement = 0; + FORALL(nodes, list::iterator, i) + delete *i; + nodes.clear(); +} + + +void XMLDocument::append (XMLNode *node) { + if (!node) + return; + XMLElementNode *newRoot = dynamic_cast(node); + if (newRoot) { // there can only be one root element node in the document + delete rootElement; // so if there is already one... + rootElement = newRoot; // ...we replace it + } + else + nodes.push_back(node); +} + + +void XMLDocument::setRootNode (XMLElementNode *root) { + delete rootElement; + rootElement = root; +} + + +ostream& XMLDocument::write (ostream &os) const { + if (rootElement) { // no root element => no output + os << "\n"; + FORALL(nodes, list::const_iterator, i) + (*i)->write(os); + rootElement->write(os); + } + return os; +} + +/** Writes a part of the XML document to the given output stream and removes + * the completely written nodes. The output stops when a stop node is reached + * (this node won't be printed at all). If a node was only partly emitted, i.e. + * its child was the stop node, a further call of emit will continue the output. + * @param[in] os stream to which the output is written + * @param[in] stopElement node where emitting stops (if 0 the whole tree will be emitted) + * @return true if node was completely emitted */ +bool XMLDocument::emit (ostream& os, XMLNode *stopNode) { + if (rootElement) { // no root element => no output + if (!emitted) { + os << "\n"; + emitted = true; + } + FORALL(nodes, list::iterator, i) { + if ((*i)->emit(os, stopNode)) { + list::iterator it = i++; // prevent i from being invalidated... + nodes.erase(it); // ... by erase + --i; // @@ what happens if i points to first child? + } + else + return false; + } + return rootElement->emit(os, stopNode); + } + return true; +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLDocument.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLDocument.h new file mode 100644 index 00000000000..8adab2fb0dd --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLDocument.h @@ -0,0 +1,44 @@ +/************************************************************************* +** XMLDocument.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef XMLDOCUMENT_H +#define XMLDOCUMENT_H + +#include "XMLNode.h" + +class XMLDocument +{ + public: + XMLDocument (XMLElementNode *root=0); + ~XMLDocument (); + void clear (); + void append (XMLNode *node); + void setRootNode (XMLElementNode *root); + const XMLElementNode* getRootElement () const {return rootElement;} + std::ostream& write (std::ostream &os) const; + bool emit (std::ostream& os, XMLNode *stopNode); + + private: + std::list nodes; + XMLElementNode *rootElement; + bool emitted; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLNode.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLNode.cpp new file mode 100644 index 00000000000..3e5aa93ca62 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLNode.cpp @@ -0,0 +1,293 @@ +/************************************************************************* +** XMLNode.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include "macros.h" +#include "XMLNode.h" +#include "XMLString.h" + +using namespace std; + +bool XMLNode::emit (ostream &os, XMLNode *stopNode) { + if (this == stopNode) + return false; + write(os); + return true; +} + + +XMLElementNode::XMLElementNode (const string &n) : _name(n), _emitted(false) { +} + + +XMLElementNode::~XMLElementNode () { + FORALL(_children, ChildList::iterator, i) + delete *i; +} + + +void XMLElementNode::addAttribute (const string &name, const string &value) { + _attributes[name] = value; +} + + +void XMLElementNode::addAttribute (const string &name, double value) { + _attributes[name] = XMLString(value); +} + + +void XMLElementNode::append (XMLNode *child) { + if (!child) + return; + XMLTextNode *textNode1 = dynamic_cast(child); + if (!textNode1 || _children.empty()) + _children.push_back(child); + else { + if (XMLTextNode *textNode2 = dynamic_cast(_children.back())) + textNode2->append(textNode1); // merge two consecutive text nodes + else + _children.push_back(child); + } +} + + +void XMLElementNode::append (const string &str) { + if (_children.empty() || !dynamic_cast(_children.back())) + _children.push_back(new XMLTextNode(str)); + else + static_cast(_children.back())->append(str); +} + + +void XMLElementNode::prepend (XMLNode *child) { + if (!child) + return; + XMLTextNode *textNode1 = dynamic_cast(child); + if (!textNode1 || _children.empty()) + _children.push_front(child); + else { + if (XMLTextNode *textNode2 = dynamic_cast(_children.back())) + textNode2->prepend(textNode1); // merge two consecutive text nodes + else + _children.push_front(child); + } +} + + +/** Inserts a new child node before a given child node already present. The latter + * will be the following sibling of the node to be inserted. If there's no such + * node present, nothing is inserted. + * @param[in] child node to be inserted + * @param[in] sibling following sibling of 'child' + * @return true on success */ +bool XMLElementNode::insertBefore (XMLNode *child, XMLNode *sibling) { + ChildList::iterator it = _children.begin(); + while (it != _children.end() && *it != sibling) + ++it; + if (it != _children.end()) { + _children.insert(it, child); + return true; + } + return false; +} + + +/** Inserts a new child node after a given child node already present. The latter + * will be the preceding sibling of the node to be inserted. If there's no such + * node present, nothing is inserted. + * @param[in] child node to be inserted + * @param[in] sibling preceding sibling of 'child' + * @return true on success */ +bool XMLElementNode::insertAfter (XMLNode *child, XMLNode *sibling) { + ChildList::iterator it = _children.begin(); + while (it != _children.end() && *it != sibling) + ++it; + if (it != _children.end()) { + _children.insert(++it, child); + return true; + } + return false; +} + + +ostream& XMLElementNode::write (ostream &os) const { + os << '<' << _name; + FORALL(_attributes, AttribMap::const_iterator, i) + os << ' ' << i->first << "='" << i->second << '\''; + if (_children.empty()) + os << "/>\n"; + else { + os << '>'; + if (dynamic_cast(_children.front())) + os << '\n'; + FORALL(_children, ChildList::const_iterator, i) + (*i)->write(os); + os << "\n"; + } + return os; +} + + +/** Writes a part of the XML tree to the given output stream and removes + * the completely written nodes. The output stops when a stop node is reached + * (this node won't be printed at all). If a node was only partly emitted, i.e. + * its child was the stop node, a further call of emit will continue the output. + * @param[in] os stream to which the output is sent to + * @param[in] stopElement node where emitting stops (if 0 the whole tree will be emitted) + * @return true if node was emitted completely */ +bool XMLElementNode::emit (ostream &os, XMLNode *stopNode) { + if (this == stopNode) + return false; + + if (!_emitted) { + os << '<' << _name; + FORALL(_attributes, AttribMap::iterator, i) + os << ' ' << i->first << "='" << i->second << '\''; + if (_children.empty()) + os << "/>\n"; + else { + os << '>'; + if (dynamic_cast(_children.front())) + os << '\n'; + } + + _emitted = true; + } + if (!_children.empty()) { + FORALL(_children, ChildList::iterator, i) { + if ((*i)->emit(os, stopNode)) { + ChildList::iterator it = i++; // prevent i from being invalidated... + _children.erase(it); // ... by erase + --i; // @@ what happens if i points to first child? + } + else + return false; + } + os << "\n"; + } + return true; +} + + +/** Returns true if this element has an attribute of given name. */ +bool XMLElementNode::hasAttribute (const string &name) const { + return _attributes.find(name) != _attributes.end(); +} + + +////////////////////// + +void XMLTextNode::append (XMLNode *node) { + if (XMLTextNode *tn = dynamic_cast(node)) + append(tn); + else + delete node; +} + + +void XMLTextNode::append (XMLTextNode *node) { + if (node) + _text += node->_text; + delete node; +} + + +void XMLTextNode::append (const string &str) { + _text += str; +} + + +void XMLTextNode::prepend (XMLNode *node) { + if (XMLTextNode *tn = dynamic_cast(node)) + prepend(tn); + else + delete node; +} + + +////////////////////// + +XMLDeclarationNode::XMLDeclarationNode (const string &n, const string &p) + : _name(n), _params(p), _emitted(false) +{ +} + + +XMLDeclarationNode::~XMLDeclarationNode () { + FORALL(_children, list::iterator, i) + delete *i; +} + +void XMLDeclarationNode::append (XMLDeclarationNode *child) { + if (child) + _children.push_back(child); +} + +ostream& XMLDeclarationNode::write (ostream &os) const { + os << "\n"; + else { + os << "[\n"; + FORALL(_children, list::const_iterator, i) + (*i)->write(os); + os << "]>\n"; + } + return os; +} + + +bool XMLDeclarationNode::emit (ostream &os, XMLNode *stopNode) { + if (this == stopNode) + return false; + + if (!_emitted) { + os << "\n"; + else + os << "[\n"; + _emitted = true; + } + if (!_children.empty()) { + FORALL(_children, list::iterator, i) { + if ((*i)->emit(os, stopNode)) { + list::iterator it = i++; // prevent i from being invalidated... + _children.erase(it); // ... by erase + --i; // @@ what happens if i points to first child? + } + else + return false; + } + os << "]>\n"; + } + return true; + +} + +////////////////////// + +ostream& XMLCDataNode::write (ostream &os) const { + os << "\n"; + return os; +} + + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLNode.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLNode.h new file mode 100644 index 00000000000..e4576e9d830 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLNode.h @@ -0,0 +1,124 @@ +/************************************************************************* +** XMLNode.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef XMLNODE_H +#define XMLNODE_H + +#include +#include +#include +#include + +#include "SpecialActions.h" + + +struct XMLNode +{ + virtual ~XMLNode () {} + virtual std::ostream& write (std::ostream &os) const =0; + virtual bool emit (std::ostream &os, XMLNode *stopElement); + virtual void append (XMLNode *child) {} + virtual void prepend (XMLNode *child) {} +}; + + +class XMLElementNode : public XMLNode +{ + typedef std::map AttribMap; + typedef std::list ChildList; + public: + XMLElementNode (const std::string &name); + ~XMLElementNode (); + void addAttribute (const std::string &name, const std::string &value); + void addAttribute (const std::string &name, double value); + void append (XMLNode *child); + void append (const std::string &str); + void prepend (XMLNode *child); + bool insertAfter (XMLNode *child, XMLNode *sibling); + bool insertBefore (XMLNode *child, XMLNode *sibling); + bool hasAttribute (const std::string &name) const; + std::ostream& write (std::ostream &os) const; + bool emit (std::ostream &os, XMLNode *stopElement); + bool empty () const {return _children.empty();} + const std::list& children () const {return _children;} + const std::string& getName () const {return _name;} + + private: + std::string _name; // element name (...) + AttribMap _attributes; + ChildList _children; // child nodes + bool _emitted; // true if node has been (partly) emitted +}; + + +class XMLTextNode : public XMLNode +{ + public: + XMLTextNode (const std::string &str) : _text(str) {} + void append (XMLNode *node); + void append (XMLTextNode *node); + void append (const std::string &str); + void prepend (XMLNode *child); + std::ostream& write (std::ostream &os) const {return os << _text;} + + private: + std::string _text; +}; + + +class XMLCommentNode : public XMLNode +{ + public: + XMLCommentNode (const std::string &str) : _text(str) {} + std::ostream& write (std::ostream &os) const {return os << "\n";} + + private: + std::string _text; +}; + + +class XMLDeclarationNode : public XMLNode +{ + public: + XMLDeclarationNode (const std::string &n, const std::string &p); + ~XMLDeclarationNode (); + void append (XMLDeclarationNode *child); + std::ostream& write (std::ostream &os) const; + bool emit (std::ostream &os, XMLNode *stopElement); + + private: + std::string _name; + std::string _params; + std::list _children; + bool _emitted; +}; + + +class XMLCDataNode : public XMLNode +{ + public: + XMLCDataNode (const std::string &d) : _data(d) {} + std::ostream& write (std::ostream &os) const; + + private: + std::string _data; +}; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLString.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLString.cpp new file mode 100644 index 00000000000..630736b29f0 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLString.cpp @@ -0,0 +1,102 @@ +/************************************************************************* +** XMLString.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include "macros.h" +#include "XMLString.h" + +using namespace std; + +static string translate (unsigned c) { + switch (c) { + case '<' : return "<"; + case '&' : return "&"; + case '"' : return """; + case '\'': return "'"; + } + ostringstream oss; + if (c >= 32 && c <= 126) + oss << char(c); + else + oss <<"&#" << unsigned(c) << ';'; + return oss.str(); +} + + +XMLString::XMLString (const string &str, bool plain) { + if (plain) + *this = str; + else { + FORALL(str, string::const_iterator, i) + *this += translate(*i); + } +} + + +XMLString::XMLString (const char *str, bool plain) { + if (str) { + if (plain) + *this = str; + else { + while (*str) + *this += translate(*str++); + } + } +} + + +XMLString::XMLString (int n, bool cast) { + if (cast) { + stringstream ss; + ss << n; + ss >> *this; + } + else + *this += translate(n); +} + + +XMLString::XMLString (double x) { + stringstream ss; + ss << x; + ss >> *this; +} + + +/* +ostream& XMLString::write (ostream &os) const { + const string *self = static_cast(this); + FORALL(*self, string::const_iterator, i) { + unsigned char c = *i; + switch (c) { + case '<' : os << "<"; break; + case '&' : os << "&"; break; + case '"' : os << """; break; + case '\'': os << "'"; break; + default : + if (c >= 32 && c <= 126) + os << c; + else + os << "&#" << int(c) << ';'; + } + } + return os; +} +*/ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLString.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLString.h new file mode 100644 index 00000000000..2f669e21fb7 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/XMLString.h @@ -0,0 +1,38 @@ +/************************************************************************* +** XMLString.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef XMLSTRING_H +#define XMLSTRING_H + +#include + + +class XMLString : public std::string +{ + public: + XMLString () : std::string() {} + XMLString (const char *str, bool plain=false); + XMLString (const std::string &str, bool plain=false); + XMLString (int n, bool cast=true); + XMLString (double x); +}; + + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/dvisvgm.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/dvisvgm.cpp new file mode 100644 index 00000000000..02b9cb1457c --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/dvisvgm.cpp @@ -0,0 +1,385 @@ +/************************************************************************* +** dvisvgm.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include "gzstream.h" +#include "CommandLine.h" +#include "DVIToSVG.h" +#include "DVIToSVGActions.h" +#include "FilePath.h" +#include "FileSystem.h" +#include "Font.h" +#include "FontCache.h" +#include "FontEngine.h" +#include "Ghostscript.h" +#include "InputReader.h" +#include "Message.h" +#include "FileFinder.h" +#include "PageSize.h" +#include "SignalHandler.h" +#include "SpecialManager.h" +#include "System.h" + +#ifdef HAVE_CONFIG_H +#include "config.h" +#else +#define TARGET_SYSTEM "" +#endif + +#ifdef __MSVC__ +#include +#else +extern "C" { +#include +} +#endif + +using namespace std; + +class SVGOutput : public DVIToSVG::Output +{ + public: + SVGOutput (const char *base=0, string pattern="", int zip_level=0) + : _path(base ? base : ""), + _pattern(pattern), + _stdout(base == 0), + _zipLevel(zip_level), + _page(-1), + _os(0) {} + + + ~SVGOutput () { + delete _os; + } + + + /** Returns an output stream for the given page. + * @param[in] page number of current page + * @param[in] numPages total number of pages in the DVI file + * @return output stream for the given page */ + ostream& getPageStream (int page, int numPages) const { + string fname = filename(page, numPages); + if (fname.empty()) { + delete _os; + _os = 0; + return cout; + } + if (page == _page) + return *_os; + + _page = page; + delete _os; + + if (_zipLevel > 0) + _os = new ogzstream(fname.c_str(), _zipLevel); + else + _os = new ofstream(fname.c_str()); + if (!_os || !*_os) { + delete _os; + _os = 0; + throw MessageException("can't open file "+fname+" for writing"); + } + return *_os; + } + + + /** Returns the name of the SVG file containing the given page. + * @param[in] page number of page */ + string filename (int page, int numPages) const { + if (_stdout) + return ""; + string fname = _pattern; + if (fname.empty()) + fname = numPages > 1 ? "%f-%p" : "%f"; + else if (numPages > 1 && fname.find("%p") == string::npos) + fname += FileSystem::isDirectory(fname.c_str()) ? "/%f-%p" : "-%p"; + + // replace pattern variables by their actual values + // %f: basename of the DVI file + // %p: current page number + ostringstream oss; + oss << setfill('0') << setw(max(2, int(1+log10((double)numPages)))) << page; + size_t pos=0; + while ((pos = fname.find('%', pos)) != string::npos && pos < fname.length()-1) { + switch (fname[pos+1]) { + case 'f': fname.replace(pos, 2, _path.basename()); pos += _path.basename().length(); break; + case 'p': fname.replace(pos, 2, oss.str()); pos += oss.str().length(); break; + default : ++pos; + } + } + FilePath outpath(fname, true); + if (outpath.suffix().empty()) + outpath.suffix(_zipLevel > 0 ? "svgz" : "svg"); + string apath = outpath.absolute(); + string rpath = outpath.relative(); + return apath.length() < rpath.length() ? apath : rpath; + } + + private: + FilePath _path; + string _pattern; + bool _stdout; + int _zipLevel; + mutable int _page; // number of current page being written + mutable ostream *_os; +}; + + +static void show_help (const CommandLine &cmd) { + cout << PACKAGE_STRING "\n\n"; + cmd.help(); + cout << "\nCopyright (C) 2005-2011 Martin Gieseking \n\n"; +} + + +static string remove_path (string fname) { + fname = FileSystem::adaptPathSeperators(fname); + size_t slashpos = fname.rfind('/'); + if (slashpos == string::npos) + return fname; + return fname.substr(slashpos+1); +} + + +static string ensure_suffix (string fname, const string &suffix) { + size_t dotpos = remove_path(fname).rfind('.'); + if (dotpos == string::npos) { + dotpos = fname.length(); + fname += "."+suffix; + } + return fname; +} + + +static void set_trans (DVIToSVG &dvisvg, const CommandLine &args) { + ostringstream oss; + if (args.rotate_given()) + oss << 'R' << args.rotate_arg() << ",w/2,h/2"; + if (args.translate_given()) + oss << 'T' << args.translate_arg(); + if (args.scale_given()) + oss << 'S' << args.scale_arg(); + if (args.transform_given()) + oss << args.transform_arg(); + dvisvg.setTransformation(oss.str()); +} + + +static void set_libgs (CommandLine &args) { +#if !defined(DISABLE_GS) && !defined(HAVE_LIBGS) + if (args.libgs_given()) + Ghostscript::LIBGS_NAME = args.libgs_arg(); + else if (getenv("LIBGS")) + Ghostscript::LIBGS_NAME = getenv("LIBGS"); +#endif +} + + +static bool set_cache_dir (const CommandLine &args) { + if (args.cache_given() && !args.cache_arg().empty()) { + if (args.cache_arg() == "none") + PhysicalFont::CACHE_PATH = 0; + else if (FileSystem::exists(args.cache_arg().c_str())) + PhysicalFont::CACHE_PATH = args.cache_arg().c_str(); + else + Message::wstream(true) << "cache directory '" << args.cache_arg() << "' does not exist (caching disabled)\n"; + } + else { + if (const char *userdir = FileSystem::userdir()) { + static string path = userdir; + path += "/.dvisvgm"; + path = FileSystem::adaptPathSeperators(path); + const string cachepath = path+"/cache"; + if (!FileSystem::exists(cachepath.c_str())) { + if (!FileSystem::exists(path.c_str())) + FileSystem::mkdir(cachepath.c_str()); + else { + FileSystem::mkdir(cachepath.c_str()); + // move existing cache files from former location to new one + vector files; + FileSystem::collect(path.c_str(), files); + FORALL(files, vector::iterator, it) { + if (it->at(0) == 'f' && it->length() > 4 && it->substr(it->length()-4, 4) == ".fgd") { + const char *fname = it->c_str()+1; + FileSystem::copy(path+"/"+fname, cachepath+"/"+fname, true); + } + } + } + } + path = cachepath; + PhysicalFont::CACHE_PATH = path.c_str(); + } + if (args.cache_given() && args.cache_arg().empty()) { + cout << "cache directory: " << (PhysicalFont::CACHE_PATH ? PhysicalFont::CACHE_PATH : "(none)") << '\n'; + FontCache::fontinfo(PhysicalFont::CACHE_PATH, cout, true); + return false; + } + } + return true; +} + + +static bool check_bbox (const string &bboxstr) { + const char *formats[] = {"none", "min", "dvi", 0}; + for (const char **p=formats; *p; ++p) + if (bboxstr == *p) + return true; + if (isalpha(bboxstr[0])) { + try { + PageSize size(bboxstr); + return true; + } + catch (const PageSizeException &e) { + Message::estream(true) << "invalid bounding box format '" << bboxstr << "'\n"; + return false; + } + } + try { + BoundingBox bbox; + bbox.set(bboxstr); + return true; + } + catch (const MessageException &e) { + Message::estream(true) << e.what() << '\n'; + return false; + } +} + + +static void print_version (bool extended) { + ostringstream oss; + oss << PACKAGE_STRING; + if (extended) { + oss << " (" TARGET_SYSTEM ")\n"; + oss << string(oss.str().length()-1, '-') << "\n" + "freetype: " << FontEngine::version() << "\n" +#ifdef MIKTEX + "MiKTeX: " << FileFinder::version() << "\n" +#else + "kpathsea: " << FileFinder::version() << "\n" +#endif + "potrace: " << (strchr(potrace_version(), ' ') ? strchr(potrace_version(), ' ')+1 : "unknown") << "\n" + "zlib: " << zlibVersion(); + } + cout << oss.str() << endl; +} + + +int main (int argc, char *argv[]) { + CommandLine args; + args.parse(argc, argv); + if (args.error()) + return 1; + + Message::COLORIZE = args.color_given(); + + set_libgs(args); + if (args.version_given()) { + print_version(args.version_arg()); + return 0; + } + if (args.list_specials_given()) { + SVGOutput out; + DVIToSVG dvisvg(cin, out); + if (const SpecialManager *sm = dvisvg.setProcessSpecials()) + sm->writeHandlerInfo(cout); + return 0; + } + + if (!set_cache_dir(args)) + return 0; + + if (argc == 1 || args.help_given()) { + show_help(args); + return 0; + } + + if (argc > 1 && args.numFiles() < 1) { + Message::estream(true) << "no input file given\n"; + return 1; + } + + if (args.stdout_given() && args.zip_given()) { + Message::estream(true) << "writing SVGZ files to stdout is not supported\n"; + return 1; + } + + if (!check_bbox(args.bbox_arg())) + return 1; + + if (args.progress_given()) { + DVIReader::COMPUTE_PAGE_LENGTH = args.progress_given(); + DVIToSVGActions::PROGRESSBAR_DELAY = args.progress_arg(); + } + SVGTree::CREATE_STYLE = !args.no_styles_given(); + SVGTree::USE_FONTS = !args.no_fonts_given(); + SVGTree::CREATE_USE_ELEMENTS = args.no_fonts_arg() < 1; + DVIToSVGActions::EXACT_BBOX = args.exact_given(); + DVIToSVG::TRACE_MODE = args.trace_all_given() ? (args.trace_all_arg() ? 'a' : 'm') : 0; + PhysicalFont::KEEP_TEMP_FILES = args.keep_given(); + PhysicalFont::METAFONT_MAG = args.mag_arg(); + + double start_time = System::time(); + string dvifile = ensure_suffix(args.file(0), "dvi"); + ifstream ifs(dvifile.c_str(), ios_base::binary|ios_base::in); + if (!ifs) + Message::estream(true) << "can't open file '" << dvifile << "' for reading\n"; + else { + SVGOutput out(args.stdout_given() ? 0 : dvifile.c_str(), args.output_arg(), args.zip_given() ? args.zip_arg() : 0); + Message::LEVEL = args.verbosity_arg(); + DVIToSVG dvisvg(ifs, out); + const char *ignore_specials = args.no_specials_given() ? (args.no_specials_arg().empty() ? "*" : args.no_specials_arg().c_str()) : 0; + dvisvg.setProcessSpecials(ignore_specials); + set_trans(dvisvg, args); + dvisvg.setPageSize(args.bbox_arg()); + + try { + const char *usermap = args.map_file_given() ? args.map_file_arg().c_str() : 0; + FileFinder::init(argv[0], !args.no_mktexmf_given(), usermap); + pair pageinfo; + SignalHandler::instance().start(); + dvisvg.convert(args.page_arg(), &pageinfo); + Message::mstream().indent(0); + Message::mstream(false, Message::MC_PAGE_NUMBER) << "\n" << pageinfo.first << " of " << pageinfo.second << " page"; + if (pageinfo.second > 1) + Message::mstream(false, Message::MC_PAGE_NUMBER) << 's'; + Message::mstream(false, Message::MC_PAGE_NUMBER) << " converted in " << (System::time()-start_time) << " seconds"; + Message::mstream(false) << "\n"; + + } + catch (DVIException &e) { + Message::estream() << "\nDVI error: " << e.what() << '\n'; + } + catch (SignalException &e) { + Message::wstream(true) << "execution interrupted by user\n"; + } + catch (MessageException &e) { + Message::estream(true) << e.what() << '\n'; + } + } + FileFinder::finish(); + return 0; +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/gzstream.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/gzstream.cpp new file mode 100644 index 00000000000..2893c299891 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/gzstream.cpp @@ -0,0 +1,172 @@ +// ============================================================================ +// gzstream, C++ iostream classes wrapping the zlib compression library. +// Copyright (C) 2001 Deepak Bandyopadhyay, Lutz Kettner +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// ============================================================================ +// +// File : gzstream.C +// Revision : $Revision: 1.3 $ +// Revision_date : $Date: 2006/01/05 16:22:35 $ +// Author(s) : Deepak Bandyopadhyay, Lutz Kettner +// +// Standard streambuf implementation following Nicolai Josuttis, "The +// Standard C++ Library". +// ============================================================================ + +#include "gzstream.h" +#include +#include // for memcpy + +#ifdef GZSTREAM_NAMESPACE +namespace GZSTREAM_NAMESPACE { +#endif + +const int gzstreambuf::bufferSize = 47+256; // size of data buff + +// ---------------------------------------------------------------------------- +// Internal classes to implement gzstream. See header file for user classes. +// ---------------------------------------------------------------------------- + +// -------------------------------------- +// class gzstreambuf: +// -------------------------------------- + +gzstreambuf* gzstreambuf::open(const char* name, int compression_level, int open_mode) { + if ( is_open()) + return (gzstreambuf*)0; + mode = open_mode; + // no append nor read/write mode + if ((mode & std::ios::ate) || (mode & std::ios::app) + || ((mode & std::ios::in) && (mode & std::ios::out))) + return (gzstreambuf*)0; + if (compression_level < 1) + compression_level = 1; + else if (compression_level > 9) + compression_level = 9; + char fmode[10]; + char* fmodeptr = fmode; + if ( mode & std::ios::in) + *fmodeptr++ = 'r'; + else if ( mode & std::ios::out) + *fmodeptr++ = 'w'; + *fmodeptr++ = 'b'; + *fmodeptr++ = '0'+compression_level; + *fmodeptr = '\0'; + file = gzopen( name, fmode); + if (file == 0) + return (gzstreambuf*)0; + opened = 1; + return this; +} + +gzstreambuf * gzstreambuf::close() { + if ( is_open()) { + sync(); + opened = 0; + if ( gzclose( file) == Z_OK) + return this; + } + return (gzstreambuf*)0; +} + +int gzstreambuf::underflow() { // used for input buffer only + if ( gptr() && ( gptr() < egptr())) + return * reinterpret_cast( gptr()); + + if ( ! (mode & std::ios::in) || ! opened) + return EOF; + // Josuttis' implementation of inbuf + int n_putback = gptr() - eback(); + if ( n_putback > 4) + n_putback = 4; + memcpy( buffer + (4 - n_putback), gptr() - n_putback, n_putback); + + int num = gzread( file, buffer+4, bufferSize-4); + if (num <= 0) // ERROR or EOF + return EOF; + + // reset buffer pointers + setg( buffer + (4 - n_putback), // beginning of putback area + buffer + 4, // read position + buffer + 4 + num); // end of buffer + + // return next character + return * reinterpret_cast( gptr()); +} + +int gzstreambuf::flush_buffer() { + // Separate the writing of the buffer from overflow() and + // sync() operation. + int w = pptr() - pbase(); + if ( gzwrite( file, pbase(), w) != w) + return EOF; + pbump( -w); + return w; +} + +int gzstreambuf::overflow( int c) { // used for output buffer only + if ( ! ( mode & std::ios::out) || ! opened) + return EOF; + if (c != EOF) { + *pptr() = c; + pbump(1); + } + if ( flush_buffer() == EOF) + return EOF; + return c; +} + +int gzstreambuf::sync() { + // Changed to use flush_buffer() instead of overflow( EOF) + // which caused improper behavior with std::endl and flush(), + // bug reported by Vincent Ricard. + if ( pptr() && pptr() > pbase()) { + if ( flush_buffer() == EOF) + return -1; + } + return 0; +} + +// -------------------------------------- +// class gzstreambase: +// -------------------------------------- + +gzstreambase::gzstreambase( const char* name, int compression_level, int mode) { + init( &buf); + open( name, compression_level, mode); +} + +gzstreambase::~gzstreambase() { + buf.close(); +} + +void gzstreambase::open( const char* name, int compression_level, int open_mode) { + if ( ! buf.open( name, compression_level, open_mode)) + clear( rdstate() | std::ios::badbit); +} + +void gzstreambase::close() { + if ( buf.is_open()) + if ( ! buf.close()) + clear( rdstate() | std::ios::badbit); +} + +#ifdef GZSTREAM_NAMESPACE +} // namespace GZSTREAM_NAMESPACE +#endif + +// ============================================================================ +// EOF // diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/gzstream.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/gzstream.h new file mode 100644 index 00000000000..60f38c4fac7 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/gzstream.h @@ -0,0 +1,121 @@ +// ============================================================================ +// gzstream, C++ iostream classes wrapping the zlib compression library. +// Copyright (C) 2001 Deepak Bandyopadhyay, Lutz Kettner +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// ============================================================================ +// +// File : gzstream.h +// Revision : $Revision: 1.3 $ +// Revision_date : $Date: 2006/01/05 16:22:35 $ +// Author(s) : Deepak Bandyopadhyay, Lutz Kettner +// +// Standard streambuf implementation following Nicolai Josuttis, "The +// Standard C++ Library". +// ============================================================================ + +#ifndef GZSTREAM_H +#define GZSTREAM_H 1 + +// standard C++ with new header file names and std:: namespace +#include +#include +#include + +#ifdef GZSTREAM_NAMESPACE +namespace GZSTREAM_NAMESPACE { +#endif + +// ---------------------------------------------------------------------------- +// Internal classes to implement gzstream. See below for user classes. +// ---------------------------------------------------------------------------- + +class gzstreambuf : public std::streambuf { +private: + static const int bufferSize; // size of data buff + // totals 512 bytes under g++ for igzstream at the end. + + gzFile file; // file handle for compressed file + char buffer[47+256]; // data buffer + char opened; // open/close state of stream + int mode; // I/O mode + + int flush_buffer(); +public: + gzstreambuf() : opened(0) { + setp( buffer, buffer + (bufferSize-1)); + setg( buffer + 4, // beginning of putback area + buffer + 4, // read position + buffer + 4); // end position + // ASSERT: both input & output capabilities will not be used together + } + int is_open() { return opened; } + gzstreambuf* open(const char* name, int compression_level, int open_mode); + gzstreambuf* close(); + ~gzstreambuf() { close(); } + + virtual int overflow( int c = EOF); + virtual int underflow(); + virtual int sync(); +}; + +class gzstreambase : virtual public std::ios { +protected: + gzstreambuf buf; +public: + gzstreambase() { init(&buf); } + gzstreambase( const char* name, int compression_level, int open_mode); + ~gzstreambase(); + void open( const char* name, int compression_level, int open_mode); + void close(); + gzstreambuf* rdbuf() { return &buf; } +}; + +// ---------------------------------------------------------------------------- +// User classes. Use igzstream and ogzstream analogously to ifstream and +// ofstream respectively. They read and write files based on the gz* +// function interface of the zlib. Files are compatible with gzip compression. +// ---------------------------------------------------------------------------- + +class igzstream : public gzstreambase, public std::istream { +public: + igzstream() : std::istream( &buf) {} + igzstream( const char* name, int compression_level, int open_mode = std::ios::in) + : gzstreambase(name, compression_level, open_mode), std::istream( &buf) {} + gzstreambuf* rdbuf() { return gzstreambase::rdbuf(); } + void open( const char* name, int compression_level, int open_mode = std::ios::in) { + gzstreambase::open( name, compression_level, open_mode); + } +}; + +class ogzstream : public gzstreambase, public std::ostream { +public: + ogzstream() : std::ostream( &buf) {} + ogzstream( const char* name, int compression_level, int mode = std::ios::out) + : gzstreambase(name, compression_level, mode), std::ostream( &buf) {} + gzstreambuf* rdbuf() { return gzstreambase::rdbuf(); } + void open( const char* name, int compression_level, int open_mode = std::ios::out) { + gzstreambase::open(name, compression_level, open_mode); + } +}; + +#ifdef GZSTREAM_NAMESPACE +} // namespace GZSTREAM_NAMESPACE +#endif + +#endif // GZSTREAM_H +// ============================================================================ +// EOF // + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/iapi.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/iapi.h new file mode 100644 index 00000000000..8e29d938d03 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/iapi.h @@ -0,0 +1,300 @@ +/* Copyright (C) 2001-2006 Artifex Software, Inc. + All Rights Reserved. + + This software is provided AS-IS with no warranty, either express or + implied. + + This software is distributed under license and may not be copied, modified + or distributed except as expressly authorized under the terms of that + license. Refer to licensing information at http://www.artifex.com/ + or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, + San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information. +*/ + +/* $Id: iapi.h 9043 2008-08-28 22:48:19Z giles $ */ + +/* + * Public API for Ghostscript interpreter + * for use both as DLL and for static linking. + * + * Should work for Windows, OS/2, Linux, Mac. + * + * DLL exported functions should be as similar as possible to imain.c + * You will need to include "ierrors.h". + * + * Current problems: + * 1. Ghostscript does not support multiple instances. + * 2. Global variables in gs_main_instance_default() + * and gsapi_instance_counter + */ + +/* Exported functions may need different prefix + * GSDLLEXPORT marks functions as exported + * GSDLLAPI is the calling convention used on functions exported + * by Ghostscript + * GSDLLCALL is used on callback functions called by Ghostscript + * When you include this header file in the caller, you may + * need to change the definitions by defining these + * before including this header file. + * Make sure you get the calling convention correct, otherwise your + * program will crash either during callbacks or soon after returning + * due to stack corruption. + */ + +#ifndef iapi_INCLUDED +# define iapi_INCLUDED + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(_WINDOWS_) || defined(__WINDOWS__) +# ifndef _Windows +# define _Windows +# endif +#endif + +#ifdef _Windows +# ifndef GSDLLEXPORT +# define GSDLLEXPORT __declspec(dllexport) +# endif +# ifndef GSDLLAPI +# define GSDLLAPI __stdcall +# endif +# ifndef GSDLLCALL +# define GSDLLCALL __stdcall +# endif +#endif /* _Windows */ + +#if defined(OS2) && defined(__IBMC__) +# ifndef GSDLLAPI +# define GSDLLAPI _System +# endif +# ifndef GSDLLCALL +# define GSDLLCALL _System +# endif +#endif /* OS2 && __IBMC */ + +#ifdef __MACOS__ +# pragma export on +#endif + +#ifndef GSDLLEXPORT +# define GSDLLEXPORT +#endif +#ifndef GSDLLAPI +# define GSDLLAPI +#endif +#ifndef GSDLLCALL +# define GSDLLCALL +#endif + +#if defined(__IBMC__) +# define GSDLLAPIPTR * GSDLLAPI +# define GSDLLCALLPTR * GSDLLCALL +#else +# define GSDLLAPIPTR GSDLLAPI * +# define GSDLLCALLPTR GSDLLCALL * +#endif + +#ifndef display_callback_DEFINED +# define display_callback_DEFINED +typedef struct display_callback_s display_callback; +#endif + +typedef struct gsapi_revision_s { + const char *product; + const char *copyright; + long revision; + long revisiondate; +} gsapi_revision_t; + + +/* Get version numbers and strings. + * This is safe to call at any time. + * You should call this first to make sure that the correct version + * of the Ghostscript is being used. + * pr is a pointer to a revision structure. + * len is the size of this structure in bytes. + * Returns 0 if OK, or if len too small (additional parameters + * have been added to the structure) it will return the required + * size of the structure. + */ +GSDLLEXPORT int GSDLLAPI +gsapi_revision(gsapi_revision_t *pr, int len); + +/* + * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING + * Ghostscript supports only one instance. + * The current implementation uses a global static instance + * counter to make sure that only a single instance is used. + * If you try to create two instances, the second attempt + * will return < 0 and set pinstance to NULL. + * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING + */ +/* Create a new instance of Ghostscript. + * This instance is passed to most other API functions. + * The caller_handle will be provided to callback functions. + */ + +GSDLLEXPORT int GSDLLAPI +gsapi_new_instance(void **pinstance, void *caller_handle); + +/* + * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING + * Ghostscript supports only one instance. + * The current implementation uses a global static instance + * counter to make sure that only a single instance is used. + * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING + */ +/* Destroy an instance of Ghostscript + * Before you call this, Ghostscript must have finished. + * If Ghostscript has been initialised, you must call gsapi_exit() + * before gsapi_delete_instance. + */ +GSDLLEXPORT void GSDLLAPI +gsapi_delete_instance(void *instance); + +/* Set the callback functions for stdio + * The stdin callback function should return the number of + * characters read, 0 for EOF, or -1 for error. + * The stdout and stderr callback functions should return + * the number of characters written. + * If a callback address is NULL, the real stdio will be used. + */ +GSDLLEXPORT int GSDLLAPI +gsapi_set_stdio(void *instance, + int (GSDLLCALLPTR stdin_fn)(void *caller_handle, char *buf, int len), + int (GSDLLCALLPTR stdout_fn)(void *caller_handle, const char *str, int len), + int (GSDLLCALLPTR stderr_fn)(void *caller_handle, const char *str, int len)); + +/* Set the callback function for polling. + * This is used for handling window events or cooperative + * multitasking. This function will only be called if + * Ghostscript was compiled with CHECK_INTERRUPTS + * as described in gpcheck.h. + * The polling function should return 0 if all is well, + * and negative if it wants ghostscript to abort. + * The polling function must be fast. + */ +GSDLLEXPORT int GSDLLAPI gsapi_set_poll(void *instance, + int (GSDLLCALLPTR poll_fn)(void *caller_handle)); + +/* Set the display device callback structure. + * If the display device is used, this must be called + * after gsapi_new_instance() and before gsapi_init_with_args(). + * See gdevdisp.h for more details. + */ +GSDLLEXPORT int GSDLLAPI gsapi_set_display_callback( + void *instance, display_callback *callback); + + +/* Initialise the interpreter. + * This calls gs_main_init_with_args() in imainarg.c + * 1. If quit or EOF occur during gsapi_init_with_args(), + * the return value will be e_Quit. This is not an error. + * You must call gsapi_exit() and must not call any other + * gsapi_XXX functions. + * 2. If usage info should be displayed, the return value will be e_Info + * which is not an error. Do not call gsapi_exit(). + * 3. Under normal conditions this returns 0. You would then + * call one or more gsapi_run_*() functions and then finish + * with gsapi_exit(). + */ +GSDLLEXPORT int GSDLLAPI gsapi_init_with_args(void *instance, + int argc, char **argv); + +/* + * The gsapi_run_* functions are like gs_main_run_* except + * that the error_object is omitted. + * If these functions return <= -100, either quit or a fatal + * error has occured. You then call gsapi_exit() next. + * The only exception is gsapi_run_string_continue() + * which will return e_NeedInput if all is well. + */ + +GSDLLEXPORT int GSDLLAPI +gsapi_run_string_begin(void *instance, + int user_errors, int *pexit_code); + +GSDLLEXPORT int GSDLLAPI +gsapi_run_string_continue(void *instance, + const char *str, unsigned int length, int user_errors, int *pexit_code); + +GSDLLEXPORT int GSDLLAPI +gsapi_run_string_end(void *instance, + int user_errors, int *pexit_code); + +GSDLLEXPORT int GSDLLAPI +gsapi_run_string_with_length(void *instance, + const char *str, unsigned int length, int user_errors, int *pexit_code); + +GSDLLEXPORT int GSDLLAPI +gsapi_run_string(void *instance, + const char *str, int user_errors, int *pexit_code); + +GSDLLEXPORT int GSDLLAPI +gsapi_run_file(void *instance, + const char *file_name, int user_errors, int *pexit_code); + + +/* Exit the interpreter. + * This must be called on shutdown if gsapi_init_with_args() + * has been called, and just before gsapi_delete_instance(). + */ +GSDLLEXPORT int GSDLLAPI +gsapi_exit(void *instance); + +/* Visual Tracer */ +/* This function is only for debug purpose clients */ +struct vd_trace_interface_s; +GSDLLEXPORT void GSDLLAPI +gsapi_set_visual_tracer(struct vd_trace_interface_s *I); + + +/* function prototypes */ +typedef int (GSDLLAPIPTR PFN_gsapi_revision)( + gsapi_revision_t *pr, int len); +typedef int (GSDLLAPIPTR PFN_gsapi_new_instance)( + void **pinstance, void *caller_handle); +typedef void (GSDLLAPIPTR PFN_gsapi_delete_instance)( + void *instance); +typedef int (GSDLLAPIPTR PFN_gsapi_set_stdio)(void *instance, + int (GSDLLCALLPTR stdin_fn)(void *caller_handle, char *buf, int len), + int (GSDLLCALLPTR stdout_fn)(void *caller_handle, const char *str, int len), + int (GSDLLCALLPTR stderr_fn)(void *caller_handle, const char *str, int len)); +typedef int (GSDLLAPIPTR PFN_gsapi_set_poll)(void *instance, + int(GSDLLCALLPTR poll_fn)(void *caller_handle)); +typedef int (GSDLLAPIPTR PFN_gsapi_set_display_callback)( + void *instance, display_callback *callback); +typedef int (GSDLLAPIPTR PFN_gsapi_init_with_args)( + void *instance, int argc, char **argv); +typedef int (GSDLLAPIPTR PFN_gsapi_run_string_begin)( + void *instance, int user_errors, int *pexit_code); +typedef int (GSDLLAPIPTR PFN_gsapi_run_string_continue)( + void *instance, const char *str, unsigned int length, + int user_errors, int *pexit_code); +typedef int (GSDLLAPIPTR PFN_gsapi_run_string_end)( + void *instance, int user_errors, int *pexit_code); +typedef int (GSDLLAPIPTR PFN_gsapi_run_string_with_length)( + void *instance, const char *str, unsigned int length, + int user_errors, int *pexit_code); +typedef int (GSDLLAPIPTR PFN_gsapi_run_string)( + void *instance, const char *str, + int user_errors, int *pexit_code); +typedef int (GSDLLAPIPTR PFN_gsapi_run_file)(void *instance, + const char *file_name, int user_errors, int *pexit_code); +typedef int (GSDLLAPIPTR PFN_gsapi_exit)(void *instance); +typedef void (GSDLLAPIPTR PFN_gsapi_set_visual_tracer) + (struct vd_trace_interface_s *I); + + +#ifdef __MACOS__ +#pragma export off +#endif + +#ifdef __cplusplus +} /* extern 'C' protection */ +#endif + +#endif /* iapi_INCLUDED */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/ierrors.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/ierrors.h new file mode 100644 index 00000000000..3184341177e --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/ierrors.h @@ -0,0 +1,153 @@ +/* Copyright (C) 2001-2006 Artifex Software, Inc. + All Rights Reserved. + + This software is provided AS-IS with no warranty, either express or + implied. + + This software is distributed under license and may not be copied, modified + or distributed except as expressly authorized under the terms of that + license. Refer to licensing information at http://www.artifex.com/ + or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, + San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information. +*/ + +/* $Id: ierrors.h 8022 2007-06-05 22:23:38Z giles $ */ +/* Definition of error codes */ + +#ifndef ierrors_INCLUDED +# define ierrors_INCLUDED + +/* + * DO NOT USE THIS FILE IN THE GRAPHICS LIBRARY. + * THIS FILE IS PART OF THE POSTSCRIPT INTERPRETER. + * USE gserrors.h IN THE LIBRARY. + */ + +/* + * A procedure that may return an error always returns + * a non-negative value (zero, unless otherwise noted) for success, + * or negative for failure. + * We use ints rather than an enum to avoid a lot of casting. + */ + +/* Define the error name table */ +extern const char *const gs_error_names[]; + + /* ------ PostScript Level 1 errors ------ */ + +#define e_unknownerror (-1) /* unknown error */ +#define e_dictfull (-2) +#define e_dictstackoverflow (-3) +#define e_dictstackunderflow (-4) +#define e_execstackoverflow (-5) +#define e_interrupt (-6) +#define e_invalidaccess (-7) +#define e_invalidexit (-8) +#define e_invalidfileaccess (-9) +#define e_invalidfont (-10) +#define e_invalidrestore (-11) +#define e_ioerror (-12) +#define e_limitcheck (-13) +#define e_nocurrentpoint (-14) +#define e_rangecheck (-15) +#define e_stackoverflow (-16) +#define e_stackunderflow (-17) +#define e_syntaxerror (-18) +#define e_timeout (-19) +#define e_typecheck (-20) +#define e_undefined (-21) +#define e_undefinedfilename (-22) +#define e_undefinedresult (-23) +#define e_unmatchedmark (-24) +#define e_VMerror (-25) /* must be the last Level 1 error */ + +#define LEVEL1_ERROR_NAMES\ + "unknownerror", "dictfull", "dictstackoverflow", "dictstackunderflow",\ + "execstackoverflow", "interrupt", "invalidaccess", "invalidexit",\ + "invalidfileaccess", "invalidfont", "invalidrestore", "ioerror",\ + "limitcheck", "nocurrentpoint", "rangecheck", "stackoverflow",\ + "stackunderflow", "syntaxerror", "timeout", "typecheck", "undefined",\ + "undefinedfilename", "undefinedresult", "unmatchedmark", "VMerror" + + /* ------ Additional Level 2 errors (also in DPS) ------ */ + +#define e_configurationerror (-26) +#define e_undefinedresource (-27) +#define e_unregistered (-28) + +#define LEVEL2_ERROR_NAMES\ + "configurationerror", "undefinedresource", "unregistered" + + /* ------ Additional DPS errors ------ */ + +#define e_invalidcontext (-29) +/* invalidid is for the NeXT DPS extension. */ +#define e_invalidid (-30) + +#define DPS_ERROR_NAMES\ + "invalidcontext", "invalidid" + +#define ERROR_NAMES\ + LEVEL1_ERROR_NAMES, LEVEL2_ERROR_NAMES, DPS_ERROR_NAMES + + /* ------ Pseudo-errors used internally ------ */ + +/* + * Internal code for a fatal error. + * gs_interpret also returns this for a .quit with a positive exit code. + */ +#define e_Fatal (-100) + +/* + * Internal code for the .quit operator. + * The real quit code is an integer on the operand stack. + * gs_interpret returns this only for a .quit with a zero exit code. + */ +#define e_Quit (-101) + +/* + * Internal code for a normal exit from the interpreter. + * Do not use outside of interp.c. + */ +#define e_InterpreterExit (-102) + +/* + * Internal code that indicates that a procedure has been stored in the + * remap_proc of the graphics state, and should be called before retrying + * the current token. This is used for color remapping involving a call + * back into the interpreter -- inelegant, but effective. + */ +#define e_RemapColor (-103) + +/* + * Internal code to indicate we have underflowed the top block + * of the e-stack. + */ +#define e_ExecStackUnderflow (-104) + +/* + * Internal code for the vmreclaim operator with a positive operand. + * We need to handle this as an error because otherwise the interpreter + * won't reload enough of its state when the operator returns. + */ +#define e_VMreclaim (-105) + +/* + * Internal code for requesting more input from run_string. + */ +#define e_NeedInput (-106) + +/* + * Internal code for a normal exit when usage info is displayed. + * This allows Window versions of Ghostscript to pause until + * the message can be read. + */ +#define e_Info (-110) + +/* + * Define which error codes require re-executing the current object. + */ +#define ERROR_IS_INTERRUPT(ecode)\ + ((ecode) == e_interrupt || (ecode) == e_timeout) + +#endif /* ierrors_INCLUDED */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/macros.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/macros.h new file mode 100644 index 00000000000..12be07323c7 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/macros.h @@ -0,0 +1,45 @@ +/************************************************************************* +** macros.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef MACROS_H +#define MACROS_H + +#define FORALL(container, itertype, itervar) \ + for (itertype itervar=(container).begin(); itervar != (container).end(); ++itervar) + +#define IMPLEMENT_ARITHMETIC_OPERATOR(class, op) \ + inline class operator op (class a, const class &b) { \ + return a op##= b; \ + } + +#define IMPLEMENT_ARITHMETIC_OPERATOR2(class, scalar, op) \ + inline class operator op (class a, scalar b) { \ + return a op##= b; \ + } + +#define IMPLEMENT_OUTPUT_OPERATOR(class) \ + inline std::ostream& operator << (std::ostream &os, class obj) { \ + return obj.write(os); \ + } + +#include +#define SHOW(x) std::cerr << ">>> " << __FILE__ ", " << __LINE__ << ": " << #x << "=" << (x) << std::endl + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/options.xml b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/options.xml new file mode 100644 index 00000000000..10846285b3d --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/options.xml @@ -0,0 +1,138 @@ + + + + + + + dvisvgm + [options] dvifile + This program converts DVI files, as created by TeX/LaTeX, to\nthe XML-based scalable vector graphics format SVG. + + +
+ + +
+
+ + + + + + +
+
+ + + + +
+
+ + + + + + + + +
+
+ + + + + + +
+
+
+ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/psdefs.psc b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/psdefs.psc new file mode 100644 index 00000000000..60785a721e1 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/psdefs.psc @@ -0,0 +1,69 @@ +/************************************************************************* +** psdefs.psc ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +const char *PSInterpreter::PSDEFS = +"3 dict dup begin/Install{matrix setmatrix}def/HWResolution[72 72]def/PageSize[10" +"000 10000]def end setpagedevice/@dodraw true store/@SD systemdict def/@UD userdi" +"ct def true setglobal @SD/:save @SD/save get put @SD/:restore @SD/restore get pu" +"t @SD/:gsave @SD/gsave get put @SD/:grestore @SD/grestore get put @SD/:grestorea" +"ll @SD/grestoreall get put @SD/:stroke @SD/stroke get put @SD/:fill @SD/fill get" +" put @SD/:eofill @SD/eofill get put @SD/:clip @SD/clip get put @SD/:eoclip @SD/e" +"oclip get put @SD/:charpath @SD/charpath get put @SD/.setopacityalpha known not{" +"@SD/.setopacityalpha{pop}put}if @SD/prval{dup type/stringtype eq{print}{30 strin" +"g cvs print}ifelse}put @SD/prseq{-1 1{-1 roll prval( )print}for(\\n)print}put @S" +"D/prcmd{( )exch(\\ndvi.)3{print}repeat prseq}put @SD/cvxall{{cvx}forall}put @SD/" +"defpr{[exch[/copy @SD]cvxall 5 -1 roll dup 6 1 roll[/get/exec]cvxall 6 -1 roll d" +"up 7 1 roll 4 -1 roll dup 5 1 roll dup length string cvs/prcmd cvx]cvx def}put @" +"SD/querypos{{currentpoint}stopped{$error/newerror false put}{2(querypos)prcmd}if" +"else}put @SD/applyscalevals{1 0 transform 0 0 transform 3 -1 roll sub dup mul 3 " +"1 roll sub dup mul add sqrt 0 1 transform 0 0 transform 3 -1 roll sub dup mul 3 " +"1 roll sub dup mul add sqrt 1 0 transform dup mul exch dup dup mul 3 -1 roll add" +" sqrt div 3(applyscalevals)prcmd}def @SD/prpath{{2(moveto)prcmd}{2(lineto)prcmd}" +"{6(curveto)prcmd}{0(closepath)prcmd}pathforall}put @SD/charpath{/@dodraw false s" +"tore :charpath/@dodraw true store}put @SD/show{@dodraw{true charpath eofill}if}p" +"ut @SD/stroke{@dodraw{0(newpath)prcmd prpath 0(stroke)prcmd newpath}{:stroke}ife" +"lse}put @SD/fill{@dodraw{0(newpath)prcmd prpath 0(fill)prcmd newpath}{:fill}ifel" +"se}put @SD/eofill{@dodraw{0(newpath)prcmd prpath 0(eofill)prcmd newpath}{:eofill" +"}ifelse}put @SD/clip{:clip 0(newpath)prcmd prpath 0(clip)prcmd}put @SD/eoclip{:e" +"oclip 0(newpath)prcmd prpath 0(eoclip)prcmd}put false setglobal @SD readonly pop" +"/initclip 0 defpr/sysexec{@SD exch get exec}def/adddot{dup length 1 add string d" +"up 0 46 put dup 3 -1 roll 1 exch putinterval}def/setlinewidth{dup/setlinewidth s" +"ysexec applyscalevals 1(setlinewidth)prcmd}def/setlinecap 1 defpr/setlinejoin 1 " +"defpr/setmiterlimit 1 defpr/setdash{mark 3 1 roll 2 copy/setdash sysexec applysc" +"alevals exch aload length 1 add -1 roll counttomark(setdash)prcmd pop}def/setgst" +"ate{currentlinewidth 1(setlinewidth)prcmd currentlinecap 1(setlinecap)prcmd curr" +"entlinejoin 1(setlinejoin)prcmd currentmiterlimit 1(setmiterlimit)prcmd currentr" +"gbcolor 3(setrgbcolor)prcmd 6 array currentmatrix aload pop 6(setmatrix)prcmd cu" +"rrentdash mark 3 1 roll exch aload length 1 add -1 roll counttomark(setdash)prcm" +"d pop}def/save{@UD begin/@saveID vmstatus pop pop def end :save @saveID 1(save)p" +"rcmd}def/restore{:restore setgstate @UD/@saveID known{@UD begin @saveID end}{0}i" +"felse 1(restore)prcmd}def/gsave 0 defpr/grestore{:grestore setgstate 0(grestore)" +"prcmd}def/grestoreall{:grestoreall setstate 0(grestoreall)prcmd}/rotate{dup type" +"/arraytype ne{dup 1(rotate)prcmd}if/rotate sysexec}def/scale{dup type/arraytype " +"ne{2 copy 2(scale)prcmd}if/scale sysexec}def/translate{dup type/arraytype ne{2 c" +"opy 2(translate)prcmd}if/translate sysexec}def/setmatrix{dup/setmatrix sysexec a" +"load pop 6(setmatrix)prcmd}def/initmatrix{matrix setmatrix}def/concat{matrix cur" +"rentmatrix matrix concatmatrix setmatrix}def/setgray 1 defpr/setcmykcolor 4 defp" +"r/sethsbcolor 3 defpr/setrgbcolor 3 defpr/.setopacityalpha{dup/.setopacityalpha " +"sysexec 1(setopacityalpha)prcmd}def/.handleerror errordict/handleerror get def e" +"rrordict begin/handleerror{0(beginerror)prcmd .handleerror 0(enderror)prcmd}.bin" +"d def end "; + +// vim: set syntax=cpp: diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/types.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/types.h new file mode 100644 index 00000000000..f404565df96 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/src/types.h @@ -0,0 +1,84 @@ +/************************************************************************* +** types.h ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#ifndef TYPES_H +#define TYPES_H + +namespace internal { + template + class ERROR_inttype_not_available + { + ERROR_inttype_not_available(); + }; + + template + struct select + { + typedef A T; + }; + + template + struct select + { + typedef B T; + }; +} + + +// Retrieves a signed integer type with sizeof(T) == BYTES +template +struct int_t +{ + typedef typename internal::select >::T>::T>::T>::T>::T T; +}; + + +// Retrieves an unsigned integer type with sizeof(T) == BYTES +template +struct int_t +{ + typedef typename internal::select >::T>::T>::T>::T>::T T; +}; + + +// Machine independent definition of sized integer types +typedef int_t<1, true>::T Int8; +typedef int_t<2, true>::T Int16; +typedef int_t<4, true>::T Int32; +typedef int_t<8, true>::T Int64; +typedef int_t<1, false>::T UInt8; +typedef int_t<2, false>::T UInt16; +typedef int_t<4, false>::T UInt32; +typedef int_t<8, false>::T UInt64; + +typedef Int32 FixWord; +typedef UInt32 ScaledInt; + +#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/BoundingBoxTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/BoundingBoxTest.cpp new file mode 100644 index 00000000000..3e092af7f13 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/BoundingBoxTest.cpp @@ -0,0 +1,53 @@ +/************************************************************************* +** BoundingBoxTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include "BoundingBox.h" + +TEST(BoundingBoxTest, set) { + BoundingBox bbox; + bbox.set("1pt 2pt 3pt 4pt"); + EXPECT_EQ(bbox.minX(), 1); + EXPECT_EQ(bbox.minY(), 2); + EXPECT_EQ(bbox.maxX(), 3); + EXPECT_EQ(bbox.maxY(), 4); + + bbox.set("4pt 3pt 2pt 1pt"); + EXPECT_EQ(bbox.minX(), 2); + EXPECT_EQ(bbox.minY(), 1); + EXPECT_EQ(bbox.maxX(), 4); + EXPECT_EQ(bbox.maxY(), 3); + + bbox.set("1pt"); + EXPECT_EQ(bbox.minX(), 1); + EXPECT_EQ(bbox.minY(), 0); + EXPECT_EQ(bbox.maxX(), 5); + EXPECT_EQ(bbox.maxY(), 4); + + bbox.set("2pt 3pt"); + EXPECT_EQ(bbox.minX(), -1); + EXPECT_EQ(bbox.minY(), -3); + EXPECT_EQ(bbox.maxX(), 7); + EXPECT_EQ(bbox.maxY(), 7); + + EXPECT_THROW(bbox.set(""), BoundingBoxException); + EXPECT_THROW(bbox.set("1pt 2pt 3pt"), BoundingBoxException); +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/CRC32Test.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/CRC32Test.cpp new file mode 100644 index 00000000000..bd5015df06f --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/CRC32Test.cpp @@ -0,0 +1,71 @@ +/************************************************************************* +** CRC32Test.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "CRC32.h" + +using namespace std; + +TEST(CRC32Test, init) { + CRC32 crc; + EXPECT_EQ(crc.get(), 0); + crc.reset(); + EXPECT_EQ(crc.get(), 0); +} + + +TEST(CRC32Test, update_numbers) { + CRC32 crc; + const UInt32 comp[]={0xf8923be6, 0x4dcd2866, 0x4fdbb57a, 0xcb40f3bf, 0xf1a33887, 0x3422c816, 0x3a8b92a4, 0xedafc4ce, 0x4f5d17ec, 0x4a9f2f68}; + for (int i=-5; i < 5; ++i) { + crc.update(i); + EXPECT_EQ(crc.get(), comp[i+5]); + } + crc.reset(); + EXPECT_EQ(crc.get(), 0); + // add 32 bit values + for (int i=0; i < 256; ++i) + crc.update(i); + EXPECT_EQ(crc.get(), 0xd4c2968b); + for (int i=256; i < 10000; ++i) + crc.update(i); + EXPECT_EQ(crc.get(), 0x6de9e841); +} + + +TEST(CRC32Test, update_array) { + CRC32 crc; + UInt8 vals[256]; + // add 8 bit values + for (int i=0; i < 256; ++i) + vals[i] = i; + crc.update(vals, 256); + EXPECT_EQ(crc.get(), 0x29058c73); +} + + +TEST(CRC32Test, update_string) { + CRC32 crc; + crc.update("dvisvgm converts DVI files to SVG."); + EXPECT_EQ(crc.get(), 0x7c4ef359); + crc.update("It is published under the GNU General Public License."); + EXPECT_EQ(crc.get(), 0xa732081b); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/CalculatorTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/CalculatorTest.cpp new file mode 100644 index 00000000000..6d9a095370c --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/CalculatorTest.cpp @@ -0,0 +1,60 @@ +/************************************************************************* +** CalculatorTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include "Calculator.h" + +TEST(CalculatorTest, eval) { + Calculator calc; + EXPECT_EQ(calc.eval("2+3+4"), 9); + EXPECT_EQ(calc.eval("2*3+4"), 10); + EXPECT_EQ(calc.eval("2+3*4"), 14); + EXPECT_EQ(calc.eval("(2+3)*4"), 20); + EXPECT_EQ(calc.eval("2*(3+4)"), 14); + EXPECT_EQ(calc.eval("-2+3+4"), 5); + EXPECT_EQ(calc.eval("3/2"), 1.5); + EXPECT_EQ(calc.eval("3%2"), 1); +} + + +TEST(CalculatorTest, variables) { + Calculator calc; + calc.setVariable("a", 1); + EXPECT_EQ(calc.getVariable("a"), 1); + + calc.setVariable("a", 2); + EXPECT_EQ(calc.getVariable("a"), 2); + + calc.setVariable("b", 3); + EXPECT_EQ(calc.eval("a+b"), 5); + EXPECT_EQ(calc.eval("2a+2b"), 10); +} + + +TEST(CalculatorTest, exceptions) { + Calculator calc; + ASSERT_THROW(calc.eval("2++3"), CalculatorException); + ASSERT_THROW(calc.eval("c"), CalculatorException); + ASSERT_THROW(calc.eval("1/0"), CalculatorException); + ASSERT_THROW(calc.eval("1%0"), CalculatorException); + ASSERT_THROW(calc.eval("2*(3+4"), CalculatorException); + ASSERT_THROW(calc.eval("2*(3+4))"), CalculatorException); +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/ColorSpecialTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/ColorSpecialTest.cpp new file mode 100644 index 00000000000..1fd0cbf6930 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/ColorSpecialTest.cpp @@ -0,0 +1,91 @@ +/************************************************************************* +** ColorSpecialTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "ColorSpecialHandler.h" +#include "SpecialActions.h" + +class ColorSpecialTest : public ::testing::Test +{ + protected: + struct SetColor : SpecialEmptyActions + { + SetColor () : color(0) {} + void setColor (const Color &c) {color = c;} + bool equals (UInt32 c) {return color == c;} + UInt32 color; + }; + ColorSpecialHandler handler; + SetColor actions; +}; + + +TEST_F(ColorSpecialTest, rgb) { + std::istringstream iss("rgb 1 0 1"); + handler.process(0, iss, &actions); + EXPECT_TRUE(actions.equals(0xff00ff)); +} + + +TEST_F(ColorSpecialTest, hsb) { + std::istringstream iss("hsb 1 0.5 1"); + handler.process(0, iss, &actions); + EXPECT_TRUE(actions.equals(0xff8080)); +} + + +TEST_F(ColorSpecialTest, cmyk) { + std::istringstream iss("cmyk 0.1 0.2 0.4 0.6"); + handler.process(0, iss, &actions); + EXPECT_TRUE(actions.equals(0x4c3300)); +} + + +TEST_F(ColorSpecialTest, stack) { + std::istringstream iss("push rgb 1 0 0"); + handler.process(0, iss, &actions); + EXPECT_TRUE(actions.equals(0xff0000)); + iss.clear(); + iss.str("push Blue"); + handler.process(0, iss, &actions); + EXPECT_TRUE(actions.equals(0x0000ff)); + iss.clear(); + iss.str("pop"); + handler.process(0, iss, &actions); + EXPECT_TRUE(actions.equals(0xff0000)); +} + + +TEST_F(ColorSpecialTest, constant) { + std::istringstream iss("RedViolet"); + handler.process(0, iss, &actions); + EXPECT_TRUE(actions.equals(0x9600a8)); +} + + +TEST_F(ColorSpecialTest, errors) { + std::istringstream iss("UnknownColor"); + EXPECT_THROW(handler.process(0, iss, &actions), SpecialException); + iss.clear(); + iss.str("rgb 0 0.3 3.1"); + EXPECT_THROW(handler.process(0, iss, &actions), SpecialException); +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/CommandLineTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/CommandLineTest.cpp new file mode 100644 index 00000000000..3de612db08e --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/CommandLineTest.cpp @@ -0,0 +1,216 @@ +/************************************************************************* +** CommandLineTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "CommandLine.h" + +TEST(CommandLineTest, noarg_short) { + CommandLine cmd; + const char *args[] = {"progname", "-s", "-n", "-h"}; + char **argv = const_cast(args); + cmd.parse(4, argv, false); + + EXPECT_TRUE(cmd.stdout_given()); + EXPECT_TRUE(cmd.no_fonts_given()); + EXPECT_TRUE(cmd.help_given()); + EXPECT_FALSE(cmd.list_specials_given()); + EXPECT_FALSE(cmd.error()); + EXPECT_EQ(cmd.numFiles(), 0); +} + + +TEST(CommandLineTest, noarg_long) { + CommandLine cmd; + const char *args[] = {"progname", "--no-fonts", "--stdout", "--help"}; + char **argv = const_cast(args); + cmd.parse(4, argv, false); + + EXPECT_TRUE(cmd.stdout_given()); + EXPECT_TRUE(cmd.no_fonts_given()); + EXPECT_TRUE(cmd.help_given()); + EXPECT_FALSE(cmd.list_specials_given()); + EXPECT_FALSE(cmd.error()); + EXPECT_EQ(cmd.numFiles(), 0); +} + + +TEST(CommandLineTest, arg_short) { + CommandLine cmd; + const char *args[] = {"progname", "-p5", "-r45", "-omyfile.xyz", "-ayes"}; + char **argv = const_cast(args); + cmd.parse(5, argv, false); + + EXPECT_TRUE(cmd.page_given()); + EXPECT_EQ(cmd.page_arg(), "5"); + EXPECT_TRUE(cmd.rotate_given()); + EXPECT_EQ(cmd.rotate_arg(), 45); + EXPECT_TRUE(cmd.output_given()); + EXPECT_EQ(cmd.output_arg(), "myfile.xyz"); + EXPECT_FALSE(cmd.bbox_given()); + EXPECT_EQ(cmd.bbox_arg(), "min"); + EXPECT_FALSE(cmd.error()); + EXPECT_EQ(cmd.numFiles(), 0); + EXPECT_TRUE(cmd.trace_all_given()); + EXPECT_TRUE(cmd.trace_all_arg()); +} + + +TEST(CommandLineTest, arg_combined) { + CommandLine cmd; + const char *args[] = {"progname", "-lse", "-p5", "-omyfile.xyz"}; + char **argv = const_cast(args); + cmd.parse(4, argv, false); + + EXPECT_TRUE(cmd.page_given()); + EXPECT_EQ(cmd.page_arg(), "5"); + EXPECT_TRUE(cmd.list_specials_given()); + EXPECT_TRUE(cmd.stdout_given()); + EXPECT_TRUE(cmd.exact_given()); + EXPECT_FALSE(cmd.error()); +} + + +TEST(CommandLineTest, arg_separated) { + CommandLine cmd; + const char *args[] = {"progname", "-p", "5", "-r", "45", "myfile.xyz", "-afalse"}; + char **argv = const_cast(args); + cmd.parse(7, argv, false); + + EXPECT_TRUE(cmd.page_given()); + EXPECT_EQ(cmd.page_arg(), "5"); + EXPECT_TRUE(cmd.rotate_given()); + EXPECT_EQ(cmd.rotate_arg(), 45); + EXPECT_FALSE(cmd.error()); + EXPECT_EQ(cmd.numFiles(), 1); + EXPECT_TRUE(cmd.trace_all_given()); + EXPECT_FALSE(cmd.trace_all_arg()); +} + + +TEST(CommandLineTest, arg_long) { + CommandLine cmd; + const char *args[] = {"progname", "--page=9", "--rotate=-45.5", "--trace-all", "--output=myfile.zyx"}; + char **argv = const_cast(args); + cmd.parse(5, argv, false); + + EXPECT_TRUE(cmd.page_given()); + EXPECT_EQ(cmd.page_arg(), "9"); + EXPECT_TRUE(cmd.rotate_given()); + EXPECT_EQ(cmd.rotate_arg(), -45.5); + EXPECT_TRUE(cmd.output_given()); + EXPECT_EQ(cmd.output_arg(), "myfile.zyx"); + EXPECT_FALSE(cmd.bbox_given()); + EXPECT_EQ(cmd.bbox_arg(), "min"); + EXPECT_FALSE(cmd.error()); + EXPECT_EQ(cmd.numFiles(), 0); + EXPECT_TRUE(cmd.trace_all_given()); + EXPECT_FALSE(cmd.trace_all_arg()); +} + + +TEST(CommandLineTest, abbrev_long) { + CommandLine cmd; + const char *args[] = {"progname", "--pa=9", "--rot=-45.5", "--out=myfile.zyx"}; + char **argv = const_cast(args); + cmd.parse(4, argv, false); + + EXPECT_TRUE(cmd.page_given()); + EXPECT_EQ(cmd.page_arg(), "9"); + EXPECT_TRUE(cmd.rotate_given()); + EXPECT_EQ(cmd.rotate_arg(), -45.5); + EXPECT_TRUE(cmd.output_given()); + EXPECT_EQ(cmd.output_arg(), "myfile.zyx"); + EXPECT_FALSE(cmd.bbox_given()); + EXPECT_EQ(cmd.bbox_arg(), "min"); + EXPECT_FALSE(cmd.error()); + EXPECT_EQ(cmd.numFiles(), 0); +} + + +TEST(CommandLineTest, error) { + CommandLine cmd; + // error on wrong argument type + const char *args1[] = {"progname", "--rotate=x"}; + char **argv = const_cast(args1); + cmd.parse(2, argv, false); + + EXPECT_FALSE(cmd.rotate_given()); + EXPECT_TRUE(cmd.error()); + + // error on missing arguments + const char *args2[] = {"progname", "--page", "--zip"}; + argv = const_cast(args2); + cmd.parse(3, argv, false); + EXPECT_TRUE(cmd.zip_given()); + EXPECT_EQ(cmd.zip_arg(), 9); + EXPECT_FALSE(cmd.page_given()); + EXPECT_FALSE(cmd.rotate_given()); + EXPECT_TRUE(cmd.error()); + EXPECT_EQ(cmd.numFiles(), 0); + + // error on ambiguous abbreviation of long option + const char *args3[] = {"progname", "--no"}; + argv = const_cast(args3); + cmd.parse(2, argv, false); + EXPECT_TRUE(cmd.error()); + + // incorrect boolean value + const char *args4[] = {"progname", "--trace-all=nope"}; + argv = const_cast(args4); + cmd.parse(2, argv, false); + EXPECT_FALSE(cmd.trace_all_given()); + EXPECT_TRUE(cmd.error()); +} + + +TEST(CommandLineTest, file) { + CommandLine cmd; + const char *args1[] = {"progname", "--page=3", "-z5", "myfile1", "-l", "myfile2"}; + char **argv = const_cast(args1); + cmd.parse(6, argv, false); + + EXPECT_TRUE(cmd.page_given()); + EXPECT_EQ(cmd.page_arg(), "3"); + EXPECT_TRUE(cmd.zip_given()); + EXPECT_EQ(cmd.zip_arg(), 5); + EXPECT_TRUE(cmd.list_specials_given()); + EXPECT_EQ(cmd.numFiles(), 2); + EXPECT_EQ(strcmp(cmd.file(0), "myfile1"), 0); + EXPECT_EQ(strcmp(cmd.file(1), "myfile2"), 0); + EXPECT_FALSE(cmd.error()); +} + + +TEST(CommandLineTest, files_only) { + CommandLine cmd; + const char *args1[] = {"progname", "--page=3", "-z5", "--", "-l", "myfile"}; + char **argv = const_cast(args1); + cmd.parse(6, argv, false); + + EXPECT_TRUE(cmd.page_given()); + EXPECT_EQ(cmd.page_arg(), "3"); + EXPECT_TRUE(cmd.zip_given()); + EXPECT_EQ(cmd.zip_arg(), 5); + EXPECT_EQ(cmd.numFiles(), 2); + EXPECT_EQ(strcmp(cmd.file(0), "-l"), 0); + EXPECT_EQ(strcmp(cmd.file(1), "myfile"), 0); +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/DirectoryTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/DirectoryTest.cpp new file mode 100644 index 00000000000..37b46b7c080 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/DirectoryTest.cpp @@ -0,0 +1,66 @@ +/************************************************************************* +** DirectoryTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include +#include "Directory.h" +#include "FileSystem.h" +#include "macros.h" + +#ifndef SRCDIR +#define SRCDIR "." +#endif + + +using namespace std; + +TEST(DirectoryTest, dirs) { + const char *dirs_to_find[] = {"doc", "src", 0}; + set found_dirs; + Directory dir(".."); + while (const char *dname = dir.read('d')) + found_dirs.insert(dname); + for (const char **p=dirs_to_find; *p; ++p) { + EXPECT_TRUE(found_dirs.find(*p) != found_dirs.end()); + } +} + + +TEST(DirectoryTest, file) { + const char *files_to_find[] = { + "Bitmap.cpp", "BoundingBox.cpp", "Calculator.cpp", + "Directory.cpp", "DVIReader.cpp", "DVIToSVG.cpp", "DVIToSVGActions.cpp", + "FileSystem.cpp", "Font.cpp", "FontEngine.cpp", "FontManager.cpp", + "FontMap.cpp", "GFReader.cpp", "GFTracer.cpp", "FileFinder.cpp", "Message.cpp", + "MetafontWrapper.cpp", "PageSize.cpp", "StreamReader.cpp", + "TFM.cpp", "VFReader.cpp", "XMLDocument.cpp", "XMLNode.cpp", "XMLString.cpp", + 0 + }; + set found_files; + Directory dir(string(SRCDIR)+"/../src"); + while (const char *fname = dir.read('f')) + found_files.insert(fname); + for (const char **p=files_to_find; *p; ++p) { + EXPECT_TRUE(found_files.find(*p) != found_files.end()); + } + EXPECT_TRUE(found_files.find("tests") == found_files.end()); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FileFinderTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FileFinderTest.cpp new file mode 100644 index 00000000000..64772a1f8d2 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FileFinderTest.cpp @@ -0,0 +1,82 @@ +/************************************************************************* +** FileFinderTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "FileFinder.h" + +using std::ifstream; + + +class FileFinderTest : public ::testing::Test +{ + protected: + void SetUp () { + FileFinder::init("FileFinderTest", false); + } + + void TearDown () { + FileFinder::finish(); + } +}; + + +TEST_F(FileFinderTest, find_base_file) { + const char *path = FileFinder::lookup("cmr10.tfm"); + EXPECT_TRUE(path); + ifstream ifs(path); + EXPECT_TRUE(ifs); +} + + +TEST_F(FileFinderTest, find_mapped_file) { + // mapped base tfm file => should be resolved by kpathsea + // circle10.tfm is usually mapped to lcircle.tfm + if (const char *path = FileFinder::lookup("circle10.tfm")) { + EXPECT_TRUE(path); + ifstream ifs(path); + EXPECT_TRUE(ifs); + } + + // mapped lm font => should be resolved using dvisvgm's FontMap + // cork-lmr10 is usually mapped to lmr10 + bool have_lmodern = FileFinder::lookup("lmodern.sty"); + if (have_lmodern) { // package lmodern installed? + if (const char *path = FileFinder::lookup("cork-lmr10.pfb")) { + ifstream ifs(path); + EXPECT_TRUE(ifs); + } + } +} + + +TEST_F(FileFinderTest, mktexmf) { + // ensure availability of ec font => call mktexmf if necessary + if (const char *path = FileFinder::lookup("ecrm2000.mf")) { + ifstream ifs(path); + EXPECT_TRUE(ifs); + } +} + + +TEST_F(FileFinderTest, find_unavailable_file) { + const char *path = FileFinder::lookup("not-available.xyz"); + EXPECT_FALSE(path); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FilePathTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FilePathTest.cpp new file mode 100644 index 00000000000..04449fcf919 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FilePathTest.cpp @@ -0,0 +1,89 @@ +/************************************************************************* +** FilePathTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "FilePath.h" +#include "FileSystem.h" + +using namespace std; + + +TEST(FilePathTest, dir1) { + FilePath fp("a/b/c/d", false, "/"); + ASSERT_EQ(fp.absolute(), "/a/b/c/d"); + ASSERT_EQ(fp.relative("/"), "a/b/c/d"); + ASSERT_EQ(fp.relative("/a/b"), "c/d"); + ASSERT_EQ(fp.relative("/a/b/c"), "d"); + ASSERT_EQ(fp.relative("/a/b/c/d"), "."); + ASSERT_EQ(fp.relative("/a/b/x"), "../c/d"); + ASSERT_EQ(fp.relative("/a/b/x/y"), "../../c/d"); +} + + +TEST(FilePathTest, dir2) { + FilePath fp("a/b/c/d", false, "/x/y"); + ASSERT_EQ(fp.absolute(), "/x/y/a/b/c/d"); + ASSERT_EQ(fp.relative("/"), "x/y/a/b/c/d"); + ASSERT_EQ(fp.relative("/x/y/a/b"), "c/d"); + ASSERT_EQ(fp.relative("/x/y/a/b/c"), "d"); + ASSERT_EQ(fp.relative("/x/y/a/b/c/d"), "."); + ASSERT_EQ(fp.relative("/x/y/a/b/x"), "../c/d"); + ASSERT_EQ(fp.relative("/x/y/a/b/x/y"), "../../c/d"); +} + + +TEST(FilePathTest, file1) { + FilePath fp("a/b/c/d/f.ext", true, "/"); + ASSERT_EQ(fp.absolute(), "/a/b/c/d/f.ext"); + ASSERT_EQ(fp.relative("/"), "a/b/c/d/f.ext"); + ASSERT_EQ(fp.relative("/a/b"), "c/d/f.ext"); + ASSERT_EQ(fp.relative("/a/b/c"), "d/f.ext"); + ASSERT_EQ(fp.relative("/a/b/c/d"), "f.ext"); + ASSERT_EQ(fp.relative("/a/b/x"), "../c/d/f.ext"); + ASSERT_EQ(fp.relative("/a/b/x/y"), "../../c/d/f.ext"); + ASSERT_EQ(fp.basename(), "f"); + ASSERT_EQ(fp.suffix(), "ext"); + fp.suffix("new"); + ASSERT_EQ(fp.suffix(), "new"); + ASSERT_EQ(fp.relative("/a/b/x/y"), "../../c/d/f.new"); +} + + +TEST(FilePathTest, file2) { + FilePath fp("/f.ext", true, "/"); + ASSERT_EQ(fp.absolute(), "/f.ext"); + ASSERT_EQ(fp.relative("/a/b"), "../../f.ext"); +} + + +TEST(FilePathTest, autodetect) { + FilePath fp1("FilePathTest.cpp"); + ASSERT_TRUE(fp1.isFile()); + ASSERT_FALSE(fp1.empty()); + string cwd = FileSystem::getcwd(); + ASSERT_EQ(fp1.absolute(), cwd + "/FilePathTest.cpp"); + + FilePath fp2(""); + ASSERT_FALSE(fp2.isFile()); + ASSERT_FALSE(fp2.empty()); + ASSERT_EQ(fp2.absolute(), FileSystem::getcwd()); +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FileSystemTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FileSystemTest.cpp new file mode 100644 index 00000000000..5b8c6912d31 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FileSystemTest.cpp @@ -0,0 +1,119 @@ +/************************************************************************* +** FileSystemTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "FileSystem.h" + +#ifndef SRCDIR +#define SRCDIR "." +#endif + +using namespace std; + + +TEST(FileSystemTest, exists) { + EXPECT_TRUE(FileSystem::exists(SRCDIR"/FileSystemTest.cpp")); + EXPECT_FALSE(FileSystem::exists(SRCDIR"/FileSystemTest.cxx")); +} + + +TEST(FileSystemTest, filetype) { + EXPECT_TRUE(FileSystem::isFile(SRCDIR"/FileSystemTest.cpp")); + EXPECT_FALSE(FileSystem::isDirectory(SRCDIR"/FileSystemTest.cpp")); + EXPECT_TRUE(FileSystem::isDirectory("../tests")); + EXPECT_FALSE(FileSystem::isFile("../tests")); +} + + +TEST(FileSystemTest, remove) { + const char *tmpfile = "out.tmp"; + ofstream ofs(tmpfile); + ofs << "FileSystemTest::remove\n"; + ofs.close(); + EXPECT_TRUE(FileSystem::exists(tmpfile)); + FileSystem::remove(tmpfile); + EXPECT_FALSE(FileSystem::exists(tmpfile)); +} + + +TEST(FileSystemTest, rename) { + const char *tmpfile1 = "out.tmp"; + const char *tmpfile2 = "out-new.tmp"; + ofstream ofs(tmpfile1); + ofs << "FileSystemTest::remove\n"; + ofs.close(); + EXPECT_TRUE(FileSystem::exists(tmpfile1)); + FileSystem::rename(tmpfile1, tmpfile2); + EXPECT_FALSE(FileSystem::exists(tmpfile1)); + EXPECT_TRUE(FileSystem::exists(tmpfile2)); + FileSystem::remove(tmpfile2); + EXPECT_FALSE(FileSystem::exists(tmpfile2)); +} + + +TEST(FileSystemTest, filesize) { + const char *tmpfile = "out.tmp"; + ofstream ofs(tmpfile, ios::binary); + for (int i=0; i < 123; ++i) + ofs.put(i); + ofs.close(); + EXPECT_EQ(FileSystem::filesize(tmpfile), 123); + FileSystem::remove(tmpfile); +} + + +TEST(FileSystemTest, copy) { + const char *tmpfile1 = "out.tmp"; + const char *tmpfile2 = "out-new.tmp"; + ofstream ofs(tmpfile1); + ofs << "FileSystemTest::copy\n"; + ofs.close(); + FileSystem::copy(tmpfile1, tmpfile2); + ifstream ifs1(tmpfile1); + ifstream ifs2(tmpfile2); + EXPECT_TRUE(ifs1 && ifs2); + while (!ifs1.eof()) { + EXPECT_EQ(ifs1.get(), ifs2.get()); + } + EXPECT_TRUE(ifs2.eof()); + FileSystem::remove(tmpfile1); + FileSystem::remove(tmpfile2); +} + + +TEST(FileSystemTest, move) { + const char *tmpfile1 = "out.tmp"; + const char *tmpfile2 = "out-new.tmp"; + ofstream ofs(tmpfile1); + const char *str = "FileSystemTest::copy\n"; + ofs << str; + ofs.close(); + FileSystem::copy(tmpfile1, tmpfile2, true); + ifstream ifs1(tmpfile1); + ifstream ifs2(tmpfile2); + EXPECT_TRUE(!ifs1 && ifs2); + while (*str) { + EXPECT_EQ(*str++, ifs2.get()); + } + ifs2.get(); + EXPECT_TRUE(ifs2.eof()); + FileSystem::remove(tmpfile2); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FontManagerTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FontManagerTest.cpp new file mode 100644 index 00000000000..e7259b80f7c --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FontManagerTest.cpp @@ -0,0 +1,76 @@ +/************************************************************************* +** FontManagerTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "Font.h" +#include "FontManager.h" +#include "FileFinder.h" + +class FontManagerTest : public ::testing::Test +{ + protected: + void SetUp () { + FileFinder::init("FontManagerTest", false); + FontManager &fm = FontManager::instance(); + fm.registerFont(10, "cmr10", 1274110073, 10, 10); + fm.registerFont(11, "cmr10", 1274110073, 10, 12); + fm.registerFont( 9, "cmr10", 1274110073, 10, 14); + } +}; + + +TEST_F(FontManagerTest, fontID1) { + FontManager &fm = FontManager::instance(); + EXPECT_EQ(fm.fontID(10), 0); + EXPECT_EQ(fm.fontID(11), 1); + EXPECT_EQ(fm.fontID(9), 2); + EXPECT_EQ(fm.fontID(1), -1); +} + + +TEST_F(FontManagerTest, font_ID2) { + FontManager &fm = FontManager::instance(); + EXPECT_EQ(fm.fontID("cmr10"), 0); +} + + +TEST_F(FontManagerTest, getFont) { + FontManager &fm = FontManager::instance(); + const Font *f1 = fm.getFont(10); + EXPECT_TRUE(f1); + EXPECT_EQ(f1->name(), "cmr10"); + EXPECT_TRUE(dynamic_cast(f1)); + + const Font *f2 = fm.getFont(11); + EXPECT_TRUE(f2); + EXPECT_NE(f1, f2); + EXPECT_EQ(f2->name(), "cmr10"); + EXPECT_TRUE(dynamic_cast(f2)); + EXPECT_EQ(f2->uniqueFont(), f1); +} + + +TEST_F(FontManagerTest, getFontById) { + FontManager &fm = FontManager::instance(); + EXPECT_EQ(fm.getFont(10), fm.getFontById(0)); + EXPECT_EQ(fm.getFont("cmr10"), fm.getFontById(0)); +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FontMapTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FontMapTest.cpp new file mode 100644 index 00000000000..92bd6420724 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/FontMapTest.cpp @@ -0,0 +1,63 @@ +/************************************************************************* +** FontMapTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "FontMap.h" + +using std::ifstream; + +TEST(FontMapTest, pdf_map) { + const char *fname = "tests/dvipdfm_test.map"; + ifstream ifs(fname); + if (ifs) { + FontMap fm(fname); + EXPECT_EQ(strcmp(fm.lookup("MyriadPro-Bold-8t"), "MyriadPro-Bold"), 0); + EXPECT_EQ(strcmp(fm.lookup("cmbsy8"), "cmbsy7"), 0); + // entry without mapped name + EXPECT_EQ(fm.lookup("msam10"), (const char*)0); + EXPECT_EQ(fm.lookup("msbm10"), (const char*)0); + EXPECT_EQ(fm.lookup("msbm10"), (const char*)0); + EXPECT_EQ(fm.lookup("i don't exist"), (const char*)0); + + EXPECT_EQ(strcmp(fm.encoding("MyriadPro-Bold-8t"), "my-lf-t1"), 0); + EXPECT_EQ(fm.encoding("cmbsy8"), (const char*)0); + } +} + + +TEST(FontMapTest, ps_map) { + const char *fname = "tests/dvips_test.map"; + ifstream ifs(fname); + if (ifs) { + FontMap fm(fname); + EXPECT_EQ(strcmp(fm.lookup("MyriadPro-Bold-8t"), "MyriadPro-Bold"), 0); + EXPECT_EQ(strcmp(fm.lookup("cmbsy8"), "cmbsy7"), 0); + // entry without mapped name + EXPECT_EQ(fm.lookup("msam10"), (const char*)0); + EXPECT_EQ(fm.lookup("msbm10"), (const char*)0); + EXPECT_EQ(fm.lookup("msbm10"), (const char*)0); + EXPECT_EQ(fm.lookup("i don't exist"), (const char*)0); + + EXPECT_EQ(strcmp(fm.encoding("MyriadPro-Bold-8t"), "my-lf-t1"), 0); + EXPECT_EQ(fm.encoding("cmbsy8"), (const char*)0); + + } +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/GFReaderTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/GFReaderTest.cpp new file mode 100644 index 00000000000..ae527feddbf --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/GFReaderTest.cpp @@ -0,0 +1,252 @@ +/************************************************************************* +** GFReaderTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include +#include +#include "GFReader.h" +#include "macros.h" + +#ifndef SRCDIR +#define SRCDIR "." +#endif + +using namespace std; + + +struct PixelActions : public Bitmap::ForAllData +{ + void pixel (int x, int y, bool set, const Bitmap &bm) { + if (charmap.size() == 0) { + charmap.resize(bm.height()); + for (int i=0; i < bm.height(); i++) + charmap[i] = string(bm.width(), ' '); + } + ASSERT_GE(x, 0); + ASSERT_LT(x, bm.width()); + ASSERT_GE(y, 0); + ASSERT_LT(y, bm.height()); + charmap[y][x] = (set ? '*' : '-'); + } + + vector charmap; +}; + + +const char *letter_a[] = { + "-----------********--------------------", + "--------**************-----------------", + "------*****-------******---------------", + "-----***------------*****--------------", + "----*****------------******------------", + "---*******------------******-----------", + "---********-----------******-----------", + "---********------------******----------", + "---********------------******----------", + "---********-------------******---------", + "----******--------------******---------", + "-----****---------------******---------", + "------------------------******---------", + "------------------------******---------", + "------------------------******---------", + "------------------------******---------", + "-----------------*************---------", + "-------------*****************---------", + "----------*********-----******---------", + "--------*******---------******---------", + "------*******-----------******---------", + "----********------------******---------", + "---*******--------------******---------", + "--********--------------******---------", + "-********---------------******---------", + "-*******----------------******---------", + "-*******----------------******------**-", + "*******-----------------******------**-", + "*******-----------------******------**-", + "*******-----------------******------**-", + "*******----------------*******------**-", + "*******----------------*******------**-", + "********--------------********------**-", + "-*******-------------***-*****------**-", + "-********------------**---*****----**--", + "--********---------****---*****----**--", + "----*******------****------*********---", + "------**************--------*******----", + "---------********------------*****-----", +}; + + +const char *letter_g[] = { + "------------------------------******---", + "------------********--------*********--", + "----------************----****----****-", + "--------*****------*****-***-----*****-", + "-------*****--------*******------*****-", + "------*****----------*****-------*****-", + "-----*****------------*****--------*---", + "----******------------******-----------", + "----******------------******-----------", + "---******--------------******----------", + "---******--------------******----------", + "---******--------------******----------", + "---******--------------******----------", + "---******--------------******----------", + "---******--------------******----------", + "---******--------------******----------", + "---******--------------******----------", + "----******------------******-----------", + "----******------------******-----------", + "-----*****------------*****------------", + "------*****----------*****-------------", + "------******--------*****--------------", + "------*******------*****---------------", + "-----***--************-----------------", + "-----**-----********-------------------", + "----***--------------------------------", + "----***--------------------------------", + "----***--------------------------------", + "----***--------------------------------", + "----****-------------------------------", + "----****-------------------------------", + "----******-----------------------------", + "-----*********************-------------", + "-----************************----------", + "------*************************--------", + "-------**************************------", + "------****************************-----", + "----*****----------------**********----", + "---*****--------------------********---", + "--*****-----------------------******---", + "-*****-------------------------*****---", + "-*****-------------------------******--", + "*****---------------------------*****--", + "*****---------------------------*****--", + "*****---------------------------*****--", + "*****---------------------------*****--", + "*****---------------------------*****--", + "******-------------------------******--", + "-*****-------------------------*****---", + "--*****-----------------------*****----", + "--******---------------------******----", + "----*****-------------------*****------", + "-----******---------------******-------", + "-------*******---------*******---------", + "---------*******************-----------", + "-------------***********---------------", +}; + + +const char *letter_M[] = { + "****************-------------------------------------****************-", + "*****************-----------------------------------*****************-", + "*****************-----------------------------------*****************-", + "-------**********-----------------------------------**********--------", + "--------**-*******---------------------------------**-*******---------", + "--------**-*******---------------------------------**-*******---------", + "--------**--*******-------------------------------**--*******---------", + "--------**--*******-------------------------------**--*******---------", + "--------**--*******-------------------------------**--*******---------", + "--------**---*******-----------------------------**---*******---------", + "--------**---*******-----------------------------**---*******---------", + "--------**---*******-----------------------------**---*******---------", + "--------**----*******---------------------------**----*******---------", + "--------**----*******---------------------------**----*******---------", + "--------**-----*******-------------------------**-----*******---------", + "--------**-----*******-------------------------**-----*******---------", + "--------**-----*******-------------------------**-----*******---------", + "--------**------*******-----------------------**------*******---------", + "--------**------*******-----------------------**------*******---------", + "--------**-------*******---------------------**-------*******---------", + "--------**-------*******---------------------**-------*******---------", + "--------**-------*******---------------------**-------*******---------", + "--------**--------*******-------------------**--------*******---------", + "--------**--------*******-------------------**--------*******---------", + "--------**--------*******-------------------**--------*******---------", + "--------**---------*******-----------------**---------*******---------", + "--------**---------*******-----------------**---------*******---------", + "--------**----------*******---------------**----------*******---------", + "--------**----------*******---------------**----------*******---------", + "--------**----------*******---------------**----------*******---------", + "--------**-----------*******-------------**-----------*******---------", + "--------**-----------*******-------------**-----------*******---------", + "--------**------------*******-----------**------------*******---------", + "--------**------------*******-----------**------------*******---------", + "--------**------------*******-----------**------------*******---------", + "--------**-------------*******---------**-------------*******---------", + "--------**-------------*******---------**-------------*******---------", + "--------**-------------*******---------**-------------*******---------", + "--------**--------------*******-------**--------------*******---------", + "--------**--------------*******-------**--------------*******---------", + "--------**---------------*******-----**---------------*******---------", + "--------**---------------*******-----**---------------*******---------", + "--------**---------------*******-----**---------------*******---------", + "--------**----------------*******---**----------------*******---------", + "--------**----------------*******---**----------------*******---------", + "--------**-----------------*******-**-----------------*******---------", + "--------**-----------------*******-**-----------------*******---------", + "--------**-----------------*******-**-----------------*******---------", + "--------**------------------********------------------*******---------", + "--------**------------------********------------------*******---------", + "--------**------------------********------------------*******---------", + "-------****------------------******-------------------*******---------", + "------******-----------------******-------------------*******---------", + "----**********----------------****-------------------*********--------", + "******************------------****------------***********************-", + "******************------------****------------***********************-", + "******************-------------**-------------***********************-", +}; + + +static void check_letter (const char **lettermap, const vector &charmap) { + for (size_t i=0; i < charmap.size(); i++) + ASSERT_EQ(lettermap[i], charmap[charmap.size()-i-1]); +} + + +TEST(GFReaderTest, executeChar) { + string gf = string(SRCDIR)+"/cmr10.600gf"; + ifstream ifs(gf.c_str()); + ASSERT_TRUE(ifs); + GFReader gfReader(ifs); + PixelActions actions; + + gfReader.executeChar('a'); + ASSERT_EQ(gfReader.getBitmap().width(), 39); + ASSERT_EQ(gfReader.getBitmap().height(), 39); + gfReader.getBitmap().forAllPixels(actions); + check_letter(letter_a, actions.charmap); + + actions.charmap.clear(); + gfReader.executeChar('g'); + ASSERT_EQ(gfReader.getBitmap().width(), 39); + ASSERT_EQ(gfReader.getBitmap().height(), 56); + gfReader.getBitmap().forAllPixels(actions); + check_letter(letter_g, actions.charmap); + + actions.charmap.clear(); + gfReader.executeChar('M'); + ASSERT_EQ(gfReader.getBitmap().width(), 70); + ASSERT_EQ(gfReader.getBitmap().height(), 57); + gfReader.getBitmap().forAllPixels(actions); + check_letter(letter_M, actions.charmap); +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/GraphicPathTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/GraphicPathTest.cpp new file mode 100644 index 00000000000..6263dc90178 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/GraphicPathTest.cpp @@ -0,0 +1,82 @@ +/************************************************************************* +** GraphicPathTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "GraphicPath.h" + +using std::ostringstream; + +TEST(GraphicPathTest, svg) { + GraphicPath path; + path.moveto(0,0); + path.lineto(10,10); + path.cubicto(20,20,30,30,40,40); + path.closepath(); + ostringstream oss; + path.writeSVG(oss); + EXPECT_EQ(oss.str(), "M0 0L10 10C20 20 30 30 40 40Z"); +} + + +TEST(GraphicPathTest, optimize) { + GraphicPath path; + path.moveto(0,0); + path.lineto(10,0); + path.lineto(10,20); + ostringstream oss; + path.writeSVG(oss); + EXPECT_EQ(oss.str(), "M0 0H10V20"); +} + + +TEST(GraphicPathTest, transform) { + GraphicPath path; + path.moveto(0,0); + path.lineto(1,0); + path.lineto(1,1); + path.lineto(0,1); + path.closepath(); + Matrix m(1); + m.scale(2,2); + m.translate(10, 100); + m.rotate(90); + path.transform(m); + ostringstream oss; + path.writeSVG(oss); + EXPECT_EQ(oss.str(), "M-100 10V12H-102V10Z"); +} + + +TEST(GraphicPathTest, closeOpenSubPaths) { + GraphicPath path; + path.moveto(0,0); + path.lineto(1,0); + path.lineto(1,1); + path.lineto(0,1); + path.moveto(10,10); + path.lineto(11,10); + path.lineto(11,11); + path.lineto(10,11); + path.closeOpenSubPaths(); + ostringstream oss; + path.writeSVG(oss); + EXPECT_EQ(oss.str(), "M0 0H1V1H0ZM10 10H11V11H10Z"); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/LengthTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/LengthTest.cpp new file mode 100644 index 00000000000..c7c38f755c4 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/LengthTest.cpp @@ -0,0 +1,120 @@ +/************************************************************************* +** LengthTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include "Length.h" + +TEST(LengthTest, set1) { + Length len; + len.set(1, Length::PT); + EXPECT_EQ(len.pt(), 1); + + len.set(72, Length::BP); + EXPECT_EQ(len.pt(), 72.27); + EXPECT_EQ(len.bp(), 72); + EXPECT_EQ(len.in(), 1); + + len.set(1, Length::IN); + EXPECT_EQ(len.pt(), 72.27); + + len.set(12, Length::PC); + EXPECT_EQ(len.pt(), 72.27); + EXPECT_EQ(len.in(), 1); + + len.set(2.54, Length::CM); + EXPECT_EQ(len.pt(), 72.27); + EXPECT_EQ(len.cm(), 2.54); + EXPECT_EQ(len.mm(), 25.4); + + len.set(25.4, Length::MM); + EXPECT_EQ(len.pt(), 72.27); + EXPECT_EQ(len.cm(), 2.54); + EXPECT_EQ(len.mm(), 25.4); +} + + +TEST(LengthTest, set2) { + Length len; + len.set(1, "pt"); + EXPECT_EQ(len.pt(), 1); + + len.set(72, "bp"); + EXPECT_EQ(len.pt(), 72.27); + EXPECT_EQ(len.bp(), 72); + EXPECT_EQ(len.in(), 1); + EXPECT_EQ(len.pc(), 12); + + len.set(1, "in"); + EXPECT_EQ(len.pt(), 72.27); + + len.set(12, "pc"); + EXPECT_EQ(len.pt(), 72.27); + EXPECT_EQ(len.in(), 1); + EXPECT_EQ(len.pc(), 12); + + len.set(2.54, "cm"); + EXPECT_EQ(len.pt(), 72.27); + EXPECT_EQ(len.cm(), 2.54); + EXPECT_EQ(len.mm(), 25.4); + + len.set(10, "mm"); + EXPECT_EQ(len.cm(), 1); + EXPECT_EQ(len.mm(), 10); + + len.set(1, ""); + EXPECT_EQ(len.pt(), 1); + + ASSERT_THROW(len.set(1, "xy"), UnitException); +} + +TEST(LengthTest, set3) { + Length len; + len.set("1pt"); + EXPECT_EQ(len.pt(), 1); + + len.set("72bp"); + EXPECT_EQ(len.pt(), 72.27); + EXPECT_EQ(len.bp(), 72); + EXPECT_EQ(len.in(), 1); + EXPECT_EQ(len.pc(), 12); + + len.set("1in"); + EXPECT_EQ(len.pt(), 72.27); + + len.set("12pc"); + EXPECT_EQ(len.pt(), 72.27); + EXPECT_EQ(len.in(), 1); + EXPECT_EQ(len.pc(), 12); + + len.set("2.54cm"); + EXPECT_EQ(len.pt(), 72.27); + EXPECT_EQ(len.cm(), 2.54); + EXPECT_EQ(len.mm(), 25.4); + + len.set("10mm"); + EXPECT_EQ(len.cm(), 1); + EXPECT_EQ(len.mm(), 10); + + len.set("1"); + EXPECT_EQ(len.pt(), 1); + + ASSERT_THROW(len.set("1xy"), UnitException); + ASSERT_THROW(len.set("pt"), UnitException); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/Makefile.am new file mode 100644 index 00000000000..ece50a55505 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/Makefile.am @@ -0,0 +1,145 @@ +## This file is part of dvisvgm +## Copyright (C) 2005-2011 Martin Gieseking +## +## Process this file with automake. + +AM_CXXFLAGS = -I$(srcdir)/../src -I$(srcdir)/../../src -Wall -DSRCDIR='"$(srcdir)"' + +TESTS = +check_PROGRAMS = + +TESTS += BoundingBoxTest +check_PROGRAMS += BoundingBoxTest +BoundingBoxTest_SOURCES = BoundingBoxTest.cpp +BoundingBoxTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += CRC32Test +check_PROGRAMS += CRC32Test +CRC32Test_SOURCES = CRC32Test.cpp +CRC32Test_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += CalculatorTest +check_PROGRAMS += CalculatorTest +CalculatorTest_SOURCES = CalculatorTest.cpp +CalculatorTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += ColorSpecialTest +check_PROGRAMS += ColorSpecialTest +ColorSpecialTest_SOURCES = ColorSpecialTest.cpp +ColorSpecialTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += CommandLineTest +check_PROGRAMS += CommandLineTest +CommandLineTest_SOURCES = CommandLineTest.cpp +CommandLineTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += DirectoryTest +check_PROGRAMS += DirectoryTest +DirectoryTest_SOURCES = DirectoryTest.cpp +DirectoryTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += FileFinderTest +check_PROGRAMS += FileFinderTest +FileFinderTest_SOURCES = FileFinderTest.cpp +FileFinderTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += FilePathTest +check_PROGRAMS += FilePathTest +FilePathTest_SOURCES = FilePathTest.cpp +FilePathTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += FileSystemTest +check_PROGRAMS += FileSystemTest +FileSystemTest_SOURCES = FileSystemTest.cpp +FileSystemTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += FontManagerTest +check_PROGRAMS += FontManagerTest +FontManagerTest_SOURCES = FontManagerTest.cpp +FontManagerTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += FontMapTest +check_PROGRAMS += FontMapTest +FontMapTest_SOURCES = FontMapTest.cpp +FontMapTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += GFReaderTest +check_PROGRAMS += GFReaderTest +GFReaderTest_SOURCES = GFReaderTest.cpp +GFReaderTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += GraphicPathTest +check_PROGRAMS += GraphicPathTest +GraphicPathTest_SOURCES = GraphicPathTest.cpp +GraphicPathTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += LengthTest +check_PROGRAMS += LengthTest +LengthTest_SOURCES = LengthTest.cpp +LengthTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += MatrixTest +check_PROGRAMS += MatrixTest +MatrixTest_SOURCES = MatrixTest.cpp +MatrixTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += MessageExceptionTest +check_PROGRAMS += MessageExceptionTest +MessageExceptionTest_SOURCES = MessageExceptionTest.cpp +MessageExceptionTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += PSInterpreterTest +check_PROGRAMS += PSInterpreterTest +PSInterpreterTest_SOURCES = PSInterpreterTest.cpp +PSInterpreterTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += PageRagesTest +check_PROGRAMS += PageRagesTest +PageRagesTest_SOURCES = PageRagesTest.cpp +PageRagesTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += PageSizeTest +check_PROGRAMS += PageSizeTest +PageSizeTest_SOURCES = PageSizeTest.cpp +PageSizeTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += PairTest +check_PROGRAMS += PairTest +PairTest_SOURCES = PairTest.cpp +PairTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += SplittedCharInputBufferTest +check_PROGRAMS += SplittedCharInputBufferTest +SplittedCharInputBufferTest_SOURCES = SplittedCharInputBufferTest.cpp +SplittedCharInputBufferTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += StreamInputBufferTest +check_PROGRAMS += StreamInputBufferTest +StreamInputBufferTest_SOURCES = StreamInputBufferTest.cpp +StreamInputBufferTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += StreamReaderTest +check_PROGRAMS += StreamReaderTest +StreamReaderTest_SOURCES = StreamReaderTest.cpp +StreamReaderTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += StreamWriterTest +check_PROGRAMS += StreamWriterTest +StreamWriterTest_SOURCES = StreamWriterTest.cpp +StreamWriterTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += TypesTest +check_PROGRAMS += TypesTest +TypesTest_SOURCES = TypesTest.cpp +TypesTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTS += VectorStreamTest +check_PROGRAMS += VectorStreamTest +VectorStreamTest_SOURCES = VectorStreamTest.cpp +VectorStreamTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread + +TESTDATA = +TESTDATA += frktest.dvi frktest-wf-cmp.svg frktest-nf-cmp.svg +TESTDATA += sample.dvi sample-wf-cmp.svg sample-nf-cmp.svg +EXTRA_DIST = check-conv normalize.xsl cmr10.600gf $(TESTDATA) +TESTS += check-conv diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/Makefile.in new file mode 100644 index 00000000000..2c39867102f --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/Makefile.in @@ -0,0 +1,845 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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. + +@SET_MAKE@ +VPATH = @srcdir@ +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@ +target_triplet = @target@ +TESTS = BoundingBoxTest$(EXEEXT) CRC32Test$(EXEEXT) \ + CalculatorTest$(EXEEXT) ColorSpecialTest$(EXEEXT) \ + CommandLineTest$(EXEEXT) DirectoryTest$(EXEEXT) \ + FileFinderTest$(EXEEXT) FilePathTest$(EXEEXT) \ + FileSystemTest$(EXEEXT) FontManagerTest$(EXEEXT) \ + FontMapTest$(EXEEXT) GFReaderTest$(EXEEXT) \ + GraphicPathTest$(EXEEXT) LengthTest$(EXEEXT) \ + MatrixTest$(EXEEXT) MessageExceptionTest$(EXEEXT) \ + PSInterpreterTest$(EXEEXT) PageRagesTest$(EXEEXT) \ + PageSizeTest$(EXEEXT) PairTest$(EXEEXT) \ + SplittedCharInputBufferTest$(EXEEXT) \ + StreamInputBufferTest$(EXEEXT) StreamReaderTest$(EXEEXT) \ + StreamWriterTest$(EXEEXT) TypesTest$(EXEEXT) \ + VectorStreamTest$(EXEEXT) check-conv +check_PROGRAMS = BoundingBoxTest$(EXEEXT) CRC32Test$(EXEEXT) \ + CalculatorTest$(EXEEXT) ColorSpecialTest$(EXEEXT) \ + CommandLineTest$(EXEEXT) DirectoryTest$(EXEEXT) \ + FileFinderTest$(EXEEXT) FilePathTest$(EXEEXT) \ + FileSystemTest$(EXEEXT) FontManagerTest$(EXEEXT) \ + FontMapTest$(EXEEXT) GFReaderTest$(EXEEXT) \ + GraphicPathTest$(EXEEXT) LengthTest$(EXEEXT) \ + MatrixTest$(EXEEXT) MessageExceptionTest$(EXEEXT) \ + PSInterpreterTest$(EXEEXT) PageRagesTest$(EXEEXT) \ + PageSizeTest$(EXEEXT) PairTest$(EXEEXT) \ + SplittedCharInputBufferTest$(EXEEXT) \ + StreamInputBufferTest$(EXEEXT) StreamReaderTest$(EXEEXT) \ + StreamWriterTest$(EXEEXT) TypesTest$(EXEEXT) \ + VectorStreamTest$(EXEEXT) +subdir = tests +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am_BoundingBoxTest_OBJECTS = BoundingBoxTest.$(OBJEXT) +BoundingBoxTest_OBJECTS = $(am_BoundingBoxTest_OBJECTS) +BoundingBoxTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_CRC32Test_OBJECTS = CRC32Test.$(OBJEXT) +CRC32Test_OBJECTS = $(am_CRC32Test_OBJECTS) +CRC32Test_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_CalculatorTest_OBJECTS = CalculatorTest.$(OBJEXT) +CalculatorTest_OBJECTS = $(am_CalculatorTest_OBJECTS) +CalculatorTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_ColorSpecialTest_OBJECTS = ColorSpecialTest.$(OBJEXT) +ColorSpecialTest_OBJECTS = $(am_ColorSpecialTest_OBJECTS) +ColorSpecialTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_CommandLineTest_OBJECTS = CommandLineTest.$(OBJEXT) +CommandLineTest_OBJECTS = $(am_CommandLineTest_OBJECTS) +CommandLineTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_DirectoryTest_OBJECTS = DirectoryTest.$(OBJEXT) +DirectoryTest_OBJECTS = $(am_DirectoryTest_OBJECTS) +DirectoryTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_FileFinderTest_OBJECTS = FileFinderTest.$(OBJEXT) +FileFinderTest_OBJECTS = $(am_FileFinderTest_OBJECTS) +FileFinderTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_FilePathTest_OBJECTS = FilePathTest.$(OBJEXT) +FilePathTest_OBJECTS = $(am_FilePathTest_OBJECTS) +FilePathTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_FileSystemTest_OBJECTS = FileSystemTest.$(OBJEXT) +FileSystemTest_OBJECTS = $(am_FileSystemTest_OBJECTS) +FileSystemTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_FontManagerTest_OBJECTS = FontManagerTest.$(OBJEXT) +FontManagerTest_OBJECTS = $(am_FontManagerTest_OBJECTS) +FontManagerTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_FontMapTest_OBJECTS = FontMapTest.$(OBJEXT) +FontMapTest_OBJECTS = $(am_FontMapTest_OBJECTS) +FontMapTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_GFReaderTest_OBJECTS = GFReaderTest.$(OBJEXT) +GFReaderTest_OBJECTS = $(am_GFReaderTest_OBJECTS) +GFReaderTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_GraphicPathTest_OBJECTS = GraphicPathTest.$(OBJEXT) +GraphicPathTest_OBJECTS = $(am_GraphicPathTest_OBJECTS) +GraphicPathTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_LengthTest_OBJECTS = LengthTest.$(OBJEXT) +LengthTest_OBJECTS = $(am_LengthTest_OBJECTS) +LengthTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_MatrixTest_OBJECTS = MatrixTest.$(OBJEXT) +MatrixTest_OBJECTS = $(am_MatrixTest_OBJECTS) +MatrixTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_MessageExceptionTest_OBJECTS = MessageExceptionTest.$(OBJEXT) +MessageExceptionTest_OBJECTS = $(am_MessageExceptionTest_OBJECTS) +MessageExceptionTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_PSInterpreterTest_OBJECTS = PSInterpreterTest.$(OBJEXT) +PSInterpreterTest_OBJECTS = $(am_PSInterpreterTest_OBJECTS) +PSInterpreterTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_PageRagesTest_OBJECTS = PageRagesTest.$(OBJEXT) +PageRagesTest_OBJECTS = $(am_PageRagesTest_OBJECTS) +PageRagesTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_PageSizeTest_OBJECTS = PageSizeTest.$(OBJEXT) +PageSizeTest_OBJECTS = $(am_PageSizeTest_OBJECTS) +PageSizeTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_PairTest_OBJECTS = PairTest.$(OBJEXT) +PairTest_OBJECTS = $(am_PairTest_OBJECTS) +PairTest_DEPENDENCIES = ../src/libdvisvgm.a ../potracelib/libpotrace.a +am_SplittedCharInputBufferTest_OBJECTS = \ + SplittedCharInputBufferTest.$(OBJEXT) +SplittedCharInputBufferTest_OBJECTS = \ + $(am_SplittedCharInputBufferTest_OBJECTS) +SplittedCharInputBufferTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_StreamInputBufferTest_OBJECTS = StreamInputBufferTest.$(OBJEXT) +StreamInputBufferTest_OBJECTS = $(am_StreamInputBufferTest_OBJECTS) +StreamInputBufferTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_StreamReaderTest_OBJECTS = StreamReaderTest.$(OBJEXT) +StreamReaderTest_OBJECTS = $(am_StreamReaderTest_OBJECTS) +StreamReaderTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_StreamWriterTest_OBJECTS = StreamWriterTest.$(OBJEXT) +StreamWriterTest_OBJECTS = $(am_StreamWriterTest_OBJECTS) +StreamWriterTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_TypesTest_OBJECTS = TypesTest.$(OBJEXT) +TypesTest_OBJECTS = $(am_TypesTest_OBJECTS) +TypesTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +am_VectorStreamTest_OBJECTS = VectorStreamTest.$(OBJEXT) +VectorStreamTest_OBJECTS = $(am_VectorStreamTest_OBJECTS) +VectorStreamTest_DEPENDENCIES = ../src/libdvisvgm.a \ + ../potracelib/libpotrace.a +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +SOURCES = $(BoundingBoxTest_SOURCES) $(CRC32Test_SOURCES) \ + $(CalculatorTest_SOURCES) $(ColorSpecialTest_SOURCES) \ + $(CommandLineTest_SOURCES) $(DirectoryTest_SOURCES) \ + $(FileFinderTest_SOURCES) $(FilePathTest_SOURCES) \ + $(FileSystemTest_SOURCES) $(FontManagerTest_SOURCES) \ + $(FontMapTest_SOURCES) $(GFReaderTest_SOURCES) \ + $(GraphicPathTest_SOURCES) $(LengthTest_SOURCES) \ + $(MatrixTest_SOURCES) $(MessageExceptionTest_SOURCES) \ + $(PSInterpreterTest_SOURCES) $(PageRagesTest_SOURCES) \ + $(PageSizeTest_SOURCES) $(PairTest_SOURCES) \ + $(SplittedCharInputBufferTest_SOURCES) \ + $(StreamInputBufferTest_SOURCES) $(StreamReaderTest_SOURCES) \ + $(StreamWriterTest_SOURCES) $(TypesTest_SOURCES) \ + $(VectorStreamTest_SOURCES) +DIST_SOURCES = $(BoundingBoxTest_SOURCES) $(CRC32Test_SOURCES) \ + $(CalculatorTest_SOURCES) $(ColorSpecialTest_SOURCES) \ + $(CommandLineTest_SOURCES) $(DirectoryTest_SOURCES) \ + $(FileFinderTest_SOURCES) $(FilePathTest_SOURCES) \ + $(FileSystemTest_SOURCES) $(FontManagerTest_SOURCES) \ + $(FontMapTest_SOURCES) $(GFReaderTest_SOURCES) \ + $(GraphicPathTest_SOURCES) $(LengthTest_SOURCES) \ + $(MatrixTest_SOURCES) $(MessageExceptionTest_SOURCES) \ + $(PSInterpreterTest_SOURCES) $(PageRagesTest_SOURCES) \ + $(PageSizeTest_SOURCES) $(PairTest_SOURCES) \ + $(SplittedCharInputBufferTest_SOURCES) \ + $(StreamInputBufferTest_SOURCES) $(StreamReaderTest_SOURCES) \ + $(StreamWriterTest_SOURCES) $(TypesTest_SOURCES) \ + $(VectorStreamTest_SOURCES) +ETAGS = etags +CTAGS = ctags +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_CPPFLAGS = @AM_CPPFLAGS@ +AM_LDFLAGS = @AM_LDFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATE = @DATE@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXTRA_LIBS = @EXTRA_LIBS@ +FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ +FREETYPE_LIBS = @FREETYPE_LIBS@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +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@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +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@ +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@ +sbindir = @sbindir@ +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@ +AM_CXXFLAGS = -I$(srcdir)/../src -I$(srcdir)/../../src -Wall -DSRCDIR='"$(srcdir)"' +BoundingBoxTest_SOURCES = BoundingBoxTest.cpp +BoundingBoxTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +CRC32Test_SOURCES = CRC32Test.cpp +CRC32Test_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +CalculatorTest_SOURCES = CalculatorTest.cpp +CalculatorTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +ColorSpecialTest_SOURCES = ColorSpecialTest.cpp +ColorSpecialTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +CommandLineTest_SOURCES = CommandLineTest.cpp +CommandLineTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +DirectoryTest_SOURCES = DirectoryTest.cpp +DirectoryTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +FileFinderTest_SOURCES = FileFinderTest.cpp +FileFinderTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +FilePathTest_SOURCES = FilePathTest.cpp +FilePathTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +FileSystemTest_SOURCES = FileSystemTest.cpp +FileSystemTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +FontManagerTest_SOURCES = FontManagerTest.cpp +FontManagerTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +FontMapTest_SOURCES = FontMapTest.cpp +FontMapTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +GFReaderTest_SOURCES = GFReaderTest.cpp +GFReaderTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +GraphicPathTest_SOURCES = GraphicPathTest.cpp +GraphicPathTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +LengthTest_SOURCES = LengthTest.cpp +LengthTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +MatrixTest_SOURCES = MatrixTest.cpp +MatrixTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +MessageExceptionTest_SOURCES = MessageExceptionTest.cpp +MessageExceptionTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +PSInterpreterTest_SOURCES = PSInterpreterTest.cpp +PSInterpreterTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +PageRagesTest_SOURCES = PageRagesTest.cpp +PageRagesTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +PageSizeTest_SOURCES = PageSizeTest.cpp +PageSizeTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +PairTest_SOURCES = PairTest.cpp +PairTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +SplittedCharInputBufferTest_SOURCES = SplittedCharInputBufferTest.cpp +SplittedCharInputBufferTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +StreamInputBufferTest_SOURCES = StreamInputBufferTest.cpp +StreamInputBufferTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +StreamReaderTest_SOURCES = StreamReaderTest.cpp +StreamReaderTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +StreamWriterTest_SOURCES = StreamWriterTest.cpp +StreamWriterTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +TypesTest_SOURCES = TypesTest.cpp +TypesTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +VectorStreamTest_SOURCES = VectorStreamTest.cpp +VectorStreamTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -lpthread +TESTDATA = frktest.dvi frktest-wf-cmp.svg frktest-nf-cmp.svg \ + sample.dvi sample-wf-cmp.svg sample-nf-cmp.svg +EXTRA_DIST = check-conv normalize.xsl cmr10.600gf $(TESTDATA) +all: all-am + +.SUFFIXES: +.SUFFIXES: .cpp .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 tests/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign tests/Makefile +.PRECIOUS: 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__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + 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-checkPROGRAMS: + -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) +BoundingBoxTest$(EXEEXT): $(BoundingBoxTest_OBJECTS) $(BoundingBoxTest_DEPENDENCIES) + @rm -f BoundingBoxTest$(EXEEXT) + $(CXXLINK) $(BoundingBoxTest_OBJECTS) $(BoundingBoxTest_LDADD) $(LIBS) +CRC32Test$(EXEEXT): $(CRC32Test_OBJECTS) $(CRC32Test_DEPENDENCIES) + @rm -f CRC32Test$(EXEEXT) + $(CXXLINK) $(CRC32Test_OBJECTS) $(CRC32Test_LDADD) $(LIBS) +CalculatorTest$(EXEEXT): $(CalculatorTest_OBJECTS) $(CalculatorTest_DEPENDENCIES) + @rm -f CalculatorTest$(EXEEXT) + $(CXXLINK) $(CalculatorTest_OBJECTS) $(CalculatorTest_LDADD) $(LIBS) +ColorSpecialTest$(EXEEXT): $(ColorSpecialTest_OBJECTS) $(ColorSpecialTest_DEPENDENCIES) + @rm -f ColorSpecialTest$(EXEEXT) + $(CXXLINK) $(ColorSpecialTest_OBJECTS) $(ColorSpecialTest_LDADD) $(LIBS) +CommandLineTest$(EXEEXT): $(CommandLineTest_OBJECTS) $(CommandLineTest_DEPENDENCIES) + @rm -f CommandLineTest$(EXEEXT) + $(CXXLINK) $(CommandLineTest_OBJECTS) $(CommandLineTest_LDADD) $(LIBS) +DirectoryTest$(EXEEXT): $(DirectoryTest_OBJECTS) $(DirectoryTest_DEPENDENCIES) + @rm -f DirectoryTest$(EXEEXT) + $(CXXLINK) $(DirectoryTest_OBJECTS) $(DirectoryTest_LDADD) $(LIBS) +FileFinderTest$(EXEEXT): $(FileFinderTest_OBJECTS) $(FileFinderTest_DEPENDENCIES) + @rm -f FileFinderTest$(EXEEXT) + $(CXXLINK) $(FileFinderTest_OBJECTS) $(FileFinderTest_LDADD) $(LIBS) +FilePathTest$(EXEEXT): $(FilePathTest_OBJECTS) $(FilePathTest_DEPENDENCIES) + @rm -f FilePathTest$(EXEEXT) + $(CXXLINK) $(FilePathTest_OBJECTS) $(FilePathTest_LDADD) $(LIBS) +FileSystemTest$(EXEEXT): $(FileSystemTest_OBJECTS) $(FileSystemTest_DEPENDENCIES) + @rm -f FileSystemTest$(EXEEXT) + $(CXXLINK) $(FileSystemTest_OBJECTS) $(FileSystemTest_LDADD) $(LIBS) +FontManagerTest$(EXEEXT): $(FontManagerTest_OBJECTS) $(FontManagerTest_DEPENDENCIES) + @rm -f FontManagerTest$(EXEEXT) + $(CXXLINK) $(FontManagerTest_OBJECTS) $(FontManagerTest_LDADD) $(LIBS) +FontMapTest$(EXEEXT): $(FontMapTest_OBJECTS) $(FontMapTest_DEPENDENCIES) + @rm -f FontMapTest$(EXEEXT) + $(CXXLINK) $(FontMapTest_OBJECTS) $(FontMapTest_LDADD) $(LIBS) +GFReaderTest$(EXEEXT): $(GFReaderTest_OBJECTS) $(GFReaderTest_DEPENDENCIES) + @rm -f GFReaderTest$(EXEEXT) + $(CXXLINK) $(GFReaderTest_OBJECTS) $(GFReaderTest_LDADD) $(LIBS) +GraphicPathTest$(EXEEXT): $(GraphicPathTest_OBJECTS) $(GraphicPathTest_DEPENDENCIES) + @rm -f GraphicPathTest$(EXEEXT) + $(CXXLINK) $(GraphicPathTest_OBJECTS) $(GraphicPathTest_LDADD) $(LIBS) +LengthTest$(EXEEXT): $(LengthTest_OBJECTS) $(LengthTest_DEPENDENCIES) + @rm -f LengthTest$(EXEEXT) + $(CXXLINK) $(LengthTest_OBJECTS) $(LengthTest_LDADD) $(LIBS) +MatrixTest$(EXEEXT): $(MatrixTest_OBJECTS) $(MatrixTest_DEPENDENCIES) + @rm -f MatrixTest$(EXEEXT) + $(CXXLINK) $(MatrixTest_OBJECTS) $(MatrixTest_LDADD) $(LIBS) +MessageExceptionTest$(EXEEXT): $(MessageExceptionTest_OBJECTS) $(MessageExceptionTest_DEPENDENCIES) + @rm -f MessageExceptionTest$(EXEEXT) + $(CXXLINK) $(MessageExceptionTest_OBJECTS) $(MessageExceptionTest_LDADD) $(LIBS) +PSInterpreterTest$(EXEEXT): $(PSInterpreterTest_OBJECTS) $(PSInterpreterTest_DEPENDENCIES) + @rm -f PSInterpreterTest$(EXEEXT) + $(CXXLINK) $(PSInterpreterTest_OBJECTS) $(PSInterpreterTest_LDADD) $(LIBS) +PageRagesTest$(EXEEXT): $(PageRagesTest_OBJECTS) $(PageRagesTest_DEPENDENCIES) + @rm -f PageRagesTest$(EXEEXT) + $(CXXLINK) $(PageRagesTest_OBJECTS) $(PageRagesTest_LDADD) $(LIBS) +PageSizeTest$(EXEEXT): $(PageSizeTest_OBJECTS) $(PageSizeTest_DEPENDENCIES) + @rm -f PageSizeTest$(EXEEXT) + $(CXXLINK) $(PageSizeTest_OBJECTS) $(PageSizeTest_LDADD) $(LIBS) +PairTest$(EXEEXT): $(PairTest_OBJECTS) $(PairTest_DEPENDENCIES) + @rm -f PairTest$(EXEEXT) + $(CXXLINK) $(PairTest_OBJECTS) $(PairTest_LDADD) $(LIBS) +SplittedCharInputBufferTest$(EXEEXT): $(SplittedCharInputBufferTest_OBJECTS) $(SplittedCharInputBufferTest_DEPENDENCIES) + @rm -f SplittedCharInputBufferTest$(EXEEXT) + $(CXXLINK) $(SplittedCharInputBufferTest_OBJECTS) $(SplittedCharInputBufferTest_LDADD) $(LIBS) +StreamInputBufferTest$(EXEEXT): $(StreamInputBufferTest_OBJECTS) $(StreamInputBufferTest_DEPENDENCIES) + @rm -f StreamInputBufferTest$(EXEEXT) + $(CXXLINK) $(StreamInputBufferTest_OBJECTS) $(StreamInputBufferTest_LDADD) $(LIBS) +StreamReaderTest$(EXEEXT): $(StreamReaderTest_OBJECTS) $(StreamReaderTest_DEPENDENCIES) + @rm -f StreamReaderTest$(EXEEXT) + $(CXXLINK) $(StreamReaderTest_OBJECTS) $(StreamReaderTest_LDADD) $(LIBS) +StreamWriterTest$(EXEEXT): $(StreamWriterTest_OBJECTS) $(StreamWriterTest_DEPENDENCIES) + @rm -f StreamWriterTest$(EXEEXT) + $(CXXLINK) $(StreamWriterTest_OBJECTS) $(StreamWriterTest_LDADD) $(LIBS) +TypesTest$(EXEEXT): $(TypesTest_OBJECTS) $(TypesTest_DEPENDENCIES) + @rm -f TypesTest$(EXEEXT) + $(CXXLINK) $(TypesTest_OBJECTS) $(TypesTest_LDADD) $(LIBS) +VectorStreamTest$(EXEEXT): $(VectorStreamTest_OBJECTS) $(VectorStreamTest_DEPENDENCIES) + @rm -f VectorStreamTest$(EXEEXT) + $(CXXLINK) $(VectorStreamTest_OBJECTS) $(VectorStreamTest_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BoundingBoxTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CRC32Test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CalculatorTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ColorSpecialTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CommandLineTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DirectoryTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileFinderTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FilePathTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileSystemTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontManagerTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontMapTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GFReaderTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GraphicPathTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LengthTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MatrixTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MessageExceptionTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSInterpreterTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PageRagesTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PageSizeTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PairTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SplittedCharInputBufferTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamInputBufferTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamReaderTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamWriterTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TypesTest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VectorStreamTest.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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 +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + 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" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + echo "$$grn$$dashes"; \ + else \ + echo "$$red$$dashes"; \ + fi; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes$$std"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(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 + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +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-checkPROGRAMS clean-generic mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -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 -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ + clean-checkPROGRAMS clean-generic ctags distclean \ + distclean-compile distclean-generic 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 pdf pdf-am ps ps-am tags uninstall \ + uninstall-am + + +# 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: diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/MatrixTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/MatrixTest.cpp new file mode 100644 index 00000000000..9567d52c6ea --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/MatrixTest.cpp @@ -0,0 +1,68 @@ +/************************************************************************* +** MatrixTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "Matrix.h" + +using std::ostringstream; + +TEST(MatrixTest, svg) { + double v1[] = {1,2,3,4,5,6,7,8,9}; + Matrix m1(v1); + ostringstream oss; + m1.write(oss); + EXPECT_EQ(oss.str(), "((1,2,3),(4,5,6),(7,8,9))"); + EXPECT_EQ(m1.getSVG(), "matrix(1 4 2 5 3 6)"); + + double v2[] = {1,2}; + Matrix m2(v2, 2); + oss.str(""); + m2.write(oss); + EXPECT_EQ(oss.str(), "((1,2,0),(0,1,0),(0,0,1))"); + EXPECT_EQ(m2.getSVG(), "matrix(1 0 2 1 0 0)"); +} + + +TEST(MatrixTest, transpose) { + double v[] = {1,2,3,4,5,6,7,8,9}; + Matrix m(v); + m.transpose(); + ostringstream oss; + m.write(oss); + EXPECT_EQ(oss.str(), "((1,4,7),(2,5,8),(3,6,9))"); + EXPECT_EQ(m.getSVG(), "matrix(1 2 4 5 7 8)"); +} + + +TEST(MatrixTest, checks) { + Matrix m(1); + EXPECT_TRUE(m.isIdentity()); + double tx, ty; + EXPECT_TRUE(m.isTranslation(tx, ty)); + EXPECT_EQ(tx, 0); + EXPECT_EQ(ty, 0); + m.translate(1,2); + EXPECT_TRUE(m.isTranslation(tx, ty)); + EXPECT_EQ(tx, 1); + EXPECT_EQ(ty, 2); + m.scale(2, 2); + EXPECT_FALSE(m.isTranslation(tx, ty)); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/MessageExceptionTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/MessageExceptionTest.cpp new file mode 100644 index 00000000000..11eb87c29eb --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/MessageExceptionTest.cpp @@ -0,0 +1,78 @@ +/************************************************************************* +** BoundingBoxTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include "MessageException.h" + +using namespace std; + +static void throw_exception (const string &msg) { + throw MessageException(msg); +} + + +TEST(MessageExceptionTest, catch_direct) { + bool caught=false; + try { + throw_exception("test message"); + FAIL(); + } + catch (MessageException &e) { + ASSERT_TRUE(strcmp(e.what(), "test message") == 0); + caught = true; + } + catch (...) { + FAIL(); + } + ASSERT_TRUE(caught); +} + + +TEST(MessageExceptionTest, catch_indirect1) { + bool caught=false; + try { + throw_exception("test message"); + FAIL(); + } + catch (exception &e) { + ASSERT_TRUE(strcmp(e.what(), "test message") == 0); + caught = true; + } + catch (...) { + FAIL(); + } + ASSERT_TRUE(caught); +} + + +TEST(MessageExceptionTest, catch_indirect2) { + bool caught=false; + try { + throw_exception("test message"); + FAIL(); + } + catch (...) { + caught = true; + } + ASSERT_TRUE(caught); +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PSInterpreterTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PSInterpreterTest.cpp new file mode 100644 index 00000000000..d5c8c82274b --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PSInterpreterTest.cpp @@ -0,0 +1,178 @@ +/************************************************************************* +** PSInterpreterTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include "PSInterpreter.h" + +#include +#include + +using namespace std; + +class PSTestActions : public PSActions +{ + public: + void applyscalevals (vector &p) {print("applyscalevals", p);} + void clip (vector &p) {print("clip", p);} + void closepath (vector &p) {print("closepath", p);} + void curveto (vector &p) {print("curveto", p);} + void eoclip (vector &p) {print("eoclip", p);} + void eofill (vector &p) {print("eofill", p);} + void fill (vector &p) {print("fill", p);} + void gsave (vector &p) {print("gsave", p);} + void grestore (vector &p) {print("grestore", p);} + void grestoreall(std::vector &p) {print("grestoreall", p);} + void initclip (vector &p) {print("initclip", p);} + void lineto (vector &p) {print("lineto", p);} + void moveto (vector &p) {print("moveto", p);} + void newpath (vector &p) {print("newpath", p);} + void querypos (vector &p) {print("querypos", p);} + void restore(std::vector &p) {print("restore", p);} + void rotate (vector &p) {print("rotate", p);} + void save(std::vector &p) {print("save", p);} + void scale (vector &p) {print("scale", p);} + void setcmykcolor (vector &p) {print("setcmykcolor", p);} + void setdash (vector &p) {print("setdash", p);} + void setgray (vector &p) {print("setgray", p);} + void sethsbcolor (vector &p) {print("sethsbcolor", p);} + void setlinecap (vector &p) {print("setlinecap", p);} + void setlinejoin (vector &p) {print("setlinejoin", p);} + void setlinewidth (vector &p) {print("setlinewidth", p);} + void setmatrix (vector &p) {print("setmatrix", p);} + void setmiterlimit (vector &p) {print("setmiterlimit", p);} + void setopacityalpha (vector &p) {print("setopacityalpha", p);} + void setrgbcolor (vector &p) {print("setrgbcolor", p);} + void stroke (vector &p) {print("stroke", p);} + void translate (vector &p) {print("translate", p);} + + + string result () const {return _oss.str();} + void clear () {_oss.str("");} + + protected: + void print (const char *op, const vector &p) { + _oss << op; + for (size_t i=0; i < p.size(); ++i) + _oss << ' ' << p[i]; + _oss << ';'; + } + + private: + ostringstream _oss; +}; + + +TEST(PSInterpreterTest, init) { + PSTestActions actions; + PSInterpreter psi(&actions); + ASSERT_TRUE(psi.active()); + ASSERT_EQ(actions.result(), ""); +} + + +TEST(PSInterpreterTest, gsave_grestore) { + PSTestActions actions; + PSInterpreter psi(&actions); + psi.execute("gsave "); + ASSERT_EQ(actions.result(), "gsave;"); + actions.clear(); + + psi.execute("grestore "); + ASSERT_EQ(actions.result(), "setlinewidth 1;setlinecap 0;setlinejoin 0;setmiterlimit 10;setrgbcolor 0 0 0;setmatrix 1 0 0 1 0 0;setdash 0;grestore;"); + actions.clear(); + + psi.execute("1 setlinecap 5 setmiterlimit 0 1 0 setrgbcolor gsave 0 setlinecap 10 setmiterlimit "); + ASSERT_EQ(actions.result(), "setlinecap 1;setmiterlimit 5;setrgbcolor 0 1 0;gsave;setlinecap 0;setmiterlimit 10;"); + actions.clear(); + + psi.execute("grestore "); + ASSERT_EQ(actions.result(), "setlinewidth 1;setlinecap 1;setlinejoin 0;setmiterlimit 5;setrgbcolor 0 1 0;setmatrix 1 0 0 1 0 0;setdash 0;grestore;"); +} + + +TEST(PSInterpreterTest, stroke_fill) { + PSTestActions actions; + PSInterpreter psi(&actions); + psi.execute("0 0 moveto 10 10 lineto 0 10 lineto closepath stroke "); + ASSERT_EQ(actions.result(), "newpath;moveto 0 0;lineto 10 10;lineto 0 10;closepath;stroke;"); + actions.clear(); + + psi.execute("0 0 moveto 10 10 lineto 0 10 lineto closepath fill "); + ASSERT_EQ(actions.result(), "newpath;moveto 0 0;lineto 10 10;lineto 0 10;closepath;fill;"); +} + + +TEST(PSInterpreterTest, clip) { + PSTestActions actions; + PSInterpreter psi(&actions); + psi.execute("initclip "); + ASSERT_EQ(actions.result(), "initclip;"); + actions.clear(); + + psi.execute("0 0 moveto 10 10 lineto 0 10 lineto closepath clip "); + ASSERT_EQ(actions.result(), "newpath;moveto 0 0;lineto 10 10;lineto 0 10;closepath;clip;"); +} + + +TEST(PSInterpreterTest, transform) { + PSTestActions actions; + PSInterpreter psi(&actions); + psi.execute("10 10 scale 90 rotate 100 -100 translate "); + ASSERT_EQ(actions.result(), "scale 10 10;rotate 90;translate 100 -100;"); +} + + +TEST(PSInterpreterTest, calculate) { + PSTestActions actions; + PSInterpreter psi(&actions); + psi.execute("2 3 add 4 mul 5 div rotate "); + ASSERT_EQ(actions.result(), "rotate 4;"); +} + + +TEST(PSInterpreterTest, setlinewidth) { + PSTestActions actions; + PSInterpreter psi(&actions); + psi.execute("10 setlinewidth "); + ASSERT_EQ(actions.result(), "applyscalevals 1 1 1;setlinewidth 10;"); + actions.clear(); + + psi.execute("5 5 scale 10 setlinewidth "); + ASSERT_EQ(actions.result(), "scale 5 5;applyscalevals 5 5 1;setlinewidth 10;"); + actions.clear(); + + psi.execute("90 rotate 10 setlinewidth "); + ASSERT_EQ(actions.result(), "rotate 90;applyscalevals 5 5 0;setlinewidth 10;"); + actions.clear(); + + psi.execute("-30 rotate 10 setlinewidth "); + ASSERT_EQ(actions.result(), "rotate -30;applyscalevals 5 5 0.5;setlinewidth 10;"); +} + + +TEST(PSInterpreterTest, matrix) { + PSTestActions actions; + PSInterpreter psi(&actions); + psi.execute("matrix setmatrix "); + ASSERT_EQ(actions.result(), "setmatrix 1 0 0 1 0 0;"); + actions.clear(); + psi.execute("10 100 translate 30 rotate matrix currentmatrix setmatrix "); + ASSERT_EQ(actions.result(), "translate 10 100;rotate 30;setmatrix 0.866025 0.5 -0.5 0.866025 10 100;"); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PageRagesTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PageRagesTest.cpp new file mode 100644 index 00000000000..353ea15b7d1 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PageRagesTest.cpp @@ -0,0 +1,167 @@ +/************************************************************************* +** PageRagesTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "PageRanges.h" + +using namespace std; + +static ostream& operator << (ostream &os, const PageRanges::Range &r) { + return os << '(' << r.first << ',' << r.second << ')'; +} + + +struct Range +{ + int l, r; +}; + + +static bool is_equal (const PageRanges &pr, const Range *r) { + int i=0; + for (PageRanges::ConstIterator it=pr.begin(); it != pr.end(); ++it) { + if (it->first != r[i].l || it->second != r[i].r) + return false; + ++i; + } + return true; +} + + +TEST(PageRangesTest, single) { + PageRanges pr; + ASSERT_TRUE(pr.parse("123")); + ASSERT_FALSE(pr.ranges().empty()); + ASSERT_EQ(pr.ranges().front(), PageRanges::Range(123,123)); + ASSERT_EQ(pr.pages(), 1); +} + + +TEST(PageRangesTest, single_range) { + PageRanges pr; + ASSERT_TRUE(pr.parse("3-19")); + ASSERT_FALSE(pr.ranges().empty()); + ASSERT_EQ(pr.ranges().front(), PageRanges::Range(3,19)); + ASSERT_EQ(pr.pages(), 17); +} + + +TEST(PageRangesTest, single_range_inv) { + PageRanges pr; + ASSERT_TRUE(pr.parse("19-3")); + ASSERT_FALSE(pr.ranges().empty()); + ASSERT_EQ(pr.ranges().front(), PageRanges::Range(3,19)); + ASSERT_EQ(pr.pages(), 17); +} + + +TEST(PageRangesTest, single_range_lopen) { + PageRanges pr; + ASSERT_TRUE(pr.parse("-19")); + ASSERT_FALSE(pr.ranges().empty()); + ASSERT_EQ(pr.ranges().front(), PageRanges::Range(1,19)); + ASSERT_EQ(pr.pages(), 19); +} + + +TEST(PageRangesTest, single_range_ropen) { + PageRanges pr; + ASSERT_TRUE(pr.parse("4-", 100)); + ASSERT_FALSE(pr.ranges().empty()); + ASSERT_EQ(pr.ranges().front(), PageRanges::Range(4,100)); + ASSERT_EQ(pr.pages(), 97); +} + + +TEST(PageRangesTest, multiple1) { + PageRanges pr; + ASSERT_TRUE(pr.parse("11,6,9,1,75,6,3")); + ASSERT_EQ(pr.size(), 6); + Range cmp[] = {{1,1},{3,3},{6,6},{9,9},{11,11},{75,75}}; + ASSERT_TRUE(is_equal(pr, cmp)); + ASSERT_EQ(pr.pages(), 6); +} + + +TEST(PageRangesTest, multiple2) { + PageRanges pr; + ASSERT_TRUE(pr.parse("2,6,9,1,75,6,3")); + ASSERT_EQ(pr.size(), 4); + Range cmp[] = {{1,3},{6,6},{9,9},{75,75}}; + ASSERT_TRUE(is_equal(pr, cmp)); +} + + +TEST(PageRangesTest, multiple3) { + PageRanges pr; + ASSERT_TRUE(pr.parse("2,6,9-11,1,25-,19-13,6,3", 100)); + ASSERT_EQ(pr.size(), 5); + Range cmp[] = {{1,3},{6,6},{9,11},{13,19},{25,100}}; + ASSERT_TRUE(is_equal(pr, cmp)); +} + + +TEST(PageRangesTest, overlap1) { + PageRanges pr; + ASSERT_TRUE(pr.parse("5-11, 8-15")); + ASSERT_EQ(pr.size(), 1); + Range cmp[] = {{5,15}}; + ASSERT_TRUE(is_equal(pr, cmp)); +} + + +TEST(PageRangesTest, overlap2) { + PageRanges pr; + ASSERT_TRUE(pr.parse("23-30, 5-11, 17-23, 12-19")); + ASSERT_EQ(pr.size(), 1); + Range cmp[] = {{5,30}}; + ASSERT_TRUE(is_equal(pr, cmp)); +} + + +TEST(PageRangesTest, overlap3) { + PageRanges pr; + ASSERT_TRUE(pr.parse("22-30, 5-11, 21-23, 12-19")); + ASSERT_EQ(pr.size(), 2); + Range cmp[] = {{5,19},{21,30}}; + ASSERT_TRUE(is_equal(pr, cmp)); +} + + +TEST(PageRangesTest, overlap4) { + PageRanges pr; + ASSERT_TRUE(pr.parse("-15, 20-, 8, 12-16, 18-19", 100)); + ASSERT_EQ(pr.size(), 2); + Range cmp[] = {{1,16},{18,100}}; + ASSERT_TRUE(is_equal(pr, cmp)); + ASSERT_TRUE(pr.parse("17")); + ASSERT_EQ(pr.size(), 1); + ASSERT_EQ(pr.ranges().front(), PageRanges::Range(1,100)); +} + + +TEST(PageRangesTest, error) { + PageRanges pr; + ASSERT_FALSE(pr.parse("x")); + ASSERT_FALSE(pr.parse("5-x")); + ASSERT_FALSE(pr.parse("5 6")); + ASSERT_FALSE(pr.parse("5,")); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PageSizeTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PageSizeTest.cpp new file mode 100644 index 00000000000..785fde6d162 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PageSizeTest.cpp @@ -0,0 +1,73 @@ +/************************************************************************* +** PageSizeTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "PageSize.h" + + +class PageSizeTest : public ::testing::Test +{ + protected: + struct PageData + { + const char *id; + double width, height; + }; + + static const PageData pageData[]; + + PageSize ps; +}; + + +const PageSizeTest::PageData PageSizeTest::pageData[] = { + {"A4", 210, 297}, + {"a4", 210, 297}, + {"a4-p", 210, 297}, + {"a4-portrait", 210, 297}, + {"a4-l", 297, 210}, + {"a4-landscape", 297, 210}, + {"a5", 148, 210}, + {"c10", 28, 40}, + {"letter", 216, 279}, + {0, 0, 0} +}; + + +TEST_F(PageSizeTest, resize) { + EXPECT_FALSE(ps.valid()); + + for (const PageData *p = pageData; p && p->id; p++) { + ps.resize(p->id); + EXPECT_DOUBLE_EQ(ps.widthInMM(), p->width); + EXPECT_DOUBLE_EQ(ps.heightInMM(), p->height); + } +} + + +TEST_F(PageSizeTest, exceptions) { + EXPECT_THROW(ps.resize("a"), PageSizeException); + EXPECT_THROW(ps.resize("e4"), PageSizeException); + EXPECT_THROW(ps.resize("a4-unknown"), PageSizeException); +} + + + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PairTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PairTest.cpp new file mode 100644 index 00000000000..9807cc7a353 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/PairTest.cpp @@ -0,0 +1,125 @@ +/************************************************************************* +** PairTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "Pair.h" + +using namespace std; + +TEST(PairTest, constructor) { + DPair p(-1.5, 2); + ASSERT_EQ(p.x(), -1.5); + ASSERT_EQ(p.y(), 2); + DPair q = p; + ASSERT_EQ(q.x(), -1.5); + ASSERT_EQ(q.y(), 2); +} + + +TEST(PairTest, setter) { + DPair p(1,2); + ASSERT_EQ(p, DPair(1,2)); + p.x(3); + ASSERT_EQ(p, DPair(3,2)); + p.y(5); + ASSERT_EQ(p, DPair(3,5)); +} + + +TEST(PairTest, length) { + ASSERT_EQ(DPair(0,0).length(), 0); + ASSERT_EQ(DPair(1,0).length(), 1); + ASSERT_EQ(DPair(0,1).length(), 1); + ASSERT_EQ(DPair(-1,0).length(), 1); + ASSERT_EQ(DPair(0,-1).length(), 1); + + // check some Pythagorean triples + for (int i=1; i < 10; ++i) { + for (int j=i+1; j <= 10; ++j) { + int a = j*j-i*i; + int b = 2*i*j; + int c = j*j+i*i; + ASSERT_EQ(DPair(a, b).length(), c); + ASSERT_EQ(DPair(b, a).length(), c); + ASSERT_EQ(DPair(-a, b).length(), c); + ASSERT_EQ(DPair(-b, a).length(), c); + ASSERT_EQ(DPair(-a, -b).length(), c); + } + } +} + + +TEST(PairTest, add) { + ASSERT_EQ(DPair(2,3)+DPair(0,0), DPair(2,3)); + ASSERT_EQ(DPair(2,3)+DPair(4,5), DPair(6,8)); + ASSERT_EQ(DPair(2,3)+DPair(-4,-5), DPair(-2,-2)); +} + + +TEST(PairTest, sub) { + ASSERT_EQ(DPair(2,3)-DPair(0,0), DPair(2,3)); + ASSERT_EQ(DPair(2,3)-DPair(4,5), DPair(-2,-2)); + ASSERT_EQ(DPair(2,3)-DPair(-4,-5), DPair(6,8)); +} + + +TEST(PairTest, mul) { + ASSERT_EQ(DPair(2,3)*0.0, DPair(0,0)); + ASSERT_EQ(DPair(2,3)*1.0, DPair(2,3)); + ASSERT_EQ(DPair(2,3)*2.0, DPair(4,6)); + ASSERT_EQ(DPair(2,3)*(-2.0), DPair(-4,-6)); +} + + +TEST(PairTest, div) { + ASSERT_EQ(DPair(2,3)/1.0, DPair(2,3)); + ASSERT_EQ(DPair(2,3)/2.0, DPair(1,1.5)); + ASSERT_EQ(DPair(2,3)/(-2.0), DPair(-1,-1.5)); +} + + +TEST(PairTest, equality) { + ASSERT_TRUE(DPair(2,3) == DPair(2,3)); + ASSERT_FALSE(DPair(2,3) == DPair(-2,-3)); + ASSERT_TRUE(DPair(2,3)+DPair(4,5) == DPair(6,8)); + ASSERT_FALSE(DPair(2,3)+DPair(4,5) != DPair(6,8)); +} + + +TEST(PairTest, ortho) { + ASSERT_EQ(DPair(0,0).ortho(), DPair(0,0)); + ASSERT_EQ(DPair(1,0).ortho(), DPair(0,1)); + ASSERT_EQ(DPair(0,1).ortho(), DPair(-1,0)); + ASSERT_EQ(DPair(-1,0).ortho(), DPair(0,-1)); + ASSERT_EQ(DPair(0,-1).ortho(), DPair(1,0)); +} + + +TEST(PairTest, write) { + ostringstream oss; + DPair p(3,4); + oss << p; + ASSERT_EQ(oss.str(), "(3,4)"); + p *= 2; + oss.str(""); + oss << p; + ASSERT_EQ(oss.str(), "(6,8)"); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/SplittedCharInputBufferTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/SplittedCharInputBufferTest.cpp new file mode 100644 index 00000000000..ff8970da2c7 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/SplittedCharInputBufferTest.cpp @@ -0,0 +1,181 @@ +/************************************************************************* +** SplittedCharInputBufferTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include "InputBuffer.h" +#include "InputReader.h" + +using std::istringstream; + +TEST(SplittedCharInputBufferTest, get) { + const char *buf1 = "abcdef"; + const char *buf2 = "ghijklmnopqrstuvwxyz"; + SplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2)); + BufferInputReader in(buffer); + bool ok=true; + for (int i=0; !in.eof() && ok; i++) { + EXPECT_LT(i, 26); + EXPECT_EQ(in.get(), 'a'+i); + ok = (i < 26); + } +} + + +TEST(SplittedCharInputBufferTest, peek) { + const char *buf1 = "abcdef"; + const char *buf2 = "ghijklmnopqrstuvwxyz"; + SplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2)); + BufferInputReader in(buffer); + EXPECT_EQ(in.peek(), 'a'); + for (int i=0; i < 26; i++) + EXPECT_EQ(in.peek(i), 'a'+i); + EXPECT_EQ(in.peek(26), -1); +} + + +TEST(SplittedCharInputBufferTest, check) { + const char *buf1 = "abcde"; + const char *buf2 = "fghijklmnopqrstuvwxyz"; + SplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2)); + BufferInputReader in(buffer); + EXPECT_TRUE(in.check("abc", false)); + EXPECT_TRUE(in.check("abc", true)); + EXPECT_TRUE(in.check("def", true)); + EXPECT_TRUE(in.check("ghi", true)); + EXPECT_TRUE(in.check("jkl", true)); + EXPECT_TRUE(in.check("mnopqrst", false)); + EXPECT_TRUE(in.check("mnopqrst", true)); + EXPECT_TRUE(in.check("uvwxyz", true)); + EXPECT_EQ(in.get(), -1); +} + + +TEST(SplittedCharInputBufferTest, skip) { + const char *buf1 = "abcde"; + const char *buf2 = "fghijklmnopqrstuvwxyz"; + SplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2)); + BufferInputReader in(buffer); + in.skip(3); + EXPECT_EQ(in.peek(), 'd'); + in.skipUntil("ijk", false); + EXPECT_EQ(in.peek(), 'i'); + in.skipUntil("ijk", true); + EXPECT_EQ(in.peek(), 'l'); + in.skipUntil("z", true); + EXPECT_TRUE(in.eof()); +} + + +TEST(SplittedCharInputBufferTest, parseInt) { + const char *buf1 = "1234,-"; + const char *buf2 = "5,+6,10.-"; + SplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2)); + BufferInputReader in(buffer); + int n; + EXPECT_TRUE(in.parseInt(n)); + EXPECT_EQ(n, 1234); + EXPECT_EQ(in.get(), ','); + + EXPECT_TRUE(in.parseInt(n)); + EXPECT_EQ(n, -5); + EXPECT_EQ(in.get(), ','); + + EXPECT_TRUE(in.parseInt(n)); + EXPECT_EQ(n, 6); + EXPECT_EQ(in.get(), ','); + + EXPECT_TRUE(in.parseInt(n)); + EXPECT_EQ(n, 10); + EXPECT_EQ(in.get(), '.'); + + EXPECT_FALSE(in.parseInt(n)); + EXPECT_EQ(in.get(), '-'); +} + + +TEST(SplittedCharInputBufferTest, parseInt_base) { + const char *buf1 = "1234,-5,10,1a"; + const char *buf2 = "bc,1234a"; + SplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2)); + BufferInputReader in(buffer); + int n; + EXPECT_TRUE(in.parseInt(10, n)); + EXPECT_EQ(n, 1234); + EXPECT_EQ(in.get(), ','); + + EXPECT_FALSE(in.parseInt(10, n)); + in.get(); + EXPECT_TRUE(in.parseInt(10, n)); + EXPECT_EQ(n, 5); + EXPECT_EQ(in.get(), ','); + + EXPECT_TRUE(in.parseInt(16, n)); + EXPECT_EQ(n, 16); + EXPECT_EQ(in.get(), ','); + + EXPECT_TRUE(in.parseInt(16, n)); + EXPECT_EQ(n, 0x1abc); + EXPECT_EQ(in.get(), ','); + + EXPECT_TRUE(in.parseInt(8, n)); + EXPECT_EQ(n, 01234); + EXPECT_EQ(in.get(), 'a'); +} + + +TEST(SplittedCharInputBufferTest, parseDouble) { + const char *buf1 = "1234,-5,6.12,-3"; + const char *buf2 = ".1415,-.1,12e2,10.-"; + SplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2)); + BufferInputReader in(buffer); + double d; + EXPECT_EQ(in.parseDouble(d), 'i'); + EXPECT_EQ(d, 1234.0); + EXPECT_EQ(in.get(), ','); + + EXPECT_EQ(in.parseDouble(d), 'i'); + EXPECT_EQ(d, -5.0); + EXPECT_EQ(in.get(), ','); + + EXPECT_EQ(in.parseDouble(d), 'f'); + EXPECT_EQ(d, 6.12); + EXPECT_EQ(in.get(), ','); + + EXPECT_EQ(in.parseDouble(d), 'f'); + EXPECT_EQ(d, -3.1415); + EXPECT_EQ(in.get(), ','); + + EXPECT_EQ(in.parseDouble(d), 'f'); + EXPECT_EQ(d, -0.1); + EXPECT_EQ(in.get(), ','); + + EXPECT_EQ(in.parseDouble(d), 'f'); + EXPECT_EQ(d, 1200); + EXPECT_EQ(in.get(), ','); + + EXPECT_EQ(in.parseDouble(d), 'f'); + EXPECT_EQ(d, 10.0); + EXPECT_EQ(in.peek(), '-'); + + EXPECT_FALSE(in.parseDouble(d)); + EXPECT_EQ(in.get(), '-'); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/StreamInputBufferTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/StreamInputBufferTest.cpp new file mode 100644 index 00000000000..56769671708 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/StreamInputBufferTest.cpp @@ -0,0 +1,203 @@ +/************************************************************************* +** StreamInputBufferTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include +#include "InputBuffer.h" +#include "InputReader.h" + +using std::istringstream; +using std::map; +using std::string; + +TEST(StreamInputBufferTest, get) { + istringstream iss("abcdefghijklmnopqrstuvwxyz"); + StreamInputBuffer buffer(iss, 10); + BufferInputReader in(buffer); + bool ok=true; + for (int i=0; !in.eof() && ok; i++) { + EXPECT_LT(i, 26); + EXPECT_EQ(in.get(), 'a'+i); + ok = (i < 26); + } +} + + +TEST(StreamInputBufferTest, peek) { + istringstream iss("abcdefghijklmnopqrstuvwxyz"); + StreamInputBuffer buffer(iss, 10); + BufferInputReader in(buffer); + EXPECT_EQ(in.peek(), 'a'); + for (int i=0; i < 20; i++) + EXPECT_EQ(in.peek(i), 'a'+i); + // we can't look forward more than BUFSIZE characters (10 in this case) + for (int i=21; i < 26; i++) + EXPECT_EQ(in.peek(i), -1); +} + + +TEST(StreamInputBufferTest, check) { + istringstream iss("abcdefghijklmnopqrstuvwxyz"); + StreamInputBuffer buffer(iss, 10); + BufferInputReader in(buffer); + EXPECT_TRUE(in.check("abc", false)); + EXPECT_TRUE(in.check("abc", true)); + EXPECT_TRUE(in.check("def", true)); + EXPECT_TRUE(in.check("ghi", true)); + EXPECT_TRUE(in.check("jkl", true)); + EXPECT_TRUE(in.check("mnopqrst", false)); + EXPECT_TRUE(in.check("mnopqrst", true)); + EXPECT_TRUE(in.check("uvwxyz", true)); +} + + +TEST(StreamInputBufferTest, skip) { + istringstream iss("abcdefghijklmnopqrstuvwxyz"); + StreamInputBuffer buffer(iss, 10); + BufferInputReader in(buffer); + in.skip(3); + EXPECT_EQ(in.peek(), 'd'); + in.skipUntil("ijk", false); + EXPECT_EQ(in.peek(), 'i'); + in.skipUntil("ijk", true); + EXPECT_EQ(in.peek(), 'l'); + in.skipUntil("z", true); + EXPECT_TRUE(in.eof()); +} + + +TEST(StreamInputBufferTest, parseInt) { + istringstream iss("1234,-5,+6,10.-"); + StreamInputBuffer buffer(iss, 10); + BufferInputReader in(buffer); + int n; + EXPECT_TRUE(in.parseInt(n)); + EXPECT_EQ(n, 1234); + EXPECT_EQ(in.get(), ','); + + EXPECT_TRUE(in.parseInt(n)); + EXPECT_EQ(n, -5); + EXPECT_EQ(in.get(), ','); + + EXPECT_TRUE(in.parseInt(n)); + EXPECT_EQ(n, 6); + EXPECT_EQ(in.get(), ','); + + EXPECT_TRUE(in.parseInt(n)); + EXPECT_EQ(n, 10); + EXPECT_EQ(in.get(), '.'); + + EXPECT_FALSE(in.parseInt(n)); + EXPECT_EQ(in.get(), '-'); +} + + +TEST(StreamInputBufferTest, parseInt_base) { + istringstream iss("1234,-5,10,1abc,1234a"); + StreamInputBuffer buffer(iss, 10); + BufferInputReader in(buffer); + int n; + EXPECT_TRUE(in.parseInt(10, n)); + EXPECT_EQ(n, 1234); + EXPECT_EQ(in.get(), ','); + + EXPECT_FALSE(in.parseInt(10, n)); + in.get(); + EXPECT_TRUE(in.parseInt(10, n)); + EXPECT_EQ(n, 5); + EXPECT_EQ(in.get(), ','); + + EXPECT_TRUE(in.parseInt(16, n)); + EXPECT_EQ(n, 16); + EXPECT_EQ(in.get(), ','); + + EXPECT_TRUE(in.parseInt(16, n)); + EXPECT_EQ(n, 0x1abc); + EXPECT_EQ(in.get(), ','); + + EXPECT_TRUE(in.parseInt(8, n)); + EXPECT_EQ(n, 01234); + EXPECT_EQ(in.get(), 'a'); +} + + +TEST(StreamInputBufferTest, parseDouble) { + istringstream iss("1234,-5,6.12,-3.1415,-.1,12e2,10.-"); + StreamInputBuffer buffer(iss, 10); + BufferInputReader in(buffer); + double d; + EXPECT_EQ(in.parseDouble(d), 'i'); + EXPECT_EQ(d, 1234.0); + EXPECT_EQ(in.get(), ','); + + EXPECT_EQ(in.parseDouble(d), 'i'); + EXPECT_EQ(d, -5.0); + EXPECT_EQ(in.get(), ','); + + EXPECT_EQ(in.parseDouble(d), 'f'); + EXPECT_EQ(d, 6.12); + EXPECT_EQ(in.get(), ','); + + EXPECT_EQ(in.parseDouble(d), 'f'); + EXPECT_EQ(d, -3.1415); + EXPECT_EQ(in.get(), ','); + + EXPECT_EQ(in.parseDouble(d), 'f'); + EXPECT_EQ(d, -0.1); + EXPECT_EQ(in.get(), ','); + + EXPECT_EQ(in.parseDouble(d), 'f'); + EXPECT_EQ(d, 1200); + EXPECT_EQ(in.get(), ','); + + EXPECT_EQ(in.parseDouble(d), 'f'); + EXPECT_EQ(d, 10.0); + EXPECT_EQ(in.peek(), '-'); + + EXPECT_FALSE(in.parseDouble(d)); + EXPECT_EQ(in.get(), '-'); +} + + +TEST(StreamInputBufferTest, attribs) { + istringstream iss("aaa=1 bbb=2 ccc=3 d e"); + StreamInputBuffer buffer(iss, 10); + BufferInputReader in(buffer); + map attr; + int s = in.parseAttributes(attr); + EXPECT_EQ(s, 3); + EXPECT_EQ(attr["aaa"], "1"); + EXPECT_EQ(attr["bbb"], "2"); + EXPECT_EQ(attr["ccc"], "3"); +} + + +TEST(StreamInputBufferTest, invalidate) { + istringstream iss("aaa=1 bbb=2 ccc=3 d e"); + StreamInputBuffer buffer(iss, 10); + EXPECT_EQ(buffer.get(), 'a'); + EXPECT_EQ(buffer.get(), 'a'); + EXPECT_EQ(buffer.get(), 'a'); + EXPECT_EQ(buffer.get(), '='); + buffer.invalidate(); + EXPECT_TRUE(buffer.eof()); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/StreamReaderTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/StreamReaderTest.cpp new file mode 100644 index 00000000000..1b7fd35ad90 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/StreamReaderTest.cpp @@ -0,0 +1,100 @@ +/************************************************************************* +** StreamReaderTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include "CRC32.h" +#include "StreamReader.h" + +using namespace std; + +TEST(StreamReaderTest, readString) { + istringstream iss("dvisvgm converts DVI files to SVG."); + StreamReader reader(iss); + string str = reader.readString(iss.str().length()); + EXPECT_EQ(str, iss.str()); +} + + +TEST(StreamReaderTest, readStringCRC) { + istringstream iss("dvisvgm converts DVI files to SVG."); + StreamReader reader(iss); + CRC32 crc; + string str = reader.readString(iss.str().length(), crc); + EXPECT_EQ(str, iss.str()); + EXPECT_EQ(crc.get(), 0x7c4ef359); +} + + +TEST(StreamReaderTest, readUnsigned) { + string str; + str.push_back('\x00'); + str.push_back('\x01'); + str.push_back('\x02'); + str.push_back('\x03'); + istringstream iss(str); + StreamReader reader(iss); + UInt32 val = reader.readUnsigned(4); + EXPECT_EQ(val, 0x00010203); +} + + +TEST(StreamReaderTest, readUnsignedCRC) { + string str; + str.push_back('\x00'); + str.push_back('\x01'); + str.push_back('\x02'); + str.push_back('\x03'); + istringstream iss(str); + StreamReader reader(iss); + CRC32 crc; + UInt32 val = reader.readUnsigned(4, crc); + EXPECT_EQ(val, 0x00010203); + EXPECT_EQ(crc.get(), 0x8bb98613); +} + + +TEST(StreamReaderTest, readSigned) { + string str; + str.push_back('\xff'); + str.push_back('\xee'); + str.push_back('\xdd'); + str.push_back('\xcc'); + istringstream iss(str); + StreamReader reader(iss); + Int32 val = reader.readUnsigned(4); + EXPECT_EQ(val, 0xffeeddcc); +} + + +TEST(StreamReaderTest, readSignedCRC) { + string str; + str.push_back('\xff'); + str.push_back('\xee'); + str.push_back('\xdd'); + str.push_back('\xcc'); + istringstream iss(str); + StreamReader reader(iss); + CRC32 crc; + Int32 val = reader.readUnsigned(4, crc); + EXPECT_EQ(val, 0xffeeddcc); + EXPECT_EQ(crc.get(), 0xfa79118e); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/StreamWriterTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/StreamWriterTest.cpp new file mode 100644 index 00000000000..4256ce84448 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/StreamWriterTest.cpp @@ -0,0 +1,114 @@ +/************************************************************************* +** StreamWriterTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include +#include "CRC32.h" +#include "StreamWriter.h" + +using namespace std; + +TEST(StreamWriterTest, writeString) { + ostringstream oss; + StreamWriter writer(oss); + string str = "dvisvgm converts DVI files to SVG."; + writer.writeString(str); + EXPECT_EQ(oss.str(), str); + + oss.str(""); + writer.writeString(str, true); + str.push_back('\0'); + EXPECT_EQ(oss.str(), str); +} + + +TEST(StreamWriterTest, writeStringCRC) { + ostringstream oss; + StreamWriter writer(oss); + CRC32 crc; + string str = "dvisvgm converts DVI files to SVG."; + writer.writeString(str, crc); + EXPECT_EQ(oss.str(), str); + EXPECT_EQ(crc.get(), 0x7C4EF359); + + oss.str(""); + crc.reset(); + writer.writeString(str, crc, true); + str.push_back('\0'); + EXPECT_EQ(oss.str(), str); + EXPECT_EQ(crc.get(), 0xc0c9482e); +} + + +TEST(StreamWriterTest, writeUnsigned) { + ostringstream oss; + StreamWriter writer(oss); + writer.writeUnsigned(0x00010203, 4); + string str; + str.push_back('\x00'); + str.push_back('\x01'); + str.push_back('\x02'); + str.push_back('\x03'); + EXPECT_EQ(oss.str(), str); +} + + +TEST(StreamWriterTest, writeUnsignedCRC) { + ostringstream oss; + StreamWriter writer(oss); + CRC32 crc; + writer.writeUnsigned(0x00010203, 4, crc); + string str; + str.push_back('\x00'); + str.push_back('\x01'); + str.push_back('\x02'); + str.push_back('\x03'); + EXPECT_EQ(oss.str(), str); + EXPECT_EQ(crc.get(), 0x8bb98613); +} + + +TEST(StreamWriterTest, writeSigned) { + ostringstream oss; + StreamWriter writer(oss); + writer.writeUnsigned(0xffeeddcc, 4); + string str; + str.push_back('\xff'); + str.push_back('\xee'); + str.push_back('\xdd'); + str.push_back('\xcc'); + EXPECT_EQ(oss.str(), str); +} + + +TEST(StreamWriterTest, writeSignedCRC) { + ostringstream oss; + StreamWriter writer(oss); + CRC32 crc; + writer.writeUnsigned(0xffeeddcc, 4, crc); + string str; + str.push_back('\xff'); + str.push_back('\xee'); + str.push_back('\xdd'); + str.push_back('\xcc'); + EXPECT_EQ(oss.str(), str); + EXPECT_EQ(crc.get(), 0xfa79118e); +} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/TypesTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/TypesTest.cpp new file mode 100644 index 00000000000..5d30cef2369 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/TypesTest.cpp @@ -0,0 +1,57 @@ +/************************************************************************* +** TypesTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include "types.h" + +using namespace std; + + +TEST(TypesTest, size_signed) { + ASSERT_EQ(sizeof(Int8), 1); + ASSERT_EQ(sizeof(Int16), 2); + ASSERT_EQ(sizeof(Int32), 4); + ASSERT_EQ(sizeof(Int64), 8); +} + + +TEST(TypesTest, neg_signed) { + ASSERT_LT(Int8(-1), 0); + ASSERT_LT(Int16(-1), 0); + ASSERT_LT(Int32(-1), 0); + ASSERT_LT(Int64(-1), 0); +} + + +TEST(TypesTest, unsigned_types) { + ASSERT_EQ(sizeof(UInt8), 1); + ASSERT_EQ(sizeof(UInt16), 2); + ASSERT_EQ(sizeof(UInt32), 4); + ASSERT_EQ(sizeof(UInt64), 8); +} + + +TEST(TypesTest, neg_unsigned) { + ASSERT_GT(UInt8(-1), 0); + ASSERT_GT(UInt16(-1), 0); + ASSERT_GT(UInt32(-1), 0); + ASSERT_GT(UInt64(-1), 0); +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/VectorStreamTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/VectorStreamTest.cpp new file mode 100644 index 00000000000..14b03ac763b --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/VectorStreamTest.cpp @@ -0,0 +1,42 @@ +/************************************************************************* +** VectorStreamTest.cpp ** +** ** +** This file is part of dvisvgm -- the DVI to SVG converter ** +** Copyright (C) 2005-2011 Martin Gieseking ** +** ** +** 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 . ** +*************************************************************************/ + +#include +#include +#include "VectorStream.h" + +using std::string; +using std::vector; + +TEST(VectorStreamTest, read) { + const char *str = "abcdefghijklm\0nopqrstuvwxyz"; + vector vec(str, str+27); + VectorInputStream vs(vec); + for (unsigned count = 0; vs; count++) { + int c = vs.get(); + if (count < vec.size()) { + EXPECT_EQ(c, str[count]); + } + else { + EXPECT_EQ(c, -1); + } + } +} + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/check-conv b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/check-conv new file mode 100755 index 00000000000..0def881b648 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/check-conv @@ -0,0 +1,50 @@ +#!/bin/bash +# This file is part of the dvisvgm package and published under the +# terms of the GNU General Public License version 3 or later. +# See file COPYING for further details. +# (C) 2009-2011 Martin Gieseking + + +files=(sample frktest) +state=0 + +BLUE="\E[0;34m" +GREEN="\E[0;32m" +RED="\E[0;31m" +COLOR_OFF="\E[0m" + +if [ \! -e enable-check-conv ]; then + echo -e "${BLUE}conversion checks skipped${COLOR_OFF}" + exit 0 +fi + +for f in ${files[@]}; do + for m in "wf" "nf"; do + infile=${srcdir}/$f + outfile=$f-$m.svg + cmpfile=${srcdir}/$f-$m-cmp.svg + if [ $m = "wf" ]; then + ../src/dvisvgm -v0 -o$outfile $infile + else + ../src/dvisvgm -v0 -n -o$outfile $infile + fi + xsltproc --novalid ${srcdir}/normalize.xsl $outfile | xmllint --format - >tmp1.svg + xsltproc --novalid ${srcdir}/normalize.xsl $cmpfile | xmllint --format - >tmp2.svg + mv tmp1.svg $outfile + + diff $outfile tmp2.svg >$f-$m.diff #>/dev/null + if [ $? -ne 0 ]; then + echo -en "${RED}FAILED $COLOR_OFF" + state=1 + else + echo -en "${GREEN}PASSED $COLOR_OFF" + rm $outfile + fi + echo "converting $f.dvi (mode $m)" + if [ \! -s $f-$m.diff ]; then + rm $f-$m.diff + fi + rm tmp2.svg + done +done +exit $state diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/cmr10.600gf b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/cmr10.600gf new file mode 100644 index 00000000000..6dca421e21c Binary files /dev/null and b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/cmr10.600gf differ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/frktest-nf-cmp.svg b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/frktest-nf-cmp.svg new file mode 100644 index 00000000000..7c40a685071 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/frktest-nf-cmp.svg @@ -0,0 +1,1223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/frktest-wf-cmp.svg b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/frktest-wf-cmp.svg new file mode 100644 index 00000000000..93212ad4abc --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/frktest-wf-cmp.svg @@ -0,0 +1,353 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Nonummys +id +sem»r +aliena +auditorum +lorem +ipsum +quod +omnia +sunt +»ccatore‘: +Lorem +ipsum +˘lor +s +it +amet +con +se˝etuer +adi- +piscing +elit: +Sed +diam +tem–r +incidunt +ut +laˆre +et +˘lor +magna +aliquam +erat +volu«t +ut +wis +i +enim +ad +minim +ffiniam +qui‘ +no<rud +oblationem +cor–remque +suscipit +laˆri‘ + +D +ie +Orgel +,der + +Flđgel +,daŊ + +Fortepiano +unddaŊ + +Clavicord +sind +die +gebrĽuĚliĚĆen +ClavierinĆrumente +zum +Accompagnement. + + +SĚade, +da +die +sĚŹne +Erfindung +deŊ + +HolfeldisĚen +BogenclavierŊ + +noĚniĚt +gemeinnđŃig +geworden +iĆ; +man +kann +dahero +deĄen +besondere +Vorzđge +hierinnen +noĚ +niĚt +genau +beĆimmen. + + +gewi +zu +glauben, +da + +s + +auĚ +bey +der +Begleitung +gut +auŊnehmen +werde. + +V +ondem +ĆattliĚen +Orte +KirĚehrenbaĚ +in +der +FrŁnkisĚen +SĚweiz +f§hrt +ein +einsameŊ +StrŁĚen, +an +der +Ćeil +abƧr- +zenden +Breitseite +der +Ehrenb§rg +vor§ber, +gen +LeutenbaĚ. +In +einer +halben +Stunde + +daŊ +sĚmuĘe +Pfarrdorf +erreiĚt. +S§dŽĆliĚ +deŊselben, +kaum +eine +ViertelĆunde +entfernt, +treĎen +wir +auf +dem +Wege +naĚ +OrtspiŃ +in +einem +SeitentŁlĚen +von +unber§hrter +Na- +tursĚŽnheit +daŊ +uralte, +einsame +KirĚlein +\Sankt +MoriŃ" +mit +seinem +Ćillen +Friedhofe. +In +der +NŁhe +deŊ +KirĚleinŊ +Ćeht +ein +niedrigeŊ, +§ber +eine +Quelle +erbauteŊ +FeldkapellĚen +mit +der +Statue +deŊ +hl. +MauritiuŊ, +dargeĆellt +alŊ +Ritter +in +voller +Wehr. + + + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/frktest.dvi b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/frktest.dvi new file mode 100644 index 00000000000..723b08a2964 Binary files /dev/null and b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/frktest.dvi differ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/normalize.xsl b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/normalize.xsl new file mode 100644 index 00000000000..5a6ba2f62d6 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/normalize.xsl @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/sample-nf-cmp.svg b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/sample-nf-cmp.svg new file mode 100644 index 00000000000..9e2dc81bfb0 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/sample-nf-cmp.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/sample-wf-cmp.svg b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/sample-wf-cmp.svg new file mode 100644 index 00000000000..44393742587 --- /dev/null +++ b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/sample-wf-cmp.svg @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Colortest: +red, +blue, +magen +ta + + + x + 0 + cos + t + d + t + = + + + k + =0 + ( + + 1) + k + x + 2 + k + +1 + + (2 + k + +1)! + + Fon +t +st +yles: + + bold + + , + emphasized + + , + sansserif + + , + SmallCaps + + , + slanted + + 1 + + diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/sample.dvi b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/sample.dvi new file mode 100644 index 00000000000..87e6236021d Binary files /dev/null and b/Build/source/texk/dvisvgm/dvisvgm-1.0.10/tests/sample.dvi differ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9-PATCHES/TL-Changes b/Build/source/texk/dvisvgm/dvisvgm-1.0.9-PATCHES/TL-Changes deleted file mode 100644 index 99779c5d531..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9-PATCHES/TL-Changes +++ /dev/null @@ -1,21 +0,0 @@ -Changes applied to the dvisvgm-1.0.9 tree as obtained from: - http://downloads.sourceforge.net/dvisvgm/dvisvgm-1.0.9.tar.gz - -Removed: - config.guess - config.rpath - config.sub - depcomp - install-sh - missing - -Converted Dos/Win line ends to native: - potracelib/auxiliary.h - potracelib/bitmap.h - potracelib/curve.c - potracelib/decompose.h - potracelib/lists.h - potracelib/progress.h - potracelib/trace.c - potracelib/trace.h - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9-PATCHES/patch-03-texlive_gs_init b/Build/source/texk/dvisvgm/dvisvgm-1.0.9-PATCHES/patch-03-texlive_gs_init deleted file mode 100644 index d341e9cebac..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9-PATCHES/patch-03-texlive_gs_init +++ /dev/null @@ -1,13 +0,0 @@ -diff -ur dvisvgm-1.0.9.orig/src/FileFinder.cpp dvisvgm-1.0.9/src/FileFinder.cpp ---- dvisvgm-1.0.9.orig/src/FileFinder.cpp 2011-10-04 18:35:48.000000000 +0200 -+++ dvisvgm-1.0.9/src/FileFinder.cpp 2011-10-17 11:57:07.000000000 +0200 -@@ -84,6 +84,9 @@ - kpse_set_program_enabled(kpse_tfm_format, 1, kpse_src_env); - kpse_set_program_enabled(kpse_mf_format, 1, kpse_src_env); - kpse_make_tex_discard_errors = false; // don't suppress messages of mktexFOO tools -+#ifdef TEXLIVEWIN32 -+ texlive_gs_init(); -+#endif - #endif - _initialized = true; - init_font_map(usermapname); diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/AUTHORS b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/AUTHORS deleted file mode 100644 index 837e1e96bfb..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/AUTHORS +++ /dev/null @@ -1,10 +0,0 @@ -Martin Gieseking - author of dvisvgm - -Peter Selinger - author of the potrace library - -Deepak Bandyopadhyay, Lutz Kettner - authors of gzstream library - dvisvgm uses a slightly modified version - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/COPYING b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/COPYING deleted file mode 100644 index 94a9ed024d3..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/INSTALL b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/INSTALL deleted file mode 100644 index a4b34144dcf..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/INSTALL +++ /dev/null @@ -1,229 +0,0 @@ -Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software -Foundation, Inc. - - This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. - -Basic Installation -================== - - These are generic installation instructions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. (Caching is -disabled by default to prevent problems with accidental use of stale -cache files.) - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You only need -`configure.ac' if you want to change it or regenerate `configure' using -a newer version of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. - - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. Run `./configure --help' -for details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. - - If you have to use a `make' that does not support the `VPATH' -variable, you have to compile the package for one architecture at a -time in the source code directory. After you have installed the -package for one architecture, use `make distclean' before reconfiguring -for another architecture. - -Installation Names -================== - - By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PATH'. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PATH', the package will use -PATH as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=PATH' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - -Optional Features -================= - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - -Specifying the System Type -========================== - - There may be some features `configure' cannot figure out -automatically, but needs to determine by the type of machine the package -will run on. Usually, assuming the package is built to be run on the -_same_ architectures, `configure' can figure that out, but if it prints -a message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the `--target=TYPE' option to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - - Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -will cause the specified gcc to be used as the C compiler (unless it is -overridden in the site shell script). - -`configure' Invocation -====================== - - `configure' recognizes the following options to control how it -operates. - -`--help' -`-h' - Print a summary of the options to `configure', and exit. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/LGPL-2.1.txt b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/LGPL-2.1.txt deleted file mode 100644 index 602bfc94635..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/LGPL-2.1.txt +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/Makefile.am deleted file mode 100644 index d0557a0e78c..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -## This file is part of dvisvgm -## Copyright (C) 2005-2011 Martin Gieseking -## -## Process this file with automake. - -AUTOMAKE_OPTIONS = foreign -EXTRA_DIST = COPYING LGPL-2.1.txt -SUBDIRS = potracelib src tests doc - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/Makefile.in deleted file mode 100644 index fb7ee798f04..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/Makefile.in +++ /dev/null @@ -1,706 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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. - -@SET_MAKE@ -VPATH = @srcdir@ -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@ -target_triplet = @target@ -subdir = . -DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(top_srcdir)/configure AUTHORS COPYING INSTALL NEWS \ - config.guess config.sub depcomp install-sh missing -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir dist dist-all distcheck -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - { test ! -d "$(distdir)" \ - || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr "$(distdir)"; }; } -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -AM_LDFLAGS = @AM_LDFLAGS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DATE = @DATE@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -EXTRA_LIBS = @EXTRA_LIBS@ -FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ -FREETYPE_LIBS = @FREETYPE_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -OBJEXT = @OBJEXT@ -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@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -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@ -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@ -sbindir = @sbindir@ -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@ -AUTOMAKE_OPTIONS = foreign -EXTRA_DIST = COPYING LGPL-2.1.txt -SUBDIRS = potracelib src tests doc -all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -am--refresh: - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -config.h: stamp-h1 - @if test ! -f $@; then \ - rm -f stamp-h1; \ - $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ - else :; fi - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h -$(srcdir)/config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - 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 -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - 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" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @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 - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -dist-lzma: distdir - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz - $(am__remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: check-recursive -all-am: Makefile config.h -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -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-recursive - -clean-am: clean-generic mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-hdr distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: - -install-html: install-html-recursive - -install-html-am: - -install-info: install-info-recursive - -install-info-am: - -install-man: - -install-pdf: install-pdf-recursive - -install-pdf-am: - -install-ps: install-ps-recursive - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ - ctags-recursive install-am install-strip tags-recursive - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-generic \ - ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ - dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ - distclean distclean-generic distclean-hdr distclean-tags \ - distcleancheck distdir distuninstallcheck 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 installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ - pdf-am ps ps-am tags tags-recursive uninstall uninstall-am - - -# 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: diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/NEWS b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/NEWS deleted file mode 100644 index b3f4f1b5cac..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/NEWS +++ /dev/null @@ -1,230 +0,0 @@ -dvisvgm-1.0.9 (2011-10-13) -- fixed segfault occurred in TeX Live Win32 caused by mf.exe being unavailable - (thanks to Akira Kakuto for tracking down the issue) -- updated bundled potrace library to version 1.10 -- some minor code improvements - -dvisvgm-1.0.8 (2011-05-31) -- PS handler: added evaluation of PS operators save, restore, and grestoreall -- PS handler: fixed potention segfault caused by invisible zero-length paths -- fixed computation of current drawing position influenced by PS and DVI actions -- don't stop Metafont conversions on errors any longer in order to convert - buggy MF fonts properly - -dvisvgm-1.0.7 (2011-05-06) -- improved overall handling of PS specials -- fixed broken PS special subset 'ps::' -- fixed scaling of PS line properties (width, dash distance, etc.) -- fixed semantics of TPIC special 'ip' (doesn't draw polygon outlines any longer) - -dvisvgm-1.0.6 (2011-04-21) -- fixed segfault occured if a (malformed) DVI file calls set_char/put_char - whithout preceding font definition -- added CTRL-C handler -- MiKTeX support updated to version 2.9 -- some code refactorings - -dvisvgm-1.0.5 (2011-03-01) -- added optional integer argument to option -n to disable generation of elements -- added missing unit to width/height attributes of svg root element (SF bug #3185773) -- added integrity check to font cache files -- updated bundled potrace library to version 1.9 -- fixed a couple of minor issues - -dvisvgm-1.0.4 (2010-12-18) -- added missing line width/dash pattern scaling to PS handler -- fixed scaling issue in PS positioning -- fixed compilation issue related to FreeType 2.4.0 - -dvisvgm-1.0.3 (2010-08-06) -- applied some more portability patches for TeX Live -- fixed a potential memory issue -- fixed a transformation issue regarding special 'psfile' (SF bug #3037372) - -dvisvgm-1.0.2 (2010-06-22) -- applied latest TeX Live portability patches sent by Peter Breitenlohner and Karl Berry -- fixed a potrace name clash occurred on Mac OS X Tiger -- fixed putchar() name clash occurred on Solaris -- fixed a couple of conversion warnings -- updated the test suite - -dvisvgm-1.0.1 (2010-06-11) -- fixed a memory issue in the PS handler that could lead to a segfault (SF bug #3013392) -- fixed a recursion issue in the PS handler -- suppress ANSI color code when terminating - -dvisvgm-1.0 (2010-06-08) -- conversion of multiple pages (must be enabled explicitly, see option --pages) -- added transparency support to the PS handler -- improved conversion results of the PS handler -- added support for computation of local bounding boxes -- optional colorization of dvisvgm messages (option --color) -- improved progress indicator (option --progress) -- a couple of improvements of the build system - -dvisvgm-0.9.1 (2010-04-23) -- CSS style definitions omit unnecessary fonts now -- SVG validity was broken when using font elements -- fixed two memory issues that could lead to segfaults - -dvisvgm-0.9 (2010-03-25) -- added option --exact and corresponding algorithms to compute the exact - bounding boxes of characters -- added option --keep that prevents deleting temporary font files -- extended option --trace-all by an optional boolean argument controlling - the re-tracing of glyphs -- fixed bug in evaluation of embedded PS headers -- several code refactorings - -dvisvgm-0.8.8 (2010-02-02) -- added option --libgs and evaluation of environment variable LIBGS - to overwrite the expected file name of the GS shared library - (only available if dvisvgm isn't linked against libgs and GS support - isn't completely disabled) -- option --bbox can now be used to enlarge the minimal bounding box by - a given amount -- fixed bug in evaluation of option --page -- applied patches sent by Peter Breitenlohner to prepare the integration of - dvisvgm into TeX Live -- some code refactorings - -dvisvgm-0.8.7 (2009-11-09) -- fixed a bounding box issue concerning italic corrections -- PS handler: zero-length paths are now drawn as dots -- PS handler: fixed a path positioning issue -- PS handler: colors set by color specials are now considered properly -- added macro {?nl} to be used with special dvisvgm:raw - -dvisvgm-0.8.6 (2009-10-13) -- renamed command-line option --bbox-format to --bbox -- option --bbox can now be used to set an arbitrary bounding box -- added the two special variants "dvisvgm:bbox abs" and "dvisvgm:bbox fix" -- PS clipping path sequences and intersections are now handled correctly -- fixed a PS bounding box bug -- fixed a couple of PS positioning issues reported by John Bowman -- fixed a bit shift overflow in the font tracer occurred on 64-bit systems - -dvisvgm-0.8.5 (2009-10-01) -- added an optional depth parameter to special dvisvgm:raw -- updated the man page -- added LGPL license text needed for the gzstream wrapper classes - -dvisvgm-0.8.4 (2009-09-17) -- improved the command-line parser to be more POSIX-compliant -- added a simple progress indicator for time-consuming special operations -- option --cache prints more information about the cached fonts -- fixed a clipping bug in the PostScript handler - (thanks to John Bowman for also providing a patch for this issue) -- fixed a bug in computation of the PS bounding box -- fixed a memory bug in the GF tracer module - -dvisvgm-0.8.3 (2009-08-28) -- added basic evaluation of the PostScript "show" operator - (handles PSTricks Type 3 fonts properly now) -- improved checks for Ghostscript and potrace library in configure script -- external Ghostscript and potrace development files are used if available -- PostScript header/prologue files are now loaded regardless of converted page -- replaced command-line option variant --cache=? by --cache - -dvisvgm-0.8.2 (2009-08-24) -- changed license of dvisvgm to GPL version 3 or later -- replaced getopt-based command-line parser by own implementation - in order to simplify future internationalizations -- fixed memory bug in fontmap reader - -dvisvgm-0.8.1 (2009-08-02) -- added evaluation of more psfile parameters -- fixed computation of bounding box in psfile special -- fixed compilation errors and a conversion bug occurred on x64 systems - -dvisvgm-0.8 (2009-07-27) -- experimental evaluation of PostScript specials has been added (requires - a recent version of the Ghostscript shared library libgs.so or gsdll32.dll) -- several code improvements and refactorings -- fixed compilation bug occurred when using GCC 4.4.x - -dvisvgm-0.7.3 (2009-04-24) -- fixed bug in font map reader that could cause a segmentation fault -- fixed bug in creation of shorthand path drawing commands -- fixed bug in TPIC special handler - -dvisvgm-0.7.2 (2009-04-02) -- font caching has been added (speeds up embedding of bitmap fonts) -- added option --trace-all that enables tracing of all glyphs of all - bitmap fonts used in the current DVI file. Even glyphs that are currently - not needed are considered. This avoids multiple calls of Metafont for the - same fonts. In combination with the new caching functionality this can - drastically increase the speed of successive dvisvgm calls. -- if option --no-fonts is used, all glyph sizes are now computed correctly -- use shorthand path commands in SVG fonts if possible - -dvisvgm-0.7.1 (2009-03-09) -- evaluation of a subset of emTeX specials has been added -- specials for embedding of raw SVG snippets have been added -- evaluation of TPIC specials has been added -- added background color support -- added option -n, --no-fonts that replaces fonts by paths - (enables applications w/o SVG font support to render dvisvgm's output properly) -- moved defs to top of SVG file to make Firefox's SVG renderer happy -- fixed bug in color handler - -dvisvgm-0.7 (2009-02-16) -- basic support for evaluation of specials has been added -- evaluation of color specials has been added -- renamed command-line option -S to --no-specials and inverted previous behavior -- selected special sets can be disabled by optional arguments to --no-specials - (currently only color specials) -- added option --no-style (see manpage for further details) -- added optional '+' flag to option --map-file (see manpage for further details) -- fixed \magnificaton bug (dvi magnification factor is now applied properly) -- fixed buggy call of maketfm/makemf in Windows/MiKTeX version -- fixed buggy evaluation of command-line argument -m/--map-file -- several internal code improvements - -dvisvgm-0.6.1 (2009-01-29) -- added support for dvips map files -- removed dependency on dvipdfm's map file (now ps2pk.map, psfonts.map or dvipdfm.map is used by default) -- fixed compilation bug #2535497 -- some internal refactorings - -dvisvgm-0.6 (2009-01-23) -- added support for varying font encodings -- updated MiKTeX support using its COM interface -- fixed incomplete handling of nested virtual fonts -- fixed a font handling bug that could cause segmentation faults -- fixed bug in matrix transformation code -- updated bundled potrace library to version 1.8 - -dvisvgm-0.5 (2007-03-26) -- redesigned and improved font handling -- added support for virtual fonts -- evaluation of dvipdfm's map file to find font files with differing - names (e.g. cork-lmr10 => lmr10) -- automatic invocation of mktexmf etc. in case of missing font files (tfm, mf) -- command-line option -m has been renamed to -M -- added command-line options -m/--map-file and -n/--no-mktexmf -- memory bug in StreamCounter class has been fixed -- added sources of Peter Selinger's potrace library (part of potrace, http://potrace.sourceforge.net) - to simplify the build process - -dvisvgm-0.4.3 (2007-01-03) -- problem with changed freetype API (freetype version >= 2.2.1) has been fixed -- updated MiKTeX support to version 2.5 -- minor code improvements -- some unit tests based on CxxTest (http://cxxtest.sourceforge.net) have been added - -dvisvgm-0.4.2 (2005-09-22) -- added SVG transformation options -- some bugfixes in command line frontend and TFM handling -- code refactorings to improve modularity and extensibility - -dvisvgm-0.4.1 (2005-09-02) -- added option -b to specify the bounding box -- added a manual page - -dvisvgm-0.4 (2005-08-24) -- Added a glyph tracing module that vectorizes Metafont's bitmap output - if no corresponding Type 1 font file is available. - -dvisvgm-0.3 (2005-08-10) -- Initial public release with basic conversion functionality. diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/README b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/README deleted file mode 100644 index 2157b7d6078..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/README +++ /dev/null @@ -1,112 +0,0 @@ -dvisvgm -- A DVI to SVG converter - -DESCRIPTION - - dvisvgm is a utility for TeX/LaTeX users. It converts - DVI files to the XML-based scalable vector graphics format SVG. - - -DEPENDENCIES - - dvisvgm relies on the following free libraries: - * FreeType 2 (http://www.freetype.org) - This library is used to extract glyph outlines - from PFB files. - - * Ghostscript (http://pages.cs.wisc.edu/~ghost) - The PostScript special handler requires the Ghostscript - library libgs.so (Linux) or gsdll32.dll (Windows) to be - installed. If the configure script finds the corresponing - Ghostscript development files on the system, it directly - links against libgs.so. Otherwise, the library is looked up - at runtime and PostScript support is enabled only if libgs.so - could be found. - Due to incompatible changes of the Ghostscript API, dvisvgm - requires Ghostscript 8.31 or later. - - * kpathsea - This library is part of the Web2C package and is - usually installed in conjunction with a TeX distribution. - kpathsea provides functions for searching files in the - large texmf tree. - - * potracelib (http://potrace.sourceforge.net) - Peter Selinger's bitmap tracing library is utilized to - vectorize Metafont's bitmap output. - The latest version of the library is bundled with the - source tarball. - - * zlib (http://www.zlib.org) - Compressed SVG files are produced by using functions - of this library and the Gzstream wrapper classes - (http://www.cs.unc.edu/Research/compgeom/gzstream) - which are licensed under LGPL version 2.1 (or optionally any - later version) and should be included with this package. - - If you want to build and run the testsuite located in the tests - subdirectory, you also need the googletest libraries - (http://code.google.com/p/googletest). - - -COMPILATION - - Quick installation info: - * type "./configure" - * type "make" - * type "make install" as root (or "sudo make install") - - For generic configuration instructions see the file INSTALL. - - The configure script should recognize all necessary parameters. - If a library is installed but not detected, specify its location - as commandline parameter of configure, e.g. - ./configure --with-freetype=/usr/local/freetype - (all available options can be displayed with ./configure --help) - - The tracer module calls Metafont in case of lacking TFM or PFB files - via a system call. Please ensure that Metafont is installed and - reachable through the search path. - - If you don't like compiling the sources yourself, you can - download pre-compiled executables for Windows and MiKTeX - from sourceforge.net instead (see below). - - -USAGE - Information about the command-line interface and the available options - can be found in the manual page. - - -ADDITIONAL INFORMATION - This packacke is available from CTAN (dviware/dvisvgm) and can - be downloaded from the project website at sourceforge.net as well: - - http://dvisvgm.sourceforge.net - - Here you can find the sources, precompiled binaries and further additional - information about the converter and related topics. - - If you've found a bug please let me know. You can either send me an - email or preferably use the bug reporting facilities at sourceforge.net - (see http://sourceforge.net/projects/dvisvgm). - - -COPYRIGHT - - Copyright (C) 2005-2011 Martin Gieseking - - 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 . - - See the file COPYING for details. - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/aclocal.m4 b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/aclocal.m4 deleted file mode 100644 index 866c84ad432..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/aclocal.m4 +++ /dev/null @@ -1,1109 +0,0 @@ -# generated automatically by aclocal 1.11.1 -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. -# This file 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. - -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, -[m4_warning([this file was generated for autoconf 2.68. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically `autoreconf'.])]) - -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# serial 1 (pkg-config-0.24) -# -# Copyright © 2004 Scott James Remnant . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- -AC_DEFUN([PKG_PROG_PKG_CONFIG], -[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) -m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) -AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) -AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) -AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=m4_default([$1], [0.9.0]) - AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - PKG_CONFIG="" - fi -fi[]dnl -])# PKG_PROG_PKG_CONFIG - -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# -# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -# only at the first occurence in configure.ac, so if the first place -# it's called might be skipped (such as if it is within an "if", you -# have to call PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- -AC_DEFUN([PKG_CHECK_EXISTS], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -if test -n "$PKG_CONFIG" && \ - AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then - m4_default([$2], [:]) -m4_ifvaln([$3], [else - $3])dnl -fi]) - -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- -m4_define([_PKG_CONFIG], -[if test -n "$$1"; then - pkg_cv_[]$1="$$1" - elif test -n "$PKG_CONFIG"; then - PKG_CHECK_EXISTS([$3], - [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], - [pkg_failed=yes]) - else - pkg_failed=untried -fi[]dnl -])# _PKG_CONFIG - -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- -AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi[]dnl -])# _PKG_SHORT_ERRORS_SUPPORTED - - -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# -# -# -------------------------------------------------------------- -AC_DEFUN([PKG_CHECK_MODULES], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl -AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl - -pkg_failed=no -AC_MSG_CHECKING([for $1]) - -_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) -_PKG_CONFIG([$1][_LIBS], [libs], [$2]) - -m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS -and $1[]_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details.]) - -if test $pkg_failed = yes; then - AC_MSG_RESULT([no]) - _PKG_SHORT_ERRORS_SUPPORTED - if test $_pkg_short_errors_supported = yes; then - $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` - else - $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD - - m4_default([$4], [AC_MSG_ERROR( -[Package requirements ($2) were not met: - -$$1_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -_PKG_TEXT]) - ]) -elif test $pkg_failed = untried; then - AC_MSG_RESULT([no]) - m4_default([$4], [AC_MSG_FAILURE( -[The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -_PKG_TEXT - -To get pkg-config, see .]) - ]) -else - $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS - $1[]_LIBS=$pkg_cv_[]$1[]_LIBS - AC_MSG_RESULT([yes]) - $3 -fi[]dnl -])# PKG_CHECK_MODULES - -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# -# This file 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. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.11' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file 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. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 -# Free Software Foundation, Inc. -# -# This file 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. - -# serial 9 - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 -# Free Software Foundation, Inc. -# -# This file 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. - -# serial 10 - -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], UPC, [depcc="$UPC" am_compiler_list=], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file 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. - -#serial 5 - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. -# -# This file 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. - -# serial 16 - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.62])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -]) - -dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file 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. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST(install_sh)]) - -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. -# -# This file 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. - -# serial 2 - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. -# -# This file 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. - -# serial 4 - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file 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. - -# serial 6 - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# -# This file 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. - -# AM_PROG_MKDIR_P -# --------------- -# Check for `mkdir -p'. -AC_DEFUN([AM_PROG_MKDIR_P], -[AC_PREREQ([2.60])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, -dnl while keeping a definition of mkdir_p for backward compatibility. -dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. -dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of -dnl Makefile.ins that do not define MKDIR_P, so we do our own -dnl adjustment using top_builddir (which is defined more often than -dnl MKDIR_P). -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl -case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file 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. - -# serial 4 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file 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. - -# serial 5 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file 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. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006, 2008 Free Software Foundation, Inc. -# -# This file 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. - -# serial 2 - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004, 2005 Free Software Foundation, Inc. -# -# This file 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. - -# serial 2 - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/config.h.in b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/config.h.in deleted file mode 100644 index b027999e9b3..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/config.h.in +++ /dev/null @@ -1,166 +0,0 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define to 1 if the `closedir' function returns void instead of `int'. */ -#undef CLOSEDIR_VOID - -/* Set to 1 if PostScript support should be disabled */ -#undef DISABLE_GS - -/* Define to 1 if `TIOCGWINSZ' requires . */ -#undef GWINSZ_IN_SYS_IOCTL - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#undef HAVE_DIRENT_H - -/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ -#undef HAVE_DOPRNT - -/* Define to 1 if you have the `ftime' function. */ -#undef HAVE_FTIME - -/* Define to 1 if you have the `gettimeofday' function. */ -#undef HAVE_GETTIMEOFDAY - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the `dl' library (-ldl). */ -#undef HAVE_LIBDL - -/* Define to 1 if you have the `gs' library (-lgs). */ -#undef HAVE_LIBGS - -/* Define to 1 if you have the header file. */ -#undef HAVE_LIBINTL_H - -/* Define to 1 if you have the `kpathsea' library (-lkpathsea). */ -#undef HAVE_LIBKPATHSEA - -/* Define to 1 if you have the `m' library (-lm). */ -#undef HAVE_LIBM - -/* Define to 1 if you have the `potrace' library (-lpotrace). */ -#undef HAVE_LIBPOTRACE - -/* Define to 1 if you have the `z' library (-lz). */ -#undef HAVE_LIBZ - -/* Define to 1 if your system has a GNU libc compatible `malloc' function, and - to 0 otherwise. */ -#undef HAVE_MALLOC - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the `memset' function. */ -#undef HAVE_MEMSET - -/* Define to 1 if you have the header file, and it defines `DIR'. */ -#undef HAVE_NDIR_H - -/* Define to 1 if `stat' has the bug that it succeeds when given the - zero-length file name argument. */ -#undef HAVE_STAT_EMPTY_STRING_BUG - -/* Define to 1 if stdbool.h conforms to C99. */ -#undef HAVE_STDBOOL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the `strcasecmp' function. */ -#undef HAVE_STRCASECMP - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the `strtol' function. */ -#undef HAVE_STRTOL - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#undef HAVE_SYS_DIR_H - -/* Define to 1 if you have the header file, and it defines `DIR'. - */ -#undef HAVE_SYS_NDIR_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TIMEB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TIME_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 if you have the `vprintf' function. */ -#undef HAVE_VPRINTF - -/* Define to 1 if the system has the type `_Bool'. */ -#undef HAVE__BOOL - -/* Define to 1 if `lstat' dereferences a symlink specified with a trailing - slash. */ -#undef LSTAT_FOLLOWS_SLASHED_SYMLINK - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* The machine triplet of the target system */ -#undef TARGET_SYSTEM - -/* Define to 1 if your declares `struct tm'. */ -#undef TM_IN_SYS_TIME - -/* Version number of package */ -#undef VERSION - -/* Define to empty if `const' does not conform to ANSI C. */ -#undef const - -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -#undef inline -#endif - -/* Define to rpl_malloc if the replacement function should be used. */ -#undef malloc - -/* Define to `unsigned int' if does not define. */ -#undef size_t diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/configure b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/configure deleted file mode 100755 index 435db52adb3..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/configure +++ /dev/null @@ -1,7789 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for dvisvgm 1.0.9. -# -# Report bugs to . -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - # Preserve -v and -x to the replacement shell. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; - esac - exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: martin.gieseking@uos.de about your system, including -$0: any error possibly output before this message. Then -$0: install a modern shell, or manually run the script -$0: under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='dvisvgm' -PACKAGE_TARNAME='dvisvgm' -PACKAGE_VERSION='1.0.9' -PACKAGE_STRING='dvisvgm 1.0.9' -PACKAGE_BUGREPORT='martin.gieseking@uos.de' -PACKAGE_URL='' - -ac_unique_file="src" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -AM_LDFLAGS -AM_CPPFLAGS -EXTRA_LIBS -DATE -LIBOBJS -FREETYPE_LIBS -FREETYPE_CFLAGS -PKG_CONFIG_LIBDIR -PKG_CONFIG_PATH -PKG_CONFIG -EGREP -GREP -CPP -RANLIB -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -ac_ct_CC -CFLAGS -CC -am__fastdepCXX_FALSE -am__fastdepCXX_TRUE -CXXDEPMODE -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CXX -CPPFLAGS -LDFLAGS -CXXFLAGS -CXX -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_os -target_vendor -target_cpu -target -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_dependency_tracking -with_zlib -' - ac_precious_vars='build_alias -host_alias -target_alias -CXX -CXXFLAGS -LDFLAGS -LIBS -CPPFLAGS -CCC -CC -CFLAGS -CPP -PKG_CONFIG -PKG_CONFIG_PATH -PKG_CONFIG_LIBDIR -FREETYPE_CFLAGS -FREETYPE_LIBS' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # 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 1.0.9 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/dvisvgm] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] - --target=TARGET configure for building compilers for TARGET [HOST] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of dvisvgm 1.0.9:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-zlib=DIR location of the zlib library - -Some influential environment variables: - CXX C++ compiler command - CXXFLAGS C++ compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CC C compiler command - CFLAGS C compiler flags - CPP C preprocessor - PKG_CONFIG path to pkg-config utility - PKG_CONFIG_PATH - directories to add to pkg-config's search path - PKG_CONFIG_LIBDIR - path overriding pkg-config's built-in search path - FREETYPE_CFLAGS - C compiler flags for FREETYPE, overriding pkg-config - FREETYPE_LIBS - linker flags for FREETYPE, overriding pkg-config - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -dvisvgm configure 1.0.9 -generated by GNU Autoconf 2.68 - -Copyright (C) 2010 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_compile - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## -------------------------------------- ## -## Report this to martin.gieseking@uos.de ## -## -------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_type -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by dvisvgm $as_me 1.0.9, which was -generated by GNU Autoconf 2.68. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -DATE="October 2011" - -ac_config_headers="$ac_config_headers config.h" - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if ${ac_cv_target+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- -am__api_version='1.11' - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error $? "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$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 -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$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_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$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 -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='dvisvgm' - VERSION='1.0.9' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - - - -cat >>confdefs.h <<_ACEOF -#define TARGET_SYSTEM "$target" -_ACEOF - - -# Checks for programs. -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$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 -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$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_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 -$as_echo_n "checking whether the C++ compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C++ compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 -$as_echo_n "checking for C++ compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C++ compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - -depcc="$CXX" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CXX_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$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 -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$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_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$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 -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$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 -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$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_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - - -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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -for ac_func in ftime gettimeofday -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in sys/time.h sys/timeb.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether termios.h defines TIOCGWINSZ" >&5 -$as_echo_n "checking whether termios.h defines TIOCGWINSZ... " >&6; } -if ${ac_cv_sys_tiocgwinsz_in_termios_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#ifdef TIOCGWINSZ - yes -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - ac_cv_sys_tiocgwinsz_in_termios_h=yes -else - ac_cv_sys_tiocgwinsz_in_termios_h=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5 -$as_echo "$ac_cv_sys_tiocgwinsz_in_termios_h" >&6; } - -if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5 -$as_echo_n "checking whether sys/ioctl.h defines TIOCGWINSZ... " >&6; } -if ${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#ifdef TIOCGWINSZ - yes -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes -else - ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5 -$as_echo "$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6; } - - if test $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h = yes; then - -$as_echo "#define GWINSZ_IN_SYS_IOCTL 1" >>confdefs.h - - fi -fi - - -ac_fn_c_check_header_mongrel "$LINENO" "kpathsea/kpathsea.h" "ac_cv_header_kpathsea_kpathsea_h" "$ac_includes_default" -if test "x$ac_cv_header_kpathsea_kpathsea_h" = xyes; then : - -else - as_fn_error $? "please install the kpathsea development package" "$LINENO" 5 -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for kpse_find_file in -lkpathsea" >&5 -$as_echo_n "checking for kpse_find_file in -lkpathsea... " >&6; } -if ${ac_cv_lib_kpathsea_kpse_find_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lkpathsea $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char kpse_find_file (); -int -main () -{ -return kpse_find_file (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_kpathsea_kpse_find_file=yes -else - ac_cv_lib_kpathsea_kpse_find_file=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kpathsea_kpse_find_file" >&5 -$as_echo "$ac_cv_lib_kpathsea_kpse_find_file" >&6; } -if test "x$ac_cv_lib_kpathsea_kpse_find_file" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBKPATHSEA 1 -_ACEOF - - LIBS="-lkpathsea $LIBS" - -else - as_fn_error $? "libkpathsea not found, please install the corresponding package first" "$LINENO" 5 -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking kpathsea version" >&5 -$as_echo_n "checking kpathsea version... " >&6; } -if test "$cross_compiling" = yes; then : - kpseversion=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - int main() { - FILE *f; - f = fopen("kpseversion", "w"); - if(!f) exit(1); - fprintf(f, "%s\n", KPSEVERSION); - fclose(f); - exit(0); - } -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - kpseversion=`cat kpseversion|sed 's/kpathsea version //'` -else - kpseversion= -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$kpseversion\"" >&5 -$as_echo "\"$kpseversion\"" >&6; } -rm -f kpseversion -if test -z "$kpseversion"; then - as_fn_error $? "Could not compile a simple kpathsea program -- check your installation" "$LINENO" 5 -fi - - -# Check how to link potracelib -HAVE_LIBPOTRACE=1 -ac_fn_c_check_header_mongrel "$LINENO" "potracelib.h" "ac_cv_header_potracelib_h" "$ac_includes_default" -if test "x$ac_cv_header_potracelib_h" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5 -$as_echo_n "checking for sqrt in -lm... " >&6; } -if ${ac_cv_lib_m_sqrt+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char sqrt (); -int -main () -{ -return sqrt (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_m_sqrt=yes -else - ac_cv_lib_m_sqrt=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrt" >&5 -$as_echo "$ac_cv_lib_m_sqrt" >&6; } -if test "x$ac_cv_lib_m_sqrt" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBM 1 -_ACEOF - - LIBS="-lm $LIBS" - -fi - # required to pass potrace check - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for potrace_trace in -lpotrace" >&5 -$as_echo_n "checking for potrace_trace in -lpotrace... " >&6; } -if ${ac_cv_lib_potrace_potrace_trace+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpotrace $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char potrace_trace (); -int -main () -{ -return potrace_trace (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_potrace_potrace_trace=yes -else - ac_cv_lib_potrace_potrace_trace=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_potrace_potrace_trace" >&5 -$as_echo "$ac_cv_lib_potrace_potrace_trace" >&6; } -if test "x$ac_cv_lib_potrace_potrace_trace" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBPOTRACE 1 -_ACEOF - - LIBS="-lpotrace $LIBS" - -else - HAVE_LIBPOTRACE=0 -fi - -else - HAVE_LIBPOTRACE=0 -fi - - - -if test "$HAVE_LIBPOTRACE" -eq 0; then - AM_CPPFLAGS="$AM_CXXFLAGS -I\${srcdir}/../potracelib -I\${srcdir}/../../potracelib" - EXTRA_LIBS="$EXTRA_LIBS ../potracelib/libpotrace.a " - { $as_echo "$as_me:${as_lineno-$LINENO}: Using bundled potrace library" >&5 -$as_echo "$as_me: Using bundled potrace library" >&6;} -fi - - -# Check how to link Ghostscript -HAVE_LIBGS=1 -ac_fn_c_check_header_mongrel "$LINENO" "ghostscript/iapi.h" "ac_cv_header_ghostscript_iapi_h" "$ac_includes_default" -if test "x$ac_cv_header_ghostscript_iapi_h" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gsapi_new_instance in -lgs" >&5 -$as_echo_n "checking for gsapi_new_instance in -lgs... " >&6; } -if ${ac_cv_lib_gs_gsapi_new_instance+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgs $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gsapi_new_instance (); -int -main () -{ -return gsapi_new_instance (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_gs_gsapi_new_instance=yes -else - ac_cv_lib_gs_gsapi_new_instance=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gs_gsapi_new_instance" >&5 -$as_echo "$ac_cv_lib_gs_gsapi_new_instance" >&6; } -if test "x$ac_cv_lib_gs_gsapi_new_instance" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBGS 1 -_ACEOF - - LIBS="-lgs $LIBS" - -else - HAVE_LIBGS=0 -fi - -else - HAVE_LIBGS=0 -fi - - - -if test "$HAVE_LIBGS" -eq 0; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBDL 1 -_ACEOF - - LIBS="-ldl $LIBS" - -else - -$as_echo "#define DISABLE_GS 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: PostScript support disabled" >&5 -$as_echo "$as_me: WARNING: PostScript support disabled" >&2;} -fi - -else - # query Ghostscript version - { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ghostscript version" >&5 -$as_echo_n "checking Ghostscript version... " >&6; } - if test "$cross_compiling" = yes; then : - gsversion=unknown -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - int main () { - gsapi_revision_t r; - if (gsapi_revision(&r, sizeof(gsapi_revision_t)) == 0) { - FILE *f; - f = fopen("gsversion", "w"); - if (!f) exit(1); - fprintf(f, "%ld\n", r.revision); - fclose(f); - exit(0); - } - } -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - gsversion=`cat gsversion` -else - gsversion= -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$gsversion\"" >&5 -$as_echo "\"$gsversion\"" >&6; } - rm -f gsversion - if test "$gsversion" -lt 831; then - # current Ghostscript API was introduced in version 8.31 - # older versions are not supported - LIBS=`echo $LIBS | sed "s/-lgs //" $LIBS` - -$as_echo "#define DISABLE_GS 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ghostscript version < 8.31 found; PostScript support disabled" >&5 -$as_echo "$as_me: WARNING: Ghostscript version < 8.31 found; PostScript support disabled" >&2;} - fi -fi - -# Check for pkg-config - - - - - - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. -set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_PKG_CONFIG"; then - ac_pt_PKG_CONFIG=$PKG_CONFIG - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ac_pt_PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG -if test -n "$ac_pt_PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -$as_echo "$ac_pt_PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_PKG_CONFIG" = x; then - PKG_CONFIG="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - PKG_CONFIG=$ac_pt_PKG_CONFIG - fi -else - PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -fi - -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=0.9.0 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 -$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - PKG_CONFIG="" - fi -fi - -# Check for libraries. - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE" >&5 -$as_echo_n "checking for FREETYPE... " >&6; } - -if test -n "$FREETYPE_CFLAGS"; then - pkg_cv_FREETYPE_CFLAGS="$FREETYPE_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FREETYPE_CFLAGS=`$PKG_CONFIG --cflags "freetype2" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$FREETYPE_LIBS"; then - pkg_cv_FREETYPE_LIBS="$FREETYPE_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FREETYPE_LIBS=`$PKG_CONFIG --libs "freetype2" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - FREETYPE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "freetype2" 2>&1` - else - FREETYPE_PKG_ERRORS=`$PKG_CONFIG --print-errors "freetype2" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$FREETYPE_PKG_ERRORS" >&5 - - as_fn_error $? "Package requirements (freetype2) were not met: - -$FREETYPE_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -Alternatively, you may set the environment variables FREETYPE_CFLAGS -and FREETYPE_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details." "$LINENO" 5 - -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -Alternatively, you may set the environment variables FREETYPE_CFLAGS -and FREETYPE_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details. - -To get pkg-config, see . -See \`config.log' for more details" "$LINENO" 5; } - -else - FREETYPE_CFLAGS=$pkg_cv_FREETYPE_CFLAGS - FREETYPE_LIBS=$pkg_cv_FREETYPE_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -fi -CXXFLAGS="$CXXFLAGS ${FREETYPE_CFLAGS}" -LDFLAGS="$LDFLAGS ${FREETYPE_LIBS}" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzopen in -lz" >&5 -$as_echo_n "checking for gzopen in -lz... " >&6; } -if ${ac_cv_lib_z_gzopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lz $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gzopen (); -int -main () -{ -return gzopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_z_gzopen=yes -else - ac_cv_lib_z_gzopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzopen" >&5 -$as_echo "$ac_cv_lib_z_gzopen" >&6; } -if test "x$ac_cv_lib_z_gzopen" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBZ 1 -_ACEOF - - LIBS="-lz $LIBS" - -fi - - -# Check for header files. -ac_header_dirent=no -for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 -$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } -if eval \${$as_ac_Header+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include <$ac_hdr> - -int -main () -{ -if ((DIR *) 0) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_ac_Header=yes" -else - eval "$as_ac_Header=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$as_ac_Header - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 -_ACEOF - -ac_header_dirent=$ac_hdr; break -fi - -done -# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. -if test $ac_header_dirent = dirent.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if ${ac_cv_search_opendir+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (); -int -main () -{ -return opendir (); - ; - return 0; -} -_ACEOF -for ac_lib in '' dir; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_opendir=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_opendir+:} false; then : - break -fi -done -if ${ac_cv_search_opendir+:} false; then : - -else - ac_cv_search_opendir=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -$as_echo "$ac_cv_search_opendir" >&6; } -ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if ${ac_cv_search_opendir+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char opendir (); -int -main () -{ -return opendir (); - ; - return 0; -} -_ACEOF -for ac_lib in '' x; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_opendir=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_opendir+:} false; then : - break -fi -done -if ${ac_cv_search_opendir+:} false; then : - -else - ac_cv_search_opendir=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -$as_echo "$ac_cv_search_opendir" >&6; } -ac_res=$ac_cv_search_opendir -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -for ac_header in libintl.h stdlib.h string.h strings.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -# Check for typedefs, structures, and compiler characteristics. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 -$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } -if ${ac_cv_header_stdbool_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#ifndef bool - "error: bool is not defined" -#endif -#ifndef false - "error: false is not defined" -#endif -#if false - "error: false is not 0" -#endif -#ifndef true - "error: true is not defined" -#endif -#if true != 1 - "error: true is not 1" -#endif -#ifndef __bool_true_false_are_defined - "error: __bool_true_false_are_defined is not defined" -#endif - - struct s { _Bool s: 1; _Bool t; } s; - - char a[true == 1 ? 1 : -1]; - char b[false == 0 ? 1 : -1]; - char c[__bool_true_false_are_defined == 1 ? 1 : -1]; - char d[(bool) 0.5 == true ? 1 : -1]; - /* See body of main program for 'e'. */ - char f[(_Bool) 0.0 == false ? 1 : -1]; - char g[true]; - char h[sizeof (_Bool)]; - char i[sizeof s.t]; - enum { j = false, k = true, l = false * true, m = true * 256 }; - /* The following fails for - HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - _Bool n[m]; - char o[sizeof n == m * sizeof n[0] ? 1 : -1]; - char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; - /* Catch a bug in an HP-UX C compiler. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - */ - _Bool q = true; - _Bool *pq = &q; - -int -main () -{ - - bool e = &s; - *pq |= q; - *pq |= ! q; - /* Refer to every declared value, to avoid compiler optimizations. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l - + !m + !n + !o + !p + !q + !pq); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdbool_h=yes -else - ac_cv_header_stdbool_h=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 -$as_echo "$ac_cv_header_stdbool_h" >&6; } -ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" -if test "x$ac_cv_type__Bool" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE__BOOL 1 -_ACEOF - - -fi - -if test $ac_cv_header_stdbool_h = yes; then - -$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if ${ac_cv_c_const+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset cs; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; - char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++pcpcc; - ppc = (char**) pcpcc; - pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - if (!foo) return 0; - } - return !cs[0] && !zero.x; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_const=yes -else - ac_cv_c_const=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -$as_echo "$ac_cv_c_const" >&6; } -if test $ac_cv_c_const = no; then - -$as_echo "#define const /**/" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -$as_echo_n "checking for inline... " >&6; } -if ${ac_cv_c_inline+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __cplusplus -typedef int foo_t; -static $ac_kw foo_t static_foo () {return 0; } -$ac_kw foo_t foo () {return 0; } -#endif - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_inline=$ac_kw -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - test "$ac_cv_c_inline" != no && break -done - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 -$as_echo "$ac_cv_c_inline" >&6; } - -case $ac_cv_c_inline in - inline | yes) ;; - *) - case $ac_cv_c_inline in - no) ac_val=;; - *) ac_val=$ac_cv_c_inline;; - esac - cat >>confdefs.h <<_ACEOF -#ifndef __cplusplus -#define inline $ac_val -#endif -_ACEOF - ;; -esac - -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define size_t unsigned int -_ACEOF - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 -$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } -if ${ac_cv_struct_tm+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include - -int -main () -{ -struct tm tm; - int *p = &tm.tm_sec; - return !p; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_struct_tm=time.h -else - ac_cv_struct_tm=sys/time.h -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 -$as_echo "$ac_cv_struct_tm" >&6; } -if test $ac_cv_struct_tm = sys/time.h; then - -$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h - -fi - - -# Check for library functions. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether closedir returns void" >&5 -$as_echo_n "checking whether closedir returns void... " >&6; } -if ${ac_cv_func_closedir_void+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_closedir_void=yes -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header_dirent> -#ifndef __cplusplus -int closedir (); -#endif - -int -main () -{ -return closedir (opendir (".")) != 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_closedir_void=no -else - ac_cv_func_closedir_void=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_closedir_void" >&5 -$as_echo "$ac_cv_func_closedir_void" >&6; } -if test $ac_cv_func_closedir_void = yes; then - -$as_echo "#define CLOSEDIR_VOID 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 -$as_echo_n "checking for error_at_line... " >&6; } -if ${ac_cv_lib_error_at_line+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -error_at_line (0, 0, "", 0, "an error occurred"); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_error_at_line=yes -else - ac_cv_lib_error_at_line=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 -$as_echo "$ac_cv_lib_error_at_line" >&6; } -if test $ac_cv_lib_error_at_line = no; then - case " $LIBOBJS " in - *" error.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS error.$ac_objext" - ;; -esac - -fi - -for ac_header in stdlib.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" -if test "x$ac_cv_header_stdlib_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STDLIB_H 1 -_ACEOF - -fi - -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 -$as_echo_n "checking for GNU libc compatible malloc... " >&6; } -if ${ac_cv_func_malloc_0_nonnull+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_malloc_0_nonnull=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined STDC_HEADERS || defined HAVE_STDLIB_H -# include -#else -char *malloc (); -#endif - -int -main () -{ -return ! malloc (0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_malloc_0_nonnull=yes -else - ac_cv_func_malloc_0_nonnull=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 -$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } -if test $ac_cv_func_malloc_0_nonnull = yes; then : - -$as_echo "#define HAVE_MALLOC 1" >>confdefs.h - -else - $as_echo "#define HAVE_MALLOC 0" >>confdefs.h - - case " $LIBOBJS " in - *" malloc.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS malloc.$ac_objext" - ;; -esac - - -$as_echo "#define malloc rpl_malloc" >>confdefs.h - -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 -$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } -if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then : - $as_echo_n "(cached) " >&6 -else - rm -f conftest.sym conftest.file -echo >conftest.file -if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then - if test "$cross_compiling" = yes; then : - ac_cv_func_lstat_dereferences_slashed_symlink=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -struct stat sbuf; - /* Linux will dereference the symlink and fail, as required by POSIX. - That is better in the sense that it means we will not - have to compile and use the lstat wrapper. */ - return lstat ("conftest.sym/", &sbuf) == 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_lstat_dereferences_slashed_symlink=yes -else - ac_cv_func_lstat_dereferences_slashed_symlink=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -else - # If the `ln -s' command failed, then we probably don't even - # have an lstat function. - ac_cv_func_lstat_dereferences_slashed_symlink=no -fi -rm -f conftest.sym conftest.file - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 -$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } - -test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && - -cat >>confdefs.h <<_ACEOF -#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 -_ACEOF - - -if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then - case " $LIBOBJS " in - *" lstat.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS lstat.$ac_objext" - ;; -esac - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5 -$as_echo_n "checking whether stat accepts an empty string... " >&6; } -if ${ac_cv_func_stat_empty_string_bug+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_stat_empty_string_bug=yes -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -struct stat sbuf; - return stat ("", &sbuf) == 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_stat_empty_string_bug=no -else - ac_cv_func_stat_empty_string_bug=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5 -$as_echo "$ac_cv_func_stat_empty_string_bug" >&6; } -if test $ac_cv_func_stat_empty_string_bug = yes; then - case " $LIBOBJS " in - *" stat.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS stat.$ac_objext" - ;; -esac - - -cat >>confdefs.h <<_ACEOF -#define HAVE_STAT_EMPTY_STRING_BUG 1 -_ACEOF - -fi - -for ac_func in vprintf -do : - ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" -if test "x$ac_cv_func_vprintf" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_VPRINTF 1 -_ACEOF - -ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" -if test "x$ac_cv_func__doprnt" = xyes; then : - -$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h - -fi - -fi -done - - -for ac_func in memset strcasecmp strtol -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -# add options for selection of "optional" library locations -# currently these libraries are mandatory; the --with-foo options -# are used to specify the locations explicitely - - -# Check whether --with-zlib was given. -if test "${with_zlib+set}" = set; then : - withval=$with_zlib; if test "$withval" != no; then - if test "$withval" != yes; then - ZLIB_DIR=$withval - fi - fi -fi - - -if test "$withval" != no; then - if test -n "$ZLIB_DIR"; then - CPPFLAGS="$CPPFLAGS -I$ZLIB_DIR -I$ZLIB_DIR/include" - LDFLAGS="$LDFLAGS -L$ZLIB_DIR/lib" - fi -fi - - - - - -ac_config_files="$ac_config_files Makefile potracelib/Makefile src/Makefile tests/Makefile doc/dvisvgm.txt doc/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 -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by dvisvgm $as_me 1.0.9, which was -generated by GNU Autoconf 2.68. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -dvisvgm config.status 1.0.9 -configured by $0, generated by GNU Autoconf 2.68, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2010 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "potracelib/Makefile") CONFIG_FILES="$CONFIG_FILES potracelib/Makefile" ;; - "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; - "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; - "doc/dvisvgm.txt") CONFIG_FILES="$CONFIG_FILES doc/dvisvgm.txt" ;; - "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_tt=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_tt"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/configure.ac b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/configure.ac deleted file mode 100644 index 98dd3bb7209..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/configure.ac +++ /dev/null @@ -1,157 +0,0 @@ -# This file is part of dvisvgm -# Copyright (C) 2005-2011 Martin Gieseking -# -# Process this file with autoconf to produce a configure script. - -AC_PREREQ(2.59) -AC_INIT([dvisvgm],[1.0.9],[martin.gieseking@uos.de]) -DATE="October 2011" -AC_CONFIG_SRCDIR(src) -AC_CONFIG_HEADER(config.h) -AC_CANONICAL_HOST -AC_CANONICAL_TARGET -AM_INIT_AUTOMAKE - -AH_TEMPLATE([TARGET_SYSTEM], [The machine triplet of the target system]) -AC_DEFINE_UNQUOTED([TARGET_SYSTEM], ["$target"]) - -# Checks for programs. -AC_PROG_CXX -AC_PROG_CC - -AC_PROG_RANLIB -AC_LANG(C) - -AC_CHECK_FUNCS([ftime gettimeofday]) -AC_CHECK_HEADERS([sys/time.h sys/timeb.h]) -AC_HEADER_TIOCGWINSZ - -AC_CHECK_HEADER([kpathsea/kpathsea.h], , - [AC_MSG_ERROR([please install the kpathsea development package])]) -AC_CHECK_LIB(kpathsea, kpse_find_file, , - [AC_MSG_ERROR([libkpathsea not found, please install the corresponding package first])]) - -AC_MSG_CHECKING([kpathsea version]) -AC_RUN_IFELSE([AC_LANG_SOURCE([#include - #include - int main() { - FILE *f; - f = fopen("kpseversion", "w"); - if(!f) exit(1); - fprintf(f, "%s\n", KPSEVERSION); - fclose(f); - exit(0); - }])], - [kpseversion=`cat kpseversion|sed 's/kpathsea version //'`], [kpseversion=], [kpseversion=unknown]) -AC_MSG_RESULT("$kpseversion") -rm -f kpseversion -if test -z "$kpseversion"; then - AC_MSG_ERROR([Could not compile a simple kpathsea program -- check your installation]) -fi - - -# Check how to link potracelib -HAVE_LIBPOTRACE=1 -AC_CHECK_HEADER([potracelib.h], - [AC_CHECK_LIB(m, sqrt) # required to pass potrace check - AC_CHECK_LIB(potrace, potrace_trace, , HAVE_LIBPOTRACE=0)], HAVE_LIBPOTRACE=0) - -if test "$HAVE_LIBPOTRACE" -eq 0; then - AM_CPPFLAGS="$AM_CXXFLAGS -I\${srcdir}/../potracelib -I\${srcdir}/../../potracelib" - EXTRA_LIBS="$EXTRA_LIBS ../potracelib/libpotrace.a " - AC_MSG_NOTICE([Using bundled potrace library]) -fi - - -# Check how to link Ghostscript -HAVE_LIBGS=1 -AC_CHECK_HEADER([ghostscript/iapi.h], - AC_CHECK_LIB(gs, gsapi_new_instance, , HAVE_LIBGS=0), HAVE_LIBGS=0) - -if test "$HAVE_LIBGS" -eq 0; then - AC_CHECK_LIB(dl, dlopen, , - [AC_DEFINE(DISABLE_GS, 1, [Set to 1 if PostScript support is to be disabled]) - AC_MSG_WARN(PostScript support disabled)]) -else - # query Ghostscript version - AC_MSG_CHECKING([Ghostscript version]) - AC_RUN_IFELSE([AC_LANG_SOURCE([#include - #include - int main () { - gsapi_revision_t r; - if (gsapi_revision(&r, sizeof(gsapi_revision_t)) == 0) { - FILE *f; - f = fopen("gsversion", "w"); - if (!f) exit(1); - fprintf(f, "%ld\n", r.revision); - fclose(f); - exit(0); - } - }])], - [gsversion=`cat gsversion`], [gsversion=], [gsversion=unknown]) - AC_MSG_RESULT("$gsversion") - rm -f gsversion - if test "$gsversion" -lt 831; then - # current Ghostscript API was introduced in version 8.31 - # older versions are not supported - LIBS=`echo $LIBS | sed "s/-lgs //" $LIBS` - AC_DEFINE(DISABLE_GS, 1, [Set to 1 if PostScript support should be disabled]) - AC_MSG_WARN([Ghostscript version < 8.31 found; PostScript support disabled]) - fi -fi - -# Check for pkg-config -PKG_PROG_PKG_CONFIG - -# Check for libraries. -PKG_CHECK_MODULES([FREETYPE], [freetype2]) -CXXFLAGS="$CXXFLAGS ${FREETYPE_CFLAGS}" -LDFLAGS="$LDFLAGS ${FREETYPE_LIBS}" - -AC_CHECK_LIB(z, gzopen) - -# Check for header files. -AC_HEADER_DIRENT -AC_HEADER_STDC -AC_CHECK_HEADERS([libintl.h stdlib.h string.h strings.h unistd.h]) - -# Check for typedefs, structures, and compiler characteristics. -AC_HEADER_STDBOOL -AC_C_CONST -AC_C_INLINE -AC_TYPE_SIZE_T -AC_STRUCT_TM - -# Check for library functions. -AC_FUNC_CLOSEDIR_VOID -AC_FUNC_ERROR_AT_LINE -AC_FUNC_MALLOC -AC_FUNC_STAT -AC_FUNC_VPRINTF -AC_CHECK_FUNCS([memset strcasecmp strtol]) - -# add options for selection of "optional" library locations -# currently these libraries are mandatory; the --with-foo options -# are used to specify the locations explicitely - -AC_ARG_WITH(zlib,[ --with-zlib=DIR location of the zlib library], - [if test "$withval" != no; then - if test "$withval" != yes; then - ZLIB_DIR=$withval - fi - fi]) - -if test "$withval" != no; then - if test -n "$ZLIB_DIR"; then - CPPFLAGS="$CPPFLAGS -I$ZLIB_DIR -I$ZLIB_DIR/include" - LDFLAGS="$LDFLAGS -L$ZLIB_DIR/lib" - fi -fi - -AC_SUBST(DATE) -AC_SUBST(EXTRA_LIBS) -AC_SUBST(AM_CPPFLAGS) -AC_SUBST(AM_LDFLAGS) -AC_CONFIG_FILES([Makefile potracelib/Makefile src/Makefile tests/Makefile doc/dvisvgm.txt doc/Makefile]) -AC_OUTPUT - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/Makefile.am deleted file mode 100644 index f8ff1dfe3cc..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/Makefile.am +++ /dev/null @@ -1,39 +0,0 @@ -## This file is part of dvisvgm -## Copyright (C) 2005-2011 Martin Gieseking -## -## Process this file with automake. - -man_MANS = dvisvgm.1 -EXTRA_DIST = $(man_MANS) - -dvisvgm.1: dvisvgm.txt - if [ `type -p a2x` ]; then \ - a2x -dmanpage -fmanpage -L -a icons -a 'iconsdir=.' $<; \ - rm -f dvisvgm.xml; \ - fi - -dvisvgm.pdf: dvisvgm.1 - echo '[ /Author (Martin Gieseking) /Title (dvisvgm manual page) /Subject (manual page of dvisvgm @VERSION@) /DOCINFO pdfmark' >tmp.ps - man -t ./$< >>tmp.ps - ps2pdf tmp.ps $@ - rm -f tmp.ps - -dvi-pdf: dvisvgm.dvi - dvipdfm $< - rm -f $< - -dvisvgm.dvi: dvisvgm.1 - groff -Tdvi -mandoc ./$< >$@ - -dvisvgm.html: dvisvgm.txt - asciidoc -a icons -a 'iconsdir=.' -a badges -a 'revnumber=@VERSION@' --unsafe -dmanpage $< - -html: dvisvgm.html -man: dvisvgm.1 -pdf: dvisvgm.pdf - -clean: - rm -f dvisvgm.pdf dvisvgm.html dvisvgm.xml dvisvgm.1 dvisvgm.txt - -distclean-local: - rm -f dvisvgm.1 diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/Makefile.in deleted file mode 100644 index d5cbd4e068e..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/Makefile.in +++ /dev/null @@ -1,456 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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. - -@SET_MAKE@ -VPATH = @srcdir@ -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@ -target_triplet = @target@ -subdir = doc -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/dvisvgm.txt.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = dvisvgm.txt -CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -man1dir = $(mandir)/man1 -am__installdirs = "$(DESTDIR)$(man1dir)" -NROFF = nroff -MANS = $(man_MANS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -AM_LDFLAGS = @AM_LDFLAGS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DATE = @DATE@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -EXTRA_LIBS = @EXTRA_LIBS@ -FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ -FREETYPE_LIBS = @FREETYPE_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -OBJEXT = @OBJEXT@ -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@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -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@ -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@ -sbindir = @sbindir@ -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@ -man_MANS = dvisvgm.1 -EXTRA_DIST = $(man_MANS) -all: all-am - -.SUFFIXES: -$(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 doc/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign doc/Makefile -.PRECIOUS: 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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - 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): -dvisvgm.txt: $(top_builddir)/config.status $(srcdir)/dvisvgm.txt.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-man1: $(man_MANS) - @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" - @list=''; test -n "$(man1dir)" || exit 0; \ - { for i in $$list; do echo "$$i"; done; \ - l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.1[a-z]*$$/p'; \ - } | while read p; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; echo "$$p"; \ - done | \ - sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ - sed 'N;N;s,\n, ,g' | { \ - list=; while read file base inst; do \ - if test "$$base" = "$$inst"; then list="$$list $$file"; else \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ - fi; \ - done; \ - for i in $$list; do echo "$$i"; done | $(am__base_list) | \ - while read files; do \ - test -z "$$files" || { \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ - done; } - -uninstall-man1: - @$(NORMAL_UNINSTALL) - @list=''; test -n "$(man1dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.1[a-z]*$$/p'; \ - } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - test -z "$$files" || { \ - echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @list='$(MANS)'; if test -n "$$list"; then \ - list=`for p in $$list; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ - if test -n "$$list" && \ - grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ - echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ - grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ - echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ - echo " typically \`make maintainer-clean' will remove them" >&2; \ - exit 1; \ - else :; fi; \ - else :; fi - @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 $(MANS) -installdirs: - for dir in "$(DESTDIR)$(man1dir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -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: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -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-am: clean-generic mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-local - -dvi: dvi-am - -dvi-am: - -html-am: - -info: info-am - -info-am: - -install-data-am: install-man - -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-man1 - -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 - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-man - -uninstall-man: uninstall-man1 - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic distclean \ - distclean-generic distclean-local 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-man1 install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ - pdf-am ps ps-am uninstall uninstall-am uninstall-man \ - uninstall-man1 - - -dvisvgm.1: dvisvgm.txt - if [ `type -p a2x` ]; then \ - a2x -dmanpage -fmanpage -L -a icons -a 'iconsdir=.' $<; \ - rm -f dvisvgm.xml; \ - fi - -dvisvgm.pdf: dvisvgm.1 - echo '[ /Author (Martin Gieseking) /Title (dvisvgm manual page) /Subject (manual page of dvisvgm @VERSION@) /DOCINFO pdfmark' >tmp.ps - man -t ./$< >>tmp.ps - ps2pdf tmp.ps $@ - rm -f tmp.ps - -dvi-pdf: dvisvgm.dvi - dvipdfm $< - rm -f $< - -dvisvgm.dvi: dvisvgm.1 - groff -Tdvi -mandoc ./$< >$@ - -dvisvgm.html: dvisvgm.txt - asciidoc -a icons -a 'iconsdir=.' -a badges -a 'revnumber=@VERSION@' --unsafe -dmanpage $< - -html: dvisvgm.html -man: dvisvgm.1 -pdf: dvisvgm.pdf - -clean: - rm -f dvisvgm.pdf dvisvgm.html dvisvgm.xml dvisvgm.1 dvisvgm.txt - -distclean-local: - rm -f dvisvgm.1 - -# 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: diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/dvisvgm.1 b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/dvisvgm.1 deleted file mode 100644 index 69d135fa210..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/dvisvgm.1 +++ /dev/null @@ -1,851 +0,0 @@ -'\" t -.\" Title: dvisvgm -.\" Author: [see the "AUTHOR" section] -.\" Generator: DocBook XSL Stylesheets v1.76.1 -.\" Date: 10/14/2011 -.\" Manual: dvisvgm Manual -.\" Source: dvisvgm 1.0.9 -.\" Language: English -.\" -.TH "DVISVGM" "1" "10/14/2011" "dvisvgm 1\&.0\&.9" "dvisvgm Manual" -.\" ----------------------------------------------------------------- -.\" * Define some portability stuff -.\" ----------------------------------------------------------------- -.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.\" http://bugs.debian.org/507673 -.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html -.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.ie \n(.g .ds Aq \(aq -.el .ds Aq ' -.\" ----------------------------------------------------------------- -.\" * set default formatting -.\" ----------------------------------------------------------------- -.\" disable hyphenation -.nh -.\" disable justification (adjust text to left margin only) -.ad l -.\" ----------------------------------------------------------------- -.\" * MAIN CONTENT STARTS HERE * -.\" ----------------------------------------------------------------- -.SH "NAME" -dvisvgm \- converts DVI files to the XML\-based SVG format -.SH "SYNOPSIS" -.sp -\fBdvisvgm\fR [ \fIoptions\fR ] \fIfile\fR [\&.dvi] -.SH "DESCRIPTION" -.sp -The command\-line utility \fBdvisvgm\fR converts DVI files, as generated by TeX/LaTeX, to the XML\-based scalable vector graphics format SVG\&. Since the current SVG standard 1\&.1 doesn\(cqt specify multi\-page graphics, \fBdvisvgm\fR creates separate SVG files for each DVI page\&. Because of compatibility reasons, only the first page is converted by default\&. In order to select a different page or arbitrary page sequences, use option \fB\-p\fR which is described below\&. -.sp -\fBdvisvgm\fR should properly convert all pages that are made up of fonts and rules only\&. However, the utility also supports a couple of DVI extensions defined in terms of \fIDVI specials\fR\&. For a more detailed overview, see section \fBsupport of specials\fR below\&. -.sp -As SVG is a vector based graphics format, \fBdvisvgm\fR tries to convert the glyph outlines of all used fonts into scalable path descriptions\&. The fastest way to do that is to extract the path information from PFB (PostScript Type 1) files\&. So, if \fBdvisvgm\fR is able to find a PFB file for a required font, it will read the necessary information from this file\&. -.sp -TeX\(cqs main source for font descriptions is Metafont though, which produces bitmap output\&. That\(cqs why not all obtainable TeX fonts are available in PFB format\&. In these cases \fBdvisvgm\fR tries to vectorize Metafont\(cqs output (GF fonts) by tracing the glyph bitmaps\&. The results are not as perfect as most (manually optimized) PFB outlines but are nonetheless really nice in most cases\&. -.SH "OPTIONS" -.PP -\fB\-a, \-\-trace\-all\fR=[\fIretrace\fR] -.RS 4 -This option forces dvisvgm to trace not only the actually needed glyphs but all glyphs of all bitmap fonts used in the DVI file\&. Since the tracing results are stored in the font cache, all following DVI conversions (without option -\fB\-\-trace\-all\fR) where these fonts are involved, will be much faster\&. By default, dvisvgm traces only the actually needed glyphs and adds them to the cache\&. The boolean option -\fIretrace\fR -determines how to handle glyphs already stored in the cache\&. By default, these glyphs are skipped\&. Setting argument -\fIretrace\fR -to -\fIyes\fR -or -\fItrue\fR -forces dvisvgm to trace the corresponding bitmaps again\&. -.if n \{\ -.sp -.\} -.RS 4 -.it 1 an-trap -.nr an-no-space-flag 1 -.nr an-break-flag 1 -.br -.ps +1 -\fBNote\fR -.ps -1 -.br -This option only takes affect if font caching is active\&. Thus, -\fB\-\-trace\-all\fR -cannot be combined with option -\fB\-\-cache=none\fR\&. -.sp .5v -.RE -.RE -.PP -\fB\-b, \-\-bbox\fR=\fIfmt\fR -.RS 4 -Sets the bounding box of the generated graphic to the specified format\&. The parameter -\fIfmt\fR -takes either one of the format specifiers listed below, or a sequence of four comma\- or whitespace\-separated length values -\fIx1\fR, -\fIy1\fR, -\fIx2\fR -and -\fIy2\fR\&. The latter define two diagonal corners of the bounding box\&. Each length value consists of a floating point number and an optional length unit (pt, bp, cm, mm, in, or pc)\&. If the unit is omitted, TeX points (pt) are assumed\&. -.sp -It\(cqs also possible to give only one length value -\fIl\fR\&. In this case the minimal bounding box is computed and enlarged by adding (\-\fIl\fR,\-\fIl\fR) to the upper left and (\fIl\fR,\fIl\fR) to the lower right corner\&. -.sp -Alternatively, the following format specifiers are supported: -.PP -\fBInternational DIN/ISO paper sizes\fR -.RS 4 -A\fIn\fR, B\fIn\fR, C\fIn\fR, D\fIn\fR, where -\fIn\fR -is a non\-negative integer, e\&.g\&. A4 or a4 for DIN/ISO A4 format (210mm \(mu 297mm)\&. -.RE -.PP -\fBNorth American paper sizes\fR -.RS 4 -invoice, executive, legal, letter, ledger -.RE -.PP -\fBSpecial bounding box sizes\fR -.RS 4 -.TS -tab(:); -lt lt -lt lt -lt lt. -T{ -\fBdvi\fR -T}:T{ -page size stored in the DVI file -T} -T{ -\fBmin\fR -T}:T{ -computes the minimal/tightest bounding box -T} -T{ -\fBnone\fR -T}:T{ -no bounding box is assigned -T} -.TE -.sp 1 -.RE -.RE -.PP -\fBPage orientation\fR -.RS 4 -The default page orientation for DIN/ISO and American paper sizes is -\fIportrait\fR, i\&.e\&. -\fIwidth\fR -< -\fIheight\fR\&. Appending -\fB\-landscape\fR -or simply -\fB\-l\fR -to the format string switches to -\fIlandscape\fR -mode (\fIwidth\fR -> -\fIheight\fR)\&. For symmetry reasons you can also explicitly add -\fB\-portrait\fR -or -\fB\-p\fR -to indicate the default portrait format\&. Note that these suffixes are part of the size string and not separate options\&. Thus, they must directly follow the size specifier without additional blanks\&. Furthermore, the orientation suffixes can\(cqt be used with -\fBdvi\fR, -\fBmin\fR, and -\fBnone\fR\&. -.if n \{\ -.sp -.\} -.RS 4 -.it 1 an-trap -.nr an-no-space-flag 1 -.nr an-break-flag 1 -.br -.ps +1 -\fBNote\fR -.ps -1 -.br -Option -\fB\-b, \-\-bbox\fR -only affects the bounding box and does not transform the page content\&. Hence, if you choose a landscape format, the page won\(cqt be rotated\&. -.sp .5v -.RE -.RE -.PP -\fB\-c, \-\-scale\fR=\fIsx\fR[,\fIsy\fR] -.RS 4 -Scales the page content horizontally by -\fIsx\fR -and vertically by -\fIsy\fR\&. This option is equivalent to -\fB\-TS\fR\fIsx\fR,\fIsy\fR\&. -.RE -.PP -\fB\-C, \-\-cache\fR[=\fIdir\fR] -.RS 4 -To speed up the conversion process of bitmap fonts, -\fBdvisvgm\fR -saves intermediate conversion information in cache files\&. By default, these files are stored in $HOME/\&.dvisvgm/cache\&. If you prefer a different location, use option -\fB\-\-cache\fR -to overwrite the default\&. Furthermore, it is also possible to disable the font caching mechanism completely with option -\fB\-\-cache=none\fR\&. If argument -\fIdir\fR -is omitted, dvisvgm prints the path of the default cache directory and some information about the stored fonts\&. Additionally, outdated and corrupted cache files are removed\&. -.RE -.PP -\fB\-\-color\fR -.RS 4 -Enables colorization of messages printed during the conversion process\&. -.RE -.PP -\fB\-e, \-\-exact\fR -.RS 4 -If this option is given, dvisvgm computes the precise bounding box of each character\&. By default, the values stored in the font\(cqs TFM file are used to determine a glyph\(cqs extent\&. As these values are intended to realize optimal character placements and are not designed to represent the exact dimensions, they don\(cqt necessarily correspond with the bounds of the visual glyphs\&. Thus, width and/or height of some glyphs may be larger than the respective TFM values\&. As a result, this can lead to clipped characters at the bounds of the SVG graphic\&. With option -\fB\-\-exact\fR, dvisvgm analyzes the actual shape of each character and derives a usually tight bounding box\&. -.RE -.PP -\fB\-h, \-\-help\fR -.RS 4 -Prints a short summary of all available command\-line options\&. -.RE -.PP -\fB\-\-libgs=filename\fR -.RS 4 -This option is only available if the Ghostscript library is not directly linked to dvisvgm and PostScript support was not completely disabled during compilation\&. In this case, dvisvgm tries to load the shared GS library dynamically during runtime\&. By default, it expects the library\(cqs name to be libgs\&.so (on Unix\-like systems) or gsdll32\&.dll (Windows)\&. Option -\fB\-\-libgs\fR -can be used to give a different name\&. Alternatively, the GS library name can also be set by the environment variable -\fBLIBGS\fR\&. The latter has less precedence than the command\-line option\&. -.RE -.PP -\fB\-l, \-\-list\-specials\fR -.RS 4 -Prints a list of registered special handlers and exits\&. Each handler processes a set of special statements belonging to the same category\&. The categories are usually identified by the prefix of the special statements\&. It\(cqs usually a leading word separated from the rest of the statement by a colon or a blank, e\&.g\&. -\fIcolor\fR -or -\fIps\fR\&. -.RE -.PP -\fB\-\-keep\fR -.RS 4 -Disables the removal of temporary files as created by Metafont (usually \&.gf, \&.tfm, and \&.log files)\&. -.RE -.PP -\fB\-m, \-\-map\-file\fR=\fIfile\fR -.RS 4 -Sets the map file used to look up font names and encodings\&. -\fBdvisvgm\fR -does not provide its own map file but tries to use available ones coming with -\fBdvips\fR -or -\fBdvipdfm\fR\&. If option -\fB\-m\fR -is not given, -\fBdvisvgm\fR -looks for -ps2pk\&.map, -dvipdfm\&.map, and -psfonts\&.map -(in this order)\&. Without further options, the file specified by option -\fB\-m\fR -will be used instead of the default maps\&. If you want -\fBdvisgvm\fR -to load the given file additionally to the default maps, add a leading -\fI+\fR -to the file/path, e\&.g\&. -\-\-map\-file=+myfonts\&.map\&. For further information about the file format, see the manuals of -\fBdvips\fR -and -\fBdvipdfm\fR\&. -.RE -.PP -\fB\-M, \-\-mag\fR=\fIfactor\fR -.RS 4 -Sets the maginfication factor applied in conjunction with Metafont calls prior tracing the glyphs\&. The larger this value the better the tracing results\&. Nevertheless, large magnification values can cause Metafont arithmetic errors due to number overflows\&. So, use this option with care\&. The default setting usually produces nice results\&. -.RE -.PP -\fB\-n, \-\-no\-fonts\fR[=\fIvariant\fR] -.RS 4 -If this option is given, -\fBdvisvgm\fR -doesn\(cqt create SVG font elements but uses paths instead\&. The resulting SVG files tends to be larger but concurrently more compatible with most applications that don\(cqt support SVG fonts yet\&. The optional argument -\fIvariant\fR -selects the method how to substitute fonts by paths\&. Variant 0 creates -\fIpath\fR -and -\fIuse\fR -elements\&. Variant 1 creates -\fIpath\fR -elements only\&. Option -\fB\-\-no\-fonts\fR -implies -\fB\-\-no\-styles\fR\&. -.RE -.PP -\fB\-S, \-\-no\-specials\fR[=\fInames\fR] -.RS 4 -Disable processing of special commands embedded in the DVI file\&. If no further parameter is given, all specials are ignored\&. To selectively disable sets of specials, an optional comma\-separated list of names can be appended to this option\&. A -\fIname\fR -is the unique identifier referencing the intended special handler\&. Option -\fB\-\-list\-specials\fR -lists all currently available handlers and their names\&. All unsupported special statements are silently ignored\&. -.RE -.PP -\fB\-\-no\-styles\fR -.RS 4 -By default, -\fBdvisvgm\fR -uses CSS styles and class attributes to reference fonts because it\(cqs more compact than repeatedly set the complete font information in each text element\&. However, if you prefer direct font references, the default behavior can be disabled with option -\fB\-\-no\-styles\fR\&. -.RE -.PP -\fB\-\-no\-mktexmf\fR -.RS 4 -Suppresses the generation of missing font files\&. If -\fBdvisvgm\fR -can\(cqt find a font file through the kpathsea lookup mechanism, it calls the external tools mktextfm or mktexmf by\&. This option disables these calls\&. -.RE -.PP -\fB\-o, \-\-output\fR=\fIpattern\fR -.RS 4 -Sets the name pattern of the output file\&. Parameter -\fIpattern\fR -is a string that may contain the variables -\fB%f\fR -and -\fB%p\fR\&. -\fB%f\fR -stands for the base name of the DVI file, i\&.e\&. the DVI filename without suffix, and -\fB%p\fR -is the current page number\&. By default, the pattern is -\fB%f\-%p\&.svg\fR -if the DVI file consists of more than one page, and -\fB%f\&.svg\fR -otherwise\&. That means, a DVI file -\fIfoo\&.dvi\fR -is converted to -\fIfoo\&.svg\fR -if -\fIfoo\&.dvi\fR -is a single\-page document\&. Otherwise, multiple SVG files -\fIfoo\-01\&.svg\fR, -\fIfoo\-02\&.svg\fR, etc\&. are produced\&. In Windows environments, the percent sign indicates dereferenced environment variables, and must therefore be protected by a second percent sign, e\&.g\&. -\fB\-\-output=%%f\-%%p\fR\&. -.RE -.PP -\fB\-p, \-\-page\fR=\fIranges\fR -.RS 4 -This option sets 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\&. -\fBdvisvgm\fR -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 in case option -\fB\-\-page\fR -is not given\&. Usually, page ranges consist of two numbers denoting the first and last page to be converted\&. If the conversion is to be started 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 -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 page\&. Instead, the physical page count is expected, where the first page always gets number 1\&. -.RE -.PP -\fB\-P, \-\-progress\fR[=\fIdelay\fR] -.RS 4 -Enables a simple progress indicator shown when time\-consuming operations like PostScript specials are processed\&. The indicator doesn\(cqt appear before the given delay (in seconds) has elapsed\&. The default delay value is 0\&.5 seconds\&. -.RE -.PP -\fB\-r, \-\-rotate\fR=\fIangle\fR -.RS 4 -Rotates the page content clockwise by -\fIangle\fR -degrees around the page center\&. This option is equivalent to -\fB\-TR\fR\fIangle\fR\&. -.RE -.PP -\fB\-s, \-\-stdout\fR -.RS 4 -Don\(cqt write the SVG output to a file but redirect it to -\fBstdout\fR\&. -.RE -.PP -\fB\-t, \-\-translate\fR=\fItx\fR[,\fIty\fR] -.RS 4 -Translates (moves) the page content in direction of vector (\fItx\fR,\fIty\fR)\&. This option is equivalent to -\fB\-TT\fR\fItx\fR,\fIty\fR\&. -.RE -.PP -\fB\-T, \-\-transform\fR=\fIcommands\fR -.RS 4 -Applies a sequence of transformations to the SVG content\&. Each transformation is described by a -\fIcommand\fR -beginning with a capital letter followed by a list of comma\-separated parameters\&. Following transformation commands are supported: -.PP -\fBT\fR \fItx\fR[,\fIty\fR] -.RS 4 -Translates (moves) the page in direction of vector (\fItx\fR,\fIty\fR)\&. If -\fIty\fR -is omitted, -\fIty\fR=0 is assumed\&. The expected unit length of -\fItx\fR -and -\fIty\fR -are TeX points (1pt = 1/72\&.27in)\&. However, there are several constants defined to simplify the unit conversion (see below)\&. -.RE -.PP -\fBS\fR \fIsx\fR[,\fIsy\fR] -.RS 4 -Scales the page horizontally by -\fIsx\fR -and vertically by -\fIsy\fR\&. If -\fIsy\fR -is omitted, -\fIsy\fR=\fIsx\fR -is assumed\&. -.RE -.PP -\fBR\fR \fIangle\fR[,\fIx\fR,\fIy\fR] -.RS 4 -Rotates the page clockwise by -\fIangle\fR -degrees around point (\fIx\fR,\fIy\fR)\&. If the optional arguments -\fIx\fR -and -\fIy\fR -are omitted, the page will be rotated around its center depending on the chosen page format\&. When option -\fB\-bnone\fR -is given, the rotation center is origin (0,0)\&. -.RE -.PP -\fBKX\fR \fIangle\fR -.RS 4 -Skews the page along the -\fIx\fR\-axis by -\fIangle\fR -degrees\&. Argument -\fIangle\fR -can take any value except 90+180\fIk\fR, where -\fIk\fR -is an integer\&. -.RE -.PP -\fBKY\fR \fIangle\fR -.RS 4 -Skews the page along the -\fIy\fR\-axis by -\fIangle\fR -degrees\&. Argument -\fIangle\fR -can take any value except 90+180\fIk\fR, where -\fIk\fR -is an integer\&. -.RE -.PP -\fBFH\fR [\fIy\fR] -.RS 4 -Mirrors (flips) the page at the horizontal line through point (0,\fIy\fR)\&. Omitting the optional argument leads to -\fIy\fR=\fIh\fR/2, where -\fIh\fR -denotes the page height (see -\fIpre\-defined constants\fR -below)\&. -.RE -.PP -\fBFV\fR [\fIx\fR] -.RS 4 -Mirrors (flips) the page at the vertical line through point (\fIx\fR,0)\&. Omitting the optional argument leads to -\fIx\fR=\fIw\fR/2, where -\fIw\fR -denotes the page width (see -\fIpre\-defined constants\fR -below)\&. -.RE -.PP -\fBM\fR \fIm1\fR,\&...,\fIm6\fR -.RS 4 -Applies a transformation described by the 3\(mu3 matrix ((\fIm1\fR,\fIm2\fR,\fIm3\fR),(\fIm4\fR,\fIm5\fR,\fIm6\fR),(0,0,1)), where the inner triples denote the rows\&. -.RE -.sp -.if n \{\ -.sp -.\} -.RS 4 -.it 1 an-trap -.nr an-no-space-flag 1 -.nr an-break-flag 1 -.br -.ps +1 -\fBNote\fR -.ps -1 -.br -All transformation commands of option -\fB\-T, \-\-transform\fR -are applied in the order of their appearance\&. Multiple commands can optionally be separated by spaces\&. In this case the whole transformation string has to be enclosed in double quotes\&. All parameters are expressions of floating point type\&. You can either give plain numbers or arithmetic terms combined by the operators -\fB+\fR -(addition), -\fB\-\fR -(substraction), -\fB*\fR -(multiplication), -\fB/\fR -(division) or -\fB%\fR -(modulo) with common associativity and precedence rules\&. Parentheses may be used as well\&. -.sp -Additionally, some pre\-defined constants are provided: -.TS -tab(:); -lt lt -lt lt -lt lt -lt lt. -T{ -\fBux\fR -T}:T{ -horizontal position of upper left page corner in TeX point units -T} -T{ -\fBuy\fR -T}:T{ -vertical position of upper left page corner in TeX point units -T} -T{ -\fBh\fR -T}:T{ -page height in TeX point units (0 in case of -\fB\-bnone\fR) -T} -T{ -\fBw\fR -T}:T{ -page width in TeX point units (0 in case of -\fB\-bnone\fR) -T} -.TE -.sp 1 -Furthermore, you can use the length constants -\fBpt\fR, -\fBmm\fR, -\fBcm\fR -and -\fBin\fR, e\&.g\&. -2cm -or -1\&.6in\&. Thus, option -\-TT1in,0R45 -moves the page content 1 inch to the right and rotates it by 45 degrees around the page center afterwards\&. -.sp -For single transformations you can also use options -\fB\-c\fR, -\fB\-t\fR -and -\fB\-r\fR\&. Note that the order in which these options are given is not significant, i\&.e\&. you can\(cqt use them to describe transformation sequences\&. They are simply independent shorthand options for common transformations\&. -.sp .5v -.RE -.RE -.SH "SUPPORT OF SPECIALS" -.sp -\fBdvisvgm\fR supports several sets of \fIspecial commands\fR that can be used to enrich DVI files with additional features, like color, graphics or hyperlinks\&. The evaluation of special commands is delegated to various handlers\&. Each handler is responsible for all special statements of the same command set, i\&.e\&. commands beginning with the same prefix\&. To get a list of actually provided special handlers, use option \fB\-\-list\-specials\fR (see above)\&. -.PP -\fBbgcolor\fR -.RS 4 -Special statement for changing the background/page color\&. Since SVG 1\&.1 doesn\(cqt support background colors, -\fBdvisvgm\fR -inserts a rectangle of the chosen color\&. In the current version, this rectangle always gets the size of the minimal bounding box\&. This command is part of the color special set but is handled separately in order to let the user turn it off\&. For an overview of the command syntax, see the documentation of -\fBdvips\fR, for instance\&. -.RE -.PP -\fBcolor\fR -.RS 4 -Statements of this command set provide instructions to change the text/paint color\&. For an overview of the exact syntax, see the documentation of -\fBdvips\fR, for instance\&. -.RE -.PP -\fBdvisvgm\fR -.RS 4 - -\fBdvisvgm\fR -offers its own small set of specials\&. The following list gives a brief overview\&. -.PP -\fBdvisvgm:raw\fR \fItext\fR -.RS 4 -Adds an arbitrary sequence of characters to the SVG output\&. -\fBdvisvgm\fR -does not perform any validation here, thus the user has to ensure that the resulting SVG is still valid\&. Parameter -\fItext\fR -may contain the macros -\fB{?x}\fR, -\fB{?y}\fR, and -\fB{?color}\fR -that are expanded to the current -\fIx\fR -or -\fIy\fR -coordinate and the current color, respectively\&. Also, macro -\fB{?nl}\fR -expands to a newline character\&. -.RE -.PP -\fBdvisvgm:img\fR \fIwidth\fR \fIheight\fR \fIfile\fR -.RS 4 -Creates an image element at the current graphic position referencing the given file\&. JPEG, PNG, and SVG images can be used here\&. However, -\fBdvisvgm\fR -does not check the file format or the file name suffix\&. The lengths -\fIwidth\fR -and -\fIheight\fR -must be given as plain floating point numbers in TeX point units (1in = 72\&.27pt)\&. -.RE -.PP -\fBdvisvgm:bbox\fR n[ew] \fIname\fR -.RS 4 -Defines or resets a local bounding box called -\fIname\fR\&. The name may consist of letters and digits\&. While processing a DVI page, dvisvgm continuously updates the (global) bounding box of the current page in order to determine the minimal rectangle containing all visible page components (characters, images, drawing elements etc\&.) Additionally to the global bounding box, the user can request an arbitrary number of named local bounding boxes\&. Once defined, these boxes are updated together with the global bounding box starting with the first character that follows the definition\&. Thus, the local boxes can be used to compute the extent of parts of the page\&. This is useful for scenarios where the generated SVG file is post\-processed\&. In conjunction with special dvisvgm:raw, the macro -\fB{?bbox \fR\fB\fIname\fR\fR\fB}\fR -expands to the four values -\fIx\fR, -\fIy\fR, -\fIw\fR, and -\fIh\fR -(separated by spaces) specifying the coordinates of the upper left corner, width, and height of the local box -\fIname\fR\&. If box -\fIname\fR -wasn\(cqt previously defined, all four values equal zero\&. -.RE -.PP -\fBdvisvgm:bbox\fR \fIwidth\fR \fIheight\fR [\fIdepth\fR] -.RS 4 -Updates the bounding box of the current page by embedding a virtual rectangle (\fIx\fR, -\fIy\fR, -\fIwidth\fR, -\fIheight\fR) where the lower left corner is located at the current DVI drawing position (\fIx\fR,\fIy\fR)\&. If the optional parameter -\fIdepth\fR -is specified, dvisvgm embeds a second rectangle (\fIx\fR, -\fIy\fR, -\fIwidth\fR, \-\fIdepth\fR)\&. The lengths -\fIwidth\fR, -\fIheight\fR -and -\fIdepth\fR -must be given as plain floating point numbers in TeX point units (1in = 72\&.27pt)\&. Depending on size and position of the virtual rectangle, this command either enlarges the overall bounding box or leaves it as is\&. It\(cqs not possible to reduce its extent\&. This special should be used in conjunction with -\fBdvisvgm:raw\fR -in order to update the viewport of the page properly\&. -.RE -.PP -\fBdvisvgm:bbox\fR a[bs] \fIx1\fR \fIy1\fR \fIx2\fR \fIy2\fR -.RS 4 -This variant of the bbox special updates the bounding box by embedding a virtual rectangle (\fIx1\fR,\fIy1\fR,\fIx2\fR,\fIy2\fR)\&. The points (\fIx1\fR,\fIy1\fR) and (\fIx2\fR,\fIy2\fR) denote two diagonal corners of the rectangle given in TeX point units\&. -.RE -.PP -\fBdvisvgm:bbox\fR f[ix] \fIx1\fR \fIy1\fR \fIx2\fR \fIy2\fR -.RS 4 -This variant of the bbox special assigns an absolute (final) bounding box to the resulting SVG\&. After executing this command, dvisvgm doesn\(cqt further alter the bounding box coordinates, except this special is called again later\&. The points (\fIx1\fR,\fIy1\fR) and (\fIx2\fR,\fIy2\fR) denote two diagonal corners of the rectangle given in TeX point units\&. -.sp -The following TeX snippet adds two raw SVG elements to the output and updates the bounding box accordingly: -.sp -.if n \{\ -.RS 4 -.\} -.nf -\especial{dvisvgm:raw } -\especial{dvisvgm:bbox 20 10 10} - -\especial{dvisvgm:raw } -\especial{dvisvgm:bbox abs 10 200 100 250} -.fi -.if n \{\ -.RE -.\} -.RE -.RE -.PP -\fBem\fR -.RS 4 -These specials were introduced with the emTeX distribution by Eberhard Mattes\&. They provide line drawing statements, instructions for embedding MSP, PCX, and BMP image files, as well as two PCL commands\&. -\fBdvisvgm\fR -supports only the line drawing statements and ignores all other em specials silently\&. A description of the command syntax can be found in the DVI driver documentation coming with emTeX (see CTAN)\&. -.RE -.PP -\fBps\fR -.RS 4 -The famous DVI driver -\fBdvips\fR -introduced its own set of specials in order to embed PostScript code into DVI files, which greatly improves the capabilities of DVI documents\&. One aim of -\fBdvisvgm\fR -is to completely evaluate all PostScript snippets and to convert a large amount of it to SVG\&. However, in contrast to -\fBdvips\fR, -\fBdvisvgm\fR -uses floating point arithmetics to compute the precise position of each graphic element, i\&.e\&. it doesn\(cqt round the corrdinates\&. Therefore, the relative locations of the graphic elements may slightly differ from those computed by -\fBdvips\fR\&. -.sp -Since PostScript is a rather complex language, -\fBdvisvgm\fR -does not try to implement its own PostScript interpreter but relies on Ghostscript instead\&. If the Ghostscript library was not linked while building dvisvgm, it is looked up and dynamically loaded during runtime\&. In this case, dvisvgm looks for -\fIlibgs\&.so\fR -on Unix\-like systems, and for -\fIgsdll32\&.dll\fR -on Windows\&. You can override these default file names with the environment variable LIBGS\&. The library must be installed and must be reachable through the ld search path (*nix) or the PATH environment variable (Windows)\&. If it cannot be found, the evaluation of PostScript specials is disabled\&. Use option -\fB\-\-list\-specials\fR -to check whether PS support is available, i\&.e\&. the entry -\fIps\fR -is present\&. -.RE -.PP -\fBtpic\fR -.RS 4 -The TPIC special set defines instructions for drawing simple geometric objects\&. Some LaTeX packages, like eepic and tplot, use these specials to describe graphics\&. -.RE -.SH "EXAMPLES" -.sp -.if n \{\ -.RS 4 -.\} -.nf -dvisvgm file -.fi -.if n \{\ -.RE -.\} -.sp -Converts first page of \fIfile\&.dvi\fR to \fIfile\&.svg\fR\&. -.sp -.if n \{\ -.RS 4 -.\} -.nf -dvisvgm \-z file -.fi -.if n \{\ -.RE -.\} -.sp -Converts first page of \fIfile\&.dvi\fR to \fIfile\&.svgz\fR with default compression level 9\&. -.sp -.if n \{\ -.RS 4 -.\} -.nf -dvisvgm \-p5 \-z3 \-ba4\-l \-onewfile file -.fi -.if n \{\ -.RE -.\} -.sp -Converts fifth page of \fIfile\&.dvi\fR to \fInewfile\&.svgz\fR with compression level 3\&. The bounding box is set to DIN/ISO A4 in landscape format\&. -.sp -.if n \{\ -.RS 4 -.\} -.nf -dvisvgm \-\-transform="R20,w/3,2h/5 T1cm,1cm S2,3" file -.fi -.if n \{\ -.RE -.\} -.sp -Converts first page of \fIfile\&.dvi\fR to \fIfile\&.svg\fR where three transformations are applied\&. -.SH "ENVIRONMENT" -.sp -\fBdvisvgm\fR uses the \fBkpathsea\fR library for locating the files that it opens\&. Hence, the environment variables described in the library\(cqs documentation influence the converter\&. -.sp -If dvisvgm was linked without the Ghostscript library, and if PostScript support has not been disabled, the shared Ghostscript library is looked up during runtime\&. The environment variable LIBGS can be used to specify path and file name of the library\&. -.sp -The pre\-compiled Windows version of \fBdvisvgm\fR requires a working installation of MiKTeX 2\&.7 or above\&. To enable evaluation of PostScript specials, the original Ghostscript DLL must be present and reachable through the search path\&. -.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\&. -.TS -tab(:); -lt lt -lt lt -lt lt -lt lt -lt lt -lt lt -lt lt -lt lt -lt lt. -T{ -.sp -\fB*\&.enc\fR -T}:T{ -.sp -Font encoding files -T} -T{ -.sp -\fB*\&.fgd\fR -T}:T{ -.sp -Font glyph data files (cache files created by dvisvgm) -T} -T{ -.sp -\fB*\&.map\fR -T}:T{ -.sp -Font map files -T} -T{ -.sp -\fB*\&.mf\fR -T}:T{ -.sp -Metafont input files -T} -T{ -.sp -\fB*\&.pfb\fR -T}:T{ -.sp -PostScript Type 1 font files -T} -T{ -.sp -\fB*\&.pro\fR -T}:T{ -.sp -PostScript header/prologue files -T} -T{ -.sp -\fB*\&.tfm\fR -T}:T{ -.sp -TeX font metric files -T} -T{ -.sp -\fB*\&.ttf\fR -T}:T{ -.sp -TrueType font files -T} -T{ -.sp -\fB*\&.vf\fR -T}:T{ -.sp -Virtual font files -T} -.TE -.sp 1 -.SH "SEE ALSO" -.sp -\fBtex(1), mf(1), mktexmf(1), grodvi(1), potrace(1)\fR, and the \fBkpathsea library\fR info documentation\&. -.SH "RESOURCES" -.PP -Project home page -.RS 4 - -http://dvisvgm\&.sourceforge\&.net -.RE -.PP -SourceForge project site -.RS 4 - -http://sourceforge\&.net/projects/dvisvgm -.RE -.SH "AUTHOR" -.sp -Written by Martin Gieseking -.SH "COPYING" -.sp -Copyright \(co 2005\-2011 by 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\&. diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/dvisvgm.txt.in b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/dvisvgm.txt.in deleted file mode 100644 index 2c804069190..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/doc/dvisvgm.txt.in +++ /dev/null @@ -1,541 +0,0 @@ -////////////////////////////////////////////////////////////////////////// -// This file is part of dvisvgm -- the DVI to SVG converter // -// Copyright (C) 2005-2011 Martin Gieseking // -// // -// 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 . // -////////////////////////////////////////////////////////////////////////// - -dvisvgm(1) -========== -Martin Gieseking <@PACKAGE_BUGREPORT@> -:man source: dvisvgm -:man version: @VERSION@ -:man manual: dvisvgm Manual - -NAME ----- -dvisvgm - converts DVI files to the XML-based SVG format - - -SYNOPSIS --------- -*dvisvgm* [ 'options' ] 'file' [.dvi] - - -DESCRIPTION ------------ -The command-line utility *dvisvgm* converts DVI files, as generated by TeX/LaTeX, to the -XML-based scalable vector graphics format SVG. Since the current SVG standard 1.1 doesn't -specify multi-page graphics, *dvisvgm* creates separate SVG files for each DVI page. -Because of compatibility reasons, only the first page is converted by default. In order -to select a different page or arbitrary page sequences, use option *-p* which is described below. - -*dvisvgm* should properly convert all pages that are made up of fonts and rules only. -However, the utility also supports a couple of DVI extensions defined in terms of 'DVI specials'. -For a more detailed overview, see section *support of specials* below. - -As SVG is a vector based graphics format, *dvisvgm* tries to convert the glyph -outlines of all used fonts into scalable path descriptions. The fastest way to do that -is to extract the path information from PFB (PostScript Type 1) files. So, if *dvisvgm* is able -to find a PFB file for a required font, it will read the necessary information from this file. - -TeX's main source for font descriptions is Metafont though, which produces bitmap output. That's why -not all obtainable TeX fonts are available in PFB format. In these cases *dvisvgm* tries -to vectorize Metafont's output (GF fonts) by tracing the glyph bitmaps. The results are not -as perfect as most (manually optimized) PFB outlines but are nonetheless really nice in most cases. - - -OPTIONS -------- -*-a, --trace-all*=['retrace']:: -This option forces dvisvgm to trace not only the actually needed glyphs but all -glyphs of all bitmap fonts used in the DVI file. Since the tracing results are stored in -the font cache, all following DVI conversions (without option *--trace-all*) where these -fonts are involved, will be much faster. By default, dvisvgm traces only the actually -needed glyphs and adds them to the cache. -The boolean option 'retrace' determines how to handle glyphs already stored in the cache. -By default, these glyphs are skipped. Setting argument 'retrace' to 'yes' or -'true' forces dvisvgm to trace the corresponding bitmaps again. -+ -[NOTE] -This option only takes affect if font caching is active. Thus, *--trace-all* cannot be -combined with option *--cache=none*. -+ - - -*-b, --bbox*='fmt':: -Sets the bounding box of the generated graphic to the specified format. The parameter 'fmt' -takes either one of the format specifiers listed below, or a sequence of four comma- or -whitespace-separated length values 'x1', 'y1', 'x2' and 'y2'. The latter define two diagonal -corners of the bounding box. Each length value consists of a floating point number and an optional -length unit (pt, bp, cm, mm, in, or pc). If the unit is omitted, TeX points (pt) are assumed. -+ -It's also possible to give only one length value 'l'. In this case the minimal bounding box -is computed and enlarged by adding (-'l',-'l') to the upper left and ('l','l') to the lower -right corner. -+ -Alternatively, the following format specifiers are supported: - - *International DIN/ISO paper sizes*;; - A__n__, B__n__, C__n__, D__n__, where 'n' is a non-negative integer, e.g. A4 or a4 for DIN/ISO A4 - format (210mm × 297mm). - - *North American paper sizes*;; - invoice, executive, legal, letter, ledger - - *Special bounding box sizes*;; -[horizontal] - *dvi*::: page size stored in the DVI file - *min*::: computes the minimal/tightest bounding box - *none*::: no bounding box is assigned - -// - *Page orientation*;; - The default page orientation for DIN/ISO and American paper sizes is 'portrait', - i.e. 'width' < 'height'. Appending *-landscape* or simply *-l* to the format - string switches to 'landscape' mode ('width' > 'height'). For symmetry reasons you can - also explicitly add *-portrait* or *-p* to indicate the default portrait format. - Note that these suffixes are part of the size string and not separate options. Thus, - they must directly follow the size specifier without additional blanks. - Furthermore, the orientation suffixes can't be used with *dvi*, *min*, and *none*. -+ -[NOTE] -Option *-b, --bbox* only affects the bounding box and does not transform the page content. -Hence, if you choose a landscape format, the page won't be rotated. -+ -// - -// -*-c, --scale*='sx'[,'sy']:: -Scales the page content horizontally by 'sx' and vertically by 'sy'. This option is equivalent -to *-TS*'sx','sy'. - - -*-C, --cache*[='dir']:: -To speed up the conversion process of bitmap fonts, *dvisvgm* saves intermediate conversion -information in cache files. By default, these files are stored in $HOME/.dvisvgm/cache. If you prefer -a different location, use option *--cache* to overwrite the default. Furthermore, it is also possible -to disable the font caching mechanism completely with option *--cache=none*. If argument 'dir' is omitted, -dvisvgm prints the path of the default cache directory and some information about the stored fonts. -Additionally, outdated and corrupted cache files are removed. - - -*--color*:: -Enables colorization of messages printed during the conversion process. - - -*-e, --exact*:: -If this option is given, dvisvgm computes the precise bounding box of each character. By default, -the values stored in the font's TFM file are used to determine a glyph's extent. As these values are -intended to realize optimal character placements and are not designed to represent the exact dimensions, -they don't necessarily correspond with the bounds of the visual glyphs. Thus, width and/or height -of some glyphs may be larger than the respective TFM values. As a result, this can lead to clipped -characters at the bounds of the SVG graphic. With option *--exact*, dvisvgm analyzes the actual shape -of each character and derives a usually tight bounding box. - - -*-h, --help*:: -Prints a short summary of all available command-line options. - - -*--libgs=filename*:: -This option is only available if the Ghostscript library is not directly linked to dvisvgm and -PostScript support was not completely disabled during compilation. In this case, dvisvgm tries -to load the shared GS library dynamically during runtime. By default, it expects the library's name -to be libgs.so (on Unix-like systems) or gsdll32.dll (Windows). Option *--libgs* can be used to give -a different name. Alternatively, the GS library name can also be set by the environment variable *LIBGS*. -The latter has less precedence than the command-line option. - - -*-l, --list-specials*:: -Prints a list of registered special handlers and exits. Each handler processes a set of special -statements belonging to the same category. The categories are usually identified by the -prefix of the special statements. It's usually a leading word separated from the rest of the -statement by a colon or a blank, e.g. 'color' or 'ps'. - - -*--keep*:: -Disables the removal of temporary files as created by Metafont (usually .gf, .tfm, and .log files). - - -*-m, --map-file*='file':: -Sets the map file used to look up font names and encodings. *dvisvgm* does not provide -its own map file but tries to use available ones coming with *dvips* or *dvipdfm*. If -option *-m* is not given, *dvisvgm* looks for +ps2pk.map+, +dvipdfm.map+, and +psfonts.map+ (in this order). -Without further options, the file specified by option *-m* will be used instead of the -default maps. If you want *dvisgvm* to load the given file additionally to the default maps, add a -leading '+' to the file/path, e.g. `--map-file=+myfonts.map`. -For further information about the file format, see the manuals of *dvips* and *dvipdfm*. - - -*-M, --mag*='factor':: -Sets the maginfication factor applied in conjunction with Metafont calls prior tracing the glyphs. -The larger this value the better the tracing results. Nevertheless, -large magnification values can cause Metafont arithmetic errors due to number -overflows. So, use this option with care. The default setting usually produces -nice results. - - -*-n, --no-fonts*[='variant']:: -If this option is given, *dvisvgm* doesn't create SVG font elements but uses paths instead. The -resulting SVG files tends to be larger but concurrently more compatible with most applications that -don't support SVG fonts yet. The optional argument 'variant' selects the method how to substitute fonts -by paths. Variant 0 creates 'path' and 'use' elements. Variant 1 creates 'path' elements only. -Option *--no-fonts* implies *--no-styles*. - - -*-S, --no-specials*[='names']:: -Disable processing of special commands embedded in the DVI file. If no further -parameter is given, all specials are ignored. To selectively disable sets of specials, -an optional comma-separated list of names can be appended to this option. A 'name' is the unique -identifier referencing the intended special handler. Option *--list-specials* lists all currently -available handlers and their names. -All unsupported special statements are silently ignored. - - -*--no-styles*:: -By default, *dvisvgm* uses CSS styles and class attributes to reference fonts because it's more -compact than repeatedly set the complete font information in each text element. However, if you -prefer direct font references, the default behavior can be disabled with option *--no-styles*. - - -*--no-mktexmf*:: -Suppresses the generation of missing font files. If *dvisvgm* can't find a font file -through the kpathsea lookup mechanism, it calls the external tools mktextfm or mktexmf by. -This option disables these calls. - - -*-o, --output*='pattern':: -Sets the name pattern of the output file. Parameter 'pattern' is a string that may -contain the variables *%f* and *%p*. *%f* stands for the base name of the DVI file, i.e. -the DVI filename without suffix, and *%p* is the current page number. -By default, the pattern is *%f-%p.svg* if the DVI file consists of more than one page, and -*%f.svg* otherwise. That means, a DVI file 'foo.dvi' is converted to 'foo.svg' if 'foo.dvi' -is a single-page document. Otherwise, multiple SVG files 'foo-01.svg', 'foo-02.svg', etc. are -produced. In Windows environments, the percent sign indicates dereferenced environment -variables, and must therefore be protected by a second percent sign, e.g. *--output=%%f-%%p*. - - -*-p, --page*='ranges':: -This option sets the pages to be processed. Parameter 'ranges' 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'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 in case option *--page* is not given. -Usually, page ranges consist of two numbers denoting the first and last page to be converted. -If the conversion is to be started 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: *--page=-10* converts all -pages up to page 10, *--page=10-* converts all pages starting with page 10. -Please consider that the page values don't refer to the page numbers printed on the page. -Instead, the physical page count is expected, where the first page always gets number 1. - - -*-P, --progress*[='delay']:: -Enables a simple progress indicator shown when time-consuming operations like -PostScript specials are processed. The indicator doesn't appear before the given -delay (in seconds) has elapsed. The default delay value is 0.5 seconds. - - -*-r, --rotate*='angle':: -Rotates the page content clockwise by 'angle' degrees around the page center. -This option is equivalent to *-TR*'angle'. - - -*-s, --stdout*:: -Don't write the SVG output to a file but redirect it to *stdout*. - - -*-t, --translate*='tx'[,'ty']:: -Translates (moves) the page content in direction of vector ('tx','ty'). This option is -equivalent to *-TT*'tx','ty'. - - -*-T, --transform*='commands':: -Applies a sequence of transformations to the SVG content. Each transformation is described -by a 'command' beginning with a capital letter followed by a list of comma-separated -parameters. Following transformation commands are supported: - - *T* 'tx'[,'ty'];; - Translates (moves) the page in direction of vector ('tx','ty'). If 'ty' is omitted, - 'ty'=0 is assumed. - The expected unit length of 'tx' and 'ty' are TeX points (1pt = 1/72.27in). However, there - are several constants defined to simplify the unit conversion (see below). - - *S* 'sx'[,'sy'];; - Scales the page horizontally by 'sx' and vertically by 'sy'. If 'sy' is omitted, - 'sy'='sx' is assumed. - - *R* 'angle'[,'x','y'];; - Rotates the page clockwise by 'angle' degrees around point ('x','y'). If the optional - arguments 'x' and 'y' are omitted, the page will be rotated around its center depending on - the chosen page format. When option *-bnone* is given, the rotation center is origin (0,0). - - *KX* 'angle';; - Skews the page along the 'x'-axis by 'angle' degrees. Argument 'angle' can take any value - except 90+180__k__, where 'k' is an integer. - - *KY* 'angle';; - Skews the page along the 'y'-axis by 'angle' degrees. Argument 'angle' can take any value - except 90+180__k__, where 'k' is an integer. - - *FH* ['y'];; - Mirrors (flips) the page at the horizontal line through point (0,'y'). Omitting the optional argument - leads to 'y'='h'/2, where 'h' denotes the page height (see 'pre-defined constants' below). - - *FV* ['x'];; - Mirrors (flips) the page at the vertical line through point ('x',0). Omitting the optional argument - leads to 'x'='w'/2, where 'w' denotes the page width (see 'pre-defined constants' below). - - *M* 'm1',...,'m6';; - Applies a transformation described by the 3×3 matrix - \(('m1','m2','m3'),('m4','m5','m6'),(0,0,1)), where the inner triples denote - the rows. - -+ -[NOTE] -================================================================================================= -All transformation commands of option *-T, --transform* are applied in the order of their appearance. -Multiple commands can optionally be separated by spaces. In this case the whole transformation string -has to be enclosed in double quotes. All parameters are expressions of floating point type. You can either -give plain numbers or arithmetic terms combined by the operators *+* (addition), *-* (substraction), -*** (multiplication), */* (division) or *%* (modulo) with common associativity and -precedence rules. Parentheses may be used as well. - -Additionally, some pre-defined constants are provided: - -[horizontal] -*ux*:: horizontal position of upper left page corner in TeX point units -*uy*:: vertical position of upper left page corner in TeX point units -*h*:: page height in TeX point units (0 in case of *-bnone*) -*w*:: page width in TeX point units (0 in case of *-bnone*) - -Furthermore, you can use the length constants *pt*, *mm*, *cm* and *in*, e.g. -+2cm+ or +1.6in+. Thus, option +-TT1in,0R45+ moves the page content 1 inch to the right and rotates it -by 45 degrees around the page center afterwards. - -For single transformations you can also use options *-c*, *-t* and *-r*. Note that -the order in which these options are given is not significant, i.e. you can't use them to describe -transformation sequences. They are simply independent shorthand options for common transformations. - -================================================================================================= -+ - -*-v, --verbosity*='level':: -Controls the type of messages printed during a *dvisvgm* run: -[horizontal] - *0*;; no message output - *1*;; error messages only - *2*;; warning messages only - *4*;; informational messages only - -+ -[NOTE] -By adding these values you can combine the categories. The default level is 7, i.e. all -messages are printed. -+ - - -*-V, --version*[='extended']:: -Prints the version of dvisvgm and exits. If the optional argument is set to 'yes', the -version numbers of the linked libraries are printed as well. - - -*-z, --zip*[='level']:: -Creates a compressed SVG file with suffix .svgz. The optional argument specifies the compression -level. Valid values are in the range of 1 to 9 (default value is 9). Larger values cause better -compression results but take more computation time. -+ -CAUTION: This option cannot be combined with *-s, --stdout*. - - -SUPPORT OF SPECIALS -------------------- -*dvisvgm* supports several sets of 'special commands' that can be used to enrich DVI files with additional -features, like color, graphics or hyperlinks. The evaluation of special commands is delegated to various handlers. -Each handler is responsible for all special statements of the same command set, i.e. commands beginning -with the same prefix. To get a list of actually provided special handlers, use option *--list-specials* (see above). - -*bgcolor*:: -Special statement for changing the background/page color. Since SVG 1.1 doesn't support background colors, -*dvisvgm* inserts a rectangle of the chosen color. In the current version, this rectangle always gets the size -of the minimal bounding box. This command is part of the color special set but is handled separately in order -to let the user turn it off. For an overview of the command syntax, see the documentation of *dvips*, for instance. - - -*color*:: -Statements of this command set provide instructions to change the text/paint color. For an overview of the -exact syntax, see the documentation of *dvips*, for instance. - -*dvisvgm*:: -*dvisvgm* offers its own small set of specials. The following list gives a brief overview. - *dvisvgm:raw* 'text';; - Adds an arbitrary sequence of characters to the SVG output. *dvisvgm* does not perform any validation here, - thus the user has to ensure that the resulting SVG is still valid. Parameter 'text' may - contain the macros *{?x}*, *{?y}*, and *{?color}* that are expanded to the current 'x' or 'y' coordinate - and the current color, respectively. Also, macro *{?nl}* expands to a newline character. - - *dvisvgm:img* 'width' 'height' 'file';; - Creates an image element at the current graphic position referencing the given file. JPEG, PNG, and SVG images - can be used here. However, *dvisvgm* does not check the file format or the file name suffix. The lengths 'width' - and 'height' must be given as plain floating point numbers in TeX point units (1in = 72.27pt). - - *dvisvgm:bbox* n[ew] 'name';; - Defines or resets a local bounding box called 'name'. The name may consist of letters and digits. - While processing a DVI page, dvisvgm continuously updates the (global) bounding box of the current page in order to - determine the minimal rectangle containing all visible page components (characters, images, drawing elements etc.) - Additionally to the global bounding box, the user can request an arbitrary number of named local bounding boxes. - Once defined, these boxes are updated together with the global bounding box starting with the first character that - follows the definition. Thus, the local boxes can be used to compute the extent of parts of the page. This is useful - for scenarios where the generated SVG file is post-processed. - In conjunction with special dvisvgm:raw, the macro *{?bbox 'name'}* expands to the four values 'x', 'y', 'w', and 'h' - (separated by spaces) specifying the coordinates of the upper left corner, width, and height of the local box 'name'. - If box 'name' wasn't previously defined, all four values equal zero. - - *dvisvgm:bbox* 'width' 'height' ['depth'];; - Updates the bounding box of the current page by embedding a virtual rectangle ('x', 'y', 'width', 'height') - where the lower left corner is located at the current DVI drawing position ('x','y'). If the optional parameter 'depth' - is specified, dvisvgm embeds a second rectangle ('x', 'y', 'width', -__depth__). The lengths 'width', 'height' and - 'depth' must be given as plain floating point numbers in TeX point units (1in = 72.27pt). Depending on size and position - of the virtual rectangle, this command either enlarges the overall bounding box or leaves it as is. It's not possible - to reduce its extent. This special should be used in conjunction with *dvisvgm:raw* in order to update the viewport - of the page properly. - - *dvisvgm:bbox* a[bs] 'x1' 'y1' 'x2' 'y2';; - This variant of the bbox special updates the bounding box by embedding a virtual rectangle ('x1','y1','x2','y2'). - The points ('x1','y1') and ('x2','y2') denote two diagonal corners of the rectangle given in TeX point units. - - *dvisvgm:bbox* f[ix] 'x1' 'y1' 'x2' 'y2';; - This variant of the bbox special assigns an absolute (final) bounding box to the resulting SVG. After executing - this command, dvisvgm doesn't further alter the bounding box coordinates, except this special is called again later. - The points ('x1','y1') and ('x2','y2') denote two diagonal corners of the rectangle given in TeX point units. -+ -The following TeX snippet adds two raw SVG elements to the output and updates the bounding box accordingly: -+ ------------------------------------------------------------------------------------- -\special{dvisvgm:raw } -\special{dvisvgm:bbox 20 10 10} - -\special{dvisvgm:raw } -\special{dvisvgm:bbox abs 10 200 100 250} ------------------------------------------------------------------------------------- -+ - -*em*:: -These specials were introduced with the emTeX distribution by Eberhard Mattes. They provide line drawing -statements, instructions for embedding MSP, PCX, and BMP image files, as well as two PCL commands. -*dvisvgm* supports only the line drawing statements and ignores all other em specials silently. -A description of the command syntax can be found in the DVI driver documentation coming with emTeX (see CTAN). - -// *html*:: -// The hyperref package uses a set of HTML anchor tags to indicate hyperlinks in DVI files. -// *dvisvgm* converts them to corresponding SVG elements. - -*ps*:: -The famous DVI driver *dvips* introduced its own set of specials in order to embed PostScript code into DVI files, -which greatly improves the capabilities of DVI documents. One aim of *dvisvgm* is to completely evaluate all -PostScript snippets and to convert a large amount of it to SVG. However, in contrast to *dvips*, *dvisvgm* uses floating point -arithmetics to compute the precise position of each graphic element, i.e. it doesn't round the corrdinates. Therefore, -the relative locations of the graphic elements may slightly differ from those computed by *dvips*. -+ -Since PostScript is a rather complex language, *dvisvgm* does not try to implement its own PostScript interpreter but relies on -Ghostscript instead. If the Ghostscript library was not linked while building dvisvgm, it is looked up and dynamically loaded -during runtime. In this case, dvisvgm looks for 'libgs.so' on Unix-like systems, and for 'gsdll32.dll' on Windows. -You can override these default file names with the environment variable LIBGS. -The library must be installed and must be reachable through the ld search path (\*nix) or the PATH environment -variable (Windows). If it cannot be found, the evaluation of PostScript specials is disabled. -Use option *--list-specials* to check whether PS support is available, i.e. the entry 'ps' is present. - -*tpic*:: -The TPIC special set defines instructions for drawing simple geometric objects. Some LaTeX packages, like -eepic and tplot, use these specials to describe graphics. - - -EXAMPLES --------- --------------- -dvisvgm file --------------- -Converts first page of 'file.dvi' to 'file.svg'. - ---------------- -dvisvgm -z file ---------------- -Converts first page of 'file.dvi' to 'file.svgz' with default compression level 9. - -------------------------------------- -dvisvgm -p5 -z3 -ba4-l -onewfile file -------------------------------------- -Converts fifth page of 'file.dvi' to 'newfile.svgz' with compression level 3. -The bounding box is set to DIN/ISO A4 in landscape format. - ------------------------------------------------------ -dvisvgm --transform="R20,w/3,2h/5 T1cm,1cm S2,3" file ------------------------------------------------------ -Converts first page of 'file.dvi' to 'file.svg' where three transformations are applied. - - -ENVIRONMENT ------------ -*dvisvgm* uses the *kpathsea* library for locating the files that it opens. -Hence, the environment variables described in the library's documentation influence the converter. - -If dvisvgm was linked without the Ghostscript library, and if PostScript support has not been disabled, -the shared Ghostscript library is looked up during runtime. The environment variable LIBGS can be -used to specify path and file name of the library. - -The pre-compiled Windows version of *dvisvgm* requires a working installation of MiKTeX 2.7 or above. -To enable evaluation of PostScript specials, the original Ghostscript DLL must be present and reachable -through the search path. - -FILES ------ -The location of the following files is determined by the kpathsea library. -To check the actual kpathsea configuration you can use the *kpsewhich* utility. - -[horizontal] -**.enc*:: Font encoding files -**.fgd*:: Font glyph data files (cache files created by dvisvgm) -**.map*:: Font map files -**.mf*:: Metafont input files -**.pfb*:: PostScript Type 1 font files -**.pro*:: PostScript header/prologue files -**.tfm*:: TeX font metric files -**.ttf*:: TrueType font files -**.vf*:: Virtual font files - -SEE ALSO --------- -*tex(1), mf(1), mktexmf(1), grodvi(1), potrace(1)*, and the *kpathsea library* info documentation. - - -RESOURCES ---------- -Project home page::: http://dvisvgm.sourceforge.net -SourceForge project site::: http://sourceforge.net/projects/dvisvgm - - -AUTHOR ------- -Written by {author} <{email}> - - -COPYING -------- -Copyright (C) 2005-2011 by 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. - -// vim: set syntax=asciidoc: diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/Makefile.am deleted file mode 100644 index 97bf78f50f4..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/Makefile.am +++ /dev/null @@ -1,13 +0,0 @@ -VERSION=1.8 -noinst_LIBRARIES = libpotrace.a -libpotrace_a_SOURCES = curve.c curve.h trace.c trace.h decompose.c \ - decompose.h potracelib.c potracelib.h lists.h auxiliary.h bitmap.h \ - progress.h - -curve.o: potracelib.h lists.h curve.h auxiliary.h -decompose.o: potracelib.h curve.h auxiliary.h lists.h bitmap.h decompose.h -decompose.o: progress.h -potracelib.o: potracelib.h curve.h auxiliary.h decompose.h progress.h trace.h -potracelib.o: ../config.h -trace.o: potracelib.h curve.h auxiliary.h lists.h trace.h progress.h - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/Makefile.in deleted file mode 100644 index e7ca5bae59e..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/Makefile.in +++ /dev/null @@ -1,458 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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. - -@SET_MAKE@ - -VPATH = @srcdir@ -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@ -target_triplet = @target@ -subdir = potracelib -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LIBRARIES = $(noinst_LIBRARIES) -AR = ar -ARFLAGS = cru -libpotrace_a_AR = $(AR) $(ARFLAGS) -libpotrace_a_LIBADD = -am_libpotrace_a_OBJECTS = curve.$(OBJEXT) trace.$(OBJEXT) \ - decompose.$(OBJEXT) potracelib.$(OBJEXT) -libpotrace_a_OBJECTS = $(am_libpotrace_a_OBJECTS) -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libpotrace_a_SOURCES) -DIST_SOURCES = $(libpotrace_a_SOURCES) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -AM_LDFLAGS = @AM_LDFLAGS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DATE = @DATE@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -EXTRA_LIBS = @EXTRA_LIBS@ -FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ -FREETYPE_LIBS = @FREETYPE_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -OBJEXT = @OBJEXT@ -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@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = 1.8 -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -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@ -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@ -sbindir = @sbindir@ -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@ -noinst_LIBRARIES = libpotrace.a -libpotrace_a_SOURCES = curve.c curve.h trace.c trace.h decompose.c \ - decompose.h potracelib.c potracelib.h lists.h auxiliary.h bitmap.h \ - progress.h - -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .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 potracelib/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign potracelib/Makefile -.PRECIOUS: 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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - 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) - -rm -f libpotrace.a - $(libpotrace_a_AR) libpotrace.a $(libpotrace_a_OBJECTS) $(libpotrace_a_LIBADD) - $(RANLIB) libpotrace.a - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curve.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decompose.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/potracelib.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trace.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - 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 -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - 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" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(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: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -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-noinstLIBRARIES mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -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 -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES ctags distclean distclean-compile \ - distclean-generic 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 pdf pdf-am ps ps-am tags uninstall \ - uninstall-am - - -curve.o: potracelib.h lists.h curve.h auxiliary.h -decompose.o: potracelib.h curve.h auxiliary.h lists.h bitmap.h decompose.h -decompose.o: progress.h -potracelib.o: potracelib.h curve.h auxiliary.h decompose.h progress.h trace.h -potracelib.o: ../config.h -trace.o: potracelib.h curve.h auxiliary.h lists.h trace.h progress.h - -# 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: diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/auxiliary.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/auxiliary.h deleted file mode 100644 index fbd1db4c166..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/auxiliary.h +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (C) 2001-2011 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 - -/* ---------------------------------------------------------------------- */ -/* 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 */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/bitmap.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/bitmap.h deleted file mode 100644 index 2df04b46fbe..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/bitmap.h +++ /dev/null @@ -1,97 +0,0 @@ -/* Copyright (C) 2001-2011 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 -#include - -/* 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 + (y)*(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) - -/* free the given bitmap. Leaves errno untouched. */ -static inline void bm_free(potrace_bitmap_t *bm) { - if (bm) { - free(bm->map); - } - free(bm); -} - -/* return new un-initialized bitmap. NULL with errno on error */ -static inline potrace_bitmap_t *bm_new(int w, int h) { - potrace_bitmap_t *bm; - int dy = (w + BM_WORDBITS - 1) / BM_WORDBITS; - - 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 *) malloc(dy * h * BM_WORDSIZE); - if (!bm->map) { - free(bm); - return NULL; - } - return bm; -} - -/* clear the given bitmap. Set all bits to c. */ -static inline void bm_clear(potrace_bitmap_t *bm, int c) { - memset(bm->map, c ? -1 : 0, bm->dy * bm->h * BM_WORDSIZE); -} - -/* duplicate the given bitmap. Return NULL on error with errno set. */ -static inline potrace_bitmap_t *bm_dup(const potrace_bitmap_t *bm) { - potrace_bitmap_t *bm1 = bm_new(bm->w, bm->h); - if (!bm1) { - return NULL; - } - memcpy(bm1->map, bm->map, bm->dy * bm->h * BM_WORDSIZE); - return bm1; -} - -/* invert the given bitmap. */ -static inline void bm_invert(potrace_bitmap_t *bm) { - int i; - for (i = 0; i < bm->dy * bm->h; i++) { - bm->map[i] ^= BM_ALLBITS; - } -} - -#endif /* BITMAP_H */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/curve.c b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/curve.c deleted file mode 100644 index 414fb5de9ee..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/curve.c +++ /dev/null @@ -1,108 +0,0 @@ -/* Copyright (C) 2001-2011 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 */ - -#include -#include -#include - -#include "potracelib.h" -#include "lists.h" -#include "curve.h" - -#define SAFE_MALLOC(var, n, typ) \ - if ((var = (typ *)malloc((n)*sizeof(typ))) == NULL) goto malloc_error - -/* ---------------------------------------------------------------------- */ -/* allocate and free path objects */ - -path_t *potrace_path_new(void) { - path_t *p = NULL; - privpath_t *priv = NULL; - - SAFE_MALLOC(p, 1, path_t); - memset(p, 0, sizeof(path_t)); - SAFE_MALLOC(priv, 1, privpath_t); - memset(priv, 0, sizeof(privpath_t)); - p->priv = priv; - return p; - - malloc_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 potrace_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) { - potrace_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_MALLOC(curve->tag, n, int); - SAFE_MALLOC(curve->c, n, dpoint3_t); - SAFE_MALLOC(curve->vertex, n, dpoint_t); - SAFE_MALLOC(curve->alpha, n, double); - SAFE_MALLOC(curve->alpha0, n, double); - SAFE_MALLOC(curve->beta, n, double); - return 0; - - malloc_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; -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/curve.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/curve.h deleted file mode 100644 index e98efdf5cfd..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/curve.h +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (C) 2001-2011 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 *potrace_path_new(void); -void potrace_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 */ - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/decompose.c b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/decompose.c deleted file mode 100644 index 376af015df3..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/decompose.c +++ /dev/null @@ -1,514 +0,0 @@ -/* Copyright (C) 2001-2011 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. */ - - -#include -#include -#include -#include - -#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; yh; 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; yy1; y++) { - for (i=imin; i0) { - 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 (xhipriv->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; kpriv->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; kpriv->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, 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 = potrace_path_new(); - if (!p) { - goto error; - } - - p->priv->pt = pt; - p->priv->len = len; - p->area = area; - 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=0; y--) { - for (x=x0; xw; x+=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) { - potrace_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) { - potrace_path_free(p); - } - return -1; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/decompose.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/decompose.h deleted file mode 100644 index 89b01e5045c..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/decompose.h +++ /dev/null @@ -1,16 +0,0 @@ -/* Copyright (C) 2001-2011 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 */ - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/lists.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/lists.h deleted file mode 100644 index 078129afce5..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/lists.h +++ /dev/null @@ -1,285 +0,0 @@ -/* Copyright (C) 2001-2011 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 */ - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/potracelib.c b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/potracelib.c deleted file mode 100644 index c483ea335b9..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/potracelib.c +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright (C) 2001-2011 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. */ - -#include -#include - -#include "potracelib.h" -#include "curve.h" -#include "decompose.h" -#include "trace.h" -#include "progress.h" - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -/* 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, ¶m_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 1.10"; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/potracelib.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/potracelib.h deleted file mode 100644 index 99e17e424ae..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/potracelib.h +++ /dev/null @@ -1,139 +0,0 @@ -/* Copyright (C) 2001-2011 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 */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/progress.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/progress.h deleted file mode 100644 index 93a1fa3f04c..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/progress.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 2001-2011 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 */ - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/trace.c b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/trace.c deleted file mode 100644 index f1e88a90862..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/trace.c +++ /dev/null @@ -1,1245 +0,0 @@ -/* Copyright (C) 2001-2011 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 */ - -#include -#include -#include -#include - -#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_MALLOC(var, n, typ) \ - if ((var = (typ *)malloc((n)*sizeof(typ))) == NULL) goto malloc_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 && blen; - 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_MALLOC(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; ipt[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 + x*x; - pp->sums[i+1].xy = pp->sums[i].xy + x*y; - pp->sums[i+1].y2 = pp->sums[i].y2 + y*y; - } - return 0; - - malloc_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= 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_MALLOC(pivk, n, int); - SAFE_MALLOC(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 ilon, n, int); - - /* determine pivot points: for each i, let pivk[i] be the furthest k - such that all j with 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'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; - - malloc_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=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_MALLOC(pen, n+1, double); - SAFE_MALLOC(prev, n+1, int); - SAFE_MALLOC(clip0, n, int); - SAFE_MALLOC(clip1, n+1, int); - SAFE_MALLOC(seg0, n+1, int); - SAFE_MALLOC(seg1, n+1, int); - - /* calculate clipped paths */ - for (i=0; ilon[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; i0; 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_MALLOC(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; - - malloc_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_MALLOC(ctr, m, dpoint_t); - SAFE_MALLOC(dir, m, dpoint_t); - SAFE_MALLOC(q, m, quadform_t); - - r = privcurve_init(&pp->curve, m); - if (r) { - goto malloc_error; - } - - /* calculate "optimal" point-slope representation for each line - segment */ - for (i=0; iQ[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; - - malloc_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; ivertex[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; ivertex[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 icurve.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_MALLOC(pt, m+1, int); - SAFE_MALLOC(pen, m+1, double); - SAFE_MALLOC(len, m+1, int); - SAFE_MALLOC(opt, m+1, opti_t); - SAFE_MALLOC(convc, m, int); - SAFE_MALLOC(areac, m+1, double); - - /* pre-calculate convexity: +1 = right turn, -1 = left turn, 0 = corner */ - for (i=0; icurve.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; icurve.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 malloc_error; - } - SAFE_MALLOC(s, om, double); - SAFE_MALLOC(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; iocurve.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; - - malloc_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; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/trace.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/trace.h deleted file mode 100644 index dc2b9247adb..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/potracelib/trace.h +++ /dev/null @@ -1,15 +0,0 @@ -/* Copyright (C) 2001-2011 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 */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BgColorSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BgColorSpecialHandler.cpp deleted file mode 100644 index 979d76bdd0f..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BgColorSpecialHandler.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/************************************************************************* -** BgColorSpecialHandler.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include "BgColorSpecialHandler.h" -#include "ColorSpecialHandler.h" -#include "SpecialActions.h" - -using namespace std; - - -bool BgColorSpecialHandler::process (const char *prefix, istream &is, SpecialActions *actions) { - ColorSpecialHandler csh; - return csh.process(prefix, is, actions); -} - - -const char** BgColorSpecialHandler::prefixes () const { - static const char *pfx[] = {"background", 0}; - return pfx; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BgColorSpecialHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BgColorSpecialHandler.h deleted file mode 100644 index d3b0a75ccca..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BgColorSpecialHandler.h +++ /dev/null @@ -1,34 +0,0 @@ -/************************************************************************* -** BgColorSpecialHandler.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef BGCOLORSPECIALHANDLER_H -#define BGCOLORSPECIALHANDLER_H - -#include "SpecialManager.h" - -struct BgColorSpecialHandler : SpecialHandler -{ - const char* info () const {return "background color special";} - const char* name () const {return "bgcolor";} - const char** prefixes () const; - bool process (const char *prefix, std::istream &is, SpecialActions *actions); -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Bitmap.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Bitmap.cpp deleted file mode 100644 index 4c2a0510bc8..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Bitmap.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/************************************************************************* -** Bitmap.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "Bitmap.h" -#include "macros.h" - -using namespace std; - -Bitmap::Bitmap () : _rows(0), _cols(0), _xshift(0), _yshift(0), _bpr(0), _bytes(0) -{ -} - - -/** Constructs a Bitmap */ -Bitmap::Bitmap (int minx, int maxx, int miny , int maxy) { - resize(minx, maxx, miny, maxy); -} - - -/** Resizes the bitmap and clears all pixels. - * @param[in] minx index of leftmost pixel column - * @param[in] maxx index of rightmost pixel column - * @param[in] miny index of bottom row - * @param[in] maxy index of top row */ -void Bitmap::resize (int minx, int maxx, int miny , int maxy) { - _rows = abs(maxy-miny)+1; - _cols = abs(maxx-minx)+1; - _xshift = minx; - _yshift = miny; - _bpr = _cols/8 + (_cols % 8 ? 1 : 0); // bytes per row - _bytes.resize(_rows*_bpr); - FORALL(_bytes, vector::iterator, it) - *it = 0; -} - - -/** Sets n pixels of row r to 1 starting at pixel c. - * @param[in] r number of row - * @param[in] c number of column (pixel) - * @param[in] n number of bits to be set */ -void Bitmap::setBits (int r, int c, int n) { - r -= _yshift; - c -= _xshift; - UInt8 *byte = &_bytes[r*_bpr + c/8];// + (c%8 ? 1 : 0); - while (n > 0) { - int b = 7 - c%8; // number of leftmost bit in current byte to be set - int m = min(n, b+1); // number of bits to be set in current byte - int bitseq = (1 << m)-1; // sequence of n set bits (bits 0..n-1 are set) - bitseq <<= b-m+1; // move bit sequence so that bit b is the leftmost set bit - *byte |= UInt8(bitseq); // apply bit sequence to current byte - byte++; - n -= m; - c += m; - } -} - - -void Bitmap::forAllPixels (ForAllData &data) const { - for (int y=_rows-1; y >= 0 ; y--) { - for (int c=0; c < _bpr; c++) { - UInt8 byte = _bytes[y*_bpr+c]; - int x; - for (int b=7; (b >= 0) && ((x = 8*c+(7-b)) < _cols); b--) { - data.pixel(x, y, byte & (1 << b), *this); - } - } - } -} - - -struct BBoxData : public Bitmap::ForAllData -{ - BBoxData () : maxx(0), maxy(0) {} - void pixel (int x, int y, bool set, const Bitmap &bm) { - if (set) { - maxx = max(maxx, x); - maxy = max(maxy, y); - } - } - int maxx, maxy; -}; - - -void Bitmap::bbox (int &w, int &h) const { - BBoxData data; - forAllPixels(data); - w = data.maxx+1; - h = data.maxy+1; -} - - -ostream& Bitmap::write (ostream &os) const { -#if 0 - for (int r=_rows-1; r >= 0 ; r--) { - for (int c=0; c < _bpr; c++) { - UInt8 byte = _bytes[r*_bpr+c]; - for (int b=128; b; b>>=1) - os << (byte & b ? '*' : '-'); - os << ' '; - } - os << endl; - } -#endif - return os; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Bitmap.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Bitmap.h deleted file mode 100644 index a9a6be61b2a..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Bitmap.h +++ /dev/null @@ -1,109 +0,0 @@ -/************************************************************************* -** Bitmap.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef BITMAP_H -#define BITMAP_H - -#include -#include -#include "types.h" - - -class Bitmap -{ - public: - struct ForAllData { - virtual ~ForAllData() {} - virtual void pixel (int x, int y, bool set, Bitmap &bm) {} - virtual void pixel (int x, int y, bool set, const Bitmap &bm) {} - }; - - public: - Bitmap (); - Bitmap (int minx, int maxx, int miny , int maxy); - void resize (int minx, int maxx, int miny , int maxy); - void setBits(int r, int c, int n); - const UInt8* operator[] (int r) const {return &_bytes[r*_bpr];} - int height () const {return _rows;} - int width () const {return _cols;} - int xshift () const {return _xshift;} - int yshift () const {return _yshift;} - int bytesPerRow () const {return _bpr;} - bool empty () const {return (!_rows && !_cols) || _bytes.empty();} - void bbox (int &w, int &h) const; - void forAllPixels (ForAllData &data) const; - - template - int copy (std::vector &target, bool vflip=false) const; - -// template -// void write (std::ostream &os, const std::vector &v) const; - - std::ostream& write (std::ostream &os) const; - - private: - int _rows, _cols; ///< number of rows, columns - int _xshift, _yshift; ///< horizontal/vertical shift - int _bpr; ///< number of bytes per row - std::vector _bytes; -}; - - -/** Copies the bitmap to a new target area and reorganize the bits. - * @param[out] target points to first T of new bitmap (must be deleted after usage) - * @param[in] vflip true if the new bitmap should be flipped vertically - * @return number of Ts per row */ -template -int Bitmap::copy (std::vector &target, bool vflip) const { - const int s = sizeof(T); - const int tpr = _bpr/s + (_bpr%s ? 1 : 0); // number of Ts per row - target.resize(_rows*tpr); - for (int r=0; r < _rows; r++) { - int targetrow = vflip ? _rows-r-1 : r; - for (int b=0; b < _bpr; b++) { - T &t = target[targetrow*tpr + b/s]; - T chunk = (T)_bytes[r*_bpr+b] << (8*(s-1-b%s)); - if (b % s == 0) - t = chunk; - else - t |= chunk; - } - } - return tpr; -} - - -/* -template -void Bitmap::write (std::ostream &os, const std::vector &v) const { - const int s = sizeof(T); - const int tpr = _bpr/s + (_bpr%s ? 1 : 0); // number of Ts per row - for (int r=_rows-1; r >= 0; r--) { - for (int t=0; t < tpr; t++) { - for (T b=(T)1<<(8*s-1); b; b>>=1) - os << ((v[r*tpr+t] & b) ? '*' : '-'); - os << ' '; - } - os << std::endl; - } -}*/ - - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BoundingBox.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BoundingBox.cpp deleted file mode 100644 index c5ab55e27a9..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BoundingBox.cpp +++ /dev/null @@ -1,253 +0,0 @@ -/************************************************************************* -** BoundingBox.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include "BoundingBox.h" -#include "Matrix.h" -#include "XMLNode.h" - -using namespace std; - - -BoundingBox::BoundingBox () - : ulx(0), uly(0), lrx(0), lry(0), _valid(false), _locked(false) -{ -} - - -BoundingBox::BoundingBox (double ulxx, double ulyy, double lrxx, double lryy) - : ulx(min(ulxx,lrxx)), uly(min(ulyy,lryy)), - lrx(max(ulxx,lrxx)), lry(max(ulyy,lryy)), - _valid(true), _locked(false) -{ -} - - -BoundingBox::BoundingBox (const DPair &p1, const DPair &p2) - : ulx(min(p1.x(), p2.x())), uly(min(p1.y(), p2.y())), - lrx(max(p1.x(), p2.x())), lry(max(p1.y(), p2.y())), - _valid(true), _locked(false) -{ -} - - -BoundingBox::BoundingBox (const Length &ulxx, const Length &ulyy, const Length &lrxx, const Length &lryy) - : ulx(min(ulxx.pt(),lrxx.pt())), uly(min(ulyy.pt(),lryy.pt())), - lrx(max(ulxx.pt(),lrxx.pt())), lry(max(ulyy.pt(),lryy.pt())), - _valid(true), _locked(false) -{ -} - - -/** Removes leading and trailing whitespace from the given string. */ -static string& strip (string &str) { - size_t n=0; - while (n < str.length() && isspace(str[n])) - ++n; - str.erase(0, n); - n=str.length()-1; - while (n > 0 && isspace(str[n])) - --n; - str.erase(n+1); - return str; -} - - -/** Sets or modifies the bounding box. If 'boxstr' consists of 4 length values, - * they denote the absolute position of two diagonal corners of the box. In case - * of a single length value l the current box is enlarged by adding (-l,-l) the upper - * left and (l,l) to the lower right corner. - * @param[in] boxstr whitespace and/or comma separated string of lengths. */ -void BoundingBox::set (string boxstr) { - vector coord; - const size_t len = boxstr.length(); - size_t l=0; - strip(boxstr); - string lenstr; - do { - while (l < len && isspace(boxstr[l])) - l++; - size_t r=l; - while (r < len && !isspace(boxstr[r]) && boxstr[r] != ',') - r++; - lenstr = boxstr.substr(l, r-l); - if (!lenstr.empty()) { - coord.push_back(Length(lenstr)); - if (boxstr[r] == ',') - r++; - l = r; - } - } while (!lenstr.empty() && coord.size() < 4); - - switch (coord.size()) { - case 1: - ulx -= coord[0].pt(); - uly -= coord[0].pt(); - lrx += coord[0].pt(); - lry += coord[0].pt(); - break; - case 2: - ulx -= coord[0].pt(); - uly -= coord[1].pt(); - lrx += coord[0].pt(); - lry += coord[1].pt(); - break; - case 4: - ulx = min(coord[0].pt(), coord[2].pt()); - uly = min(coord[1].pt(), coord[3].pt()); - lrx = max(coord[0].pt(), coord[2].pt()); - lry = max(coord[1].pt(), coord[3].pt()); - break; - default: - throw BoundingBoxException("1, 2 or 4 length parameters expected"); - } -} - - -/** Enlarges the box so that point (x,y) is enclosed. */ -void BoundingBox::embed (double x, double y) { - if (!_locked) { - if (_valid) { - if (x < ulx) - ulx = x; - else if (x > lrx) - lrx = x; - if (y < uly) - uly = y; - else if (y > lry) - lry = y; - } - else { - ulx = lrx = x; - uly = lry = y; - _valid = true; - } - } -} - - -/** Enlarges the box so that box bb is enclosed. */ -void BoundingBox::embed (const BoundingBox &bb) { - if (!_locked && bb._valid) { - if (_valid) { - embed(bb.ulx, bb.uly); - embed(bb.lrx, bb.lry); - } - else { - ulx = bb.ulx; - uly = bb.uly; - lrx = bb.lrx; - lry = bb.lry; - _valid = true; - } - } -} - - -void BoundingBox::embed (const DPair &c, double r) { - embed(BoundingBox(c.x()-r, c.y()-r, c.x()+r, c.y()+r)); -} - - -void BoundingBox::expand (double m) { - if (!_locked) { - ulx -= m; - uly -= m; - lrx += m; - lry += m; - } -} - - -/** Intersects the current box with bbox and applies the result to *this. - * If both boxes are disjoint, *this is not altered. - * @param[in] bbox box to intersect with - * @return false if *this is locked or both boxes are disjoint */ -bool BoundingBox::intersect (const BoundingBox &bbox) { - if (_locked || lrx < bbox.ulx || lry < bbox.uly || ulx > bbox.lrx || uly > bbox.lry) - return false; - ulx = max(ulx, bbox.ulx); - uly = max(uly, bbox.uly); - lrx = min(lrx, bbox.lrx); - lry = min(lry, bbox.lry); - return true; -} - - -void BoundingBox::operator += (const BoundingBox &bb) { - if (!_locked) { - ulx += bb.ulx; - uly += bb.uly; - lrx += bb.lrx; - lry += bb.lry; - } -} - - -void BoundingBox::scale (double sx, double sy) { - if (!_locked) { - ulx *= sx; - lrx *= sx; - if (sx < 0) swap(ulx, lrx); - uly *= sy; - lry *= sy; - if (sy < 0) swap(uly, lry); - } -} - - -void BoundingBox::transform (const Matrix &tm) { - if (!_locked) { - DPair ul = tm * DPair(lrx, lry); - DPair lr = tm * DPair(ulx, uly); - DPair ll = tm * DPair(ulx, lry); - DPair ur = tm * DPair(lrx, uly); - ulx = min(min(ul.x(), lr.x()), min(ur.x(), ll.x())); - uly = min(min(ul.y(), lr.y()), min(ur.y(), ll.y())); - lrx = max(max(ul.x(), lr.x()), max(ur.x(), ll.x())); - lry = max(max(ul.y(), lr.y()), max(ur.y(), ll.y())); - } -} - - -string BoundingBox::toSVGViewBox () const { - ostringstream oss; - oss << ulx << ' ' << uly << ' ' << width() << ' ' << height(); - return oss.str(); -} - - -ostream& BoundingBox::write (ostream &os) const { - return os << '(' << ulx << ", " << uly - << ", " << lrx << ", " << lry << ')'; -} - - -XMLElementNode* BoundingBox::toSVGRect () const { - XMLElementNode *rect = new XMLElementNode("rect"); - rect->addAttribute("x", minX()); - rect->addAttribute("y", minY()); - rect->addAttribute("width", width()); - rect->addAttribute("height", height()); - rect->addAttribute("fill", "none"); - return rect; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BoundingBox.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BoundingBox.h deleted file mode 100644 index 952fbdfd3af..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/BoundingBox.h +++ /dev/null @@ -1,86 +0,0 @@ -/************************************************************************* -** BoundingBox.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef BOUNDINGBOX_H -#define BOUNDINGBOX_H - -#include -#include -#include "Length.h" -#include "MessageException.h" -#include "Pair.h" -#include "macros.h" -#include "types.h" - - -class Matrix; -class XMLElementNode; - - -struct BoundingBoxException : MessageException -{ - BoundingBoxException (const std::string &msg) : MessageException(msg) {} -}; - - -class BoundingBox -{ - public: - BoundingBox (); - BoundingBox (double ulxx, double ulyy, double lrxx, double lryy); - BoundingBox (const DPair &p1, const DPair &p2); - BoundingBox (const Length &ulxx, const Length &ulyy, const Length &lrxx, const Length &lryy); - BoundingBox (const std::string &boxstr) {set(boxstr);} - void set (std::string boxstr); - void embed (double x, double y); - void embed (const BoundingBox &bb); - void embed (const DPair &p) {embed(p.x(), p.y());} - void embed (const DPair &c, double r); - - template - void embed (const Pair &p) {embed(p.x(), p.y());} - - void expand (double m); - bool intersect (const BoundingBox &bbox); - double minX () const {return ulx;} - double minY () const {return uly;} - double maxX () const {return lrx;} - double maxY () const {return lry;} - double width () const {return lrx-ulx;} - double height () const {return lry-uly;} - void lock () {_locked = true;} - void unlock () {_locked = false;} - void operator += (const BoundingBox &bb); - void scale (double sx, double sy); - void transform (const Matrix &tm); - std::string toSVGViewBox () const; - std::ostream& write (std::ostream &os) const; - XMLElementNode* toSVGRect () const; - - private: - double ulx, uly; ///< coordinates of upper left vertex (in TeX point units) - double lrx, lry; ///< coordinates of lower right vertex (in TeX point unitx) - bool _valid : 1; ///< true if the box coordinates are properly set - bool _locked : 1; ///< if true, the box data is read-only -}; - -IMPLEMENT_OUTPUT_OPERATOR(BoundingBox) - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CRC32.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CRC32.cpp deleted file mode 100644 index 339375a6b06..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CRC32.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/************************************************************************* -** CRC32.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include "CRC32.h" - -using namespace std; - - -CRC32::CRC32 () : _crc32(0xFFFFFFFF) -{ - const UInt32 poly = 0xEDB88320; - for (int i = 0; i < 256; i++) { - UInt32 crc=i; - for (int j=8; j > 0; j--) { - if (crc & 1) - crc = (crc >> 1) ^ poly; - else - crc >>= 1; - } - _tab[i] = crc; - } -} - - -/** Resets CRC32 sum to 0. */ -void CRC32::reset () { - _crc32 = 0xFFFFFFFF; -} - - -/** Appends string bytes to the previous data and computes the resulting checksum. - * @param[in] data string to update the checksum with */ -void CRC32::update (const char *data) { - update((const UInt8*)data, strlen(data)); -} - - -/** Appends a single value to the previous data and computes the resulting checksum. - * @param[in] n value to update the checksum with - * @param[in] bytes number of bytes to consider (0-4) */ -void CRC32::update (UInt32 n, int bytes) { - for (int i=bytes-1; i >= 0; --i) { - UInt8 byte = UInt8((n >> (8*i)) & 0xff); - update(&byte, 1); - } -} - - -/** Appends a sequence of bytes to the previous data and computes the resulting checksum. - * @param[in] bytes pointer to array of bytes - * @param[in] len number of bytes in array */ -void CRC32::update (const UInt8 *bytes, size_t len) { - for (size_t i=0; i < len; ++i) - _crc32 = ((_crc32 >> 8) & 0x00FFFFFF) ^ _tab[(_crc32 ^ *bytes++) & 0xFF]; -} - - -void CRC32::update (istream &is) { - char buf [4096]; - while (is) { - is.read(buf, 4096); - update((UInt8*)buf, is.gcount()); - } -} - - -/** Returns the checksum computed from values added with the update functions. */ -UInt32 CRC32::get () const { - return _crc32 ^ 0xFFFFFFFF; -} - - -/** Computes the CRC32 checksum of a sequence of bytes. - * @param[in] bytes pointer to array of bytes - * @param[in] len number of bytes in array - * @return CRC32 checksum */ -UInt32 CRC32::compute (const UInt8 *bytes, size_t len) { - CRC32 crc32; - crc32.update(bytes, len); - return crc32.get(); -} - - -/** Computes the CRC32 checksum of a string. */ -UInt32 CRC32::compute (const char *str) { - return compute((const UInt8*)str, strlen(str)); -} - - -UInt32 CRC32::compute (istream &is) { - CRC32 crc32; - crc32.update(is); - return crc32.get(); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CRC32.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CRC32.h deleted file mode 100644 index 4dd323ad3df..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CRC32.h +++ /dev/null @@ -1,51 +0,0 @@ -/************************************************************************* -** CRC32.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef CRC32_H -#define CRC32_H - -#include -#include -#include "types.h" - -class CRC32 -{ - public: - CRC32 (); - void update (const UInt8 *bytes, size_t len); - void update (UInt32 n, int bytes=4); - void update (const char *str); - void update (std::istream &is); - UInt32 get () const; - void reset (); - static UInt32 compute (const UInt8 *bytes, size_t len); - static UInt32 compute (const char *str); - static UInt32 compute (std::istream &is); - - protected: - CRC32 (const CRC32 &crc32) {} - - private: - UInt32 _crc32; - UInt32 _tab[256]; -}; - - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Calculator.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Calculator.cpp deleted file mode 100644 index 33502d6cec2..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Calculator.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/************************************************************************* -** Calculator.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "Calculator.h" - -using namespace std; - -// token types -const char END = 0; -const char NUMBER = 1; -const char NAME = 2; - - -#include - - -/** Evaluates a given arithmetic expression and returns its value. - * The evaluator is implemented as a recursive descendent parser. - * @param[in] is reads expression from this stream - * @return expression value */ -double Calculator::eval (istream &is) { - double ret = expr(is, false); - if (lookAhead(is) > 0) - throw CalculatorException("expression syntax error"); - return ret; -} - - -/** Evaluates a given arithmetic expression and returns its value. - * @param[in] expr expression to evaluate - * @return expression value */ -double Calculator::eval (const string &expr) { - istringstream iss; - iss.str(expr); - return eval(iss); -} - - -/** Evaluates the root rule of the expression grammar. */ -double Calculator::expr (istream &is, bool skip) { // expr: - double left = term(is, skip); - while (1) - switch (lookAhead(is)) { - case '+': left += term(is, true); break; // term '+' term => $1 + $3 - case '-': left -= term(is, true); break; // term '-' term => $1 - $3 - default : return left; // term => $1 - } -} - - -double Calculator::term (istream &is, bool skip) { // term: - double left = prim(is, skip); - while (1) - switch (lookAhead(is)) { - case '*': left *= prim(is, true); break; // prim '*' prim => $1 * $3 - case '/': { // prim '/' prim => $1 / $3 - double denom = prim(is, true); - if (denom == 0) - throw CalculatorException("division by zero"); - left /= denom; - break; - } - case '%': { // prim '%' prim => $1 mod $3 - double denom = prim(is, true); - if (denom == 0) - throw CalculatorException("division by zero"); - left -= denom*floor(left/denom); - break; - } - default: // prim => $1 - return left; - } -} - - -double Calculator::prim (istream &is, bool skip) { // prim: - if (skip) - lex(is); - switch (lookAhead(is)) { - case NUMBER: { // NUMBER => $1 - lex(is); - double ret = numValue; - if (lookAhead(is) == NAME) { // NUMBER NAME => $1 * $2 - lex(is); - ret *= getVariable(strValue); - } - return ret; - } - case NAME: { // NAME => getVariable($1) - lex(is); - return getVariable(strValue); - } - case '-': // '-' prim => -$2 - return -prim(is, true); - case '(': { // '(' expr ')' => $2 - double e = expr(is, true); - if (lookAhead(is) != ')') - throw CalculatorException("')' expected"); - lex(is); - return e; - } - default: - throw CalculatorException("primary expression expected"); - } -} - - -/** Determines type of next token without swallowing it. That means - * the same token will be read again next time. */ -char Calculator::lookAhead (istream &is) { - while (isspace(is.peek())) // skip whitespace - is.get(); - if (is.eof()) - return END; - int c = is.peek(); - if (isdigit(c) || c == '.') - return NUMBER; - if (isalpha(c)) - return NAME; - return char(c); -} - - -/** Reads next token and returns its type. The token value is either assigned - * to the object members numValue or strValue depending on the type. The token - * type is represented by a unique integer. In contrast to method 'lookAhead' - * lex consumes the read token. - * @param[in] is next token is read from this stream - * @return token type */ -char Calculator::lex (istream &is) { - int tokenType = lookAhead(is); - switch (tokenType) { - case NUMBER: - is >> numValue; - break; - case NAME: { - strValue.clear(); - while (isalpha(is.peek())) - strValue += char(is.get()); - break; - } - default: - tokenType = is.get(); - } - return char(tokenType); -} - - -/** Returns the value of a previously defined variable. If there - * is no variable of the given name, a CalculatorException is thrown. - * @param[in] name name of variable - * @return assigned value */ -double Calculator::getVariable (const string &name) const { - map::const_iterator it = variables.find(name); - if (it == variables.end()) - throw CalculatorException("undefined variable '" + name + "'"); - return it->second; -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Calculator.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Calculator.h deleted file mode 100644 index ce4f6698b20..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Calculator.h +++ /dev/null @@ -1,56 +0,0 @@ -/************************************************************************* -** Calculator.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef CALCULATOR_H -#define CALCULATOR_H - -#include -#include -#include -#include "MessageException.h" - - -struct CalculatorException : public MessageException -{ - CalculatorException (const std::string &msg) : MessageException(msg) {} -}; - -class Calculator -{ - public: - double eval (std::istream &is); - double eval (const std::string &expr); - void setVariable (const std::string &name, double value) {variables[name] = value;} - double getVariable (const std::string &name) const; - - protected: - double expr (std::istream &is, bool skip); - double term (std::istream &is, bool skip); - double prim (std::istream &is, bool skip); - char lex (std::istream &is); - char lookAhead (std::istream &is); - - private: - std::map variables; - double numValue; - std::string strValue; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CmdLineParserBase.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CmdLineParserBase.cpp deleted file mode 100644 index 6c18f221ad3..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CmdLineParserBase.cpp +++ /dev/null @@ -1,309 +0,0 @@ -/************************************************************************* -** CmdLineParserBase.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "CmdLineParserBase.h" -#include "InputBuffer.h" -#include "InputReader.h" -#include "Message.h" - -using namespace std; - -void CmdLineParserBase::init () { - _error = false; - _files.clear(); -} - - -/** Parses all options given on the command line. - * @param[in] printErrors enable/disable printing of error messages */ -void CmdLineParserBase::parse (int argc, char **argv, bool printErrors) { - init(); - _printErrors = printErrors; - bool filesOnly = false; // - for (int i=1; i < argc; i++) { - CharInputBuffer ib(argv[i], strlen(argv[i])); - BufferInputReader ir(ib); - if (filesOnly || ir.peek() != '-') - _files.push_back(argv[i]); - else { - ir.get(); - if (ir.peek() == '-') { - // scan long option - ir.get(); - if (ir.eof()) // "--" only - filesOnly = true; // treat all following options as filenames - else { - string longname; - while (isalnum(ir.peek()) || ir.peek() == '-') - longname += char(ir.get()); - if (const Option *opt = option(longname)) - (*opt->handler)(this, ir, *opt, true); - else if (!_error) { - if (printErrors) - Message::estream(false) << "unknown option --" << longname << '\n'; - _error = true; - } - } - } - else { - // scan short option(s) - bool combined = false; // multiple short options combined, e.g -abc - do { - int shortname = ir.get(); - if (const Option *opt = option(shortname)) { - if (!combined || opt->argmode == 0) { - if (opt->argmode == 'r' && strlen(argv[i]) == 2) { // required argument separated by whitespace? - if (i+1 < argc && argv[i+1][0] != '-') - ib.assign(argv[++i]); - } - (*opt->handler)(this, ir, *opt, false); - if (opt->argmode == 0) - combined = true; - } - else { - if (printErrors) - Message::estream(false) << "option -" << char(shortname) << " must be given separately\n"; - _error = true; - } - } - else if (shortname > 0) { - if (printErrors) - Message::estream(false) << "unknown option -" << char(shortname) << '\n'; - _error = true; - } - } - while (!_error && combined && !ir.eof()); - } - } - } -} - - -/** Prints an error message to stdout. - * @param[in] opt error occurred in this option - * @param[in] longopt the long option name was scanned - * @param[in] msg message to be printed */ -void CmdLineParserBase::error (const Option &opt, bool longopt, const char *msg) const { - if (_printErrors) { - Message::estream(false) << "option "; - if (longopt) - Message::estream(false) << "--" << opt.longname; - else - Message::estream(false) << '-' << opt.shortname; - Message::estream(false) << ": " << msg << '\n'; - } - _error = true; -} - - -/** Lists the scanned filenames. Just for debugging purposes. */ -void CmdLineParserBase::status () const { - cout << "file names:\n"; - for (size_t i=0; i < _files.size(); i++) - cout << " " << _files[i] << endl; - cout << endl; -} - - -/** Returns the option information of a given short option name. - * If the option name can't be found 0 is returned. - * @param[in] longname long version of the option without leading hyphen (e.g. p, not -p) */ -const CmdLineParserBase::Option* CmdLineParserBase::option (char shortname) const { - for (const Option *opts = options(); opts->longname; ++opts) - if (opts->shortname == shortname) - return opts; - return 0; -} - - -/** Returns the option information of a given long option name. - * Parameter 'longname' hasn't to be the complete long option name. The function looks up - * all options that start with 'longname'. If a unique or an exact match was found, it's returned. - * Otherwise, the return value is 0. - * @param[in] longname long version of the option without leading hyphens (e.g. param, not --param) */ -const CmdLineParserBase::Option* CmdLineParserBase::option (const string &longname) const { - vector matches; // all matching options - size_t len = longname.length(); - for (const Option *opts = options(); opts->longname; ++opts) { - if (string(opts->longname, len) == longname) { - if (len == strlen(opts->longname)) // exact match? - return opts; - matches.push_back(opts); - } - } - switch (matches.size()) { - default: - if (_printErrors) { - Message::estream(false) << "option --" << longname << " is ambiguous ("; - for (size_t i=0; i < matches.size(); i++) { - if (i > 0) - Message::estream(false) << ", "; - Message::estream(false) << matches[i]->longname; - } - Message::estream(false) << ")\n"; - } - _error = true; - - case 0 : return 0; - case 1 : return matches[0]; - } -} - - -/** Returns true if a valid separator between option and argument was found. - * Arguments of long options are preceded by a '='. The argument of a short option - * directly follows the option without a separation character. - * @param[in] ir argument is read from this InputReader - * @param[in] opt scans argument of this option - * @param[in] longopt true if the long option name was given */ -bool CmdLineParserBase::checkArgPrefix (InputReader &ir, const Option &opt, bool longopt) const { - if (longopt) { - if (ir.peek() == '=') - ir.get(); - else { - error(opt, longopt, "'=' expected"); - return false; - } - } - return true; -} - - -/** Returns true if a given option has no argument, .e.g. -p or --param. - * @param[in] ir argument is read from this InputReader - * @param[in] opt scans argument of this option - * @param[in] longopt true if the long option name was given */ -bool CmdLineParserBase::checkNoArg (InputReader &ir, const Option &opt, bool longopt) const { - if (ir.eof()) - return true; - error(opt, longopt, "no argument expected"); - return false; -} - - -/** Gets an integer argument of a given option, e.g. -p5 or --param=5. - * @param[in] ir argument is read from this InputReader - * @param[in] opt scans argument of this option - * @param[in] longopt true if the long option name was given - * @param[out] arg the scanned option argument - * @return true if argument could be scanned without errors */ -bool CmdLineParserBase::getIntArg (InputReader &ir, const Option &opt, bool longopt, int &arg) const { - if (checkArgPrefix(ir, opt, longopt)) { - if (ir.parseInt(arg) && ir.eof()) - return true; - error(opt, longopt, "integer value expected"); - } - return false; -} - - -/** Gets an unsigned integer argument of a given option, e.g. -p5 or --param=5. - * @param[in] ir argument is read from this InputReader - * @param[in] opt scans argument of this option - * @param[in] longopt true if the long option name was given - * @param[out] arg the scanned option argument - * @return true if argument could be scanned without errors */ -bool CmdLineParserBase::getUIntArg (InputReader &ir, const Option &opt, bool longopt, unsigned &arg) const { - if (checkArgPrefix(ir, opt, longopt)) { - if (ir.parseUInt(arg) && ir.eof()) - return true; - error(opt, longopt, "unsigned integer value expected"); - } - return false; -} - - -/** Gets a double (floating point) argument of a given option, e.g. -p2.5 or --param=2.5. - * @param[in] ir argument is read from this InputReader - * @param[in] opt scans argument of this option - * @param[in] longopt true if the long option name was given - * @param[out] arg the scanned option argument - * @return true if argument could be scanned without errors */ -bool CmdLineParserBase::getDoubleArg (InputReader &ir, const Option &opt, bool longopt, double &arg) const { - if (checkArgPrefix(ir, opt, longopt)) { - if (ir.parseDouble(arg) != 0 && ir.eof()) - return true; - error(opt, longopt, "floating point value expected"); - } - return false; -} - - -/** Gets a string argument of a given option, e.g. -pstr or --param=str. - * @param[in] ir argument is read from this InputReader - * @param[in] opt scans argument of this option - * @param[in] longopt true if the long option name was given - * @param[out] arg the scanned option argument - * @return true if argument could be scanned without errors */ -bool CmdLineParserBase::getStringArg (InputReader &ir, const Option &opt, bool longopt, string &arg) const { - if (checkArgPrefix(ir, opt, longopt)) { - arg.clear(); - while (!ir.eof()) - arg += char(ir.get()); - if (!arg.empty()) - return true; - error(opt, longopt, "string argument expected"); - } - return false; -} - - -/** Gets a boolean argument of a given option, e.g. -pyes or --param=yes. - * @param[in] ir argument is read from this InputReader - * @param[in] opt scans argument of this option - * @param[in] longopt true if the long option name was given - * @param[out] arg the scanned option argument - * @return true if argument could be scanned without errors */ -bool CmdLineParserBase::getBoolArg (InputReader &ir, const Option &opt, bool longopt, bool &arg) const { - if (checkArgPrefix(ir, opt, longopt)) { - string str; - while (!ir.eof()) - str += char(ir.get()); - if (str == "yes" || str == "y" || str == "true" || str == "1") { - arg = true; - return true; - } - else if (str == "no" || str == "n" || str == "false" || str == "0") { - arg = false; - return true; - } - error(opt, longopt, "boolean argument expected (yes, no, true, false, 0, 1)"); - } - return false; -} - - -/** Gets a (single) character argument of a given option, e.g. -pc or --param=c. - * @param[in] ir argument is read from this InputReader - * @param[in] opt scans argument of this option - * @param[in] longopt true if the long option name was given - * @param[out] arg the scanned option argument - * @return true if argument could be scanned without errors */ -bool CmdLineParserBase::getCharArg (InputReader &ir, const Option &opt, bool longopt, char &arg) const { - if (checkArgPrefix(ir, opt, longopt)) { - arg = char(ir.get()); - if (arg >= 0 && ir.eof()) - return true; - error(opt, longopt, "character argument expected"); - } - return false; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CmdLineParserBase.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CmdLineParserBase.h deleted file mode 100644 index 1be54e022a5..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CmdLineParserBase.h +++ /dev/null @@ -1,96 +0,0 @@ -/************************************************************************* -** CmdLineParserBase.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef CMDLINEPARSERBASE_H -#define CMDLINEPARSERBASE_H - -#include -#include - -class InputReader; - -class CmdLineParserBase -{ - protected: - struct Option; - - struct OptionHandler { - virtual ~OptionHandler () {} - virtual void operator () (CmdLineParserBase *obj, InputReader &ir, const Option &opt, bool longopt) const=0; - }; - - template - class OptionHandlerImpl : public OptionHandler { - protected: - typedef void (T::*LocalHandler)(InputReader &ir, const Option &opt, bool longopt); - - public: - OptionHandlerImpl (LocalHandler handler) : _handler(handler) {} - - void operator () (CmdLineParserBase *obj, InputReader &ir, const Option &opt, bool longopt) const { - if (T *tobj = dynamic_cast(obj)) - (tobj->*_handler)(ir, opt, longopt); - } - - private: - LocalHandler _handler; - }; - - struct Option { - ~Option () {delete handler;} - char shortname; - const char *longname; - char argmode; // mode of option argument: '\0'=none, 'o'=optional, 'r'=required - const OptionHandler *handler; - }; - - public: - virtual void parse (int argc, char **argv, bool printErrors=true); - virtual void help () const {} - virtual int numFiles () const {return _files.size();} - virtual const char* file (size_t n) {return n < _files.size() ? _files[n].c_str() : 0;} - virtual void status () const; - virtual bool error () const {return _error;} - - protected: - CmdLineParserBase () : _error(false) {} - CmdLineParserBase (const CmdLineParserBase &cmd) {} - virtual ~CmdLineParserBase () {} - virtual void init (); - virtual void error (const Option &opt, bool longopt, const char *msg) const; - bool checkArgPrefix (InputReader &ir, const Option &opt, bool longopt) const; - bool checkNoArg (InputReader &ir, const Option &opt, bool longopt) const; - bool getIntArg (InputReader &ir, const Option &opt, bool longopt, int &arg) const; - bool getUIntArg (InputReader &ir, const Option &opt, bool longopt, unsigned &arg) const; - bool getDoubleArg (InputReader &ir, const Option &opt, bool longopt, double &arg) const; - bool getStringArg (InputReader &ir, const Option &opt, bool longopt, std::string &arg) const; - bool getBoolArg (InputReader &ir, const Option &opt, bool longopt, bool &arg) const; - bool getCharArg (InputReader &ir, const Option &opt, bool longopt, char &arg) const; - const Option* option (char shortname) const; - const Option* option (const std::string &longname) const; - virtual const Option* options () const {return 0;} - - private: - bool _printErrors; ///< if true, print error messages - mutable bool _error; ///< error occured while parsing options - std::vector _files; ///< filename parameters -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Color.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Color.cpp deleted file mode 100644 index 630c3798cda..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Color.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/************************************************************************* -** Color.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include "Color.h" - -using namespace std; - - - -const Color Color::BLACK(0); -const Color Color::WHITE(UInt8(255), UInt8(255), UInt8(255)); - - -static inline UInt8 float_to_byte (float v) { - return (UInt8) (floor(255*v+0.5)); -} - - -void Color::set (float r, float g, float b) { - set(float_to_byte(r), float_to_byte(g), float_to_byte(b)); -} - - -void Color::setHSB (float h, float s, float b) { - vector hsb(3), rgb(3); - hsb[0] = h; - hsb[1] = s; - hsb[2] = b; - HSB2RGB(hsb, rgb); - set(rgb[0], rgb[1], rgb[2]); -} - - -void Color::setCMYK (float c, float m, float y, float k) { - vector cmyk(4), rgb(3); - cmyk[0] = c; - cmyk[1] = m; - cmyk[2] = y; - cmyk[3] = k; - CMYK2RGB(cmyk, rgb); - set(rgb[0], rgb[1], rgb[2]); -} - - -void Color::operator *= (double c) { - UInt32 rgb=0; - for (int i=0; i < 3; i++) { - rgb |= UInt32(floor((_rgb & 0xff)*c+0.5)) << (8*i); - _rgb >>= 8; - } - _rgb = rgb; -} - - -string Color::rgbString () const { - ostringstream oss; - oss << '#'; - for (int i=2; i >= 0; i--) { - oss << setbase(16) << setfill('0') << setw(2) - << (((_rgb >> (8*i)) & 0xff)); - } - return oss.str(); -} - - -/** Approximates a CMYK color by an RGB triple. The component values - * are expected to be normalized, i.e. 0 <= cmyk[i],rgb[j] <= 1. - * @param[in] cmyk color in CMYK space - * @param[out] rgb RGB approximation */ -void Color::CMYK2RGB (const vector &cmyk, vector &rgb) { - for (int i=0; i < 3; i++) - rgb[i] = 1.0f-min(1.0f, cmyk[i]+cmyk[3]); -} - - -/** Converts a color given in HSB coordinates to RGB. - * @param[in] hsb color in HSB space - * @param[out] rgb color in RGB space */ -void Color::HSB2RGB (const vector &hsb, vector &rgb) { - if (hsb[1] == 0) - rgb[0] = rgb[1] = rgb[2] = hsb[2]; - else { - float h = hsb[0]-floor(hsb[0]); - int i = int(6*h); - float f = float(6.0*h-i); - float p = hsb[2]*(1-hsb[1]); - float q = hsb[2]*(1-hsb[1]*f); - float t = hsb[2]*(1-hsb[1]*(1-f)); - switch (i) { - case 0 : rgb[0]=hsb[2]; rgb[1]=t; rgb[2]=p; break; - case 1 : rgb[0]=q; rgb[1]=hsb[2]; rgb[2]=p; break; - case 2 : rgb[0]=p; rgb[1]=hsb[2]; rgb[2]=t; break; - case 3 : rgb[0]=p; rgb[1]=q; rgb[2]=hsb[2]; break; - case 4 : rgb[0]=t; rgb[1]=p; rgb[2]=hsb[2]; break; - case 5 : rgb[0]=hsb[2]; rgb[1]=p; rgb[2]=q; break; - default: ; // prevent compiler warning - } - } -} - - -void Color::getRGB (float &r, float &g, float &b) const { - r = float(((_rgb >> 16) & 255) / 255.0); - g = float(((_rgb >> 8) & 255) / 255.0); - b = float((_rgb & 255) / 255.0); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Color.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Color.h deleted file mode 100644 index d1d8ce3f6cc..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Color.h +++ /dev/null @@ -1,59 +0,0 @@ -/************************************************************************* -** Color.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef COLOR_H -#define COLOR_H - -#include -#include -#include "types.h" - -class Color -{ - public: - static const Color BLACK; - static const Color WHITE; - - public: - Color () : _rgb(0) {} - Color (UInt32 rgb) : _rgb(rgb) {} - Color (UInt8 r, UInt8 g, UInt8 b) {set(r,g,b);} - Color (float r, float g, float b) {set(r,g,b);} - Color (const std::vector &rgb) {set(rgb[0], rgb[1], rgb[2]);} - operator UInt32 () const {return _rgb;} - bool operator == (const Color &c) {return _rgb == c._rgb;} - bool operator != (const Color &c) {return _rgb != c._rgb;} - void set (UInt8 r, UInt8 g, UInt8 b) {_rgb = (r << 16) | (g << 8) | b;} - void set (float r, float g, float b); - void setGray (UInt8 g) {set(g,g,g);} - void setGray (float g) {set(g,g,g);} - void setHSB (float h, float s, float b); - void setCMYK (float c, float m, float y, float k); - void getRGB (float &r, float &g, float &b) const; - void operator *= (double c); - std::string rgbString () const; - static void CMYK2RGB (const std::vector &cmyk, std::vector &rgb); - static void HSB2RGB (const std::vector &hsb, std::vector &rgb); - - private: - UInt32 _rgb; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/ColorSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/ColorSpecialHandler.cpp deleted file mode 100644 index 2dfbb5fc606..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/ColorSpecialHandler.cpp +++ /dev/null @@ -1,269 +0,0 @@ -/************************************************************************* -** ColorSpecialHandler.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "ColorSpecialHandler.h" -#include "SpecialActions.h" - -using namespace std; - - - -/** Approximates a CMYK color by an RGB triple. The component values - * are expected to be normalized, i.e. 0 <= cmyk[i],rgb[j] <= 1. - * @param[in] cmyk color in CMYK space - * @param[out] rgb RGB approximation */ -static void cmyk_to_rgb (const vector &cmyk, vector &rgb) { - for (int i=0; i < 3; i++) - rgb[i] = 1.0f-min(1.0f, cmyk[i]+cmyk[3]); -} - - -/** Converts a color given in HSB coordinates to RGB. - * @param[in] hsb color in HSB space - * @param[out] rgb color in RGB space */ -static void hsb_to_rgb (const vector &hsb, vector &rgb) { - if (hsb[1] == 0) - rgb[0] = rgb[1] = rgb[2] = hsb[2]; - else { - float h = hsb[0]-floor(hsb[0]); - float i = floor(6*h); - float f = 6.0f*h-i; - float p = hsb[2]*(1-hsb[1]); - float q = hsb[2]*(1-hsb[1]*f); - float t = hsb[2]*(1-hsb[1]*(1-f)); - switch (int(i)) { - case 0 : rgb[0]=hsb[2]; rgb[1]=t; rgb[2]=p; break; - case 1 : rgb[0]=q; rgb[1]=hsb[2]; rgb[2]=p; break; - case 2 : rgb[0]=p; rgb[1]=hsb[2]; rgb[2]=t; break; - case 3 : rgb[0]=p; rgb[1]=q; rgb[2]=hsb[2]; break; - case 4 : rgb[0]=t; rgb[1]=p; rgb[2]=hsb[2]; break; - case 5 : rgb[0]=hsb[2]; rgb[1]=p; rgb[2]=q; break; - default: ; // prevent compiler warning - } - } -} - - -/** Converts a gray value to RGB. - * @param[in] gray normalized gray value (0 <= gray <= 1) - * @param[out] rgb resulting RGB triple */ -static void gray_to_rgb (const float gray, vector &rgb) { - for (int i=0; i < 3; i++) - rgb[i] = gray; -} - - -static float read_float (istream &is) { - is.clear(); - float v; - is >> v; - if (is.fail()) - throw SpecialException("number expected"); - return v; -} - - -/** Reads multiple float values from a given stream. The number of - * values read is determined by the size of the result vector. - * @param[in] is stream to be read from - * @param[out] v the resulting floats */ -static void read_floats (istream &is, vector &v) { - for (size_t i=0; i < v.size(); i++) - v[i] = read_float(is); -} - - -static bool color_constant (const string &c, vector &rgb) { - // converted color constants from color.pro - const struct { - const char *name; - const float rgb[3]; - } - constants[] = { - {"Apricot", {1, 0.68f, 0.48f}}, - {"Aquamarine", {0.18f, 1, 0.7f}}, - {"Bittersweet", {0.76f, 0.01f, 0}}, - {"Black", {0, 0, 0}}, - {"Blue", {0, 0, 1}}, - {"BlueGreen", {0.15f, 1, 0.67f}}, - {"BlueViolet", {0.1f, 0.05f, 0.96f}}, - {"BrickRed", {0.72f, 0, 0}}, - {"Brown", {0.4f, 0, 0}}, - {"BurntOrange", {1, 0.49f, 0}}, - {"CadetBlue", {0.38f, 0.43f, 0.77f}}, - {"CarnationPink", {1, 0.37f, 1}}, - {"Cerulean", {0.06f, 0.89f, 1}}, - {"CornflowerBlue", {0.35f, 0.87f, 1}}, - {"Cyan", {0, 1, 1}}, - {"Dandelion", {1, 0.71f, 0.16f}}, - {"DarkOrchid", {0.6f, 0.2f, 0.8f}}, - {"Emerald", {0, 1, 0.5f}}, - {"ForestGreen", {0, 0.88f, 0}}, - {"Fuchsia", {0.45f, 0.01f, 0.92f}}, - {"Goldenrod", {1, 0.9f, 0.16f}}, - {"Gray", {0.5f, 0.5f, 0.5f}}, - {"Green", {0, 1, 0}}, - {"GreenYellow", {0.85f, 1, 0.31f}}, - {"JungleGreen", {0.01f, 1, 0.48f}}, - {"Lavender", {1, 0.52f, 1}}, - {"LimeGreen", {0.5f, 1, 0}}, - {"Magenta", {1, 0, 1}}, - {"Mahogany", {0.65f, 0, 0}}, - {"Maroon", {0.68f, 0, 0}}, - {"Melon", {1, 0.54f, 0.5f}}, - {"MidnightBlue", {0, 0.44f, 0.57f}}, - {"Mulberry", {0.64f, 0.08f, 0.98f}}, - {"NavyBlue", {0.06f, 0.46f, 1}}, - {"OliveGreen", {0, 0.6f, 0}}, - {"Orange", {1, 0.39f, 0.13f}}, - {"OrangeRed", {1, 0, 0.5f}}, - {"Orchid", {0.68f, 0.36f, 1}}, - {"Peach", {1, 0.5f, 0.3f}}, - {"Periwinkle", {0.43f, 0.45f, 1}}, - {"PineGreen", {0, 0.75f, 0.16f}}, - {"Plum", {0.5f, 0, 1}}, - {"ProcessBlue", {0.04f, 1, 1}}, - {"Purple", {0.55f, 0.14f, 1}}, - {"RawSienna", {0.55f, 0, 0}}, - {"Red", {1, 0, 0}}, - {"RedOrange", {1, 0.23f, 0.13f}}, - {"RedViolet", {0.59f, 0, 0.66f}}, - {"Rhodamine", {1, 0.18f, 1}}, - {"RoyalBlue", {0, 0.5f, 1}}, - {"RoyalPurple", {0.25f, 0.1f, 1}}, - {"RubineRed", {1, 0, 0.87f}}, - {"Salmon", {1, 0.47f, 0.62f}}, - {"SeaGreen", {0.31f, 1, 0.5f}}, - {"Sepia", {0.3f, 0, 0}}, - {"SkyBlue", {0.38f, 1, 0.88f}}, - {"SpringGreen", {0.74f, 1, 0.24f}}, - {"Tan", {0.86f, 0.58f, 0.44f}}, - {"TealBlue", {0.12f, 0.98f, 0.64f}}, - {"Thistle", {0.88f, 0.41f, 1}}, - {"Turquoise", {0.15f, 1, 0.8f}}, - {"Violet", {0.21f, 0.12f, 1}}, - {"VioletRed", {1, 0.19f, 1}}, - {"White", {1, 1, 1}}, - {"WildStrawberry", {1, 0.04f, 0.61f}}, - {"Yellow", {1, 1, 0}}, - {"YellowGreen", {0.56f, 1, 0.26f}}, - {"YellowOrange", {1, 0.58f, 0}} - }; - // binary search - int first=0, last=68-1; - while (first <= last) { - int mid = first+(last-first)/2; - int cmp = strcmp(constants[mid].name, c.c_str()); - if (cmp > 0) - last = mid-1; - else if (cmp < 0) - first = mid+1; - else { - rgb[0] = constants[mid].rgb[0]; - rgb[1] = constants[mid].rgb[1]; - rgb[2] = constants[mid].rgb[2]; - return true; - } - } - return false; -} - - -/** Reads a color statement from an input stream and converts it to RGB. - * A color statement has the following syntax: - * - * Currently, the following color models are supported: rgb, cmyk, hsb and gray. - * Examples: rgb 1 0.5 0, gray 0.5 - * @param[in] model if model != "" this value specifies the model, otherwise it's read from the stream - * @param[in] is stream to be read from - * @param[out] resulting RGB triple - * @return true if statement has successfully been read */ -static void read_color (string model, istream &is, vector &rgb) { - if (model.empty()) - is >> model; - if (model == "rgb") - read_floats(is, rgb); - else if (model == "cmyk") { - vector cmyk(4); - read_floats(is, cmyk); - cmyk_to_rgb(cmyk, rgb); - } - else if (model == "hsb") { - vector hsb(3); - read_floats(is, hsb); - hsb_to_rgb(hsb, rgb); - } - else if (model == "gray") - gray_to_rgb(read_float(is), rgb); - else if (!color_constant(model, rgb)) - throw SpecialException("unknown color statement"); - if (rgb[0] > 1 || rgb[1] > 1 || rgb[2] > 1) { - ostringstream oss; - oss << "invalid RGB value (" << rgb[0] << ',' << rgb[1] << ',' << rgb[2] << ')'; - throw SpecialException(oss.str()); - } -} - - -bool ColorSpecialHandler::process (const char *prefix, istream &is, SpecialActions *actions) { - vector rgb(3); - if (prefix && strcmp(prefix, "background") == 0) { - read_color("", is, rgb); - actions->setBgColor(rgb); - } - else { - string cmd; - is >> cmd; - if (cmd == "push") { // color push - read_color("", is, rgb); - _colorStack.push(rgb); - } - else if (cmd == "pop") { - if (!_colorStack.empty()) // color pop - _colorStack.pop(); - } - else { // color - read_color(cmd, is, rgb); - while (!_colorStack.empty()) - _colorStack.pop(); - _colorStack.push(rgb); - } - if (actions) { - if (_colorStack.empty()) - actions->setColor(Color::BLACK); - else - actions->setColor(_colorStack.top()); - } - } - return true; -} - - -const char** ColorSpecialHandler::prefixes () const { - static const char *pfx[] = {"color", 0}; - return pfx; -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/ColorSpecialHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/ColorSpecialHandler.h deleted file mode 100644 index 0e098631354..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/ColorSpecialHandler.h +++ /dev/null @@ -1,43 +0,0 @@ -/************************************************************************* -** ColorSpecialHandler.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef COLORSPECIALHANDLER_H -#define COLORSPECIALHANDLER_H - -#include -#include -#include "SpecialHandler.h" - - -class ColorSpecialHandler : public SpecialHandler -{ - typedef std::vector RGB; - - public: - bool process (const char *prefix, std::istream &is, SpecialActions *actions); - const char* name () const {return "color";} - const char* info () const {return "complete support of color specials";} - const char** prefixes () const; - - private: - std::stack _colorStack; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CommandLine.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CommandLine.cpp deleted file mode 100644 index ccba1e74f08..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CommandLine.cpp +++ /dev/null @@ -1,319 +0,0 @@ -// This file was automatically generated by opt2cpp. -// It is part of the dvisvgm package and published under the terms -// of the GNU General Public License version 3 or later. -// See file COPYING for further details. -// (C) 2009-2011 Martin Gieseking - -#include -#include -#include -#include "InputReader.h" -#include "CommandLine.h" - -using namespace std; - -const CmdLineParserBase::Option CommandLine::_options[] = { - {'b', "bbox", 'r', new OptionHandlerImpl(&CommandLine::handle_bbox)}, - {'C', "cache", 'o', new OptionHandlerImpl(&CommandLine::handle_cache)}, - {'\0', "color", 0, new OptionHandlerImpl(&CommandLine::handle_color)}, - {'e', "exact", 0, new OptionHandlerImpl(&CommandLine::handle_exact)}, - {'h', "help", 0, new OptionHandlerImpl(&CommandLine::handle_help)}, - {'\0', "keep", 0, new OptionHandlerImpl(&CommandLine::handle_keep)}, -#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) - {'\0', "libgs", 'r', new OptionHandlerImpl(&CommandLine::handle_libgs)}, -#endif - {'l', "list-specials", 0, new OptionHandlerImpl(&CommandLine::handle_list_specials)}, - {'M', "mag", 'r', new OptionHandlerImpl(&CommandLine::handle_mag)}, - {'m', "map-file", 'r', new OptionHandlerImpl(&CommandLine::handle_map_file)}, - {'n', "no-fonts", 'o', new OptionHandlerImpl(&CommandLine::handle_no_fonts)}, - {'\0', "no-mktexmf", 0, new OptionHandlerImpl(&CommandLine::handle_no_mktexmf)}, - {'S', "no-specials", 'o', new OptionHandlerImpl(&CommandLine::handle_no_specials)}, - {'\0', "no-styles", 0, new OptionHandlerImpl(&CommandLine::handle_no_styles)}, - {'o', "output", 'r', new OptionHandlerImpl(&CommandLine::handle_output)}, - {'p', "page", 'r', new OptionHandlerImpl(&CommandLine::handle_page)}, - {'P', "progress", 'o', new OptionHandlerImpl(&CommandLine::handle_progress)}, - {'r', "rotate", 'r', new OptionHandlerImpl(&CommandLine::handle_rotate)}, - {'c', "scale", 'r', new OptionHandlerImpl(&CommandLine::handle_scale)}, - {'s', "stdout", 0, new OptionHandlerImpl(&CommandLine::handle_stdout)}, - {'a', "trace-all", 'o', new OptionHandlerImpl(&CommandLine::handle_trace_all)}, - {'T', "transform", 'r', new OptionHandlerImpl(&CommandLine::handle_transform)}, - {'t', "translate", 'r', new OptionHandlerImpl(&CommandLine::handle_translate)}, - {'v', "verbosity", 'r', new OptionHandlerImpl(&CommandLine::handle_verbosity)}, - {'V', "version", 'o', new OptionHandlerImpl(&CommandLine::handle_version)}, - {'z', "zip", 'o', new OptionHandlerImpl(&CommandLine::handle_zip)}, - {0, 0, 0, 0} -}; - -void CommandLine::init () { - CmdLineParserBase::init(); - _bbox_given = false; - _cache_given = false; - _color_given = false; - _exact_given = false; - _help_given = false; - _keep_given = false; -#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) - _libgs_given = false; -#endif - _list_specials_given = false; - _mag_given = false; - _map_file_given = false; - _no_fonts_given = false; - _no_mktexmf_given = false; - _no_specials_given = false; - _no_styles_given = false; - _output_given = false; - _page_given = false; - _progress_given = false; - _rotate_given = false; - _scale_given = false; - _stdout_given = false; - _trace_all_given = false; - _transform_given = false; - _translate_given = false; - _verbosity_given = false; - _version_given = false; - _zip_given = false; - - _bbox_arg = "min"; - _cache_arg.clear(); -#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) - _libgs_arg.clear(); -#endif - _mag_arg = 4; - _map_file_arg.clear(); - _no_fonts_arg = 0; - _no_specials_arg.clear(); - _output_arg.clear(); - _page_arg = "1"; - _progress_arg = 0.5; - _rotate_arg = 0; - _scale_arg.clear(); - _trace_all_arg = false; - _transform_arg.clear(); - _translate_arg.clear(); - _verbosity_arg = 7; - _version_arg = false; - _zip_arg = 9; -} - -void CommandLine::help () const { - puts("This program converts DVI files, as created by TeX/LaTeX, to\nthe XML-based scalable vector graphics format SVG.\n\nUsage: dvisvgm [options] dvifile\n"); - puts("Input options:"); - puts(" -p, --page=ranges choose pages to convert [1]"); - puts(" -m, --map-file=[+]filename set [additional] font map file name"); - puts("\nSVG output options:"); - puts(" -b, --bbox=size set size of bounding box [min]"); - puts(" -o, --output=pattern set name pattern of output files"); - puts(" -s, --stdout write SVG output to stdout"); - puts(" -n, --no-fonts[=variant] draw glyphs by using path elements [0]"); - puts(" --no-styles don't use styles to reference fonts"); - puts(" -z, --zip[=level] create compressed .svgz file [9]"); - puts("\nSVG transformations:"); - puts(" -r, --rotate=angle rotate page content clockwise"); - puts(" -c, --scale=sx[,sy] scale page content"); - puts(" -t, --translate=tx[,ty] shift page content"); - puts(" -T, --transform=commands transform page content"); - puts("\nProcessing options:"); - puts(" -C, --cache[=dir] set/print path of cache directory"); - puts(" -e, --exact compute exact glyph boxes"); - puts(" --keep keep temporary files"); -#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) - puts(" --libgs=filename set name of Ghostscript shared library"); -#endif - puts(" -M, --mag=factor magnification of Metafont output [4]"); - puts(" --no-mktexmf don't try to create missing fonts"); - puts(" -S, --no-specials[=prefixes] don't process [selected] specials"); - puts(" -a, --trace-all[=retrace] trace all glyphs of bitmap fonts [no]"); - puts("\nMessage options:"); - puts(" --color colorize messages"); - puts(" -h, --help print this help and exit"); - puts(" -l, --list-specials print supported special sets and exit"); - puts(" -P, --progress[=delay] enable progess indicator [0.5]"); - puts(" -v, --verbosity=level set verbosity level (0-7) [7]"); - puts(" -V, --version[=extended] print version and exit [no]"); -} - - -void CommandLine::handle_bbox(InputReader &ir, const Option &opt, bool longopt) { - if (getStringArg(ir, opt, longopt, _bbox_arg)) - _bbox_given = true; -} - - -void CommandLine::handle_cache(InputReader &ir, const Option &opt, bool longopt) { - if (ir.eof() || getStringArg(ir, opt, longopt, _cache_arg)) - _cache_given = true; -} - - -void CommandLine::handle_color(InputReader &ir, const Option &opt, bool longopt) { - _color_given = true; -} - - -void CommandLine::handle_exact(InputReader &ir, const Option &opt, bool longopt) { - _exact_given = true; -} - - -void CommandLine::handle_help(InputReader &ir, const Option &opt, bool longopt) { - _help_given = true; -} - - -void CommandLine::handle_keep(InputReader &ir, const Option &opt, bool longopt) { - _keep_given = true; -} - - -#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) -void CommandLine::handle_libgs(InputReader &ir, const Option &opt, bool longopt) { - if (getStringArg(ir, opt, longopt, _libgs_arg)) - _libgs_given = true; -} -#endif - - -void CommandLine::handle_list_specials(InputReader &ir, const Option &opt, bool longopt) { - _list_specials_given = true; -} - - -void CommandLine::handle_mag(InputReader &ir, const Option &opt, bool longopt) { - if (getDoubleArg(ir, opt, longopt, _mag_arg)) - _mag_given = true; -} - - -void CommandLine::handle_map_file(InputReader &ir, const Option &opt, bool longopt) { - if (getStringArg(ir, opt, longopt, _map_file_arg)) - _map_file_given = true; -} - - -void CommandLine::handle_no_fonts(InputReader &ir, const Option &opt, bool longopt) { - if (ir.eof() || getIntArg(ir, opt, longopt, _no_fonts_arg)) - _no_fonts_given = true; -} - - -void CommandLine::handle_no_mktexmf(InputReader &ir, const Option &opt, bool longopt) { - _no_mktexmf_given = true; -} - - -void CommandLine::handle_no_specials(InputReader &ir, const Option &opt, bool longopt) { - if (ir.eof() || getStringArg(ir, opt, longopt, _no_specials_arg)) - _no_specials_given = true; -} - - -void CommandLine::handle_no_styles(InputReader &ir, const Option &opt, bool longopt) { - _no_styles_given = true; -} - - -void CommandLine::handle_output(InputReader &ir, const Option &opt, bool longopt) { - if (getStringArg(ir, opt, longopt, _output_arg)) - _output_given = true; -} - - -void CommandLine::handle_page(InputReader &ir, const Option &opt, bool longopt) { - if (getStringArg(ir, opt, longopt, _page_arg)) - _page_given = true; -} - - -void CommandLine::handle_progress(InputReader &ir, const Option &opt, bool longopt) { - if (ir.eof() || getDoubleArg(ir, opt, longopt, _progress_arg)) - _progress_given = true; -} - - -void CommandLine::handle_rotate(InputReader &ir, const Option &opt, bool longopt) { - if (getDoubleArg(ir, opt, longopt, _rotate_arg)) - _rotate_given = true; -} - - -void CommandLine::handle_scale(InputReader &ir, const Option &opt, bool longopt) { - if (getStringArg(ir, opt, longopt, _scale_arg)) - _scale_given = true; -} - - -void CommandLine::handle_stdout(InputReader &ir, const Option &opt, bool longopt) { - _stdout_given = true; -} - - -void CommandLine::handle_trace_all(InputReader &ir, const Option &opt, bool longopt) { - if (ir.eof() || getBoolArg(ir, opt, longopt, _trace_all_arg)) - _trace_all_given = true; -} - - -void CommandLine::handle_transform(InputReader &ir, const Option &opt, bool longopt) { - if (getStringArg(ir, opt, longopt, _transform_arg)) - _transform_given = true; -} - - -void CommandLine::handle_translate(InputReader &ir, const Option &opt, bool longopt) { - if (getStringArg(ir, opt, longopt, _translate_arg)) - _translate_given = true; -} - - -void CommandLine::handle_verbosity(InputReader &ir, const Option &opt, bool longopt) { - if (getUIntArg(ir, opt, longopt, _verbosity_arg)) - _verbosity_given = true; -} - - -void CommandLine::handle_version(InputReader &ir, const Option &opt, bool longopt) { - if (ir.eof() || getBoolArg(ir, opt, longopt, _version_arg)) - _version_given = true; -} - - -void CommandLine::handle_zip(InputReader &ir, const Option &opt, bool longopt) { - if (ir.eof() || getIntArg(ir, opt, longopt, _zip_arg)) - _zip_given = true; -} - - -void CommandLine::status () const { - cout << 'b'<< setw(20) << "bbox " << bbox_given() << setw(10) << bbox_arg() << endl; - cout << 'C'<< setw(20) << "cache " << cache_given() << setw(10) << cache_arg() << endl; - cout << ' '<< setw(20) << "color " << color_given() << endl; - cout << 'e'<< setw(20) << "exact " << exact_given() << endl; - cout << 'h'<< setw(20) << "help " << help_given() << endl; - cout << ' '<< setw(20) << "keep " << keep_given() << endl; -#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) - cout << ' '<< setw(20) << "libgs " << libgs_given() << setw(10) << libgs_arg() << endl; -#endif - cout << 'l'<< setw(20) << "list-specials " << list_specials_given() << endl; - cout << 'M'<< setw(20) << "mag " << mag_given() << setw(10) << mag_arg() << endl; - cout << 'm'<< setw(20) << "map-file " << map_file_given() << setw(10) << map_file_arg() << endl; - cout << 'n'<< setw(20) << "no-fonts " << no_fonts_given() << setw(10) << no_fonts_arg() << endl; - cout << ' '<< setw(20) << "no-mktexmf " << no_mktexmf_given() << endl; - cout << 'S'<< setw(20) << "no-specials " << no_specials_given() << setw(10) << no_specials_arg() << endl; - cout << ' '<< setw(20) << "no-styles " << no_styles_given() << endl; - cout << 'o'<< setw(20) << "output " << output_given() << setw(10) << output_arg() << endl; - cout << 'p'<< setw(20) << "page " << page_given() << setw(10) << page_arg() << endl; - cout << 'P'<< setw(20) << "progress " << progress_given() << setw(10) << progress_arg() << endl; - cout << 'r'<< setw(20) << "rotate " << rotate_given() << setw(10) << rotate_arg() << endl; - cout << 'c'<< setw(20) << "scale " << scale_given() << setw(10) << scale_arg() << endl; - cout << 's'<< setw(20) << "stdout " << stdout_given() << endl; - cout << 'a'<< setw(20) << "trace-all " << trace_all_given() << setw(10) << trace_all_arg() << endl; - cout << 'T'<< setw(20) << "transform " << transform_given() << setw(10) << transform_arg() << endl; - cout << 't'<< setw(20) << "translate " << translate_given() << setw(10) << translate_arg() << endl; - cout << 'v'<< setw(20) << "verbosity " << verbosity_given() << setw(10) << verbosity_arg() << endl; - cout << 'V'<< setw(20) << "version " << version_given() << setw(10) << version_arg() << endl; - cout << 'z'<< setw(20) << "zip " << zip_given() << setw(10) << zip_arg() << endl; - CmdLineParserBase::status(); -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CommandLine.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CommandLine.h deleted file mode 100644 index 5d1eb7bd078..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/CommandLine.h +++ /dev/null @@ -1,151 +0,0 @@ -// This file was automatically generated by opt2cpp. -// It is part of the dvisvgm package and published under the terms -// of the GNU General Public License version 3 or later. -// See file COPYING for further details. -// (C) 2009-2011 Martin Gieseking - -#ifndef COMMANDLINE_H -#define COMMANDLINE_H - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include "CmdLineParserBase.h" - -class CommandLine : public CmdLineParserBase -{ - public: - CommandLine () {init();} - CommandLine (int argc, char **argv, bool printErrors) {parse(argc, argv, printErrors);} - void help () const; - void status () const; - bool page_given () const {return _page_given;} - const std::string& page_arg () const {return _page_arg;} - bool map_file_given () const {return _map_file_given;} - const std::string& map_file_arg () const {return _map_file_arg;} - bool bbox_given () const {return _bbox_given;} - const std::string& bbox_arg () const {return _bbox_arg;} - bool output_given () const {return _output_given;} - const std::string& output_arg () const {return _output_arg;} - bool stdout_given () const {return _stdout_given;} - bool no_fonts_given () const {return _no_fonts_given;} - int no_fonts_arg () const {return _no_fonts_arg;} - bool no_styles_given () const {return _no_styles_given;} - bool zip_given () const {return _zip_given;} - int zip_arg () const {return _zip_arg;} - bool rotate_given () const {return _rotate_given;} - double rotate_arg () const {return _rotate_arg;} - bool scale_given () const {return _scale_given;} - const std::string& scale_arg () const {return _scale_arg;} - bool translate_given () const {return _translate_given;} - const std::string& translate_arg () const {return _translate_arg;} - bool transform_given () const {return _transform_given;} - const std::string& transform_arg () const {return _transform_arg;} - bool cache_given () const {return _cache_given;} - const std::string& cache_arg () const {return _cache_arg;} - bool exact_given () const {return _exact_given;} - bool keep_given () const {return _keep_given;} -#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) - bool libgs_given () const {return _libgs_given;} - const std::string& libgs_arg () const {return _libgs_arg;} -#endif - bool mag_given () const {return _mag_given;} - double mag_arg () const {return _mag_arg;} - bool no_mktexmf_given () const {return _no_mktexmf_given;} - bool no_specials_given () const {return _no_specials_given;} - const std::string& no_specials_arg () const {return _no_specials_arg;} - bool trace_all_given () const {return _trace_all_given;} - bool trace_all_arg () const {return _trace_all_arg;} - bool color_given () const {return _color_given;} - bool help_given () const {return _help_given;} - bool list_specials_given () const {return _list_specials_given;} - bool progress_given () const {return _progress_given;} - double progress_arg () const {return _progress_arg;} - bool verbosity_given () const {return _verbosity_given;} - unsigned verbosity_arg () const {return _verbosity_arg;} - bool version_given () const {return _version_given;} - bool version_arg () const {return _version_arg;} - - protected: - void init (); - const CmdLineParserBase::Option* options () const {return _options;} - void handle_page (InputReader &ir, const Option &opt, bool longopt); - void handle_map_file (InputReader &ir, const Option &opt, bool longopt); - void handle_bbox (InputReader &ir, const Option &opt, bool longopt); - void handle_output (InputReader &ir, const Option &opt, bool longopt); - void handle_stdout (InputReader &ir, const Option &opt, bool longopt); - void handle_no_fonts (InputReader &ir, const Option &opt, bool longopt); - void handle_no_styles (InputReader &ir, const Option &opt, bool longopt); - void handle_zip (InputReader &ir, const Option &opt, bool longopt); - void handle_rotate (InputReader &ir, const Option &opt, bool longopt); - void handle_scale (InputReader &ir, const Option &opt, bool longopt); - void handle_translate (InputReader &ir, const Option &opt, bool longopt); - void handle_transform (InputReader &ir, const Option &opt, bool longopt); - void handle_cache (InputReader &ir, const Option &opt, bool longopt); - void handle_exact (InputReader &ir, const Option &opt, bool longopt); - void handle_keep (InputReader &ir, const Option &opt, bool longopt); -#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) - void handle_libgs (InputReader &ir, const Option &opt, bool longopt); -#endif - void handle_mag (InputReader &ir, const Option &opt, bool longopt); - void handle_no_mktexmf (InputReader &ir, const Option &opt, bool longopt); - void handle_no_specials (InputReader &ir, const Option &opt, bool longopt); - void handle_trace_all (InputReader &ir, const Option &opt, bool longopt); - void handle_color (InputReader &ir, const Option &opt, bool longopt); - void handle_help (InputReader &ir, const Option &opt, bool longopt); - void handle_list_specials (InputReader &ir, const Option &opt, bool longopt); - void handle_progress (InputReader &ir, const Option &opt, bool longopt); - void handle_verbosity (InputReader &ir, const Option &opt, bool longopt); - void handle_version (InputReader &ir, const Option &opt, bool longopt); - - private: - static const CmdLineParserBase::Option _options[]; - bool _page_given; - std::string _page_arg; - bool _map_file_given; - std::string _map_file_arg; - bool _bbox_given; - std::string _bbox_arg; - bool _output_given; - std::string _output_arg; - bool _stdout_given; - bool _no_fonts_given; - int _no_fonts_arg; - bool _no_styles_given; - bool _zip_given; - int _zip_arg; - bool _rotate_given; - double _rotate_arg; - bool _scale_given; - std::string _scale_arg; - bool _translate_given; - std::string _translate_arg; - bool _transform_given; - std::string _transform_arg; - bool _cache_given; - std::string _cache_arg; - bool _exact_given; - bool _keep_given; -#if !defined(HAVE_LIBGS) && !defined(DISABLE_GS) - bool _libgs_given; - std::string _libgs_arg; -#endif - bool _mag_given; - double _mag_arg; - bool _no_mktexmf_given; - bool _no_specials_given; - std::string _no_specials_arg; - bool _trace_all_given; - bool _trace_all_arg; - bool _color_given; - bool _help_given; - bool _list_specials_given; - bool _progress_given; - double _progress_arg; - bool _verbosity_given; - unsigned _verbosity_arg; - bool _version_given; - bool _version_arg; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DLLoader.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DLLoader.cpp deleted file mode 100644 index 8d6c48c4c85..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DLLoader.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/************************************************************************* -** DLLoader.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include "DLLoader.h" - - -DLLoader::DLLoader (const char *dlname) { -#ifdef __WIN32__ - _handle = LoadLibrary(dlname); -#else - _handle = dlopen(dlname, RTLD_LAZY); -#endif -} - - -DLLoader::~DLLoader () { - if (_handle) { -#ifdef __WIN32__ - FreeLibrary(_handle); -#else - dlclose(_handle); -#endif - } -} - - -void* DLLoader::loadFunction (const char *name) { - if (_handle) { -#ifdef __WIN32__ - return (void*)GetProcAddress(_handle, name); -#else - return dlsym(_handle, name); -#endif - } - return 0; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DLLoader.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DLLoader.h deleted file mode 100644 index c68533e3486..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DLLoader.h +++ /dev/null @@ -1,52 +0,0 @@ -/************************************************************************* -** DLLoader.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef DLLOADER_H -#define DLLOADER_H - -#ifdef __WIN32__ - #undef NOMINMAX - #define NOMINMAX 1 - #include -#else - #include -#endif - - -class DLLoader -{ - public: - DLLoader (const char *dlname); - virtual ~DLLoader (); - bool loaded () const {return _handle != 0;} - - protected: - DLLoader () : _handle(0) {} - void* loadFunction (const char *name); - - private: -#ifdef __WIN32__ - HINSTANCE _handle; -#else - void *_handle; -#endif -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIActions.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIActions.cpp deleted file mode 100644 index 355a59efaba..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIActions.cpp +++ /dev/null @@ -1,26 +0,0 @@ -/************************************************************************* -** DVIActions.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include "DVIActions.h" - -const double DVIActions::BP = 72.0/72.27; -const double DVIActions::IN = 1.0/72.27; -const double DVIActions::CM = 2.54*IN; -const double DVIActions::MM = 25.4*IN; diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIActions.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIActions.h deleted file mode 100644 index 42ae3330b07..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIActions.h +++ /dev/null @@ -1,56 +0,0 @@ -/************************************************************************* -** DVIActions.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef DVIACTIONS_H -#define DVIACTIONS_H - -#include -#include "Message.h" -#include "types.h" - -class BoundingBox; -class Font; -class SpecialManager; - - -struct DVIActions -{ - static const double BP; - static const double IN; - static const double CM; - static const double MM; - virtual ~DVIActions () {} - virtual void setChar (double x, double y, unsigned c, const Font *f) {} - virtual void setRule (double x, double y, double height, double width) {} - virtual void moveToX (double x) {} - virtual void moveToY (double y) {} - virtual void defineFont (int num, const Font *font) {} - virtual void setFont (int num, const Font *font) {} - virtual void special (const std::string &s) {} - virtual void preamble (const std::string &cmt) {} - virtual void postamble () {} - virtual void beginPage (unsigned n, Int32 *c) {} - virtual void endPage () {} - virtual BoundingBox& bbox () =0; - virtual const SpecialManager* setProcessSpecials (const char *ignorelist) {return 0;} - virtual void progress (size_t current, size_t total, const char *id=0) {} -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIReader.cpp deleted file mode 100644 index b4ba8bc00d6..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIReader.cpp +++ /dev/null @@ -1,680 +0,0 @@ -/************************************************************************* -** DVIReader.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include -#include "types.h" -#include "DVIActions.h" -#include "DVIReader.h" -#include "Font.h" -#include "FontManager.h" -#include "Message.h" -#include "SignalHandler.h" -#include "VectorStream.h" -#include "macros.h" - -using namespace std; - -bool DVIReader::COMPUTE_PAGE_LENGTH = false; - - -DVIReader::DVIReader (istream &is, DVIActions *a) : StreamReader(is), _actions(a) -{ - _inPage = false; - _pageHeight = _pageWidth = 0; - _scaleFactor = 0.0; - _tx = _ty = 0; // no cursor translation - _prevYPos = numeric_limits::min(); - _inPostamble = false; - _totalPages = 0; // we don't know the correct value yet - _currFontNum = 0; - _currPageNum = 0; - _pageLength = 0; - _pagePos = 0; -} - - -DVIActions* DVIReader::replaceActions (DVIActions *a) { - DVIActions *prev_actions = _actions; - _actions = a; - return prev_actions; -} - - -/** Evaluates the next DVI command, and computes the corresponding handler. - * @param[in] compute_size if true, the size of variable-length parameters is computed - * @param[out] handler handler for current DVI command - * @param[out] number of parameter bytes - * @param[out] param the handler must be called with this parameter - * @return opcode of current DVI command */ -int DVIReader::evalCommand (bool compute_size, CommandHandler &handler, int &length, int ¶m) { - struct DVICommand { - CommandHandler handler; - int length; // number of parameter bytes - }; - - /* Each cmdFOO command reads the necessary number of bytes from the stream, so executeCommand - doesn't need to know the exact DVI command format. Some cmdFOO methods are used for multiple - DVI commands because they only differ in length of their parameters. */ - static const DVICommand commands[] = { - {&DVIReader::cmdSetChar, 1}, {&DVIReader::cmdSetChar, 2}, {&DVIReader::cmdSetChar, 3}, {&DVIReader::cmdSetChar, 4}, // 128-131 - {&DVIReader::cmdSetRule, 8}, // 132 - {&DVIReader::cmdPutChar, 1}, {&DVIReader::cmdPutChar, 2}, {&DVIReader::cmdPutChar, 3}, {&DVIReader::cmdPutChar, 4}, // 133-136 - {&DVIReader::cmdPutRule, 8}, // 137 - {&DVIReader::cmdNop, 0}, // 138 - {&DVIReader::cmdBop, 44}, {&DVIReader::cmdEop, 0}, // 139-140 - {&DVIReader::cmdPush, 0}, {&DVIReader::cmdPop, 0}, // 141-142 - {&DVIReader::cmdRight, 1}, {&DVIReader::cmdRight, 2}, {&DVIReader::cmdRight, 3}, {&DVIReader::cmdRight, 4}, // 143-146 - {&DVIReader::cmdW0, 0}, // 147 - {&DVIReader::cmdW, 1}, {&DVIReader::cmdW, 2}, {&DVIReader::cmdW, 3}, {&DVIReader::cmdW, 4}, // 148-151 - {&DVIReader::cmdX0, 0}, // 152 - {&DVIReader::cmdX, 1}, {&DVIReader::cmdX, 2}, {&DVIReader::cmdX, 3}, {&DVIReader::cmdX, 4}, // 153-156 - {&DVIReader::cmdDown, 1}, {&DVIReader::cmdDown, 2}, {&DVIReader::cmdDown, 3}, {&DVIReader::cmdDown, 4}, // 157-160 - {&DVIReader::cmdY0, 0}, // 161 - {&DVIReader::cmdY, 1}, {&DVIReader::cmdY, 2}, {&DVIReader::cmdY, 3}, {&DVIReader::cmdY, 4}, // 162-165 - {&DVIReader::cmdZ0, 0}, // 166 - {&DVIReader::cmdZ, 1}, {&DVIReader::cmdZ, 2}, {&DVIReader::cmdZ, 3}, {&DVIReader::cmdZ, 4}, // 167-170 - {&DVIReader::cmdFontNum, 1}, {&DVIReader::cmdFontNum, 2}, {&DVIReader::cmdFontNum, 3}, {&DVIReader::cmdFontNum, 4}, // 235-238 - {&DVIReader::cmdXXX, 1}, {&DVIReader::cmdXXX, 2}, {&DVIReader::cmdXXX, 3}, {&DVIReader::cmdXXX, 4}, // 239-242 - {&DVIReader::cmdFontDef, 1}, {&DVIReader::cmdFontDef, 2}, {&DVIReader::cmdFontDef, 3}, {&DVIReader::cmdFontDef, 4}, // 243-246 - {&DVIReader::cmdPre, 0}, {&DVIReader::cmdPost, 0}, {&DVIReader::cmdPostPost, 0} // 247-249 - }; - - const int opcode = in().get(); - if (!in() || opcode < 0) // at end of file - throw InvalidDVIFileException("invalid file"); - - param = -1; - if (opcode >= 0 && opcode <= 127) { - handler = &DVIReader::cmdSetChar0; - length = 0; - param = opcode; - } - else if (opcode >= 171 && opcode <= 234) { - handler = &DVIReader::cmdFontNum0; - length = 0; - param = opcode-171; - } - else if (opcode >= 250) { - ostringstream oss; - oss << "undefined DVI command (opcode " << opcode << ')'; - throw DVIException(oss.str()); - } - else { - const int offset = opcode <= 170 ? 128 : 235-(170-128+1); - handler = commands[opcode-offset].handler; - if (!compute_size) - length = commands[opcode-offset].length; - else { - if (opcode >= 239 && opcode <= 242) { // specials - int len = opcode-238; - UInt32 bytes = readUnsigned(len); - in().seekg(-len, ios_base::cur); - length = len+bytes; - } - else if (opcode >= 243 && opcode <= 246) { // fontdefs - int len = opcode-242; - len += 12; - in().seekg(len, ios_base::cur); // skip fontnum, checksum, ssize, dsize - UInt32 bytes = readUnsigned(1); // length of font path - bytes += readUnsigned(1); // length of font name - in().seekg(-len-2, ios_base::cur); - length = len+bytes; - } - else - length = commands[opcode-offset].length; - } - } - if (param < 0) - param = length; - return opcode; -} - - -/** Reads a single DVI command from the current position of the input stream and calls the - * corresponding cmdFOO method. - * @return opcode of the executed command */ -int DVIReader::executeCommand () { - SignalHandler::instance().check(); - CommandHandler handler; - int len; // number of parameter bytes - int param; // parameter of handler - streampos pos = in().tellg(); - int opcode = evalCommand(false, handler, len, param); - (this->*handler)(param); - if (_currPos.v+_ty != _prevYPos) { - _tx = _ty = 0; - _prevYPos = _currPos.v; - } - if (COMPUTE_PAGE_LENGTH && _inPage && _actions) { - // ensure progress() is called at 0% - if (opcode == 139) // bop? - _actions->progress(0, _pageLength); - // ensure progress() is called at 100% - if (in().peek() == 140) // eop reached? - _pagePos = _pageLength; - else - _pagePos += in().tellg()-pos; - _actions->progress(_pagePos, _pageLength); - } - return opcode; -} - - -/** Executes all DVI commands read from the input stream. */ -void DVIReader::executeAll () { - int opcode = 0; - while (!in().eof() && opcode >= 0) { - try { - opcode = executeCommand(); - } - catch (const InvalidDVIFileException &e) { - // end of stream reached - opcode = -1; - } - } -} - - -#if 0 -/** Executes all DVI commands from the preamble to postpost. */ -bool DVIReader::executeDocument () { - in().clear(); // reset all status bits - if (!in()) - return false; - in().seekg(0); // move file pointer to first byte of the input stream - while (!in().eof() && executeCommand() != 249); // stop reading after postpost (249) - return true; -} - -bool DVIReader::executeAllPages () { - in().clear(); // reset all status bits - if (!in()) - return false; - in().seekg(0); // move file pointer to first byte of the input stream - while (!in().eof() && executeCommand() != 248); // stop reading when postamble (248) is reached - return true; -} -#endif - - -/** Reads and executes the commands of a single page. - * This methods stops reading after the page's eop command has been executed. - * @param[in] n number of page to be executed - * @returns true if page was read successfully */ -bool DVIReader::executePage (unsigned n) { - in().clear(); // reset all status bits - if (!in()) - throw DVIException("invalid DVI file"); - in().seekg(-1, ios_base::end); // stream pointer to last byte - while (in().peek() == 223) - in().seekg(-1, ios_base::cur); // skip fill bytes - in().seekg(-4, ios_base::cur); // now on first byte of q (pointer to begin of postamble) - UInt32 q = readUnsigned(4); // pointer to begin of postamble - in().seekg(q, ios_base::beg); // now on begin of postamble - if (executeCommand() != 248) // execute postamble command but not the fontdefs - return false; - if (n < 1 || n > _totalPages) - return false; - in().seekg(_prevBop, ios_base::beg); // now on last bop - _inPostamble = false; // we jumped out of the postamble - unsigned pageCount = _totalPages; - for (; pageCount > n && _prevBop > 0; pageCount--) { - in().seekg(41, ios_base::cur); // skip bop and 10*4 \count bytes => now on pointer to prev bop - _prevBop = readSigned(4); - in().seekg(_prevBop, ios_base::beg); - } - _currPageNum = n; - while (pageCount == n && executeCommand() != 140); // 140 == eop - return true; -} - - -bool DVIReader::executePages (unsigned first, unsigned last) { - in().clear(); - if (!in()) - throw DVIException("invalid DVI file"); - if (first > last) - swap(first, last); - in().seekg(-1, ios_base::end); // stream pointer to last byte - while (in().peek() == 223) - in().seekg(-1, ios_base::cur); // skip fill bytes - in().seekg(-4, ios_base::cur); // now on first byte of q (pointer to begin of postamble) - UInt32 q = readUnsigned(4); // pointer to begin of postamble - in().seekg(q, ios_base::beg); // now on begin of postamble - if (executeCommand() != 248) // execute postamble command but not the fontdefs - return false; - first = max(1u, min(first, _totalPages)); - last = max(1u, min(last, _totalPages)); - in().seekg(_prevBop, ios_base::beg); // now on last bop - _inPostamble = false; // we jumped out of the postamble - unsigned count = _totalPages; - for (; count > first && _prevBop > 0; count--) { - in().seekg(41, ios_base::cur); // skip bop and 10*4 \count bytes => now on pointer to prev bop - _prevBop = readSigned(4); - in().seekg(_prevBop, ios_base::beg); - } - while (first <= last) { - _currPageNum = first++; - while (executeCommand () != 140); // 140 == eop - } - return true; -} - - -void DVIReader::executePreamble () { - in().clear(); - if (!in()) - throw DVIException("invalid DVI file"); - in().seekg(0, ios_base::beg); - if (in().get() != 247) - throw DVIException("invalid DVI file"); - cmdPre(0); -} - - -/** Reads and executes the commands of the postamble. */ -void DVIReader::executePostamble () { - in().clear(); // reset all status bits - if (!in()) - throw DVIException("invalid DVI file"); - in().seekg(-1, ios_base::end); // stream pointer to last byte - while (in().peek() == 223) - in().seekg(-1, ios_base::cur); // skip fill bytes - - in().seekg(-4, ios_base::cur); // now on first byte of q (pointer to begin of postamble) - UInt32 q = readUnsigned(4); // pointer to begin of postamble - in().seekg(q, ios_base::beg); // now on begin of postamble - while (executeCommand() != 249); // read all commands until postpost (= 249) is reached -} - - -/** Returns the current x coordinate in TeX point units. - * This is the horizontal position where the next output would be placed. */ -double DVIReader::getXPos () const { - return _currPos.h+_tx; -} - - -/** Returns the current y coordinate in TeX point units. - * This is the vertical position where the next output would be placed. */ -double DVIReader::getYPos () const { - return _currPos.v+_ty; -} - - -double DVIReader::getPageHeight () const { - return _pageHeight; -} - - -double DVIReader::getPageWidth () const { - return _pageWidth; -} - -///////////////////////////////////// - -/** Reads and executes DVI preamble command. */ -void DVIReader::cmdPre (int) { - UInt32 i = readUnsigned(1); // identification number (should be 2) - UInt32 num = readUnsigned(4); // numerator units of measurement - UInt32 den = readUnsigned(4); // denominator units of measurement - _mag = readUnsigned(4); // magnification - UInt32 k = readUnsigned(1); // length of following comment - string cmt = readString(k); // comment - if (i != 2) { - ostringstream oss; - oss << "DVI format version " << i << " not supported"; - throw DVIException(oss.str()); - } - // 1 dviunit * num/den == multiples of 0.0000001m - // 1 dviunit * _scaleFactor: length of 1 dviunit in TeX points * _mag/1000 - _scaleFactor = num/25400000.0*7227.0/den*_mag/1000.0; - if (_actions) - _actions->preamble(cmt); -} - - -/** Reads and executes DVI postamble command. */ -void DVIReader::cmdPost (int) { - _prevBop = readUnsigned(4); // pointer to previous bop - UInt32 num = readUnsigned(4); - UInt32 den = readUnsigned(4); - _mag = readUnsigned(4); - _pageHeight = readUnsigned(4); // height of tallest page in dvi units - _pageWidth = readUnsigned(4); // width of widest page in dvi units - readUnsigned(2); // max. stack depth - _totalPages = readUnsigned(2); // total number of pages - // 1 dviunit * num/den == multiples of 0.0000001m - // 1 dviunit * _scaleFactor: length of 1 dviunit in TeX points * _mag/1000 - _scaleFactor = num/25400000.0*7227.0/den*_mag/1000.0; - _pageHeight *= _scaleFactor; // to pt units - _pageWidth *= _scaleFactor; - _inPostamble = true; - if (_actions) - _actions->postamble(); -} - - -/** Reads and executes DVI postpost command. */ -void DVIReader::cmdPostPost (int) { - _inPostamble = false; - readUnsigned(4); // pointer to begin of postamble - UInt32 i = readUnsigned(1); // identification byte (should be 2) - if (i == 2) - while (readUnsigned(1) == 223); // skip fill bytes (223), eof bit should be set now - else - throw DVIException("invalid identification value in postpost"); -} - - -/** Reads and executes Begin-Of-Page command. */ -void DVIReader::cmdBop (int) { - Int32 c[10]; - for (int i=0; i < 10; i++) - c[i] = readSigned(4); - readSigned(4); // pointer to peceeding bop (-1 in case of first page) - _currPos.reset(); // set all DVI registers to 0 - while (!_posStack.empty()) - _posStack.pop(); - _currFontNum = 0; - _inPage = true; - _pageLength = 0; - _pagePos = 0; - if (COMPUTE_PAGE_LENGTH) { - // compute number of bytes in current page - int length, param; - CommandHandler handler; - // read all commands until eop is found - while (evalCommand(true, handler, length, param) != 140) { - in().seekg(length, ios_base::cur); - _pageLength += length+1; // parameter length + opcode length (1 byte) - } - ++_pageLength; // add length of eop command (1 byte) - in().seekg(-int(_pageLength), ios_base::cur); // go back to first command following bop - _pageLength += 45; // add length of bop command - } - beginPage(_currPageNum, c); - if (_actions) - _actions->beginPage(_currPageNum, c); -} - - -/** Reads and executes End-Of-Page command. */ -void DVIReader::cmdEop (int) { - if (!_posStack.empty()) - throw DVIException("stack not empty at end of page"); - _inPage = false; - endPage(); - if (_actions) - _actions->endPage(); -} - - -/** Reads and executes push command. */ -void DVIReader::cmdPush (int) { - _posStack.push(_currPos); -} - - -/** Reads and executes pop command (restores pushed position information). */ -void DVIReader::cmdPop (int) { - if (_posStack.empty()) - throw DVIException("stack empty at pop command"); - else { - DVIPosition prevPos = _currPos; - _currPos = _posStack.top(); - _posStack.pop(); - if (_actions) { - if (prevPos.h != _currPos.h) - _actions->moveToX(_currPos.h + _tx); - if (prevPos.v != _currPos.v) - _actions->moveToY(_currPos.v + _ty); - } - } -} - - -/** Helper function that actually sets/puts a charater. It is called by the - * cmdSetChar and cmdPutChar methods. - * @param[in] c character to typeset - * @param[in] moveCursor if true, register h is increased by the character width - * @throw DVIException if method is called ouside a bop/eop pair */ -void DVIReader::putChar (UInt32 c, bool moveCursor) { - if (!_inPage) - throw DVIException("set_char or put_char outside of page"); - - FontManager &fm = FontManager::instance(); - Font *font = fm.getFont(_currFontNum); - if (!font) - throw DVIException("no font selected"); - - if (VirtualFont *vf = dynamic_cast(font)) { // is current font a virtual font? - vector *dvi = const_cast*>(vf->getDVI(c)); // get DVI snippet that describes character c - if (dvi) { - DVIPosition pos = _currPos; // save current cursor position - _currPos.x = _currPos.y = _currPos.w = _currPos.z = 0; - int save_fontnum = _currFontNum; // save current font number - fm.enterVF(vf); // new font number context - cmdFontNum0(fm.vfFirstFontNum(vf)); - double save_scale = _scaleFactor; - _scaleFactor = vf->scaledSize()/(1 << 20); - - VectorInputStream vis(*dvi); - istream &is = replaceStream(vis); - try { - executeAll(); // execute DVI fragment - } - catch (const DVIException &e) { - // Message::estream(true) << "invalid dvi in vf: " << e.getMessage() << endl; // @@ - } - replaceStream(is); // restore previous input stream - _scaleFactor = save_scale; // restore previous scale factor - fm.leaveVF(); // restore previous font number context - cmdFontNum0(save_fontnum); // restore previous font number - _currPos = pos; // restore previous cursor position - } - } - else if (_actions) { - _actions->setChar(_currPos.h+_tx, _currPos.v+_ty, c, font); - } - if (moveCursor) - _currPos.h += font->charWidth(c) * font->scaleFactor() * _mag/1000.0; -} - - -/** Reads and executes set_char_x command. Puts a character at the current - * position and advances the cursor. - * @param[in] c character to set - * @throw DVIException if method is called ouside a bop/eop pair */ -void DVIReader::cmdSetChar0 (int c) { - putChar(c, true); -} - - -/** Reads and executes setx command. Puts a character at the current - * position and advances the cursor. - * @param[in] len number of parameter bytes (possible values: 1-4) - * @throw DVIException if method is called ouside a bop/eop pair */ -void DVIReader::cmdSetChar (int len) { - // According to the dvi specification all character codes are unsigned - // except len == 4. At the moment all char codes are treated as unsigned... - UInt32 c = readUnsigned(len); // if len == 4 c may be signed - putChar(c, true); -} - - -/** Reads and executes putx command. Puts a character at the current - * position but doesn't change the cursor position. - * @param[in] len number of parameter bytes (possible values: 1-4) - * @throw DVIException if method is called ouside a bop/eop pair */ -void DVIReader::cmdPutChar (int len) { - // According to the dvi specification all character codes are unsigned - // except len == 4. At the moment all char codes are treated as unsigned... - Int32 c = readUnsigned(len); - putChar(c, false); -} - - -/** Reads and executes set_rule command. Puts a solid rectangle at the current - * position and updates the cursor position. - * @throw DVIException if method is called ouside a bop/eop pair */ -void DVIReader::cmdSetRule (int) { - if (_inPage) { - double height = _scaleFactor*readSigned(4); - double width = _scaleFactor*readSigned(4); - if (_actions && height > 0 && width > 0) - _actions->setRule(_currPos.h+_tx, _currPos.v+_ty, height, width); - _currPos.h += width; - if (_actions && (height <= 0 || width <= 0)) - _actions->moveToX(_currPos.h+_tx); - } - else - throw DVIException("set_rule outside of page"); -} - - -/** Reads and executes set_rule command. Puts a solid rectangle at the current - * position but leaves the cursor position unchanged. - * @throw DVIException if method is called ouside a bop/eop pair */ -void DVIReader::cmdPutRule (int) { - if (_inPage) { - double height = _scaleFactor*readSigned(4); - double width = _scaleFactor*readSigned(4); - if (_actions && height > 0 && width > 0) - _actions->setRule(_currPos.h+_tx, _currPos.v+_ty, height, width); - } - else - throw DVIException("put_rule outside of page"); -} - - -void DVIReader::cmdNop (int) {} - -void DVIReader::cmdRight (int len) {_currPos.h += _scaleFactor*readSigned(len); if (_actions) _actions->moveToX(_currPos.h+_tx);} -void DVIReader::cmdDown (int len) {_currPos.v += _scaleFactor*readSigned(len); if (_actions) _actions->moveToY(_currPos.v+_ty);} -void DVIReader::cmdX0 (int) {_currPos.h += _currPos.x; if (_actions) _actions->moveToX(_currPos.h+_tx);} -void DVIReader::cmdY0 (int) {_currPos.v += _currPos.y; if (_actions) _actions->moveToY(_currPos.v+_ty);} -void DVIReader::cmdW0 (int) {_currPos.h += _currPos.w; if (_actions) _actions->moveToX(_currPos.h+_tx);} -void DVIReader::cmdZ0 (int) {_currPos.v += _currPos.z; if (_actions) _actions->moveToY(_currPos.v+_ty);} -void DVIReader::cmdX (int len) {_currPos.x = _scaleFactor*readSigned(len); cmdX0(0);} -void DVIReader::cmdY (int len) {_currPos.y = _scaleFactor*readSigned(len); cmdY0(0);} -void DVIReader::cmdW (int len) {_currPos.w = _scaleFactor*readSigned(len); cmdW0(0);} -void DVIReader::cmdZ (int len) {_currPos.z = _scaleFactor*readSigned(len); cmdZ0(0);} - - -void DVIReader::cmdXXX (int len) { - if (_inPage) { - UInt32 numBytes = readUnsigned(len); - string s = readString(numBytes); - if (_actions) - _actions->special(s); - } - else - throw DVIException("special outside of page"); -} - - -/** Selects a previously defined font by its number. - * @param[in] num font number - * @throw DVIException if font number is undefined */ -void DVIReader::cmdFontNum0 (int num) { - if (Font *font = FontManager::instance().getFont(num)) { - _currFontNum = num; - if (_actions && !dynamic_cast(font)) - _actions->setFont(FontManager::instance().fontID(num), font); // all fonts get a recomputed ID - } - else { - ostringstream oss; - oss << "undefined font number " << num; - throw DVIException(oss.str()); - } -} - - -/** Selects a previously defined font. - * @param[in] len size of font number variable (in bytes) - * @throw DVIException if font number is undefined */ -void DVIReader::cmdFontNum (int len) { - UInt32 num = readUnsigned(len); - cmdFontNum0(num); -} - - -/** Helper function to handle a font definition. - * @param[in] fontnum local font number - * @param[in] name font name - * @param[in] checksum checksum to be compared with TFM checksum - * @param[in] ds design size in TeX point units - * @param[in] ss scaled size in TeX point units */ -void DVIReader::defineFont (UInt32 fontnum, const string &name, UInt32 cs, double ds, double ss) { - FontManager &fm = FontManager::instance(); - int id = fm.registerFont(fontnum, name, cs, ds, ss); - Font *font = fm.getFontById(id); - if (VirtualFont *vf = dynamic_cast(font)) { - // read vf file, register its font and character definitions - fm.enterVF(vf); - ifstream ifs(vf->path(), ios::binary); - VFReader vfReader(ifs); - vfReader.replaceActions(this); - vfReader.executeAll(); - fm.leaveVF(); - } - if (_actions) - _actions->defineFont(id, font); -} - - -/** Defines a new font. - * @param[in] len size of font number variable (in bytes) */ -void DVIReader::cmdFontDef (int len) { - UInt32 fontnum = readUnsigned(len); // font number - UInt32 checksum = readUnsigned(4); // font checksum (to be compared with corresponding TFM checksum) - UInt32 ssize = readUnsigned(4); // scaled size of font in DVI units - UInt32 dsize = readUnsigned(4); // design size of font in DVI units - UInt32 pathlen = readUnsigned(1); // length of font path - UInt32 namelen = readUnsigned(1); // length of font name - string fontpath = readString(pathlen); - string fontname = readString(namelen); - - defineFont(fontnum, fontname, checksum, dsize*_scaleFactor, ssize*_scaleFactor); -} - - -/** This template method is called by the VFReader after reading a font definition from a VF file. - * @param[in] fontnum local font number - * @param[in] name font name - * @param[in] checksum checksum to be compared with TFM checksum - * @param[in] dsize design size in TeX point units - * @param[in] ssize scaled size in TeX point units */ -void DVIReader::defineVFFont (UInt32 fontnum, string path, string name, UInt32 checksum, double dsize, double ssize) { - VirtualFont *vf = FontManager::instance().getVF(); - defineFont(fontnum, name, checksum, dsize, ssize * vf->scaleFactor()); -} - - -/** This template method is called by the VFReader after reading a character definition from a VF file. - * @param[in] c character number - * @param[in] dvi DVI fragment describing the character */ -void DVIReader::defineVFChar (UInt32 c, vector *dvi) { - FontManager::instance().assignVfChar(c, dvi); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIReader.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIReader.h deleted file mode 100644 index 524310457f8..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIReader.h +++ /dev/null @@ -1,147 +0,0 @@ -/************************************************************************* -** DVIReader.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef DVIREADER_H -#define DVIREADER_H - -#include -#include -#include -#include -#include "MessageException.h" -#include "StreamReader.h" -#include "VFActions.h" -#include "types.h" - - -struct DVIException : public MessageException -{ - DVIException (const std::string &msg) : MessageException(msg) {} -}; - -struct InvalidDVIFileException : public DVIException -{ - InvalidDVIFileException(const std::string &msg) : DVIException(msg) {} -}; - -class DVIActions; -class FileFinder; - -class DVIReader : public StreamReader, protected VFActions -{ - typedef void (DVIReader::*CommandHandler)(int); - - struct DVIPosition - { - double h, v; - double x, w, y, z; - DVIPosition () {reset();} - void reset () {h = v = x = w = y = z = 0.0;} - }; - - public: - DVIReader (std::istream &is, DVIActions *a=0); - - bool executeDocument (); - void executeAll (); - bool executeAllPages (); - void executePreamble (); - void executePostamble (); - bool executePage (unsigned n); - bool executePages (unsigned first, unsigned last); - bool inPostamble () const {return _inPostamble;} - double getXPos () const; - double getYPos () const; - void finishLine () {_prevYPos = std::numeric_limits::min();} - void translateToX (double x) {_tx=x-_currPos.h-_tx;} - void translateToY (double y) {_ty=y-_currPos.v-_ty;} - double getPageWidth () const; - double getPageHeight () const; - int getCurrentFontNumber () const {return _currFontNum;} - unsigned getCurrentPageNumber () const {return _currPageNum;} - unsigned getTotalPages () const {return _totalPages;} - DVIActions* getActions () const {return _actions;} - DVIActions* replaceActions (DVIActions *a); - - protected: - int executeCommand (); - int evalCommand (bool compute_size, CommandHandler &handler, int &length, int ¶m); - void putChar (UInt32 c, bool moveCursor); - void defineFont (UInt32 fontnum, const std::string &name, UInt32 cs, double ds, double ss); - virtual void beginPage (unsigned n, Int32 *c) {} - virtual void endPage () {} - - // VFAction methods - void defineVFFont (UInt32 fontnum, std::string path, std::string name, UInt32 checksum, double dsize, double ssize); - void defineVFChar (UInt32 c, std::vector *dvi); - - // the following methods represent the DVI commands - // they are called by executeCommand and should not be used directly - void cmdSetChar0 (int c); - void cmdSetChar (int len); - void cmdPutChar (int len); - void cmdSetRule (int len); - void cmdPutRule (int len); - void cmdNop (int len); - void cmdBop (int len); - void cmdEop (int len); - void cmdPush (int len); - void cmdPop (int len); - void cmdRight (int len); - void cmdDown (int len); - void cmdX0 (int len); - void cmdY0 (int len); - void cmdW0 (int len); - void cmdZ0 (int len); - void cmdX (int len); - void cmdY (int len); - void cmdW (int len); - void cmdZ (int len); - void cmdFontDef (int len); - void cmdFontNum0 (int n); - void cmdFontNum (int len); - void cmdXXX (int len); - void cmdPre (int len); - void cmdPost (int len); - void cmdPostPost (int len); - - private: - DVIActions *_actions; ///< actions to be performed on various DVI events - bool _inPage; ///< true if between bop and eop - unsigned _totalPages; ///< total number of pages in dvi file - unsigned _currPageNum; ///< current page number - int _currFontNum; ///< current font number - double _scaleFactor; ///< 1 dvi unit = scaleFactor * TeX points - UInt32 _mag; ///< magnification factor * 1000 - bool _inPostamble; ///< true if stream pointer is inside the postamble - Int32 _prevBop; ///< pointer to previous bop - double _pageHeight, _pageWidth; ///< page height and width in TeX points - DVIPosition _currPos; ///< current cursor position - std::stack _posStack; - double _prevYPos; ///< previous vertical cursor position - double _tx, _ty; ///< tranlation of cursor position - size_t _pageLength; ///< number of bytes between current bop end eop - std::streampos _pagePos; ///< distance of current DVI command from bop (in bytes) - - public: - static bool COMPUTE_PAGE_LENGTH; ///< if true, the bop handler computes the number of bytes of the current page -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVG.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVG.cpp deleted file mode 100644 index 89ce9eb60e0..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVG.cpp +++ /dev/null @@ -1,340 +0,0 @@ -/************************************************************************* -** DVIToSVG.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#define VERSION_STR VERSION " (" TARGET_SYSTEM ")" -#else -#define VERSION_STR "" -#endif - -#include -#include -#include -#include -#include "Calculator.h" -#include "DVIToSVG.h" -#include "DVIToSVGActions.h" -#include "Font.h" -#include "FontManager.h" -#include "FileFinder.h" -#include "GlyphTracerMessages.h" -#include "InputBuffer.h" -#include "InputReader.h" -#include "Matrix.h" -#include "Message.h" -#include "PageRanges.h" -#include "PageSize.h" -#include "SVGTree.h" -#include "TFM.h" -#include "XMLDocument.h" -#include "XMLDocTypeNode.h" -#include "XMLNode.h" -#include "XMLString.h" -// -/////////////////////////////////// -// special handlers - -#include "BgColorSpecialHandler.h" -#include "ColorSpecialHandler.h" -#include "DvisvgmSpecialHandler.h" -#include "EmSpecialHandler.h" -//#include "HtmlSpecialHandler.h" -#if !defined(DISABLE_GS) - #include "PsSpecialHandler.h" -#endif -#include "TpicSpecialHandler.h" -/////////////////////////////////// - - -using namespace std; - - -/** Returns time stamp of current date/time. */ -static string datetime () { - time_t t; - time(&t); - struct tm *tm = localtime(&t); - char *timestr = asctime(tm); - timestr[24] = 0; // remove newline - return timestr; -} - -class PSHeaderActions : public DVIActions -{ - public : - PSHeaderActions (DVIToSVG &dvisvg) : _dvisvg(dvisvg) {} - - void special (const std::string &s) { - // execute PS headers only - if (!s.empty() && (s[0] == '!' || s.substr(0, 7) == "header=")) - _dvisvg.specialManager().process(s, 0); - } - - BoundingBox& bbox () {return _bbox;} - - private: - DVIToSVG &_dvisvg; - BoundingBox _bbox; -}; - - -/** 'a': trace all glyphs even if some of them are already cached - * 'm': trace missing glyphs, i.e. glyphs not yet cached - * 0 : only trace actually required glyphs */ -char DVIToSVG::TRACE_MODE = 0; - - -DVIToSVG::DVIToSVG (istream &is, DVIToSVG::Output &out) : DVIReader(is), _out(out) -{ - replaceActions(new DVIToSVGActions(*this, _svg)); -} - - -DVIToSVG::~DVIToSVG () { - delete replaceActions(0); -} - - -/** Starts the conversion process. - * @param[in] first number of first page to convert - * @param[in] last number of last page to convert - * @param[out] pageinfo (number of converted pages, number of total pages) */ -void DVIToSVG::convert (unsigned first, unsigned last, pair *pageinfo) { - if (getTotalPages() == 0) { - executePreamble(); - executePostamble(); // collect scaling and font information - } - if (first > last) - swap(first, last); - if (first > getTotalPages()) { - ostringstream oss; - oss << "file contains only " << getTotalPages() << " page"; - if (getTotalPages() > 1) - oss << 's'; - throw DVIException(oss.str()); - } - last = min(last, getTotalPages()); - - if (first > 1) { - // ensure loading of PostScript prologues given at the beginning of the first page - // (prologue files are always referenced in first page) - PSHeaderActions headerActions(*this); - DVIActions *save = replaceActions(&headerActions); - executePage(1); - replaceActions(save); - } - for (unsigned i=first; i <= last; ++i) { - executePage(i); - embedFonts(_svg.rootNode()); - _svg.write(_out.getPageStream(getCurrentPageNumber(), getTotalPages())); - string fname = _out.filename(i, getTotalPages()); - Message::mstream(false, Terminal::GREEN) << "\npage written to " << (fname.empty() ? "" : fname) << '\n'; - _svg.reset(); - static_cast(getActions())->reset(); - } - if (pageinfo) { - pageinfo->first = last-first+1; - pageinfo->second = getTotalPages(); - } -} - - -/** Convert DVI pages specified by a page range string. - * @param[in] rangestr string describing the pages to convert - * @param[out] pageinfo (number of converted pages, number of total pages) */ -void DVIToSVG::convert (const string &rangestr, pair *pageinfo) { - if (getTotalPages() == 0) { - executePreamble(); - executePostamble(); // collect scaling and font information - } - PageRanges ranges; - if (!ranges.parse(rangestr, getTotalPages())) - throw MessageException("invalid page range format"); - FORALL(ranges, PageRanges::ConstIterator, it) - convert(it->first, it->second); - if (pageinfo) { - pageinfo->first = ranges.pages(); - pageinfo->second = getTotalPages(); - } -} - - -/** This template method is called by parent class DVIReader before - * executing the BOP actions. - * @param[in] c contains information about the page (page number etc.) */ -void DVIToSVG::beginPage (unsigned n, Int32 *c) { - if (dynamic_cast(getActions())) { - Message::mstream().indent(0); - Message::mstream(false, Terminal::BLUE, true) << "processing page " << n << " [" << c[0] << ']'; - Message::mstream().indent(1); - _svg.appendToDoc(new XMLCommentNode(" This file was generated by dvisvgm "VERSION_STR" ")); - _svg.appendToDoc(new XMLCommentNode(" " + datetime() + " ")); - } -} - - -/** This template method is called by parent class DVIReader before - * executing the EOP actions. */ -void DVIToSVG::endPage () { - if (!dynamic_cast(getActions())) - return; - - _specialManager.notifyEndPage(); - // set bounding box and apply page transformations - BoundingBox &bbox = getActions()->bbox(); - if (!_transCmds.empty()) { - Calculator calc; - calc.setVariable("ux", bbox.minX()); - calc.setVariable("uy", bbox.minY()); - calc.setVariable("w", bbox.width()); - calc.setVariable("h", bbox.height()); - calc.setVariable("pt", 1); - calc.setVariable("in", 72.27); - calc.setVariable("cm", 72.27/2.54); - calc.setVariable("mm", 72.27/25.4); - Matrix matrix(_transCmds, calc); - static_cast(getActions())->setPageMatrix(matrix); - if (_bboxString == "min") - bbox.transform(matrix); - } - if (string("dvi none min").find(_bboxString) == string::npos) { - istringstream iss(_bboxString); - StreamInputReader ir(iss); - ir.skipSpace(); - if (isalpha(ir.peek())) { - // set explicitly given page format - PageSize size(_bboxString); - if (size.valid()) { - // convention: DVI position (0,0) equals (1in, 1in) relative - // to the upper left vertex of the page (see DVI specification) - const double border = -72.27; - bbox = BoundingBox(border, border, size.widthInPT()+border, size.heightInPT()+border); - } - } - else { // set/modify bounding box by explicitly given values - try { - bbox.set(_bboxString); - } - catch (const MessageException &e) { - } - } - } - else if (_bboxString == "dvi") { - // center page content - double dx = (getPageWidth()-bbox.width())/2; - double dy = (getPageHeight()-bbox.height())/2; - bbox += BoundingBox(-dx, -dy, dx, dy); - } - if (_bboxString != "none") { - if (bbox.width() == 0) - Message::mstream(false, Terminal::YELLOW) << "\npage is empty\n"; - else { - _svg.setBBox(bbox); - - Message::mstream(false, Terminal::MAGENTA) << "\npage size: " << bbox.width() << "pt" - " x " << bbox.height() << "pt" - " (" << bbox.width()/72.27*25.4 << "mm" - " x " << bbox.height()/72.27*25.4 << "mm)\n"; - } - } -} - - -static void collect_chars (map > &fm) { - typedef const map > UsedCharsMap; - FORALL(fm, UsedCharsMap::const_iterator, it) { - if (it->first->uniqueFont() != it->first) { - FORALL(it->second, set::const_iterator, cit) - fm[it->first->uniqueFont()].insert(*cit); - } - } -} - - -/** Adds the font information to the SVG tree. - * @param[in] svgElement the font nodes are added to this node */ -void DVIToSVG::embedFonts (XMLElementNode *svgElement) { - if (!svgElement) - return; - if (!getActions()) // no dvi actions => no chars written => no fonts to embed - return; - - typedef map > UsedCharsMap; - const DVIToSVGActions *svgActions = static_cast(getActions()); - UsedCharsMap &usedChars = svgActions->getUsedChars(); - - collect_chars(usedChars); - - GlyphTracerMessages messages; - FORALL(usedChars, UsedCharsMap::const_iterator, it) { - const Font *font = it->first; - if (const PhysicalFont *ph_font = dynamic_cast(font)) { - if (TRACE_MODE) - ph_font->traceAllGlyphs(TRACE_MODE == 'a', &messages); - - if (font->path()) // does font file exist? - _svg.append(*ph_font, it->second, &messages); - else - Message::wstream(true) << "can't embed font '" << font->name() << "'\n"; - } - else - Message::wstream(true) << "can't embed font '" << font->name() << "'\n"; - } - _svg.appendFontStyles(svgActions->getUsedFonts()); -} - - -/** Enables or disables processing of specials. If ignorelist == 0, all - * supported special handlers are loaded. To disable selected sets of specials, - * the corresponding prefixes can be given separated by non alpha-numeric characters, - * e.g. "color, ps, em" or "color: ps em" etc. - * A single "*" in the ignore list disables all specials. - * @param[in] ignorelist list of special prefixes to ignore - * @return the SpecialManager that handles special statements */ -const SpecialManager* DVIToSVG::setProcessSpecials (const char *ignorelist) { - if (ignorelist && strcmp(ignorelist, "*") == 0) { // ignore all specials? - _specialManager.unregisterHandlers(); - } - else { - // add special handlers - SpecialHandler *handlers[] = { - 0, // placeholder for PsSpecialHandler - new BgColorSpecialHandler, // handles background color special - new ColorSpecialHandler, // handles color specials - new DvisvgmSpecialHandler, // handles raw SVG embeddings - new EmSpecialHandler, // handles emTeX specials -// new HtmlSpecialHandler, // handles hyperref specials - new TpicSpecialHandler, // handles tpic specials - 0 - }; - SpecialHandler **p = handlers; -#if !defined(DISABLE_GS) - if (Ghostscript().available()) - *p = new PsSpecialHandler; - else -#endif - p++; - _specialManager.unregisterHandlers(); - _specialManager.registerHandlers(p, ignorelist); - } - return &_specialManager; -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVG.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVG.h deleted file mode 100644 index 0e5fa7da7d8..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVG.h +++ /dev/null @@ -1,70 +0,0 @@ -/************************************************************************* -** DVIToSVG.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef DVITOSVG_H -#define DVITOSVG_H - -#include -#include -#include -#include "DVIReader.h" -#include "SpecialManager.h" -#include "SVGTree.h" - - -class DVIToSVG : public DVIReader -{ - public: - /** DVIToSVG uses this interface to get the output streams for the SVG files. */ - struct Output { - virtual ~Output () {} - virtual std::ostream& getPageStream (int page, int numPages) const =0; - virtual std::string filename (int page, int numPages) const =0; - }; - - public: - DVIToSVG (std::istream &is, Output &out); - ~DVIToSVG (); - void convert (unsigned firstPage, unsigned lastPage, std::pair *pageinfo=0); - void convert (const std::string &range, std::pair *pageinfo=0); - const SpecialManager* setProcessSpecials (const char *ignorelist=0); - const SpecialManager& specialManager () const {return _specialManager;} - void setPageSize (const std::string &name) {_bboxString = name;} - void setTransformation (const std::string &cmds) {_transCmds = cmds;} - - public: - static char TRACE_MODE; - - protected: - DVIToSVG (const DVIToSVG &); - DVIToSVG operator = (const DVIToSVG &); - void beginPage (unsigned n, Int32 *c); - void endPage (); - void embedFonts (XMLElementNode *svgElement); - - private: - SVGTree _svg; - Output &_out; - std::string _bboxString; - std::string _transCmds; - SpecialManager _specialManager; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVGActions.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVGActions.cpp deleted file mode 100644 index 18ccdc23a44..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVGActions.cpp +++ /dev/null @@ -1,343 +0,0 @@ -/************************************************************************* -** DVIToSVGActions.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "BoundingBox.h" -#include "DVIToSVG.h" -#include "DVIToSVGActions.h" -#include "Font.h" -#include "FontManager.h" -#include "GlyphTracerMessages.h" -#include "SpecialManager.h" -#include "System.h" -#include "XMLNode.h" -#include "XMLString.h" - -using namespace std; - - -double DVIToSVGActions::PROGRESSBAR_DELAY=1000; // initial delay in seconds (values >= 1000 disable the progressbar) -bool DVIToSVGActions::EXACT_BBOX = false; - - -DVIToSVGActions::DVIToSVGActions (DVIToSVG &dvisvg, SVGTree &svg) - : _svg(svg), _dvisvg(dvisvg), _pageMatrix(0), _bgcolor(Color::WHITE), _boxes(0) -{ - _currentFontNum = -1; - _pageCount = 0; -} - - -DVIToSVGActions::~DVIToSVGActions () { - delete _pageMatrix; - delete _boxes; -} - - -void DVIToSVGActions::reset() { - _usedChars.clear(); - _usedFonts.clear(); - _bbox = BoundingBox(); - _currentFontNum = -1; - _bgcolor = Color::WHITE; -} - - -void DVIToSVGActions::setPageMatrix (const Matrix &matrix) { - delete _pageMatrix; - _pageMatrix = new Matrix(matrix); -} - - -void DVIToSVGActions::moveToX (double x) { - _dvisvg.specialManager().notifyPositionChange(getX(), getY()); - _svg.setX(getX()); // get current horizontal DVI position -} - - -void DVIToSVGActions::moveToY (double y) { - _dvisvg.specialManager().notifyPositionChange(getX(), getY()); - _svg.setY(y); -} - - -/** This method is called when a "set char" command was found in the DVI file. - * It draws a character of the current font. - * @param[in] x horizontal position of left bounding box edge - * @param[in] y vertical position of the character's baseline - * @param[in] c character code relative to the current font - * @param[in] font font to be used */ -void DVIToSVGActions::setChar (double x, double y, unsigned c, const Font *font) { - // If we use SVG fonts there is no need to record all font name/char/size combinations - // because the SVG font mechanism handles this automatically. It's sufficient to - // 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); - - _svg.appendChar(c, x, y, *font); - // update bounding box - double wl=0, wr=0, h=0, d=0; // left/right width, height, and depth of character c - static string fontname; - GlyphTracerMessages callback(fontname != font->name(), false); - fontname = font->name(); - BoundingBox charbox; - const PhysicalFont *ph_font = dynamic_cast(font); - if (EXACT_BBOX && ph_font && ph_font->getGlyphBox(c, charbox, &callback)) { - if ((wl = charbox.minX()) > 0) wl=0; - if ((wr = charbox.maxX()) < 0) wr=0; - if ((h = charbox.maxY()) < 0) h=0; - if ((d = -charbox.minY()) < 0) d=0; - } - else { - double s = font->scaleFactor(); - wr = s*(font->charWidth(c) + font->italicCorr(c)); - h = s*font->charHeight(c); - d = s*font->charDepth(c); - } - - BoundingBox bbox(x+wl, y-h, x+wr, y+d); -/* XMLElementNode *rect = new XMLElementNode("rect"); - rect->addAttribute("x", x+wl); - rect->addAttribute("y", y-h); - rect->addAttribute("width", (-wl+wr)); - rect->addAttribute("height", (h+d)); - rect->addAttribute("fill", "none"); - rect->addAttribute("stroke", "red"); - rect->addAttribute("stroke-width", "0.5"); - _svg.appendToPage(rect);*/ - if (!getMatrix().isIdentity()) - bbox.transform(getMatrix()); - embed(bbox); -} - - -/** This method is called when a "set rule" or "put rule" command was found in the - * DVI file. It draws a solid unrotated rectangle. - * @param[in] x horizontal position of left edge - * @param[in] y vertical position of bottom(!) edge - * @param[in] height length of the vertical edges - * @param[in] width length of the horizontal edges */ -void DVIToSVGActions::setRule (double x, double y, double height, double width) { -/* x *= BP; - y *= BP; - height *= BP; - width *= BP; */ - // (x,y) is the lower left corner of the rectangle - XMLElementNode *rect = new XMLElementNode("rect"); - rect->addAttribute("x", x); - rect->addAttribute("y", y-height); - rect->addAttribute("height", height); - rect->addAttribute("width", width); - if (!getMatrix().isIdentity()) - rect->addAttribute("transform", getMatrix().getSVG()); - if (getColor() != Color::BLACK) - rect->addAttribute("fill", _svg.getColor().rgbString()); - _svg.appendToPage(rect); - - // update bounding box - BoundingBox bb(x, y+height, x+width, y); - if (!getMatrix().isIdentity()) - bb.transform(getMatrix()); - embed(bb); -} - - -/** This method is called when a "set font" command was found in the DVI file. The - * font must be previously defined. - * @param[in] num unique number of the font in the DVI file (not necessarily equal to the DVI font number) - * @param[in] font pointer to the font object (always represents a physical font and never a virtual font) */ -void DVIToSVGActions::setFont (int num, const Font *font) { - _currentFontNum = num; - _svg.setFont(num, font); -} - - -/** This method is called when a "special" command was found in the DVI file. - * @param[in] s the special expression */ -void DVIToSVGActions::special (const string &s) { - try { - _dvisvg.specialManager().process(s, this, this); - // @@ output message in case of unsupported specials? - } - catch (const SpecialException &e) { - Message::estream(true) << "error in special '" << s << "': " << e.what() << '\n'; - } -} - - -void DVIToSVGActions::beginSpecial (const char *prefix) { -} - - -void DVIToSVGActions::endSpecial (const char *) { -} - - -/** This method is called when the DVI preamble was read - * @param[in] cmt preamble comment text. */ -void DVIToSVGActions::preamble (const string &cmt) { -} - - -void DVIToSVGActions::postamble () { -} - - -/** This method is called when a "begin of page (bop)" command was found in the DVI file. - * @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 n, Int32 *c) { - _svg.newPage(++_pageCount); - _bbox = BoundingBox(); // clear bounding box - if (_boxes) - _boxes->clear(); -} - - -/** This method is called when an "end of page (eop)" command was found in the DVI file. */ -void DVIToSVGActions::endPage () { - if (_pageMatrix) - _svg.transformPage(*_pageMatrix); - if (_bgcolor != Color::WHITE) { - XMLElementNode *r = new XMLElementNode("rect"); - r->addAttribute("x", _bbox.minX()); - r->addAttribute("y", _bbox.minY()); - r->addAttribute("width", _bbox.width()); - r->addAttribute("height", _bbox.height()); - r->addAttribute("fill", _bgcolor.rgbString()); - _svg.prependToPage(r); - } -} - - -void DVIToSVGActions::setBgColor (const Color &color) { - _bgcolor = color; -} - - -void DVIToSVGActions::embed(const BoundingBox& bbox) { - _bbox.embed(bbox); - if (_boxes) { - FORALL(*_boxes, BoxMap::iterator, it) - it->second.embed(bbox); - } -} - - -void DVIToSVGActions::embed(const DPair& p, double r) { - if (r == 0) - _bbox.embed(p); - else - _bbox.embed(p, r); - if (_boxes) - FORALL(*_boxes, BoxMap::iterator, it) - it->second.embed(p, r); -} - - -BoundingBox& DVIToSVGActions::bbox(const string& name, bool reset) { - if (!_boxes) - _boxes = new BoxMap; - BoundingBox &box = (*_boxes)[name]; - if (reset) - box = BoundingBox(); - return box; -} - - -/** This method is called by subprocesses like the PS handler when - * a computation step has finished. Since the total number of steps - * can't be determined in advance, we don't show a percent value but - * a rotating dash. */ -void DVIToSVGActions::progress (const char *id) { - if (PROGRESSBAR_DELAY < 1000) { - static double time=0; - // slow down updating of the progress indicator to prevent flickering - if (System::time() - time > 0.1) { - progress(0, 0, id); - time = System::time(); - } - } -} - - -/** Returns the number of digits of a given integer. */ -static int digits (int n) { - if (n == 0) - return 1; - if (n > 0) - return int(log10(double(n))+1); - return int(log10(double(-n))+2); -} - - -/** Draws a simple progress indicator. - * @param[in] current current iteration step (of 'total' steps) - * @param[in] total total number of iteration steps - * @param[in] id ID of the subprocess providing the information */ -void DVIToSVGActions::progress (size_t current, size_t total, const char *id) { - static double time=0; - static bool draw=false; // show progress indicator? - static int step = -1; // >=0: rotating dash - static size_t prev_current=0, prev_total=1; - static const char *prev_id=0; - const char *tips = "-\\|/"; - if (current == 0 && total > 0) { - time = System::time(); - draw = false; - Message::mstream() << '\n'; - } - // don't show the progress indicator before the given time has elapsed - if (!draw && System::time()-time > PROGRESSBAR_DELAY) - draw = true; - if (draw && (System::time() - time > 0.1 || (total > 0 && current == total) || prev_id != id)) { - if (total == 0) { - current = prev_current; - total = prev_total; - step = (step+1) % 4; - } - else { - prev_current = current; - prev_total = total; - step = -1; - } - // adapt length of progress indicator to terminal width - int cols = Terminal::columns(); - int width = (cols == 0 || cols > 60) ? 50 : 49-60+cols; - double factor = double(current)/double(total); - int length = int(width*factor); - Message::mstream(false, Terminal::MAGENTA) - << '[' << string(length, '=') - << (factor < 1.0 ? (step < 0 ? ' ' : tips[step]) : '=') - << string(width-length, ' ') - << "] " << string(3-digits(int(100*factor)), ' ') << int(100*factor) - << "%\r"; - // overprint indicator when finished - if (factor == 1.0) - Message::estream().clearline(); - time = System::time(); - prev_id = id; - } -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVGActions.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVGActions.h deleted file mode 100644 index bc103952f30..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DVIToSVGActions.h +++ /dev/null @@ -1,102 +0,0 @@ -/************************************************************************* -** DVIToSVGActions.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef DVITOSVGACTIONS_H -#define DVITOSVGACTIONS_H - -#include -#include -#include "BoundingBox.h" -#include "DVIActions.h" -#include "Matrix.h" -#include "SpecialActions.h" -#include "SpecialManager.h" -#include "SVGTree.h" -#include "DVIReader.h" - - -class DVIToSVG; -class FileFinder; -class Font; -class XMLNode; - -class DVIToSVGActions : public DVIActions, public SpecialActions, public SpecialManager::Listener -{ - typedef std::map > CharMap; - typedef std::set FontSet; - typedef std::map BoxMap; - - public: - DVIToSVGActions (DVIToSVG &dvisvg, SVGTree &svg); - ~DVIToSVGActions (); - void reset (); - void setChar (double x, double y, unsigned c, const Font *f); - void setRule (double x, double y, double height, double width); - void setBgColor (const Color &color); - void setColor (const Color &color) {_svg.setColor(color);} - void setMatrix (const Matrix &m) {_svg.setMatrix(m);} - const Matrix& getMatrix () const {return _svg.getMatrix();} - Color getColor () const {return _svg.getColor();} - void appendToPage (XMLNode *node) {_svg.appendToPage(node);} - void appendToDefs (XMLNode *node) {_svg.appendToDefs(node);} - void moveToX (double x); - void moveToY (double y); - void setFont (int num, const Font *font); - void special (const std::string &s); - void preamble (const std::string &cmt); - void postamble (); - void beginPage (unsigned n, Int32 *c); - void endPage (); - void beginSpecial (const char *prefix); - void endSpecial (const char *prefix); - void progress (size_t current, size_t total, const char *id=0); - void progress (const char *id); - CharMap& getUsedChars () const {return _usedChars;} - const FontSet& getUsedFonts () const {return _usedFonts;} - void setPageMatrix (const Matrix &tm); - double getX() const {return _dvisvg.getXPos();} - double getY() const {return _dvisvg.getYPos();} - void setX (double x) {_dvisvg.translateToX(x); _svg.setX(x);} - void setY (double y) {_dvisvg.translateToY(y); _svg.setY(y);} - void finishLine () {_dvisvg.finishLine();} - BoundingBox& bbox () {return _bbox;} - BoundingBox& bbox (const std::string &name, bool reset=false); - void embed (const BoundingBox &bbox); - void embed (const DPair &p, double r=0); - - public: - static double PROGRESSBAR_DELAY; ///< progress bar doesn't appear before this time has elapsed (in sec) - static bool EXACT_BBOX; - - private: - SVGTree &_svg; - DVIToSVG &_dvisvg; - BoundingBox _bbox; - int _pageCount; - int _currentFontNum; - mutable CharMap _usedChars; - FontSet _usedFonts; - Matrix *_pageMatrix; // transformation of whole page - Color _bgcolor; - BoxMap *_boxes; -}; - - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Directory.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Directory.cpp deleted file mode 100644 index 86a8b446ceb..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Directory.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/************************************************************************* -** Directory.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include "Directory.h" - -using namespace std; - -#ifdef __WIN32__ - #include -#else - #include - #include -#endif - - -Directory::Directory () { -#if __WIN32__ - handle = INVALID_HANDLE_VALUE; -#else - dir = 0; -#endif -} - - -Directory::Directory (string dirname) { - open(dirname); -} - -Directory::~Directory () { - close(); -} - - -bool Directory::open (string dname) { - _dirname = dname; -#ifdef __WIN32__ - firstread = true; - if (dname[dname.length()-1] == '/' || dname[dname.length()-1] == '\\') - dname = dname.substr(0, dname.length()-1); - dname += "\\*"; - handle = FindFirstFile(dname.c_str(), &fileData); - return handle != INVALID_HANDLE_VALUE; -#else - dir = opendir(_dirname.c_str()); - return dir; -#endif -} - - -void Directory::close () { -#ifdef __WIN32__ - FindClose(handle); -#else - closedir(dir); -#endif -} - - -/** Reads first/next directory entry. - * @param[in] type type of entry to return (a: file or dir, f: file, d: dir) - * @return name of entry */ -const char* Directory::read (char type) { -#ifdef __WIN32__ - if (handle == INVALID_HANDLE_VALUE) - return 0; - while (firstread || FindNextFile(handle, &fileData)) { - firstread = false; - if (fileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { - if (type == 'a' || type == 'd') - return fileData.cFileName; - } - else if (type == 'a' || type == 'f') - return fileData.cFileName; - } - FindClose(handle); - handle = INVALID_HANDLE_VALUE; - return 0; -#else - if (!dir) - return 0; - while ((dirent = readdir(dir))) { - string path = string(_dirname) + "/" + dirent->d_name; - struct stat stats; - stat(path.c_str(), &stats); - if (S_ISDIR(stats.st_mode)) { - if (type == 'a' || type == 'd') - return dirent->d_name; - } - else if (type == 'a' || type == 'f') - return dirent->d_name; - } - closedir(dir); - dir = 0; - return 0; -#endif -} - - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Directory.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Directory.h deleted file mode 100644 index f877b05a807..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Directory.h +++ /dev/null @@ -1,53 +0,0 @@ -/************************************************************************* -** Directory.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef DIRECTORY_H -#define DIRECTORY_H - -#include -#ifdef __WIN32__ - #include -#else - #include -#endif - -class Directory -{ - public: - Directory (); - Directory (std::string path); - ~Directory (); - bool open (std::string path); - void close (); - const char* read (char type='a'); - - private: - std::string _dirname; -#ifdef __WIN32__ - bool firstread; - HANDLE handle; - WIN32_FIND_DATA fileData; -#else - DIR *dir; - struct dirent *dirent; -#endif -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DvisvgmSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DvisvgmSpecialHandler.cpp deleted file mode 100644 index 2e44169362a..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DvisvgmSpecialHandler.cpp +++ /dev/null @@ -1,202 +0,0 @@ -/************************************************************************* -** DvisvgmSpecialHandler.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include "DvisvgmSpecialHandler.h" -#include "InputBuffer.h" -#include "InputReader.h" -#include "SpecialActions.h" -#include "XMLNode.h" -#include "XMLString.h" - -using namespace std; - - -/** Replaces constants of the form {?name} by their corresponding value. - * @param[in,out] str text to expand - * @param[in] actions interfcae to the world outside the special handler */ -static void expand_constants (string &str, SpecialActions *actions) { - struct Constant { - const char *name; - string val; - } - constants[] = { - {"x", XMLString(actions->getX())}, - {"y", XMLString(actions->getY())}, - {"color", actions->getColor().rgbString()}, - {"nl", "\n"}, - {0, ""} - }; - bool repl_bbox = true; - while (repl_bbox) { - size_t pos = str.find(string("{?bbox ")); - if (pos == string::npos) - repl_bbox = false; - else { - size_t endpos = pos+7; - while (endpos < str.length() && isalnum(str[endpos])) - ++endpos; - if (str[endpos] == '}') { - BoundingBox &box=actions->bbox(str.substr(pos+7, endpos-pos-7)); - str.replace(pos, endpos-pos+1, box.toSVGViewBox()); - } - else - repl_bbox = false; - } - } - for (const Constant *p=constants; p->name; p++) { - const string pattern = string("{?")+p->name+"}"; - size_t pos = str.find(pattern); - while (pos != string::npos) { - str.replace(pos, strlen(p->name)+3, p->val); - pos = str.find(pattern, pos+p->val.length()); // look for further matches - } - } -} - - -/** Embeds the virtual rectangle (x, y ,w , h) into the current bounding box, - * where (x,y) is the lower left vertex composed of the current DVI position. - * @param[in] w width of the rectangle in TeX point units - * @param[in] h height of the rectangle in TeX point units - * @param[in] d depth of the rectangle in TeX point units */ -static void update_bbox (double w, double h, double d, SpecialActions *actions) { - double x = actions->getX(); - double y = actions->getY(); - actions->embed(BoundingBox(x, y, x+w, y-h)); - actions->embed(BoundingBox(x, y, x+w, y+d)); -} - - -/** Inserts raw text into the SVG tree. - * @param[in,out] in the raw text is read from this input buffer - * @param[in] actions interfcae to the world outside the special handler - * @param[in] group true if the text should be wrapped by a group element */ -static void raw (InputReader &in, SpecialActions *actions, bool group=false) { - string str; - while (!in.eof()) { - int c = in.get(); - if (isprint(c)) - str += char(c); - } - expand_constants(str, actions); - if (!str.empty()) { - XMLNode *node = new XMLTextNode(str); - if (group) { - XMLElementNode *g = new XMLElementNode("g"); - g->addAttribute("x", actions->getX()); - g->addAttribute("y", actions->getY()); - if (actions->getColor() != Color::BLACK) - g->addAttribute("fill", actions->getColor().rgbString()); - g->append(node); - node = g; - } - actions->appendToPage(node); - } -} - - -/** Evaluates the special dvisvgm:bbox. - * variant 1: dvisvgm:bbox [r[el]] [] - * variant 2: dvisvgm:bbox a[bs] - * variant 3: dvisvgm:bbox f[ix] - * variant 4: dvisvgm:bbox n[ew] */ -static void bbox (InputReader &in, SpecialActions *actions) { - in.skipSpace(); - int c = in.peek(); - if (isalpha(c)) { - while (!isspace(in.peek())) // skip trailing characters - in.get(); - if (c == 'n') { - in.skipSpace(); - string name; - while (isalnum(in.peek())) - name += char(in.get()); - in.skipSpace(); - if (!name.empty() && in.eof()) - actions->bbox(name, true); // create new user box - } - else if (c == 'a' || c == 'f') { - double p[4]; - for (int i=0; i < 4; i++) - p[i] = in.getDouble(); - BoundingBox b(p[0], p[1], p[2], p[3]); - if (c == 'a') - actions->embed(b); - else { - actions->bbox() = b; - actions->bbox().lock(); - } - } - } - else - c = 'r'; // no mode specifier => relative box parameters - - if (c == 'r') { - double w = in.getDouble(); - double h = in.getDouble(); - double d = in.getDouble(); - update_bbox(w, h, d, actions); - } -} - - -static void img (InputReader &in, SpecialActions *actions) { - double w = in.getDouble(); - double h = in.getDouble(); - string f = in.getString(); - update_bbox(w, h, 0, actions); - XMLElementNode *img = new XMLElementNode("image"); - img->addAttribute("x", actions->getX()); - img->addAttribute("y", actions->getY()); - img->addAttribute("width", w); - img->addAttribute("height", h); - img->addAttribute("xlink:href", f); - if (actions && !actions->getMatrix().isIdentity()) - img->addAttribute("transform", actions->getMatrix().getSVG()); - actions->appendToPage(img); -} - - -/** Evaluates and executes a dvisvgm special statement. - * @param[in] prefix special prefix read by the SpecialManager - * @param[in] is the special statement is read from this stream - * @param[in,out] in the raw text is read from this input buffer */ -bool DvisvgmSpecialHandler::process (const char *prefix, istream &is, SpecialActions *actions) { - if (actions) { - StreamInputBuffer ib(is); - BufferInputReader in(ib); - string cmd = in.getWord(); - if (cmd == "raw") // raw - raw(in, actions); - else if (cmd == "bbox") // bbox [r] or bbox a - bbox(in, actions); - else if (cmd == "img") { // img - img(in, actions); - } - } - return true; -} - - -const char** DvisvgmSpecialHandler::prefixes () const { - static const char *pfx[] = {"dvisvgm:", 0}; - return pfx; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DvisvgmSpecialHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DvisvgmSpecialHandler.h deleted file mode 100644 index 1d15f864cf4..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/DvisvgmSpecialHandler.h +++ /dev/null @@ -1,35 +0,0 @@ -/************************************************************************* -** DvisvgmSpecialHandler.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef DVISVGMSPECIALHANDLER_H -#define DVISVGMSPECIALHANDLER_H - -#include "SpecialHandler.h" - -class DvisvgmSpecialHandler : public SpecialHandler -{ - public: - const char* name () const {return "dvisvgm";} - const char* info () const {return "special set for embedding raw SVG snippets";} - const char** prefixes () const; - bool process (const char *prefix, std::istream &in, SpecialActions *actions); -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/EmSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/EmSpecialHandler.cpp deleted file mode 100644 index 5fa5346b4ca..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/EmSpecialHandler.cpp +++ /dev/null @@ -1,230 +0,0 @@ -/************************************************************************* -** EmSpecialHandler.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include "EmSpecialHandler.h" -#include "InputBuffer.h" -#include "InputReader.h" -#include "SpecialActions.h" -#include "XMLNode.h" - -using namespace std; - - -EmSpecialHandler::EmSpecialHandler () : _linewidth(0.4), _actions(0) { -} - - -/** Computes the "cut vector" that is used to compute the line shape. - * Because each line has a width > 0 the actual shape of the line is a tetragon. - * The 4 vertices can be influenced by the cut parameter c that specifies - * a horizontal, vertical or orthogonal cut of a line end. Depending on c and the - * line's slope a cut vector v can be computed that, relatively to endpoint p, denotes - * the 2 vertices of that line end: v1=p+v and v2=p-v. - * @param[in] c cut direction ('h', 'v' or 'p') - * @param[in] v direction vector of line to be drawn - * @param[in] lw width of line to be drawn - * @return the "cut vector" */ -static DPair cut_vector (char c, const DPair &v, double lw) { - if (c == 'p') - return v.ortho()/v.length() * (lw/2); - DPair cut; - if (c == 'v' && v.x() != 0) { - double slope = v.y()/v.x(); - double h = sqrt(lw*lw*(1+slope*slope)); - cut.y(0.5*h); - } - else if (v.y() != 0) { // c == 'h' - double slope = v.x()/v.y(); - double h = sqrt(lw*lw*(1+slope*slope)); - double sgn = slope < 0 ? 1.0 : -1.0; - cut.x(0.5*h*sgn); - } - return cut; -} - - -/** Creates the SVG element that will a the line. - * @param[in] p1 first endpoint in TeX point units - * @param[in] p2 second endpoint in TeX point units - * @param[in] c1 cut method of first endpoint ('h', 'v' or 'p') - * @param[in] c2 cut method of second endpoint ('h', 'v' or 'p') - * @param[in] lw line width in TeX point units */ -static void create_line (const DPair &p1, const DPair &p2, char c1, char c2, double lw, SpecialActions *actions) { - XMLElementNode *node=0; - DPair dir = p2-p1; - if (dir.x() == 0 || dir.y() == 0 || (c1 == 'p' && c2 == 'p')) { - // draw regular line - node = new XMLElementNode("line"); - node->addAttribute("x1", p1.x()); - node->addAttribute("y1", p1.y()); - node->addAttribute("x2", p2.x()); - node->addAttribute("y2", p2.y()); - node->addAttribute("stroke-width", lw); - node->addAttribute("stroke", actions->getColor().rgbString()); - // update bounding box - actions->embed(p1); - actions->embed(p2); - } - else { - // draw polygon - DPair cv1 = cut_vector(c1, dir, lw); - DPair cv2 = cut_vector(c2, dir, lw); - DPair q11 = p1+cv1, q12 = p1-cv1; - DPair q21 = p2+cv2, q22 = p2-cv2; - node = new XMLElementNode("polygon"); - ostringstream oss; - oss << q11.x() << ',' << q11.y() << ' ' - << q12.x() << ',' << q12.y() << ' ' - << q22.x() << ',' << q22.y() << ' ' - << q21.x() << ',' << q21.y(); - node->addAttribute("points", oss.str()); - if (actions->getColor() != Color::BLACK) - node->addAttribute("fill", actions->getColor().rgbString()); - // update bounding box - actions->embed(q11); - actions->embed(q12); - actions->embed(q21); - actions->embed(q22); - } - actions->appendToPage(node); -} - - -static double read_length (InputReader &in) { - struct Unit { - const char *name; - double factor; - } - units[] = { - {"pt", 1.0}, - {"pc", 12.0}, - {"in", 72.27}, - {"bp", 72.27/72}, - {"cm", 72.27/2.54}, - {"mm", 72.27/25.4}, - {"dd", 1238.0/1157}, - {"cc", 1238.0/1157*12}, - {"sp", 1.0/65536}, - {0, 0} - }; - double len = in.getDouble(); - in.skipSpace(); - for (Unit *p=units; p->name; p++) - if (in.check(p->name)) { - len *= p->factor; - break; - } - return len; -} - - -bool EmSpecialHandler::process (const char *prefix, istream &is, SpecialActions *actions) { - // em:moveto => move graphic cursor to dvi cursor - // em:lineto => draw line from graphic cursor to dvi cursor, move graphic cursor to dvi cursor - // em:linewidth => set line width to - // em:point [,[,]] => defines point as (,); if and/or is missing, - // the corresponding dvi cursor coordinate is inserted - // and are lengths - // em:line [h|v|p], [h|v|p] [,] => draws line of width from point # to point # - // point number suffixes: - // h: cut line horizontally - // v: cut line vertically - // p: cut line orthogonally to line direction (default) - // if is omitted, the global line width is used - // - // supported length units: pt, pc, in, bp, cm, mm, dd, cc, sp - // default line width: 0.4pt - - if (actions) { - _actions = actions; // save pointer to SpecialActions for later use in endPage - StreamInputBuffer ib(is, 128); - BufferInputReader in(ib); - string cmd = in.getWord(); - if (cmd == "moveto") - _pos = DPair(actions->getX(), actions->getY()); - else if (cmd == "lineto") { - DPair p(actions->getX(), actions->getY()); - create_line(_pos, p, 'p', 'p', _linewidth, actions); - _pos = p; - } - else if (cmd == "linewidth") - _linewidth = read_length(in); - else if (cmd == "point") { - DPair p(actions->getX(), actions->getY()); - int n = in.getInt(); - if (in.getPunct() == ',') { - p.x(in.getDouble()); - if (in.getPunct() == ',') - p.y(in.getDouble()); - } - _points[n] = p; - } - else if (cmd == "line") { - int n1 = in.getInt(); - int c1 = 'p'; - if (isalpha(in.peek())) - c1 = in.get(); - in.getPunct(); - int n2 = in.getInt(); - int c2 = 'p'; - if (isalpha(in.peek())) - c2 = in.get(); - double lw = _linewidth; - if (in.getPunct() == ',') - lw = read_length(in); - map::iterator it1=_points.find(n1); - map::iterator it2=_points.find(n2); - if (it1 != _points.end() && it2 != _points.end()) - create_line(it1->second, it2->second, char(c1), char(c2), lw, actions); - else { - // Line endpoints havn't necessarily to be defined before - // a line definition. If a point wasn't defined yet we push the line - // in a wait list and process the lines at the end of the page. - _lines.push_back(Line(n1, n2, char(c1), char(c2), lw)); - } - } - } - return true; -} - - -/** This method is called at the end of a DVI page. Here we have to draw all pending - * lines that are still in the line list. All line endpoints must be defined until here. */ -void EmSpecialHandler::dviEndPage () { - if (_actions) { - FORALL(_lines, list::iterator, it) { - map::iterator pit1=_points.find(it->p1); - map::iterator pit2=_points.find(it->p2); - if (pit1 != _points.end() && pit2 != _points.end()) - create_line(pit1->second, pit2->second, it->c1, it->c2, it->width, _actions); - // all lines with still undefined points are ignored - } - } - // line and point definitions are local to a page - _lines.clear(); - _points.clear(); -} - - -const char** EmSpecialHandler::prefixes () const { - static const char *pfx[] = {"em:", 0}; - return pfx; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/EmSpecialHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/EmSpecialHandler.h deleted file mode 100644 index 090d775b71d..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/EmSpecialHandler.h +++ /dev/null @@ -1,58 +0,0 @@ -/************************************************************************* -** EmSpecialHandler.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef EMSPECIALHANDLER_H -#define EMSPECIALHANDLER_H - -#include -#include -#include "Pair.h" -#include "SpecialHandler.h" - - -class EmSpecialHandler : public SpecialHandler -{ - struct Line { - Line (int pp1, int pp2, char cc1, char cc2, double w) : p1(pp1), p2(pp2), c1(cc1), c2(cc2), width(w) {} - int p1, p2; ///< point numbers of line ends - char c1, c2; ///< cut type of line ends (h, v or p) - double width; ///< line width - }; - - public: - EmSpecialHandler (); - const char* name () const {return "em";} - const char* info () const {return "line drawing statements of the emTeX special set";} - const char** prefixes () const; - bool process (const char *prefix, std::istream &in, SpecialActions *actions); - void dviEndPage (); - - protected: - bool isEndPageListener () const {return true;} - - private: - std::map _points; ///< points defined by special em:point - std::list _lines; ///< list of lines with undefined end points - double _linewidth; ///< global line width - DPair _pos; ///< current position of "graphic cursor" - SpecialActions *_actions; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileFinder.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileFinder.cpp deleted file mode 100644 index 457a9a88df1..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileFinder.cpp +++ /dev/null @@ -1,323 +0,0 @@ -/************************************************************************* -** FileFinder.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include -#include "FileFinder.h" -#include "FileSystem.h" -#include "Message.h" -#include "macros.h" - -using namespace std; - -#ifdef MIKTEX - #include "MessageException.h" - #import - using namespace MiKTeXSession2_9; - - static ISession2Ptr miktex_session; -#else - // unfortunately, the kpathsea headers are not C++-ready, - // so we have to wrap it with some ugly code - namespace KPS { - extern "C" { - #include - } - } - using namespace KPS; -#endif - -// --------------------------------------------------- -// static member variables of FileFinder::Impl - -static bool _initialized = false; -static bool _mktex_enabled = false; -static FontMap _fontmap; - -// --------------------------------------------------- - -static const char* find_file (const std::string &fname); -static const char* find_mapped_file (std::string fname); -static const char* mktex (const std::string &fname); -static void init_font_map (const char *usermapname); - - -/** Initializes the file finder. This function must be called before any other - * FileFinder function. - * @param[in] progname name of appllication using the FileFinder - * @param[in] enable_mktexmf if true, tfm and mf file generation is activated - * @param[in] usermapname optional path to mapfile; if 0, the default files are used */ -void FileFinder::init (const char *progname, bool enable_mktexmf, const char *usermapname) { - if (_initialized) - return; - - _mktex_enabled = enable_mktexmf; -#ifdef MIKTEX - if (FAILED(CoInitialize(0))) - throw MessageException("COM library could not be initialized\n"); - - HRESULT hres = miktex_session.CreateInstance(L"MiKTeX.Session"); - if (FAILED(hres)) - throw MessageException("MiKTeX.Session could not be initialized"); -#else - kpse_set_program_name(progname, NULL); - // enable tfm and mf generation (actually invoked by calls of kpse_make_tex) - kpse_set_program_enabled(kpse_tfm_format, 1, kpse_src_env); - kpse_set_program_enabled(kpse_mf_format, 1, kpse_src_env); - kpse_make_tex_discard_errors = false; // don't suppress messages of mktexFOO tools -#ifdef TEXLIVEWIN32 - texlive_gs_init(); -#endif -#endif - _initialized = true; - init_font_map(usermapname); -} - - -/** Cleans up the FileFinder. This function must be called before leaving the - * applications main() function. */ -void FileFinder::finish () { -#ifdef MIKTEX - if (_initialized) { - miktex_session = 0; // avoid automatic calling of Release() after CoUninitialize() - CoUninitialize(); - } -#endif - _initialized = false; -} - - -std::string FileFinder::version () { -#ifdef MIKTEX - bool autoinit=false; - if (!_initialized) { - init("", false); - autoinit = true; - } - - try { - MiKTeXSetupInfo info = miktex_session->GetMiKTeXSetupInfo(); - _bstr_t version = info.version; - if (autoinit) - FileFinder::finish(); - return string(version); - } - catch (_com_error e) { - if (autoinit) - FileFinder::finish(); - throw MessageException((const char*)e.Description()); - } -#else - if (const char *v = strrchr(KPSEVERSION, ' ')) - return v+1; -#endif - return "unknown"; -} - - -/** Determines filetype by the filename extension and calls kpse_find_file - * to actually look up the file. - * @param[in] fname name of file to look up - * @return file path on success, 0 otherwise */ -static const char* find_file (const std::string &fname) { - if (!_initialized) - return 0; - - size_t pos = fname.rfind('.'); - if (pos == std::string::npos) - return 0; // no extension => no search - const std::string ext = fname.substr(pos+1); // file extension -#ifdef MIKTEX - _bstr_t path; - static string ret; - try { - if (miktex_session->FindFile(fname.c_str(), path.GetAddress())) { - ret = path; - return ret.c_str(); - } - } - catch (_com_error e) { - throw MessageException((const char*)e.Description()); - } - return 0; - -#else - static std::string buf; - -#ifdef TEXLIVEWIN32 - if (ext == "exe") { - // lookup exe files in directory where dvisvgm is located - if (const char *path = kpse_var_value("SELFAUTOLOC")) { - buf = std::string(path) + "/" + fname; - return FileSystem::exists(buf.c_str()) ? buf.c_str() : 0; - } - return 0; - } -#endif - - static std::map types; - if (types.empty()) { - types["tfm"] = kpse_tfm_format; - types["pfb"] = kpse_type1_format; - types["vf"] = kpse_vf_format; - types["mf"] = kpse_mf_format; - types["ttf"] = kpse_truetype_format; - types["map"] = kpse_fontmap_format; - types["sty"] = kpse_tex_format; - types["enc"] = kpse_enc_format; - types["pro"] = kpse_tex_ps_header_format; - } - std::map::iterator it = types.find(ext.c_str()); - if (it == types.end()) - return 0; - - if (char *path = kpse_find_file(fname.c_str(), it->second, 0)) { - // In the current version of libkpathsea, each call of kpse_find_file produces - // a memory leak since the path buffer is not freed. I don't think we can do - // anything against it here... - buf = path; - std::free(path); - return buf.c_str(); - } - return 0; -#endif -} - - -/** Checks whether the given file is mapped to a different name and if the - * file can be found under this name. - * @param[in] fname name of file to look up - * @param[in] fontmap font mappings - * @return file path on success, 0 otherwise */ -static const char* find_mapped_file (std::string fname) { - size_t pos = fname.rfind('.'); - if (pos == std::string::npos) - return 0; - const std::string ext = fname.substr(pos+1); // file extension - const std::string base = fname.substr(0, pos); - const char *mapped_name = _fontmap.lookup(base); - if (mapped_name) { - fname = std::string(mapped_name) + "." + ext; - const char *path; - if ((path = find_file(fname)) || (path = mktex(fname))) - return path; - } - return 0; -} - - -/** Runs external mktexFOO tool to create missing tfm or mf file. - * @param[in] fname name of file to build - * @return file path on success, 0 otherwise */ -static const char* mktex (const std::string &fname) { - if (!_initialized) - return 0; - - size_t pos = fname.rfind('.'); - if (!_mktex_enabled || pos == std::string::npos) - return 0; - - std::string ext = fname.substr(pos+1); // file extension - if (ext != "tfm" && ext != "mf") - return 0; - - std::string base = fname.substr(0, pos); - const char *path = 0; -#ifdef MIKTEX - // maketfm and makemf are located in miktex/bin which is in the search PATH - string toolname = (ext == "tfm" ? "miktex-maketfm" : "miktex-makemf"); - system((toolname+".exe "+fname).c_str()); - path = find_file(fname); -#else - kpse_file_format_type type = (ext == "tfm" ? kpse_tfm_format : kpse_mf_format); - path = kpse_make_tex(type, fname.c_str()); -#endif - return path; -} - - -/** Initializes a font map by reading the map file(s). - * @param[in,out] fontmap font map to be initialized */ -static void init_font_map (const char *usermapname) { - bool additional = (usermapname && *usermapname == '+'); // read additional map entries? - if (additional) - usermapname++; - if (usermapname) { - // try to read user font map file - const char *mappath = 0; - if (!_fontmap.read(usermapname)) { - if ((mappath = find_file(usermapname))) - _fontmap.read(mappath); - else - Message::wstream(true) << "map file '" << usermapname << "' not found\n"; - } - } - if (!usermapname || additional) { - const char *mapfiles[] = {"ps2pk.map", "dvipdfm.map", "psfonts.map", 0}; - const char *mf=0; - for (const char **p=mapfiles; *p && !mf; p++) - if ((mf = find_file(*p))!=0) - _fontmap.read(mf); - if (!mf) - Message::wstream(true) << "none of the default map files could be found"; - } -} - - -/** Searches a file in the TeX directory tree. - * If the file doesn't exist, maximal two further steps are applied - * (if "extended" is true): - * - checks whether the filename is mapped to a different name and returns - * the path to that name - * - in case of tfm or mf files: invokes the external mktextfm/mktexmf tool - * to create the missing file - * @param[in] fname name of file to look up - * @param[in] extended if true, use fontmap lookup and mktexFOO calls - * @return path to file on success, 0 otherwise */ -const char* FileFinder::lookup (const std::string &fname, bool extended) { - const char *path; - if ((path = find_file(fname)) || (extended && ((path = find_mapped_file(fname)) || (path = mktex(fname))))) - return path; - return 0; -} - - -/** Returns the path to the corresponding encoding file for a given font file. - * @param[in] fname name of the font file - * @return path to encoding file on success, 0 otherwise */ -const char* FileFinder::lookupEncFile (std::string fname) { - if (const char *encname = lookupEncName(fname)) { - fname = std::string(encname) + ".enc"; - const char *path = find_file(fname); - if (path) - return path; - } - return 0; -} - - -const char* FileFinder::lookupEncName (std::string fname) { - size_t pos = fname.rfind('.'); - if (pos != std::string::npos) - fname = fname.substr(0, pos); // strip extension - return _fontmap.encoding(fname); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileFinder.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileFinder.h deleted file mode 100644 index 6dcdf335e1c..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileFinder.h +++ /dev/null @@ -1,37 +0,0 @@ -/************************************************************************* -** FileFinder.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef KPSFILEFINDER_H -#define KPSFILEFINDER_H - -#include -#include "FontMap.h" - -struct FileFinder -{ - static void init (const char *progname, bool enable_mktexmf, const char *usermapname=0); - static void finish (); - static std::string version (); - static const char* lookup (const std::string &fname, bool extended=true); - static const char* lookupEncFile (std::string fontname); - static const char* lookupEncName (std::string fname); -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FilePath.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FilePath.cpp deleted file mode 100644 index 3875fdc21b8..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FilePath.cpp +++ /dev/null @@ -1,256 +0,0 @@ -/************************************************************************* -** FilePath.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include "FilePath.h" -#include "FileSystem.h" -#include "MessageException.h" -#include "macros.h" - -using namespace std; - - -/** Removes redundant slashes from a given path. */ -static string& single_slashes (string &str) { - size_t pos=0; - while ((pos = str.find("//", pos)) != string::npos) - str.replace(pos, 2, "/"); - return str; -} - - -#ifdef __WIN32__ -static char strip_drive_letter (string &path) { - char letter = 0; - if (path.length() >= 2 && path[1] == ':' && isalpha(path[0])) { - letter = tolower(path[0]); - path.erase(0, 2); - } - return letter; -} - - -static char adapt_current_path (string &path, char target_drive) { - if (char current_drive = strip_drive_letter(path)) { - if (target_drive != current_drive) { - if (target_drive == 0) - target_drive = current_drive; - if (path.empty() || path[0] != '/') { - if (FileSystem::chdir((string(1, target_drive) + ":").c_str())) { - path.insert(0, FileSystem::getcwd()+"/"); - strip_drive_letter(path); - } - else - throw MessageException("drive " + string(1, target_drive) + ": not accessible"); - } - } - } - return target_drive; -} - - -static void tolower (string &str) { - for (size_t i=0; i < str.length(); ++i) - str[i] = tolower(str[i]); -} -#endif - - -/** Constructs a FilePath object from a given path. Relative paths are - * relative to the current working directory. - * @param[in] path absolute or relative path to a file or directory */ -FilePath::FilePath (const string &path) { - init(path, !FileSystem::isDirectory(path.c_str()), FileSystem::getcwd()); -} - - -/** Constructs a FilePath object. - * @param[in] path absolute or relative path to a file or directory - * @param[in] isfile true if 'path' references a file, false if a directory is referenced - * @param[in] current_dir if 'path' is a relative path expression it will be related to 'current_dir' */ -FilePath::FilePath (const string &path, bool isfile, string current_dir) { - init(path, isfile, current_dir); -} - - -/** Initializes a FilePath object. This method should be called by the constructors only. - * @param[in] path absolute or relative path to a file or directory - * @param[in] isfile true if 'path' references a file, false if a directory is referenced - * @param[in] current_dir if 'path' is a relative path expression it will be related to 'current_dir' */ -void FilePath::init (string path, bool isfile, string current_dir) { - single_slashes(path); - single_slashes(current_dir); -#ifdef __WIN32__ - tolower(path); - _drive = strip_drive_letter(path); -#endif - if (isfile) { - size_t pos = path.rfind('/'); - _fname = path.substr((pos == string::npos) ? 0 : pos+1); - if (pos != string::npos) - path.erase(pos); - else - path.clear(); - } - if (current_dir.empty()) - current_dir = FileSystem::getcwd(); -#ifdef __WIN32__ - tolower(current_dir); - _drive = adapt_current_path(current_dir, _drive); -#endif - if (!path.empty()) { - if (path[0] == '/') - current_dir.clear(); - else if (current_dir[0] != '/') - current_dir = "/"; - else { - FilePath curr(current_dir, false, "/"); - current_dir = curr.absolute(); -#ifdef __WIN32__ - adapt_current_path(current_dir, _drive); -#endif - } - } - path.insert(0, current_dir + "/"); - string elem; - FORALL (path, string::const_iterator, it) { - if (*it == '/') { - add(elem); - elem.clear(); - } - else - elem += *it; - } - add(elem); -} - - -/** Adds a location step to the current path. */ -void FilePath::add (const string &dir) { - if (dir == ".." && !_dirs.empty()) - _dirs.pop_back(); - else if (dir.length() > 0 && dir != ".") - _dirs.push_back(dir); -} - - -/** Returns the suffix of the filename. If FilePath represents the - * location of a directory (and not of a file) an empty string - * is returned. */ -string FilePath::suffix () const { - size_t start = 0; - // ignore leading dots - while (start < _fname.length() && _fname[start] == '.') - start++; - string sub = _fname.substr(start); - size_t pos = sub.rfind('.'); - if (pos != string::npos && pos < sub.length()-1) - return sub.substr(pos+1); - return ""; -} - - -/** Changes the suffix of the filename. If FilePath represents the - * location of a directory (and not of a file) nothing happens. - * @param[in] s new suffix */ -void FilePath::suffix (const string &s) { - if (!_fname.empty()) { - string current_suffix = suffix(); - if (!current_suffix.empty()) - _fname.erase(_fname.length()-current_suffix.length()-1); - _fname += "."+s; - } -} - - -/** Returns the filename without suffix. - * Example: FilePath("/a/b/c.def", true) == "c" */ -string FilePath::basename () const { - if (!_fname.empty()) { - size_t len = suffix().length(); - if (len > 0) - len++; // strip dot too - return _fname.substr(0, _fname.length()-len); - } - return ""; -} - - -/** Returns the absolute path string of this FilePath. - * @param[in] with_filename if false, the filename is omitted - * @return the absolute path string */ -string FilePath::absolute (bool with_filename) const { - string path; - FORALL (_dirs, ConstIterator, it) { - path += "/" + *it; - } - if (path.empty()) - path = "/"; - if (with_filename && !_fname.empty()) - path += "/"+_fname; -#ifdef __WIN32__ - if (_drive) - path.insert(0, string(1, _drive) + ":"); -#endif - return single_slashes(path); -} - - -/** Returns a path string of this FilePath relative to reldir. If we wanted to - * navigate from /a/b/c/d to /a/b/e/f using the shell command "cd", we could do that - * with the relative path argument: "cd ../../e/f". This function returns such a relative - * path. Example: FilePath("/a/b/e/f").relative("/a/b/c/d") => "../../e/f". - * @param[in] reldir absolute path to a directory - * @param[in] with_filename if false, the filename is omitted - * @return the relative path string */ -string FilePath::relative (string reldir, bool with_filename) const { - if (reldir.empty()) - reldir = FileSystem::getcwd(); -#ifdef __WIN32__ - adapt_current_path(reldir, _drive); -#endif - if (reldir[0] != '/') - return absolute(); - FilePath rel(reldir, false); - string path; -#ifdef __WIN32__ - if (rel._drive && rel._drive != _drive) - path += string(1, _drive) + ":"; -#endif - ConstIterator i = _dirs.begin(); - ConstIterator j = rel._dirs.begin(); - while (i != _dirs.end() && j != rel._dirs.end() && *i == *j) - ++i, ++j; - for (; j != rel._dirs.end(); ++j) - path += "../"; - for (; i != _dirs.end(); ++i) - path += *i + "/"; - if (!path.empty()) - path.erase(path.length()-1, 1); // remove trailing slash - if (with_filename && !_fname.empty()) { - if (!path.empty() && path != "/") - path += "/"; - path += _fname; - } - if (path.empty()) - path = "."; - return single_slashes(path); -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FilePath.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FilePath.h deleted file mode 100644 index 4702cb8d969..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FilePath.h +++ /dev/null @@ -1,59 +0,0 @@ -/************************************************************************* -** FilePath.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef FILEPATH_H -#define FILEPATH_H - -#include -#include - -class FilePath -{ - typedef std::vector Directories; - typedef Directories::iterator Iterator; - typedef Directories::const_iterator ConstIterator; - public: - FilePath (const std::string &path); - FilePath (const std::string &path, bool isfile, std::string current_dir=""); - std::string absolute (bool with_filename=true) const; - std::string relative (std::string reldir="", bool with_filename=true) const; - std::string basename () const; - std::string suffix () const; - void suffix (const std::string &s); - size_t depth () const {return _dirs.size();} - bool isFile () const {return !_fname.empty();} - bool empty () const {return _dirs.empty() && _fname.empty();} - const std::string& filename () const {return _fname;} - void filename (const std::string &fname) {_fname = fname;} - - protected: - void init (std::string path, bool isfile, std::string current_dir); - void add (const std::string &elem); - - private: - Directories _dirs; - std::string _fname; -#ifdef __WIN32__ - char _drive; -#endif -}; - - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileSystem.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileSystem.cpp deleted file mode 100644 index f53b84b42b4..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileSystem.cpp +++ /dev/null @@ -1,333 +0,0 @@ -/************************************************************************* -** FileSystem.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include "FileSystem.h" -#include "macros.h" - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef HAVE_UNISTD_H -#include -#endif - - -using namespace std; - -#ifdef __WIN32__ - #include - #include - const char *FileSystem::DEVNULL = "nul"; - const char FileSystem::PATHSEP = '\\'; - #define unlink _unlink -#else - #include - #include - #include - #include - const char *FileSystem::DEVNULL = "/dev/null"; - const char FileSystem::PATHSEP = '/'; -#endif - - -bool FileSystem::remove (const string &fname) { - return unlink(fname.c_str()) == 0; -} - - -/** Copies a file. - * @param[in] src path of file to copy - * @param[in] dest path of target file - * @param[in] remove_src remove file 'src' if true - * @return true on success */ -bool FileSystem::copy (const string &src, const string &dest, bool remove_src) { - ifstream ifs(src.c_str(), ios::in|ios::binary); - ofstream ofs(dest.c_str(), ios::out|ios::binary); - if (ifs && ofs) { - ofs << ifs.rdbuf(); - if (!ifs.fail() && !ofs.fail() && remove_src) { - ofs.close(); - ifs.close(); - return remove(src); - } - else - return !remove_src; - } - return false; -} - - -bool FileSystem::rename (const string &oldname, const string &newname) { - return ::rename(oldname.c_str(), newname.c_str()) == 0; -} - - -UInt64 FileSystem::filesize (const string &fname) { -#ifdef __WIN32__ - // unfortunately, stat doesn't work properly under Windows - // so we have to use this freaky code - WIN32_FILE_ATTRIBUTE_DATA attr; - GetFileAttributesExA(fname.c_str(), GetFileExInfoStandard, &attr); - return (static_cast(attr.nFileSizeHigh) << (8*sizeof(attr.nFileSizeLow))) | attr.nFileSizeLow; -#else - struct stat attr; - return (stat(fname.c_str(), &attr) == 0) ? attr.st_size : 0; -#endif -} - - -string FileSystem::adaptPathSeperators (string path) { - for (size_t i=0; i < path.length(); i++) - if (path[i] == PATHSEP) - path[i] = '/'; - return path; -} - - -string FileSystem::getcwd () { - char buf[1024]; -#ifdef __WIN32__ - return adaptPathSeperators(_getcwd(buf, 1024)); -#else - return ::getcwd(buf, 1024); -#endif -} - - -/** Changes the work directory. - * @param[in] path to new work directory - * @return true on success */ -bool FileSystem::chdir (const char *dir) { - bool success = false; - if (dir) { -#ifdef __WIN32__ - success = (_chdir(dir) == 0); -#else - success = (chdir(dir) == 0); -#endif - } - return success; -} - - -/** Returns the user's home directory. */ -const char* FileSystem::userdir () { -#ifdef __WIN32__ - const char *drive=getenv("HOMEDRIVE"); - const char *path=getenv("HOMEPATH"); - if (drive && path) { - static string ret = string(drive)+path; - if (!ret.empty()) - return ret.c_str(); - } - return 0; -#else - const char *dir=getenv("HOME"); - if (!dir) { - if (const char *user=getenv("USER")) { - if (struct passwd *pw=getpwnam(user)) - dir = pw->pw_dir; - } - } - return dir; -#endif -} - - -/** Private wrapper function for mkdir: creates a single folder. - * @param[in] dir folder name - * @return true on success */ -static bool s_mkdir (const char *dir) { - bool success = true; - if (!FileSystem::exists(dir)) { -#ifdef __WIN32__ - success = (_mkdir(dir) == 0); -#else - success = (mkdir(dir, 0776) == 0); -#endif - } - return success; -} - - -static bool inline s_rmdir (const char *dir) { -#ifdef __WIN32__ - return (_rmdir(dir) == 0); -#else - return (rmdir(dir) == 0); -#endif -} - - -/** Removes leading and trailing whitespace from a string. */ -static string trim (const string &str) { - int first=0, last=str.length()-1; - while (isspace(str[first])) - first++; - while (isspace(str[last])) - last--; - return str.substr(first, last-first+1); -} - - -/** Creates a new folder relative to the current work directory. If necessary, - * the parent folders are also created. - * @param[in] dir single folder name or path to folder - * @return true if folder(s) could be created */ -bool FileSystem::mkdir (const char *dir) { - bool success = false; - if (dir) { - success = true; - const string dirstr = adaptPathSeperators(trim(dir)); - for (size_t pos=1; success && (pos = dirstr.find('/', pos)) != string::npos; pos++) - success &= s_mkdir(dirstr.substr(0, pos).c_str()); - success &= s_mkdir(dirstr.c_str()); - } - return success; -} - - -/** Removes a directory and its contents. - * @param[in] dirname path to directory - * @return true on success */ -bool FileSystem::rmdir (const char *dirname) { - bool ok = false; - if (dirname && isDirectory(dirname)) { - ok = true; -#ifdef __WIN32__ - string pattern = string(dirname) + "/*"; - WIN32_FIND_DATA data; - HANDLE h = FindFirstFile(pattern.c_str(), &data); - bool ready = (h == INVALID_HANDLE_VALUE); - while (!ready && ok) { - const char *fname = data.cFileName; - string path = string(dirname) + "/" + fname; - if (isDirectory(path.c_str())) { - if (strcmp(fname, ".") != 0 && strcmp(fname, "..") != 0) - ok = rmdir(path.c_str()) && s_rmdir(path.c_str()); - } - else if (isFile(path.c_str())) - ok = remove(path); - else - ok = false; - ready = !FindNextFile(h, &data); - } - FindClose(h); -#else - if (DIR *dir = opendir(dirname)) { - struct dirent *ent; - while ((ent = readdir(dir)) && ok) { - const char *fname = ent->d_name; - string path = string(fname) + "/" + fname; - if (isDirectory(path.c_str())) { - if (strcmp(fname, ".") != 0 && strcmp(fname, "..") != 0) - ok = rmdir(path.c_str()) && s_rmdir(path.c_str()); - } - else if (isFile(path.c_str())) - ok = remove(path); - else - ok = false; - } - closedir(dir); - } -#endif - ok = s_rmdir(dirname); - } - return ok; -} - - -/** Checks if a file or directory exits. */ -bool FileSystem::exists (const char *fname) { - if (!fname) - return false; -#ifdef __WIN32__ - return GetFileAttributes(fname) != INVALID_FILE_ATTRIBUTES; -#else - struct stat attr; - return stat(fname, &attr) == 0; -#endif -} - - -/** Returns true if 'fname' references a directory. */ -bool FileSystem::isDirectory (const char *fname) { - if (!fname) - return false; -#ifdef __WIN32__ - return GetFileAttributes(fname) & FILE_ATTRIBUTE_DIRECTORY; -#else - struct stat attr; - return stat(fname, &attr) == 0 && S_ISDIR(attr.st_mode); -#endif -} - - -/** Returns true if 'fname' references a file. */ -bool FileSystem::isFile (const char *fname) { - if (!fname) - return false; -#ifdef __WIN32__ - ifstream ifs(fname); - return ifs; -#else - struct stat attr; - return stat(fname, &attr) == 0 && S_ISREG(attr.st_mode); -#endif -} - - -int FileSystem::collect (const char *dirname, vector &entries) { - entries.clear(); -#ifdef __WIN32__ - string pattern = string(dirname) + "/*"; - WIN32_FIND_DATA data; - HANDLE h = FindFirstFile(pattern.c_str(), &data); - bool ready = (h == INVALID_HANDLE_VALUE); - while (!ready) { - string fname = data.cFileName; - string path = string(dirname)+"/"+fname; - string typechar = isFile(path.c_str()) ? "f" : isDirectory(path.c_str()) ? "d" : "?"; - if (fname != "." && fname != "..") - entries.push_back(typechar+fname); - ready = !FindNextFile(h, &data); - } - FindClose(h); -#else - if (DIR *dir = opendir(dirname)) { - struct dirent *ent; - while ((ent = readdir(dir))) { - string fname = ent->d_name; - string path = string(dirname)+"/"+fname; - string typechar = isFile(path.c_str()) ? "f" : isDirectory(path.c_str()) ? "d" : "?"; - if (fname != "." && fname != "..") - entries.push_back(typechar+fname); - } - closedir(dir); - } -#endif - return entries.size(); -} - - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileSystem.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileSystem.h deleted file mode 100644 index b53b42b09a8..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FileSystem.h +++ /dev/null @@ -1,48 +0,0 @@ -/************************************************************************* -** FileSystem.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef FILESYSTEM_H -#define FILESYSTEM_H - -#include -#include -#include "types.h" - -struct FileSystem -{ - static bool remove (const std::string &fname); - static bool rename (const std::string &oldname, const std::string &newname); - static bool copy (const std::string &src, const std::string &dest, bool remove_src=false); - static UInt64 filesize (const std::string &fname); - static std::string adaptPathSeperators (std::string path); - static std::string getcwd (); - static bool chdir (const char *dir); - static bool exists (const char *file); - static bool mkdir (const char *dir); - static bool rmdir (const char *fname); - static int collect (const char *dirname, std::vector &entries); - static bool isDirectory (const char *fname); - static bool isFile (const char *fname); - static const char* userdir (); - static const char* DEVNULL; - static const char PATHSEP; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Font.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Font.cpp deleted file mode 100644 index ac0cd0cf60f..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Font.cpp +++ /dev/null @@ -1,392 +0,0 @@ -/************************************************************************* -** Font.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include -#include "FileSystem.h" -#include "Font.h" -#include "FontEngine.h" -#include "FileFinder.h" -#include "GFGlyphTracer.h" -#include "Glyph.h" -#include "Message.h" -#include "MetafontWrapper.h" -#include "TFM.h" -#include "VFReader.h" -#include "macros.h" -#include "FileSystem.h" -#include "SignalHandler.h" -#include "SVGTree.h" - -using namespace std; - - -/** Returns true if 'unicode' is a valid unicode value in XML documents. - * XML version 1.0 doesn't allow various unicode character references - * ( for example). */ -static bool valid_unicode (UInt32 unicode) { - UInt32 ranges[] = { - 0x0000, 0x0020, - 0x007f, 0x0084, - 0x0086, 0x009f, - 0xfdd0, 0xfddf - }; - for (int i=0; i < 4; i++) - if (unicode >= ranges[2*i] && unicode <= ranges[2*i+1]) - return false; - return true; -} - - -UInt32 Font::unicode (UInt32 c) const { - // @@ this should be optimized :-) - return valid_unicode(c) ? c : 0x3400+c; -} - - -/////////////////////////////////////////////////////////////////////////////////////// - - -TFMFont::TFMFont (string name, UInt32 cs, double ds, double ss) - : tfm(0), fontname(name), checksum(cs), dsize(ds), ssize(ss) -{ -} - - -TFMFont::~TFMFont () { - delete tfm; -} - - -/** Returns a font metrics object for the current font. - * @throw FontException if TFM file can't be found */ -const TFM* TFMFont::getTFM () const { - if (!tfm) { - tfm = TFM::createFromFile(fontname.c_str()); - if (!tfm) - throw FontException("can't find "+fontname+".tfm"); - } - return tfm; -} - - -double TFMFont::charWidth (int c) const {return getTFM()->getCharWidth(c);} -double TFMFont::charDepth (int c) const {return getTFM()->getCharDepth(c);} -double TFMFont::charHeight (int c) const {return getTFM()->getCharHeight(c);} -double TFMFont::italicCorr (int c) const {return getTFM()->getItalicCorr(c);} - -////////////////////////////////////////////////////////////////////////////// - -// static class variables -bool PhysicalFont::KEEP_TEMP_FILES = false; -const char *PhysicalFont::CACHE_PATH = 0; -double PhysicalFont::METAFONT_MAG = 4; -FontCache PhysicalFont::_cache; - - - -Font* PhysicalFont::create (string name, UInt32 checksum, double dsize, double ssize, PhysicalFont::Type type) { - return new PhysicalFontImpl(name, checksum, dsize, ssize, type); -} - - -const char* PhysicalFont::path () const { - string ext; - switch (type()) { - case PFB: ext = "pfb"; break; - case TTF: ext = "ttf"; break; - case MF : ext = "mf"; break; - } - return FileFinder::lookup(name()+"."+ext); -} - - -/** Returns the number of units per EM. The EM square is the virtual area a glyph is designed on. - * All coordinates used to specify portions of the glyph are relative to the origin (0,0) at the - * lower left corner of this square, while the upper right corner is located at (m,m), where m - * is an integer value defined with the font, and returned by this function. */ -int PhysicalFont::unitsPerEm() const { - if (type() == MF) - return 1000; - FontEngine::instance().setFont(*this); - return FontEngine::instance().getUnitsPerEM(); -} - - -int PhysicalFont::hAdvance () const { - if (type() == MF) - return 0; - FontEngine::instance().setFont(*this); - return FontEngine::instance().getHAdvance(); -} - - -double PhysicalFont::hAdvance (int c) const { - if (type() == MF) - return unitsPerEm()*charWidth(c)/designSize(); - FontEngine::instance().setFont(*this); - if (FontEncoding *enc = encoding()) - return FontEngine::instance().getHAdvance(enc->getEntry(c)); - return FontEngine::instance().getHAdvance(c); -} - - -string PhysicalFont::glyphName (int c) const { - if (type() == MF) - return ""; - FontEngine::instance().setFont(*this); - if (FontEncoding *enc = encoding()) - return enc->getEntry(c); - return FontEngine::instance().getGlyphName(c); -} - - -int PhysicalFont::ascent () const { - if (type() == MF) - return 0; - FontEngine::instance().setFont(*this); - return FontEngine::instance().getAscender(); -} - - -int PhysicalFont::descent () const { - if (type() == MF) - return 0; - FontEngine::instance().setFont(*this); - return FontEngine::instance().getDescender(); -} - - -/** 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 - * @param[in] cb optional callback object for tracer class - * @return true if outline could be computed */ -bool PhysicalFont::getGlyph (int c, GraphicPath &glyph, GFGlyphTracer::Callback *cb) const { - if (type() == MF) { - const Glyph *cached_glyph=0; - if (CACHE_PATH) { - _cache.write(CACHE_PATH); - _cache.read(name().c_str(), CACHE_PATH); - cached_glyph = _cache.getGlyph(c); - } - if (cached_glyph) { - glyph = *cached_glyph; - return true; - } - else { - string gfname; - if (createGF(gfname)) { - try { - GFGlyphTracer tracer(gfname, unitsPerEm()/getTFM()->getDesignSize(), cb); - tracer.setGlyph(glyph); - tracer.executeChar(c); - glyph.closeOpenSubPaths(); - if (CACHE_PATH) - _cache.setGlyph(c, glyph); - return true; - } - catch (GFException &e) { - // @@ print error message - } - } - else { - Message::wstream(true) << "failed creating " << name() << ".gf\n"; - } - } - } - else { // PFB or TTF - bool ok=true; - FontEngine::instance().setFont(*this); - if (FontEncoding *enc = encoding()) { - if (const char *encname = enc->getEntry(c)) - ok = FontEngine::instance().traceOutline(encname, glyph, false); - } - else - ok = FontEngine::instance().traceOutline((unsigned char)c, glyph, false); - glyph.closeOpenSubPaths(); - return ok; - } - return false; -} - - -/** Creates a GF file for this font object. - * @param[out] gfname name of GF font file - * @return true on success */ -bool PhysicalFont::createGF (string &gfname) const { - SignalHandler::instance().check(); - gfname = name()+".gf"; - MetafontWrapper mf(name()); - bool ok = mf.make("ljfour", METAFONT_MAG); // call Metafont if necessary - return ok && mf.success() && getTFM(); -} - - -/** Traces all glyphs of the current font and stores them in the cache. If caching is disabled, nothing happens. - * @param[in] includeCached if true, glyphs already cached are traced again - * @param[in] cb optional callback methods called by the tracer - * @return number of glyphs traced */ -int PhysicalFont::traceAllGlyphs (bool includeCached, GFGlyphTracer::Callback *cb) const { - int count = 0; - if (type() == MF && CACHE_PATH) { - if (const TFM *tfm = getTFM()) { - int fchar = tfm->firstChar(); - int lchar = tfm->lastChar(); - string gfname; - Glyph glyph; - if (createGF(gfname)) { - _cache.read(name().c_str(), CACHE_PATH); - GFGlyphTracer tracer(gfname, unitsPerEm()/getTFM()->getDesignSize(), cb); - tracer.setGlyph(glyph); - for (int i=fchar; i <= lchar; i++) { - if (includeCached || !_cache.getGlyph(i)) { - glyph.newpath(); - tracer.executeChar(i); - glyph.closeOpenSubPaths(); - _cache.setGlyph(i, glyph); - ++count; - } - } - _cache.write(CACHE_PATH); - } - } - } - return count; -} - - -/** Computes the exact bounding box of a glyph. - * @param[in] c character code of the glyph - * @param[out] bbox the computed bounding box - * @param[in] optional calback object forwarded to the tracer - * @return true if the box could be computed successfully */ -bool PhysicalFont::getGlyphBox(int c, BoundingBox& bbox, GFGlyphTracer::Callback* cb) const { - Glyph glyph; - if (getGlyph(c, glyph, cb)) { - glyph.computeBBox(bbox); - double s = scaledSize()/unitsPerEm(); - bbox.scale(s, s); - return true; - } - return false; -} - - -Font* VirtualFont::create (string name, UInt32 checksum, double dsize, double ssize) { - return new VirtualFontImpl(name, checksum, dsize, ssize); -} - - -////////////////////////////////////////////////////////////////////////////// - - -PhysicalFontImpl::PhysicalFontImpl (string name, UInt32 cs, double ds, double ss, PhysicalFont::Type type) - : TFMFont(name, cs, ds, ss), _filetype(type), _charmap(0) -{ -} - - -PhysicalFontImpl::~PhysicalFontImpl () { - if (CACHE_PATH) - _cache.write(CACHE_PATH); - if (!KEEP_TEMP_FILES) - tidy(); - delete _charmap; -} - - -UInt32 PhysicalFontImpl::unicode (UInt32 c) const { - if (type() == MF) - return Font::unicode(c); - - if (_charmap == 0) { - FontEngine &fe = FontEngine::instance(); - if (fe.setFont(*this)) { - _charmap = new map; - fe.buildTranslationMap(*_charmap); - } - } - typedef map::const_iterator ConstIterator; - ConstIterator it = _charmap->find(c); - if (it != _charmap->end()) - return it->second; - - // No unicode equivalent found in font file. - // Now we should look for a smart alternative but at the moment - // it's sufficient to simply choose a valid unused unicode value... - map reverse_map; - FORALL(*_charmap, ConstIterator, it) - reverse_map[it->second] = it->first; - // can we use charcode itself as unicode replacement? - if (valid_unicode(c) && (reverse_map.empty() || reverse_map.find(c) != reverse_map.end())) - return c; - return 0x3400+c; -} - - -void PhysicalFontImpl::tidy () const { - if (type() == MF) { - const char *ext[] = {"gf", "tfm", "log", 0}; - for (const char **p=ext; *p; ++p) { - if (FileSystem::exists((name()+"."+(*p)).c_str())) - FileSystem::remove(name()+"."+(*p)); - } - } -} - - -////////////////////////////////////////////////////////////////////////////// - -VirtualFontImpl::VirtualFontImpl (string name, UInt32 cs, double ds, double ss) - : TFMFont(name, cs, ds, ss) -{ -} - - -VirtualFontImpl::~VirtualFontImpl () { - // delete dvi vectors received by VFReaderAction - for (map::iterator i=charDefs.begin(); i != charDefs.end(); ++i) - delete i->second; -} - - -const char* VirtualFontImpl::path () const { - return FileFinder::lookup(name()+".vf"); -} - - -void VirtualFontImpl::assignChar (UInt32 c, DVIVector *dvi) { - if (dvi) { - if (charDefs.find(c) == charDefs.end()) - charDefs[c] = dvi; - else - delete dvi; - } -} - - -const vector* VirtualFontImpl::getDVI (int c) const { - map::const_iterator it = charDefs.find(c); - return (it == charDefs.end() ? 0 : it->second); -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Font.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Font.h deleted file mode 100644 index adddcb98458..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Font.h +++ /dev/null @@ -1,260 +0,0 @@ -/************************************************************************* -** Font.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef FONT_H -#define FONT_H - -#include -#include -#include -#include "FontCache.h" -#include "FontEncoding.h" -#include "GFGlyphTracer.h" -#include "Glyph.h" -#include "GraphicPath.h" -#include "MessageException.h" -#include "VFActions.h" -#include "VFReader.h" -#include "types.h" - -class TFM; - - -/** Abstract base for all font classes. */ -struct Font -{ - virtual ~Font () {} - virtual Font* clone (double ds, double sc) const =0; - virtual const Font* uniqueFont () const =0; - virtual std::string name () const =0; - virtual double designSize () const =0; - virtual double scaledSize () const =0; - virtual double scaleFactor () const {return scaledSize()/designSize();} - virtual double charWidth (int c) const =0; - virtual double charDepth (int c) const =0; - virtual double charHeight (int c) const =0; - virtual double italicCorr (int c) const =0; - virtual const TFM* getTFM () const =0; - virtual const char* path () const =0; - virtual FontEncoding* encoding () const {return FontEncoding::encoding(name());} - virtual bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=0) const =0; - virtual UInt32 unicode (UInt32 c) const; - virtual void tidy () const {} -}; - - -/** Empty font without any glyphs. Instances of this class are used - * if no physical or virtual font file can be found. - * The metric values returned by the member functions are based on cmr10. */ -struct EmptyFont : public Font -{ - public: - EmptyFont (std::string name) : fontname(name) {} - Font* clone (double ds, double sc) const {return new EmptyFont(*this);} - const Font* uniqueFont () const {return this;} - std::string name () const {return fontname;} - double designSize () const {return 10;} // cmr10 design size in pt - double scaledSize () const {return 10;} // cmr10 scaled size in pt - double charWidth (int c) const {return 9.164;} // width of cmr10's 'M' in pt - double charHeight (int c) const {return 6.833;} // height of cmr10's 'M' in pt - double charDepth (int c) const {return 0;} - double italicCorr (int c) const {return 0;} - const TFM* getTFM () const {return 0;} - const char* path () const {return 0;} - bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=0) const {return false;} - - private: - std::string fontname; -}; - - -/** Interface for all physical fonts. */ -class PhysicalFont : public virtual Font -{ - public: - enum Type {MF, PFB, TTF}; - static Font* create (std::string name, UInt32 checksum, double dsize, double ssize, PhysicalFont::Type type); - virtual Type type () const =0; - virtual bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=0) const; - virtual bool getGlyphBox (int c, BoundingBox &bbox, GFGlyphTracer::Callback *cb=0) const; - virtual int hAdvance () const; - virtual double hAdvance (int c) const; - std::string glyphName (int c) const; - virtual int unitsPerEm () const; - virtual int ascent () const; - virtual int descent () const; - virtual int traceAllGlyphs (bool includeCached, GFGlyphTracer::Callback *cb=0) const; - const char* path () const; - - protected: - bool createGF (std::string &gfname) const; - - public: - static bool KEEP_TEMP_FILES; - static const char *CACHE_PATH; ///< path to cache directory (0 if caching is disabled) - static double METAFONT_MAG; ///< magnification factor for Metafont calls - - protected: - static FontCache _cache; -}; - - -/** Interface for all virtual fonts. */ -class VirtualFont : public virtual Font -{ - friend class FontManager; - public: - typedef std::vector DVIVector; - - public: - static Font* create (std::string name, UInt32 checksum, double dsize, double ssize); - virtual const DVIVector* getDVI (int c) const =0; - bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb=0) const {return false;} - - protected: - virtual void assignChar (UInt32 c, DVIVector *dvi) =0; -}; - - -class TFMFont : public virtual Font -{ - public: - TFMFont (std::string name, UInt32 checksum, double dsize, double ssize); - ~TFMFont (); - const TFM* getTFM () const; - std::string name () const {return fontname;} - double designSize () const {return dsize;} - double scaledSize () const {return ssize;} - double charWidth (int c) const; - double charDepth (int c) const; - double charHeight (int c) const; - double italicCorr (int c) const; - - private: - mutable TFM *tfm; - std::string fontname; - UInt32 checksum; ///< cheksum to be compared with TFM checksum - double dsize; ///< design size in TeX point units - double ssize; ///< scaled size -}; - - -class PhysicalFontProxy : public PhysicalFont -{ - friend class PhysicalFontImpl; - public: - Font* clone (double ds, double sc) const {return new PhysicalFontProxy(*this, ds, sc);} - const Font* uniqueFont () const {return pf;} - std::string name () const {return pf->name();} - double designSize () const {return dsize;} - double scaledSize () const {return ssize;} - double charWidth (int c) const {return pf->charWidth(c);} - double charDepth (int c) const {return pf->charDepth(c);} - double charHeight (int c) const {return pf->charHeight(c);} - double italicCorr (int c) const {return pf->italicCorr(c);} - const TFM* getTFM () const {return pf->getTFM();} - Type type () const {return pf->type();} - UInt32 unicode (UInt32 c) const {return pf->unicode(c);} - - protected: - PhysicalFontProxy (const PhysicalFont *font, double ds, double ss) : pf(font), dsize(ds), ssize(ss) {} - PhysicalFontProxy (const PhysicalFontProxy &proxy, double ds, double ss) : pf(proxy.pf), dsize(ds), ssize(ss) {} - - private: - const PhysicalFont *pf; - double dsize; ///< design size in TeX point units - double ssize; ///< scaled size -}; - - -class PhysicalFontImpl : public PhysicalFont, public TFMFont -{ - friend class PhysicalFont; - public: - ~PhysicalFontImpl(); - Font* clone (double ds, double ss) const {return new PhysicalFontProxy(this, ds, ss);} - const Font* uniqueFont () const {return this;} - Type type () const {return _filetype;} - UInt32 unicode (UInt32 c) const; - void tidy () const; - - protected: - PhysicalFontImpl (std::string name, UInt32 checksum, double dsize, double ssize, PhysicalFont::Type type); - - private: - Type _filetype; - mutable std::map *_charmap; -}; - - -class VirtualFontProxy : public VirtualFont -{ - friend class VirtualFontImpl; - public: - Font* clone (double ds, double ss) const {return new VirtualFontProxy(*this, ds, ss);} - const Font* uniqueFont () const {return vf;} - std::string name () const {return vf->name();} - const DVIVector* getDVI (int c) const {return vf->getDVI(c);} - double designSize () const {return dsize;} - double scaledSize () const {return ssize;} - double charWidth (int c) const {return vf->charWidth(c);} - double charDepth (int c) const {return vf->charDepth(c);} - double charHeight (int c) const {return vf->charHeight(c);} - double italicCorr (int c) const {return vf->italicCorr(c);} - const TFM* getTFM () const {return vf->getTFM();} - const char* path () const {return vf->path();} - - protected: - VirtualFontProxy (const VirtualFont *font, double ds, double ss) : vf(font), dsize(ds), ssize(ss) {} - VirtualFontProxy (const VirtualFontProxy &proxy, double ds, double ss) : vf(proxy.vf), dsize(ds), ssize(ss) {} - void assignChar (UInt32 c, DVIVector *dvi) {delete dvi;} - - private: - const VirtualFont *vf; - double dsize; ///< design size in TeX point units - double ssize; ///< scaled size in TeX point units -}; - - -class VirtualFontImpl : public VirtualFont, public TFMFont -{ - friend class VirtualFont; - public: - ~VirtualFontImpl (); - Font* clone (double ds, double ss) const {return new VirtualFontProxy(this, ds, ss);} - const Font* uniqueFont () const {return this;} - const DVIVector* getDVI (int c) const; - const char* path () const; - - protected: - VirtualFontImpl (std::string name, UInt32 checksum, double dsize, double ssize); - void assignChar (UInt32 c, DVIVector *dvi); - - private: - std::map charDefs; ///< dvi subroutines defining the characters -}; - - -struct FontException : public MessageException -{ - FontException (std::string msg) : MessageException(msg) {} -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontCache.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontCache.cpp deleted file mode 100644 index c4ca8ad1fbf..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontCache.cpp +++ /dev/null @@ -1,387 +0,0 @@ -/************************************************************************* -** FontCache.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include -#include -#include "CRC32.h" -#include "FileSystem.h" -#include "FontCache.h" -#include "Glyph.h" -#include "Pair.h" -#include "StreamReader.h" -#include "StreamWriter.h" -//#include "gzstream.h" -#include "types.h" - -using namespace std; - -const UInt8 FontCache::VERSION = 5; - - -static Pair32 read_pair (int bytes, StreamReader &sr) { - Int32 x = sr.readSigned(bytes); - Int32 y = sr.readSigned(bytes); - return Pair32(x, y); -} - - -FontCache::FontCache () : _changed(false) -{ -} - - -FontCache::~FontCache () { - clear(); -} - - -/** Removes all data from the cache. This does not affect the cache files. */ -void FontCache::clear () { - _glyphs.clear(); - _fontname.clear(); -} - - -/** Assigns glyph data to a character and adds it to the cache. - * @param[in] c character code - * @param[in] glyph font glyph data */ -void FontCache::setGlyph (int c, const Glyph &glyph) { - _glyphs[c] = glyph; - _changed = true; -} - - -/** Returns the corresponding glyph data of a given character of the current font. - * @param[in] c character code - * @return font glyph data (0 if no matching data was found) */ -const Glyph* FontCache::getGlyph (int c) const { - GlyphMap::const_iterator it = _glyphs.find(c); - return (it != _glyphs.end()) ? &it->second : 0; -} - - -/** Writes the current cache data to a file (only if anything changed after - * the last call of read()). - * @param[in] fontname name of current font - * @param[in] dir directory where the cache file should go - * @return true if writing was successful */ -bool FontCache::write (const char *fontname, const char *dir) const { - if (!_changed) - return true; - - if (fontname && strlen(fontname) > 0) { - if (dir == 0 || strlen(dir) == 0) - dir = FileSystem::getcwd().c_str(); - ostringstream oss; - oss << dir << '/' << fontname << ".fgd"; -// ogzstream ofs(oss.str().c_str(), 9, ios::binary|ios::out); - ofstream ofs(oss.str().c_str(), ios::binary); - return write(fontname, ofs); - } - return false; -} - - -bool FontCache::write (const char* dir) const { - return _fontname.empty() ? false : write(_fontname.c_str(), dir); -} - - -/** Returns the minimal number of bytes needed to store the given value. */ -static int max_int_size (Int32 value) { - Int32 limit = 0x7f; - for (int i=1; i <= 4; i++) { - if ((value < 0 && -value <= limit+1) || (value >= 0 && value <= limit)) - return i; - limit = (limit << 8) | 0xff; - } - return 4; -} - - -/** Returns the minimal number of bytes needed to store the biggest - * pair component of the given vector. */ -static int max_int_size (const Pair *pairs, size_t n) { - int ret=0; - for (size_t i=0; i < n; i++) { - ret = max(ret, max_int_size(pairs[i].x())); - ret = max(ret, max_int_size(pairs[i].y())); - } - return ret; -} - - -/** Writes the current cache data to a stream (only if anything changed after - * the last call of read()). - * @param[in] fontname name of current font - * @param[in] os output stream - * @return true if writing was successful */ -bool FontCache::write (const char *fontname, ostream &os) const { - if (!_changed) - return true; - if (!os) - return false; - - StreamWriter sw(os); - CRC32 crc32; - - struct WriteActions : Glyph::Actions { - WriteActions (StreamWriter &sw, CRC32 &crc32) : _sw(sw), _crc32(crc32) {} - - void draw (char cmd, const Glyph::Point *points, int n) { - int bytes = max_int_size(points, n); - int cmdchar = (bytes << 5) | (cmd - 'A'); - _sw.writeUnsigned(cmdchar, 1, _crc32); - for (int i=0; i < n; i++) { - _sw.writeSigned(points[i].x(), bytes, _crc32); - _sw.writeSigned(points[i].y(), bytes, _crc32); - } - } - StreamWriter &_sw; - CRC32 &_crc32; - } actions(sw, crc32); - - sw.writeUnsigned(VERSION, 1, crc32); - sw.writeUnsigned(0, 4); // space for checksum - sw.writeString(fontname, crc32, true); - sw.writeUnsigned(_glyphs.size(), 4, crc32); - FORALL(_glyphs, GlyphMap::const_iterator, it) { - const Glyph &glyph = it->second; - sw.writeUnsigned(it->first, 4, crc32); - sw.writeUnsigned(glyph.size(), 2, crc32); - glyph.iterate(actions, false); - } - os.seekp(1); - sw.writeUnsigned(crc32.get(), 4); // insert CRC32 checksum - os.seekp(0, ios::end); - return true; -} - - -/** Reads font glyph information from a file. - * @param[in] fontname name of font data to read - * @param[in] dir directory where the cache files are located - * @return true if reading was successful */ -bool FontCache::read (const char *fontname, const char *dir) { - if (_fontname == fontname) - return true; - clear(); - if (fontname && strlen(fontname) > 0) { - if (dir == 0 || strlen(dir) == 0) - dir = FileSystem::getcwd().c_str(); - ostringstream oss; - oss << dir << '/' << fontname << ".fgd"; - ifstream ifs(oss.str().c_str(), ios::binary); -// igzstream ifs(oss.str().c_str(), 9, ios::binary|ios::in); - return read(fontname, ifs); - } - return false; -} - - -/** Reads font glyph information from a stream. - * @param[in] fontname name of font data to read - * @param[in] dir input stream - * @return true if reading was successful */ -bool FontCache::read (const char *fontname, istream &is) { - if (_fontname == fontname) - return true; - clear(); - _fontname = fontname; - if (!is) - return false; - - StreamReader sr(is); - CRC32 crc32; - if (sr.readUnsigned(1, crc32) != VERSION) - return false; - - UInt32 crc32_cmp = sr.readUnsigned(4); - crc32.update(is); - if (crc32.get() != crc32_cmp) - return false; - - is.clear(); - is.seekg(5); // continue reading after checksum - - string fname = sr.readString(); - if (fname != fontname) - return false; - - UInt32 num_glyphs = sr.readUnsigned(4); - while (num_glyphs-- > 0) { - UInt32 c = sr.readUnsigned(4); // character code - UInt16 s = sr.readUnsigned(2); // number of path commands - Glyph &glyph = _glyphs[c]; - while (s-- > 0) { - UInt8 cmdval = sr.readUnsigned(1); - UInt8 cmdchar = (cmdval & 0x1f) + 'A'; - int bytes = cmdval >> 5; - switch (cmdchar) { - case 'C': { - Pair32 p1 = read_pair(bytes, sr); - Pair32 p2 = read_pair(bytes, sr); - Pair32 p3 = read_pair(bytes, sr); - glyph.cubicto(p1, p2, p3); - break; - } - case 'L': - glyph.lineto(read_pair(bytes, sr)); - break; - case 'M': - glyph.moveto(read_pair(bytes, sr)); - break; - case 'Q': { - Pair32 p1 = read_pair(bytes, sr); - Pair32 p2 = read_pair(bytes, sr); - glyph.conicto(p1, p2); - break; - } - case 'Z': - glyph.closepath(); - } - } - } - _changed = false; - return true; -} - - -/** Collects font cache information. - * @param[in] dirname path to font cache directory - * @param[out] infos the collected font information - * @param[out] invalid names of outdated/corrupted cache files - * @return true on success */ -bool FontCache::fontinfo (const char *dirname, vector &infos, vector &invalid) { - infos.clear(); - invalid.clear(); - if (dirname) { - vector fnames; - FileSystem::collect(dirname, fnames); - FORALL(fnames, vector::iterator, it) { - if ((*it)[0] == 'f' && it->length() > 5 && it->substr(it->length()-4) == ".fgd") { - FontInfo info; - string path = string(dirname)+"/"+(it->substr(1)); - ifstream ifs(path.c_str(), ios::binary); - if (fontinfo(ifs, info)) - infos.push_back(info); - else - invalid.push_back(it->substr(1)); - } - } - } - return infos.size() > 0; -} - - -/** Collects font cache information of a single font. - * @param[in] is input stream of the cache file - * @param[out] info the collected data - * @return true if data could be read, false if cache file is unavailable, outdated, or corrupted */ -bool FontCache::fontinfo (std::istream &is, FontInfo &info) { - info.name.clear(); - info.numchars = info.numbytes = info.numcmds = 0; - if (is) { - is.clear(); - is.seekg(0); - StreamReader sr(is); - CRC32 crc32; - if ((info.version = sr.readUnsigned(1, crc32)) != VERSION) - return false; - - info.checksum = sr.readUnsigned(4); - crc32.update(is); - if (crc32.get() != info.checksum) - return false; - - is.clear(); - is.seekg(5); // continue reading after checksum - - info.name = sr.readString(); - info.numchars = sr.readUnsigned(4); - for (UInt32 i=0; i < info.numchars; i++) { - sr.readUnsigned(4); // character code - UInt16 s = sr.readUnsigned(2); // number of path commands - while (s-- > 0) { - UInt8 cmdval = sr.readUnsigned(1); - UInt8 cmdchar = (cmdval & 0x1f) + 'A'; - int bytes = cmdval >> 5; - int bc = 0; - switch (cmdchar) { - case 'C': bc = 6*bytes; break; - case 'H': - case 'L': - case 'M': - case 'T': - case 'V': bc = 2*bytes; break; - case 'Q': - case 'S': bc = 4*bytes; break; - case 'Z': break; - default : return false; - } - info.numbytes += bc+1; // command length + command - info.numcmds++; - is.seekg(bc, ios_base::cur); - } - info.numbytes += 6; // number of path commands + char code - } - info.numbytes += 6+info.name.length(); // version + 0-byte + fontname + number of chars - } - return true; -} - - -/** Collects font cache information and write it to a stream. - * @param[in] dirname path to font cache directory - * @param[in] os output is written to this stream - * @param[in] purge if true, outdated and corrupted cache files are removed */ -void FontCache::fontinfo (const char *dirname, ostream &os, bool purge) { - if (dirname) { - vector infos; - vector invalid_files; - if (fontinfo(dirname, infos, invalid_files)) { - os << "cache format version " << infos[0].version << endl; - typedef map SortMap; - SortMap sortmap; - FORALL(infos, vector::iterator, it) - sortmap[it->name] = &(*it); - - FORALL(sortmap, SortMap::iterator, it) { - os << dec << setfill(' ') << left - << setw(10) << left << it->second->name - << setw(5) << right << it->second->numchars << " char" << (it->second->numchars == 1 ? ' ':'s') - << setw(10) << right << it->second->numcmds << " cmd" << (it->second->numcmds == 1 ? ' ':'s') - << setw(12) << right << it->second->numbytes << " byte" << (it->second->numbytes == 1 ? ' ':'s') - << setw(6) << "crc:" << setw(8) << hex << right << setfill('0') << it->second->checksum - << endl; - } - } - else - os << "cache is empty\n"; - FORALL(invalid_files, vector::iterator, it) { - string path=string(dirname)+"/"+(*it); - if (FileSystem::remove(path)) - os << "invalid cache file " << (*it) << " removed\n"; - } - } -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontCache.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontCache.h deleted file mode 100644 index 5ab7b885210..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontCache.h +++ /dev/null @@ -1,74 +0,0 @@ -/************************************************************************* -** FontCache.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef FONTCACHE_H -#define FONTCACHE_H - -#include -#include -#include -#include "types.h" -#include "Glyph.h" - -#ifdef VERSION -#undef VERSION -#endif - - -class FontCache -{ - typedef std::map GlyphMap; - - public: - struct FontInfo - { - std::string name; // fontname - UInt16 version; // file format version - UInt32 checksum; // CRC32 checksum of file data - UInt32 numchars; // number of characters - UInt32 numbytes; // number of bytes - UInt32 numcmds; // number of path commands - }; - - public: - FontCache (); - ~FontCache (); - bool read (const char *fontname, const char *dir); - bool read (const char *fontname, std::istream &is); - bool write (const char *dir) const; - bool write (const char *fontname, const char *dir) const; - bool write (const char *fontname, std::ostream &os) const; - const Glyph* getGlyph (int c) const; - void setGlyph (int c, const Glyph &glyph); - void clear (); - const std::string& fontname () const {return _fontname;} - - static bool fontinfo (const char *dirname, std::vector &infos, std::vector &invalid); - static bool fontinfo (std::istream &is, FontInfo &info); - static void fontinfo (const char *dirname, std::ostream &os, bool purge=false); - - private: - static const UInt8 VERSION; - std::string _fontname; - GlyphMap _glyphs; - bool _changed; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEncoding.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEncoding.cpp deleted file mode 100644 index e02e859933d..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEncoding.cpp +++ /dev/null @@ -1,159 +0,0 @@ -/************************************************************************* -** FontEncoding.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include "Font.h" -#include "FontEncoding.h" -#include "InputBuffer.h" -#include "InputReader.h" -#include "FileFinder.h" -#include "Message.h" - -using namespace std; - -static string read_entry (InputReader &in); -static bool valid_name_char (int c); - - -FontEncoding::FontEncoding (const string &encname) : _encname(encname) -{ - read(); -} - - -const char* FontEncoding::path () const { - return FileFinder::lookup(_encname+".enc"); -} - - -/** Search for suitable enc-file and read its encoding information. - * The file contents must be a valid PostScript vector with 256 entries. */ -void FontEncoding::read () { - if (const char *p = path()) { - ifstream ifs(p); - read(ifs); - } - else - Message::mstream(true) << "encoding file '" << _encname << ".enc' not found\n"; -} - - -/** Read encoding information from stream. */ -void FontEncoding::read (istream &is) { - StreamInputBuffer ib(is, 256); - BufferInputReader in(ib); - _table.resize(256); - - // find beginning of vector - while (!in.eof()) { - in.skipSpace(); - if (in.peek() == '%') - in.skipUntil("\n"); - else - if (in.get() == '[') - break; - } - - // read vector entries - int n=0; - while (!in.eof()) { - in.skipSpace(); - if (in.peek() == '%') - in.skipUntil("\n"); - else if (in.peek() == ']') { - in.get(); - break; - } - else { - string entry = read_entry(in); - if (entry == ".notdef") - entry.clear(); - if (n < 256) - _table[n++] = entry; - } - } - // remove trailing .notdef names - for (n--; n > 0 && _table[n].empty(); n--); - _table.resize(n+1); -} - - -static string read_entry (InputReader &in) { - string entry; - bool accept_slashes=true; - while (!in.eof() && ((in.peek() == '/' && accept_slashes) || valid_name_char(in.peek()))) { - if (in.peek() != '/') - accept_slashes = false; - entry += in.get(); - } - if (entry.length() > 1) { - // strip leading slashes - // According to the PostScript specification, a single slash without further - // following characters is a valid name. - size_t n=0; - while (n < entry.length() && entry[n] == '/') - n++; - entry = entry.substr(n); - } - return entry; -} - - -static bool valid_name_char (int c) { - const char *delimiters = "<>(){}[]/~%"; - return isprint(c) && !isspace(c) && !strchr(delimiters, c); -} - - -/** Returns an entry of the encoding table. - * @param[in] c character code - * @return character name assigned to charcter code c*/ -const char* FontEncoding::getEntry (int c) const { - if (c >= 0 && (size_t)c < _table.size()) - return !_table[c].empty() ? _table[c].c_str() : 0; - return 0; -} - - -struct EncodingMap : public map -{ - ~EncodingMap () { - for (EncodingMap::iterator it=begin(); it != end(); ++it) - delete it->second; - } -}; - - -/** Returns the encoding of a font. - * @param[in] fontname name of font whose encoding will be returned - * @return pointer to encoding object, or 0 if there is no encoding defined */ -FontEncoding* FontEncoding::encoding (const string &fontname) { - static EncodingMap encmap; - if (const char *encname = FileFinder::lookupEncName(fontname)) { - EncodingMap::const_iterator it = encmap.find(encname); - if (it != encmap.end()) - return it->second; - FontEncoding *enc = new FontEncoding(encname); - encmap[encname] = enc; - return enc; - } - return 0; -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEncoding.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEncoding.h deleted file mode 100644 index 6766611f64f..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEncoding.h +++ /dev/null @@ -1,48 +0,0 @@ -/************************************************************************* -** FontEncoding.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef FONTENCODING_H -#define FONTENCODING_H - -#include -#include -#include -#include -#include "types.h" - - -class FontEncoding -{ - public: - FontEncoding (const std::string &name); - void read (); - void read (std::istream &is); - int size () const {return _table.size();} - std::string name () const {return _encname;} - const char* getEntry (int c) const; - const char* path () const; - static FontEncoding* encoding (const std::string &fontname); - - private: - std::string _encname; - std::vector _table; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEngine.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEngine.cpp deleted file mode 100644 index 991813fc1a5..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEngine.cpp +++ /dev/null @@ -1,369 +0,0 @@ -/************************************************************************* -** FontEngine.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include FT_GLYPH_H -#include FT_OUTLINE_H -#include FT_TRUETYPE_TABLES_H -#include "Font.h" -#include "FontEngine.h" -#include "Message.h" -#include "macros.h" - -using namespace std; - - -FontEngine::FontEngine () { - _currentFace = 0; - _currentChar = _currentGlyphIndex = 0; - _horDeviceRes = _vertDeviceRes = 300; - _ptSize = 0; - if (FT_Init_FreeType(&_library)) - Message::estream(true) << "FontEngine: error initializing FreeType library\n"; -} - - -FontEngine::~FontEngine () { - if (_currentFace && FT_Done_Face(_currentFace)) - Message::estream(true) << "FontEngine: error removing glyph\n"; - if (FT_Done_FreeType(_library)) - Message::estream(true) << "FontEngine: error removing FreeType library\n"; -} - - -/** Returns the singleton instance of this class. */ -FontEngine& FontEngine::instance () { - static FontEngine engine; - return engine; -} - - -string FontEngine::version () { - FT_Int major, minor, patch; - FT_Library &lib = instance()._library; - FT_Library_Version(lib, &major, &minor, &patch); - ostringstream oss; - oss << major << '.' << minor << '.' << patch; - return oss.str(); -} - - -void FontEngine::setDeviceResolution (int x, int y) { - _horDeviceRes = x; - _vertDeviceRes = y; -} - - -/** Builds a table that maps glyph indexes to char codes. - * @param[in] face font face to be used - * @param[out] reverseMap the resulting map */ -static void build_reverse_map (FT_Face face, map &reverseMap) { - FT_UInt glyphIndex; - UInt32 charcode = FT_Get_First_Char(face, &glyphIndex); - while (glyphIndex) { -// if (reverseMap.find(glyphIndex) == reverseMap.end()) - reverseMap[glyphIndex] = charcode; - charcode = FT_Get_Next_Char(face, charcode, &glyphIndex); - } -} - - -/** Sets the font to be used. - * @param[in] fname path to font file - * @param[in] ptSize font size in point units - * @return true on success */ -bool FontEngine::setFont (const string &fname, int ptSize) { - if (FT_New_Face(_library, fname.c_str(), 0, &_currentFace)) { - Message::estream(true) << "FontEngine: error reading file " << fname << '\n'; - return false; - } - if (ptSize && FT_Set_Char_Size(_currentFace, 0, ptSize*64, _horDeviceRes, _vertDeviceRes)) { - Message::estream(true) << "FontEngine: error setting character size\n"; - return false; - } - // look for a custom character map - for (int i=0; i < _currentFace->num_charmaps; i++) { - FT_CharMap charmap = _currentFace->charmaps[i]; - if (charmap->encoding == FT_ENCODING_ADOBE_CUSTOM) { - FT_Set_Charmap(_currentFace, charmap); - break; - } - } - _ptSize = ptSize; - return true; -} - - -bool FontEngine::setFont (const Font &font) { - if (fname != font.name()) { - fname = font.name(); - return setFont(font.path()); - } - return true; -} - - -void FontEngine::buildTranslationMap (map &translationMap) const { - FT_CharMap unicodeMap=0, customMap=0; - for (int i=0; i < _currentFace->num_charmaps; i++) { - FT_CharMap charmap = _currentFace->charmaps[i]; - if (charmap->encoding == FT_ENCODING_ADOBE_CUSTOM) - customMap = charmap; - else if (charmap->encoding == FT_ENCODING_UNICODE) - unicodeMap = charmap; - } - if (unicodeMap == 0 || customMap == 0) - return; - - map reverseMap; - build_reverse_map(_currentFace, reverseMap); - - FT_Set_Charmap(_currentFace, unicodeMap); - FT_UInt glyphIndex; - UInt32 charcode = FT_Get_First_Char(_currentFace, &glyphIndex); - while (glyphIndex) { - translationMap[reverseMap[glyphIndex]] = charcode; - charcode = FT_Get_Next_Char(_currentFace, charcode, &glyphIndex); - } - FT_Set_Charmap(_currentFace, customMap); -} - - -const char* FontEngine::getFamilyName () const { - return _currentFace ? _currentFace->family_name : 0; -} - - -const char* FontEngine::getStyleName () const { - return _currentFace ? _currentFace->style_name : 0; -} - - -int FontEngine::getUnitsPerEM () const { - return _currentFace ? _currentFace->units_per_EM : 0; -} - - -int FontEngine::getAscender () const { - return _currentFace ? _currentFace->ascender : 0; -} - - -int FontEngine::getDescender () const { - return _currentFace ? _currentFace->descender : 0; -} - - -int FontEngine::getHAdvance () const { - if (_currentFace) { - TT_OS2 *table = static_cast(FT_Get_Sfnt_Table(_currentFace, ft_sfnt_os2)); - return table ? table->xAvgCharWidth : 0; - } - return 0; -} - - -int FontEngine::getHAdvance (unsigned c) const { - if (_currentFace) { - int index = FT_Get_Char_Index(_currentFace, (FT_ULong)c); - FT_Load_Glyph(_currentFace, index, FT_LOAD_NO_SCALE); - return _currentFace->glyph->metrics.horiAdvance; - } - return 0; -} - - -int FontEngine::getHAdvance (const char *name) const { - if (_currentFace && name) { - int index = FT_Get_Name_Index(_currentFace, (FT_String*)name); - FT_Load_Glyph(_currentFace, index, FT_LOAD_NO_SCALE); - return _currentFace->glyph->metrics.horiAdvance; - } - return 0; -} - - -/** 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 glyph name for a given charater code. - * @param[in] c char code - * @return glyph name */ -string FontEngine::getGlyphName (unsigned c) const { - if (_currentFace && FT_HAS_GLYPH_NAMES(_currentFace)) { - char buf[256]; - int index = FT_Get_Char_Index(_currentFace, c); - FT_Get_Glyph_Name(_currentFace, index, buf, 256); - return string(buf); - } - return ""; -} - - -/* Returns the character code for a given glyph name. - * @param name glyph name - * @return char code or 0 if name couldn't be found -int FontEngine::getCharByGlyphName (const char *name) const { - if (_currentFace && FT_HAS_GLYPH_NAMES(_currentFace)) { - int index = FT_Get_Name_Index(_currentFace, (FT_String*)name); - map::const_iterator it = _reverseMap.find(index); - if (it != _reverseMap.end()) - return it->second; - } - return 0; -}*/ - - -vector FontEngine::getPanose () const { - vector panose(10); - if (_currentFace) { - TT_OS2 *table = static_cast(FT_Get_Sfnt_Table(_currentFace, ft_sfnt_os2)); - if (table) - for (int i=0; i < 10; i++) - panose[i] = table->panose[i]; - } - return panose; -} - - -bool FontEngine::setCharSize (int ptSize) { - if (_currentFace) { - if (FT_Set_Char_Size(_currentFace, 0, ptSize*64, _horDeviceRes, _vertDeviceRes)) { - Message::estream(true) << "FontEngine: error setting character size\n"; - return false; - } - _ptSize = ptSize; - return true; - } - Message::wstream(true) << "FontEngine: can't set char size, no font face selected\n"; - return false; -} - - -// handle API change in freetype version 2.2.1 -#if FREETYPE_MAJOR > 2 || (FREETYPE_MAJOR == 2 && (FREETYPE_MINOR > 2 || (FREETYPE_MINOR == 2 && FREETYPE_PATCH >= 1))) - typedef const FT_Vector *FTVectorPtr; -#else - typedef FT_Vector *FTVectorPtr; -#endif - -// Callback functions used by traceOutline -static int moveto (FTVectorPtr to, void *user) { - Glyph *glyph = static_cast(user); - glyph->moveto(to->x, to->y); - return 0; -} - - -static int lineto (FTVectorPtr to, void *user) { - Glyph *glyph = static_cast(user); - glyph->lineto(to->x, to->y); - return 0; -} - - -static int conicto (FTVectorPtr control, FTVectorPtr to, void *user) { - Glyph *glyph = static_cast(user); - glyph->conicto(control->x, control->y, to->x, to->y); - return 0; -} - - -static int cubicto (FTVectorPtr control1, FTVectorPtr control2, FTVectorPtr to, void *user) { - Glyph *glyph = static_cast(user); - glyph->cubicto(control1->x, control1->y, control2->x, control2->y, to->x, to->y); - return 0; -} - - -/** Traces the outline of a glyph by calling the corresponding "drawing" functions. - * Each glyph is composed of straight lines, quadratic (conic) or cubic B�zier curves. - * This function takes all these outline segments and processes them by calling - * the corresponding functions. The functions must be provided in form of a - * FEGlyphCommands object. - * @param[in] index index of the glyph that will be traced - * @param[in] commands the drawing commands to be executed - * @param[in] scale if true the current pt size will be considered otherwise the plain TrueType units are used. - * @return false on errors */ -static bool trace_outline (FT_Face face, int index, Glyph &glyph, bool scale) { - if (face) { - if (FT_Load_Glyph(face, index, scale ? FT_LOAD_DEFAULT : FT_LOAD_NO_SCALE)) { - Message::estream(true) << "can't load glyph " << int(index) << '\n'; - return false; - } - - if (face->glyph->format != FT_GLYPH_FORMAT_OUTLINE) { - Message::estream(true) << "no outlines found in glyph " << int(index) << '\n'; - return false; - } - FT_Outline outline = face->glyph->outline; - const FT_Outline_Funcs funcs = {moveto, lineto, conicto, cubicto, 0, 0}; - FT_Outline_Decompose(&outline, &funcs, &glyph); - return true; - } - Message::wstream(true) << "FontEngine: can't trace outline, no font face selected\n"; - return false; -} - - - -/** Traces the outline of a glyph by calling the corresponding "drawing" functions. - * Each glyph is composed of straight lines, quadratic (conic) or cubic B�zier curves. - * This function takes all these outline segments and processes them by calling - * the corresponding functions. The functions must be provided in form of a - * FEGlyphCommands object. - * @param[in] chr the glyph of this character will be traced - * @param[in] commands the drawing commands to be executed - * @param[in] scale if true the current pt size will be considered otherwise - * the plain TrueType units are used. - * @return false on errors */ -bool FontEngine::traceOutline (unsigned char chr, Glyph &glyph, bool scale) const { - if (_currentFace) { - int index = FT_Get_Char_Index(_currentFace, chr); - return trace_outline(_currentFace, index, glyph, scale); - } - Message::wstream(true) << "FontEngine: can't trace outline, no font face selected\n"; - return false; -} - - -bool FontEngine::traceOutline (const char *name, Glyph &glyph, bool scale) const { - if (_currentFace) { - int index = FT_Get_Name_Index(_currentFace, (FT_String*)name); - return trace_outline(_currentFace, index, glyph, scale); - } - Message::wstream(true) << "FontEngine: can't trace outline, no font face selected\n"; - return false; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEngine.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEngine.h deleted file mode 100644 index 678bc43c180..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontEngine.h +++ /dev/null @@ -1,76 +0,0 @@ -/************************************************************************* -** FontEngine.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef FONTENGINE_H -#define FONTENGINE_H - -#include -#include FT_FREETYPE_H -#include -#include -#include -#include "types.h" -#include "Glyph.h" - -class Font; - -/** This class provides methods to handle font files and font data. - * It's a wrapper for the Freetype font library. */ -class FontEngine -{ - public: - ~FontEngine (); - static FontEngine& instance (); - static std::string version (); - void setDeviceResolution (int x, int y); - bool setFont (const Font &font); - bool setCharSize (int ptSize); - bool traceOutline (unsigned char chr, Glyph &glyph, bool scale=true) const; - bool traceOutline (const char *name, Glyph &glyph, bool scale) const; - const char* getFamilyName () const; - const char* getStyleName () const; - int getUnitsPerEM () const; - int getAscender () const; - int getDescender () const; - int getHAdvance () const; - int getHAdvance (unsigned int c) const; - int getHAdvance (const char *name) const; - int getFirstChar () const; - int getNextChar () const; - int getCharSize () const {return _ptSize;} - std::vector getPanose () const; - std::string getGlyphName (unsigned int c) const; - int getCharByGlyphName (const char *name) const; - void buildTranslationMap (std::map &translationMap) const; - - protected: - FontEngine (); - bool setFont (const std::string &fname, int ptSize=0); - - private: - int _horDeviceRes, _vertDeviceRes; - mutable unsigned int _currentChar, _currentGlyphIndex; - FT_Face _currentFace; - FT_Library _library; - int _ptSize; - std::string fname; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontManager.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontManager.cpp deleted file mode 100644 index 8f6958cdb42..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontManager.cpp +++ /dev/null @@ -1,252 +0,0 @@ -/************************************************************************* -** FontManager.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "Font.h" -#include "FontEncoding.h" -#include "FontManager.h" -#include "FileFinder.h" -#include "Message.h" -#include "macros.h" - -using namespace std; - - -FontManager::~FontManager () { - FORALL(_fonts, vector::iterator, i) - delete *i; -} - - -/** Returns the singleton instance */ -FontManager& FontManager::instance () { - static FontManager fm; - return fm; -} - - -/** Returns a unique ID that identifies the font. - * @param[in] n local font number, as used in DVI and VF files - * @return non-negative font ID if font was found, -1 otherwise */ -int FontManager::fontID (int n) const { - if (_vfStack.empty()) { - Num2IdMap::const_iterator it = _num2id.find(n); - return (it == _num2id.end()) ? -1 : it->second; - } - VfNum2IdMap::const_iterator vit = _vfnum2id.find(_vfStack.top()); - if (vit == _vfnum2id.end()) - return -1; - const Num2IdMap &num2id = vit->second; - Num2IdMap::const_iterator it = num2id.find(n); - return (it == num2id.end()) ? -1 : it->second; -} - - -/** Returns a unique ID that identifies the font. Not the font object but the - * font pointer is looked up to get the ID. Thus, two different pointers - * referencing different objects of the same font are mapped to different IDs. - * @param[in] font pointer to font object to be identified - * @return non-negative font ID if font was found, -1 otherwise */ -int FontManager::fontID (const Font *font) const { - for (size_t i=0; i < _fonts.size(); i++) - if (_fonts[i] == font) - return i; - return -1; -} - - -/** Returns a unique ID that identifies the font. - * @param[in] name name of font to be identified, e.g. cmr10 - * @return non-negative font ID if font was found, -1 otherwise */ -int FontManager::fontID (const string &name) const { - map::const_iterator it = _name2id.find(name); - if (it == _name2id.end()) - return -1; - return it->second; -} - - -int FontManager::fontnum (int id) const { - if (id < 0 || size_t(id) > _fonts.size()) - return -1; - if (_vfStack.empty()) { - FORALL(_num2id, Num2IdMap::const_iterator, i) - if (i->second == id) - return i->first; - } - else { - VfNum2IdMap::const_iterator it = _vfnum2id.find(_vfStack.top()); - if (it == _vfnum2id.end()) - return -1; - const Num2IdMap &num2id = it->second; - FORALL(num2id, Num2IdMap::const_iterator, i) - if (i->second == id) - return i->first; - } - return -1; -} - - -int FontManager::vfFirstFontNum (VirtualFont *vf) const { - VfFirstFontMap::const_iterator it = _vfFirstFontMap.find(vf); - return (it == _vfFirstFontMap.end()) ? -1 : (int) it->second; -} - - -/** Returns a previously registered font. - * @param[in] n local font number, as used in DVI and VF files - * @return pointer to font if font was found, 0 otherwise */ -Font* FontManager::getFont (int n) const { - int id = fontID(n); - return (id < 0) ? 0 : _fonts[id]; -} - - -Font* FontManager::getFont (const string &name) const { - int id = fontID(name); - if (id < 0) - return 0; - return _fonts[id]; -} - - -Font* FontManager::getFontById (int id) const { - if (id < 0 || size_t(id) >= _fonts.size()) - return 0; - return _fonts[id]; -} - - -/** Returns the current active virtual font. */ -VirtualFont* FontManager::getVF () const { - return _vfStack.empty() ? 0 : _vfStack.top(); -} - - -/** Registers a new font to be managed by the FontManager. If there is - * already a registered font assigned to number n, nothing happens. - * @param[in] fontnum local font number, as used in DVI and VF files - * @param[in] name fontname, e.g. cmr10 - * @param[in] checksum checksum to be compared with TFM checksum - * @param[in] dsize design size in TeX point units - * @param[in] ssize scaled size in TeX point units - * @return id of registered font */ -int FontManager::registerFont (UInt32 fontnum, string name, UInt32 checksum, double dsize, double ssize) { - int id = fontID(fontnum); - if (id >= 0) - return id; - - Font *newfont = 0; - int newid = _fonts.size(); // the new font gets this ID - Name2IdMap::iterator it = _name2id.find(name); - if (it != _name2id.end()) { // font with same name already registered? - Font *font = _fonts[it->second]; - newfont = font->clone(dsize, ssize); - } - else { - if (FileFinder::lookup(name+".pfb")) - newfont = PhysicalFont::create(name, checksum, dsize, ssize, PhysicalFont::PFB); - else if (FileFinder::lookup(name+".ttf")) - newfont = PhysicalFont::create(name, checksum, dsize, ssize, PhysicalFont::TTF); - else if (FileFinder::lookup(name+".vf")) - newfont = VirtualFont::create(name, checksum, dsize, ssize); - else if (FileFinder::lookup(name+".mf")) - newfont = PhysicalFont::create(name, checksum, dsize, ssize, PhysicalFont::MF); - else { - newfont = new EmptyFont(name); - Message::wstream(true) << "font '" << name << "' not found\n"; - } - _name2id[name] = newid; - } - _fonts.push_back(newfont); - if (_vfStack.empty()) // register font referenced in dvi file? - _num2id[fontnum] = newid; - else { // register font referenced in vf file - VirtualFont *vf = const_cast(_vfStack.top()); - _vfnum2id[vf][fontnum] = newid; - if (_vfFirstFontMap.find(vf) == _vfFirstFontMap.end()) // first fontdef of VF? - _vfFirstFontMap[vf] = fontnum; - } - return newid; -} - - -/** Enters a new virtual font frame. - * This method must be called before processing a VF character. - * @param[in] vf virtual font */ -void FontManager::enterVF (VirtualFont *vf) { - if (vf) - _vfStack.push(vf); -} - - -/** Leaves a previously entered virtual font frame. */ -void FontManager::leaveVF () { - if (!_vfStack.empty()) - _vfStack.pop(); -} - - -/** Assigns a sequence of DVI commands to a char code. - * @param[in] c character code - * @param[in] dvi points to vector with DVI commands */ -void FontManager::assignVfChar (int c, vector *dvi) { - if (!_vfStack.empty() && dvi) - _vfStack.top()->assignChar(c, dvi); -} - - -ostream& FontManager::write (ostream &os, Font *font, int level) { -#if 0 - if (font) { - int id = -1; - for (int i=0; i < fonts.size() && id < 0; i++) - if (fonts[i] == font) - id = i; - - VirtualFont *vf = dynamic_cast(font); - for (int j=0; j < level+1; j++) - os << " "; - os << "id " << id - << " fontnum " << fontnum(id) << " " - << (vf ? "VF" : "PF") << " " - << font->name() - << endl; - - if (vf) { - enterVF(vf); - const Num2IdMap &num2id = vfnum2id.find(vf)->second; - FORALL(num2id, Num2IdMap::const_iterator, i) { - Font *font = fonts[i->second]; - write(os, font, level+1); - } - leaveVF(); - } - } - else { - for (int i=0; i < fonts.size(); i++) - write(os, fonts[i], level); - os << endl; - } -#endif - return os; -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontManager.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontManager.h deleted file mode 100644 index 14f6d2aae71..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontManager.h +++ /dev/null @@ -1,82 +0,0 @@ -/************************************************************************* -** FontManager.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef FONTMANAGER_H -#define FONTMANAGER_H - -#include -#include -#include -#include -#include -#include -#include "types.h" - - -class FileFinder; -class Font; -class TFM; -class VirtualFont; - -/** This class provides methods for easy DVI font handling. - * DVI and VF files use local font numbers to reference fonts. For SVG output - * we need a single list with unique IDs of all physical fonts. Characters of - * virtual fonts are completely replaced by their DVI description so they don't - * appear anywhere in the output. */ -class FontManager -{ - typedef std::map Num2IdMap; - typedef std::map Name2IdMap; - typedef std::map VfNum2IdMap; - typedef std::map VfFirstFontMap; - typedef std::stack VfStack; - - public: - ~FontManager (); - static FontManager& instance (); - int registerFont (UInt32 fontnum, std::string fontname, UInt32 checksum, double dsize, double scale); - Font* getFont (int n) const; - Font* getFont (const std::string &name) const; - Font* getFontById (int id) const; - VirtualFont* getVF () const; - int fontID (int n) const; - int fontID (const Font *font) const; - int fontID (const std::string &name) const; - int fontnum (int id) const; - int vfFirstFontNum (VirtualFont *vf) const; - void enterVF (VirtualFont *vf); - void leaveVF (); - void assignVfChar (int c, std::vector *dvi); - const std::vector& getFonts () const {return _fonts;} - std::ostream& write (std::ostream &os, Font *font=0, int level=0); - - protected: - FontManager () {} - - private: - std::vector _fonts; ///< all registered Fonts - Num2IdMap _num2id; ///< DVI font number -> fontID - Name2IdMap _name2id; ///< fontname -> fontID - VfNum2IdMap _vfnum2id; - VfStack _vfStack; ///< stack of currently processed virtual fonts - VfFirstFontMap _vfFirstFontMap; ///< VF -> local font number of first font defined in VF -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontMap.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontMap.cpp deleted file mode 100644 index 01075d91309..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontMap.cpp +++ /dev/null @@ -1,237 +0,0 @@ -/************************************************************************* -** FontMap.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include "Directory.h" -#include "FontMap.h" - -using namespace std; - -enum FontMapFieldType {FM_ERROR=0, FM_NONE, FM_NAME, FM_PS_CODE, FM_HEADER, FM_ENC, FM_FONT}; - - -static char* str_tolower (char *str); -static inline char* get_extension (char *fname); -static FontMapFieldType read_entry (char* &first, char* &last, bool name_only=false); - - - -FontMap::FontMap (const string &fname) { - read(fname); -} - - -bool FontMap::read (const string &fname) { - ifstream ifs(fname.c_str()); - if (ifs) { - if (fname.find("dvipdfm") != string::npos) - readPdfMap(ifs); - else - readPsMap(ifs); - return true; - } - return false; -} - - -/** Read map file in dvips format. - * @param[in] is data is read from this stream */ -void FontMap::readPsMap (istream &is) { - char buf[512]; - while (is && !is.eof()) { - is.getline(buf, 512); - if (!buf[0] || strchr(" %#;*", buf[0])) // comment? - continue; - char *first=buf, *last=buf, *end=buf+is.gcount()-1; - MapEntry entry; - string name; - while (last < end && *first) { - last = first; - switch (read_entry(first, last)) { - case FM_NAME: - if (name.empty()) - name = first; - break; - case FM_ENC: - entry.encname = first; break; - case FM_FONT: - entry.fontname = first; break; - case FM_ERROR: - continue; - default: - break; - } - first = last+1; - } - // strip filename suffix - size_t len; - if ((len = entry.encname.length()) > 4 && entry.encname.substr(len-4) == ".enc") - entry.encname = entry.encname.substr(0, len-4); - if ((len = entry.fontname.length()) > 4 && entry.fontname[len-4] == '.') - entry.fontname = entry.fontname.substr(0, len-4); - - if (!name.empty() && ((name != entry.fontname && !entry.fontname.empty()) || !entry.encname.empty())) - _fontMap[name] = entry; - } -} - - -/** Read map file in dvipdfm format. - * [|default|none] [] [options] - * The optional trailing dvipdfm-parameters -r, -e and -s are ignored. - * @param[in] is data is read from this stream */ -void FontMap::readPdfMap (istream &is) { - char buf[512]; - while (is && !is.eof()) { - is.getline(buf, 512); - if (!buf[0] || strchr(" %#;*", buf[0])) // comment? - continue; - char *first=buf, *last=buf, *end=buf+is.gcount()-1; - vector fields; - for (int i=0; i < 3 && last < end && *first; i++) { - FontMapFieldType type = read_entry(first, last, true); - if (*first == '-') - break; - if (type == FM_NAME) - fields.push_back(first); - first = last+1; - } - if (fields.size() > 1 && (fields[1] == "default" || fields[1] == "none")) - fields[1].clear(); - - if (fields.size() < 2) - continue; - if ((fields.size() == 2 && fields[1].empty()) || (fields.size() == 3 && fields[1].empty() && fields[0] == fields[2])) - continue; - - _fontMap[fields[0]].fontname = fields[fields.size() == 2 ? 0 : 2]; - _fontMap[fields[0]].encname = fields[1]; - } -} - - - -static char* str_tolower (char *str) { - for (char *p=str; *p; p++) - *p = tolower(*p); - return str; -} - - -static inline char* get_extension (char *fname) { - if (char* p=strrchr(fname, '.')) - return p+1; - return 0; -} - - - - -/** Reads a single line entry. - * @param[in,out] first pointer to first char of entry - * @param[in,out] last pointer to last char of entry - * @param[in] name_only true, if special meanings of \" and < should be ignored - * @return entry type */ -static FontMapFieldType read_entry (char* &first, char* &last, bool name_only) { - while (*first && isspace(*first)) - first++; - if (!name_only) { - if (*first == '"') { - last = first+1; - while (*last && *last != '"') - last++; - if (*last == 0) // quote not closed => skip invalid line - return FM_ERROR; - return FM_PS_CODE; - } - else if (*first == '<') { - bool eval_prefix = true; - FontMapFieldType type=FM_HEADER; - first++; - if (isspace(*first)) { - first++; - eval_prefix = false; - } - else if (*first == '<' || *first == '[') { - type = (*first == '<') ? FM_FONT : FM_ENC; - first++; - } - if (read_entry(first, last, true) != FM_NAME) - return FM_ERROR; - if (type == FM_HEADER) { - if (char *ext = get_extension(first)) { - ext = str_tolower(ext); - if (strcmp(ext, "enc")==0) - return FM_ENC; - if (strcmp(ext, "pfb")==0 || strcmp(ext, "pfa")==0) - return FM_FONT; - } - } - return type; - } - } - last = first; - while (*last && !isspace(*last)) - last++; - *last = 0; - return (first < last) ? FM_NAME : FM_NONE; -} - - -ostream& FontMap::write (ostream &os) const { - for (map::const_iterator i=_fontMap.begin(); i != _fontMap.end(); ++i) - os << i->first << " -> " << i->second.fontname << " [" << i->second.encname << "]\n"; - return os; -} - - -void FontMap::readdir (const string &dirname) { - Directory dir(dirname); - while (const char *fname = dir.read('f')) { - if (strlen(fname) >= 4 && strcmp(fname+strlen(fname)-4, ".map") == 0) { - string path = dirname + "/" + fname; - read(path.c_str()); - } - } -} - - -/** Returns name of font that is mapped to a given font. - * @param[in] fontname name of font whose mapped name is retrieved - * @returns name of mapped font */ -const char* FontMap::lookup (const string &fontname) const { - ConstIterator it = _fontMap.find(fontname); - if (it == _fontMap.end()) - return 0; - return it->second.fontname.c_str(); -} - - -/** Returns the name of the assigned encoding for a given font. - * @param[in] fontname name of font whose encoding is returned - * @return name of encoding, 0 if there is no encoding assigned */ -const char* FontMap::encoding (const string &fontname) const { - ConstIterator it = _fontMap.find(fontname); - if (it == _fontMap.end() || it->second.encname.empty()) - return 0; - return it->second.encname.c_str(); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontMap.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontMap.h deleted file mode 100644 index ec2c69af0f6..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/FontMap.h +++ /dev/null @@ -1,60 +0,0 @@ -/************************************************************************* -** FontMap.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef FONTMAP_H -#define FONTMAP_H - -#include -#include -#include -#include -#include - - -class FontMap -{ - struct MapEntry - { - std::string fontname; ///< target font name - std::string encname; ///< name of font encoding - }; - - typedef std::map::const_iterator ConstIterator; - - public: - FontMap () {} - FontMap (const std::string &fname); - FontMap (std::istream &is); - bool read (const std::string &fname); - void readdir (const std::string &dirname); - void clear () {_fontMap.clear();} - std::ostream& write (std::ostream &os) const; - const char* lookup(const std::string &fontname) const; - const char* encoding (const std::string &fontname) const; - - protected: - void readPsMap (std::istream &is); - void readPdfMap (std::istream &is); - - private: - std::map _fontMap; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFGlyphTracer.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFGlyphTracer.cpp deleted file mode 100644 index 9dbb4b5fa71..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFGlyphTracer.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/************************************************************************* -** GFGlyphTracer.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include "GFGlyphTracer.h" -#include "Pair.h" - -using namespace std; - -GFGlyphTracer::GFGlyphTracer () : GFTracer(_ifs, 0), _glyph(0), _callback(0) -{ -} - -/** Constructs a new glyph tracer. - * @param[in] is GF input stream - * @param[in] upp target units per TeX point */ -GFGlyphTracer::GFGlyphTracer (string &fname, double upp, Callback *cb) - : GFTracer(_ifs, upp), _glyph(0), _callback(cb) -{ - if (_callback) - _callback->setFont(fname); - _ifs.open(fname.c_str(), ios::binary); -} - - -void GFGlyphTracer::reset (string &fname, double upp) { - if (_callback) - _callback->setFont(fname); - if (_ifs.is_open()) - _ifs.close(); - unitsPerPoint(upp); - _ifs.open(fname.c_str(), ios::binary); -} - - -bool GFGlyphTracer::executeChar (UInt8 c) { - if (_glyph) { - if (_callback) - _callback->beginChar(c); - bool ok = GFTracer::executeChar(c); - if (_callback) { - if (ok) - _callback->endChar(c); - else - _callback->emptyChar(c); - return ok; - } - } - return false; -} - - -void GFGlyphTracer::moveTo (double x, double y) { - _glyph->moveto(int(x), int(y)); -} - - -void GFGlyphTracer::lineTo (double x, double y) { - _glyph->lineto(int(x), int(y)); -} - - -void GFGlyphTracer::curveTo (double c1x, double c1y, double c2x, double c2y, double x, double y) { - _glyph->cubicto(int(c1x), int(c1y), int(c2x), int(c2y), int(x), int(y)); -} - - -void GFGlyphTracer::closePath () { - _glyph->closepath(); -} - - -void GFGlyphTracer::endChar (UInt32 c) { - _glyph->newpath(); - GFTracer::endChar(c); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFGlyphTracer.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFGlyphTracer.h deleted file mode 100644 index 14a927fcef9..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFGlyphTracer.h +++ /dev/null @@ -1,60 +0,0 @@ -/************************************************************************* -** GFGlyphTracer.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef GFGLYPHTRACER_H -#define GFGLYPHTRACER_H - -#include -#include -#include "GFTracer.h" -#include "Glyph.h" - -class GFGlyphTracer : public GFTracer -{ - public: - struct Callback { - virtual ~Callback () {} - virtual void setFont (const std::string &fontname) {} - virtual void beginChar (UInt8 c) {} - virtual void endChar (UInt8 c) {} - virtual void emptyChar (UInt8 c) {} - }; - - public: - GFGlyphTracer (); - GFGlyphTracer (std::string &fname, double upp, Callback *cb=0); - void reset (std::string &fname, double upp); - void setCallback (Callback *cb) {_callback = cb;} - bool executeChar (UInt8 c); - void moveTo (double x, double y); - void lineTo (double x, double y); - void curveTo (double c1x, double c1y, double c2x, double c2y, double x, double y); - void closePath (); - void endChar (UInt32 c); - void setGlyph (Glyph &glyph) {_glyph = &glyph;} - const Glyph& getGlyph () const {return *_glyph;} - - private: - std::ifstream _ifs; - Glyph *_glyph; - Callback *_callback; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFReader.cpp deleted file mode 100644 index b47c175f048..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFReader.cpp +++ /dev/null @@ -1,352 +0,0 @@ -/************************************************************************* -** GFReader.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "GFReader.h" -#include "macros.h" -#include "SignalHandler.h" - -using namespace std; - -struct GFCommand -{ - void (GFReader::*method)(int); - int numBytes; -}; - - -static inline double fix2double (Int32 fix) { - return double(fix)/(1 << 20); -} - - -static inline double scaled2double (Int32 scaled) { - return double(scaled)/(1 << 16); -} - - -GFReader::GFReader (istream &is) : _in(is) -{ - _minX = _maxX = _minY = _maxY = _x = _y = 0; -} - - -UInt32 GFReader::readUnsigned (int bytes) { - UInt32 ret = 0; - for (int i=bytes-1; i >= 0 && !_in.eof(); i--) { - UInt32 b = _in.get(); - ret |= b << (8*i); - } - return ret; -} - - -Int32 GFReader::readSigned (int bytes) { - Int32 ret = _in.get(); - if (ret & 128) // negative value? - ret |= 0xffffff00; - for (int i=bytes-2; i >= 0 && !_in.eof(); i--) - ret = (ret << 8) | _in.get(); - return ret; -} - - -string GFReader::readString (int bytes) { - vector buf(bytes+1); - if (bytes > 0) - _in.get(&buf[0], bytes+1); // reads 'bytes' bytes (pos. bytes+1 is set to 0) - else - buf[0] = 0; - return &buf[0]; -} - - -/** Reads a single GF command from the current position of the input stream and calls the - * corresponding cmdFOO method. - * @return opcode of the executed command */ -int GFReader::executeCommand () { - SignalHandler::instance().check(); - /* Each cmdFOO command reads the necessary number of bytes from the stream so executeCommand - doesn't need to know the exact GF command format. Some cmdFOO methods are used for multiple - GF commands because they only differ in the size of their parameters. */ - static const GFCommand commands[] = { - {&GFReader::cmdPaint, 1}, {&GFReader::cmdPaint, 2}, {&GFReader::cmdPaint, 3}, // 64-66 - {&GFReader::cmdBoc, 0}, {&GFReader::cmdBoc1, 0}, // 67-68 - {&GFReader::cmdEoc, 0}, // 69 - {&GFReader::cmdSkip, 0}, {&GFReader::cmdSkip, 1}, {&GFReader::cmdSkip, 2},{&GFReader::cmdSkip, 3}, // 70-73 - {&GFReader::cmdXXX, 1}, {&GFReader::cmdXXX, 2}, {&GFReader::cmdXXX, 3}, {&GFReader::cmdXXX, 4}, // 239-242 - {&GFReader::cmdYYY, 0}, // 243 - {&GFReader::cmdNop, 0}, // 244 - {&GFReader::cmdCharLoc, 0}, {&GFReader::cmdCharLoc0, 0}, // 245-246 - {&GFReader::cmdPre, 0}, {&GFReader::cmdPost, 0}, {&GFReader::cmdPostPost, 0} // 247-249 - }; - - int opcode = _in.get(); - if (opcode < 0) // at end of file? - throw GFException("unexpected end of file"); - - if (opcode >= 0 && opcode <= 63) - cmdPaint0(opcode); - else if (opcode >= 74 && opcode <= 238) - cmdNewRow(opcode-74); - else if (opcode >= 250) { - ostringstream oss; - oss << "undefined GF command (opcode " << opcode << ")"; - throw GFException(oss.str()); - } - else { - int offset = opcode <= 73 ? 64 : 239-(73-64+1); - const GFCommand &cmd = commands[opcode-offset]; - if (cmd.method) - (this->*cmd.method)(cmd.numBytes); - } - return opcode; -} - - -bool GFReader::executeChar (UInt8 c) { - _in.clear(); - if (_charInfoMap.empty()) - executePostamble(); // read character info - _in.clear(); - Iterator it = _charInfoMap.find(c); - if (_in && it != _charInfoMap.end()) { - _in.seekg(it->second.location, ios_base::beg); - while (executeCommand() != 69); // execute all commands until eoc is reached - return true; - } - return false; -} - - -bool GFReader::executeAllChars () { - _in.clear(); - if (_charInfoMap.empty()) - executePostamble(); // read character info - _in.clear(); - if (_in) { - _in.seekg(0); - while (executeCommand() != 248); // execute all commands until postamble is reached - return true; - } - return false; -} - - -bool GFReader::executePostamble () { - _in.clear(); - if (!_in) - return false; - _in.seekg(-1, ios_base::end); - while (_in.peek() == 223) // skip fill bytes - _in.seekg(-1, ios_base::cur); - _in.seekg(-4, ios_base::cur); - UInt32 q = readUnsigned(4); // pointer to begin of postamble - _in.seekg(q, ios_base::beg); // now on begin of postamble - while (executeCommand() != 249); // execute all commands until postpost is reached - return true; -} - - -/** Returns the design size of this font int TeX point units. */ -double GFReader::getDesignSize () const { - return fix2double(_designSize); -} - -/** Returns the number of horizontal pixels per point. */ -double GFReader::getHPixelsPerPoint () const { - return scaled2double(_hppp); -} - -/** Returns the number of vertical pixels per point. */ -double GFReader::getVPixelsPerPoint () const { - return scaled2double(_vppp); -} - -/** Returns the width of character c in TeX point units */ -double GFReader::getCharWidth (UInt32 c) const { - ConstIterator it = _charInfoMap.find(c%256); - return it == _charInfoMap.end() ? 0 : it->second.width*getDesignSize()/(1<<24); -} - -/////////////////////// - - -/** Reads the preamble. */ -void GFReader::cmdPre (int) { - UInt32 i = readUnsigned(1); - if (i == 131) { - UInt32 k = readUnsigned(1); - string s = readString(k); - preamble(s); - } - else - throw GFException("invalid identification number in GF preamble"); -} - - -/** Reads the postamble. */ -void GFReader::cmdPost (int) { - readUnsigned(4); // pointer to byte after final eoc - _designSize = readUnsigned(4); // design size of font in points - _checksum = readUnsigned(4); // checksum - _hppp = readUnsigned(4); // horizontal pixels per point (scaled int) - _vppp = readUnsigned(4); // vertical pixels per point (scaled int) - _in.seekg(16, ios_base::cur); // skip x and y bounds - postamble(); -} - - -/** Reads trailing bytes at end of stream. */ -void GFReader::cmdPostPost (int) { - readUnsigned(4); // pointer to begin of postamble - UInt32 i = readUnsigned(1); - if (i == 131) - while (readUnsigned(1) == 223); // skip fill bytes - else - throw GFException("invalid identification number in GF preamble"); -} - - -/** Inverts "paint color" (black to white or vice versa) of n pixels - * and advances the cursor by n. - * @param[in] n number of pixels to be inverted */ -void GFReader::cmdPaint0 (int n) { - if (_penDown) // set pixels? - _bitmap.setBits(_y, _x, n); - _x += n; - _penDown = !_penDown; // inverse pen state -} - - -/** Inverts "paint color" (black to white or vice versa) of n pixels - * and advances the cursor by n. The number n of pixels is read from - * the input stream. - * @param[in] len size of n in bytes */ -void GFReader::cmdPaint (int len) { - UInt32 pixels = readUnsigned(len); - cmdPaint0(pixels); -} - - -/** Beginning of character (generic format). */ -void GFReader::cmdBoc (int) { - _currentChar = readSigned(4); - readSigned(4); // pointer to previous boc with same c mod 256 - _minX = readSigned(4); - _maxX = readSigned(4); - _minY = readSigned(4); - _maxY = readSigned(4); - _x = _minX; - _y = _maxY; - _penDown = false; - _bitmap.resize(_minX, _maxX, _minY, _maxY); - beginChar(_currentChar); -} - - -/** Beginning of character (compact format). */ -void GFReader::cmdBoc1 (int) { - _currentChar = readUnsigned(1); - UInt32 dx = readUnsigned(1); - _maxX = readUnsigned(1); - _minX = _maxX - dx; - UInt32 dy = readUnsigned(1); - _maxY = readUnsigned(1); - _minY = _maxY - dy; - _x = _minX; - _y = _maxY; - _penDown = false; - _bitmap.resize(_minX, _maxX, _minY, _maxY); - beginChar(_currentChar); -} - - -/** End of character. */ -void GFReader::cmdEoc (int) { - endChar(_currentChar); -} - - -/** Moves cursor to the beginning of a following row and sets - * paint color to white. - * @param[in] len if 0: move to next row, otherwise: number of bytes to read. - * The read value denotes the number of rows to be skipped. */ -void GFReader::cmdSkip (int len) { - if (len == 0) - _y--; - else - _y -= readUnsigned(len)+1; - _x = _minX; - _penDown = false; -} - - -/** Moves cursor to pixel number 'col' in the next row and sets - * the paint color to black. - * @param[in] col pixel/column number */ -void GFReader::cmdNewRow (int col) { - _x = _minX + col ; - _y--; - _penDown = true; -} - - -void GFReader::cmdXXX (int len) { - UInt32 n = readUnsigned(len); - string str = readString(n); - special(str); -} - - -void GFReader::cmdYYY (int) { - Int32 y = readSigned(4); - numspecial(y); -} - - -/** Does nothing. */ -void GFReader::cmdNop (int) { -} - - -/** Reads character locator (part of postamble) */ -void GFReader::cmdCharLoc0 (int) { - UInt8 c = readUnsigned(1); // character code mod 256 - UInt8 dm = readUnsigned(1); // - Int32 w = readSigned(4); // (1<<24)*characterWidth/designSize - Int32 p = readSigned(4); // pointer to begin of (last) character data - Int32 dx = 65536*dm; - Int32 dy = 0; - _charInfoMap[c] = CharInfo(dx, dy, w, p); -} - - -/** Reads character locator (part of postamble) */ -void GFReader::cmdCharLoc (int) { - UInt32 c = readUnsigned(1); // character code mod 256 - Int32 dx = readSigned(4); // horizontal escapement (scaled pixel units) - Int32 dy = readSigned(4); // vertical escapement (scaled pixel units) - Int32 w = readSigned(4); // (1<<24)*characterWidth/designSize - Int32 p = readSigned(4); // pointer to begin of (last) character data - _charInfoMap[c] = CharInfo(dx, dy, w, p); -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFReader.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFReader.h deleted file mode 100644 index cbc9fec3e77..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFReader.h +++ /dev/null @@ -1,110 +0,0 @@ -/************************************************************************* -** GFReader.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef GFREADER_H -#define GFREADER_H - -#include -#include -#include -#include "Bitmap.h" -#include "MessageException.h" -#include "types.h" - - -class CharInfo; - - -struct GFException : public MessageException -{ - GFException (const std::string &msg) : MessageException(msg) {} -}; - - -class GFReader -{ - struct CharInfo - { - CharInfo () : dx(0), dy(0), width(0), location(0) {} - CharInfo (Int32 dxx, Int32 dyy, Int32 w, UInt32 p) : dx(dxx), dy(dyy), width(w), location(p) {} - - Int32 dx, dy; - Int32 width; // 2^24 * (true width)/(design size) - UInt32 location; - }; - - typedef std::map::iterator Iterator; - typedef std::map::const_iterator ConstIterator; - public: - GFReader (std::istream &is); - virtual ~GFReader () {} - bool executeChar (UInt8 c); - bool executeAllChars (); - bool executePostamble (); - virtual void preamble (const std::string &str) {} - virtual void postamble () {} - virtual void beginChar (UInt32 c) {} - virtual void endChar (UInt32 c) {} - virtual void special (std::string str) {} - virtual void numspecial (Int32 y) {} - const Bitmap& getBitmap () const {return _bitmap;} - double getDesignSize () const; - double getHPixelsPerPoint () const; - double getVPixelsPerPoint () const; - double getCharWidth (UInt32 c) const; - UInt32 getChecksum () const {return _checksum;} - - protected: - Int32 readSigned (int bytes); - UInt32 readUnsigned (int bytes); - std::string readString (int len); - int executeCommand (); - std::istream& getInputStream () const {return _in;} - - void cmdPre (int); - void cmdPost (int); - void cmdPostPost (int); - void cmdPaint0 (int pixels); - void cmdPaint (int len); - void cmdBoc (int); - void cmdBoc1 (int); - void cmdEoc (int); - void cmdSkip (int len); - void cmdNewRow (int col); - void cmdXXX (int len); - void cmdYYY (int); - void cmdNop (int); - void cmdCharLoc0 (int); - void cmdCharLoc (int); - - private: - std::istream &_in; - Int32 _minX, _maxX, _minY, _maxY; - Int32 _x, _y; // current pen location (pixel units) - Int32 _currentChar; - Bitmap _bitmap; // bitmap of current char - FixWord _designSize; // designSize - ScaledInt _hppp, _vppp; // horizontal and vertical pixel per point - UInt32 _checksum; - std::map _charInfoMap; - bool _penDown; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFTracer.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFTracer.cpp deleted file mode 100644 index 981d45dda10..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFTracer.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/************************************************************************* -** GFTracer.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include "GFTracer.h" -#include "Glyph.h" -#include "Message.h" - -#ifdef __MSVC__ -#include -#else -extern "C" { -#include -} -#endif - -using namespace std; - - -GFTracer::GFTracer (istream &is) - : GFReader(is), _unitsPerPoint(0.0) -{ -} - - -/** Constructs a new GFTracer. - * @param[in] is GF file is read from this stream - * @param[in] upp target units per TeX point */ -GFTracer::GFTracer (istream &is, double upp) - : GFReader(is), _unitsPerPoint(upp) -{ -} - - -void GFTracer::beginChar (UInt32 c) { -} - - -void GFTracer::endChar (UInt32 c) { - const Bitmap &bitmap = getBitmap(); - if (bitmap.empty()) - return; - - // prepare potrace's bitmap structure - vector buffer; - potrace_bitmap_t pobitmap; - pobitmap.w = bitmap.width(); - pobitmap.h = bitmap.height(); - pobitmap.dy = bitmap.copy(buffer); - pobitmap.map = &buffer[0]; - potrace_param_t *param = potrace_param_default(); - potrace_state_t *state = potrace_trace(param, &pobitmap); - potrace_param_free(param); - - if (!state || state->status == POTRACE_STATUS_INCOMPLETE) - Message::wstream(true) << "error while tracing character\n"; - else { - double hsf=1.0, vsf=1.0; // horizontal a d vertical scale factor - if (_unitsPerPoint != 0.0) { - hsf = _unitsPerPoint/getHPixelsPerPoint(); // horizontal scale factor - vsf = _unitsPerPoint/getVPixelsPerPoint(); // vertical scale factor - } - for (potrace_path_t *path = state->plist; path; path = path->next) { - potrace_dpoint_t &p = path->curve.c[path->curve.n-1][2]; // start/end point - moveTo(hsf*(p.x+bitmap.xshift()), vsf*(p.y+bitmap.yshift())); - for (int i=0; i < path->curve.n; i++) { - if (path->curve.tag[i] == POTRACE_CURVETO) { - curveTo(hsf*(path->curve.c[i][0].x+bitmap.xshift()), vsf*(path->curve.c[i][0].y+bitmap.yshift()), - hsf*(path->curve.c[i][1].x+bitmap.xshift()), vsf*(path->curve.c[i][1].y+bitmap.yshift()), - hsf*(path->curve.c[i][2].x+bitmap.xshift()), vsf*(path->curve.c[i][2].y+bitmap.yshift())); - } - else { - lineTo(hsf*(path->curve.c[i][1].x+bitmap.xshift()), vsf*(path->curve.c[i][1].y+bitmap.yshift())); - if (i == path->curve.n-1) - closePath(); - else - lineTo(hsf*(path->curve.c[i][2].x+bitmap.xshift()), vsf*(path->curve.c[i][2].y+bitmap.yshift())); - } - } - } - } - potrace_state_free(state); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFTracer.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFTracer.h deleted file mode 100644 index 6d6a4351a05..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GFTracer.h +++ /dev/null @@ -1,47 +0,0 @@ -/************************************************************************* -** GFTracer.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef GFTRACER_H -#define GFTRACER_H - -#include -#include "GFReader.h" - -class GFTracer : public GFReader -{ - public: - GFTracer (std::istream &is); - GFTracer (std::istream &is, double upp); - virtual ~GFTracer () {} - virtual void moveTo (double x, double y) {} - virtual void lineTo (double x, double y) {} - virtual void curveTo (double c1x, double c1y, double c2x, double c2y, double x, double y) {} - virtual void closePath () {} - void beginChar (UInt32 c); - void endChar (UInt32 c); - - protected: - void unitsPerPoint(double upp) {_unitsPerPoint = upp;} - - private: - double _unitsPerPoint; ///< target units per TeX point -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Ghostscript.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Ghostscript.cpp deleted file mode 100644 index d7534b045ce..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Ghostscript.cpp +++ /dev/null @@ -1,236 +0,0 @@ -/************************************************************************* -** Ghostscript.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include "Ghostscript.h" -#if !defined(DISABLE_GS) - -#include -#include -#include - -using namespace std; - -#ifdef __WIN32__ - #define GS_DL_NAME "gsdll32.dll" -#else - #define GS_DL_NAME "libgs.so" -#endif - - -string Ghostscript::LIBGS_NAME; - - -/** Loads the Ghostscript library but does not create an instance. This - * constructor should only be used to call available() and revision(). */ -Ghostscript::Ghostscript () -#if !defined(HAVE_LIBGS) - : DLLoader(LIBGS_NAME.empty() ? GS_DL_NAME : LIBGS_NAME.c_str()) -#endif -{ - _inst = 0; -} - - -/** Tries to load the shared library and to initialize Ghostscript. - * @param[in] argc number of parameters in array argv - * @param[in] argv parameters passed to Ghostscript - * @param[in] caller this parameter is passed to all callback functions */ -Ghostscript::Ghostscript (int argc, const char **argv, void *caller) -#if !defined(HAVE_LIBGS) - : DLLoader(LIBGS_NAME.empty() ? GS_DL_NAME : LIBGS_NAME.c_str()) -#endif -{ - _inst = 0; - init(argc, argv, caller); -} - - -/** Exits Ghostscript and unloads the dynamic library. */ -Ghostscript::~Ghostscript () { - if (_inst) { - exit(); - delete_instance(); - } -} - - -bool Ghostscript::init (int argc, const char **argv, void *caller) { - if (!_inst) { - int status = new_instance(&_inst, caller); - if (status < 0) - _inst = 0; - else { - init_with_args(argc, (char**)argv); - } - } - return _inst != 0; -} - - -/** Returns true if Ghostscript library was found and can be loaded. */ -bool Ghostscript::available () { -#if defined(HAVE_LIBGS) - return true; -#else - return loaded(); -#endif -} - - -/** Retrieves version information about Ghostscript. - * @param[out] r takes the revision information (see GS API documentation for further details) - * @return true on success */ -bool Ghostscript::revision (gsapi_revision_t *r) { -#if defined(HAVE_LIBGS) - return (gsapi_revision(r, sizeof(gsapi_revision_t)) == 0); -#else - if (PFN_gsapi_revision fn = (PFN_gsapi_revision)loadFunction("gsapi_revision")) - return (fn(r, sizeof(gsapi_revision_t)) == 0); - return false; -#endif -} - - -string Ghostscript::revision () { - gsapi_revision_t r; - if (revision(&r)) { - ostringstream oss; - oss << r.product << ' ' << (r.revision/100) << '.' << setfill('0') << setw(2) << (r.revision%100); - return oss.str(); - } - return ""; -} - - -/** Creates a new instance of Ghostscript. This method is called by the constructor and - * should not be used elsewhere. - * @param[out] psinst handle of newly created instance (or 0 on error) - * @param[in] caller pointer forwarded to callback functions */ -int Ghostscript::new_instance (void **psinst, void *caller) { -#if defined(HAVE_LIBGS) - return gsapi_new_instance(psinst, caller); -#else - if (PFN_gsapi_new_instance fn = (PFN_gsapi_new_instance)loadFunction("gsapi_new_instance")) - return fn(psinst, caller); - *psinst = 0; - return 0; -#endif -} - - -/** Destroys the current instance of Ghostscript. This method is called by the destructor - * and should not be used elsewhere. */ -void Ghostscript::delete_instance () { -#if defined(HAVE_LIBGS) - gsapi_delete_instance(_inst); -#else - if (PFN_gsapi_delete_instance fn = (PFN_gsapi_delete_instance)loadFunction("gsapi_delete_instance")) - fn(_inst); -#endif -} - - -/** Exits the interpreter. Must be called before destroying the GS instance. */ -int Ghostscript::exit () { -#if defined(HAVE_LIBGS) - return gsapi_exit(_inst); -#else - if (PFN_gsapi_exit fn = (PFN_gsapi_exit)loadFunction("gsapi_exit")) - return fn(_inst); - return 0; -#endif -} - - -/** Sets the I/O callback functions. - * @param[in] in pointer to stdin handler - * @param[in] out pointer to stdout handler - * @param[in] err pointer to stderr handler */ -int Ghostscript::set_stdio (Stdin in, Stdout out, Stderr err) { -#if defined(HAVE_LIBGS) - return gsapi_set_stdio(_inst, in, out, err); -#else - if (PFN_gsapi_set_stdio fn = (PFN_gsapi_set_stdio)loadFunction("gsapi_set_stdio")) - return fn(_inst, in, out, err); - return 0; -#endif -} - - -/** Initializes Ghostscript with a set of optional parameters. This - * method is called by the constructor and should not be used elsewhere. - * @param[in] argc number of paramters - * @param[in] argv parameters passed to Ghostscript */ -int Ghostscript::init_with_args (int argc, char **argv) { -#if defined(HAVE_LIBGS) - return gsapi_init_with_args(_inst, argc, argv); -#else - if (PFN_gsapi_init_with_args fn = (PFN_gsapi_init_with_args)loadFunction("gsapi_init_with_args")) - return fn(_inst, argc, argv); - return 0; -#endif -} - - -/** Tells Ghostscript that several calls of run_string_continue will follow. */ -int Ghostscript::run_string_begin (int user_errors, int *pexit_code) { -#if defined(HAVE_LIBGS) - return gsapi_run_string_begin(_inst, user_errors, pexit_code); -#else - if (PFN_gsapi_run_string_begin fn = (PFN_gsapi_run_string_begin)loadFunction("gsapi_run_string_begin")) - return fn(_inst, user_errors, pexit_code); - *pexit_code = 0; - return 0; -#endif -} - - -/** Executes a chunk of PostScript commands given by a buffer of characters. The size of - * this buffer must not exceed 64KB. Longer programs can be split into arbitrary smaller chunks - * and passed to Ghostscript by successive calls of run_string_continue. - * @param[in] str buffer containing the PostScript code - * @param[in] length number of characters in buffer - * @param[in] user_errors if non-negative, the default PS error values will be generated, otherwise this value is returned - * @param[out] pexit_code takes the PS error code */ -int Ghostscript::run_string_continue (const char *str, unsigned length, int user_errors, int *pexit_code) { -#if defined(HAVE_LIBGS) - return gsapi_run_string_continue(_inst, str, length, user_errors, pexit_code); -#else - if (PFN_gsapi_run_string_continue fn = (PFN_gsapi_run_string_continue)loadFunction("gsapi_run_string_continue")) - return fn(_inst, str, length, user_errors, pexit_code); - *pexit_code = 0; - return 0; -#endif -} - - -/** Terminates the successive code feeding. Must be called after the last call of run_string_continue. */ -int Ghostscript::run_string_end (int user_errors, int *pexit_code) { -#if defined(HAVE_LIBGS) - return gsapi_run_string_end(_inst, user_errors, pexit_code); -#else - if (PFN_gsapi_run_string_end fn = (PFN_gsapi_run_string_end)loadFunction("gsapi_run_string_end")) - return fn(_inst, user_errors, pexit_code); - *pexit_code = 0; - return 0; -#endif -} - -#endif // !DISABLE_GS diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Ghostscript.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Ghostscript.h deleted file mode 100644 index ab9bb000841..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Ghostscript.h +++ /dev/null @@ -1,103 +0,0 @@ -/************************************************************************* -** Ghostscript.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef GHOSTSCRIPT_H -#define GHOSTSCRIPT_H - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#if defined(DISABLE_GS) - #include "iapi.h" -#elif defined(HAVE_LIBGS) - #include -#else - #include "DLLoader.h" - #include "iapi.h" -#endif - -#if defined(__WIN32__) && !defined(_Windows) - #define _Windows -#endif - -#if defined(DISABLE_GS) -struct Ghostscript -{ - typedef int (GSDLLCALLPTR Stdin) (void *caller, char *buf, int len); - typedef int (GSDLLCALLPTR Stdout) (void *caller, const char *str, int len); - typedef int (GSDLLCALLPTR Stderr) (void *caller, const char *str, int len); - - Ghostscript () {} - Ghostscript (int argc, const char **argv, void *caller=0) {} - bool available () {return false;} - bool revision (gsapi_revision_t *r) {return false;} - std::string revision () {return "";} - int set_stdio (Stdin in, Stdout out, Stderr err) {return 0;} - int run_string_begin (int user_errors, int *pexit_code) {return 0;} - int run_string_continue (const char *str, unsigned int length, int user_errors, int *pexit_code) {return 0;} - int run_string_end (int user_errors, int *pexit_code) {return 0;} - int exit () {return 0;} -}; - -#else - -/** Wrapper class of (a subset of) the Ghostscript API. */ -class Ghostscript -#if !defined(HAVE_LIBGS) -: public DLLoader -#endif -{ - public: - typedef int (GSDLLCALLPTR Stdin) (void *caller, char *buf, int len); - typedef int (GSDLLCALLPTR Stdout) (void *caller, const char *str, int len); - typedef int (GSDLLCALLPTR Stderr) (void *caller, const char *str, int len); - - public: - Ghostscript (); - Ghostscript (int argc, const char **argv, void *caller=0); - ~Ghostscript (); - bool init (int argc, const char **argv, void *caller=0); - bool available (); - bool revision (gsapi_revision_t *r); - std::string revision (); - int set_stdio (Stdin in, Stdout out, Stderr err); - int run_string_begin (int user_errors, int *pexit_code); - int run_string_continue (const char *str, unsigned int length, int user_errors, int *pexit_code); - int run_string_end (int user_errors, int *pexit_code); - int exit (); - - static std::string LIBGS_NAME; - - protected: - Ghostscript (const Ghostscript &gs) {} - int init_with_args (int argc, char **argv); - int new_instance (void **psinst, void *caller); - void delete_instance (); - - private: - void *_inst; ///< Ghostscript handle needed to call the gsapi_foo functions -}; - -#endif // DISABLE_GS - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Glyph.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Glyph.h deleted file mode 100644 index 5866f23737b..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Glyph.h +++ /dev/null @@ -1,28 +0,0 @@ -/************************************************************************* -** Glyph.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef GLYPH_H -#define GLYPH_H - -#include "GraphicPath.h" - -typedef GraphicPath Glyph; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GlyphTracerMessages.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GlyphTracerMessages.h deleted file mode 100644 index 4f99a2db2a9..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GlyphTracerMessages.h +++ /dev/null @@ -1,65 +0,0 @@ -/************************************************************************* -** GlyphTracerMessages.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef GLYPHTRACERMESSAGES_H -#define GLYPHTRACERMESSAGES_H - -#include -#include "GFGlyphTracer.h" -#include "Message.h" -#include "types.h" - -class GlyphTracerMessages : public GFGlyphTracer::Callback -{ - public: - GlyphTracerMessages (bool sfmsg=true, bool autonl=true) : _sfmsg(sfmsg), _autonl(autonl) {} - - ~GlyphTracerMessages () { - if (_autonl) - Message::mstream() << '\n'; - } - - void endChar (UInt8 c) { - std::ostringstream oss; - oss << '['; - if (isprint(c)) - oss << c; - else - oss << '#' << unsigned(c); - oss << ']'; - Message::mstream(false, Terminal::BLUE) << oss.str(); - } - - void setFont (const std::string &fname) { - if (_sfmsg && fname != _fname) { - if (!_fname.empty()) - Message::mstream() << '\n'; - Message::mstream(false, Terminal::CYAN) << "tracing glyphs of " << fname.substr(0, fname.length()-3) << '\n'; - _fname = fname; - } - } - - private: - std::string _fname; - bool _sfmsg, _autonl; -}; - - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GraphicPath.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GraphicPath.h deleted file mode 100644 index bcebc040f38..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/GraphicPath.h +++ /dev/null @@ -1,322 +0,0 @@ -/************************************************************************* -** GraphicPath.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef GRAPHICPATH_H -#define GRAPHICPATH_H - -#include -#include -#include -#include "BoundingBox.h" -#include "Matrix.h" -#include "Pair.h" - - -template -class GraphicPath -{ - public: - typedef Pair Point; - - struct Command { - enum Type {MOVETO, LINETO, CONICTO, CUBICTO, CLOSEPATH}; - - Command (Type t) : type(t) {} - - Command (Type t, const Point &p) : type(t) { - params[0] = p; - } - - Command (Type t, const Point &p1, const Point &p2) : type(t) { - params[0] = p1; - params[1] = p2; - } - - Command (Type t, const Point &p1, const Point &p2, const Point &p3) : type(t) { - params[0] = p1; - params[1] = p2; - params[2] = p3; - } - - int numParams () const { - switch (type) { - case CLOSEPATH : return 0; - case MOVETO : - case LINETO : return 1; - case CONICTO : return 2; - case CUBICTO : return 3; - } - return 0; - } - - void transform (const Matrix &matrix) { - for (int i=0; i < numParams(); i++) - params[i] = matrix * params[i]; - } - - Type type; - Point params[3]; - }; - - struct Actions - { - virtual ~Actions () {} - virtual void moveto (const Point &p) {} - virtual void lineto (const Point &p) {} - virtual void hlineto (const T &y) {} - virtual void vlineto (const T &x) {} - virtual void sconicto (const Point &p) {} - virtual void conicto (const Point &p1, const Point &p2) {} - virtual void scubicto (const Point &p1, const Point &p2) {} - virtual void cubicto (const Point &p1, const Point &p2, const Point &p3) {} - virtual void closepath () {} - virtual void draw (char cmd, const Point *points, int n) {} - virtual bool quit () {return false;} - }; - - typedef typename std::vector::iterator Iterator; - typedef typename std::vector::const_iterator ConstIterator; - typedef typename std::vector::const_reverse_iterator ConstRevIterator; - - public: - void newpath () { - _commands.clear(); - } - - /// Returns true if path is empty (there is nothing to draw) - bool empty () const { - return _commands.empty(); - } - - size_t size () const { - return _commands.size(); - } - - void moveto (const T &x, const T &y) { - moveto(Point(x, y)); - } - - void moveto (const Point &p) { - // avoid sequences of several MOVETOs; always use latest - if (_commands.empty() || _commands.back().type != Command::MOVETO) - _commands.push_back(Command(Command::MOVETO, p)); - else - _commands.back().params[0] = p; - } - - void lineto (const T &x, const T &y) { - lineto(Point(x, y)); - } - - void lineto (const Point &p) { - _commands.push_back(Command(Command::LINETO, p)); - } - - void conicto (const T &x1, const T &y1, const T &x2, const T &y2) { - conicto(Point(x1, y1), Point(x2, y2)); - } - - void conicto (const Point &p1, const Point &p2) { - _commands.push_back(Command(Command::CONICTO, p1, p2)); - } - - void cubicto (const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3) { - cubicto(Point(x1, y1), Point(x2, y2), Point(x3, y3)); - } - - void cubicto (const Point &p1, const Point &p2, const Point &p3) { - _commands.push_back(Command(Command::CUBICTO, p1, p2, p3)); - } - - void closepath () { - _commands.push_back(Command(Command::CLOSEPATH)); - } - - - const std::vector& commands () const { - return _commands; - } - - - /** Detects all open subpaths and closes them by adding a closePath command. - * Most font formats only support closed outline paths so there are no explicit closePath statements - * in the glyph's outline description. All open paths are automatically closed by the renderer. - * This method detects all open paths and adds the missing closePath statement. */ - void closeOpenSubPaths () { - Command *prevCommand = 0; - FORALL(_commands, Iterator, it) { - if (it->type == Command::MOVETO && prevCommand && prevCommand->type != Command::CLOSEPATH) { - prevCommand = &(*it); - it = _commands.insert(it, Command(Command::CLOSEPATH))+1; -// ++it; // skip inserted closePath command in next iteration step - } - else - prevCommand = &(*it); - } - if (!_commands.empty() && _commands.back().type != Command::CLOSEPATH) - closepath(); - } - - - void writeSVG (std::ostream &os, double sx=1.0, double sy=1.0, double dx=0.0, double dy=0.0) const { - struct WriteActions : Actions { - WriteActions (std::ostream &os, double sx, double sy, double dx, double dy) - : _os(os), _sx(sx), _sy(sy), _dx(dx), _dy(dy) {} - - void draw (char cmd, const Point *points, int n) { - _os << cmd; - switch (cmd) { - case 'H': _os << _sx*points->x()+_dx; break; - case 'V': _os << _sy*points->y()+_dy; break; - default : - for (int i=0; i < n; i++) { - if (i > 0) - _os << ' '; - _os << _sx*points[i].x()+_dx << ' ' << _sy*points[i].y()+_dy; - } - } - } - std::ostream &_os; - double _sx, _sy, _dx, _dy; - } actions(os, sx, sy, dx, dy); - iterate(actions, true); - } - - - void computeBBox (BoundingBox &bbox) const { - struct BBoxActions : Actions { - BBoxActions (BoundingBox &bb) : bbox(bb) {} - void moveto (const Point &p) {bbox.embed(p);} - void lineto (const Point &p) {bbox.embed(p);} - void conicto (const Point &p1, const Point &p2) {bbox.embed(p1); bbox.embed(p2);} - void cubicto (const Point &p1, const Point &p2, const Point &p3) {bbox.embed(p1); bbox.embed(p2); bbox.embed(p3);} - BoundingBox &bbox; - } actions(bbox); - iterate(actions, false); - } - - bool isDot (Point &p) const { - struct DotActions : Actions { - DotActions () : differs(false) {} - void moveto (const Point &p) {point = p;} - void lineto (const Point &p) {differs = (p != point);} - void conicto (const Point &p1, const Point &p2) {differs = (point != p1 || point != p2);} - void cubicto (const Point &p1, const Point &p2, const Point &p3) {differs = (point != p1 || point != p2 || point != p3);} - bool quit () {return differs;} - Point point; - bool differs; - } actions; - iterate(actions, false); - p = actions.point; - return !actions.differs; - } - - void transform (const Matrix &matrix) { - FORALL(_commands, Iterator, it) - it->transform(matrix); - } - - void iterate (Actions &actions, bool optimize) const; - - private: - std::vector _commands; -}; - - -/** Iterates over all commands defining this path and calls the corresponding template methods. - * In the case of successive bezier curve sequences, control points or tangent slopes are often - * identical so that the path description contains redundant information. SVG provides shorthand - * curve commands that require less parameters. If 'optimize' is true, this method detects such - * command sequences. - * @param[in] actions template methods called by each iteration step - * @param[in] optimize if true, shorthand drawing commands (sconicto, scubicto,...) are considered */ -template -void GraphicPath::iterate (Actions &actions, bool optimize) const { - ConstIterator prev = _commands.end(); // pointer to preceding command - Point fp; // first point of current path - Point cp; // current point - Point pstore[2]; - for (ConstIterator it=_commands.begin(); it != _commands.end() && !actions.quit(); ++it) { - const Point *params = it->params; - switch (it->type) { - case Command::MOVETO: - actions.moveto(params[0]); - actions.draw('M', params, 1); - fp = params[0]; - break; - case Command::LINETO: - if (optimize) { - if (cp.x() == params[0].x()) { - actions.vlineto(params[0].y()); - actions.draw('V', params, 1); - } - else if (cp.y() == params[0].y()) { - actions.hlineto(params[0].x()); - actions.draw('H', params, 1); - } - else { - actions.lineto(params[0]); - actions.draw('L', params, 1); - } - } - else { - actions.lineto(params[0]); - actions.draw('L', params, 1); - } - break; - case Command::CONICTO: - if (optimize && prev != _commands.end() && prev->type == Command::CONICTO && params[0] == pstore[1]*T(2)-pstore[0]) { - actions.sconicto(params[1]); - actions.draw('T', params+1, 1); - } - else { - actions.conicto(params[0], params[1]); - actions.draw('Q', params, 2); - } - pstore[0] = params[0]; // store control point and - pstore[1] = params[1]; // curve endpoint - break; - case Command::CUBICTO: - // is first control point reflection of preceding second control point? - if (optimize && prev != _commands.end() && prev->type == Command::CUBICTO && params[0] == pstore[1]*T(2)-pstore[0]) { - actions.scubicto(params[1], params[2]); - actions.draw('S', params+1, 2); - } - else { - actions.cubicto(params[0], params[1], params[2]); - actions.draw('C', params, 3); - } - pstore[0] = params[1]; // store second control point and - pstore[1] = params[2]; // curve endpoint - break; - case Command::CLOSEPATH: - actions.closepath(); - actions.draw('Z', params, 0); - cp = fp; - } - // update current point - const int np = it->numParams(); - if (np > 0) - cp = it->params[np-1]; - prev = it; - } -} - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputBuffer.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputBuffer.cpp deleted file mode 100644 index f5e7125f80b..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputBuffer.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/************************************************************************* -** InputBuffer.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "InputBuffer.h" - -using namespace std; - - -StreamInputBuffer::StreamInputBuffer (istream &is, unsigned bufsize) - : _is(is), _bufsize(bufsize), _buf1(new UInt8[_bufsize]), _buf2(new UInt8[_bufsize]), _bufptr(_buf1) -{ - _size1 = fillBuffer(_buf1); - _size2 = fillBuffer(_buf2); -} - - -StreamInputBuffer::~StreamInputBuffer () { - delete [] _buf1; - delete [] _buf2; -} - - -int StreamInputBuffer::get () { - if (pos() == _size1) { - if (_size2 == 0) - return -1; - swap(_buf1, _buf2); - _size1 = _size2; - _bufptr = _buf1; - _size2 = fillBuffer(_buf2); - } - UInt8 c = *_bufptr++; - return c; -} - - -/** Returns the next character to be read without skipping it. - * Same as peek(0). */ -int StreamInputBuffer::peek () const { - if (pos() < _size1) - return *_bufptr; - return _size2 > 0 ? *_buf2 : -1; -} - - -/** Returns the n-th next character without skipping it. */ -int StreamInputBuffer::peek (unsigned n) const { - if (pos()+n < _size1) - return *(_bufptr+n); - if (pos()+n < _size1+_size2) - return *(_buf2 + pos()+n-_size1); - return -1; -} - - -/** Fills the buffer by reading a sequence of characters from the assigned - * input stream. - * @param[in] buf pointer to character buffer to be filled - * @return number of characters read */ -int StreamInputBuffer::fillBuffer (UInt8 *buf) { - if (_is && !_is.eof()) { - _is.read((char*)buf, _bufsize); - return _is.gcount(); - } - return 0; -} - -/////////////////////////////////////////////// - -SplittedCharInputBuffer::SplittedCharInputBuffer (const char *buf1, unsigned s1, const char *buf2, unsigned s2) { - _buf[0] = buf1; - _buf[1] = buf2; - _size[0] = buf1 ? s1 : 0; - _size[1] = buf2 ? s2 : 0; - _index = _size[0] ? 0 : 1; -} - - -int SplittedCharInputBuffer::get () { - if (_size[_index] == 0) - return -1; - int ret = *_buf[_index]++; - _size[_index]--; - if (_index == 0 && _size[0] == 0) - _index++; - return ret; -} - - -int SplittedCharInputBuffer::peek () const { - return _size[_index] ? *_buf[_index] : -1; -} - - -int SplittedCharInputBuffer::peek (unsigned n) const { - if (n < _size[_index]) - return _buf[_index][n]; - n -= _size[_index]; - if (_index == 0 && n < _size[1]) - return _buf[1][n]; - return -1; -} - -/////////////////////////////////////////////// - - -int TextStreamInputBuffer::get () { - int c = StreamInputBuffer::get(); - if (c == '\n') { - _line++; - _col = 1; - } - else - _col++; - return c; -} - - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputBuffer.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputBuffer.h deleted file mode 100644 index 910f66429e9..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputBuffer.h +++ /dev/null @@ -1,145 +0,0 @@ -/************************************************************************* -** InputBuffer.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef INPUTBUFFER_H -#define INPUTBUFFER_H - -#include -#include -#include -#include -#include -#include "types.h" - -struct InputBuffer -{ - virtual ~InputBuffer () {} - virtual int get () =0; - virtual int peek () const =0; - virtual int peek (unsigned n) const =0; - virtual bool eof () const =0; - virtual void invalidate () =0; -}; - - -class StreamInputBuffer : public InputBuffer -{ - public: - StreamInputBuffer (std::istream &is, unsigned bufsize=1024); - ~StreamInputBuffer (); - int get (); - int peek () const; - int peek (unsigned n) const; - bool eof () const {return pos() == _size1 && _size2 == 0;} - void invalidate () {_bufptr = _buf1+_size1; _size2 = 0;} - - protected: - int fillBuffer (UInt8 *buf); - unsigned pos () const {return _bufptr-_buf1;} - - private: - std::istream &_is; - const unsigned _bufsize; ///< maximal number of bytes each buffer can hold - UInt8 *_buf1; ///< pointer to first buffer - UInt8 *_buf2; ///< pointer to second buffer - unsigned _size1; ///< number of bytes in buffer 1 - unsigned _size2; ///< number of bytes in buffer 2 - UInt8 *_bufptr; ///< pointer to next byte to read -}; - - -class StringInputBuffer : public InputBuffer -{ - public: - StringInputBuffer (const std::string &str) : _str(str), _pos(0) {} - int get () {return _pos < _str.length() ? _str[_pos++] : -1;} - int peek () const {return _pos < _str.length() ? _str[_pos] : -1;} - int peek (unsigned n) const {return _pos+n < _str.length() ? _str[_pos+n] : -1;} - bool eof () const {return _pos >= _str.length();} - void invalidate () {_pos = _str.length();} - - private: - const std::string &_str; - unsigned _pos; -}; - - -class CharInputBuffer : public InputBuffer -{ - public: - CharInputBuffer (const char *buf, unsigned size) : _pos(buf), _size(buf ? size : 0) {} - - int get () { - if (_size <= 0) - return -1; - else { - _size--; - return *_pos++; - } - } - - - void assign (const char *buf, unsigned size) { - _pos = buf; - _size = size; - } - - void assign (const char *buf) {assign(buf, std::strlen(buf));} - int peek () const {return _size > 0 ? *_pos : -1;} - int peek (unsigned n) const {return _size >= n ? _pos[n] : -1;} - bool eof () const {return _size <= 0;} - void invalidate () {_size = 0;} - - private: - const char *_pos; - unsigned _size; -}; - - -class SplittedCharInputBuffer : public InputBuffer -{ - public: - SplittedCharInputBuffer (const char *buf1, unsigned s1, const char *buf2, unsigned s2); - int get (); - int peek () const; - int peek (unsigned n) const; - bool eof () const {return _size[_index] == 0;} - void invalidate () {_size[_index] = 0;} - - private: - const char *_buf[2]; - unsigned _size[2]; - int _index; -}; - - -class TextStreamInputBuffer : public StreamInputBuffer -{ - public: - TextStreamInputBuffer (std::istream &is) : StreamInputBuffer(is), _line(1), _col(1) {} - int get (); - int line () const {return _line;} - int col () const {return _col;} - - private: - int _line, _col; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputReader.cpp deleted file mode 100644 index 76652da26a8..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputReader.cpp +++ /dev/null @@ -1,279 +0,0 @@ -/************************************************************************* -** InputReader.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "InputReader.h" - -using namespace std; - - -/** Skips n characters. */ -void InputReader::skip (unsigned n) { - while (n-- > 0) - get(); -} - - -/** Moves the buffer pointer to the next non-space character. A following call - * of get() returns this character. */ -void InputReader::skipSpace () { - while (isspace(peek())) - get(); -} - - -/** Tries to find a given string and skips all characters preceding that string. - * @param[in] s string to look for (must not be longer than the maximal buffer size) - * @param[in] consume if true, the buffer pointer is moved to the first charater following string s - * @return true if s was found */ -bool InputReader::skipUntil (const char *s, bool consume) { - bool found = false; - while (!eof() && !(found = check(s, consume))) - get(); - return found; -} - - -/** Checks if the next characters to be read match a given string. - * @param[in] s string to be matched - * @param[in] consume if true, the characters of the matched string are skipped - * @return true if s matches */ -bool InputReader::check (const char *s, bool consume) { - unsigned count = 0; - for (const char *p=s; *p; p++) { - if (peek(count++) != *p) - return false; - } - if (consume) - skip(count); - return true; -} - - -int InputReader::compare (const char *s, bool consume) { - unsigned count = 0; - for (const char *p=s; *p; p++) { - int c = peek(count++); - if (c != *p) - return *p < c ? -1 : 1; - } - if (consume) - skip(count); - return 0; -} - - -/** Reads an integer from the buffer. All characters that are part of - * the read integer constant are skipped. If this function returns false, - * the buffer pointer points to the same position as before the function call. - * @param[out] val contains the read integer value on success - * @param[in] accept_sign if false, only positive integers (without sign) are accepted - * @return true if integer could be read */ -bool InputReader::parseInt (int &val, bool accept_sign) { - val = 0; - int fac=1; - char sign; // explicitly given sign - if (accept_sign && ((sign = peek()) == '+' || sign == '-')) { - if (isdigit(peek(1))) { - get(); // skip sign - if (sign == '-') - fac = -1; - } - else - return false; - } - else if (!isdigit(peek())) - return false; - - while (isdigit(peek())) - val = val*10 + (get()-'0'); - val *= fac; - return true; -} - - -bool InputReader::parseUInt (unsigned &val) { - val = 0; - if (!isdigit(peek())) - return false; - while (isdigit(peek())) - val = val*10 + (get()-'0'); - return true; -} - - -bool InputReader::parseInt (int base, int &val) { - if (base < 2 || base > 32) - return false; - - const char *digits = "0123456789abcdefghijklmnopqrstuvwxyz"; - const char maxdigit = digits[base-1]; - char c; - if (!isalnum(c = tolower(peek())) || c > maxdigit) - return false; - - val = 0; - while (isalnum(c = tolower(peek())) && c <= maxdigit) { - get(); - int digit = c - (c <= '9' ? '0' : 'a'-10); - val = val*base + digit; - } - return true; -} - - -/** Reads a double from the buffer. All characters that are part of - * the read double constant are skipped. If this function returns false, - * the buffer pointer points to the same position as before the function call. - * @param[out] val contains the read double value on success - * @return number details: 0=no number, 'i'=integer, 'f'=floating point number */ -char InputReader::parseDouble (double &val) { - int fac=1; - int int_part=0; - bool is_float = false; - if (parseInt(int_part)) { // match [+-]?[0-9]+\.? - if (peek() == '.') { - get(); - is_float = true; - } - if (int_part < 0) { - fac = -1; - int_part = -int_part; - } - } - else { // match [+-]?\. - char sign; // explicitly given sign - if ((sign = peek()) == '+' || sign == '-') { // match [+-]?\.[0-9] - if (peek(1) != '.' || !isdigit(peek(2))) - return 0; - if (sign == '-') - fac = -1; - skip(2); // skip sign and dot - } - else if (peek() == '.' && isdigit(peek(1))) - get(); - else - return 0; - is_float = true; - } - // parse fractional part - double frac_part=0.0; - for (double u=10; isdigit(peek()); u*=10) - frac_part += (get()-'0')/u; - val = (int_part + frac_part) * fac; - // parse exponent - char c; - if (tolower(peek()) == 'e' && (isdigit(c=peek(1)) || ((c == '+' || c == '-') && isdigit(peek(2))))) { - get(); // skip 'e' - int exp; - parseInt(exp); - val *= pow(10.0, exp); - is_float = true; - } - return is_float ? 'f' : 'i'; -} - - -/** Reads an integer value from the buffer. If no valid integer constant - * could be found at the current position 0 is returned. */ -int InputReader::getInt () { - skipSpace(); - int val; - return parseInt(val) ? val : 0; -} - - -/** Reads an double value from the buffer. If no valid double constant - * could be found at the current position 0 is returned. */ -double InputReader::getDouble () { - skipSpace(); - double val; - return parseDouble(val) ? val : 0.0; -} - - -string InputReader::getWord () { - string ret; - skipSpace(); - while (isalpha(peek())) - ret += get(); - return ret; -} - - -char InputReader::getPunct () { - skipSpace(); - if (ispunct(peek())) - return get(); - return 0; -} - - -string InputReader::getString (char quotechar) { - string ret; - skipSpace(); - if (quotechar == 0) { - while (!eof() && !isspace(peek()) && isprint(peek())) - ret += get(); - } - else if (peek() == quotechar) { - get(); - while (!eof() && peek() != quotechar) - ret += get(); - get(); - } - return ret; -} - - -int InputReader::parseAttributes (map &attr) { - bool ready=false; - while (!eof() && !ready) { - string key; - skipSpace(); - while (isalnum(peek())) - key += get(); - skipSpace(); - if (peek() == '=') { - get(); - skipSpace(); - string val = getString(); - attr[key] = val; - } - else - ready = true; - } - return attr.size(); -} - -////////////////////////////////////////// - - -int StreamInputReader::peek (unsigned n) const { - if (n == 0) - return peek(); - vector chars(n); - _is.read(&chars[0], n); - int ret = peek(); - for (int i=n-1; i >= 0; i--) - _is.putback(chars[i]); - return ret; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputReader.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputReader.h deleted file mode 100644 index 0e3d23f5eb0..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/InputReader.h +++ /dev/null @@ -1,85 +0,0 @@ -/************************************************************************* -** InputReader.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef INPUTREADER_H -#define INPUTREADER_H - -#include -#include -#include -#include "InputBuffer.h" - - -struct InputReader -{ - virtual ~InputReader() {} - virtual int get () =0; - virtual int peek () const =0; - virtual int peek (unsigned n) const =0; - virtual bool eof () const =0; - virtual bool check (char c) const {return peek() == c;} - virtual bool check (const char *s, bool consume=true); - virtual int compare (const char *s, bool consume=true); - virtual void skip (unsigned n); - virtual bool skipUntil (const char *s, bool consume=true); - virtual void skipSpace (); - virtual int getInt (); - virtual bool parseInt (int &val, bool accept_sign=true); - virtual bool parseInt (int base, int &val); - virtual bool parseUInt (unsigned &val); - virtual char parseDouble (double &val); - virtual double getDouble (); - virtual std::string getWord (); - virtual char getPunct (); - virtual std::string getString (char quotechar=0); - virtual int parseAttributes (std::map &attr); - virtual operator bool () const {return !eof();} -}; - - -class StreamInputReader : public InputReader -{ - public: - StreamInputReader (std::istream &is) : _is(is) {} - int get () {return _is.get();} - int peek () const {return _is.peek();} - int peek (unsigned n) const; - bool eof () const {return !_is || _is.eof();} - - private: - std::istream &_is; -}; - - -class BufferInputReader : public InputReader -{ - public: - BufferInputReader (InputBuffer &ib) : _ib(&ib) {} - void assign (InputBuffer &ib) {_ib = &ib;} - int get () {return _ib->get();} - int peek () const {return _ib->peek();} - int peek (unsigned n) const {return _ib->peek(n);} - bool eof () const {return _ib->eof();} - - private: - InputBuffer *_ib; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Length.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Length.cpp deleted file mode 100644 index 7ae102df7c5..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Length.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/************************************************************************* -** Length.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include "InputReader.h" -#include "Length.h" - -#define UNIT(c1,c2) ((c1 << 8)|c2) - -using namespace std; - - -void Length::set (const string &len) { - switch (len.length()) { - case 0: - _pt = 0; - break; - case 1: - if (isdigit(len[0])) - _pt = len[0] - '0'; - else - throw UnitException("invalid length: "+len); - break; - default: - istringstream iss(len); - StreamInputReader ir(iss); - double val; - if (!ir.parseDouble(val)) - throw UnitException("invalid length: "+len); - string unit = ir.getWord(); - set(val, unit); - } -} - - -void Length::set (double val, Unit unit) { - switch (unit) { - case PT: _pt = val; break; - case BP: _pt = val*72.27/72; break; - case IN: _pt = val*72.27; break; - case CM: _pt = val/2.54*72.27; break; - case MM: _pt = val/25.4*72.27; break; - case PC: _pt = val/12*72.27; break; - } -} - - -void Length::set (double val, string unitstr) { - if (unitstr.empty()) - unitstr = "pt"; - else if (unitstr.length() != 2) - throw UnitException("invalid length unit: "+unitstr); - - Unit unit; - switch (UNIT(unitstr[0], unitstr[1])) { - case UNIT('p','t'): unit = PT; break; - case UNIT('b','p'): unit = BP; break; - case UNIT('i','n'): unit = IN; break; - case UNIT('c','m'): unit = CM; break; - case UNIT('m','m'): unit = MM; break; - case UNIT('p','c'): unit = PC; break; - default: - throw UnitException("invalid length unit: "+unitstr); - } - set(val, unit); -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Length.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Length.h deleted file mode 100644 index c062af5b256..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Length.h +++ /dev/null @@ -1,62 +0,0 @@ -/************************************************************************* -** Length.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef LENGTH_H -#define LENGTH_H - -#include -#include "MessageException.h" - -#ifdef IN -#undef IN -#endif - -struct UnitException : MessageException -{ - UnitException (const std::string &msg) : MessageException(msg) {} -}; - - -class Length -{ - public: - enum Unit {PT, BP, CM, MM, IN, PC}; - - public: - Length () : _pt(0) {} - Length (double val, Unit unit=PT) {set(val, unit);} - Length (double val, const std::string &unit) {set(val, unit);} - Length (const std::string &len) {set(len);} - void set (double val, Unit unit); - void set (double val, std::string unit); - void set (const std::string &len); - - double pt () const {return _pt;} - double in () const {return _pt/72.27;} - double bp () const {return in()*72;} - double cm () const {return in()*2.54;} - double mm () const {return cm()*10;} - double pc () const {return in()*12;} - - private: - double _pt; // length in TeX point units -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Makefile.am deleted file mode 100644 index ce57433d0be..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Makefile.am +++ /dev/null @@ -1,50 +0,0 @@ -## This file is part of dvisvgm -## Copyright (C) 2005-2011 Martin Gieseking -## -## Process this file with automake. - -bin_PROGRAMS = dvisvgm -noinst_LIBRARIES = libdvisvgm.a - -dvisvgm_SOURCES = gzstream.h \ - dvisvgm.cpp gzstream.cpp - -dvisvgm_LDADD = $(noinst_LIBRARIES) @EXTRA_LIBS@ -dvisvgm_DEPENDENCIES = $(noinst_LIBRARIES) @EXTRA_LIBS@ - -libdvisvgm_a_SOURCES = Bitmap.h BoundingBox.h BgColorSpecialHandler.h Calculator.h CmdLineParserBase.h Color.h CRC32.h \ - ColorSpecialHandler.h CommandLine.h Directory.h DLLoader.h DVIActions.h DVIReader.h DvisvgmSpecialHandler.h DVIToSVG.h \ - DVIToSVGActions.h EmSpecialHandler.h FileFinder.h FilePath.h FileSystem.h Font.h FontCache.h FontEncoding.h FontEngine.h \ - FontManager.h FontMap.h GFReader.h GFTracer.h GFGlyphTracer.h Ghostscript.h Glyph.h GlyphTracerMessages.h \ - GraphicPath.h InputBuffer.h InputReader.h Length.h macros.h Matrix.h Message.h MessageException.h MetafontWrapper.h \ - PageRanges.h PageSize.h Pair.h Process.h PSInterpreter.h PsSpecialHandler.h SignalHandler.h SpecialActions.h \ - SpecialHandler.h SpecialManager.h StreamReader.h StreamWriter.h SVGTree.h System.h Terminal.h TpicSpecialHandler.h \ - TFM.h types.h VectorStream.h VFActions.h VFReader.h XMLDocTypeNode.h XMLDocument.h XMLNode.h XMLString.h \ - BgColorSpecialHandler.cpp Bitmap.cpp BoundingBox.cpp Calculator.cpp CmdLineParserBase.cpp Color.cpp \ - ColorSpecialHandler.cpp CommandLine.cpp CRC32.cpp Directory.cpp DLLoader.cpp DVIActions.cpp DVIReader.cpp \ - DvisvgmSpecialHandler.cpp DVIToSVG.cpp DVIToSVGActions.cpp EmSpecialHandler.cpp FileFinder.cpp FilePath.cpp \ - FileSystem.cpp Font.cpp FontCache.cpp FontEncoding.cpp FontEngine.cpp FontManager.cpp FontMap.cpp GFReader.cpp \ - GFGlyphTracer.cpp GFTracer.cpp Ghostscript.cpp InputBuffer.cpp InputReader.cpp Length.cpp Matrix.cpp Message.cpp \ - MetafontWrapper.cpp PageRanges.cpp PageSize.cpp Process.cpp PSInterpreter.cpp PsSpecialHandler.cpp SignalHandler.cpp \ - SpecialManager.cpp StreamReader.cpp StreamWriter.cpp SVGTree.cpp System.cpp Terminal.cpp TFM.cpp TpicSpecialHandler.cpp \ - VFReader.cpp XMLDocument.cpp XMLNode.cpp XMLString.cpp - -EXTRA_DIST = options.xml psdefs.psc iapi.h ierrors.h - -AM_CXXFLAGS = -Wall -Wnon-virtual-dtor - -# the commandline parser is generated from options.xml by opt2cpp -CommandLine.cpp: options.xml - if test -f opt2cpp.xsl; then \ - rm -f $@ $*.h; \ - xsltproc opt2cpp.xsl $<; \ - fi - -# Create a C string definition containing the PostScript routines psdefs.ps needed by class PSInterpreter -psdefs.psc: psdefs.ps - if test -f $<; then \ - ps2c PSInterpreter::PSDEFS $< >$@; \ - fi - -psdefs.ps: ; - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Makefile.in deleted file mode 100644 index 95f21b43ab4..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Makefile.in +++ /dev/null @@ -1,613 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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. - -@SET_MAKE@ - - -VPATH = @srcdir@ -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@ -target_triplet = @target@ -bin_PROGRAMS = dvisvgm$(EXEEXT) -subdir = src -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LIBRARIES = $(noinst_LIBRARIES) -AR = ar -ARFLAGS = cru -libdvisvgm_a_AR = $(AR) $(ARFLAGS) -libdvisvgm_a_LIBADD = -am_libdvisvgm_a_OBJECTS = BgColorSpecialHandler.$(OBJEXT) \ - Bitmap.$(OBJEXT) BoundingBox.$(OBJEXT) Calculator.$(OBJEXT) \ - CmdLineParserBase.$(OBJEXT) Color.$(OBJEXT) \ - ColorSpecialHandler.$(OBJEXT) CommandLine.$(OBJEXT) \ - CRC32.$(OBJEXT) Directory.$(OBJEXT) DLLoader.$(OBJEXT) \ - DVIActions.$(OBJEXT) DVIReader.$(OBJEXT) \ - DvisvgmSpecialHandler.$(OBJEXT) DVIToSVG.$(OBJEXT) \ - DVIToSVGActions.$(OBJEXT) EmSpecialHandler.$(OBJEXT) \ - FileFinder.$(OBJEXT) FilePath.$(OBJEXT) FileSystem.$(OBJEXT) \ - Font.$(OBJEXT) FontCache.$(OBJEXT) FontEncoding.$(OBJEXT) \ - FontEngine.$(OBJEXT) FontManager.$(OBJEXT) FontMap.$(OBJEXT) \ - GFReader.$(OBJEXT) GFGlyphTracer.$(OBJEXT) GFTracer.$(OBJEXT) \ - Ghostscript.$(OBJEXT) InputBuffer.$(OBJEXT) \ - InputReader.$(OBJEXT) Length.$(OBJEXT) Matrix.$(OBJEXT) \ - Message.$(OBJEXT) MetafontWrapper.$(OBJEXT) \ - PageRanges.$(OBJEXT) PageSize.$(OBJEXT) Process.$(OBJEXT) \ - PSInterpreter.$(OBJEXT) PsSpecialHandler.$(OBJEXT) \ - SignalHandler.$(OBJEXT) SpecialManager.$(OBJEXT) \ - StreamReader.$(OBJEXT) StreamWriter.$(OBJEXT) \ - SVGTree.$(OBJEXT) System.$(OBJEXT) Terminal.$(OBJEXT) \ - TFM.$(OBJEXT) TpicSpecialHandler.$(OBJEXT) VFReader.$(OBJEXT) \ - XMLDocument.$(OBJEXT) XMLNode.$(OBJEXT) XMLString.$(OBJEXT) -libdvisvgm_a_OBJECTS = $(am_libdvisvgm_a_OBJECTS) -am__installdirs = "$(DESTDIR)$(bindir)" -PROGRAMS = $(bin_PROGRAMS) -am_dvisvgm_OBJECTS = dvisvgm.$(OBJEXT) gzstream.$(OBJEXT) -dvisvgm_OBJECTS = $(am_dvisvgm_OBJECTS) -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ - -o $@ -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libdvisvgm_a_SOURCES) $(dvisvgm_SOURCES) -DIST_SOURCES = $(libdvisvgm_a_SOURCES) $(dvisvgm_SOURCES) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -AM_LDFLAGS = @AM_LDFLAGS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DATE = @DATE@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -EXTRA_LIBS = @EXTRA_LIBS@ -FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ -FREETYPE_LIBS = @FREETYPE_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -OBJEXT = @OBJEXT@ -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@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -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@ -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@ -sbindir = @sbindir@ -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@ -noinst_LIBRARIES = libdvisvgm.a -dvisvgm_SOURCES = gzstream.h \ - dvisvgm.cpp gzstream.cpp - -dvisvgm_LDADD = $(noinst_LIBRARIES) @EXTRA_LIBS@ -dvisvgm_DEPENDENCIES = $(noinst_LIBRARIES) @EXTRA_LIBS@ -libdvisvgm_a_SOURCES = Bitmap.h BoundingBox.h BgColorSpecialHandler.h Calculator.h CmdLineParserBase.h Color.h CRC32.h \ - ColorSpecialHandler.h CommandLine.h Directory.h DLLoader.h DVIActions.h DVIReader.h DvisvgmSpecialHandler.h DVIToSVG.h \ - DVIToSVGActions.h EmSpecialHandler.h FileFinder.h FilePath.h FileSystem.h Font.h FontCache.h FontEncoding.h FontEngine.h \ - FontManager.h FontMap.h GFReader.h GFTracer.h GFGlyphTracer.h Ghostscript.h Glyph.h GlyphTracerMessages.h \ - GraphicPath.h InputBuffer.h InputReader.h Length.h macros.h Matrix.h Message.h MessageException.h MetafontWrapper.h \ - PageRanges.h PageSize.h Pair.h Process.h PSInterpreter.h PsSpecialHandler.h SignalHandler.h SpecialActions.h \ - SpecialHandler.h SpecialManager.h StreamReader.h StreamWriter.h SVGTree.h System.h Terminal.h TpicSpecialHandler.h \ - TFM.h types.h VectorStream.h VFActions.h VFReader.h XMLDocTypeNode.h XMLDocument.h XMLNode.h XMLString.h \ - BgColorSpecialHandler.cpp Bitmap.cpp BoundingBox.cpp Calculator.cpp CmdLineParserBase.cpp Color.cpp \ - ColorSpecialHandler.cpp CommandLine.cpp CRC32.cpp Directory.cpp DLLoader.cpp DVIActions.cpp DVIReader.cpp \ - DvisvgmSpecialHandler.cpp DVIToSVG.cpp DVIToSVGActions.cpp EmSpecialHandler.cpp FileFinder.cpp FilePath.cpp \ - FileSystem.cpp Font.cpp FontCache.cpp FontEncoding.cpp FontEngine.cpp FontManager.cpp FontMap.cpp GFReader.cpp \ - GFGlyphTracer.cpp GFTracer.cpp Ghostscript.cpp InputBuffer.cpp InputReader.cpp Length.cpp Matrix.cpp Message.cpp \ - MetafontWrapper.cpp PageRanges.cpp PageSize.cpp Process.cpp PSInterpreter.cpp PsSpecialHandler.cpp SignalHandler.cpp \ - SpecialManager.cpp StreamReader.cpp StreamWriter.cpp SVGTree.cpp System.cpp Terminal.cpp TFM.cpp TpicSpecialHandler.cpp \ - VFReader.cpp XMLDocument.cpp XMLNode.cpp XMLString.cpp - -EXTRA_DIST = options.xml psdefs.psc iapi.h ierrors.h -AM_CXXFLAGS = -Wall -Wnon-virtual-dtor -all: all-am - -.SUFFIXES: -.SUFFIXES: .cpp .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 src/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/Makefile -.PRECIOUS: 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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - 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) -libdvisvgm.a: $(libdvisvgm_a_OBJECTS) $(libdvisvgm_a_DEPENDENCIES) - -rm -f libdvisvgm.a - $(libdvisvgm_a_AR) libdvisvgm.a $(libdvisvgm_a_OBJECTS) $(libdvisvgm_a_LIBADD) - $(RANLIB) libdvisvgm.a -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - for p in $$list; do echo "$$p $$p"; done | \ - sed 's/$(EXEEXT)$$//' | \ - while read p p1; do if test -f $$p; \ - then echo "$$p"; echo "$$p"; else :; fi; \ - done | \ - sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ - -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ - sed 'N;N;N;s,\n, ,g' | \ - $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ - { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ - if ($$2 == $$4) files[d] = files[d] " " $$1; \ - else { print "f", $$3 "/" $$4, $$1; } } \ - END { for (d in files) print "f", d, files[d] }' | \ - while read type dir files; do \ - if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ - test -z "$$files" || { \ - echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ - $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ - } \ - ; done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files - -clean-binPROGRAMS: - -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) -dvisvgm$(EXEEXT): $(dvisvgm_OBJECTS) $(dvisvgm_DEPENDENCIES) - @rm -f dvisvgm$(EXEEXT) - $(CXXLINK) $(dvisvgm_OBJECTS) $(dvisvgm_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BgColorSpecialHandler.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Bitmap.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BoundingBox.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CRC32.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Calculator.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CmdLineParserBase.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Color.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ColorSpecialHandler.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CommandLine.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DLLoader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DVIActions.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DVIReader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DVIToSVG.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DVIToSVGActions.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Directory.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DvisvgmSpecialHandler.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EmSpecialHandler.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileFinder.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FilePath.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileSystem.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Font.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontCache.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontEncoding.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontEngine.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontManager.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontMap.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GFGlyphTracer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GFReader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GFTracer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Ghostscript.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InputBuffer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InputReader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Length.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Matrix.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Message.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MetafontWrapper.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSInterpreter.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PageRanges.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PageSize.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Process.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PsSpecialHandler.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SVGTree.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SignalHandler.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SpecialManager.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamReader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamWriter.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/System.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TFM.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Terminal.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TpicSpecialHandler.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VFReader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLDocument.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLNode.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLString.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvisvgm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gzstream.Po@am__quote@ - -.cpp.o: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cpp.obj: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - 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 -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - 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" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(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) $(PROGRAMS) -installdirs: - for dir in "$(DESTDIR)$(bindir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -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: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -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-binPROGRAMS clean-generic clean-noinstLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -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-binPROGRAMS - -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 -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-binPROGRAMS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ - clean-generic clean-noinstLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS 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 pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-binPROGRAMS - - -# the commandline parser is generated from options.xml by opt2cpp -CommandLine.cpp: options.xml - if test -f opt2cpp.xsl; then \ - rm -f $@ $*.h; \ - xsltproc opt2cpp.xsl $<; \ - fi - -# Create a C string definition containing the PostScript routines psdefs.ps needed by class PSInterpreter -psdefs.psc: psdefs.ps - if test -f $<; then \ - ps2c PSInterpreter::PSDEFS $< >$@; \ - fi - -psdefs.ps: ; - -# 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: diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Matrix.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Matrix.cpp deleted file mode 100644 index 0e3dbc93024..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Matrix.cpp +++ /dev/null @@ -1,410 +0,0 @@ -/************************************************************************* -** Matrix.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include "Calculator.h" -#include "Matrix.h" - -using namespace std; - -static double deg2rad (double deg) { - const double PI = acos(-1.0); - return PI*deg/180.0; -} - - -static double round (double x, int n) { - double pow10 = pow(10.0, n); - return floor(x*pow10+0.5)/pow10; -} - - -/** Creates a diagonal matrix ((d,0,0),(0,d,0),(0,0,d)). - * @param[in] d value of diagonal elements */ -Matrix::Matrix (double d) { - for (int i=0; i < 3; i++) - for (int j=0; j < 3; j++) - values[i][j] = (i==j ? d : 0); -} - - -/** Creates the matrix ((v0,v1,v2),(v3,v4,v5),(v6,v7,v8)). - * Expects that array v consists of 'size' elements. If size is less than 9, the - * remaining matrix components will be set to those of the identity matrix. - * @param[in] v array containing the matrix components - * @param[in] size size of array v */ -Matrix::Matrix (double v[], unsigned size) { - set(v, size); -} - - -/** Creates the matrix ((v0,v1,v2),(v3,v4,v5),(v6,v7,v8)). - * If vector v has less than 9 elements, the remaining matrix components will be set to - * those of the identity matrix. - * @param[in] v array containing the matrix components */ -Matrix::Matrix (const std::vector &v) { - set(v); -} - - -Matrix::Matrix (const string &cmds, Calculator &calc) { - parse(cmds, calc); -} - - -Matrix& Matrix::set (double v[], unsigned size) { - size = min(size, 9u); - for (unsigned i=0; i < size; i++) - values[i/3][i%3] = v[i]; - for (unsigned i=size; i < 9; i++) - values[i/3][i%3] = (i%4 ? 0 : 1); - return *this; -} - - -Matrix& Matrix::set (const vector &v) { - unsigned size = min((unsigned)v.size(), 9u); - for (unsigned i=0; i < size; i++) - values[i/3][i%3] = v[i]; - for (unsigned i=size; i < 9; i++) - values[i/3][i%3] = (i%4 ? 0 : 1); - return *this; -} - - -Matrix& Matrix::translate (double tx, double ty) { - if (tx != 0 || ty != 0) { - TranslationMatrix t(tx, ty); - rmultiply(t); - } - return *this; -} - - -Matrix& Matrix::scale (double sx, double sy) { - if (sx != 1 || sy != 1) { - ScalingMatrix s(sx, sy); - rmultiply(s); - } - return *this; -} - - -/** Multiplies this matrix by ((cos d, -sin d, 0), (sin d, cos d, 0), (0,0,1)) that - * describes an anti-clockwise rotation by d degrees. - * @param[in] deg rotation angle in degrees */ -Matrix& Matrix::rotate (double deg) { - RotationMatrix r(deg); - rmultiply(r); - return *this; -} - - -Matrix& Matrix::xskew (double deg) { - double t = tan(deg2rad(deg)); - if (t != 0) { - double v[] = {1, t}; - Matrix t(v, 2); - rmultiply(t); - } - return *this; -} - - -Matrix& Matrix::yskew (double deg) { - double t = tan(deg2rad(deg)); - if (t != 0) { - double v[] = {1, 0, 0, t}; - Matrix t(v, 4); - rmultiply(t); - } - return *this; -} - - -Matrix& Matrix::flip (bool haxis, double a) { - double s = 1; - if (haxis) // mirror at horizontal axis? - s = -1; - double v[] = {-s, 0, (haxis ? 0 : 2*a), 0, s, (haxis ? 2*a : 0), 0, 0, 1}; - Matrix t(v); - rmultiply(t); - return *this; -} - - -/** Swaps rows and columns of the matrix. */ -Matrix& Matrix::transpose () { - for (int i=0; i < 3; i++) - for (int j=i+1; j < 3; j++) - swap(values[i][j], values[j][i]); - return *this; -} - - -/** Multiplies this matrix M with matrix tm (tm is the factor on the left side): M := tm * M */ -Matrix& Matrix::lmultiply (const Matrix &tm) { - Matrix ret; - for (int i=0; i < 3; i++) - for (int j=0; j < 3; j++) - for (int k=0; k < 3; k++) - ret.values[i][j] += values[i][k] * tm.values[k][j]; - return *this = ret; -} - - -/** Multiplies this matrix M with matrix tm (tm is the factor on the right side): M := M * tm */ -Matrix& Matrix::rmultiply (const Matrix &tm) { - Matrix ret; - for (int i=0; i < 3; i++) - for (int j=0; j < 3; j++) - for (int k=0; k < 3; k++) - ret.values[i][j] += tm.values[i][k] * values[k][j]; - return *this = ret; -} - - -DPair Matrix::operator * (const DPair &p) const { - double pp[] = {p.x(), p.y(), 1}; - double ret[]= {0, 0}; - for (int i=0; i < 2; i++) - for (int j=0; j < 3; j++) - ret[i] += values[i][j] * pp[j]; - return DPair(ret[0], ret[1]); -} - - -/** Returns true if this matrix equals. Checks equality by comparing the matrix components. */ -bool Matrix::operator == (const Matrix &m) const { - for (int i=0; i < 2; i++) - for (int j=0; j < 3; j++) - if (values[i][j] != m.values[i][j]) - return false; - return true; -} - - -/** Returns true if this matrix doesn't equal m. Checks inequality by comparing the matrix components. */ -bool Matrix::operator != (const Matrix &m) const { - for (int i=0; i < 2; i++) - for (int j=0; j < 3; j++) - if (values[i][j] != m.values[i][j]) - return true; - return false; -} - - -/** Returns true if this matrix is the identity matrix ((1,0,0),(0,1,0),(0,0,1)). */ -bool Matrix::isIdentity() const { - for (int i=0; i < 2; i++) - for (int j=0; j < 3; j++) { - const double &v = values[i][j]; - if ((i == j && v != 1) || (i != j && v != 0)) - return false; - } - return true; -} - - -/** Checks whether this matrix describes a plain translation (without any other transformations). - * If so, the parameters tx and ty are filled with the translation components. - * @param[out] tx horizontal translation - * @param[out] ty vertical translation - * @return true if matrix describes a pure translation */ -bool Matrix::isTranslation (double &tx, double &ty) const { - tx = values[0][2]; - ty = values[1][2]; - for (int i=0; i < 3; i++) - for (int j=0; j < 2; j++) { - const double &v = values[i][j]; - if ((i == j && v != 1) || (i != j && v != 0)) - return false; - } - return values[2][2] == 1; -} - - -/** Gets a parameter for the transformation command. - * @param[in] is parameter chars are read from this stream - * @param[in] calc parameters can be arithmetic expressions, so we need a calculator to evaluate them - * @param[in] def default value if parameter is optional - * @param[in] optional true if parameter is optional - * @param[in] leadingComma true if first non-blank must be a comma - * @return value of argument */ -static double getArgument (istream &is, Calculator &calc, double def, bool optional, bool leadingComma) { - while (isspace(is.peek())) - is.get(); - if (!optional && leadingComma && is.peek() != ',') - throw ParserException("',' expected"); - if (is.peek() == ',') { - is.get(); // skip comma - optional = false; // now we expect a parameter - } - string expr; - while (is && !isupper(is.peek()) && is.peek() != ',') - expr += is.get(); - if (expr.length() == 0) { - if (optional) - return def; - else - throw ParserException("parameter expected"); - } - return calc.eval(expr); -} - - -Matrix& Matrix::parse (istream &is, Calculator &calc) { - *this = Matrix(1); - while (is) { - while (isspace(is.peek())) - is.get(); - char cmd = is.get(); - switch (cmd) { - case 'T': { - double tx = getArgument(is, calc, 0, false, false); - double ty = getArgument(is, calc, 0, true, true); - translate(tx, ty); - break; - } - case 'S': { - double sx = getArgument(is, calc, 1, false, false); - double sy = getArgument(is, calc, sx, true, true ); - scale(sx, sy); - break; - } - case 'R': { - double a = getArgument(is, calc, 0, false, false); - double x = getArgument(is, calc, calc.getVariable("ux")+calc.getVariable("w")/2, true, true); - double y = getArgument(is, calc, calc.getVariable("uy")+calc.getVariable("h")/2, true, true); - translate(-x, -y); - rotate(a); - translate(x, y); - break; - } - case 'F': { - char c = is.get(); - if (c != 'H' && c != 'V') - throw ParserException("'H' or 'V' expected"); - double a = getArgument(is, calc, 0, false, false); - flip(c == 'H', a); - break; - } - case 'K': { - char c = is.get(); - if (c != 'X' && c != 'Y') - throw ParserException("transformation command 'K' must be followed by 'X' or 'Y'"); - double a = getArgument(is, calc, 0, false, false); - if (fabs(cos(deg2rad(a))) <= numeric_limits::epsilon()) { - ostringstream oss; - oss << "illegal skewing angle: " << a << " degrees"; - throw ParserException(oss.str()); - } - if (c == 'X') - xskew(a); - else - yskew(a); - break; - } - case 'M': { - double v[9]; - for (int i=0; i < 6; i++) - v[i] = getArgument(is, calc, i%4 ? 0 : 1, i!=0, i!=0); - // third row (0, 0, 1) - v[6] = v[7] = 0; - v[8] = 1; - Matrix tm(v); - rmultiply(tm); - break; - } - default: - ostringstream oss; - oss << "transformation command expected (found '" << cmd << "' instead)"; - throw ParserException(oss.str()); - } - } - return *this; -} - - -Matrix& Matrix::parse (const string &cmds, Calculator &calc) { - istringstream iss; - iss.str(cmds); - return parse(iss, calc); -} - - -/** Returns an SVG matrix expression that can be used in transform attributes. - * ((a,b,c),(d,e,f),(0,0,1)) => matrix(a d b e c f) */ -string Matrix::getSVG () const { - ostringstream oss; - oss << "matrix("; - for (int i=0; i < 3; i++) { - for (int j=0; j < 2; j++) { - if (i > 0 || j > 0) - oss << ' '; - oss << round(values[j][i], 3); - } - } - oss << ')'; - return oss.str(); -} - - -ostream& Matrix::write (ostream &os) const { - os << '('; - for (int i=0; i < 3; i++) { - os << '(' << values[i][0]; - for (int j=1; j < 3; j++) - os << ',' << values[i][j]; - os << ')'; - if (i < 2) - os << ','; - } - os << ')'; - return os; -} - - -////////////////////////////////////////////////////////////////// - - -TranslationMatrix::TranslationMatrix (double tx, double ty) { - double v[] = {1, 0, tx, 0, 1, ty}; - set(v, 6); -} - - -ScalingMatrix::ScalingMatrix (double sx, double sy) { - double v[] = {sx, 0, 0, 0, sy}; - set(v, 5); -} - - -RotationMatrix::RotationMatrix (double deg) { - double rad = deg2rad(deg); - double c = cos(rad); - double s = sin(rad); - double v[] = {c, -s, 0, s, c}; - set(v, 5); -} - - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Matrix.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Matrix.h deleted file mode 100644 index 5c3b7442081..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Matrix.h +++ /dev/null @@ -1,93 +0,0 @@ -/************************************************************************* -** Matrix.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef MATRIX_H -#define MATRIX_H - -#include -#include -#include -#include "MessageException.h" -#include "Pair.h" - - -struct ParserException : public MessageException -{ - ParserException (const std::string &msg) : MessageException(msg) {} -}; - -class Calculator; - -class Matrix -{ - public: - Matrix (const std::string &cmds, Calculator &calc); - Matrix (double d=0); - Matrix (double v[], unsigned size=9); - Matrix (const std::vector &v); - Matrix& set (double v[], unsigned size); - Matrix& set (const std::vector &v); - Matrix& transpose (); - Matrix& parse (std::istream &is, Calculator &c); - Matrix& parse (const std::string &cmds, Calculator &c); - Matrix& lmultiply (const Matrix &tm); - Matrix& rmultiply (const Matrix &tm); - Matrix& translate (double tx, double ty); - Matrix& scale (double sx, double sy); - Matrix& rotate (double deg); - Matrix& xskew (double deg); - Matrix& yskew (double deg); - Matrix& flip (bool h, double a); - DPair operator * (const DPair &p) const; - bool operator == (const Matrix &m) const; - bool operator != (const Matrix &m) const; - bool isIdentity() const; - bool isTranslation (double &tx, double &ty) const; - std::string getSVG () const; - std::ostream& write (std::ostream &os) const; - - private: - double values[3][3]; // row x col -}; - - -struct TranslationMatrix : public Matrix -{ - TranslationMatrix (double tx, double ty); -}; - - -struct ScalingMatrix : public Matrix -{ - ScalingMatrix (double sx, double sy); -}; - - -struct RotationMatrix : public Matrix -{ - RotationMatrix (double deg); -}; - - -inline std::ostream& operator << (std::ostream &os, const Matrix &m) { - return m.write(os); -} - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Message.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Message.cpp deleted file mode 100644 index 52cb6da56d0..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Message.cpp +++ /dev/null @@ -1,161 +0,0 @@ -/************************************************************************* -** Message.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include "Message.h" -#include "Terminal.h" -#include "macros.h" - -using namespace std; - -MessageStream::MessageStream (std::ostream &os) - : _os(&os), _nl(true), _col(1), _indent(0) -{ - Terminal::init(os); -} - - -MessageStream::~MessageStream () { - if (_os && Message::COLORIZE) - Terminal::finish(*_os); -} - - -void MessageStream::putChar (const char c, ostream &os) { - switch (c) { - case '\r': - os << '\r'; - _nl = true; - _col = 1; - return; - case '\n': - if (!_nl) { - _col = 1; - _nl = true; - os << '\n'; - } - return; - default: - if (_nl) { - os << string(_indent, ' '); - _col += _indent; - } - else { - const int cols = Terminal::columns(); - if (cols > 0 && _col >= cols) { - os << '\n' << string(_indent, ' '); - _col = _indent+1; - } - else - _col++; - } - _nl = false; - if (!_nl || c != '\n') - os << c; - } -} - - -MessageStream& MessageStream::operator << (const char *str) { - if (_os) { - const int len = strlen(str); - const int cols = Terminal::columns(); - if (cols > 0 && _col+len > cols && _indent+len <= cols) - putChar('\n', *_os); - for (const char *p=str; *p; ++p) - putChar(*p, *_os); - } - return *this; -} - - -MessageStream& MessageStream::operator << (const char &c) { - if (_os) - putChar(c, *_os); - return *this; -} - - -void MessageStream::indent (bool reset) { - if (reset) - _indent = 0; - _indent += 2; -} - - -void MessageStream::outdent (bool all) { - if (all) - _indent = 0; - else if (_indent > 0) - _indent -= 2; -} - - -void MessageStream::clearline () { - if (_os) { - int cols = Terminal::columns(); - *_os << '\r' << string(cols ? cols-1 : 79, ' ') << '\r'; - _nl = true; - _col = 1; - } -} - -static MessageStream nullStream; -static MessageStream messageStream(cerr); - -// maximal verbosity -int Message::LEVEL = Message::MESSAGES | Message::WARNINGS | Message::ERRORS; -bool Message::COLORIZE = false; - - -/** Returns the stream for usual messages. */ -MessageStream& Message::mstream (bool prefix, int color, bool light) { - MessageStream *ms = (LEVEL & MESSAGES) ? &messageStream : &nullStream; - if (COLORIZE && ms && ms->os()) - Terminal::color(color, light, *ms->os()); - if (prefix) - *ms << "\nMESSAGE: "; - return *ms; -} - - -/** Returns the stream for warning messages. */ -MessageStream& Message::wstream (bool prefix) { - MessageStream *ms = (LEVEL & WARNINGS) ? &messageStream : &nullStream; - if (COLORIZE && ms && ms->os()) - Terminal::color(Terminal::YELLOW, false, *ms->os()); - if (prefix) - *ms << "\nWARNING: "; - return *ms; -} - - -/** Returns the stream for error messages. */ -MessageStream& Message::estream (bool prefix) { - MessageStream *ms = (LEVEL & ERRORS) ? &messageStream : &nullStream; - if (COLORIZE && ms && ms->os()) - Terminal::color(Terminal::RED, true, *ms->os()); - if (prefix) - *ms << "\nERROR: "; - return *ms; -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Message.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Message.h deleted file mode 100644 index a69b414c727..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Message.h +++ /dev/null @@ -1,81 +0,0 @@ -/************************************************************************* -** Message.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef MESSAGE_H -#define MESSAGE_H - -#include -#include -#include -#include -#include "Terminal.h" - - -class Message; - -class MessageStream -{ - friend class Message; - public: - MessageStream () : _os(0), _nl(false) {} - MessageStream (std::ostream &os); - ~MessageStream (); - - template - MessageStream& operator << (const T &obj) { - std::ostringstream oss; - oss << obj; - (*this) << oss.str(); - return *this; - } - - MessageStream& operator << (const char *str); - MessageStream& operator << (const char &c); - MessageStream& operator << (const std::string &str) {return (*this) << str.c_str();} - - void indent (int level) {_indent = std::max(0, level*2);} - void indent (bool reset=false); - void outdent (bool all=false); - void clearline (); - - protected: - void putChar (const char c, std::ostream &os); - std::ostream* os () {return _os;} - - private: - std::ostream *_os; - bool _nl; ///< true if previous character was a newline - int _col; ///< current terminal column - int _indent; ///< indentation width (number of columns/characters) -}; - - -struct Message -{ - static MessageStream& mstream (bool prefix=false, int color=Terminal::DEFAULT, bool light=false); - static MessageStream& estream (bool prefix=false); - static MessageStream& wstream (bool prefix=false); - - enum {ERRORS=1, WARNINGS=2, MESSAGES=4}; - static int LEVEL; - static bool COLORIZE; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/MessageException.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/MessageException.h deleted file mode 100644 index 338c9daac9f..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/MessageException.h +++ /dev/null @@ -1,39 +0,0 @@ -/************************************************************************* -** MessageException.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef MESSAGEEXCEPTION_H -#define MESSAGEEXCEPTION_H - -#include -#include - - -class MessageException : public std::exception -{ - public: - MessageException (const std::string &msg) : message(msg) {} - virtual ~MessageException () throw() {} - const char* what () const throw() {return message.c_str();} - - private: - std::string message; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/MetafontWrapper.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/MetafontWrapper.cpp deleted file mode 100644 index 9f9394ff535..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/MetafontWrapper.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/************************************************************************* -** MetafontWrapper.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include -#include "FileSystem.h" -#include "FileFinder.h" -#include "Message.h" -#include "MetafontWrapper.h" -#include "Process.h" -#include "SignalHandler.h" -#include "macros.h" - -using namespace std; - - -MetafontWrapper::MetafontWrapper (const string &fname) : _fontname(fname) -{ -} - - -/** Calls Metafont and evaluates the logfile. If a gf file was successfully - * generated the dpi value is stripped from the filename - * (e.g. cmr10.600gf => cmr10.gf). This makes life easier... - * @param[in] mode Metafont mode, e.g. "ljfour" - * @param[in] mag magnification factor - * @return true on success */ -bool MetafontWrapper::call (const string &mode, double mag) { - if (!FileFinder::lookup(_fontname+".mf")) - return false; // mf file not available => no need to call the "slow" Metafont - FileSystem::remove(_fontname+".gf"); - -#ifdef __WIN32__ -#ifdef TEXLIVEWIN32 - const char *mfname = "mf-nowin.exe"; -#else - const char *mfname = "mf.exe"; -#endif - const char *cmd = FileFinder::lookup(mfname, false); - if (!cmd) { - Message::estream(true) << "can't run Metafont (" << mfname << " not found)\n"; - return false; - } -#else - const char *cmd = "mf"; -#endif - ostringstream oss; - oss << "\"\\mode=" << mode << ";" - "mag:=" << mag << ";" - "batchmode;" - "input " << _fontname << "\""; - Message::mstream(false, Terminal::CYAN) << "\nrunning Metafont for " << _fontname << '\n'; - Process mf_process(cmd, oss.str().c_str()); - mf_process.run(); - - // try to read Metafont's logfile and get name of created GF file - ifstream ifs((_fontname+".log").c_str()); - if (ifs) { - char buf[128]; - while (ifs) { - ifs.getline(buf, 128); - string line = buf; - if (line.substr(0, 15) == "! Interruption.") - SignalHandler::instance().trigger(true); - if (line.substr(0, 17) == "Output written on") { - size_t pos = line.find("gf ", 18+_fontname.length()); - if (pos != string::npos) { - string gfname = line.substr(18, pos-16); // GF filename found - FileSystem::rename(gfname, _fontname+".gf"); - } - break; - } - } - } - ifstream gf((_fontname+".gf").c_str()); - return gf; -} - - -/** Calls Metafont if output files (tfm and gf) don't already exist. - * @param[in] mode Metafont mode to be used (e.g. 'ljfour') - * @param[in] mag magnification factor - * @return true on success */ -bool MetafontWrapper::make (const string &mode, double mag) { - ifstream tfm((_fontname+".tfm").c_str()); - ifstream gf((_fontname+".gf").c_str()); - if (gf && tfm) // @@ distinguish between gf and tfm - return true; - return call(mode, mag); -} - - -bool MetafontWrapper::success () const { - ifstream tfm((_fontname+".tfm").c_str()); - ifstream gf((_fontname+".gf").c_str()); - return tfm && gf; -} - - -/** Remove all files created by a Metafont call (tfm, gf, log). - * @param[in] keepGF if true, GF files won't be removed */ -void MetafontWrapper::removeOutputFiles (bool keepGF) { - removeOutputFiles(_fontname, keepGF); -} - - -/** Remove all files created by a Metafont call for a given font (tfm, gf, log). - * @param[in] fontname name of font whose temporary files should be removed - * @param[in] keepGF if true, GF files will be kept */ -void MetafontWrapper::removeOutputFiles (const string &fontname, bool keepGF) { - const char *ext[] = {"gf", "tfm", "log", 0}; - for (const char **p = keepGF ? ext+2 : ext; *p; ++p) - FileSystem::remove(fontname + "." + *p); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/MetafontWrapper.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/MetafontWrapper.h deleted file mode 100644 index c042fef3c89..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/MetafontWrapper.h +++ /dev/null @@ -1,43 +0,0 @@ -/************************************************************************* -** MetafontWrapper.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef METAFONTWRAPPER_H -#define METAFONTWRAPPER_H - -#include - - -class FileFinder; - -class MetafontWrapper -{ - public: - MetafontWrapper (const std::string &fontname); - bool call (const std::string &mode, double mag); - bool make (const std::string &mode, double mag); - bool success () const; - void removeOutputFiles (bool keepGF=false); - static void removeOutputFiles (const std::string &fontname, bool keepGF=false); - - private: - std::string _fontname; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PSInterpreter.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PSInterpreter.cpp deleted file mode 100644 index 1f741cb212b..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PSInterpreter.cpp +++ /dev/null @@ -1,305 +0,0 @@ -/************************************************************************* -** PSInterpreter.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include -#include "FileFinder.h" -#include "InputReader.h" -#include "Message.h" -#include "PSInterpreter.h" -#include "psdefs.psc" -#include "SignalHandler.h" - -using namespace std; - - -const char *PSInterpreter::GSARGS[] = { - "gs", // dummy name - "-q", // be quiet, suppress gs banner - "-dSAFER", // disallow writing of files - "-dNODISPLAY", // we don't need a display device - "-dNOPAUSE", // keep going - "-dWRITESYSTEMDICT", // leave systemdict writable as some operators must be replaced - "-dNOPROMPT", -// "-dNOBIND", -}; - - -/** Constructs a new PSInterpreter object. - * @param[in] actions template methods to be executed after recognizing the corresponding PS operator. */ -PSInterpreter::PSInterpreter (PSActions *actions) - : _mode(PS_NONE), _actions(actions), _inError(false), _initialized(false) -{ -} - - -void PSInterpreter::init () { - if (!_initialized) { - _gs.init(sizeof(GSARGS)/sizeof(char*), GSARGS, this); - _gs.set_stdio(input, output, error); - _initialized = true; - // Before executing any random PS code redefine some operators and run - // initializing PS code. This cannot be done in the constructor because we - // need the completely initialized PSInterpreter object here. - execute(PSDEFS); - } -} - - -PSActions* PSInterpreter::setActions (PSActions *actions) { - PSActions *old_actions = _actions; - _actions = actions; - return old_actions; -} - - -/** Executes a chunk of PostScript code. - * @param[in] str buffer containing the code - * @param[in] len number of characters in buffer - * @param[in] flush If true, a final 'flush' is sent which forces the - * output buffer to be written immediately.*/ -void PSInterpreter::execute (const char *str, size_t len, bool flush) { - init(); - if (_mode != PS_QUIT) { - int status; - if (_mode == PS_NONE) { - _gs.run_string_begin(0, &status); - _mode = PS_RUNNING; - } - const char *p=str; - // feed Ghostscript with code chunks that are not larger than 64KB - // => see documentation of gsapi_run_string_foo() - while (PS_RUNNING && len > 0) { - SignalHandler::instance().check(); - size_t chunksize = min(len, (size_t)0xffff); - _gs.run_string_continue(p, chunksize, 0, &status); - p += chunksize; - len -= chunksize; - if (status == -101) { // e_Quit - _gs.exit(); - _mode = PS_QUIT; - } - else if (status <= -100) { - _gs.exit(); - _mode = PS_QUIT; - throw PSException("fatal PostScript error"); - } - } - if (flush) { - // force writing contents of output buffer - _gs.run_string_continue("\nflush ", 7, 0, &status); - } - } -} - - -/** Executes a chunk of PostScript code read from a stream. The method returns on EOF. - * @param[in] is the input stream */ -void PSInterpreter::execute (istream &is) { - char buf[4096]; - while (is && !is.eof()) { - is.read(buf, 4096); - execute(buf, is.gcount(), false); - } - execute("\n", 1); -} - - -/** This callback function handles input from stdin to Ghostscript. Currently not needed. - * @param[in] inst pointer to calling instance of PSInterpreter - * @param[in] buf takes the read characters - * @param[in] len size of buffer buf - * @return number of read characters */ -int GSDLLCALL PSInterpreter::input (void *inst, char *buf, int len) { - return 0; -} - - -/** This callback function handles output from Ghostscript to stdout. It looks for - * emitted commands staring with "dvi." and executes them by calling method callActions. - * Ghostscript sends the text in chunks by several calls of this function. - * Unfortunately, the PostScript specification wants error messages also to be sent to stdout - * instead of stderr. Thus, we must collect and concatenate the chunks until an evaluable text - * snippet is completely received. Furthermore, error messages have to be recognized and to be - * filtered out. - * @param[in] inst pointer to calling instance of PSInterpreter - * @param[in] buf contains the characters to be output - * @param[in] len number of characters in buf - * @return number of processed characters (equals 'len') */ -int GSDLLCALL PSInterpreter::output (void *inst, const char *buf, int len) { - PSInterpreter *self = static_cast(inst); - if (self && self->_actions) { - const size_t MAXLEN = 512; // maximal line length (longer lines are of no interest) - const char *end = buf+len-1; // last position of buf - for (const char *first=buf, *last=buf; first <= end; last++, first=last) { - // move first and last to begin and end of the next line, respectively - while (last <= end && *last != '\n') - last++; - size_t linelength = last-first+1; - if (linelength > MAXLEN) // skip long lines since they don't contain any relevant information - continue; - - vector &linebuf = self->_linebuf; // just a shorter name... - if ((*last == '\n' || !self->active())) { - if (linelength + linebuf.size() > 5) { // prefix "dvi." plus final newline - SplittedCharInputBuffer ib(linebuf.empty() ? 0 : &linebuf[0], linebuf.size(), first, linelength); - BufferInputReader in(ib); - in.skipSpace(); - if (self->_inError) { - if (in.check("dvi.enderror")) { - // @@ - self->_errorMessage.clear(); - self->_inError = false; - } - else - self->_errorMessage += string(first, linelength); - } - if (in.check("dvi.")) { - if (in.check("beginerror")) // all following output belongs to an error message - self->_inError = true; - else - self->callActions(in); - } - } - linebuf.clear(); - } - else { // no line end found => - // save remaining characters and prepend them to the next incoming chunk of characters - linelength--; // last == end+1 => linelength is 1 too large - if (linebuf.size() + linelength > MAXLEN) - linebuf.clear(); // don't care for long lines - else { - size_t currsize = linebuf.size(); - linebuf.resize(currsize+linelength); - memcpy(&linebuf[currsize], first, linelength); - } - } - } - } - return len; -} - - -/** Converts a vector of strings to a vector of doubles. - * @param[in] str the strings to be converted - * @param[out] d the resulting doubles */ -static void str2double (const vector &str, vector &d) { - for (size_t i=0; i < str.size(); i++) { - istringstream iss(str[i]); - iss >> d[i]; - } -} - - -/** Evaluates a command emitted by Ghostscript and invokes the corresponding - * method of interface class PSActions. - * @param[in] in reader pointing to the next command */ -void PSInterpreter::callActions (InputReader &in) { - // array of currently supported operators (must be ascendingly sorted) - static const struct Operator { - const char *name; // name of operator - int pcount; // number of parameters (< 0 : variable number of parameters) - void (PSActions::*op)(vector &p); // operation handler - } operators [] = { - {"applyscalevals", 3, &PSActions::applyscalevals}, - {"clip", 0, &PSActions::clip}, - {"closepath", 0, &PSActions::closepath}, - {"curveto", 6, &PSActions::curveto}, - {"eoclip", 0, &PSActions::eoclip}, - {"eofill", 0, &PSActions::eofill}, - {"fill", 0, &PSActions::fill}, - {"grestore", 0, &PSActions::grestore}, - {"grestoreall", 0, &PSActions::grestoreall}, - {"gsave", 0, &PSActions::gsave}, - {"initclip", 0, &PSActions::initclip}, - {"lineto", 2, &PSActions::lineto}, - {"moveto", 2, &PSActions::moveto}, - {"newpath", 0, &PSActions::newpath}, - {"querypos", 2, &PSActions::querypos}, - {"restore", 1, &PSActions::restore}, - {"rotate", 1, &PSActions::rotate}, - {"save", 1, &PSActions::save}, - {"scale", 2, &PSActions::scale}, - {"setcmykcolor", 4, &PSActions::setcmykcolor}, - {"setdash", -1, &PSActions::setdash}, - {"setgray", 1, &PSActions::setgray}, - {"sethsbcolor", 3, &PSActions::sethsbcolor}, - {"setlinecap", 1, &PSActions::setlinecap}, - {"setlinejoin", 1, &PSActions::setlinejoin}, - {"setlinewidth", 1, &PSActions::setlinewidth}, - {"setmatrix", 6, &PSActions::setmatrix}, - {"setmiterlimit", 1, &PSActions::setmiterlimit}, - {"setopacityalpha", 1, &PSActions::setopacityalpha}, - {"setrgbcolor", 3, &PSActions::setrgbcolor}, - {"stroke", 0, &PSActions::stroke}, - {"translate", 2, &PSActions::translate}, - }; - if (_actions) { - in.skipSpace(); - // binary search - int first=0, last=sizeof(operators)/sizeof(Operator)-1; - while (first <= last) { - int mid = first+(last-first)/2; - int cmp = in.compare(operators[mid].name); - if (cmp > 0) - last = mid-1; - else if (cmp < 0) - first = mid+1; - else { - // collect parameters and call handler - vector params; - int pcount = operators[mid].pcount; - if (pcount < 0) { // variable number of parameters? - in.skipSpace(); - while (!in.eof()) { // read all available parameters - params.push_back(in.getString()); - in.skipSpace(); - } - } - else { // fixed number of parameters - for (int i=0; i < pcount; i++) { - in.skipSpace(); - params.push_back(in.getString()); - } - } - vector v(params.size()); - str2double(params, v); - (_actions->*operators[mid].op)(v); - _actions->executed(); - } - } - } -} - - -/** This callback function handles output from Ghostscript to stderr. - * @param[in] inst pointer to calling instance of PSInterpreter - * @param[in] buf contains the characters to be output - * @param[in] len number of chars in buf - * @return number of processed characters */ -int GSDLLCALL PSInterpreter::error (void *inst, const char *buf, int len) { - ostringstream oss; - oss << "PostScript error:\n"; - oss.write(buf, len); - return len; -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PSInterpreter.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PSInterpreter.h deleted file mode 100644 index c33ad43a237..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PSInterpreter.h +++ /dev/null @@ -1,116 +0,0 @@ -/************************************************************************* -** PSInterpreter.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef PSINTERPRETER_H -#define PSINTERPRETER_H - -#include -#include -#include -#include -#include "Ghostscript.h" -#include "InputReader.h" -#include "MessageException.h" - - -struct PSException : public MessageException -{ - PSException (const std::string &msg) : MessageException(msg) {} -}; - - -/** This interface provides the template methods called by PSInterpreter when executing a PS snippet. - * Each method corresponds to a PostScript operator of the same name. */ -struct PSActions -{ - virtual ~PSActions () {} - virtual void applyscalevals (std::vector &p) =0; - virtual void clip (std::vector &p) =0; - virtual void closepath (std::vector &p) =0; - virtual void curveto (std::vector &p) =0; - virtual void eoclip (std::vector &p) =0; - virtual void eofill (std::vector &p) =0; - virtual void fill (std::vector &p) =0; - virtual void gsave (std::vector &p) =0; - virtual void grestore (std::vector &p) =0; - virtual void grestoreall (std::vector &p) =0; - virtual void initclip (std::vector &p) =0; - virtual void lineto (std::vector &p) =0; - virtual void moveto (std::vector &p) =0; - virtual void newpath (std::vector &p) =0; - virtual void querypos (std::vector &p) =0; - virtual void restore (std::vector &p) =0; - virtual void rotate (std::vector &p) =0; - virtual void save (std::vector &p) =0; - virtual void scale (std::vector &p) =0; - virtual void setcmykcolor (std::vector &cmyk) =0; - virtual void setdash (std::vector &p) =0; - virtual void setgray (std::vector &p) =0; - virtual void sethsbcolor (std::vector &hsb) =0; - virtual void setlinecap (std::vector &p) =0; - virtual void setlinejoin (std::vector &p) =0; - virtual void setlinewidth (std::vector &p) =0; - virtual void setmatrix (std::vector &p) =0; - virtual void setmiterlimit (std::vector &p) =0; - virtual void setopacityalpha (std::vector &p) =0; - virtual void setrgbcolor (std::vector &rgb) =0; - virtual void stroke (std::vector &p) =0; - virtual void translate (std::vector &p) =0; - virtual void executed () {} // triggered if one of the above PS operators has been executed -}; - - -/** This class provides methods to execute chunks of PostScript code and calls - * several template methods on invocation of selected PS operators (see PSActions). */ -class PSInterpreter -{ - enum Mode {PS_NONE, PS_RUNNING, PS_QUIT}; - - public: - PSInterpreter (PSActions *actions=0); - void execute (const char *str, size_t len, bool flush=true); - void execute (const char *str) {execute(str, std::strlen(str));} - void execute (const std::string &str) {execute(str.c_str());} - void execute (std::istream &is); - bool active () const {return _mode != PS_QUIT;} - PSActions* setActions (PSActions *actions); - - protected: - void init (); - // callback functions - static int GSDLLCALL input (void *inst, char *buf, int len); - static int GSDLLCALL output (void *inst, const char *buf, int len); - static int GSDLLCALL error (void *inst, const char *buf, int len); - - void callActions (InputReader &cib); - - private: - Ghostscript _gs; - Mode _mode; ///< current execution mode - PSActions *_actions; ///< actions to be performed - std::vector _linebuf; - std::string _errorMessage; ///< text of error message - bool _inError; ///< true if scanning error message - bool _initialized; ///< true if PSInterpreter has been completely initialized - static const char *GSARGS[]; ///< parameters passed to Ghostscript - static const char *PSDEFS; ///< initial PostScript definitions -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageRanges.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageRanges.cpp deleted file mode 100644 index 9c985972b72..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageRanges.cpp +++ /dev/null @@ -1,135 +0,0 @@ -/************************************************************************* -** PageRanges.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include "InputBuffer.h" -#include "InputReader.h" -#include "PageRanges.h" - -#include "macros.h" - -using namespace std; - - -/** 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 - * @param[in] max_page greatest allowed value - * @param[out] ranges the extracted range sequence - * @return true on success; false denotes a syntax error */ -bool PageRanges::parse (string str, int max_page) { - StringInputBuffer ib(str); - BufferInputReader ir(ib); - while (ir) { - 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() == '-') { - while (ir.peek() == '-') - ir.get(); - ir.skipSpace(); - if (isdigit(ir.peek())) - last = ir.getInt(); - } - else - last = first; - ir.skipSpace(); - if (ir.peek() == ',') { - ir.get(); - if (ir.eof()) - return false; - } - else if (!ir.eof()) - return false; - if (first > last) - swap(first, last); - first = max(1, first); - last = max(first, last); - if (max_page > 0) { - first = min(first, max_page); - last = min(last, max_page); - } - insert(first, last); - } - return true; -} - - -/** Adds a page range to the range collection. - * @param[in] first first page of new range - * @param[in] last last page of new range */ -void PageRanges::insert (int first, int last) { - if (first > last) - swap(first, last); - Container::iterator it = _ranges.begin(); - while (it != _ranges.end() && first > it->first+1 && first > it->second+1) - ++it; - if (it == _ranges.end() || last < it->first-1 || first > it->second+1) - it = _ranges.insert(it, Range(first, last)); - else if ((first < it->first && last >= it->first-1) || (first <= it->second+1 && last > it->second)) { - it->first = min(it->first, first); - it->second = max(it->second, last); - } - // merge adjacent ranges - if (it != _ranges.end()) { - Container::iterator l = it; - Container::iterator r = it; - if (l == _ranges.begin()) - l = _ranges.end(); - else - --l; - ++r; - bool l_modified = false; - bool r_modified = false; - if (l != _ranges.end() && l->second >= it->first-1) { - l->first = min(l->first, it->first); - l->second = max(l->second, it->second); - l_modified = true; - } - if (r != _ranges.end() && r->first <= it->second+1) { - r->first = min(r->first, it->first); - r->second = max(r->second, it->second); - r_modified = true; - } - if (l_modified || r_modified) { - _ranges.erase(it); - if (l_modified && r_modified && l->second >= r->first-1) { - l->first = min(l->first, r->first); - l->second = max(l->second, r->second); - _ranges.erase(r); - } - } - } -} - - -/** Returns the number of pages. */ -size_t PageRanges::pages () const { - size_t sum=0; - for (ConstIterator it=_ranges.begin(); it != _ranges.end(); ++it) - sum += it->second - it->first + 1; - return sum; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageRanges.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageRanges.h deleted file mode 100644 index f15641b9f70..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageRanges.h +++ /dev/null @@ -1,50 +0,0 @@ -/************************************************************************* -** PageRanges.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef PAGERANGES_H -#define PAGERANGES_H - -#include -#include -#include - -class PageRanges -{ - public: - typedef std::pair Range; - typedef std::list Container; - typedef Container::iterator Iterator; - typedef Container::const_iterator ConstIterator; - - public: - bool parse (std::string str, int max_page=0); - void insert (int first, int last); - size_t pages () const; - size_t size () const {return _ranges.size();} - const Container& ranges () const {return _ranges;} - ConstIterator begin () const {return _ranges.begin();} - ConstIterator end () const {return _ranges.end();} - - private: - Container _ranges; - int _max; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageSize.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageSize.cpp deleted file mode 100644 index 88990136285..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageSize.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/************************************************************************* -** PageSize.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include -#include "PageSize.h" - -using namespace std; - -// make sure tolower is a function (and not a macro) -// so that 'transform' can be applied -static int my_tolower (int c) { - return tolower(c); -} - - -/** Computes width and height of ISO/DIN An in millimeters. - * @param[in] n the A level (e.g. n=4 => DIN A4) - * @param[out] width contains the page width when function returns - * @param[out] height contains the page height when function returns */ -static void computeASize (int n, double &width, double &height) { - double sqrt2 = sqrt(2.0); - height = floor(1189.0/pow(sqrt2, n)+0.5); - width = floor(height/sqrt2+0.5); -} - - -/** Computes width and height of ISO/DIN Bn in millimeters. - * @param[in] n the B level (e.g. n=4 => DIN B4) - * @param[out] width contains the page width when function returns - * @param[out] height contains the page height when function returns */ -static void computeBSize (int n, double &width, double &height) { - double w, h; - computeASize(n, width, height); - computeASize(n-1, w, h); - width = floor(sqrt(width * w)+0.5); - height = floor(sqrt(height * h)+0.5); -} - - -/** Computes width and height of ISO/DIN Cn in millimeters. - * @param[in] n the C level (e.g. n=4 => DIN C4) - * @param[out] width contains the page width when function returns - * @param[out] height contains the page height when function returns */ -static void computeCSize (int n, double &width, double &height) { - double w, h; - computeASize(n, width, height); - computeBSize(n, w, h); - width = floor(sqrt(width * w)+0.5); - height = floor(sqrt(height * h)+0.5); -} - - -/** Computes width and height of ISO/DIN Dn in millimeters. - * @param[in] n the D level (e.g. n=4 => DIN D4) - * @param[out] width contains the page width when function returns - * @param[out] height contains the page height when function returns */ -static void computeDSize (int n, double &width, double &height) { - double w, h; - computeASize(n, width, height); - computeBSize(n+1, w, h); - width = floor(sqrt(width * w)+0.5); - height = floor(sqrt(height * h)+0.5); -} - - -/** Constructs a PageSize object of given size. - * @param[in] name specifies the page size, e.g. "A4" or "letter" */ -PageSize::PageSize (string name) : width(0), height(0) { - resize(name); -} - - -void PageSize::resize (double w, double h) { - width = w; - height = h; -} - -void PageSize::resize (string name) { - if (name.length() < 2) - throw PageSizeException("unknown page format: "+name); - - transform(name.begin(), name.end(), name.begin(), my_tolower); - // extract optional suffix - size_t pos = name.rfind("-"); - bool landscape = false; - if (pos != string::npos) { - string suffix = name.substr(pos); - name = name.substr(0, pos); - if (suffix == "-l" || suffix == "-landscape") - landscape = true; - else if (suffix != "-p" && suffix != "-portrait") - throw PageSizeException("invalid page format suffix: " + suffix); - } - - if (name == "invoice") { - width = 140; - height = 216; - } - else if (name == "executive") { - width = 184; - height = 267; - } - else if (name == "legal") { - width = 216; - height = 356; - } - else if (name == "letter") { - width = 216; - height = 279; - } - else if (name == "ledger") { - width = 279; - height = 432; - } - else if (isdigit(name[1]) && name.length() < 5) { // limit length of number to prevent arithmetic errors - istringstream iss(name.substr(1)); - int n; - iss >> n; - switch (name[0]) { - case 'a' : computeASize(n, width, height); break; - case 'b' : computeBSize(n, width, height); break; - case 'c' : computeCSize(n, width, height); break; - case 'd' : computeDSize(n, width, height); break; - default : throw PageSizeException("invalid page format: "+name); - } - } - if (width == 0 || height == 0) - throw PageSizeException("unknown page format: "+name); - if (landscape) - swap(width, height); - - const double ptpmm = 72.27/25.4; // TeX points per millimeter (72.27pt = 1in = 25.4mm) - width *= ptpmm; - height *= ptpmm; -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageSize.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageSize.h deleted file mode 100644 index c2ca163e051..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PageSize.h +++ /dev/null @@ -1,48 +0,0 @@ -/************************************************************************* -** PageSize.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef PAGESIZE_H -#define PAGESIZE_H - -#include "MessageException.h" - -struct PageSizeException : public MessageException -{ - PageSizeException (const std::string &msg) : MessageException(msg) {} -}; - -class PageSize -{ - public: - PageSize (double w=0, double h=0) : width(w), height(h) {} - PageSize (std::string name); - void resize (std:: string name); - void resize (double w, double h); - double widthInPT () const {return width;} - double heightInPT () const {return height;} - double widthInMM () const {return width*25.4/72.27;} - double heightInMM () const {return height*25.4/72.27;} - bool valid () const {return width > 0 && height > 0;} - - private: - double width, height; // in pt -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Pair.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Pair.h deleted file mode 100644 index 9e6d1f0d0d1..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Pair.h +++ /dev/null @@ -1,79 +0,0 @@ -/************************************************************************* -** Pair.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef PAIR_H -#define PAIR_H - -#include -#include -#include "macros.h" -#include "types.h" - -template -class Pair -{ - public: - Pair (T x=0, T y=0) : _x(x), _y(y) {} - Pair operator += (const Pair &p) {_x += p._x; _y += p._y; return *this;} - Pair operator -= (const Pair &p) {_x -= p._x; _y -= p._y; return *this;} - Pair operator *= (T c) {_x *= c; _y *= c; return *this;} - Pair operator /= (T c) {_x /= c; _y /= c; return *this;} - Pair ortho () const {return Pair(-_y, _x);} - double length () const {return std::sqrt(_x*_x + _y*_y);} - bool operator == (const Pair &p) const {return _x == p._x && _y == p._y;} - bool operator != (const Pair &p) const {return _x != p._x || _y != p._y;} - T x () const {return _x;} - T y () const {return _y;} - void x (const T &xx) {_x = xx;} - void y (const T &yy) {_y = yy;} - std::ostream& write (std::ostream &os) const {return os << '(' << _x << ',' << _y << ')';} - - private: - T _x, _y; -}; - - -struct Pair32 : public Pair -{ - Pair32 (Int32 x=0, Int32 y=0) : Pair(x, y) {} - explicit Pair32 (double x, double y) : Pair(Int32(x+0.5), Int32(y+0.5)) {} - Pair32 (const Pair &p) : Pair(p) {} -// operator Pair () {return *this;} -}; - -typedef Pair DPair; - -template -IMPLEMENT_ARITHMETIC_OPERATOR(Pair, +) - -template -IMPLEMENT_ARITHMETIC_OPERATOR(Pair, -) - -template -IMPLEMENT_ARITHMETIC_OPERATOR2(Pair, T, *) - -template -IMPLEMENT_ARITHMETIC_OPERATOR2(Pair, T, /) - -template -IMPLEMENT_OUTPUT_OPERATOR(Pair) - -IMPLEMENT_ARITHMETIC_OPERATOR2(Pair32, Int32, *) -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Process.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Process.cpp deleted file mode 100644 index 7ad4874f3d5..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Process.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/************************************************************************* -** Process.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - - -#ifdef __WIN32__ -#include -#else -#include -#include -#include -#include -#endif - -#include -#include "FileSystem.h" -#include "Process.h" -#include "SignalHandler.h" -#include "macros.h" - -using namespace std; - -Process::Process (const string &cmd, const string ¶mstr) - : _cmd(cmd), _paramstr(paramstr) -{ -} - - -#ifndef __WIN32__ -/** Extracts whitespace-sparated parameters from a string. - * @param[in] paramstr the parameter string - * @param[out] params vector holding the extracted parameters */ -static void split_paramstr (string paramstr, vector ¶ms) { - size_t left=0, right=0; // index of first and last character of current parameter - char quote=0; // current quote character, 0=none - const size_t len = paramstr.length(); - while (left <= right && right < len) { - while (left < len && isspace(paramstr[left])) - ++left; - if (left < len && (paramstr[left] == '"' || paramstr[left] == '\'')) - quote = paramstr[left++]; - right = left; - while (right < len && (quote || !isspace(paramstr[right]))) { - if (quote && paramstr[right] == quote) { - quote=0; - break; - } - else - ++right; - } - if (right < len) - paramstr[right]=0; - if (left < len) - params.push_back(¶mstr[left]); - left = ++right; - } -} -#endif - - -/** Runs the process and waits until it's finished. - * @param[in] quiet if true, output to stdout/stderr is suppressed - * @return true if process terminated properly - * @throw SignalException if CTRL-C was pressed during execution */ -bool Process::run (bool quiet) { -#ifdef __WIN32__ - SECURITY_ATTRIBUTES sa; - ZeroMemory(&sa, sizeof(sa)); - sa.nLength = sizeof(sa); - sa.bInheritHandle = true; - - STARTUPINFO si; - ZeroMemory(&si, sizeof(si)); - si.cb = sizeof(si); - si.dwFlags = STARTF_USESTDHANDLES; - HANDLE devnull = CreateFile("nul", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, &sa, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - si.hStdInput = GetStdHandle(STD_INPUT_HANDLE); - si.hStdError = GetStdHandle(STD_ERROR_HANDLE); - si.hStdOutput = quiet ? devnull : GetStdHandle(STD_OUTPUT_HANDLE); - PROCESS_INFORMATION pi; - ZeroMemory(&pi, sizeof(pi)); - - string cmdline = _cmd+" "+_paramstr; - CreateProcess(NULL, (LPSTR)cmdline.c_str(), NULL, NULL, true, 0, NULL, NULL, &si, &pi); - WaitForSingleObject(pi.hProcess, INFINITE); - DWORD exitcode = (DWORD)-1; - GetExitCodeProcess(pi.hProcess, &exitcode); - CloseHandle(devnull); - return exitcode == 0; -#else - pid_t pid = fork(); - if (pid == 0) { // child process - if (quiet) { - int devnull = open(FileSystem::DEVNULL, O_WRONLY); - if (devnull >= 0) { - dup2(devnull, STDOUT_FILENO); - dup2(devnull, STDERR_FILENO); - close(devnull); - } - } - vector params; - params.push_back(_cmd.c_str()); - split_paramstr(_paramstr, params); - params.push_back(0); // trailing NULL marks end - execvp(_cmd.c_str(), const_cast(¶ms[0])); - exit(1); - } - if (pid > 0) { // main process - int status; - for (;;) { - waitpid(pid, &status, WNOHANG); - if (WIFEXITED(status)) // child process exited normally - return WEXITSTATUS(status) == 0; - - try { - SignalHandler::instance().check(); - } - catch (SignalException &e) { // caught ctrl-c - kill(pid, SIGKILL); - throw e; - } - } - } - return false; -#endif -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Process.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Process.h deleted file mode 100644 index 2b9e79e43ce..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Process.h +++ /dev/null @@ -1,41 +0,0 @@ -/************************************************************************* -** Process.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef PROCESS_H -#define PROCESS_H - -#include - -class Process -{ - public: - Process (const std::string &cmd, const std::string ¶mstr); - bool run (bool quiet=true); - - protected: - Process (const Process& orig) {} - - private: - std::string _cmd; - std::string _paramstr; -}; - -#endif - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PsSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PsSpecialHandler.cpp deleted file mode 100644 index 98dab7909a1..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PsSpecialHandler.cpp +++ /dev/null @@ -1,718 +0,0 @@ -/************************************************************************* -** PsSpecialHandler.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include -#include "FileFinder.h" -#include "Ghostscript.h" -#include "Message.h" -#include "PsSpecialHandler.h" -#include "SpecialActions.h" -#include "XMLNode.h" -#include "XMLString.h" - -using namespace std; - - -static inline double str2double (const string &str) { - double ret; - istringstream iss(str); - iss >> ret; - return ret; -} - - -PsSpecialHandler::PsSpecialHandler () : _psi(this), _actions(0), _initialized(false) -{ -} - - -PsSpecialHandler::~PsSpecialHandler () { - // ensure no further PS actions are performed - _psi.setActions(0); -} - - -/** Initializes the PostScript handler. It's called by the first use of process(). The - * deferred initialization speeds up the conversion of DVI files that doesn't contain - * PS specials. */ -void PsSpecialHandler::initialize (SpecialActions *actions) { - if (!_initialized) { - // initial values of graphics state - _linewidth = 1; - _linecap = _linejoin = 0; - _miterlimit = 4; - _xmlnode = 0; - _opacityalpha = 1; // fully opaque - _sx = _sy = _cos = 1.0; - - // execute dvips prologue/header files - const char *headers[] = {"tex.pro", "texps.pro", "special.pro", /*"color.pro",*/ 0}; - for (const char **p=headers; *p; ++p) { - if (const char *path = FileFinder::lookup(*p, false)) { - ifstream ifs(path); - _psi.execute(ifs); - } - else - Message::wstream(true) << "PostScript header file " << *p << " not found\n"; - } - // push dictionary "TeXDict" with dvips definitions on dictionary stack - // and initialize basic dvips PostScript variables - ostringstream oss; - oss << " TeXDict begin 0 0 1000 72 72 () @start " - " 0 0 moveto "; - if (actions) { - float r, g, b; - actions->getColor().getRGB(r, g, b); - oss << r << ' ' << g << ' ' << b << " setrgbcolor "; - } - _psi.execute(oss.str()); - _initialized = true; - } -} - - -const char* PsSpecialHandler::info () const { - static string str; - str = "dvips PostScript specials (using " + Ghostscript().revision() + ")"; - return str.c_str(); -} - - -/** Move PS graphic position to current DVI location. */ -void PsSpecialHandler::moveToDVIPos () { - if (_actions) { - const double bp=72.0/72.27; // pt -> bp - const double x = _actions->getX()*bp; - const double y = _actions->getY()*bp; - ostringstream oss; - oss << '\n' << x << ' ' << y << " moveto "; - _psi.execute(oss.str()); - _currentpoint = DPair(x, y); - } -} - - -/** Executes a PS snippet and moves the DVI cursor to the current DVI position afterwards. - * It's just a shorthand function as this action sequence is required several times. - * @param[in] psi PS interpreter instance - * @param[in] is stream to read the PS code from - * @param[in] pos current PS graphic position - * @param[in] actions special actions */ -static void exec_and_syncpos (PSInterpreter &psi, istream &is, const DPair &pos, SpecialActions *actions) { - psi.execute(is); - psi.execute("\nquerypos "); // retrieve current PS position (stored in 'pos') - const double pt = 72.27/72.0; // bp -> pt - actions->setX(pos.x()*pt); - actions->setY(pos.y()*pt); -} - - -bool PsSpecialHandler::process (const char *prefix, istream &is, SpecialActions *actions) { - if (!_initialized) - initialize(actions); - _actions = actions; - - if (*prefix == '"') { - // read and execute literal PostScript code (isolated by a wrapping save/restore pair) - moveToDVIPos(); - _psi.execute("\n@beginspecial @setspecial "); - _psi.execute(is); - _psi.execute("\n@endspecial "); - } - else if (*prefix == '!') { - // execute literal PostScript header - _psi.execute("\nTeXDict begin @defspecial "); - _psi.execute(is); - _psi.execute("\n@fedspecial end "); - } - else if (strcmp(prefix, "header=") == 0) { - // read and execute PS header files - string fname; - is >> fname; - if (const char *path = FileFinder::lookup(fname, false)) { - ifstream ifs(path); - _psi.execute(ifs); - } - else - Message::estream(true) << "PS header file '" << fname << "' not found"; - } - else if (strcmp(prefix, "psfile=") == 0 || strcmp(prefix, "PSfile=") == 0) { - if (_actions) { - StreamInputReader in(is); - string fname = in.getString(in.peek() == '"' ? '"' : 0); - map attr; - in.parseAttributes(attr); - psfile(fname, attr); - } - } - else if (strcmp(prefix, "ps::") == 0) { - _actions->finishLine(); // reset DVI position on next DVI command - if (is.peek() == '[') { - // collect characters inside the brackets - string code; - for (int i=0; i < 9 && is.peek() != ']' && !is.eof(); ++i) - code += is.get(); - if (is.peek() == ']') - code += is.get(); - - if (code == "[begin]" || code == "[nobreak]") { - moveToDVIPos(); - exec_and_syncpos(_psi, is, _currentpoint, _actions); - } - else { - // no move to DVI position here - if (code != "[end]") // PS array? - _psi.execute(code); - exec_and_syncpos(_psi, is, _currentpoint, _actions); - } - } - else { // ps:: behaves like ps::[end] - // no move to DVI position here - exec_and_syncpos(_psi, is, _currentpoint, _actions); - } - } - else { // ps: ... - _actions->finishLine(); - moveToDVIPos(); - StreamInputReader in(is); - if (in.check(" plotfile ")) { // ps: plotfile fname - string fname = in.getString(); - ifstream ifs(fname.c_str()); - if (ifs) - _psi.execute(ifs); - else - Message::wstream(true) << "file '" << fname << "' not found in ps: plotfile\n"; - } - else { - // ps: is almost identical to ps::[begin] but does - // a final repositioning to the current DVI location - exec_and_syncpos(_psi, is, _currentpoint, _actions); - moveToDVIPos(); - } - } - return true; -} - - -/** Handles psfile special. - * @param[in] fname EPS file to be included - * @param[in] attr attributes given with \special psfile */ -void PsSpecialHandler::psfile (const string &fname, const map &attr) { - ifstream ifs(fname.c_str()); - if (!ifs) - Message::wstream(true) << "file '" << fname << "' not found in special 'psfile'\n"; - else { - map::const_iterator it; - const double pt = 72.27/72.0; // bp -> pt - - // bounding box of EPS figure - double llx = (it = attr.find("llx")) != attr.end() ? str2double(it->second)*pt : 0; - double lly = (it = attr.find("lly")) != attr.end() ? str2double(it->second)*pt : 0; - double urx = (it = attr.find("urx")) != attr.end() ? str2double(it->second)*pt : 0; - double ury = (it = attr.find("ury")) != attr.end() ? str2double(it->second)*pt : 0; - - // desired width/height of resulting figure - double rwi = (it = attr.find("rwi")) != attr.end() ? str2double(it->second)/10.0*pt : -1; - double rhi = (it = attr.find("rhi")) != attr.end() ? str2double(it->second)/10.0*pt : -1; - if (rwi == 0 || rhi == 0 || urx-llx == 0 || ury-lly == 0) - return; - - // user transformations (default values chosen according to dvips manual) - double hoffset = (it = attr.find("hoffset")) != attr.end() ? str2double(it->second)*pt : 0; - double voffset = (it = attr.find("voffset")) != attr.end() ? str2double(it->second)*pt : 0; -// double hsize = (it = attr.find("hsize")) != attr.end() ? str2double(it->second) : 612; -// double vsize = (it = attr.find("vsize")) != attr.end() ? str2double(it->second) : 792; - double hscale = (it = attr.find("hscale")) != attr.end() ? str2double(it->second) : 100; - double vscale = (it = attr.find("vscale")) != attr.end() ? str2double(it->second) : 100; - double angle = (it = attr.find("angle")) != attr.end() ? str2double(it->second) : 0; - - Matrix m(1); - m.rotate(angle).scale(hscale/100, vscale/100).translate(hoffset, voffset); - BoundingBox bbox(llx, lly, urx, ury); - bbox.transform(m); - - double sx = rwi/bbox.width(); - double sy = rhi/bbox.height(); - if (sx < 0) sx = sy; - if (sy < 0) sy = sx; - if (sx < 0) sx = sy = 1.0; - - // save current DVI position (in pt units) - const double x = _actions->getX(); - const double y = _actions->getY(); - - // all following drawings are relative to (0,0) - _actions->setX(0); - _actions->setY(0); - moveToDVIPos(); - - _xmlnode = new XMLElementNode("g"); - _psi.execute("\n@beginspecial @setspecial "); // enter \special environment - _psi.execute(ifs); // process EPS file - _psi.execute("\n@endspecial "); // leave special environment - if (!_xmlnode->empty()) { // has anything been drawn? - Matrix m(1); - m.rotate(angle).scale(hscale/100, vscale/100).translate(hoffset, voffset); - m.translate(-llx, lly); - m.scale(sx, sy); // resize image to width "rwi" and height "rhi" - m.translate(x, y); // move image to current DVI position - _xmlnode->addAttribute("transform", m.getSVG()); - _actions->appendToPage(_xmlnode); - } - else - delete _xmlnode; - _xmlnode = 0; - - // restore DVI position - _actions->setX(x); - _actions->setY(y); - moveToDVIPos(); - - // update bounding box - m.scale(sx, -sy); - m.translate(x, y); - bbox = BoundingBox(0, 0, fabs(urx-llx), fabs(ury-lly)); - bbox.transform(m); - _actions->embed(bbox); - } -} - -/////////////////////////////////////////////////////// - -void PsSpecialHandler::gsave (vector &p) { - _clipStack.dup(); -} - - -void PsSpecialHandler::grestore (vector &p) { - _clipStack.pop(); -} - - -void PsSpecialHandler::grestoreall (vector &p) { - _clipStack.pop(-1, true); -} - - -void PsSpecialHandler::save (vector &p) { - _clipStack.dup(static_cast(p[0])); -} - - -void PsSpecialHandler::restore (vector &p) { - _clipStack.pop(static_cast(p[0])); -} - - -void PsSpecialHandler::moveto (vector &p) { - _path.moveto(p[0], p[1]); -} - - -void PsSpecialHandler::lineto (vector &p) { - _path.lineto(p[0], p[1]); -} - - -void PsSpecialHandler::curveto (vector &p) { - _path.cubicto(p[0], p[1], p[2], p[3], p[4], p[5]); -} - - -void PsSpecialHandler::closepath (vector &p) { - _path.closepath(); -} - - -/** Draws the current path recorded by previously executed path commands (moveto, lineto,...). - * @param[in] p not used */ -void PsSpecialHandler::stroke (vector &p) { - if (!_path.empty() && _actions) { - BoundingBox bbox; - if (!_actions->getMatrix().isIdentity()) { - _path.transform(_actions->getMatrix()); - if (!_xmlnode) - bbox.transform(_actions->getMatrix()); - } - - const double pt = 72.27/72.0; // factor to convert bp -> pt - ScalingMatrix scale(pt, pt); - _path.transform(scale); - bbox.transform(scale); - - XMLElementNode *path=0; - Pair point; - if (_path.isDot(point)) { // zero-length path? - if (_linecap == 1) { // round line ends? => draw dot - double x = point.x(); - double y = point.y(); - double r = _linewidth/2.0; - path = new XMLElementNode("circle"); - path->addAttribute("cx", XMLString(x)); - path->addAttribute("cy", XMLString(y)); - path->addAttribute("r", XMLString(r)); - path->addAttribute("fill", _actions->getColor().rgbString()); - bbox = BoundingBox(x-r, y-r, x+r, y+r); - } - } - else { - // compute bounding box - _path.computeBBox(bbox); - bbox.expand(_linewidth/2); - - ostringstream oss; - _path.writeSVG(oss); - path = new XMLElementNode("path"); - path->addAttribute("d", oss.str()); - path->addAttribute("stroke", _actions->getColor().rgbString()); - path->addAttribute("fill", "none"); - if (_linewidth != 1) - path->addAttribute("stroke-width", XMLString(_linewidth)); - if (_miterlimit != 4) - path->addAttribute("stroke-miterlimit", XMLString(_miterlimit)); - if (_linecap > 0) // default value is "butt", no need to set it explicitely - path->addAttribute("stroke-linecap", XMLString(_linecap == 1 ? "round" : "square")); - if (_linejoin > 0) // default value is "miter", no need to set it explicitely - path->addAttribute("stroke-linejoin", XMLString(_linecap == 1 ? "round" : "bevel")); - if (_opacityalpha < 1) - path->addAttribute("stroke-opacity", XMLString(_opacityalpha)); - if (_dashpattern.size() > 0) { - ostringstream oss; - for (size_t i=0; i < _dashpattern.size(); i++) { - if (i > 0) - oss << ','; - oss << _dashpattern[i]; - } - path->addAttribute("stroke-dasharray", oss.str()); - if (_dashoffset != 0) - path->addAttribute("stroke-dashoffset", _dashoffset); - } - } - if (path && _clipStack.top()) { - // assign clipping path and clip bounding box - path->addAttribute("clip-path", XMLString("url(#clip")+XMLString(_clipStack.topID())+XMLString(")")); - BoundingBox clipbox; - _clipStack.top()->computeBBox(clipbox); - bbox.intersect(clipbox); - } - - if (_xmlnode) - _xmlnode->append(path); - else { - _actions->appendToPage(path); - _actions->embed(bbox); - } - _path.newpath(); - } -} - - -/** Draws a closed path filled with the current color. - * @param[in] p not used - * @param[in] evenodd true: use even-odd fill algorithm, false: use nonzero fill algorithm */ -void PsSpecialHandler::fill (vector &p, bool evenodd) { - if (!_path.empty() && _actions) { - // compute bounding box - BoundingBox bbox; - _path.computeBBox(bbox); - if (!_actions->getMatrix().isIdentity()) { - _path.transform(_actions->getMatrix()); - if (!_xmlnode) - bbox.transform(_actions->getMatrix()); - } - - const double pt = 72.27/72.0; // factor to convert bp -> pt - ScalingMatrix scale(pt, pt); - _path.transform(scale); - bbox.transform(scale); - - ostringstream oss; - _path.writeSVG(oss); - XMLElementNode *path = new XMLElementNode("path"); - path->addAttribute("d", oss.str()); - if (_actions->getColor() != Color::BLACK) - path->addAttribute("fill", _actions->getColor().rgbString()); - if (_clipStack.top()) { - // assign clipping path and clip bounding box - path->addAttribute("clip-path", XMLString("url(#clip")+XMLString(_clipStack.topID())+XMLString(")")); - BoundingBox clipbox; - _clipStack.top()->computeBBox(clipbox); - bbox.intersect(clipbox); - } - if (evenodd) // SVG default fill rule is "nonzero" algorithm - path->addAttribute("fill-rule", "evenodd"); - if (_opacityalpha < 1) - path->addAttribute("fill-opacity", XMLString(_opacityalpha)); - if (_xmlnode) - _xmlnode->append(path); - else { - _actions->appendToPage(path); - _actions->embed(bbox); - } - _path.newpath(); - } -} - - -/** Clears the current clipping path. - * @param[in] p not used */ -void PsSpecialHandler::initclip (vector &p) { - _clipStack.push(); // push empty path -} - - -/** Assigns a new clipping path. - * @param[in] p not used - * @param[in] evenodd true: use even-odd fill algorithm, false: use nonzero fill algorithm */ -void PsSpecialHandler::clip (vector &p, bool evenodd) { - // when this method is called, _path contains the clipping path - if (!_path.empty() && _actions) { - if (!_actions->getMatrix().isIdentity()) - _path.transform(_actions->getMatrix()); - - const double pt = 72.27/72.0; // factor to convert bp -> pt - ScalingMatrix scale(pt, pt); - _path.transform(scale); - - - int oldID = _clipStack.topID(); - _clipStack.replace(_path); - int newID = _clipStack.topID(); - - ostringstream oss; - _path.writeSVG(oss); - XMLElementNode *path = new XMLElementNode("path"); - path->addAttribute("d", oss.str()); - if (evenodd) - path->addAttribute("clip-rule", "evenodd"); - - XMLElementNode *clip = new XMLElementNode("clipPath"); - clip->addAttribute("id", XMLString("clip")+XMLString(newID)); - if (oldID) - clip->addAttribute("clip-path", XMLString("url(#clip")+XMLString(oldID)+XMLString(")")); - - clip->append(path); - _actions->appendToDefs(clip); - } -} - - -/** Clears current path */ -void PsSpecialHandler::newpath (vector &p) { - _path.newpath(); -} - - -void PsSpecialHandler::setmatrix (vector &p) { - if (_actions) { - // Ensure vector p has 6 elements. If necessary, add missing ones - // using corresponding values of the identity matrix. - if (p.size() < 6) { - p.resize(6); - for (int i=p.size(); i < 6; i++) - p[i] = (i%3 ? 0 : 1); - } - // PS matrix [a b c d e f] equals ((a,b,0),(c,d,0),(e,f,1)). - // Since PS uses left multiplications, we must transpose and reorder - // the matrix to ((a,c,e),(b,d,f),(0,0,1)). This is done by the - // following swaps. - swap(p[1], p[2]); // => (a, c, b, d, e, f) - swap(p[2], p[4]); // => (a, c, e, d, b, f) - swap(p[3], p[4]); // => (a, c, e, b, d, f) - Matrix m(p); - _actions->setMatrix(m); - } -} - - -// In contrast to SVG, PostScript transformations are applied in -// reverse order (M' = T*M). Thus, the transformation matrices must be -// left-multiplied in the following methods scale(), translate() and rotate(). - - -void PsSpecialHandler::scale (vector &p) { - if (_actions) { - Matrix m = _actions->getMatrix(); - ScalingMatrix s(p[0], p[1]); - m.lmultiply(s); - _actions->setMatrix(m); - } -} - - -void PsSpecialHandler::translate (vector &p) { - if (_actions) { - Matrix m = _actions->getMatrix(); - TranslationMatrix t(p[0], p[1]); - m.lmultiply(t); - _actions->setMatrix(m); - } -} - - -void PsSpecialHandler::rotate (vector &p) { - if (_actions) { - Matrix m = _actions->getMatrix(); - RotationMatrix r(p[0]); - m.lmultiply(r); - _actions->setMatrix(m); - } -} - -void PsSpecialHandler::setgray (vector &p) { - if (_actions) { - Color c; - c.setGray((float)p[0]); - _actions->setColor(c); - } -} - - -void PsSpecialHandler::setrgbcolor (vector &p) { - if (_actions) - _actions->setColor(Color((float)p[0], (float)p[1], (float)p[2])); -} - - -void PsSpecialHandler::setcmykcolor (vector &p) { - if (_actions) { - Color c; - c.setCMYK((float)p[0], (float)p[1], (float)p[2], (float)p[3]); - _actions->setColor(c); - } -} - - -void PsSpecialHandler::sethsbcolor (vector &p) { - if (_actions) { - Color c; - c.setHSB((float)p[0], (float)p[1], (float)p[2]); - _actions->setColor(c); - } -} - - -/** Sets the dash parameters used for stroking. - * @param[in] p dash pattern array m1,...,mn plus trailing dash offset */ -void PsSpecialHandler::setdash (vector &p) { - _dashpattern.clear(); - for (size_t i=0; i < p.size()-1; i++) - _dashpattern.push_back(scale(p[i])); - _dashoffset = scale(p.back()); -} - - -/** This method is called by the PSInterpreter if an PS operator has been executed. */ -void PsSpecialHandler::executed () { - if (_actions) - _actions->progress("ps"); -} - -//////////////////////////////////////////// - -void PsSpecialHandler::ClippingStack::push () { - if (!_stack.empty()) - _stack.push(Entry(0, -1)); -} - - -void PsSpecialHandler::ClippingStack::push (const Path &path, int saveID) { - if (path.empty()) - _stack.push(Entry(0, saveID)); - else { - _paths.push_back(path); - _stack.push(Entry(_paths.size(), saveID)); - } -} - - -/** Pops a single or several elements from the clipping stack. - * The method distingushes between the following cases: - * 1) saveID < 0 and grestoreall == false: - * pop top element if it was pushed by gsave (its saveID is < 0 as well) - * 2) saveID < 0 and grestoreall == true - * repeat popping until stack is empty or the top element was pushed - * by save (its saveID is >= 0) - * 3) saveID >= 0: - * pop all elements until the saveID of the top element equals parameter saveID */ -void PsSpecialHandler::ClippingStack::pop (int saveID, bool grestoreall) { - if (!_stack.empty()) { - if (saveID < 0) { // grestore? - if (_stack.top().saveID < 0) // pushed by 'gsave'? - _stack.pop(); - // pop all further elements pushed by 'gsave' if grestoreall == true - while (grestoreall && !_stack.empty() && _stack.top().saveID < 0) - _stack.pop(); - } - else { - // pop elements pushed by 'gsave' - while (!_stack.empty() && _stack.top().saveID != saveID) - _stack.pop(); - // pop element pushed by 'save' - if (!_stack.empty()) - _stack.pop(); - } - } -} - - -/** Returns a pointer to the path on top of the stack, or 0 if the stack is empty. */ -PsSpecialHandler::Path* PsSpecialHandler::ClippingStack::top () { - return (!_stack.empty() && _stack.top().pathID) - ? &_paths[_stack.top().pathID-1] - : 0; -} - - -/** Pops all elements from the stack. */ -void PsSpecialHandler::ClippingStack::clear() { - _paths.clear(); - while (!_stack.empty()) - _stack.pop(); -} - - -/** Replaces the top element by a new one. - * @param[in] path new path to be on top of the stack */ -void PsSpecialHandler::ClippingStack::replace (const Path &path) { - if (_stack.empty()) - push(path, -1); - else { - _paths.push_back(path); - _stack.top().pathID = _paths.size(); - } -} - - -/** Duplicates the top element, i.e. the top element is pushed again. */ -void PsSpecialHandler::ClippingStack::dup (int saveID) { - _stack.push(_stack.empty() ? Entry(0, -1) : _stack.top()); - _stack.top().saveID = saveID; -} - - -const char** PsSpecialHandler::prefixes () const { - static const char *pfx[] = {"header=", "psfile=", "PSfile=", "ps:", "ps::", "!", "\"", 0}; - return pfx; -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PsSpecialHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PsSpecialHandler.h deleted file mode 100644 index 39898926812..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/PsSpecialHandler.h +++ /dev/null @@ -1,130 +0,0 @@ -/************************************************************************* -** PsSpecialHandler.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef PSSPECIALHANDLER_H -#define PSSPECIALHANDLER_H - -#include -#include -#include "GraphicPath.h" -#include "PSInterpreter.h" -#include "SpecialHandler.h" - -class XMLElementNode; - -class PsSpecialHandler : public SpecialHandler, protected PSActions -{ - typedef GraphicPath Path; - - class ClippingStack - { - public: - void push (); - void push (const Path &path, int saveID=-1); - void replace (const Path &path); - void dup (int saveID=-1); - void pop (int saveID=-1, bool grestore=false); - void clear (); - bool empty () {return _stack.empty();} - Path* top (); - int topID () {return _stack.empty() ? 0 : _stack.top().pathID;} - - private: - struct Entry { - int pathID; ///< index referencing a path of the pool - int saveID; ///< if >=0, path was pushed by 'save', and saveID holds the ID of the - Entry (int pid, int sid) : pathID(pid), saveID(sid) {} - }; - std::vector _paths; ///< pool of all clipping paths - std::stack _stack; - }; - - public: - PsSpecialHandler (); - ~PsSpecialHandler (); - const char* name () const {return "ps";} - const char* info () const; - const char** prefixes () const; - bool process (const char *prefix, std::istream &is, SpecialActions *actions); - - protected: - void initialize (SpecialActions *actions); - void moveToDVIPos (); - void psfile (const std::string &fname, const std::map &attr); - - /// scale given value by current PS scale factors - double scale (double v) const {return v*(_sx*_cos*_cos + _sy*(1-_cos*_cos));} - - void applyscalevals (std::vector &p) {_sx = p[0]; _sy = p[1]; _cos = p[2];} - void clip (std::vector &p) {clip(p, false);} - void clip (std::vector &p, bool evenodd); - void closepath (std::vector &p); - void curveto (std::vector &p); - void eoclip (std::vector &p) {clip(p, true);} - void eofill (std::vector &p) {fill(p, true);} - void fill (std::vector &p, bool evenodd); - void fill (std::vector &p) {fill(p, false);} - void grestore (std::vector &p); - void grestoreall (std::vector &p); - void gsave (std::vector &p); - void initclip (std::vector &p); - void lineto (std::vector &p); - void moveto (std::vector &p); - void newpath (std::vector &p); - void querypos (std::vector &p) {_currentpoint = DPair(p[0], p[1]);} - void restore (std::vector &p); - void rotate (std::vector &p); - void save (std::vector &p); - void scale (std::vector &p); - void setcmykcolor (std::vector &cmyk); - void setdash (std::vector &p); - void setgray (std::vector &p); - void sethsbcolor (std::vector &hsb); - void setlinecap (std::vector &p) {_linecap = UInt8(p[0]);} - void setlinejoin (std::vector &p) {_linejoin = UInt8(p[0]);} - void setlinewidth (std::vector &p) {_linewidth = p[0] ? scale(p[0])*1.00375 : 0.5;} - void setmatrix (std::vector &p); - void setmiterlimit (std::vector &p) {_miterlimit = p[0]*1.00375;} - void setopacityalpha (std::vector &p){_opacityalpha = p[0];} - void setrgbcolor (std::vector &rgb); - void stroke (std::vector &p); - void translate (std::vector &p); - void executed (); - - private: - PSInterpreter _psi; - SpecialActions *_actions; - bool _initialized; - XMLElementNode *_xmlnode; ///< if != 0, created SVG elements are appended to this node - Path _path; - DPair _currentpoint; ///< current PS position in bp units - double _sx, _sy; ///< horizontal and vertical scale factors retrieved by operator "applyscalevals" - double _cos; ///< cosine of angle between (1,0) and transform(1,0) - double _linewidth; ///< current linewidth - double _miterlimit; ///< current miter limit - double _opacityalpha; ///< opacity level (0=fully transparent, ..., 1=opaque) - UInt8 _linecap : 2; ///< current line cap (0=butt, 1=round, 2=projecting square) - UInt8 _linejoin : 2; ///< current line join (0=miter, 1=round, 2=bevel) - double _dashoffset; ///< current dash offset - std::vector _dashpattern; - ClippingStack _clipStack; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SVGTree.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SVGTree.cpp deleted file mode 100644 index 07cdca2a4b9..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SVGTree.cpp +++ /dev/null @@ -1,330 +0,0 @@ -/************************************************************************* -** SVGTree.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "BoundingBox.h" -#include "DVIToSVG.h" -#include "Font.h" -#include "FontManager.h" -#include "SVGTree.h" -#include "XMLDocument.h" -#include "XMLDocTypeNode.h" -#include "XMLNode.h" -#include "XMLString.h" - -using namespace std; - - -// static class variables -bool SVGTree::CREATE_STYLE=true; -bool SVGTree::USE_FONTS=true; -bool SVGTree::CREATE_USE_ELEMENTS=false; - - -SVGTree::SVGTree () : _font(0), _color(Color::BLACK), _matrix(1) { - _xchanged = _ychanged = false; - _fontnum = 0; - reset(); -} - - -/** Clears the SVG tree and initializes the root element. */ -void SVGTree::reset () { - _doc.clear(); - _root = new XMLElementNode("svg"); - _root->addAttribute("version", "1.1"); - _root->addAttribute("xmlns", "http://www.w3.org/2000/svg"); - _root->addAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); - _doc.setRootNode(_root); - _doc.append(new XMLDocTypeNode("svg", "PUBLIC", - "\"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"")); - _page = _text = _span = _defs = 0; -} - - -/** Sets the bounding box of the document. */ -void SVGTree::setBBox (const BoundingBox &bbox) { - _root->addAttribute("width", XMLString(bbox.width())+"pt"); - _root->addAttribute("height", XMLString(bbox.height())+"pt"); - _root->addAttribute("viewBox", bbox.toSVGViewBox()); -} - - -/** Starts a new page. - * @param[in] pageno number of new page */ -void SVGTree::newPage (int pageno) { - _page = new XMLElementNode("g"); - if (pageno >= 0) - _page->addAttribute("id", string("page")+XMLString(pageno)); - _root->append(_page); - _text = _span = 0; -} - - -void SVGTree::appendToDefs (XMLNode *node) { - if (!_defs) { - _defs = new XMLElementNode("defs"); - _root->prepend(_defs); - } - _defs->append(node); -} - -/** Appends a single charater to the current text node. If necessary, and depending on output mode - * and further output states, new XML elements (text, tspan, g, ...) are created. - * @param[in] c character to be added - * @param[in] x x coordinate - * @param[in] y y coordinate - * @param[in] font font to be used */ -void SVGTree::appendChar (int c, double x, double y, const Font &font) { - XMLElementNode *node=_span; - if (USE_FONTS) { - // changes of fonts and transformations require a new text element - if (!_text || _font.changed() || _matrix.changed()) { - newTextNode(x, y); - node = _text; - _color.changed(true); - } - if (_xchanged || _ychanged || (_color.changed() && _color.get() != Color::BLACK)) { - // if drawing position was explicitly changed, create a new tspan element - _span = new XMLElementNode("tspan"); - if (_xchanged) { - _span->addAttribute("x", x); - _xchanged = false; - } - if (_ychanged) { - _span->addAttribute("y", y); - _ychanged = false; - } - if (_color.get() != Color::BLACK) { - _span->addAttribute("fill", _color.get().rgbString()); - _color.changed(false); - } - _text->append(_span); - node = _span; - } - if (!node) { - if (!_text) - newTextNode(x, y); - node = _text; - } - node->append(XMLString(font.unicode(c), false)); - } - else { - if (_color.changed() || _matrix.changed()) { - bool set_color = (_color.changed() && _color.get() != Color::BLACK); - bool set_matrix = (_matrix.changed() && !_matrix.get().isIdentity()); - if (set_color || set_matrix) { - _span = new XMLElementNode("g"); - if (_color.get() != Color::BLACK) - _span->addAttribute("fill", _color.get().rgbString()); - if (!_matrix.get().isIdentity()) - _span->addAttribute("transform", _matrix.get().getSVG()); - _page->append(_span); - node = _span; - _color.changed(false); - _matrix.changed(false); - } - else if (_color.get() == Color::BLACK && _matrix.get().isIdentity()) - node = _span = 0; - } - - if (!node) - node = _page; - if (CREATE_USE_ELEMENTS) { - ostringstream oss; - oss << "#g" << FontManager::instance().fontID(_font) << c; - XMLElementNode *use = new XMLElementNode("use"); - use->addAttribute("x", XMLString(x)); - use->addAttribute("y", XMLString(y)); - use->addAttribute("xlink:href", oss.str()); - node->append(use); - } - else { - Glyph glyph; - const PhysicalFont *font = dynamic_cast(_font.get()); - if (font && font->getGlyph(c, glyph)) { - double sx = font->scaledSize()/font->unitsPerEm(); - double sy = -sx; - ostringstream oss; - glyph.writeSVG(oss, sx, sy, x, y); - XMLElementNode *glyph_node = new XMLElementNode("path"); - glyph_node->addAttribute("d", oss.str()); - node->append(glyph_node); - } - } - } -} - - -/** Creates a new text element. This is a helper function used by appendChar(). - * @param[in] x current x coordinate - * @param[in] y current y coordinate */ -void SVGTree::newTextNode (double x, double y) { - _text = new XMLElementNode("text"); - _span = 0; // no tspan in text element yet - if (USE_FONTS) { - const Font *font = _font.get(); - if (CREATE_STYLE || !font) - _text->addAttribute("class", string("f")+XMLString(_fontnum)); - else { - _text->addAttribute("font-family", font->name()); - _text->addAttribute("font-size", font->scaledSize()); - } - } - _text->addAttribute("x", x); - _text->addAttribute("y", y); - if (!_matrix.get().isIdentity()) - _text->addAttribute("transform", _matrix.get().getSVG()); - _page->append(_text); - _font.changed(false); - _matrix.changed(false); - _xchanged = false; - _ychanged = false; -} - - -void SVGTree::setFont (int num, const Font *font) { - _font.set(font); - _fontnum = num; -} - - -void SVGTree::transformPage (const Matrix &m) { - _page->addAttribute("transform", m.getSVG()); -} - - -/** Creates an SVG element for a single glyph. - * @param[in] c character number - * @param[in] font font to extract the glyph from - * @return pointer to element node if glyph exists, 0 otherwise */ -static XMLElementNode* createGlyphNode (int c, const PhysicalFont &font, GFGlyphTracer::Callback *cb) { - Glyph glyph; - if (!font.getGlyph(c, glyph, cb) || (!SVGTree::USE_FONTS && !SVGTree::CREATE_USE_ELEMENTS)) - return 0; - - double sx=1.0, sy=1.0; - double upem = font.unitsPerEm(); - XMLElementNode *glyph_node=0; - if (SVGTree::USE_FONTS) { - glyph_node = new XMLElementNode("glyph"); - glyph_node->addAttribute("unicode", XMLString(font.unicode(c), false)); - glyph_node->addAttribute("horiz-adv-x", XMLString(font.hAdvance(c))); - string name = font.glyphName(c); - if (!name.empty()) - glyph_node->addAttribute("glyph-name", name); - } - else { - ostringstream oss; - oss << 'g' << FontManager::instance().fontID(&font) << c; - glyph_node = new XMLElementNode("path"); - glyph_node->addAttribute("id", oss.str()); - sx = font.scaledSize()/upem; - sy = -sx; - } - ostringstream oss; - glyph.writeSVG(oss, sx, sy); - glyph_node->addAttribute("d", oss.str()); - return glyph_node; -} - - -void SVGTree::appendFontStyles (const set &fonts) { - if (CREATE_STYLE && USE_FONTS && !fonts.empty() && _defs) { - XMLElementNode *styleNode = new XMLElementNode("style"); - styleNode->addAttribute("type", "text/css"); - _root->insertAfter(styleNode, _defs); - typedef map SortMap; - SortMap sortmap; - FORALL(fonts, set::const_iterator, it) - if (!dynamic_cast(*it)) // skip virtual fonts - sortmap[FontManager::instance().fontID(*it)] = *it; - ostringstream style; - // add font style definitions in ascending order - FORALL(sortmap, SortMap::const_iterator, it) { - style << "text.f" << it->first << ' ' - << "{font-family:" << it->second->name() - << ";font-size:" << it->second->scaledSize() << "}\n"; - } - XMLCDataNode *cdata = new XMLCDataNode(style.str()); - styleNode->append(cdata); - } -} - - -/** Appends glyph definitions of a given font to the defs section of the SVG tree. - * @param[in] font font to be appended - * @param[in] chars codes of the characters whose glyph outlines should be appended */ -void SVGTree::append (const PhysicalFont &font, const set &chars, GFGlyphTracer::Callback *cb) { - if (chars.empty()) - return; - - if (USE_FONTS) { - XMLElementNode *fontNode = new XMLElementNode("font"); - string fontname = font.name(); - fontNode->addAttribute("id", fontname); - fontNode->addAttribute("horiz-adv-x", XMLString(font.hAdvance())); - appendToDefs(fontNode); - - XMLElementNode *faceNode = new XMLElementNode("font-face"); - faceNode->addAttribute("font-family", fontname); - faceNode->addAttribute("units-per-em", XMLString(font.unitsPerEm())); - if (font.type() != PhysicalFont::MF) { - faceNode->addAttribute("ascent", XMLString(font.ascent())); - faceNode->addAttribute("descent", XMLString(font.descent())); - } - fontNode->append(faceNode); - - // add required missing-glyph element - XMLElementNode *missing = new XMLElementNode("missing-glyph"); - missing->addAttribute("d", ""); - fontNode->append(missing); - FORALL(chars, set::const_iterator, i) - fontNode->append(createGlyphNode(*i, font, cb)); - } - else if (CREATE_USE_ELEMENTS && &font != font.uniqueFont()) { - // If the same character is used in various sizes we don't want to embed the complete (lengthy) path - // description multiple times because they would only differ by a scale factor. Thus it's better to - // reference the already embedded path together with a transformation attribute and let the SVG renderer - // scale the glyph properly. This is only necessary if we don't want to use font but path elements. - FORALL(chars, set::const_iterator, it) { - ostringstream oss; - XMLElementNode *use = new XMLElementNode("use"); - oss << 'g' << FontManager::instance().fontID(&font) << *it; - use->addAttribute("id", oss.str()); - oss.str(""); - oss << "#g" << FontManager::instance().fontID(font.uniqueFont()) << *it; - use->addAttribute("xlink:href", oss.str()); - double scale = font.scaledSize()/font.uniqueFont()->scaledSize(); - if (scale != 1.0) { - oss.str(""); - oss << "scale(" << scale << ')'; - use->addAttribute("transform", oss.str()); - } - appendToDefs(use); - } - } - else { - FORALL(chars, set::const_iterator, i) - appendToDefs(createGlyphNode(*i, font, cb)); - } -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SVGTree.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SVGTree.h deleted file mode 100644 index a9659f72b37..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SVGTree.h +++ /dev/null @@ -1,104 +0,0 @@ -/************************************************************************* -** SVGTree.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef SVGTREE_H -#define SVGTREE_H - -#include -#include -#include "Color.h" -#include "GFGlyphTracer.h" -#include "Matrix.h" -#include "XMLDocument.h" -#include "XMLNode.h" - -class BoundingBox; -class Color; -class Font; -class Matrix; -class PhysicalFont; - -class SVGTree -{ - template - class Property { - public: - Property (const T &v) : _value(v), _changed(false) {} - - void set (const T &v) { - if (v != _value) { - _value = v; - _changed = true; - } - } - - const T& get () const {return _value;} - operator const T& () {return _value;} - bool changed () const {return _changed;} - void changed (bool c) {_changed = c;} - - private: - T _value; - bool _changed; - }; - - public: - SVGTree (); - void reset (); - void write (std::ostream &os) const {_doc.write(os);} - void newPage (int pageno); - void appendToDefs (XMLNode *node); - void appendToPage (XMLNode *node) {_page->append(node);} - void prependToPage (XMLNode *node){_page->prepend(node);} - void appendToDoc (XMLNode *node) {_doc.append(node);} - void appendToRoot (XMLNode *node) {_root->append(node);} - void appendChar (int c, double x, double y, const Font &font); - void appendFontStyles (const std::set &fonts); - void append (const PhysicalFont &font, const std::set &chars, GFGlyphTracer::Callback *cb=0); - void setBBox (const BoundingBox &bbox); - void setFont (int id, const Font *font); - void setX (double x) {_xchanged = true;} - void setY (double y) {_ychanged = true;} - void setMatrix (const Matrix &m) {_matrix.set(m);} - void setColor (const Color &c) {_color.set(c);} - void transformPage (const Matrix &m); - const Color& getColor () const {return _color.get();} - const Matrix& getMatrix () const {return _matrix.get();} - XMLElementNode* rootNode () const {return _root;} - - public: - static bool USE_FONTS; ///< if true, create font references and don't draw paths directly - static bool CREATE_STYLE; ///< should and class attributes be used to reference fonts? - static bool CREATE_USE_ELEMENTS; ///< allow generation of elements? - - protected: - void newTextNode (double x, double y); - - private: - XMLDocument _doc; - XMLElementNode *_root, *_page, *_text, *_span, *_defs; - bool _xchanged, _ychanged; - Property _font; - Property _color; - Property _matrix; - int _fontnum; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SignalHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SignalHandler.cpp deleted file mode 100644 index 2f2b9817e81..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SignalHandler.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/************************************************************************* -** SignalHandler.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include "SignalHandler.h" - -using namespace std; - -bool SignalHandler::_break = false; - - -SignalHandler::~SignalHandler() { - stop(); -} - - -/** Returns the singleton handler object. */ -SignalHandler& SignalHandler::instance() { - static SignalHandler handler; - return handler; -} - - -/** Starts listening to CTRL-C signals. - * @return true if handler was activated. */ -bool SignalHandler::start () { - if (!_active) { - _break = false; - if (signal(SIGINT, SignalHandler::callback) != SIG_ERR) { - _active = true; - return true; - } - } - return false; -} - - -/** Stops listening for CTRL-C signals. */ -void SignalHandler::stop () { - if (_active) { - signal(SIGINT, SIG_DFL); - _active = false; - } -} - - -/** Checks for incoming signals and throws an exception if CTRL-C was caught. - * @throw SignalException */ -void SignalHandler::check() { - if (_break) - throw SignalException(); -} - - -void SignalHandler::trigger (bool notify) { - _break = true; - if (notify) - check(); -} - - -/** This function is called on CTRL-C signals. */ -void SignalHandler::callback (int) { - _break = true; -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SignalHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SignalHandler.h deleted file mode 100644 index 70d2abd8ee8..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SignalHandler.h +++ /dev/null @@ -1,50 +0,0 @@ -/************************************************************************* -** SignalHandler.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef SIGNALHANDLER_H -#define SIGNALHANDLER_H - -#include - -struct SignalException : public std::exception { -}; - - -class SignalHandler -{ - public: - ~SignalHandler (); - static SignalHandler& instance (); - bool start (); - void stop (); - void check (); - void trigger (bool notify); - bool active () const {return _active;} - - protected: - SignalHandler () : _active(false) {} - static void callback (int signal); - - private: - bool _active; ///< true if listening for signals - static bool _break; ///< true if signal has been caught -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialActions.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialActions.h deleted file mode 100644 index 936ca866809..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialActions.h +++ /dev/null @@ -1,80 +0,0 @@ -/************************************************************************* -** SpecialActions.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef SPECIALACTIONS_H -#define SPECIALACTIONS_H - -#include -#include "BoundingBox.h" -#include "Color.h" -#include "Matrix.h" - -class XMLNode; - -struct SpecialActions -{ - virtual ~SpecialActions () {} - virtual double getX() const =0; - virtual double getY() const =0; - virtual void setX(double x) =0; - virtual void setY(double y) =0; - virtual void finishLine () =0; - virtual void setColor (const Color &color) =0; - virtual Color getColor () const =0; - virtual void setMatrix (const Matrix &m) =0; - virtual const Matrix& getMatrix () const =0; - virtual void setBgColor (const Color &color) =0; - virtual void appendToPage (XMLNode *node) =0; - virtual void appendToDefs (XMLNode *node) =0; - virtual BoundingBox& bbox () =0; - virtual BoundingBox& bbox (const std::string &name, bool reset=false) =0; - virtual void embed (const BoundingBox &bbox) =0; - virtual void embed (const DPair &p, double r=0) =0; - virtual void progress (const char *id) {} -}; - - -class SpecialEmptyActions : public SpecialActions -{ - public: - double getX() const {return 0;} - double getY() const {return 0;} - void setX(double x) {} - void setY(double y) {} - void finishLine () {} - void setColor (const Color &color) {} - void setBgColor (const Color &color) {} - Color getColor () const {return 0;} - void setMatrix (const Matrix &m) {} - const Matrix& getMatrix () const {return _matrix;} - void appendToPage (XMLNode *node) {} - void appendToDefs (XMLNode *node) {} - BoundingBox& bbox () {return _bbox;} - BoundingBox& bbox (const std::string &name, bool reset=false) {return _bbox;} - void embed (const BoundingBox &bbox) {} - void embed (const DPair &p, double r=0) {} - - private: - BoundingBox _bbox; - Matrix _matrix; -}; - - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialHandler.h deleted file mode 100644 index 45c4905ddb5..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialHandler.h +++ /dev/null @@ -1,58 +0,0 @@ -/************************************************************************* -** SpecialHandler.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef SPECIALHANDLER_H -#define SPECIALHANDLER_H - -#include -#include -#include "MessageException.h" - - -class SpecialActions; -class SpecialManager; - - -struct SpecialException : public MessageException -{ - SpecialException (const std::string &msg) : MessageException(msg) {} -}; - - -class SpecialHandler -{ - friend class SpecialManager; - - public: - virtual ~SpecialHandler () {} - virtual const char** prefixes () const=0; - virtual const char* info () const=0; - virtual const char* name () const=0; - virtual bool process (const char *prefix, std::istream &is, SpecialActions *actions)=0; - virtual void dviMovedTo (double x, double y) {} - virtual void dviEndPage () {} - - protected: - virtual bool isEndPageListener () const {return false;} - virtual bool isPositionListener () const {return false;} -}; - - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialManager.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialManager.cpp deleted file mode 100644 index 7698726de7c..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialManager.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/************************************************************************* -** SpecialManager.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "SpecialActions.h" -#include "SpecialManager.h" -#include "macros.h" - -using namespace std; - - -SpecialManager::~SpecialManager () { - unregisterHandlers(); -} - - -void SpecialManager::unregisterHandlers () { - FORALL(_pool, vector::iterator, it) - delete *it; -} - - -/** Registers a single special handler. This method doesn't check if a - * handler of the same class is already registered. - * @param[in] pointer to handler to be registered */ -void SpecialManager::registerHandler (SpecialHandler *handler) { - if (handler) { - // get array of prefixes this handler is responsible for - _pool.push_back(handler); - for (const char **p=handler->prefixes(); *p; ++p) - _handlers[*p] = handler; - if (handler->isEndPageListener()) - _endPageListeners.push_back(handler); - if (handler->isPositionListener()) - _positionListeners.push_back(handler); - } -} - - -/** Registers a multiple special handlers. - * If ignorelist == 0, all given handlers are registered. To exclude selected sets of - * specials, the corresponding names can be given separated by non alpha-numeric characters, - * e.g. "color, ps, em" or "color: ps em" etc. - * @param[in] handlers pointer to zero-terminated array of handlers to be registered - * @param[in] ignorelist list of special names to be ignored */ -void SpecialManager::registerHandlers (SpecialHandler **handlers, const char *ignorelist) { - if (handlers) { - string ign = ignorelist ? ignorelist : ""; - FORALL(ign, string::iterator, it) - if (!isalnum(*it)) - *it = '%'; - ign = "%"+ign+"%"; - - for (; *handlers; handlers++) { - if (ign.find("%"+string((*handlers)->name())+"%") == string::npos) - registerHandler(*handlers); - else - delete *handlers; - } - } -} - - -/** Looks for an appropriate handler for a given special prefix. - * @param[in] prefix the special prefix, e.g. "color" or "em" - * @return in case of success: pointer to handler, 0 otherwise */ -SpecialHandler* SpecialManager::findHandler (const string &prefix) const { - ConstIterator it = _handlers.find(prefix); - if (it != _handlers.end()) - return it->second; - return 0; -} - - -/** Executes a special command. - * @param[in] special the special expression - * @param[in] actions actions the special handlers can perform - * @param[in] listener object that wants to be notified about the processing state - * @return true if a special handler was found - * @throw SpecialException in case of errors during special processing */ -bool SpecialManager::process (const string &special, SpecialActions *actions, Listener *listener) const { - istringstream iss(special); - string prefix; - int c; - while (isalnum(c=iss.get())) - prefix += c; - if (ispunct(c)) // also add seperation character to identifying prefix - prefix += c; - if (prefix == "ps:" && iss.peek() == ':') - prefix += iss.get(); - if (SpecialHandler *handler = findHandler(prefix)) { - if (listener) - listener->beginSpecial(prefix.c_str()); - bool ret = handler->process(prefix.c_str(), iss, actions); - if (listener) - listener->endSpecial(prefix.c_str()); - return ret; - } - return false; -} - - -void SpecialManager::notifyEndPage () const { - FORALL(_endPageListeners, HandlerPool::const_iterator, it) - (*it)->dviEndPage(); -} - - -void SpecialManager::notifyPositionChange (double x, double y) const { - FORALL(_positionListeners, HandlerPool::const_iterator, it) - (*it)->dviMovedTo(x, y); -} - - -void SpecialManager::writeHandlerInfo (ostream &os) const { - typedef map SortMap; - SortMap m; - FORALL(_handlers, ConstIterator, it) - m[it->second->name()] = it->second; - - FORALL(m, SortMap::iterator, it) { - os << setw(10) << left << it->second->name() << ' '; - if (it->second->info()) - os << it->second->info(); - os << endl; - } -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialManager.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialManager.h deleted file mode 100644 index 555af4380ec..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/SpecialManager.h +++ /dev/null @@ -1,71 +0,0 @@ -/************************************************************************* -** SpecialManager.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef SPECIALMANAGER_H -#define SPECIALMANAGER_H - -#include -#include -#include -#include -#include "SpecialHandler.h" - -class SpecialActions; - -class SpecialManager -{ - public: - struct Listener - { - virtual ~Listener () {} - virtual void beginSpecial (const char *prefix)=0; - virtual void endSpecial (const char *prefix)=0; - }; - - private: - typedef std::vector HandlerPool; - typedef std::map HandlerMap; - typedef HandlerMap::iterator Iterator; - typedef HandlerMap::const_iterator ConstIterator; - - public: - SpecialManager () {} - virtual ~SpecialManager (); - void registerHandler (SpecialHandler *handler); - void registerHandlers (SpecialHandler **handlers, const char *ignorelist); - void unregisterHandlers (); - bool process (const std::string &special, SpecialActions *actions, Listener *listener=0) const; - void notifyEndPage () const; - void notifyPositionChange (double x, double y) const; - void writeHandlerInfo (std::ostream &os) const; - - protected: - SpecialManager (const SpecialManager &) {} - void operator = (const SpecialManager &) {} - SpecialHandler* findHandler (const std::string &prefix) const; - - private: - HandlerPool _pool; ///< stores pointers to all handlers - HandlerMap _handlers; ///< pointers to handlers for corresponding prefixes - HandlerPool _endPageListeners; - HandlerPool _positionListeners; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamReader.cpp deleted file mode 100644 index 65c7149f780..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamReader.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/************************************************************************* -** StreamReader.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include "CRC32.h" -#include "StreamReader.h" -#include "macros.h" - -using namespace std; - -StreamReader::StreamReader (istream &s) - : is(&s) -{ -} - - -istream& StreamReader::replaceStream (istream &in) { - istream &ret = *is; - is = ∈ - return ret; -} - - -/** Reads an unsigned integer from assigned input stream. - * @param[in] bytes number of bytes to read (max. 4) - * @return read integer */ -UInt32 StreamReader::readUnsigned (int bytes) { - UInt32 ret = 0; - for (bytes--; bytes >= 0 && !is->eof(); bytes--) { - UInt32 b = is->get(); - ret |= b << (8*bytes); - } - return ret; -} - - -/** Reads an unsigned integer from assigned input stream and updates the CRC32 checksum. - * @param[in] bytes number of bytes to read (max. 4) - * @param[in,out] crc32 checksum to be updated - * @return read integer */ -UInt32 StreamReader::readUnsigned (int bytes, CRC32 &crc32) { - UInt32 ret = readUnsigned(bytes); - crc32.update(ret, bytes); - return ret; -} - - -/** Reads an signed integer from assigned input stream. - * @param[in] bytes number of bytes to read (max. 4) - * @return read integer */ -Int32 StreamReader::readSigned (int bytes) { - Int32 ret = is->get(); - if (ret & 128) // negative value? - ret |= 0xffffff00; - for (bytes-=2; bytes >= 0 && !is->eof(); bytes--) - ret = (ret << 8) | is->get(); - return ret; -} - - -/** Reads an signed integer from assigned input stream and updates the CRC32 checksum. - * @param[in] bytes number of bytes to read (max. 4) - * @param[in,out] crc32 checksum to be updated - * @return read integer */ -Int32 StreamReader::readSigned (int bytes, CRC32 &crc32) { - Int32 ret = readSigned(bytes); - crc32.update(ret, bytes); - return ret; -} - - -/** Reads a string terminated by a 0-byte. */ -string StreamReader::readString () { - if (!is) - throw StreamReaderException("no stream assigned"); - string ret; - while (!is->eof() && is->peek() > 0) - ret += is->get(); - is->get(); // skip 0-byte - return ret; -} - - -/** Reads a string terminated by a 0-byte and updates the CRC32 checksum. - * @param[in,out] crc32 checksum to be updated - * @param[in] finalZero consider final 0-byte in checksum - * @return the string read */ -string StreamReader::readString (CRC32 &crc32, bool finalZero) { - string ret = readString(); - crc32.update((const UInt8*)ret.c_str(), ret.length()); - if (finalZero) - crc32.update(0, 1); - return ret; -} - - -/** Reads a string of a given length. - * @param[in] length number of characters to read - * @return the string read */ -string StreamReader::readString (int length) { - if (!is) - throw StreamReaderException("no stream assigned"); - char *buf = new char[length+1]; - if (length > 0) - is->get(buf, length+1); // reads 'length' bytes (pos. length+1 is set to 0) - else - *buf = 0; - string ret = buf; - delete [] buf; - return ret; -} - - -/** Reads a string of a given length and updates the CRC32 checksum. - * @param[in] length number of characters to read - * @param[in,out] crc32 checksum to be updated - * @return the string read */ -string StreamReader::readString (int length, CRC32 &crc32) { - string ret = readString(length); - crc32.update(ret.c_str()); - return ret; -} - - -vector& StreamReader::readBytes (int n, vector &bytes) { - if (n > 0) - in().read((char*)&bytes[0], n); - return bytes; -} - - -vector& StreamReader::readBytes (int n, vector &bytes, CRC32 &crc32) { - readBytes(n, bytes); - crc32.update(&bytes[0], bytes.size()); - return bytes; -} - - -int StreamReader::readByte (CRC32 &crc32) { - int ret = readByte(); - if (ret >= 0) { - const UInt8 c = UInt8(ret & 0xff); - crc32.update(&c, 1); - } - return ret; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamReader.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamReader.h deleted file mode 100644 index 6fbd94e00de..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamReader.h +++ /dev/null @@ -1,64 +0,0 @@ -/************************************************************************* -** StreamReader.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef STREAMREADER_H -#define STREAMREADER_H - -#include -#include -#include -#include "MessageException.h" -#include "types.h" - -class CRC32; - -class StreamReader -{ - public: - StreamReader (std::istream &s); - virtual ~StreamReader () {} - std::istream& replaceStream (std::istream &s); - UInt32 readUnsigned (int n); - UInt32 readUnsigned (int n, CRC32 &crc32); - Int32 readSigned (int n); - Int32 readSigned (int n, CRC32 &crc32); - std::string readString (); - std::string readString (CRC32 &crc32, bool finalZero=false); - std::string readString (int length); - std::string readString (int length, CRC32 &crc32); - std::vector& readBytes (int n, std::vector &bytes); - std::vector& readBytes (int n, std::vector &bytes, CRC32 &crc32); - int readByte () {return is->get();} - int readByte (CRC32 &crc32); - - protected: - std::istream& in () {return *is;} - - private: - std::istream *is; -}; - - -struct StreamReaderException : public MessageException -{ - StreamReaderException (const std::string &msg) : MessageException(msg) {} -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamWriter.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamWriter.cpp deleted file mode 100644 index 2a1e7b4a34f..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamWriter.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/************************************************************************* -** StreamWriter.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include "CRC32.h" -#include "StreamWriter.h" - -using namespace std; - - -/** Writes an unsigned integer to the output stream. - * @param[in] val the value to write - * @param[in] n number of bytes to be considered */ -void StreamWriter::writeUnsigned (UInt32 val, int n) { - for (n--; n >= 0; n--) - _os.put((val >> (8*n)) & 0xff); -} - - -/** Writes a signed integer to the output stream. - * @param[in] val the value to write - * @param[in] n number of bytes to be considered */ -void StreamWriter::writeSigned (Int32 val, int n) { - writeUnsigned((UInt32)val, n); -} - - -/** Writes a signed integer to the output stream. - * @param[in] val the value to write - * @param[in] finalZero if true, a final 0-byte is appended */ -void StreamWriter::writeString (const string &str, bool finalZero) { - for (size_t i=0; i < str.length(); i++) - _os.put(str[i]); - if (finalZero) - _os.put(0); -} - - -/** Writes an unsigned integer to the output stream. - * @param[in] val the value to write - * @param[in] n number of bytes to be considered - * @param[in,out] crc32 checksum to be updated */ -void StreamWriter::writeUnsigned (UInt32 val, int n, CRC32 &crc32) { - writeUnsigned(val, n); - crc32.update(val, n); -} - - -/** Writes a signed integer to the output stream and updates the CRC32 checksum. - * @param[in] val the value to write - * @param[in] n number of bytes to be considered - * @param[in,out] crc32 checksum to be updated */ -void StreamWriter::writeSigned (Int32 val, int n, CRC32 &crc32) { - writeUnsigned((UInt32)val, n, crc32); -} - - -/** Writes a string to the output stream and updates the CRC32 checksum. - * @param[in] str the string to write - * @param[in,out] crc32 checksum to be updated - * @param[in] finalZero if true, a final 0-byte is appended */ -void StreamWriter::writeString (const std::string &str, CRC32 &crc32, bool finalZero) { - writeString(str, finalZero); - crc32.update((const UInt8*)str.c_str(), str.length() + (finalZero ? 1 : 0)); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamWriter.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamWriter.h deleted file mode 100644 index 440bd94a2a9..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/StreamWriter.h +++ /dev/null @@ -1,46 +0,0 @@ -/************************************************************************* -** StreamWriter.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef STREAMWRITER_H -#define STREAMWRITER_H - -#include -#include "types.h" - - -class CRC32; - -class StreamWriter -{ - public: - StreamWriter (std::ostream &os) : _os(os) {} - virtual ~StreamWriter () {} - void writeUnsigned (UInt32 val, int n); - void writeSigned (Int32 val, int n); - void writeString (const std::string &str, bool finalZero=false); - void writeUnsigned (UInt32 val, int n, CRC32 &crc32); - void writeSigned (Int32 val, int n, CRC32 &crc32); - void writeString (const std::string &str, CRC32 &crc32, bool finalZero=false); - - private: - std::ostream &_os; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/System.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/System.cpp deleted file mode 100644 index b57c0662462..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/System.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/************************************************************************* -** System.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include "System.h" - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#if defined (HAVE_SYS_TIME_H) -#include -#elif defined (HAVE_SYS_TIMEB_H) -#include -#endif - - -using namespace std; - - -/** Returns timestamp (wall time) in seconds. */ -double System::time () { -#if defined (HAVE_SYS_TIME_H) - struct timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_sec + tv.tv_usec/1000000.0; -#elif defined (HAVE_SYS_TIMEB_H) - struct timeb tb; - ftime(&tb); - return tb.time + tb.millitm/1000.0; -#else - clock_t myclock = clock(); - return double(myclock)/CLOCKS_PER_SEC; -#endif -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/System.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/System.h deleted file mode 100644 index 3485c27e6b5..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/System.h +++ /dev/null @@ -1,29 +0,0 @@ -/************************************************************************* -** System.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef SYSTEM_H -#define SYSTEM_H - -namespace System -{ - double time (); -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TFM.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TFM.cpp deleted file mode 100644 index d56185d0086..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TFM.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/************************************************************************* -** TFM.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include "FileFinder.h" -#include "Message.h" -#include "StreamReader.h" -#include "TFM.h" - -using namespace std; - - -/** Reads a sequence of n TFM words (4 Bytes each). - * @param[in] is reads from this stream - * @param[out] v the read words - * @param[in] n number of words to be read - * @return dynamically allocated array containing the read words - * (must be deleted by the caller) */ -template -static void read_words (StreamReader &sr, vector &v, unsigned n) { - v.clear(); - v.resize(n); - for (unsigned i=0; i < n; i++) - v[i] = sr.readUnsigned(4); -} - - -/** Converts a TFM fix point value to double. */ -static double fix2double (FixWord fix) { - return double(fix)/(1 << 20); -} - - -TFM::TFM () : _checksum(0), _firstChar(0), _lastChar(0), _designSize(0) -{ -} - - -TFM::TFM (istream &is) { - readFromStream(is); -} - - -TFM* TFM::createFromFile (const char *fontname) { - string filename = string(fontname) + ".tfm"; - const char *path = FileFinder::lookup(filename); - ifstream ifs(path, ios_base::binary); - if (ifs) - return new TFM(ifs); - return 0; -} - - -bool TFM::readFromStream (istream &is) { - StreamReader sr(is); - is.seekg(2, ios_base::beg); // skip file size - UInt16 lh = UInt16(sr.readUnsigned(2)); // length of header in 4 byte words - _firstChar= UInt16(sr.readUnsigned(2)); // smalles character code in font - _lastChar = UInt16(sr.readUnsigned(2)); // largest character code in font - UInt16 nw = UInt16(sr.readUnsigned(2)); // number of words in width table - UInt16 nh = UInt16(sr.readUnsigned(2)); // number of words in height table - UInt16 nd = UInt16(sr.readUnsigned(2)); // number of words in depth table - UInt16 ni = UInt16(sr.readUnsigned(2)); // number of words in italic corr. table -// UInt16 nl = UInt16(sr.readUnsigned(2)); // number of words in lig/kern table -// UInt16 nk = UInt16(sr.readUnsigned(2)); // number of words in kern table -// UInt16 ne = UInt16(sr.readUnsigned(2)); // number of words in ext. char table -// UInt16 np = UInt16(sr.readUnsigned(2)); // number of font parameter words - - is.seekg(8, ios_base::cur); // move to header (skip above commented bytes) - _checksum = sr.readUnsigned(4); - _designSize = sr.readUnsigned(4); - is.seekg(24+lh*4, ios_base::beg); // move to char info table - read_words(sr, _charInfoTable, _lastChar-_firstChar+1); - read_words(sr, _widthTable, nw); - read_words(sr, _heightTable, nh); - read_words(sr, _depthTable, nd); - read_words(sr, _italicTable, ni); - return true; -} - - -/** Returns the design size of this font in TeX point units. */ -double TFM::getDesignSize () const { - return fix2double(_designSize); -} - - -// the char info word for each character consists of 4 bytes holding the following information: -// width index w, height index (h), depth index (d), italic correction index (it), -// tag (tg) and a remainder: -// -// byte 1 | byte 2 | byte 3 | byte 4 -// xxxxxxxx | xxxx xxxx | xxxxxx xx | xxxxxxxx -// w | h d | it tg | remainder - -/** Returns the width of char c in TeX point units. */ -double TFM::getCharWidth (int c) const { - if (c < _firstChar || c > _lastChar || unsigned(c-_firstChar) >= _charInfoTable.size()) - return 0; - int index = (_charInfoTable[c-_firstChar] >> 24) & 0xFF; - return fix2double(_widthTable[index]) * fix2double(_designSize); -} - - -/** Returns the height of char c in TeX point units. */ -double TFM::getCharHeight (int c) const { - if (c < _firstChar || c > _lastChar || unsigned(c-_firstChar) >= _charInfoTable.size()) - return 0; - int index = (_charInfoTable[c-_firstChar] >> 20) & 0x0F; - return fix2double(_heightTable[index]) * fix2double(_designSize); -} - - -/** Returns the depth of char c in TeX point units. */ -double TFM::getCharDepth (int c) const { - if (c < _firstChar || c > _lastChar || unsigned(c-_firstChar) >= _charInfoTable.size()) - return 0; - int index = (_charInfoTable[c-_firstChar] >> 16) & 0x0F; - return fix2double(_depthTable[index]) * fix2double(_designSize); -} - - -/** Returns the italic correction of char c in TeX point units. */ -double TFM::getItalicCorr (int c) const { - if (c < _firstChar || c > _lastChar || unsigned(c-_firstChar) >= _charInfoTable.size()) - return 0; - int index = (_charInfoTable[c-_firstChar] >> 10) & 0x3F; - return fix2double(_italicTable[index]) * fix2double(_designSize); -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TFM.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TFM.h deleted file mode 100644 index 09accaea2c6..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TFM.h +++ /dev/null @@ -1,59 +0,0 @@ -/************************************************************************* -** TFM.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef TFM_H -#define TFM_H - -#include -#include -#include "types.h" - -class FileFinder; - -class TFM -{ - public: - TFM (); - TFM (std::istream &is); - static TFM* createFromFile (const char *fname); - double getDesignSize () const; - double getCharWidth (int c) const; - double getCharHeight (int c) const; - double getCharDepth (int c) const; - double getItalicCorr (int c) const; - UInt32 getChecksum () const {return _checksum;} - UInt16 firstChar () const {return _firstChar;} - UInt16 lastChar () const {return _lastChar;} - - protected: - bool readFromStream (std::istream &is); - - private: - UInt32 _checksum; - UInt16 _firstChar, _lastChar; - FixWord _designSize; ///< design size of the font in TeX points (7227 pt = 254 cm) - std::vector _charInfoTable; - std::vector _widthTable; ///< character widths in design size units - std::vector _heightTable; ///< character height in design size units - std::vector _depthTable; ///< character depth in design size units - std::vector _italicTable; ///< italic corrections in design size units -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Terminal.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Terminal.cpp deleted file mode 100644 index 0cbb4116796..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Terminal.cpp +++ /dev/null @@ -1,165 +0,0 @@ -/************************************************************************* -** Terminal.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include "Terminal.h" - -#ifdef HAVE_CONFIG_H -#include -#endif - -#ifdef HAVE_TERMIOS_H -#include -#endif - -#ifdef GWINSZ_IN_SYS_IOCTL -#include -#endif - -#ifdef __WIN32__ -#include -#endif - -#include - - -using namespace std; - - -#ifdef __WIN32__ -int Terminal::_defaultColor; -const int Terminal::RED = FOREGROUND_RED; -const int Terminal::GREEN = FOREGROUND_GREEN; -const int Terminal::BLUE = FOREGROUND_BLUE; -#else -const int Terminal::RED = 1; -const int Terminal::GREEN = 2; -const int Terminal::BLUE = 4; -#endif - -const int Terminal::CYAN = GREEN|BLUE; -const int Terminal::YELLOW = RED|GREEN; -const int Terminal::MAGENTA = RED|BLUE; -const int Terminal::WHITE = RED|GREEN|BLUE; -const int Terminal::DEFAULT = -1; -const int Terminal::BLACK = 0; - - - -void Terminal::init (ostream &os) { -#ifdef __WIN32__ - HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); - if (h != INVALID_HANDLE_VALUE) { - CONSOLE_SCREEN_BUFFER_INFO info; - GetConsoleScreenBufferInfo(h, &info); - _defaultColor = (info.wAttributes & 0xff); - } -#endif -} - - -void Terminal::finish (ostream &os) { - color(DEFAULT, false, os); -} - - -/** Returns the number of terminal columns (number of characters per row). - * If it's not possible to retrieve information about the terminal size, 0 is returned. */ -int Terminal::columns () { -#if defined(TIOCGWINSZ) - struct winsize ws; - if (ioctl(fileno(stderr), TIOCGWINSZ, &ws) < 0) - return 0; - return ws.ws_col; -#elif defined(__WIN32__) - CONSOLE_SCREEN_BUFFER_INFO info; - if (!GetConsoleScreenBufferInfo(GetStdHandle(STD_ERROR_HANDLE), &info)) - return 0; - return info.dwSize.X; -#else - return 0; -#endif -} - - -/** Returns the number of terminal rows. - * If it's not possible to retrieve information about the terminal size, 0 is returned. */ -int Terminal::rows () { -#if defined(TIOCGWINSZ) - struct winsize ws; - if (ioctl(fileno(stderr), TIOCGWINSZ, &ws) < 0) - return 0; - return ws.ws_row; -#elif defined(__WIN32__) - CONSOLE_SCREEN_BUFFER_INFO info; - if (!GetConsoleScreenBufferInfo(GetStdHandle(STD_ERROR_HANDLE), &info)) - return 0; - return info.dwSize.Y; -#else - return 0; -#endif -} - - -void Terminal::color (int color, bool light, ostream &os) { -#ifdef __WIN32__ - HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); - if (h != INVALID_HANDLE_VALUE) { - if (color == DEFAULT) - color = _defaultColor; - else { - CONSOLE_SCREEN_BUFFER_INFO info; - GetConsoleScreenBufferInfo(h, &info); - color = (info.wAttributes & 0xf0) | (color & 0x07); - if (light) - color |= FOREGROUND_INTENSITY; - } - SetConsoleTextAttribute(h, (DWORD)color); - } -#else - if (color == DEFAULT) - os << "\x1B[0m"; - else - os << "\x1B[" << (light ? '1': '0') << ';' << (30+(color & 0x07)) << 'm'; -#endif -} - - -void Terminal::bgcolor (int color, bool light, ostream &os) { -#ifdef __WIN32__ - HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); - if (h != INVALID_HANDLE_VALUE) { - if (color == DEFAULT) - color = _defaultColor; - else { - CONSOLE_SCREEN_BUFFER_INFO info; - GetConsoleScreenBufferInfo(h, &info); - color = (info.wAttributes & 0x0f) | ((color & 0x07) << 4); - if (light) - color |= BACKGROUND_INTENSITY; - } - SetConsoleTextAttribute(h, (DWORD)color); - } -#else - if (color == DEFAULT) - os << "\x1B[0m"; - else - os << "\x1B[" << (40+(color & 0x07)) << 'm'; -#endif -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Terminal.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Terminal.h deleted file mode 100644 index 33f71312ffe..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/Terminal.h +++ /dev/null @@ -1,53 +0,0 @@ -/************************************************************************* -** Terminal.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef TERMINAL_H -#define TERMINAL_H - -#include - -class Terminal -{ - public: - static const int DEFAULT; - static const int BLACK; - static const int RED; - static const int GREEN; - static const int BLUE; - static const int CYAN; - static const int YELLOW; - static const int MAGENTA; - static const int WHITE; - - public: - static void init (std::ostream &os); - static void finish (std::ostream &os); - static int columns (); - static int rows (); - static void color (int color, bool light, std::ostream &os); - static void bgcolor (int color, bool light, std::ostream &os); - -#ifdef __WIN32__ - private: - static int _defaultColor; -#endif -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TpicSpecialHandler.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TpicSpecialHandler.cpp deleted file mode 100644 index fcd33a5bcf5..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TpicSpecialHandler.cpp +++ /dev/null @@ -1,315 +0,0 @@ -/************************************************************************* -** TpicSpecialHandler.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include "Color.h" -#include "InputBuffer.h" -#include "InputReader.h" -#include "SpecialActions.h" -#include "TpicSpecialHandler.h" -#include "XMLNode.h" -#include "XMLString.h" -#include "types.h" - -using namespace std; - - -TpicSpecialHandler::TpicSpecialHandler () { - reset(); -} - - -void TpicSpecialHandler::dviEndPage () { - reset(); -} - - -void TpicSpecialHandler::reset () { - _points.clear(); - _penwidth = 1.0; - _fill = -1.0; // no fill -} - - -/** Creates SVG elements that draw lines through the recorded points. - * @param[in] stroke if true, the (out)line is drawn (in black) - * @param[in] fill if true, enclosed area is filled with current color - * @param[in] ddist dash/dot distance of line in TeX point units - * (0:solid line, >0:dashed line, <0:dotted line) */ -void TpicSpecialHandler::drawLines (bool stroke, bool fill, double ddist, SpecialActions *actions) { - if (actions && _points.size() > 0) { - XMLElementNode *elem=0; - if (_points.size() == 1) { - const DPair &p = _points.back(); - elem = new XMLElementNode("circle"); - elem->addAttribute("cx", p.x()+actions->getX()); - elem->addAttribute("cy", p.y()+actions->getY()); - elem->addAttribute("r", _penwidth/2.0); - actions->embed(p, _penwidth/2.0); - } - else { - if (_points.size() == 2 || (!fill && _points.front() != _points.back())) { - elem = new XMLElementNode("polyline"); - elem->addAttribute("fill", "none"); - elem->addAttribute("stroke-linecap", "round"); - } - else { - if (_points.front() == _points.back()) - _points.pop_back(); - if (_fill < 0) - _fill = 1; - Color color = actions->getColor(); - color *= _fill; - elem = new XMLElementNode("polygon"); - elem->addAttribute("fill", fill ? color.rgbString() : "none"); - } - ostringstream oss; - FORALL(_points, vector::iterator, it) { - if (it != _points.begin()) - oss << ' '; - double x = it->x()+actions->getX(); - double y = it->y()+actions->getY(); - oss << x << ',' << y; - actions->embed(DPair(x, y)); - } - elem->addAttribute("points", oss.str()); - if (stroke) { // draw outline? - elem->addAttribute("stroke", "black"); - elem->addAttribute("stroke-width", XMLString(_penwidth)); - } - } - if (ddist > 0) - elem->addAttribute("stroke-dasharray", XMLString(ddist)); - else if (ddist < 0) { - ostringstream oss; - oss << _penwidth << ' ' << -ddist; - elem->addAttribute("stroke-dasharray", oss.str()); - } - actions->appendToPage(elem); - } - reset(); -} - - -void TpicSpecialHandler::drawSplines (double ddist, SpecialActions *actions) { - if (actions && _points.size() > 0) { - const size_t size = _points.size(); - if (size < 3) - drawLines(true, false, ddist, actions); - else { - double x = actions->getX(); - double y = actions->getY(); - DPair p(x,y); - ostringstream oss; - oss << 'M' << x+_points[0].x() << ',' << y+_points[0].y(); - DPair mid = p+_points[0]+(_points[1]-_points[0])/2.0; - oss << 'L' << mid.x() << ',' << mid.y(); - actions->embed(p+_points[0]); - for (size_t i=1; i < size-1; i++) { - const DPair p0 = p+_points[i-1]; - const DPair p1 = p+_points[i]; - const DPair p2 = p+_points[i+1]; - mid = p1+(p2-p1)/2.0; - oss << 'Q' << p1.x() << ',' << p1.y() - << ' ' << mid.x() << ',' << mid.y(); - actions->embed(mid); - actions->embed((p0+p1*6.0+p2)/8.0, _penwidth); - } - if (_points[0] == _points[size-1]) // closed path? - oss << 'Z'; - else { - oss << 'L' << x+_points[size-1].x() << ',' << y+_points[size-1].y(); - actions->embed(p+_points[size-1]); - } - - Color color = actions->getColor(); - color *= _fill; - XMLElementNode *path = new XMLElementNode("path"); - if (_fill >= 0) { - if (_points[0] != _points[size-1]) - oss << 'Z'; - path->addAttribute("fill", color.rgbString()); - } - else - path->addAttribute("fill", "none"); - - path->addAttribute("d", oss.str()); - path->addAttribute("stroke", actions->getColor().rgbString()); - path->addAttribute("stroke-width", XMLString(_penwidth)); - if (ddist > 0) - path->addAttribute("stroke-dasharray", XMLString(ddist)); - else if (ddist < 0) { - ostringstream oss; - oss << _penwidth << ' ' << -ddist; - path->addAttribute("stroke-dasharray", oss.str()); - } - actions->appendToPage(path); - } - } - reset(); -} - - -void TpicSpecialHandler::drawArc (double cx, double cy, double rx, double ry, double angle1, double angle2, SpecialActions *actions) { - if (actions) { - const double PI2 = 4*asin(1.0); - angle1 *= -1; - angle2 *= -1; - if (fabs(angle1) > PI2) { - int n = (int) (angle1/PI2); - angle1 = angle1 - n*PI2; - angle2 = angle2 - n*PI2; - } - - double x = cx + actions->getX(); - double y = cy + actions->getY(); - XMLElementNode *elem=0; - if (fabs(angle1-angle2) >= PI2) { // closed ellipse? - elem = new XMLElementNode("ellipse"); - elem->addAttribute("cx", XMLString(x)); - elem->addAttribute("cy", XMLString(y)); - elem->addAttribute("rx", XMLString(rx)); - elem->addAttribute("ry", XMLString(ry)); - } - else { - if (angle1 < 0) - angle1 = PI2+angle1; - if (angle2 < 0) - angle2 = PI2+angle2; - elem = new XMLElementNode("path"); - int large_arg = fabs(angle1-angle2) > PI2/2 ? 0 : 1; - int sweep = angle1 > angle2 ? 0 : 1; - if (angle1 > angle2) { - large_arg = 1-large_arg; - sweep = 1-sweep; - } - ostringstream oss; - oss << 'M' << x+rx*cos(angle1) << ',' << y+ry*sin(-angle1) - << 'A' << rx << ',' << ry - << " 0 " - << large_arg << ' ' << sweep << ' ' - << x+rx*cos(angle2) << ',' << y-ry*sin(angle2); - if (_fill >= 0) - oss << 'Z'; - elem->addAttribute("d", oss.str()); - } - elem->addAttribute("stroke-width", _penwidth); - elem->addAttribute("stroke", actions->getColor().rgbString()); - elem->addAttribute("stroke-linecap", "round"); - elem->addAttribute("fill", "none"); - if (_fill >= 0) { - Color color=actions->getColor(); - color *= _fill; - elem->addAttribute("fill", color.rgbString()); - } - else - elem->addAttribute("fill", "none"); - actions->appendToPage(elem); - actions->embed(BoundingBox(cx-rx, cy-ry, cx+rx, cy+ry)); - } - reset(); -} - - -#define cmd_id(c1,c2) ((c1 << 8) | c2) - -bool TpicSpecialHandler::process (const char *prefix, istream &is, SpecialActions *actions) { - if (!prefix || strlen(prefix) != 2) - return false; - - const double PT=0.07227; // factor for milli-inch to TeX points - StreamInputBuffer ib(is); - BufferInputReader in(ib); - switch (cmd_id(prefix[0], prefix[1])) { - case cmd_id('p','n'): // set pen width in milli-inches - _penwidth = in.getDouble()*PT; - break; - case cmd_id('b','k'): // set fill color to black - _fill = 0; - break; - case cmd_id('w','h'): // set fill color to white - _fill = 1; - break; - case cmd_id('s','h'): // set fill color to given gray level - in.skipSpace(); - _fill = in.eof() ? 0.5 : max(0.0, min(1.0, in.getDouble())); - break; - case cmd_id('t','x'): // set fill pattern - break; - case cmd_id('p','a'): { // add point to path - double x=in.getDouble()*PT; - double y=in.getDouble()*PT; - _points.push_back(DPair(x,y)); - break; - } - case cmd_id('f','p'): // draw solid lines through recorded points; close and fill path if fill color was defined - drawLines(true, _fill >= 0, 0, actions); - break; - case cmd_id('i','p'): // don't draw outlines but close the recorded path and fill the resulting polygon - drawLines(false, true, 0, actions); - break; - case cmd_id('d','a'): // as fp but draw dashed lines - drawLines(true, _fill >= 0, in.getDouble()*72.27, actions); - break; - case cmd_id('d','t'): // as fp but draw dotted lines - drawLines(true, _fill >= 0, -in.getDouble()*72.27, actions); - break; - case cmd_id('s','p'): { // draw quadratic splines through recorded points - double ddist = in.getDouble(); - drawSplines(ddist, actions); - break; - } - case cmd_id('a','r'): { // draw elliptical arc - double cx = in.getDouble()*PT; - double cy = in.getDouble()*PT; - double rx = in.getDouble()*PT; - double ry = in.getDouble()*PT; - double a1 = in.getDouble(); - double a2 = in.getDouble(); - drawArc(cx, cy, rx, ry, a1, a2, actions); - break; - } - case cmd_id('i','a'): { // fill elliptical arc - double cx = in.getDouble()*PT; - double cy = in.getDouble()*PT; - double rx = in.getDouble()*PT; - double ry = in.getDouble()*PT; - double a1 = in.getDouble(); - double a2 = in.getDouble(); - if (_fill < 0) - _fill = 1; - drawArc(cx, cy, rx, ry, a1, a2, actions); - if (_fill < 0) - _fill = -1; - break; - } - default: - return false; - } - return true; -} - - -const char** TpicSpecialHandler::prefixes () const { - static const char *pfx[] = {"ar", "bk", "da", "dt", "fp", "ia", "ip", "pa", "pn", "sh", "sp", "tx", "wh", 0}; - return pfx; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TpicSpecialHandler.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TpicSpecialHandler.h deleted file mode 100644 index 30bae57358a..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/TpicSpecialHandler.h +++ /dev/null @@ -1,51 +0,0 @@ -/************************************************************************* -** TpicSpecialHandler.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef TPICSPECIALHANDLER_H -#define TPICSPECIALHANDLER_H - -#include -#include "Pair.h" -#include "SpecialHandler.h" - -class TpicSpecialHandler : public SpecialHandler -{ - public: - TpicSpecialHandler (); - const char* info () const {return "TPIC specials";} - const char* name () const {return "tpic";} - const char** prefixes () const; - bool process (const char *prefix, std::istream &is, SpecialActions *actions); - void dviEndPage (); - - protected: - bool isEndPageListener () const {return true;} - void reset (); - void drawLines (bool stroke, bool fill, double ddist, SpecialActions *actions); - void drawSplines (double ddist, SpecialActions *actions); - void drawArc (double cx, double cy, double rx, double ry, double angle1, double angle2, SpecialActions *actions); - - private: - double _penwidth; ///< pen width in TeX point units - double _fill; ///< fill intensity [0,1]; if < 0, we don't fill anything - std::vector _points; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VFActions.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VFActions.h deleted file mode 100644 index 898fd8850c1..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VFActions.h +++ /dev/null @@ -1,38 +0,0 @@ -/************************************************************************* -** VFActions.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef VFACTIONS_H -#define VFACTIONS_H - -#include -#include -#include "types.h" - - -struct VFActions -{ - virtual ~VFActions () {} - virtual void preamble (std::string comment, UInt32 checksum, double dsize) {} - virtual void postamble () {} - virtual void defineVFFont (UInt32 fontnum, std::string path, std::string name, UInt32 checksum, double dsize, double ssize) {} - virtual void defineVFChar (UInt32 c, std::vector *dvi) {} -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VFReader.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VFReader.cpp deleted file mode 100644 index 57660c99825..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VFReader.cpp +++ /dev/null @@ -1,190 +0,0 @@ -/************************************************************************* -** VFReader.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include "Font.h" -#include "VFActions.h" -#include "VFReader.h" -#include "macros.h" - -using namespace std; - - -/** Converts a TFM fix point value to double. */ -inline static double fix2double (FixWord fix) { - return double(fix)/(1 << 20); -} - - -VFReader::VFReader (istream &is) - : StreamReader(is), actions(0) { -} - - -VFReader::~VFReader () { -} - - -VFActions* VFReader::replaceActions (VFActions *a) { - VFActions *ret = actions; - actions = a; - return ret; -} - - -/** Reads a single VF command from the current position of the input stream and calls the - * corresponding cmdFOO method. The execution can be influenced by a function of type ApproveOpcode. - * It takes an opcode and returns true if the command is supposed to be executed. - * @param[in] approve function to approve invocation of the action assigned to command - * @return opcode of the executed command */ -int VFReader::executeCommand (ApproveAction approve) { - int opcode = in().get(); - if (!in() || opcode < 0) // at end of file - throw VFException("invalid file"); - - bool approved = !approve || approve(opcode); - VFActions *act = actions; - if (!approved) - replaceActions(0); // disable actions - - if (opcode <= 241) // short character definition? - cmdShortChar(opcode); - else if (opcode >= 243 && opcode <= 246) // font definition? - cmdFontDef(opcode-243+1); - else { - switch (opcode) { - case 242: cmdLongChar(); break; // long character definition - case 247: cmdPre(); break; // preamble - case 248: cmdPost(); break; // postamble - default : { // invalid opcode - replaceActions(act); // reenable actions - ostringstream oss; - oss << "undefined VF command (opcode " << opcode << ')'; - throw VFException(oss.str()); - } - } - } - replaceActions(act); // reenable actions - return opcode; -} - - -bool VFReader::executeAll () { - in().clear(); // reset all status bits - if (!in()) - return false; - in().seekg(0); // move file pointer to first byte of the input stream - while (!in().eof() && executeCommand() != 248); // stop reading after post (248) - return true; -} - - -/// Returns true if op indicates the preamble or a font definition -static bool is_pre_or_fontdef (int op) {return op > 242;} -static bool is_chardef (int op) {return op < 243;} - - -bool VFReader::executePreambleAndFontDefs () { - in().clear(); - if (!in()) - return false; - in().seekg(0); // move file pointer to first byte of the input stream - while (!in().eof() && executeCommand(is_pre_or_fontdef) > 242); // stop reading after last font definition - return true; -} - - -bool VFReader::executeCharDefs () { - in().clear(); - if (!in()) - return false; - in().seekg(0); - while (!in().eof() && executeCommand(is_chardef) < 243); // stop reading after last char definition - return true; -} - -////////////////////////////////////////////////////////////////////////////// - -/** Reads and executes DVI preamble command. */ -void VFReader::cmdPre () { - UInt32 i = readUnsigned(1); // identification number (should be 2) - UInt32 k = readUnsigned(1); // length of following comment - string cmt = readString(k); // comment - UInt32 cs = readUnsigned(4); // check sum to be compared with TFM cecksum - UInt32 ds = readUnsigned(4); // design size (same as TFM design size) (fix_word) - designSize = fix2double(ds); - if (i != 202) - throw VFException("invalid identification value in preamble"); - if (actions) - actions->preamble(cmt, cs, ds); -} - - -void VFReader::cmdPost () { - while ((readUnsigned(1)) == 248); // skip fill bytes - if (actions) - actions->postamble(); -} - - -void VFReader::cmdLongChar () { - UInt32 pl = readUnsigned(4); // packet length (length of DVI subroutine) - if (actions) { - UInt32 cc = readUnsigned(4); // character code - readUnsigned(4); // character width from corresponding TFM file - vector *dvi = new vector(pl); // DVI subroutine - readBytes(pl, *dvi); - actions->defineVFChar(cc, dvi); // call template method for user actions - } - else - in().seekg(8+pl, ios::cur); // skip remaining char definition bytes -} - - -/** Reads and executes short_char_x command. - * @param[in] pl packet length (length of DVI subroutine) */ -void VFReader::cmdShortChar (int pl) { - if (actions) { - UInt32 cc = readUnsigned(1); // character code - readUnsigned(3); // character width from corresponding TFM file - vector *dvi = new vector(pl); // DVI subroutine - readBytes(pl, *dvi); - actions->defineVFChar(cc, dvi); // call template method for user actions - } - else - in().seekg(4+pl, ios::cur); // skip char definition bytes -} - - -void VFReader::cmdFontDef (int len) { - UInt32 fontnum = readUnsigned(len); // font number - UInt32 checksum = readUnsigned(4); // font checksum (to be compared with corresponding TFM checksum) - UInt32 ssize = readUnsigned(4); // scaled size of font relative to design size (fix_word) - UInt32 dsize = readUnsigned(4); // design size of font (same as TFM design size) (fix_word) - UInt32 pathlen = readUnsigned(1); // length of font path - UInt32 namelen = readUnsigned(1); // length of font name - string fontpath = readString(pathlen); - string fontname = readString(namelen); - if (actions) { - double ss = fix2double(ssize); - double ds = fix2double(dsize); - actions->defineVFFont(fontnum, fontpath, fontname, checksum, ds, ss*designSize); - } -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VFReader.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VFReader.h deleted file mode 100644 index 22e51f30a0e..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VFReader.h +++ /dev/null @@ -1,65 +0,0 @@ -/************************************************************************* -** VFReader.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef VFREADER_H -#define VFREADER_H - -#include "MessageException.h" -#include "StreamReader.h" -#include "types.h" - - -struct VFException : public MessageException -{ - VFException (const std::string &msg) : MessageException(msg) {} -}; - - -class VFActions; - - -class VFReader : public StreamReader -{ - typedef bool (*ApproveAction)(int); - public: - VFReader (std::istream &is); - virtual ~VFReader (); - VFActions* replaceActions (VFActions *a); - bool executeAll (); - bool executePreambleAndFontDefs (); - bool executeCharDefs (); - - protected: - int executeCommand (ApproveAction approve=0); - - // the following methods represent the VF commands - // they are called by executeCommand and should not be used directly - void cmdPre (); - void cmdPost (); - void cmdShortChar (int pl); - void cmdLongChar (); - void cmdFontDef (int len); - - private: - VFActions *actions; ///< actions to execute when reading a VF command - double designSize; ///< design size of currently read VF -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VectorStream.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VectorStream.h deleted file mode 100644 index 228089db9b2..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/VectorStream.h +++ /dev/null @@ -1,46 +0,0 @@ -/************************************************************************* -** VectorStream.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef VECTORSTREAM_H -#define VECTORSTREAM_H - -#include -#include - - -template -struct VectorStreamBuffer : public std::streambuf -{ - VectorStreamBuffer (std::vector &source) { - setg((char*)&source[0], (char*)&source[0], (char*)&source[0]+source.size()); - } -}; - - -template -class VectorInputStream : public std::istream -{ - public: - VectorInputStream (std::vector &source) : std::istream(&buf), buf(source) {} - private: - VectorStreamBuffer buf; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLDocTypeNode.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLDocTypeNode.h deleted file mode 100644 index 490d398b6b7..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLDocTypeNode.h +++ /dev/null @@ -1,41 +0,0 @@ -/************************************************************************* -** XMLDocTypeNode.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef XMLDOCTYPENODE_H -#define XMLDOCTYPENODE_H - -#include "XMLNode.h" - -class XMLDocTypeNode : public XMLDeclarationNode -{ - public: - XMLDocTypeNode (const std::string &rootName, const std::string &type, const std::string ¶m) - : XMLDeclarationNode("DOCTYPE", rootName + " " + type + " " + param) {} -}; - - -class XMLEntityNode : public XMLDeclarationNode -{ - public: - XMLEntityNode (const std::string &n, const std::string &v) - : XMLDeclarationNode("ENTITY", n + " " + v) {} -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLDocument.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLDocument.cpp deleted file mode 100644 index 39973266a7c..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLDocument.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/************************************************************************* -** XMLDocument.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include "macros.h" -#include "XMLDocument.h" - -using namespace std; - -XMLDocument::XMLDocument (XMLElementNode *root) - : rootElement(root), emitted(false) -{ -} - - -XMLDocument::~XMLDocument () { - clear(); -} - - -void XMLDocument::clear () { - delete rootElement; - rootElement = 0; - FORALL(nodes, list::iterator, i) - delete *i; - nodes.clear(); -} - - -void XMLDocument::append (XMLNode *node) { - if (!node) - return; - XMLElementNode *newRoot = dynamic_cast(node); - if (newRoot) { // there can only be one root element node in the document - delete rootElement; // so if there is already one... - rootElement = newRoot; // ...we replace it - } - else - nodes.push_back(node); -} - - -void XMLDocument::setRootNode (XMLElementNode *root) { - delete rootElement; - rootElement = root; -} - - -ostream& XMLDocument::write (ostream &os) const { - if (rootElement) { // no root element => no output - os << "\n"; - FORALL(nodes, list::const_iterator, i) - (*i)->write(os); - rootElement->write(os); - } - return os; -} - -/** Writes a part of the XML document to the given output stream and removes - * the completely written nodes. The output stops when a stop node is reached - * (this node won't be printed at all). If a node was only partly emitted, i.e. - * its child was the stop node, a further call of emit will continue the output. - * @param[in] os stream to which the output is written - * @param[in] stopElement node where emitting stops (if 0 the whole tree will be emitted) - * @return true if node was completely emitted */ -bool XMLDocument::emit (ostream& os, XMLNode *stopNode) { - if (rootElement) { // no root element => no output - if (!emitted) { - os << "\n"; - emitted = true; - } - FORALL(nodes, list::iterator, i) { - if ((*i)->emit(os, stopNode)) { - list::iterator it = i++; // prevent i from being invalidated... - nodes.erase(it); // ... by erase - --i; // @@ what happens if i points to first child? - } - else - return false; - } - return rootElement->emit(os, stopNode); - } - return true; -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLDocument.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLDocument.h deleted file mode 100644 index 8adab2fb0dd..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLDocument.h +++ /dev/null @@ -1,44 +0,0 @@ -/************************************************************************* -** XMLDocument.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef XMLDOCUMENT_H -#define XMLDOCUMENT_H - -#include "XMLNode.h" - -class XMLDocument -{ - public: - XMLDocument (XMLElementNode *root=0); - ~XMLDocument (); - void clear (); - void append (XMLNode *node); - void setRootNode (XMLElementNode *root); - const XMLElementNode* getRootElement () const {return rootElement;} - std::ostream& write (std::ostream &os) const; - bool emit (std::ostream& os, XMLNode *stopNode); - - private: - std::list nodes; - XMLElementNode *rootElement; - bool emitted; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLNode.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLNode.cpp deleted file mode 100644 index 3e5aa93ca62..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLNode.cpp +++ /dev/null @@ -1,293 +0,0 @@ -/************************************************************************* -** XMLNode.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include "macros.h" -#include "XMLNode.h" -#include "XMLString.h" - -using namespace std; - -bool XMLNode::emit (ostream &os, XMLNode *stopNode) { - if (this == stopNode) - return false; - write(os); - return true; -} - - -XMLElementNode::XMLElementNode (const string &n) : _name(n), _emitted(false) { -} - - -XMLElementNode::~XMLElementNode () { - FORALL(_children, ChildList::iterator, i) - delete *i; -} - - -void XMLElementNode::addAttribute (const string &name, const string &value) { - _attributes[name] = value; -} - - -void XMLElementNode::addAttribute (const string &name, double value) { - _attributes[name] = XMLString(value); -} - - -void XMLElementNode::append (XMLNode *child) { - if (!child) - return; - XMLTextNode *textNode1 = dynamic_cast(child); - if (!textNode1 || _children.empty()) - _children.push_back(child); - else { - if (XMLTextNode *textNode2 = dynamic_cast(_children.back())) - textNode2->append(textNode1); // merge two consecutive text nodes - else - _children.push_back(child); - } -} - - -void XMLElementNode::append (const string &str) { - if (_children.empty() || !dynamic_cast(_children.back())) - _children.push_back(new XMLTextNode(str)); - else - static_cast(_children.back())->append(str); -} - - -void XMLElementNode::prepend (XMLNode *child) { - if (!child) - return; - XMLTextNode *textNode1 = dynamic_cast(child); - if (!textNode1 || _children.empty()) - _children.push_front(child); - else { - if (XMLTextNode *textNode2 = dynamic_cast(_children.back())) - textNode2->prepend(textNode1); // merge two consecutive text nodes - else - _children.push_front(child); - } -} - - -/** Inserts a new child node before a given child node already present. The latter - * will be the following sibling of the node to be inserted. If there's no such - * node present, nothing is inserted. - * @param[in] child node to be inserted - * @param[in] sibling following sibling of 'child' - * @return true on success */ -bool XMLElementNode::insertBefore (XMLNode *child, XMLNode *sibling) { - ChildList::iterator it = _children.begin(); - while (it != _children.end() && *it != sibling) - ++it; - if (it != _children.end()) { - _children.insert(it, child); - return true; - } - return false; -} - - -/** Inserts a new child node after a given child node already present. The latter - * will be the preceding sibling of the node to be inserted. If there's no such - * node present, nothing is inserted. - * @param[in] child node to be inserted - * @param[in] sibling preceding sibling of 'child' - * @return true on success */ -bool XMLElementNode::insertAfter (XMLNode *child, XMLNode *sibling) { - ChildList::iterator it = _children.begin(); - while (it != _children.end() && *it != sibling) - ++it; - if (it != _children.end()) { - _children.insert(++it, child); - return true; - } - return false; -} - - -ostream& XMLElementNode::write (ostream &os) const { - os << '<' << _name; - FORALL(_attributes, AttribMap::const_iterator, i) - os << ' ' << i->first << "='" << i->second << '\''; - if (_children.empty()) - os << "/>\n"; - else { - os << '>'; - if (dynamic_cast(_children.front())) - os << '\n'; - FORALL(_children, ChildList::const_iterator, i) - (*i)->write(os); - os << "\n"; - } - return os; -} - - -/** Writes a part of the XML tree to the given output stream and removes - * the completely written nodes. The output stops when a stop node is reached - * (this node won't be printed at all). If a node was only partly emitted, i.e. - * its child was the stop node, a further call of emit will continue the output. - * @param[in] os stream to which the output is sent to - * @param[in] stopElement node where emitting stops (if 0 the whole tree will be emitted) - * @return true if node was emitted completely */ -bool XMLElementNode::emit (ostream &os, XMLNode *stopNode) { - if (this == stopNode) - return false; - - if (!_emitted) { - os << '<' << _name; - FORALL(_attributes, AttribMap::iterator, i) - os << ' ' << i->first << "='" << i->second << '\''; - if (_children.empty()) - os << "/>\n"; - else { - os << '>'; - if (dynamic_cast(_children.front())) - os << '\n'; - } - - _emitted = true; - } - if (!_children.empty()) { - FORALL(_children, ChildList::iterator, i) { - if ((*i)->emit(os, stopNode)) { - ChildList::iterator it = i++; // prevent i from being invalidated... - _children.erase(it); // ... by erase - --i; // @@ what happens if i points to first child? - } - else - return false; - } - os << "\n"; - } - return true; -} - - -/** Returns true if this element has an attribute of given name. */ -bool XMLElementNode::hasAttribute (const string &name) const { - return _attributes.find(name) != _attributes.end(); -} - - -////////////////////// - -void XMLTextNode::append (XMLNode *node) { - if (XMLTextNode *tn = dynamic_cast(node)) - append(tn); - else - delete node; -} - - -void XMLTextNode::append (XMLTextNode *node) { - if (node) - _text += node->_text; - delete node; -} - - -void XMLTextNode::append (const string &str) { - _text += str; -} - - -void XMLTextNode::prepend (XMLNode *node) { - if (XMLTextNode *tn = dynamic_cast(node)) - prepend(tn); - else - delete node; -} - - -////////////////////// - -XMLDeclarationNode::XMLDeclarationNode (const string &n, const string &p) - : _name(n), _params(p), _emitted(false) -{ -} - - -XMLDeclarationNode::~XMLDeclarationNode () { - FORALL(_children, list::iterator, i) - delete *i; -} - -void XMLDeclarationNode::append (XMLDeclarationNode *child) { - if (child) - _children.push_back(child); -} - -ostream& XMLDeclarationNode::write (ostream &os) const { - os << "\n"; - else { - os << "[\n"; - FORALL(_children, list::const_iterator, i) - (*i)->write(os); - os << "]>\n"; - } - return os; -} - - -bool XMLDeclarationNode::emit (ostream &os, XMLNode *stopNode) { - if (this == stopNode) - return false; - - if (!_emitted) { - os << "\n"; - else - os << "[\n"; - _emitted = true; - } - if (!_children.empty()) { - FORALL(_children, list::iterator, i) { - if ((*i)->emit(os, stopNode)) { - list::iterator it = i++; // prevent i from being invalidated... - _children.erase(it); // ... by erase - --i; // @@ what happens if i points to first child? - } - else - return false; - } - os << "]>\n"; - } - return true; - -} - -////////////////////// - -ostream& XMLCDataNode::write (ostream &os) const { - os << "\n"; - return os; -} - - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLNode.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLNode.h deleted file mode 100644 index e4576e9d830..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLNode.h +++ /dev/null @@ -1,124 +0,0 @@ -/************************************************************************* -** XMLNode.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef XMLNODE_H -#define XMLNODE_H - -#include -#include -#include -#include - -#include "SpecialActions.h" - - -struct XMLNode -{ - virtual ~XMLNode () {} - virtual std::ostream& write (std::ostream &os) const =0; - virtual bool emit (std::ostream &os, XMLNode *stopElement); - virtual void append (XMLNode *child) {} - virtual void prepend (XMLNode *child) {} -}; - - -class XMLElementNode : public XMLNode -{ - typedef std::map AttribMap; - typedef std::list ChildList; - public: - XMLElementNode (const std::string &name); - ~XMLElementNode (); - void addAttribute (const std::string &name, const std::string &value); - void addAttribute (const std::string &name, double value); - void append (XMLNode *child); - void append (const std::string &str); - void prepend (XMLNode *child); - bool insertAfter (XMLNode *child, XMLNode *sibling); - bool insertBefore (XMLNode *child, XMLNode *sibling); - bool hasAttribute (const std::string &name) const; - std::ostream& write (std::ostream &os) const; - bool emit (std::ostream &os, XMLNode *stopElement); - bool empty () const {return _children.empty();} - const std::list& children () const {return _children;} - const std::string& getName () const {return _name;} - - private: - std::string _name; // element name (...) - AttribMap _attributes; - ChildList _children; // child nodes - bool _emitted; // true if node has been (partly) emitted -}; - - -class XMLTextNode : public XMLNode -{ - public: - XMLTextNode (const std::string &str) : _text(str) {} - void append (XMLNode *node); - void append (XMLTextNode *node); - void append (const std::string &str); - void prepend (XMLNode *child); - std::ostream& write (std::ostream &os) const {return os << _text;} - - private: - std::string _text; -}; - - -class XMLCommentNode : public XMLNode -{ - public: - XMLCommentNode (const std::string &str) : _text(str) {} - std::ostream& write (std::ostream &os) const {return os << "\n";} - - private: - std::string _text; -}; - - -class XMLDeclarationNode : public XMLNode -{ - public: - XMLDeclarationNode (const std::string &n, const std::string &p); - ~XMLDeclarationNode (); - void append (XMLDeclarationNode *child); - std::ostream& write (std::ostream &os) const; - bool emit (std::ostream &os, XMLNode *stopElement); - - private: - std::string _name; - std::string _params; - std::list _children; - bool _emitted; -}; - - -class XMLCDataNode : public XMLNode -{ - public: - XMLCDataNode (const std::string &d) : _data(d) {} - std::ostream& write (std::ostream &os) const; - - private: - std::string _data; -}; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLString.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLString.cpp deleted file mode 100644 index 630736b29f0..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLString.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/************************************************************************* -** XMLString.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include "macros.h" -#include "XMLString.h" - -using namespace std; - -static string translate (unsigned c) { - switch (c) { - case '<' : return "<"; - case '&' : return "&"; - case '"' : return """; - case '\'': return "'"; - } - ostringstream oss; - if (c >= 32 && c <= 126) - oss << char(c); - else - oss <<"&#" << unsigned(c) << ';'; - return oss.str(); -} - - -XMLString::XMLString (const string &str, bool plain) { - if (plain) - *this = str; - else { - FORALL(str, string::const_iterator, i) - *this += translate(*i); - } -} - - -XMLString::XMLString (const char *str, bool plain) { - if (str) { - if (plain) - *this = str; - else { - while (*str) - *this += translate(*str++); - } - } -} - - -XMLString::XMLString (int n, bool cast) { - if (cast) { - stringstream ss; - ss << n; - ss >> *this; - } - else - *this += translate(n); -} - - -XMLString::XMLString (double x) { - stringstream ss; - ss << x; - ss >> *this; -} - - -/* -ostream& XMLString::write (ostream &os) const { - const string *self = static_cast(this); - FORALL(*self, string::const_iterator, i) { - unsigned char c = *i; - switch (c) { - case '<' : os << "<"; break; - case '&' : os << "&"; break; - case '"' : os << """; break; - case '\'': os << "'"; break; - default : - if (c >= 32 && c <= 126) - os << c; - else - os << "&#" << int(c) << ';'; - } - } - return os; -} -*/ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLString.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLString.h deleted file mode 100644 index 2f669e21fb7..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/XMLString.h +++ /dev/null @@ -1,38 +0,0 @@ -/************************************************************************* -** XMLString.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef XMLSTRING_H -#define XMLSTRING_H - -#include - - -class XMLString : public std::string -{ - public: - XMLString () : std::string() {} - XMLString (const char *str, bool plain=false); - XMLString (const std::string &str, bool plain=false); - XMLString (int n, bool cast=true); - XMLString (double x); -}; - - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/dvisvgm.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/dvisvgm.cpp deleted file mode 100644 index 90015fccbc7..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/dvisvgm.cpp +++ /dev/null @@ -1,383 +0,0 @@ -/************************************************************************* -** dvisvgm.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "gzstream.h" -#include "CommandLine.h" -#include "DVIToSVG.h" -#include "DVIToSVGActions.h" -#include "FilePath.h" -#include "FileSystem.h" -#include "Font.h" -#include "FontCache.h" -#include "FontEngine.h" -#include "Ghostscript.h" -#include "InputReader.h" -#include "Message.h" -#include "FileFinder.h" -#include "PageSize.h" -#include "SignalHandler.h" -#include "SpecialManager.h" -#include "System.h" - -#ifdef HAVE_CONFIG_H -#include "config.h" -#else -#define TARGET_SYSTEM "" -#endif - -#ifdef __MSVC__ -#include -#else -extern "C" { -#include -} -#endif - -using namespace std; - -class SVGOutput : public DVIToSVG::Output -{ - public: - SVGOutput (const char *base=0, string pattern="", int zip_level=0) - : _path(base ? base : ""), - _pattern(pattern), - _stdout(base == 0), - _zipLevel(zip_level), - _page(-1), - _os(0) {} - - - ~SVGOutput () { - delete _os; - } - - - /** Returns an output stream for the given page. - * @param[in] page number of current page - * @param[in] numPages total number of pages in the DVI file - * @return output stream for the given page */ - ostream& getPageStream (int page, int numPages) const { - string fname = filename(page, numPages); - if (fname.empty()) { - delete _os; - _os = 0; - return cout; - } - if (page == _page) - return *_os; - - _page = page; - delete _os; - - if (_zipLevel > 0) - _os = new ogzstream(fname.c_str(), _zipLevel); - else - _os = new ofstream(fname.c_str()); - if (!_os || !*_os) { - delete _os; - _os = 0; - throw MessageException("can't open file "+fname+" for writing"); - } - return *_os; - } - - - /** Returns the name of the SVG file containing the given page. - * @param[in] page number of page */ - string filename (int page, int numPages) const { - if (_stdout) - return ""; - string fname = _pattern; - if (fname.empty()) - fname = numPages > 1 ? "%f-%p" : "%f"; - else if (numPages > 1 && fname.find("%p") == string::npos) - fname += FileSystem::isDirectory(fname.c_str()) ? "/%f-%p" : "-%p"; - - // replace pattern variables by their actual values - // %f: basename of the DVI file - // %p: current page number - ostringstream oss; - oss << setfill('0') << setw(max(2, int(1+log10((double)numPages)))) << page; - size_t pos=0; - while ((pos = fname.find('%', pos)) != string::npos && pos < fname.length()-1) { - switch (fname[pos+1]) { - case 'f': fname.replace(pos, 2, _path.basename()); pos += _path.basename().length(); break; - case 'p': fname.replace(pos, 2, oss.str()); pos += oss.str().length(); break; - default : ++pos; - } - } - FilePath outpath(fname, true); - if (outpath.suffix().empty()) - outpath.suffix(_zipLevel > 0 ? "svgz" : "svg"); - string apath = outpath.absolute(); - string rpath = outpath.relative(); - return apath.length() < rpath.length() ? apath : rpath; - } - - private: - FilePath _path; - string _pattern; - bool _stdout; - int _zipLevel; - mutable int _page; // number of current page being written - mutable ostream *_os; -}; - - -static void show_help (const CommandLine &cmd) { - cout << PACKAGE_STRING "\n\n"; - cmd.help(); - cout << "\nCopyright (C) 2005-2011 Martin Gieseking \n\n"; -} - - -static string remove_path (string fname) { - fname = FileSystem::adaptPathSeperators(fname); - size_t slashpos = fname.rfind('/'); - if (slashpos == string::npos) - return fname; - return fname.substr(slashpos+1); -} - - -static string ensure_suffix (string fname, const string &suffix) { - size_t dotpos = remove_path(fname).rfind('.'); - if (dotpos == string::npos) { - dotpos = fname.length(); - fname += "."+suffix; - } - return fname; -} - - -static void set_trans (DVIToSVG &dvisvg, const CommandLine &args) { - ostringstream oss; - if (args.rotate_given()) - oss << 'R' << args.rotate_arg() << ",w/2,h/2"; - if (args.translate_given()) - oss << 'T' << args.translate_arg(); - if (args.scale_given()) - oss << 'S' << args.scale_arg(); - if (args.transform_given()) - oss << args.transform_arg(); - dvisvg.setTransformation(oss.str()); -} - - -static void set_libgs (CommandLine &args) { -#if !defined(DISABLE_GS) && !defined(HAVE_LIBGS) - if (args.libgs_given()) - Ghostscript::LIBGS_NAME = args.libgs_arg(); - else if (getenv("LIBGS")) - Ghostscript::LIBGS_NAME = getenv("LIBGS"); -#endif -} - - -static bool set_cache_dir (const CommandLine &args) { - if (args.cache_given() && !args.cache_arg().empty()) { - if (args.cache_arg() == "none") - PhysicalFont::CACHE_PATH = 0; - else if (FileSystem::exists(args.cache_arg().c_str())) - PhysicalFont::CACHE_PATH = args.cache_arg().c_str(); - else - Message::wstream(true) << "cache directory '" << args.cache_arg() << "' does not exist (caching disabled)\n"; - } - else { - if (const char *userdir = FileSystem::userdir()) { - static string path = userdir; - path += "/.dvisvgm"; - path = FileSystem::adaptPathSeperators(path); - const string cachepath = path+"/cache"; - if (!FileSystem::exists(cachepath.c_str())) { - if (!FileSystem::exists(path.c_str())) - FileSystem::mkdir(cachepath.c_str()); - else { - FileSystem::mkdir(cachepath.c_str()); - // move existing cache files from former location to new one - vector files; - FileSystem::collect(path.c_str(), files); - FORALL(files, vector::iterator, it) { - if (it->at(0) == 'f' && it->length() > 4 && it->substr(it->length()-4, 4) == ".fgd") { - const char *fname = it->c_str()+1; - FileSystem::copy(path+"/"+fname, cachepath+"/"+fname, true); - } - } - } - } - path = cachepath; - PhysicalFont::CACHE_PATH = path.c_str(); - } - if (args.cache_given() && args.cache_arg().empty()) { - cout << "cache directory: " << (PhysicalFont::CACHE_PATH ? PhysicalFont::CACHE_PATH : "(none)") << '\n'; - FontCache::fontinfo(PhysicalFont::CACHE_PATH, cout, true); - return false; - } - } - return true; -} - - -static bool check_bbox (const string &bboxstr) { - const char *formats[] = {"none", "min", "dvi", 0}; - for (const char **p=formats; *p; ++p) - if (bboxstr == *p) - return true; - if (isalpha(bboxstr[0])) { - try { - PageSize size(bboxstr); - return true; - } - catch (const PageSizeException &e) { - Message::estream(true) << "invalid bounding box format '" << bboxstr << "'\n"; - return false; - } - } - try { - BoundingBox bbox; - bbox.set(bboxstr); - return true; - } - catch (const MessageException &e) { - Message::estream(true) << e.what() << '\n'; - return false; - } -} - - -static void print_version (bool extended) { - ostringstream oss; - oss << PACKAGE_STRING; - if (extended) { - oss << " (" TARGET_SYSTEM ")\n"; - oss << string(oss.str().length()-1, '-') << "\n" - "freetype: " << FontEngine::version() << "\n" -#ifdef MIKTEX - "MiKTeX: " << FileFinder::version() << "\n" -#else - "kpathsea: " << FileFinder::version() << "\n" -#endif - "potrace: " << (strchr(potrace_version(), ' ') ? strchr(potrace_version(), ' ')+1 : "unknown") << "\n" - "zlib: " << zlibVersion(); - } - cout << oss.str() << endl; -} - - -int main (int argc, char *argv[]) { - CommandLine args; - args.parse(argc, argv); - if (args.error()) - return 1; - - Message::COLORIZE = args.color_given(); - - set_libgs(args); - if (args.version_given()) { - print_version(args.version_arg()); - return 0; - } - if (args.list_specials_given()) { - SVGOutput out; - DVIToSVG dvisvg(cin, out); - if (const SpecialManager *sm = dvisvg.setProcessSpecials()) - sm->writeHandlerInfo(cout); - return 0; - } - - if (!set_cache_dir(args)) - return 0; - - if (argc == 1 || args.help_given()) { - show_help(args); - return 0; - } - - if (argc > 1 && args.numFiles() < 1) { - Message::estream(true) << "no input file given\n"; - return 1; - } - - if (args.stdout_given() && args.zip_given()) { - Message::estream(true) << "writing SVGZ files to stdout is not supported\n"; - return 1; - } - - if (!check_bbox(args.bbox_arg())) - return 1; - - if (args.progress_given()) { - DVIReader::COMPUTE_PAGE_LENGTH = args.progress_given(); - DVIToSVGActions::PROGRESSBAR_DELAY = args.progress_arg(); - } - SVGTree::CREATE_STYLE = !args.no_styles_given(); - SVGTree::USE_FONTS = !args.no_fonts_given(); - SVGTree::CREATE_USE_ELEMENTS = args.no_fonts_arg() < 1; - DVIToSVGActions::EXACT_BBOX = args.exact_given(); - DVIToSVG::TRACE_MODE = args.trace_all_given() ? (args.trace_all_arg() ? 'a' : 'm') : 0; - PhysicalFont::KEEP_TEMP_FILES = args.keep_given(); - PhysicalFont::METAFONT_MAG = args.mag_arg(); - - double start_time = System::time(); - string dvifile = ensure_suffix(args.file(0), "dvi"); - ifstream ifs(dvifile.c_str(), ios_base::binary|ios_base::in); - if (!ifs) - Message::estream(true) << "can't open file '" << dvifile << "' for reading\n"; - else { - SVGOutput out(args.stdout_given() ? 0 : dvifile.c_str(), args.output_arg(), args.zip_given() ? args.zip_arg() : 0); - Message::LEVEL = args.verbosity_arg(); - DVIToSVG dvisvg(ifs, out); - const char *ignore_specials = args.no_specials_given() ? (args.no_specials_arg().empty() ? "*" : args.no_specials_arg().c_str()) : 0; - dvisvg.setProcessSpecials(ignore_specials); - set_trans(dvisvg, args); - dvisvg.setPageSize(args.bbox_arg()); - - try { - const char *usermap = args.map_file_given() ? args.map_file_arg().c_str() : 0; - FileFinder::init(argv[0], !args.no_mktexmf_given(), usermap); - pair pageinfo; - SignalHandler::instance().start(); - dvisvg.convert(args.page_arg(), &pageinfo); - Message::mstream().indent(0); - Message::mstream(false, Terminal::BLUE, true) << "\n" << pageinfo.first << " of " << pageinfo.second << " page"; - if (pageinfo.second > 1) - Message::mstream(false, Terminal::BLUE, true) << 's'; - Message::mstream(false, Terminal::BLUE, true) << " converted in " << (System::time()-start_time) << " seconds\n"; - } - catch (DVIException &e) { - Message::estream() << "\nDVI error: " << e.what() << '\n'; - } - catch (SignalException &e) { - Message::wstream(true) << "execution interrupted by user\n"; - } - catch (MessageException &e) { - Message::estream(true) << e.what() << '\n'; - } - } - FileFinder::finish(); - return 0; -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/gzstream.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/gzstream.cpp deleted file mode 100644 index 2893c299891..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/gzstream.cpp +++ /dev/null @@ -1,172 +0,0 @@ -// ============================================================================ -// gzstream, C++ iostream classes wrapping the zlib compression library. -// Copyright (C) 2001 Deepak Bandyopadhyay, Lutz Kettner -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library 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 -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// ============================================================================ -// -// File : gzstream.C -// Revision : $Revision: 1.3 $ -// Revision_date : $Date: 2006/01/05 16:22:35 $ -// Author(s) : Deepak Bandyopadhyay, Lutz Kettner -// -// Standard streambuf implementation following Nicolai Josuttis, "The -// Standard C++ Library". -// ============================================================================ - -#include "gzstream.h" -#include -#include // for memcpy - -#ifdef GZSTREAM_NAMESPACE -namespace GZSTREAM_NAMESPACE { -#endif - -const int gzstreambuf::bufferSize = 47+256; // size of data buff - -// ---------------------------------------------------------------------------- -// Internal classes to implement gzstream. See header file for user classes. -// ---------------------------------------------------------------------------- - -// -------------------------------------- -// class gzstreambuf: -// -------------------------------------- - -gzstreambuf* gzstreambuf::open(const char* name, int compression_level, int open_mode) { - if ( is_open()) - return (gzstreambuf*)0; - mode = open_mode; - // no append nor read/write mode - if ((mode & std::ios::ate) || (mode & std::ios::app) - || ((mode & std::ios::in) && (mode & std::ios::out))) - return (gzstreambuf*)0; - if (compression_level < 1) - compression_level = 1; - else if (compression_level > 9) - compression_level = 9; - char fmode[10]; - char* fmodeptr = fmode; - if ( mode & std::ios::in) - *fmodeptr++ = 'r'; - else if ( mode & std::ios::out) - *fmodeptr++ = 'w'; - *fmodeptr++ = 'b'; - *fmodeptr++ = '0'+compression_level; - *fmodeptr = '\0'; - file = gzopen( name, fmode); - if (file == 0) - return (gzstreambuf*)0; - opened = 1; - return this; -} - -gzstreambuf * gzstreambuf::close() { - if ( is_open()) { - sync(); - opened = 0; - if ( gzclose( file) == Z_OK) - return this; - } - return (gzstreambuf*)0; -} - -int gzstreambuf::underflow() { // used for input buffer only - if ( gptr() && ( gptr() < egptr())) - return * reinterpret_cast( gptr()); - - if ( ! (mode & std::ios::in) || ! opened) - return EOF; - // Josuttis' implementation of inbuf - int n_putback = gptr() - eback(); - if ( n_putback > 4) - n_putback = 4; - memcpy( buffer + (4 - n_putback), gptr() - n_putback, n_putback); - - int num = gzread( file, buffer+4, bufferSize-4); - if (num <= 0) // ERROR or EOF - return EOF; - - // reset buffer pointers - setg( buffer + (4 - n_putback), // beginning of putback area - buffer + 4, // read position - buffer + 4 + num); // end of buffer - - // return next character - return * reinterpret_cast( gptr()); -} - -int gzstreambuf::flush_buffer() { - // Separate the writing of the buffer from overflow() and - // sync() operation. - int w = pptr() - pbase(); - if ( gzwrite( file, pbase(), w) != w) - return EOF; - pbump( -w); - return w; -} - -int gzstreambuf::overflow( int c) { // used for output buffer only - if ( ! ( mode & std::ios::out) || ! opened) - return EOF; - if (c != EOF) { - *pptr() = c; - pbump(1); - } - if ( flush_buffer() == EOF) - return EOF; - return c; -} - -int gzstreambuf::sync() { - // Changed to use flush_buffer() instead of overflow( EOF) - // which caused improper behavior with std::endl and flush(), - // bug reported by Vincent Ricard. - if ( pptr() && pptr() > pbase()) { - if ( flush_buffer() == EOF) - return -1; - } - return 0; -} - -// -------------------------------------- -// class gzstreambase: -// -------------------------------------- - -gzstreambase::gzstreambase( const char* name, int compression_level, int mode) { - init( &buf); - open( name, compression_level, mode); -} - -gzstreambase::~gzstreambase() { - buf.close(); -} - -void gzstreambase::open( const char* name, int compression_level, int open_mode) { - if ( ! buf.open( name, compression_level, open_mode)) - clear( rdstate() | std::ios::badbit); -} - -void gzstreambase::close() { - if ( buf.is_open()) - if ( ! buf.close()) - clear( rdstate() | std::ios::badbit); -} - -#ifdef GZSTREAM_NAMESPACE -} // namespace GZSTREAM_NAMESPACE -#endif - -// ============================================================================ -// EOF // diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/gzstream.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/gzstream.h deleted file mode 100644 index 60f38c4fac7..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/gzstream.h +++ /dev/null @@ -1,121 +0,0 @@ -// ============================================================================ -// gzstream, C++ iostream classes wrapping the zlib compression library. -// Copyright (C) 2001 Deepak Bandyopadhyay, Lutz Kettner -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library 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 -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// ============================================================================ -// -// File : gzstream.h -// Revision : $Revision: 1.3 $ -// Revision_date : $Date: 2006/01/05 16:22:35 $ -// Author(s) : Deepak Bandyopadhyay, Lutz Kettner -// -// Standard streambuf implementation following Nicolai Josuttis, "The -// Standard C++ Library". -// ============================================================================ - -#ifndef GZSTREAM_H -#define GZSTREAM_H 1 - -// standard C++ with new header file names and std:: namespace -#include -#include -#include - -#ifdef GZSTREAM_NAMESPACE -namespace GZSTREAM_NAMESPACE { -#endif - -// ---------------------------------------------------------------------------- -// Internal classes to implement gzstream. See below for user classes. -// ---------------------------------------------------------------------------- - -class gzstreambuf : public std::streambuf { -private: - static const int bufferSize; // size of data buff - // totals 512 bytes under g++ for igzstream at the end. - - gzFile file; // file handle for compressed file - char buffer[47+256]; // data buffer - char opened; // open/close state of stream - int mode; // I/O mode - - int flush_buffer(); -public: - gzstreambuf() : opened(0) { - setp( buffer, buffer + (bufferSize-1)); - setg( buffer + 4, // beginning of putback area - buffer + 4, // read position - buffer + 4); // end position - // ASSERT: both input & output capabilities will not be used together - } - int is_open() { return opened; } - gzstreambuf* open(const char* name, int compression_level, int open_mode); - gzstreambuf* close(); - ~gzstreambuf() { close(); } - - virtual int overflow( int c = EOF); - virtual int underflow(); - virtual int sync(); -}; - -class gzstreambase : virtual public std::ios { -protected: - gzstreambuf buf; -public: - gzstreambase() { init(&buf); } - gzstreambase( const char* name, int compression_level, int open_mode); - ~gzstreambase(); - void open( const char* name, int compression_level, int open_mode); - void close(); - gzstreambuf* rdbuf() { return &buf; } -}; - -// ---------------------------------------------------------------------------- -// User classes. Use igzstream and ogzstream analogously to ifstream and -// ofstream respectively. They read and write files based on the gz* -// function interface of the zlib. Files are compatible with gzip compression. -// ---------------------------------------------------------------------------- - -class igzstream : public gzstreambase, public std::istream { -public: - igzstream() : std::istream( &buf) {} - igzstream( const char* name, int compression_level, int open_mode = std::ios::in) - : gzstreambase(name, compression_level, open_mode), std::istream( &buf) {} - gzstreambuf* rdbuf() { return gzstreambase::rdbuf(); } - void open( const char* name, int compression_level, int open_mode = std::ios::in) { - gzstreambase::open( name, compression_level, open_mode); - } -}; - -class ogzstream : public gzstreambase, public std::ostream { -public: - ogzstream() : std::ostream( &buf) {} - ogzstream( const char* name, int compression_level, int mode = std::ios::out) - : gzstreambase(name, compression_level, mode), std::ostream( &buf) {} - gzstreambuf* rdbuf() { return gzstreambase::rdbuf(); } - void open( const char* name, int compression_level, int open_mode = std::ios::out) { - gzstreambase::open(name, compression_level, open_mode); - } -}; - -#ifdef GZSTREAM_NAMESPACE -} // namespace GZSTREAM_NAMESPACE -#endif - -#endif // GZSTREAM_H -// ============================================================================ -// EOF // - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/iapi.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/iapi.h deleted file mode 100644 index 8e29d938d03..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/iapi.h +++ /dev/null @@ -1,300 +0,0 @@ -/* Copyright (C) 2001-2006 Artifex Software, Inc. - All Rights Reserved. - - This software is provided AS-IS with no warranty, either express or - implied. - - This software is distributed under license and may not be copied, modified - or distributed except as expressly authorized under the terms of that - license. Refer to licensing information at http://www.artifex.com/ - or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, - San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information. -*/ - -/* $Id: iapi.h 9043 2008-08-28 22:48:19Z giles $ */ - -/* - * Public API for Ghostscript interpreter - * for use both as DLL and for static linking. - * - * Should work for Windows, OS/2, Linux, Mac. - * - * DLL exported functions should be as similar as possible to imain.c - * You will need to include "ierrors.h". - * - * Current problems: - * 1. Ghostscript does not support multiple instances. - * 2. Global variables in gs_main_instance_default() - * and gsapi_instance_counter - */ - -/* Exported functions may need different prefix - * GSDLLEXPORT marks functions as exported - * GSDLLAPI is the calling convention used on functions exported - * by Ghostscript - * GSDLLCALL is used on callback functions called by Ghostscript - * When you include this header file in the caller, you may - * need to change the definitions by defining these - * before including this header file. - * Make sure you get the calling convention correct, otherwise your - * program will crash either during callbacks or soon after returning - * due to stack corruption. - */ - -#ifndef iapi_INCLUDED -# define iapi_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(_WINDOWS_) || defined(__WINDOWS__) -# ifndef _Windows -# define _Windows -# endif -#endif - -#ifdef _Windows -# ifndef GSDLLEXPORT -# define GSDLLEXPORT __declspec(dllexport) -# endif -# ifndef GSDLLAPI -# define GSDLLAPI __stdcall -# endif -# ifndef GSDLLCALL -# define GSDLLCALL __stdcall -# endif -#endif /* _Windows */ - -#if defined(OS2) && defined(__IBMC__) -# ifndef GSDLLAPI -# define GSDLLAPI _System -# endif -# ifndef GSDLLCALL -# define GSDLLCALL _System -# endif -#endif /* OS2 && __IBMC */ - -#ifdef __MACOS__ -# pragma export on -#endif - -#ifndef GSDLLEXPORT -# define GSDLLEXPORT -#endif -#ifndef GSDLLAPI -# define GSDLLAPI -#endif -#ifndef GSDLLCALL -# define GSDLLCALL -#endif - -#if defined(__IBMC__) -# define GSDLLAPIPTR * GSDLLAPI -# define GSDLLCALLPTR * GSDLLCALL -#else -# define GSDLLAPIPTR GSDLLAPI * -# define GSDLLCALLPTR GSDLLCALL * -#endif - -#ifndef display_callback_DEFINED -# define display_callback_DEFINED -typedef struct display_callback_s display_callback; -#endif - -typedef struct gsapi_revision_s { - const char *product; - const char *copyright; - long revision; - long revisiondate; -} gsapi_revision_t; - - -/* Get version numbers and strings. - * This is safe to call at any time. - * You should call this first to make sure that the correct version - * of the Ghostscript is being used. - * pr is a pointer to a revision structure. - * len is the size of this structure in bytes. - * Returns 0 if OK, or if len too small (additional parameters - * have been added to the structure) it will return the required - * size of the structure. - */ -GSDLLEXPORT int GSDLLAPI -gsapi_revision(gsapi_revision_t *pr, int len); - -/* - * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING - * Ghostscript supports only one instance. - * The current implementation uses a global static instance - * counter to make sure that only a single instance is used. - * If you try to create two instances, the second attempt - * will return < 0 and set pinstance to NULL. - * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING - */ -/* Create a new instance of Ghostscript. - * This instance is passed to most other API functions. - * The caller_handle will be provided to callback functions. - */ - -GSDLLEXPORT int GSDLLAPI -gsapi_new_instance(void **pinstance, void *caller_handle); - -/* - * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING - * Ghostscript supports only one instance. - * The current implementation uses a global static instance - * counter to make sure that only a single instance is used. - * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING - */ -/* Destroy an instance of Ghostscript - * Before you call this, Ghostscript must have finished. - * If Ghostscript has been initialised, you must call gsapi_exit() - * before gsapi_delete_instance. - */ -GSDLLEXPORT void GSDLLAPI -gsapi_delete_instance(void *instance); - -/* Set the callback functions for stdio - * The stdin callback function should return the number of - * characters read, 0 for EOF, or -1 for error. - * The stdout and stderr callback functions should return - * the number of characters written. - * If a callback address is NULL, the real stdio will be used. - */ -GSDLLEXPORT int GSDLLAPI -gsapi_set_stdio(void *instance, - int (GSDLLCALLPTR stdin_fn)(void *caller_handle, char *buf, int len), - int (GSDLLCALLPTR stdout_fn)(void *caller_handle, const char *str, int len), - int (GSDLLCALLPTR stderr_fn)(void *caller_handle, const char *str, int len)); - -/* Set the callback function for polling. - * This is used for handling window events or cooperative - * multitasking. This function will only be called if - * Ghostscript was compiled with CHECK_INTERRUPTS - * as described in gpcheck.h. - * The polling function should return 0 if all is well, - * and negative if it wants ghostscript to abort. - * The polling function must be fast. - */ -GSDLLEXPORT int GSDLLAPI gsapi_set_poll(void *instance, - int (GSDLLCALLPTR poll_fn)(void *caller_handle)); - -/* Set the display device callback structure. - * If the display device is used, this must be called - * after gsapi_new_instance() and before gsapi_init_with_args(). - * See gdevdisp.h for more details. - */ -GSDLLEXPORT int GSDLLAPI gsapi_set_display_callback( - void *instance, display_callback *callback); - - -/* Initialise the interpreter. - * This calls gs_main_init_with_args() in imainarg.c - * 1. If quit or EOF occur during gsapi_init_with_args(), - * the return value will be e_Quit. This is not an error. - * You must call gsapi_exit() and must not call any other - * gsapi_XXX functions. - * 2. If usage info should be displayed, the return value will be e_Info - * which is not an error. Do not call gsapi_exit(). - * 3. Under normal conditions this returns 0. You would then - * call one or more gsapi_run_*() functions and then finish - * with gsapi_exit(). - */ -GSDLLEXPORT int GSDLLAPI gsapi_init_with_args(void *instance, - int argc, char **argv); - -/* - * The gsapi_run_* functions are like gs_main_run_* except - * that the error_object is omitted. - * If these functions return <= -100, either quit or a fatal - * error has occured. You then call gsapi_exit() next. - * The only exception is gsapi_run_string_continue() - * which will return e_NeedInput if all is well. - */ - -GSDLLEXPORT int GSDLLAPI -gsapi_run_string_begin(void *instance, - int user_errors, int *pexit_code); - -GSDLLEXPORT int GSDLLAPI -gsapi_run_string_continue(void *instance, - const char *str, unsigned int length, int user_errors, int *pexit_code); - -GSDLLEXPORT int GSDLLAPI -gsapi_run_string_end(void *instance, - int user_errors, int *pexit_code); - -GSDLLEXPORT int GSDLLAPI -gsapi_run_string_with_length(void *instance, - const char *str, unsigned int length, int user_errors, int *pexit_code); - -GSDLLEXPORT int GSDLLAPI -gsapi_run_string(void *instance, - const char *str, int user_errors, int *pexit_code); - -GSDLLEXPORT int GSDLLAPI -gsapi_run_file(void *instance, - const char *file_name, int user_errors, int *pexit_code); - - -/* Exit the interpreter. - * This must be called on shutdown if gsapi_init_with_args() - * has been called, and just before gsapi_delete_instance(). - */ -GSDLLEXPORT int GSDLLAPI -gsapi_exit(void *instance); - -/* Visual Tracer */ -/* This function is only for debug purpose clients */ -struct vd_trace_interface_s; -GSDLLEXPORT void GSDLLAPI -gsapi_set_visual_tracer(struct vd_trace_interface_s *I); - - -/* function prototypes */ -typedef int (GSDLLAPIPTR PFN_gsapi_revision)( - gsapi_revision_t *pr, int len); -typedef int (GSDLLAPIPTR PFN_gsapi_new_instance)( - void **pinstance, void *caller_handle); -typedef void (GSDLLAPIPTR PFN_gsapi_delete_instance)( - void *instance); -typedef int (GSDLLAPIPTR PFN_gsapi_set_stdio)(void *instance, - int (GSDLLCALLPTR stdin_fn)(void *caller_handle, char *buf, int len), - int (GSDLLCALLPTR stdout_fn)(void *caller_handle, const char *str, int len), - int (GSDLLCALLPTR stderr_fn)(void *caller_handle, const char *str, int len)); -typedef int (GSDLLAPIPTR PFN_gsapi_set_poll)(void *instance, - int(GSDLLCALLPTR poll_fn)(void *caller_handle)); -typedef int (GSDLLAPIPTR PFN_gsapi_set_display_callback)( - void *instance, display_callback *callback); -typedef int (GSDLLAPIPTR PFN_gsapi_init_with_args)( - void *instance, int argc, char **argv); -typedef int (GSDLLAPIPTR PFN_gsapi_run_string_begin)( - void *instance, int user_errors, int *pexit_code); -typedef int (GSDLLAPIPTR PFN_gsapi_run_string_continue)( - void *instance, const char *str, unsigned int length, - int user_errors, int *pexit_code); -typedef int (GSDLLAPIPTR PFN_gsapi_run_string_end)( - void *instance, int user_errors, int *pexit_code); -typedef int (GSDLLAPIPTR PFN_gsapi_run_string_with_length)( - void *instance, const char *str, unsigned int length, - int user_errors, int *pexit_code); -typedef int (GSDLLAPIPTR PFN_gsapi_run_string)( - void *instance, const char *str, - int user_errors, int *pexit_code); -typedef int (GSDLLAPIPTR PFN_gsapi_run_file)(void *instance, - const char *file_name, int user_errors, int *pexit_code); -typedef int (GSDLLAPIPTR PFN_gsapi_exit)(void *instance); -typedef void (GSDLLAPIPTR PFN_gsapi_set_visual_tracer) - (struct vd_trace_interface_s *I); - - -#ifdef __MACOS__ -#pragma export off -#endif - -#ifdef __cplusplus -} /* extern 'C' protection */ -#endif - -#endif /* iapi_INCLUDED */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/ierrors.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/ierrors.h deleted file mode 100644 index 3184341177e..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/ierrors.h +++ /dev/null @@ -1,153 +0,0 @@ -/* Copyright (C) 2001-2006 Artifex Software, Inc. - All Rights Reserved. - - This software is provided AS-IS with no warranty, either express or - implied. - - This software is distributed under license and may not be copied, modified - or distributed except as expressly authorized under the terms of that - license. Refer to licensing information at http://www.artifex.com/ - or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, - San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information. -*/ - -/* $Id: ierrors.h 8022 2007-06-05 22:23:38Z giles $ */ -/* Definition of error codes */ - -#ifndef ierrors_INCLUDED -# define ierrors_INCLUDED - -/* - * DO NOT USE THIS FILE IN THE GRAPHICS LIBRARY. - * THIS FILE IS PART OF THE POSTSCRIPT INTERPRETER. - * USE gserrors.h IN THE LIBRARY. - */ - -/* - * A procedure that may return an error always returns - * a non-negative value (zero, unless otherwise noted) for success, - * or negative for failure. - * We use ints rather than an enum to avoid a lot of casting. - */ - -/* Define the error name table */ -extern const char *const gs_error_names[]; - - /* ------ PostScript Level 1 errors ------ */ - -#define e_unknownerror (-1) /* unknown error */ -#define e_dictfull (-2) -#define e_dictstackoverflow (-3) -#define e_dictstackunderflow (-4) -#define e_execstackoverflow (-5) -#define e_interrupt (-6) -#define e_invalidaccess (-7) -#define e_invalidexit (-8) -#define e_invalidfileaccess (-9) -#define e_invalidfont (-10) -#define e_invalidrestore (-11) -#define e_ioerror (-12) -#define e_limitcheck (-13) -#define e_nocurrentpoint (-14) -#define e_rangecheck (-15) -#define e_stackoverflow (-16) -#define e_stackunderflow (-17) -#define e_syntaxerror (-18) -#define e_timeout (-19) -#define e_typecheck (-20) -#define e_undefined (-21) -#define e_undefinedfilename (-22) -#define e_undefinedresult (-23) -#define e_unmatchedmark (-24) -#define e_VMerror (-25) /* must be the last Level 1 error */ - -#define LEVEL1_ERROR_NAMES\ - "unknownerror", "dictfull", "dictstackoverflow", "dictstackunderflow",\ - "execstackoverflow", "interrupt", "invalidaccess", "invalidexit",\ - "invalidfileaccess", "invalidfont", "invalidrestore", "ioerror",\ - "limitcheck", "nocurrentpoint", "rangecheck", "stackoverflow",\ - "stackunderflow", "syntaxerror", "timeout", "typecheck", "undefined",\ - "undefinedfilename", "undefinedresult", "unmatchedmark", "VMerror" - - /* ------ Additional Level 2 errors (also in DPS) ------ */ - -#define e_configurationerror (-26) -#define e_undefinedresource (-27) -#define e_unregistered (-28) - -#define LEVEL2_ERROR_NAMES\ - "configurationerror", "undefinedresource", "unregistered" - - /* ------ Additional DPS errors ------ */ - -#define e_invalidcontext (-29) -/* invalidid is for the NeXT DPS extension. */ -#define e_invalidid (-30) - -#define DPS_ERROR_NAMES\ - "invalidcontext", "invalidid" - -#define ERROR_NAMES\ - LEVEL1_ERROR_NAMES, LEVEL2_ERROR_NAMES, DPS_ERROR_NAMES - - /* ------ Pseudo-errors used internally ------ */ - -/* - * Internal code for a fatal error. - * gs_interpret also returns this for a .quit with a positive exit code. - */ -#define e_Fatal (-100) - -/* - * Internal code for the .quit operator. - * The real quit code is an integer on the operand stack. - * gs_interpret returns this only for a .quit with a zero exit code. - */ -#define e_Quit (-101) - -/* - * Internal code for a normal exit from the interpreter. - * Do not use outside of interp.c. - */ -#define e_InterpreterExit (-102) - -/* - * Internal code that indicates that a procedure has been stored in the - * remap_proc of the graphics state, and should be called before retrying - * the current token. This is used for color remapping involving a call - * back into the interpreter -- inelegant, but effective. - */ -#define e_RemapColor (-103) - -/* - * Internal code to indicate we have underflowed the top block - * of the e-stack. - */ -#define e_ExecStackUnderflow (-104) - -/* - * Internal code for the vmreclaim operator with a positive operand. - * We need to handle this as an error because otherwise the interpreter - * won't reload enough of its state when the operator returns. - */ -#define e_VMreclaim (-105) - -/* - * Internal code for requesting more input from run_string. - */ -#define e_NeedInput (-106) - -/* - * Internal code for a normal exit when usage info is displayed. - * This allows Window versions of Ghostscript to pause until - * the message can be read. - */ -#define e_Info (-110) - -/* - * Define which error codes require re-executing the current object. - */ -#define ERROR_IS_INTERRUPT(ecode)\ - ((ecode) == e_interrupt || (ecode) == e_timeout) - -#endif /* ierrors_INCLUDED */ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/macros.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/macros.h deleted file mode 100644 index 12be07323c7..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/macros.h +++ /dev/null @@ -1,45 +0,0 @@ -/************************************************************************* -** macros.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef MACROS_H -#define MACROS_H - -#define FORALL(container, itertype, itervar) \ - for (itertype itervar=(container).begin(); itervar != (container).end(); ++itervar) - -#define IMPLEMENT_ARITHMETIC_OPERATOR(class, op) \ - inline class operator op (class a, const class &b) { \ - return a op##= b; \ - } - -#define IMPLEMENT_ARITHMETIC_OPERATOR2(class, scalar, op) \ - inline class operator op (class a, scalar b) { \ - return a op##= b; \ - } - -#define IMPLEMENT_OUTPUT_OPERATOR(class) \ - inline std::ostream& operator << (std::ostream &os, class obj) { \ - return obj.write(os); \ - } - -#include -#define SHOW(x) std::cerr << ">>> " << __FILE__ ", " << __LINE__ << ": " << #x << "=" << (x) << std::endl - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/options.xml b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/options.xml deleted file mode 100644 index 10846285b3d..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/options.xml +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - dvisvgm - [options] dvifile - This program converts DVI files, as created by TeX/LaTeX, to\nthe XML-based scalable vector graphics format SVG. - - -
- - -
-
- - - - - - -
-
- - - - -
-
- - - - - - - - -
-
- - - - - - -
-
-
- diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/psdefs.psc b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/psdefs.psc deleted file mode 100644 index 60785a721e1..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/psdefs.psc +++ /dev/null @@ -1,69 +0,0 @@ -/************************************************************************* -** psdefs.psc ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -const char *PSInterpreter::PSDEFS = -"3 dict dup begin/Install{matrix setmatrix}def/HWResolution[72 72]def/PageSize[10" -"000 10000]def end setpagedevice/@dodraw true store/@SD systemdict def/@UD userdi" -"ct def true setglobal @SD/:save @SD/save get put @SD/:restore @SD/restore get pu" -"t @SD/:gsave @SD/gsave get put @SD/:grestore @SD/grestore get put @SD/:grestorea" -"ll @SD/grestoreall get put @SD/:stroke @SD/stroke get put @SD/:fill @SD/fill get" -" put @SD/:eofill @SD/eofill get put @SD/:clip @SD/clip get put @SD/:eoclip @SD/e" -"oclip get put @SD/:charpath @SD/charpath get put @SD/.setopacityalpha known not{" -"@SD/.setopacityalpha{pop}put}if @SD/prval{dup type/stringtype eq{print}{30 strin" -"g cvs print}ifelse}put @SD/prseq{-1 1{-1 roll prval( )print}for(\\n)print}put @S" -"D/prcmd{( )exch(\\ndvi.)3{print}repeat prseq}put @SD/cvxall{{cvx}forall}put @SD/" -"defpr{[exch[/copy @SD]cvxall 5 -1 roll dup 6 1 roll[/get/exec]cvxall 6 -1 roll d" -"up 7 1 roll 4 -1 roll dup 5 1 roll dup length string cvs/prcmd cvx]cvx def}put @" -"SD/querypos{{currentpoint}stopped{$error/newerror false put}{2(querypos)prcmd}if" -"else}put @SD/applyscalevals{1 0 transform 0 0 transform 3 -1 roll sub dup mul 3 " -"1 roll sub dup mul add sqrt 0 1 transform 0 0 transform 3 -1 roll sub dup mul 3 " -"1 roll sub dup mul add sqrt 1 0 transform dup mul exch dup dup mul 3 -1 roll add" -" sqrt div 3(applyscalevals)prcmd}def @SD/prpath{{2(moveto)prcmd}{2(lineto)prcmd}" -"{6(curveto)prcmd}{0(closepath)prcmd}pathforall}put @SD/charpath{/@dodraw false s" -"tore :charpath/@dodraw true store}put @SD/show{@dodraw{true charpath eofill}if}p" -"ut @SD/stroke{@dodraw{0(newpath)prcmd prpath 0(stroke)prcmd newpath}{:stroke}ife" -"lse}put @SD/fill{@dodraw{0(newpath)prcmd prpath 0(fill)prcmd newpath}{:fill}ifel" -"se}put @SD/eofill{@dodraw{0(newpath)prcmd prpath 0(eofill)prcmd newpath}{:eofill" -"}ifelse}put @SD/clip{:clip 0(newpath)prcmd prpath 0(clip)prcmd}put @SD/eoclip{:e" -"oclip 0(newpath)prcmd prpath 0(eoclip)prcmd}put false setglobal @SD readonly pop" -"/initclip 0 defpr/sysexec{@SD exch get exec}def/adddot{dup length 1 add string d" -"up 0 46 put dup 3 -1 roll 1 exch putinterval}def/setlinewidth{dup/setlinewidth s" -"ysexec applyscalevals 1(setlinewidth)prcmd}def/setlinecap 1 defpr/setlinejoin 1 " -"defpr/setmiterlimit 1 defpr/setdash{mark 3 1 roll 2 copy/setdash sysexec applysc" -"alevals exch aload length 1 add -1 roll counttomark(setdash)prcmd pop}def/setgst" -"ate{currentlinewidth 1(setlinewidth)prcmd currentlinecap 1(setlinecap)prcmd curr" -"entlinejoin 1(setlinejoin)prcmd currentmiterlimit 1(setmiterlimit)prcmd currentr" -"gbcolor 3(setrgbcolor)prcmd 6 array currentmatrix aload pop 6(setmatrix)prcmd cu" -"rrentdash mark 3 1 roll exch aload length 1 add -1 roll counttomark(setdash)prcm" -"d pop}def/save{@UD begin/@saveID vmstatus pop pop def end :save @saveID 1(save)p" -"rcmd}def/restore{:restore setgstate @UD/@saveID known{@UD begin @saveID end}{0}i" -"felse 1(restore)prcmd}def/gsave 0 defpr/grestore{:grestore setgstate 0(grestore)" -"prcmd}def/grestoreall{:grestoreall setstate 0(grestoreall)prcmd}/rotate{dup type" -"/arraytype ne{dup 1(rotate)prcmd}if/rotate sysexec}def/scale{dup type/arraytype " -"ne{2 copy 2(scale)prcmd}if/scale sysexec}def/translate{dup type/arraytype ne{2 c" -"opy 2(translate)prcmd}if/translate sysexec}def/setmatrix{dup/setmatrix sysexec a" -"load pop 6(setmatrix)prcmd}def/initmatrix{matrix setmatrix}def/concat{matrix cur" -"rentmatrix matrix concatmatrix setmatrix}def/setgray 1 defpr/setcmykcolor 4 defp" -"r/sethsbcolor 3 defpr/setrgbcolor 3 defpr/.setopacityalpha{dup/.setopacityalpha " -"sysexec 1(setopacityalpha)prcmd}def/.handleerror errordict/handleerror get def e" -"rrordict begin/handleerror{0(beginerror)prcmd .handleerror 0(enderror)prcmd}.bin" -"d def end "; - -// vim: set syntax=cpp: diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/types.h b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/types.h deleted file mode 100644 index f404565df96..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/src/types.h +++ /dev/null @@ -1,84 +0,0 @@ -/************************************************************************* -** types.h ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#ifndef TYPES_H -#define TYPES_H - -namespace internal { - template - class ERROR_inttype_not_available - { - ERROR_inttype_not_available(); - }; - - template - struct select - { - typedef A T; - }; - - template - struct select - { - typedef B T; - }; -} - - -// Retrieves a signed integer type with sizeof(T) == BYTES -template -struct int_t -{ - typedef typename internal::select >::T>::T>::T>::T>::T T; -}; - - -// Retrieves an unsigned integer type with sizeof(T) == BYTES -template -struct int_t -{ - typedef typename internal::select >::T>::T>::T>::T>::T T; -}; - - -// Machine independent definition of sized integer types -typedef int_t<1, true>::T Int8; -typedef int_t<2, true>::T Int16; -typedef int_t<4, true>::T Int32; -typedef int_t<8, true>::T Int64; -typedef int_t<1, false>::T UInt8; -typedef int_t<2, false>::T UInt16; -typedef int_t<4, false>::T UInt32; -typedef int_t<8, false>::T UInt64; - -typedef Int32 FixWord; -typedef UInt32 ScaledInt; - -#endif diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/BoundingBoxTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/BoundingBoxTest.cpp deleted file mode 100644 index 3e092af7f13..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/BoundingBoxTest.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/************************************************************************* -** BoundingBoxTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include "BoundingBox.h" - -TEST(BoundingBoxTest, set) { - BoundingBox bbox; - bbox.set("1pt 2pt 3pt 4pt"); - EXPECT_EQ(bbox.minX(), 1); - EXPECT_EQ(bbox.minY(), 2); - EXPECT_EQ(bbox.maxX(), 3); - EXPECT_EQ(bbox.maxY(), 4); - - bbox.set("4pt 3pt 2pt 1pt"); - EXPECT_EQ(bbox.minX(), 2); - EXPECT_EQ(bbox.minY(), 1); - EXPECT_EQ(bbox.maxX(), 4); - EXPECT_EQ(bbox.maxY(), 3); - - bbox.set("1pt"); - EXPECT_EQ(bbox.minX(), 1); - EXPECT_EQ(bbox.minY(), 0); - EXPECT_EQ(bbox.maxX(), 5); - EXPECT_EQ(bbox.maxY(), 4); - - bbox.set("2pt 3pt"); - EXPECT_EQ(bbox.minX(), -1); - EXPECT_EQ(bbox.minY(), -3); - EXPECT_EQ(bbox.maxX(), 7); - EXPECT_EQ(bbox.maxY(), 7); - - EXPECT_THROW(bbox.set(""), BoundingBoxException); - EXPECT_THROW(bbox.set("1pt 2pt 3pt"), BoundingBoxException); -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/CRC32Test.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/CRC32Test.cpp deleted file mode 100644 index bd5015df06f..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/CRC32Test.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/************************************************************************* -** CRC32Test.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "CRC32.h" - -using namespace std; - -TEST(CRC32Test, init) { - CRC32 crc; - EXPECT_EQ(crc.get(), 0); - crc.reset(); - EXPECT_EQ(crc.get(), 0); -} - - -TEST(CRC32Test, update_numbers) { - CRC32 crc; - const UInt32 comp[]={0xf8923be6, 0x4dcd2866, 0x4fdbb57a, 0xcb40f3bf, 0xf1a33887, 0x3422c816, 0x3a8b92a4, 0xedafc4ce, 0x4f5d17ec, 0x4a9f2f68}; - for (int i=-5; i < 5; ++i) { - crc.update(i); - EXPECT_EQ(crc.get(), comp[i+5]); - } - crc.reset(); - EXPECT_EQ(crc.get(), 0); - // add 32 bit values - for (int i=0; i < 256; ++i) - crc.update(i); - EXPECT_EQ(crc.get(), 0xd4c2968b); - for (int i=256; i < 10000; ++i) - crc.update(i); - EXPECT_EQ(crc.get(), 0x6de9e841); -} - - -TEST(CRC32Test, update_array) { - CRC32 crc; - UInt8 vals[256]; - // add 8 bit values - for (int i=0; i < 256; ++i) - vals[i] = i; - crc.update(vals, 256); - EXPECT_EQ(crc.get(), 0x29058c73); -} - - -TEST(CRC32Test, update_string) { - CRC32 crc; - crc.update("dvisvgm converts DVI files to SVG."); - EXPECT_EQ(crc.get(), 0x7c4ef359); - crc.update("It is published under the GNU General Public License."); - EXPECT_EQ(crc.get(), 0xa732081b); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/CalculatorTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/CalculatorTest.cpp deleted file mode 100644 index 6d9a095370c..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/CalculatorTest.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/************************************************************************* -** CalculatorTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include "Calculator.h" - -TEST(CalculatorTest, eval) { - Calculator calc; - EXPECT_EQ(calc.eval("2+3+4"), 9); - EXPECT_EQ(calc.eval("2*3+4"), 10); - EXPECT_EQ(calc.eval("2+3*4"), 14); - EXPECT_EQ(calc.eval("(2+3)*4"), 20); - EXPECT_EQ(calc.eval("2*(3+4)"), 14); - EXPECT_EQ(calc.eval("-2+3+4"), 5); - EXPECT_EQ(calc.eval("3/2"), 1.5); - EXPECT_EQ(calc.eval("3%2"), 1); -} - - -TEST(CalculatorTest, variables) { - Calculator calc; - calc.setVariable("a", 1); - EXPECT_EQ(calc.getVariable("a"), 1); - - calc.setVariable("a", 2); - EXPECT_EQ(calc.getVariable("a"), 2); - - calc.setVariable("b", 3); - EXPECT_EQ(calc.eval("a+b"), 5); - EXPECT_EQ(calc.eval("2a+2b"), 10); -} - - -TEST(CalculatorTest, exceptions) { - Calculator calc; - ASSERT_THROW(calc.eval("2++3"), CalculatorException); - ASSERT_THROW(calc.eval("c"), CalculatorException); - ASSERT_THROW(calc.eval("1/0"), CalculatorException); - ASSERT_THROW(calc.eval("1%0"), CalculatorException); - ASSERT_THROW(calc.eval("2*(3+4"), CalculatorException); - ASSERT_THROW(calc.eval("2*(3+4))"), CalculatorException); -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/ColorSpecialTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/ColorSpecialTest.cpp deleted file mode 100644 index 1fd0cbf6930..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/ColorSpecialTest.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/************************************************************************* -** ColorSpecialTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "ColorSpecialHandler.h" -#include "SpecialActions.h" - -class ColorSpecialTest : public ::testing::Test -{ - protected: - struct SetColor : SpecialEmptyActions - { - SetColor () : color(0) {} - void setColor (const Color &c) {color = c;} - bool equals (UInt32 c) {return color == c;} - UInt32 color; - }; - ColorSpecialHandler handler; - SetColor actions; -}; - - -TEST_F(ColorSpecialTest, rgb) { - std::istringstream iss("rgb 1 0 1"); - handler.process(0, iss, &actions); - EXPECT_TRUE(actions.equals(0xff00ff)); -} - - -TEST_F(ColorSpecialTest, hsb) { - std::istringstream iss("hsb 1 0.5 1"); - handler.process(0, iss, &actions); - EXPECT_TRUE(actions.equals(0xff8080)); -} - - -TEST_F(ColorSpecialTest, cmyk) { - std::istringstream iss("cmyk 0.1 0.2 0.4 0.6"); - handler.process(0, iss, &actions); - EXPECT_TRUE(actions.equals(0x4c3300)); -} - - -TEST_F(ColorSpecialTest, stack) { - std::istringstream iss("push rgb 1 0 0"); - handler.process(0, iss, &actions); - EXPECT_TRUE(actions.equals(0xff0000)); - iss.clear(); - iss.str("push Blue"); - handler.process(0, iss, &actions); - EXPECT_TRUE(actions.equals(0x0000ff)); - iss.clear(); - iss.str("pop"); - handler.process(0, iss, &actions); - EXPECT_TRUE(actions.equals(0xff0000)); -} - - -TEST_F(ColorSpecialTest, constant) { - std::istringstream iss("RedViolet"); - handler.process(0, iss, &actions); - EXPECT_TRUE(actions.equals(0x9600a8)); -} - - -TEST_F(ColorSpecialTest, errors) { - std::istringstream iss("UnknownColor"); - EXPECT_THROW(handler.process(0, iss, &actions), SpecialException); - iss.clear(); - iss.str("rgb 0 0.3 3.1"); - EXPECT_THROW(handler.process(0, iss, &actions), SpecialException); -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/CommandLineTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/CommandLineTest.cpp deleted file mode 100644 index 3de612db08e..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/CommandLineTest.cpp +++ /dev/null @@ -1,216 +0,0 @@ -/************************************************************************* -** CommandLineTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "CommandLine.h" - -TEST(CommandLineTest, noarg_short) { - CommandLine cmd; - const char *args[] = {"progname", "-s", "-n", "-h"}; - char **argv = const_cast(args); - cmd.parse(4, argv, false); - - EXPECT_TRUE(cmd.stdout_given()); - EXPECT_TRUE(cmd.no_fonts_given()); - EXPECT_TRUE(cmd.help_given()); - EXPECT_FALSE(cmd.list_specials_given()); - EXPECT_FALSE(cmd.error()); - EXPECT_EQ(cmd.numFiles(), 0); -} - - -TEST(CommandLineTest, noarg_long) { - CommandLine cmd; - const char *args[] = {"progname", "--no-fonts", "--stdout", "--help"}; - char **argv = const_cast(args); - cmd.parse(4, argv, false); - - EXPECT_TRUE(cmd.stdout_given()); - EXPECT_TRUE(cmd.no_fonts_given()); - EXPECT_TRUE(cmd.help_given()); - EXPECT_FALSE(cmd.list_specials_given()); - EXPECT_FALSE(cmd.error()); - EXPECT_EQ(cmd.numFiles(), 0); -} - - -TEST(CommandLineTest, arg_short) { - CommandLine cmd; - const char *args[] = {"progname", "-p5", "-r45", "-omyfile.xyz", "-ayes"}; - char **argv = const_cast(args); - cmd.parse(5, argv, false); - - EXPECT_TRUE(cmd.page_given()); - EXPECT_EQ(cmd.page_arg(), "5"); - EXPECT_TRUE(cmd.rotate_given()); - EXPECT_EQ(cmd.rotate_arg(), 45); - EXPECT_TRUE(cmd.output_given()); - EXPECT_EQ(cmd.output_arg(), "myfile.xyz"); - EXPECT_FALSE(cmd.bbox_given()); - EXPECT_EQ(cmd.bbox_arg(), "min"); - EXPECT_FALSE(cmd.error()); - EXPECT_EQ(cmd.numFiles(), 0); - EXPECT_TRUE(cmd.trace_all_given()); - EXPECT_TRUE(cmd.trace_all_arg()); -} - - -TEST(CommandLineTest, arg_combined) { - CommandLine cmd; - const char *args[] = {"progname", "-lse", "-p5", "-omyfile.xyz"}; - char **argv = const_cast(args); - cmd.parse(4, argv, false); - - EXPECT_TRUE(cmd.page_given()); - EXPECT_EQ(cmd.page_arg(), "5"); - EXPECT_TRUE(cmd.list_specials_given()); - EXPECT_TRUE(cmd.stdout_given()); - EXPECT_TRUE(cmd.exact_given()); - EXPECT_FALSE(cmd.error()); -} - - -TEST(CommandLineTest, arg_separated) { - CommandLine cmd; - const char *args[] = {"progname", "-p", "5", "-r", "45", "myfile.xyz", "-afalse"}; - char **argv = const_cast(args); - cmd.parse(7, argv, false); - - EXPECT_TRUE(cmd.page_given()); - EXPECT_EQ(cmd.page_arg(), "5"); - EXPECT_TRUE(cmd.rotate_given()); - EXPECT_EQ(cmd.rotate_arg(), 45); - EXPECT_FALSE(cmd.error()); - EXPECT_EQ(cmd.numFiles(), 1); - EXPECT_TRUE(cmd.trace_all_given()); - EXPECT_FALSE(cmd.trace_all_arg()); -} - - -TEST(CommandLineTest, arg_long) { - CommandLine cmd; - const char *args[] = {"progname", "--page=9", "--rotate=-45.5", "--trace-all", "--output=myfile.zyx"}; - char **argv = const_cast(args); - cmd.parse(5, argv, false); - - EXPECT_TRUE(cmd.page_given()); - EXPECT_EQ(cmd.page_arg(), "9"); - EXPECT_TRUE(cmd.rotate_given()); - EXPECT_EQ(cmd.rotate_arg(), -45.5); - EXPECT_TRUE(cmd.output_given()); - EXPECT_EQ(cmd.output_arg(), "myfile.zyx"); - EXPECT_FALSE(cmd.bbox_given()); - EXPECT_EQ(cmd.bbox_arg(), "min"); - EXPECT_FALSE(cmd.error()); - EXPECT_EQ(cmd.numFiles(), 0); - EXPECT_TRUE(cmd.trace_all_given()); - EXPECT_FALSE(cmd.trace_all_arg()); -} - - -TEST(CommandLineTest, abbrev_long) { - CommandLine cmd; - const char *args[] = {"progname", "--pa=9", "--rot=-45.5", "--out=myfile.zyx"}; - char **argv = const_cast(args); - cmd.parse(4, argv, false); - - EXPECT_TRUE(cmd.page_given()); - EXPECT_EQ(cmd.page_arg(), "9"); - EXPECT_TRUE(cmd.rotate_given()); - EXPECT_EQ(cmd.rotate_arg(), -45.5); - EXPECT_TRUE(cmd.output_given()); - EXPECT_EQ(cmd.output_arg(), "myfile.zyx"); - EXPECT_FALSE(cmd.bbox_given()); - EXPECT_EQ(cmd.bbox_arg(), "min"); - EXPECT_FALSE(cmd.error()); - EXPECT_EQ(cmd.numFiles(), 0); -} - - -TEST(CommandLineTest, error) { - CommandLine cmd; - // error on wrong argument type - const char *args1[] = {"progname", "--rotate=x"}; - char **argv = const_cast(args1); - cmd.parse(2, argv, false); - - EXPECT_FALSE(cmd.rotate_given()); - EXPECT_TRUE(cmd.error()); - - // error on missing arguments - const char *args2[] = {"progname", "--page", "--zip"}; - argv = const_cast(args2); - cmd.parse(3, argv, false); - EXPECT_TRUE(cmd.zip_given()); - EXPECT_EQ(cmd.zip_arg(), 9); - EXPECT_FALSE(cmd.page_given()); - EXPECT_FALSE(cmd.rotate_given()); - EXPECT_TRUE(cmd.error()); - EXPECT_EQ(cmd.numFiles(), 0); - - // error on ambiguous abbreviation of long option - const char *args3[] = {"progname", "--no"}; - argv = const_cast(args3); - cmd.parse(2, argv, false); - EXPECT_TRUE(cmd.error()); - - // incorrect boolean value - const char *args4[] = {"progname", "--trace-all=nope"}; - argv = const_cast(args4); - cmd.parse(2, argv, false); - EXPECT_FALSE(cmd.trace_all_given()); - EXPECT_TRUE(cmd.error()); -} - - -TEST(CommandLineTest, file) { - CommandLine cmd; - const char *args1[] = {"progname", "--page=3", "-z5", "myfile1", "-l", "myfile2"}; - char **argv = const_cast(args1); - cmd.parse(6, argv, false); - - EXPECT_TRUE(cmd.page_given()); - EXPECT_EQ(cmd.page_arg(), "3"); - EXPECT_TRUE(cmd.zip_given()); - EXPECT_EQ(cmd.zip_arg(), 5); - EXPECT_TRUE(cmd.list_specials_given()); - EXPECT_EQ(cmd.numFiles(), 2); - EXPECT_EQ(strcmp(cmd.file(0), "myfile1"), 0); - EXPECT_EQ(strcmp(cmd.file(1), "myfile2"), 0); - EXPECT_FALSE(cmd.error()); -} - - -TEST(CommandLineTest, files_only) { - CommandLine cmd; - const char *args1[] = {"progname", "--page=3", "-z5", "--", "-l", "myfile"}; - char **argv = const_cast(args1); - cmd.parse(6, argv, false); - - EXPECT_TRUE(cmd.page_given()); - EXPECT_EQ(cmd.page_arg(), "3"); - EXPECT_TRUE(cmd.zip_given()); - EXPECT_EQ(cmd.zip_arg(), 5); - EXPECT_EQ(cmd.numFiles(), 2); - EXPECT_EQ(strcmp(cmd.file(0), "-l"), 0); - EXPECT_EQ(strcmp(cmd.file(1), "myfile"), 0); -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/DirectoryTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/DirectoryTest.cpp deleted file mode 100644 index 37b46b7c080..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/DirectoryTest.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/************************************************************************* -** DirectoryTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include -#include "Directory.h" -#include "FileSystem.h" -#include "macros.h" - -#ifndef SRCDIR -#define SRCDIR "." -#endif - - -using namespace std; - -TEST(DirectoryTest, dirs) { - const char *dirs_to_find[] = {"doc", "src", 0}; - set found_dirs; - Directory dir(".."); - while (const char *dname = dir.read('d')) - found_dirs.insert(dname); - for (const char **p=dirs_to_find; *p; ++p) { - EXPECT_TRUE(found_dirs.find(*p) != found_dirs.end()); - } -} - - -TEST(DirectoryTest, file) { - const char *files_to_find[] = { - "Bitmap.cpp", "BoundingBox.cpp", "Calculator.cpp", - "Directory.cpp", "DVIReader.cpp", "DVIToSVG.cpp", "DVIToSVGActions.cpp", - "FileSystem.cpp", "Font.cpp", "FontEngine.cpp", "FontManager.cpp", - "FontMap.cpp", "GFReader.cpp", "GFTracer.cpp", "FileFinder.cpp", "Message.cpp", - "MetafontWrapper.cpp", "PageSize.cpp", "StreamReader.cpp", - "TFM.cpp", "VFReader.cpp", "XMLDocument.cpp", "XMLNode.cpp", "XMLString.cpp", - 0 - }; - set found_files; - Directory dir(string(SRCDIR)+"/../src"); - while (const char *fname = dir.read('f')) - found_files.insert(fname); - for (const char **p=files_to_find; *p; ++p) { - EXPECT_TRUE(found_files.find(*p) != found_files.end()); - } - EXPECT_TRUE(found_files.find("tests") == found_files.end()); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FileFinderTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FileFinderTest.cpp deleted file mode 100644 index 64772a1f8d2..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FileFinderTest.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/************************************************************************* -** FileFinderTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "FileFinder.h" - -using std::ifstream; - - -class FileFinderTest : public ::testing::Test -{ - protected: - void SetUp () { - FileFinder::init("FileFinderTest", false); - } - - void TearDown () { - FileFinder::finish(); - } -}; - - -TEST_F(FileFinderTest, find_base_file) { - const char *path = FileFinder::lookup("cmr10.tfm"); - EXPECT_TRUE(path); - ifstream ifs(path); - EXPECT_TRUE(ifs); -} - - -TEST_F(FileFinderTest, find_mapped_file) { - // mapped base tfm file => should be resolved by kpathsea - // circle10.tfm is usually mapped to lcircle.tfm - if (const char *path = FileFinder::lookup("circle10.tfm")) { - EXPECT_TRUE(path); - ifstream ifs(path); - EXPECT_TRUE(ifs); - } - - // mapped lm font => should be resolved using dvisvgm's FontMap - // cork-lmr10 is usually mapped to lmr10 - bool have_lmodern = FileFinder::lookup("lmodern.sty"); - if (have_lmodern) { // package lmodern installed? - if (const char *path = FileFinder::lookup("cork-lmr10.pfb")) { - ifstream ifs(path); - EXPECT_TRUE(ifs); - } - } -} - - -TEST_F(FileFinderTest, mktexmf) { - // ensure availability of ec font => call mktexmf if necessary - if (const char *path = FileFinder::lookup("ecrm2000.mf")) { - ifstream ifs(path); - EXPECT_TRUE(ifs); - } -} - - -TEST_F(FileFinderTest, find_unavailable_file) { - const char *path = FileFinder::lookup("not-available.xyz"); - EXPECT_FALSE(path); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FilePathTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FilePathTest.cpp deleted file mode 100644 index 04449fcf919..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FilePathTest.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/************************************************************************* -** FilePathTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "FilePath.h" -#include "FileSystem.h" - -using namespace std; - - -TEST(FilePathTest, dir1) { - FilePath fp("a/b/c/d", false, "/"); - ASSERT_EQ(fp.absolute(), "/a/b/c/d"); - ASSERT_EQ(fp.relative("/"), "a/b/c/d"); - ASSERT_EQ(fp.relative("/a/b"), "c/d"); - ASSERT_EQ(fp.relative("/a/b/c"), "d"); - ASSERT_EQ(fp.relative("/a/b/c/d"), "."); - ASSERT_EQ(fp.relative("/a/b/x"), "../c/d"); - ASSERT_EQ(fp.relative("/a/b/x/y"), "../../c/d"); -} - - -TEST(FilePathTest, dir2) { - FilePath fp("a/b/c/d", false, "/x/y"); - ASSERT_EQ(fp.absolute(), "/x/y/a/b/c/d"); - ASSERT_EQ(fp.relative("/"), "x/y/a/b/c/d"); - ASSERT_EQ(fp.relative("/x/y/a/b"), "c/d"); - ASSERT_EQ(fp.relative("/x/y/a/b/c"), "d"); - ASSERT_EQ(fp.relative("/x/y/a/b/c/d"), "."); - ASSERT_EQ(fp.relative("/x/y/a/b/x"), "../c/d"); - ASSERT_EQ(fp.relative("/x/y/a/b/x/y"), "../../c/d"); -} - - -TEST(FilePathTest, file1) { - FilePath fp("a/b/c/d/f.ext", true, "/"); - ASSERT_EQ(fp.absolute(), "/a/b/c/d/f.ext"); - ASSERT_EQ(fp.relative("/"), "a/b/c/d/f.ext"); - ASSERT_EQ(fp.relative("/a/b"), "c/d/f.ext"); - ASSERT_EQ(fp.relative("/a/b/c"), "d/f.ext"); - ASSERT_EQ(fp.relative("/a/b/c/d"), "f.ext"); - ASSERT_EQ(fp.relative("/a/b/x"), "../c/d/f.ext"); - ASSERT_EQ(fp.relative("/a/b/x/y"), "../../c/d/f.ext"); - ASSERT_EQ(fp.basename(), "f"); - ASSERT_EQ(fp.suffix(), "ext"); - fp.suffix("new"); - ASSERT_EQ(fp.suffix(), "new"); - ASSERT_EQ(fp.relative("/a/b/x/y"), "../../c/d/f.new"); -} - - -TEST(FilePathTest, file2) { - FilePath fp("/f.ext", true, "/"); - ASSERT_EQ(fp.absolute(), "/f.ext"); - ASSERT_EQ(fp.relative("/a/b"), "../../f.ext"); -} - - -TEST(FilePathTest, autodetect) { - FilePath fp1("FilePathTest.cpp"); - ASSERT_TRUE(fp1.isFile()); - ASSERT_FALSE(fp1.empty()); - string cwd = FileSystem::getcwd(); - ASSERT_EQ(fp1.absolute(), cwd + "/FilePathTest.cpp"); - - FilePath fp2(""); - ASSERT_FALSE(fp2.isFile()); - ASSERT_FALSE(fp2.empty()); - ASSERT_EQ(fp2.absolute(), FileSystem::getcwd()); -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FileSystemTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FileSystemTest.cpp deleted file mode 100644 index 5b8c6912d31..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FileSystemTest.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/************************************************************************* -** FileSystemTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "FileSystem.h" - -#ifndef SRCDIR -#define SRCDIR "." -#endif - -using namespace std; - - -TEST(FileSystemTest, exists) { - EXPECT_TRUE(FileSystem::exists(SRCDIR"/FileSystemTest.cpp")); - EXPECT_FALSE(FileSystem::exists(SRCDIR"/FileSystemTest.cxx")); -} - - -TEST(FileSystemTest, filetype) { - EXPECT_TRUE(FileSystem::isFile(SRCDIR"/FileSystemTest.cpp")); - EXPECT_FALSE(FileSystem::isDirectory(SRCDIR"/FileSystemTest.cpp")); - EXPECT_TRUE(FileSystem::isDirectory("../tests")); - EXPECT_FALSE(FileSystem::isFile("../tests")); -} - - -TEST(FileSystemTest, remove) { - const char *tmpfile = "out.tmp"; - ofstream ofs(tmpfile); - ofs << "FileSystemTest::remove\n"; - ofs.close(); - EXPECT_TRUE(FileSystem::exists(tmpfile)); - FileSystem::remove(tmpfile); - EXPECT_FALSE(FileSystem::exists(tmpfile)); -} - - -TEST(FileSystemTest, rename) { - const char *tmpfile1 = "out.tmp"; - const char *tmpfile2 = "out-new.tmp"; - ofstream ofs(tmpfile1); - ofs << "FileSystemTest::remove\n"; - ofs.close(); - EXPECT_TRUE(FileSystem::exists(tmpfile1)); - FileSystem::rename(tmpfile1, tmpfile2); - EXPECT_FALSE(FileSystem::exists(tmpfile1)); - EXPECT_TRUE(FileSystem::exists(tmpfile2)); - FileSystem::remove(tmpfile2); - EXPECT_FALSE(FileSystem::exists(tmpfile2)); -} - - -TEST(FileSystemTest, filesize) { - const char *tmpfile = "out.tmp"; - ofstream ofs(tmpfile, ios::binary); - for (int i=0; i < 123; ++i) - ofs.put(i); - ofs.close(); - EXPECT_EQ(FileSystem::filesize(tmpfile), 123); - FileSystem::remove(tmpfile); -} - - -TEST(FileSystemTest, copy) { - const char *tmpfile1 = "out.tmp"; - const char *tmpfile2 = "out-new.tmp"; - ofstream ofs(tmpfile1); - ofs << "FileSystemTest::copy\n"; - ofs.close(); - FileSystem::copy(tmpfile1, tmpfile2); - ifstream ifs1(tmpfile1); - ifstream ifs2(tmpfile2); - EXPECT_TRUE(ifs1 && ifs2); - while (!ifs1.eof()) { - EXPECT_EQ(ifs1.get(), ifs2.get()); - } - EXPECT_TRUE(ifs2.eof()); - FileSystem::remove(tmpfile1); - FileSystem::remove(tmpfile2); -} - - -TEST(FileSystemTest, move) { - const char *tmpfile1 = "out.tmp"; - const char *tmpfile2 = "out-new.tmp"; - ofstream ofs(tmpfile1); - const char *str = "FileSystemTest::copy\n"; - ofs << str; - ofs.close(); - FileSystem::copy(tmpfile1, tmpfile2, true); - ifstream ifs1(tmpfile1); - ifstream ifs2(tmpfile2); - EXPECT_TRUE(!ifs1 && ifs2); - while (*str) { - EXPECT_EQ(*str++, ifs2.get()); - } - ifs2.get(); - EXPECT_TRUE(ifs2.eof()); - FileSystem::remove(tmpfile2); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FontManagerTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FontManagerTest.cpp deleted file mode 100644 index e7259b80f7c..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FontManagerTest.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/************************************************************************* -** FontManagerTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "Font.h" -#include "FontManager.h" -#include "FileFinder.h" - -class FontManagerTest : public ::testing::Test -{ - protected: - void SetUp () { - FileFinder::init("FontManagerTest", false); - FontManager &fm = FontManager::instance(); - fm.registerFont(10, "cmr10", 1274110073, 10, 10); - fm.registerFont(11, "cmr10", 1274110073, 10, 12); - fm.registerFont( 9, "cmr10", 1274110073, 10, 14); - } -}; - - -TEST_F(FontManagerTest, fontID1) { - FontManager &fm = FontManager::instance(); - EXPECT_EQ(fm.fontID(10), 0); - EXPECT_EQ(fm.fontID(11), 1); - EXPECT_EQ(fm.fontID(9), 2); - EXPECT_EQ(fm.fontID(1), -1); -} - - -TEST_F(FontManagerTest, font_ID2) { - FontManager &fm = FontManager::instance(); - EXPECT_EQ(fm.fontID("cmr10"), 0); -} - - -TEST_F(FontManagerTest, getFont) { - FontManager &fm = FontManager::instance(); - const Font *f1 = fm.getFont(10); - EXPECT_TRUE(f1); - EXPECT_EQ(f1->name(), "cmr10"); - EXPECT_TRUE(dynamic_cast(f1)); - - const Font *f2 = fm.getFont(11); - EXPECT_TRUE(f2); - EXPECT_NE(f1, f2); - EXPECT_EQ(f2->name(), "cmr10"); - EXPECT_TRUE(dynamic_cast(f2)); - EXPECT_EQ(f2->uniqueFont(), f1); -} - - -TEST_F(FontManagerTest, getFontById) { - FontManager &fm = FontManager::instance(); - EXPECT_EQ(fm.getFont(10), fm.getFontById(0)); - EXPECT_EQ(fm.getFont("cmr10"), fm.getFontById(0)); -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FontMapTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FontMapTest.cpp deleted file mode 100644 index 92bd6420724..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/FontMapTest.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/************************************************************************* -** FontMapTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "FontMap.h" - -using std::ifstream; - -TEST(FontMapTest, pdf_map) { - const char *fname = "tests/dvipdfm_test.map"; - ifstream ifs(fname); - if (ifs) { - FontMap fm(fname); - EXPECT_EQ(strcmp(fm.lookup("MyriadPro-Bold-8t"), "MyriadPro-Bold"), 0); - EXPECT_EQ(strcmp(fm.lookup("cmbsy8"), "cmbsy7"), 0); - // entry without mapped name - EXPECT_EQ(fm.lookup("msam10"), (const char*)0); - EXPECT_EQ(fm.lookup("msbm10"), (const char*)0); - EXPECT_EQ(fm.lookup("msbm10"), (const char*)0); - EXPECT_EQ(fm.lookup("i don't exist"), (const char*)0); - - EXPECT_EQ(strcmp(fm.encoding("MyriadPro-Bold-8t"), "my-lf-t1"), 0); - EXPECT_EQ(fm.encoding("cmbsy8"), (const char*)0); - } -} - - -TEST(FontMapTest, ps_map) { - const char *fname = "tests/dvips_test.map"; - ifstream ifs(fname); - if (ifs) { - FontMap fm(fname); - EXPECT_EQ(strcmp(fm.lookup("MyriadPro-Bold-8t"), "MyriadPro-Bold"), 0); - EXPECT_EQ(strcmp(fm.lookup("cmbsy8"), "cmbsy7"), 0); - // entry without mapped name - EXPECT_EQ(fm.lookup("msam10"), (const char*)0); - EXPECT_EQ(fm.lookup("msbm10"), (const char*)0); - EXPECT_EQ(fm.lookup("msbm10"), (const char*)0); - EXPECT_EQ(fm.lookup("i don't exist"), (const char*)0); - - EXPECT_EQ(strcmp(fm.encoding("MyriadPro-Bold-8t"), "my-lf-t1"), 0); - EXPECT_EQ(fm.encoding("cmbsy8"), (const char*)0); - - } -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/GFReaderTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/GFReaderTest.cpp deleted file mode 100644 index ae527feddbf..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/GFReaderTest.cpp +++ /dev/null @@ -1,252 +0,0 @@ -/************************************************************************* -** GFReaderTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include -#include -#include "GFReader.h" -#include "macros.h" - -#ifndef SRCDIR -#define SRCDIR "." -#endif - -using namespace std; - - -struct PixelActions : public Bitmap::ForAllData -{ - void pixel (int x, int y, bool set, const Bitmap &bm) { - if (charmap.size() == 0) { - charmap.resize(bm.height()); - for (int i=0; i < bm.height(); i++) - charmap[i] = string(bm.width(), ' '); - } - ASSERT_GE(x, 0); - ASSERT_LT(x, bm.width()); - ASSERT_GE(y, 0); - ASSERT_LT(y, bm.height()); - charmap[y][x] = (set ? '*' : '-'); - } - - vector charmap; -}; - - -const char *letter_a[] = { - "-----------********--------------------", - "--------**************-----------------", - "------*****-------******---------------", - "-----***------------*****--------------", - "----*****------------******------------", - "---*******------------******-----------", - "---********-----------******-----------", - "---********------------******----------", - "---********------------******----------", - "---********-------------******---------", - "----******--------------******---------", - "-----****---------------******---------", - "------------------------******---------", - "------------------------******---------", - "------------------------******---------", - "------------------------******---------", - "-----------------*************---------", - "-------------*****************---------", - "----------*********-----******---------", - "--------*******---------******---------", - "------*******-----------******---------", - "----********------------******---------", - "---*******--------------******---------", - "--********--------------******---------", - "-********---------------******---------", - "-*******----------------******---------", - "-*******----------------******------**-", - "*******-----------------******------**-", - "*******-----------------******------**-", - "*******-----------------******------**-", - "*******----------------*******------**-", - "*******----------------*******------**-", - "********--------------********------**-", - "-*******-------------***-*****------**-", - "-********------------**---*****----**--", - "--********---------****---*****----**--", - "----*******------****------*********---", - "------**************--------*******----", - "---------********------------*****-----", -}; - - -const char *letter_g[] = { - "------------------------------******---", - "------------********--------*********--", - "----------************----****----****-", - "--------*****------*****-***-----*****-", - "-------*****--------*******------*****-", - "------*****----------*****-------*****-", - "-----*****------------*****--------*---", - "----******------------******-----------", - "----******------------******-----------", - "---******--------------******----------", - "---******--------------******----------", - "---******--------------******----------", - "---******--------------******----------", - "---******--------------******----------", - "---******--------------******----------", - "---******--------------******----------", - "---******--------------******----------", - "----******------------******-----------", - "----******------------******-----------", - "-----*****------------*****------------", - "------*****----------*****-------------", - "------******--------*****--------------", - "------*******------*****---------------", - "-----***--************-----------------", - "-----**-----********-------------------", - "----***--------------------------------", - "----***--------------------------------", - "----***--------------------------------", - "----***--------------------------------", - "----****-------------------------------", - "----****-------------------------------", - "----******-----------------------------", - "-----*********************-------------", - "-----************************----------", - "------*************************--------", - "-------**************************------", - "------****************************-----", - "----*****----------------**********----", - "---*****--------------------********---", - "--*****-----------------------******---", - "-*****-------------------------*****---", - "-*****-------------------------******--", - "*****---------------------------*****--", - "*****---------------------------*****--", - "*****---------------------------*****--", - "*****---------------------------*****--", - "*****---------------------------*****--", - "******-------------------------******--", - "-*****-------------------------*****---", - "--*****-----------------------*****----", - "--******---------------------******----", - "----*****-------------------*****------", - "-----******---------------******-------", - "-------*******---------*******---------", - "---------*******************-----------", - "-------------***********---------------", -}; - - -const char *letter_M[] = { - "****************-------------------------------------****************-", - "*****************-----------------------------------*****************-", - "*****************-----------------------------------*****************-", - "-------**********-----------------------------------**********--------", - "--------**-*******---------------------------------**-*******---------", - "--------**-*******---------------------------------**-*******---------", - "--------**--*******-------------------------------**--*******---------", - "--------**--*******-------------------------------**--*******---------", - "--------**--*******-------------------------------**--*******---------", - "--------**---*******-----------------------------**---*******---------", - "--------**---*******-----------------------------**---*******---------", - "--------**---*******-----------------------------**---*******---------", - "--------**----*******---------------------------**----*******---------", - "--------**----*******---------------------------**----*******---------", - "--------**-----*******-------------------------**-----*******---------", - "--------**-----*******-------------------------**-----*******---------", - "--------**-----*******-------------------------**-----*******---------", - "--------**------*******-----------------------**------*******---------", - "--------**------*******-----------------------**------*******---------", - "--------**-------*******---------------------**-------*******---------", - "--------**-------*******---------------------**-------*******---------", - "--------**-------*******---------------------**-------*******---------", - "--------**--------*******-------------------**--------*******---------", - "--------**--------*******-------------------**--------*******---------", - "--------**--------*******-------------------**--------*******---------", - "--------**---------*******-----------------**---------*******---------", - "--------**---------*******-----------------**---------*******---------", - "--------**----------*******---------------**----------*******---------", - "--------**----------*******---------------**----------*******---------", - "--------**----------*******---------------**----------*******---------", - "--------**-----------*******-------------**-----------*******---------", - "--------**-----------*******-------------**-----------*******---------", - "--------**------------*******-----------**------------*******---------", - "--------**------------*******-----------**------------*******---------", - "--------**------------*******-----------**------------*******---------", - "--------**-------------*******---------**-------------*******---------", - "--------**-------------*******---------**-------------*******---------", - "--------**-------------*******---------**-------------*******---------", - "--------**--------------*******-------**--------------*******---------", - "--------**--------------*******-------**--------------*******---------", - "--------**---------------*******-----**---------------*******---------", - "--------**---------------*******-----**---------------*******---------", - "--------**---------------*******-----**---------------*******---------", - "--------**----------------*******---**----------------*******---------", - "--------**----------------*******---**----------------*******---------", - "--------**-----------------*******-**-----------------*******---------", - "--------**-----------------*******-**-----------------*******---------", - "--------**-----------------*******-**-----------------*******---------", - "--------**------------------********------------------*******---------", - "--------**------------------********------------------*******---------", - "--------**------------------********------------------*******---------", - "-------****------------------******-------------------*******---------", - "------******-----------------******-------------------*******---------", - "----**********----------------****-------------------*********--------", - "******************------------****------------***********************-", - "******************------------****------------***********************-", - "******************-------------**-------------***********************-", -}; - - -static void check_letter (const char **lettermap, const vector &charmap) { - for (size_t i=0; i < charmap.size(); i++) - ASSERT_EQ(lettermap[i], charmap[charmap.size()-i-1]); -} - - -TEST(GFReaderTest, executeChar) { - string gf = string(SRCDIR)+"/cmr10.600gf"; - ifstream ifs(gf.c_str()); - ASSERT_TRUE(ifs); - GFReader gfReader(ifs); - PixelActions actions; - - gfReader.executeChar('a'); - ASSERT_EQ(gfReader.getBitmap().width(), 39); - ASSERT_EQ(gfReader.getBitmap().height(), 39); - gfReader.getBitmap().forAllPixels(actions); - check_letter(letter_a, actions.charmap); - - actions.charmap.clear(); - gfReader.executeChar('g'); - ASSERT_EQ(gfReader.getBitmap().width(), 39); - ASSERT_EQ(gfReader.getBitmap().height(), 56); - gfReader.getBitmap().forAllPixels(actions); - check_letter(letter_g, actions.charmap); - - actions.charmap.clear(); - gfReader.executeChar('M'); - ASSERT_EQ(gfReader.getBitmap().width(), 70); - ASSERT_EQ(gfReader.getBitmap().height(), 57); - gfReader.getBitmap().forAllPixels(actions); - check_letter(letter_M, actions.charmap); -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/GraphicPathTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/GraphicPathTest.cpp deleted file mode 100644 index 6263dc90178..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/GraphicPathTest.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/************************************************************************* -** GraphicPathTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "GraphicPath.h" - -using std::ostringstream; - -TEST(GraphicPathTest, svg) { - GraphicPath path; - path.moveto(0,0); - path.lineto(10,10); - path.cubicto(20,20,30,30,40,40); - path.closepath(); - ostringstream oss; - path.writeSVG(oss); - EXPECT_EQ(oss.str(), "M0 0L10 10C20 20 30 30 40 40Z"); -} - - -TEST(GraphicPathTest, optimize) { - GraphicPath path; - path.moveto(0,0); - path.lineto(10,0); - path.lineto(10,20); - ostringstream oss; - path.writeSVG(oss); - EXPECT_EQ(oss.str(), "M0 0H10V20"); -} - - -TEST(GraphicPathTest, transform) { - GraphicPath path; - path.moveto(0,0); - path.lineto(1,0); - path.lineto(1,1); - path.lineto(0,1); - path.closepath(); - Matrix m(1); - m.scale(2,2); - m.translate(10, 100); - m.rotate(90); - path.transform(m); - ostringstream oss; - path.writeSVG(oss); - EXPECT_EQ(oss.str(), "M-100 10V12H-102V10Z"); -} - - -TEST(GraphicPathTest, closeOpenSubPaths) { - GraphicPath path; - path.moveto(0,0); - path.lineto(1,0); - path.lineto(1,1); - path.lineto(0,1); - path.moveto(10,10); - path.lineto(11,10); - path.lineto(11,11); - path.lineto(10,11); - path.closeOpenSubPaths(); - ostringstream oss; - path.writeSVG(oss); - EXPECT_EQ(oss.str(), "M0 0H1V1H0ZM10 10H11V11H10Z"); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/LengthTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/LengthTest.cpp deleted file mode 100644 index c7c38f755c4..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/LengthTest.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/************************************************************************* -** LengthTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include "Length.h" - -TEST(LengthTest, set1) { - Length len; - len.set(1, Length::PT); - EXPECT_EQ(len.pt(), 1); - - len.set(72, Length::BP); - EXPECT_EQ(len.pt(), 72.27); - EXPECT_EQ(len.bp(), 72); - EXPECT_EQ(len.in(), 1); - - len.set(1, Length::IN); - EXPECT_EQ(len.pt(), 72.27); - - len.set(12, Length::PC); - EXPECT_EQ(len.pt(), 72.27); - EXPECT_EQ(len.in(), 1); - - len.set(2.54, Length::CM); - EXPECT_EQ(len.pt(), 72.27); - EXPECT_EQ(len.cm(), 2.54); - EXPECT_EQ(len.mm(), 25.4); - - len.set(25.4, Length::MM); - EXPECT_EQ(len.pt(), 72.27); - EXPECT_EQ(len.cm(), 2.54); - EXPECT_EQ(len.mm(), 25.4); -} - - -TEST(LengthTest, set2) { - Length len; - len.set(1, "pt"); - EXPECT_EQ(len.pt(), 1); - - len.set(72, "bp"); - EXPECT_EQ(len.pt(), 72.27); - EXPECT_EQ(len.bp(), 72); - EXPECT_EQ(len.in(), 1); - EXPECT_EQ(len.pc(), 12); - - len.set(1, "in"); - EXPECT_EQ(len.pt(), 72.27); - - len.set(12, "pc"); - EXPECT_EQ(len.pt(), 72.27); - EXPECT_EQ(len.in(), 1); - EXPECT_EQ(len.pc(), 12); - - len.set(2.54, "cm"); - EXPECT_EQ(len.pt(), 72.27); - EXPECT_EQ(len.cm(), 2.54); - EXPECT_EQ(len.mm(), 25.4); - - len.set(10, "mm"); - EXPECT_EQ(len.cm(), 1); - EXPECT_EQ(len.mm(), 10); - - len.set(1, ""); - EXPECT_EQ(len.pt(), 1); - - ASSERT_THROW(len.set(1, "xy"), UnitException); -} - -TEST(LengthTest, set3) { - Length len; - len.set("1pt"); - EXPECT_EQ(len.pt(), 1); - - len.set("72bp"); - EXPECT_EQ(len.pt(), 72.27); - EXPECT_EQ(len.bp(), 72); - EXPECT_EQ(len.in(), 1); - EXPECT_EQ(len.pc(), 12); - - len.set("1in"); - EXPECT_EQ(len.pt(), 72.27); - - len.set("12pc"); - EXPECT_EQ(len.pt(), 72.27); - EXPECT_EQ(len.in(), 1); - EXPECT_EQ(len.pc(), 12); - - len.set("2.54cm"); - EXPECT_EQ(len.pt(), 72.27); - EXPECT_EQ(len.cm(), 2.54); - EXPECT_EQ(len.mm(), 25.4); - - len.set("10mm"); - EXPECT_EQ(len.cm(), 1); - EXPECT_EQ(len.mm(), 10); - - len.set("1"); - EXPECT_EQ(len.pt(), 1); - - ASSERT_THROW(len.set("1xy"), UnitException); - ASSERT_THROW(len.set("pt"), UnitException); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/Makefile.am b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/Makefile.am deleted file mode 100644 index 44ec80dd990..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/Makefile.am +++ /dev/null @@ -1,145 +0,0 @@ -## This file is part of dvisvgm -## Copyright (C) 2005-2011 Martin Gieseking -## -## Process this file with automake. - -AM_CXXFLAGS = -I$(srcdir)/../src -I$(srcdir)/../../src -Wall -DSRCDIR='"$(srcdir)"' - -TESTS = -check_PROGRAMS = - -TESTS += BoundingBoxTest -check_PROGRAMS += BoundingBoxTest -BoundingBoxTest_SOURCES = BoundingBoxTest.cpp -BoundingBoxTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += CalculatorTest -check_PROGRAMS += CalculatorTest -CalculatorTest_SOURCES = CalculatorTest.cpp -CalculatorTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += ColorSpecialTest -check_PROGRAMS += ColorSpecialTest -ColorSpecialTest_SOURCES = ColorSpecialTest.cpp -ColorSpecialTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += CommandLineTest -check_PROGRAMS += CommandLineTest -CommandLineTest_SOURCES = CommandLineTest.cpp -CommandLineTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += CRC32Test -check_PROGRAMS += CRC32Test -CRC32Test_SOURCES = CRC32Test.cpp -CRC32Test_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += DirectoryTest -check_PROGRAMS += DirectoryTest -DirectoryTest_SOURCES = DirectoryTest.cpp -DirectoryTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += FileFinderTest -check_PROGRAMS += FileFinderTest -FileFinderTest_SOURCES = FileFinderTest.cpp -FileFinderTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += FilePathTest -check_PROGRAMS += FilePathTest -FilePathTest_SOURCES = FilePathTest.cpp -FilePathTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += FileSystemTest -check_PROGRAMS += FileSystemTest -FileSystemTest_SOURCES = FileSystemTest.cpp -FileSystemTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += FontManagerTest -check_PROGRAMS += FontManagerTest -FontManagerTest_SOURCES = FontManagerTest.cpp -FontManagerTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += FontMapTest -check_PROGRAMS += FontMapTest -FontMapTest_SOURCES = FontMapTest.cpp -FontMapTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += GFReaderTest -check_PROGRAMS += GFReaderTest -GFReaderTest_SOURCES = GFReaderTest.cpp -GFReaderTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += GraphicPathTest -check_PROGRAMS += GraphicPathTest -GraphicPathTest_SOURCES = GraphicPathTest.cpp -GraphicPathTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += LengthTest -check_PROGRAMS += LengthTest -LengthTest_SOURCES = LengthTest.cpp -LengthTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += MatrixTest -check_PROGRAMS += MatrixTest -MatrixTest_SOURCES = MatrixTest.cpp -MatrixTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += MessageExceptionTest -check_PROGRAMS += MessageExceptionTest -MessageExceptionTest_SOURCES = MessageExceptionTest.cpp -MessageExceptionTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += PageRagesTest -check_PROGRAMS += PageRagesTest -PageRagesTest_SOURCES = PageRagesTest.cpp -PageRagesTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += PageSizeTest -check_PROGRAMS += PageSizeTest -PageSizeTest_SOURCES = PageSizeTest.cpp -PageSizeTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += PairTest -check_PROGRAMS += PairTest -PairTest_SOURCES = PairTest.cpp -PairTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += PSInterpreterTest -check_PROGRAMS += PSInterpreterTest -PSInterpreterTest_SOURCES = PSInterpreterTest.cpp -PSInterpreterTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += SplittedCharInputBufferTest -check_PROGRAMS += SplittedCharInputBufferTest -SplittedCharInputBufferTest_SOURCES = SplittedCharInputBufferTest.cpp -SplittedCharInputBufferTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += StreamInputBufferTest -check_PROGRAMS += StreamInputBufferTest -StreamInputBufferTest_SOURCES = StreamInputBufferTest.cpp -StreamInputBufferTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += StreamReaderTest -check_PROGRAMS += StreamReaderTest -StreamReaderTest_SOURCES = StreamReaderTest.cpp -StreamReaderTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += StreamWriterTest -check_PROGRAMS += StreamWriterTest -StreamWriterTest_SOURCES = StreamWriterTest.cpp -StreamWriterTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += TypesTest -check_PROGRAMS += TypesTest -TypesTest_SOURCES = TypesTest.cpp -TypesTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTS += VectorStreamTest -check_PROGRAMS += VectorStreamTest -VectorStreamTest_SOURCES = VectorStreamTest.cpp -VectorStreamTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main - -TESTDATA = -TESTDATA += frktest.dvi frktest-wf-cmp.svg frktest-nf-cmp.svg -TESTDATA += sample.dvi sample-wf-cmp.svg sample-nf-cmp.svg -EXTRA_DIST = check-conv normalize.xsl cmr10.600gf $(TESTDATA) -TESTS += check-conv diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/Makefile.in b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/Makefile.in deleted file mode 100644 index 8919d065389..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/Makefile.in +++ /dev/null @@ -1,845 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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. - -@SET_MAKE@ -VPATH = @srcdir@ -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@ -target_triplet = @target@ -TESTS = BoundingBoxTest$(EXEEXT) CalculatorTest$(EXEEXT) \ - ColorSpecialTest$(EXEEXT) CommandLineTest$(EXEEXT) \ - CRC32Test$(EXEEXT) DirectoryTest$(EXEEXT) \ - FileFinderTest$(EXEEXT) FilePathTest$(EXEEXT) \ - FileSystemTest$(EXEEXT) FontManagerTest$(EXEEXT) \ - FontMapTest$(EXEEXT) GFReaderTest$(EXEEXT) \ - GraphicPathTest$(EXEEXT) LengthTest$(EXEEXT) \ - MatrixTest$(EXEEXT) MessageExceptionTest$(EXEEXT) \ - PageRagesTest$(EXEEXT) PageSizeTest$(EXEEXT) PairTest$(EXEEXT) \ - PSInterpreterTest$(EXEEXT) \ - SplittedCharInputBufferTest$(EXEEXT) \ - StreamInputBufferTest$(EXEEXT) StreamReaderTest$(EXEEXT) \ - StreamWriterTest$(EXEEXT) TypesTest$(EXEEXT) \ - VectorStreamTest$(EXEEXT) check-conv -check_PROGRAMS = BoundingBoxTest$(EXEEXT) CalculatorTest$(EXEEXT) \ - ColorSpecialTest$(EXEEXT) CommandLineTest$(EXEEXT) \ - CRC32Test$(EXEEXT) DirectoryTest$(EXEEXT) \ - FileFinderTest$(EXEEXT) FilePathTest$(EXEEXT) \ - FileSystemTest$(EXEEXT) FontManagerTest$(EXEEXT) \ - FontMapTest$(EXEEXT) GFReaderTest$(EXEEXT) \ - GraphicPathTest$(EXEEXT) LengthTest$(EXEEXT) \ - MatrixTest$(EXEEXT) MessageExceptionTest$(EXEEXT) \ - PageRagesTest$(EXEEXT) PageSizeTest$(EXEEXT) PairTest$(EXEEXT) \ - PSInterpreterTest$(EXEEXT) \ - SplittedCharInputBufferTest$(EXEEXT) \ - StreamInputBufferTest$(EXEEXT) StreamReaderTest$(EXEEXT) \ - StreamWriterTest$(EXEEXT) TypesTest$(EXEEXT) \ - VectorStreamTest$(EXEEXT) -subdir = tests -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am_BoundingBoxTest_OBJECTS = BoundingBoxTest.$(OBJEXT) -BoundingBoxTest_OBJECTS = $(am_BoundingBoxTest_OBJECTS) -BoundingBoxTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_CRC32Test_OBJECTS = CRC32Test.$(OBJEXT) -CRC32Test_OBJECTS = $(am_CRC32Test_OBJECTS) -CRC32Test_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_CalculatorTest_OBJECTS = CalculatorTest.$(OBJEXT) -CalculatorTest_OBJECTS = $(am_CalculatorTest_OBJECTS) -CalculatorTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_ColorSpecialTest_OBJECTS = ColorSpecialTest.$(OBJEXT) -ColorSpecialTest_OBJECTS = $(am_ColorSpecialTest_OBJECTS) -ColorSpecialTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_CommandLineTest_OBJECTS = CommandLineTest.$(OBJEXT) -CommandLineTest_OBJECTS = $(am_CommandLineTest_OBJECTS) -CommandLineTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_DirectoryTest_OBJECTS = DirectoryTest.$(OBJEXT) -DirectoryTest_OBJECTS = $(am_DirectoryTest_OBJECTS) -DirectoryTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_FileFinderTest_OBJECTS = FileFinderTest.$(OBJEXT) -FileFinderTest_OBJECTS = $(am_FileFinderTest_OBJECTS) -FileFinderTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_FilePathTest_OBJECTS = FilePathTest.$(OBJEXT) -FilePathTest_OBJECTS = $(am_FilePathTest_OBJECTS) -FilePathTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_FileSystemTest_OBJECTS = FileSystemTest.$(OBJEXT) -FileSystemTest_OBJECTS = $(am_FileSystemTest_OBJECTS) -FileSystemTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_FontManagerTest_OBJECTS = FontManagerTest.$(OBJEXT) -FontManagerTest_OBJECTS = $(am_FontManagerTest_OBJECTS) -FontManagerTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_FontMapTest_OBJECTS = FontMapTest.$(OBJEXT) -FontMapTest_OBJECTS = $(am_FontMapTest_OBJECTS) -FontMapTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_GFReaderTest_OBJECTS = GFReaderTest.$(OBJEXT) -GFReaderTest_OBJECTS = $(am_GFReaderTest_OBJECTS) -GFReaderTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_GraphicPathTest_OBJECTS = GraphicPathTest.$(OBJEXT) -GraphicPathTest_OBJECTS = $(am_GraphicPathTest_OBJECTS) -GraphicPathTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_LengthTest_OBJECTS = LengthTest.$(OBJEXT) -LengthTest_OBJECTS = $(am_LengthTest_OBJECTS) -LengthTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_MatrixTest_OBJECTS = MatrixTest.$(OBJEXT) -MatrixTest_OBJECTS = $(am_MatrixTest_OBJECTS) -MatrixTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_MessageExceptionTest_OBJECTS = MessageExceptionTest.$(OBJEXT) -MessageExceptionTest_OBJECTS = $(am_MessageExceptionTest_OBJECTS) -MessageExceptionTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_PSInterpreterTest_OBJECTS = PSInterpreterTest.$(OBJEXT) -PSInterpreterTest_OBJECTS = $(am_PSInterpreterTest_OBJECTS) -PSInterpreterTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_PageRagesTest_OBJECTS = PageRagesTest.$(OBJEXT) -PageRagesTest_OBJECTS = $(am_PageRagesTest_OBJECTS) -PageRagesTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_PageSizeTest_OBJECTS = PageSizeTest.$(OBJEXT) -PageSizeTest_OBJECTS = $(am_PageSizeTest_OBJECTS) -PageSizeTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_PairTest_OBJECTS = PairTest.$(OBJEXT) -PairTest_OBJECTS = $(am_PairTest_OBJECTS) -PairTest_DEPENDENCIES = ../src/libdvisvgm.a ../potracelib/libpotrace.a -am_SplittedCharInputBufferTest_OBJECTS = \ - SplittedCharInputBufferTest.$(OBJEXT) -SplittedCharInputBufferTest_OBJECTS = \ - $(am_SplittedCharInputBufferTest_OBJECTS) -SplittedCharInputBufferTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_StreamInputBufferTest_OBJECTS = StreamInputBufferTest.$(OBJEXT) -StreamInputBufferTest_OBJECTS = $(am_StreamInputBufferTest_OBJECTS) -StreamInputBufferTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_StreamReaderTest_OBJECTS = StreamReaderTest.$(OBJEXT) -StreamReaderTest_OBJECTS = $(am_StreamReaderTest_OBJECTS) -StreamReaderTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_StreamWriterTest_OBJECTS = StreamWriterTest.$(OBJEXT) -StreamWriterTest_OBJECTS = $(am_StreamWriterTest_OBJECTS) -StreamWriterTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_TypesTest_OBJECTS = TypesTest.$(OBJEXT) -TypesTest_OBJECTS = $(am_TypesTest_OBJECTS) -TypesTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -am_VectorStreamTest_OBJECTS = VectorStreamTest.$(OBJEXT) -VectorStreamTest_OBJECTS = $(am_VectorStreamTest_OBJECTS) -VectorStreamTest_DEPENDENCIES = ../src/libdvisvgm.a \ - ../potracelib/libpotrace.a -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ - -o $@ -SOURCES = $(BoundingBoxTest_SOURCES) $(CRC32Test_SOURCES) \ - $(CalculatorTest_SOURCES) $(ColorSpecialTest_SOURCES) \ - $(CommandLineTest_SOURCES) $(DirectoryTest_SOURCES) \ - $(FileFinderTest_SOURCES) $(FilePathTest_SOURCES) \ - $(FileSystemTest_SOURCES) $(FontManagerTest_SOURCES) \ - $(FontMapTest_SOURCES) $(GFReaderTest_SOURCES) \ - $(GraphicPathTest_SOURCES) $(LengthTest_SOURCES) \ - $(MatrixTest_SOURCES) $(MessageExceptionTest_SOURCES) \ - $(PSInterpreterTest_SOURCES) $(PageRagesTest_SOURCES) \ - $(PageSizeTest_SOURCES) $(PairTest_SOURCES) \ - $(SplittedCharInputBufferTest_SOURCES) \ - $(StreamInputBufferTest_SOURCES) $(StreamReaderTest_SOURCES) \ - $(StreamWriterTest_SOURCES) $(TypesTest_SOURCES) \ - $(VectorStreamTest_SOURCES) -DIST_SOURCES = $(BoundingBoxTest_SOURCES) $(CRC32Test_SOURCES) \ - $(CalculatorTest_SOURCES) $(ColorSpecialTest_SOURCES) \ - $(CommandLineTest_SOURCES) $(DirectoryTest_SOURCES) \ - $(FileFinderTest_SOURCES) $(FilePathTest_SOURCES) \ - $(FileSystemTest_SOURCES) $(FontManagerTest_SOURCES) \ - $(FontMapTest_SOURCES) $(GFReaderTest_SOURCES) \ - $(GraphicPathTest_SOURCES) $(LengthTest_SOURCES) \ - $(MatrixTest_SOURCES) $(MessageExceptionTest_SOURCES) \ - $(PSInterpreterTest_SOURCES) $(PageRagesTest_SOURCES) \ - $(PageSizeTest_SOURCES) $(PairTest_SOURCES) \ - $(SplittedCharInputBufferTest_SOURCES) \ - $(StreamInputBufferTest_SOURCES) $(StreamReaderTest_SOURCES) \ - $(StreamWriterTest_SOURCES) $(TypesTest_SOURCES) \ - $(VectorStreamTest_SOURCES) -ETAGS = etags -CTAGS = ctags -am__tty_colors = \ -red=; grn=; lgn=; blu=; std= -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_CPPFLAGS = @AM_CPPFLAGS@ -AM_LDFLAGS = @AM_LDFLAGS@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DATE = @DATE@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -EXTRA_LIBS = @EXTRA_LIBS@ -FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ -FREETYPE_LIBS = @FREETYPE_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -OBJEXT = @OBJEXT@ -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@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -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@ -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@ -sbindir = @sbindir@ -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@ -AM_CXXFLAGS = -I$(srcdir)/../src -I$(srcdir)/../../src -Wall -DSRCDIR='"$(srcdir)"' -BoundingBoxTest_SOURCES = BoundingBoxTest.cpp -BoundingBoxTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -CalculatorTest_SOURCES = CalculatorTest.cpp -CalculatorTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -ColorSpecialTest_SOURCES = ColorSpecialTest.cpp -ColorSpecialTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -CommandLineTest_SOURCES = CommandLineTest.cpp -CommandLineTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -CRC32Test_SOURCES = CRC32Test.cpp -CRC32Test_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -DirectoryTest_SOURCES = DirectoryTest.cpp -DirectoryTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -FileFinderTest_SOURCES = FileFinderTest.cpp -FileFinderTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -FilePathTest_SOURCES = FilePathTest.cpp -FilePathTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -FileSystemTest_SOURCES = FileSystemTest.cpp -FileSystemTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -FontManagerTest_SOURCES = FontManagerTest.cpp -FontManagerTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -FontMapTest_SOURCES = FontMapTest.cpp -FontMapTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -GFReaderTest_SOURCES = GFReaderTest.cpp -GFReaderTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -GraphicPathTest_SOURCES = GraphicPathTest.cpp -GraphicPathTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -LengthTest_SOURCES = LengthTest.cpp -LengthTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -MatrixTest_SOURCES = MatrixTest.cpp -MatrixTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -MessageExceptionTest_SOURCES = MessageExceptionTest.cpp -MessageExceptionTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -PageRagesTest_SOURCES = PageRagesTest.cpp -PageRagesTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -PageSizeTest_SOURCES = PageSizeTest.cpp -PageSizeTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -PairTest_SOURCES = PairTest.cpp -PairTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -PSInterpreterTest_SOURCES = PSInterpreterTest.cpp -PSInterpreterTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -SplittedCharInputBufferTest_SOURCES = SplittedCharInputBufferTest.cpp -SplittedCharInputBufferTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -StreamInputBufferTest_SOURCES = StreamInputBufferTest.cpp -StreamInputBufferTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -StreamReaderTest_SOURCES = StreamReaderTest.cpp -StreamReaderTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -StreamWriterTest_SOURCES = StreamWriterTest.cpp -StreamWriterTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -TypesTest_SOURCES = TypesTest.cpp -TypesTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -VectorStreamTest_SOURCES = VectorStreamTest.cpp -VectorStreamTest_LDADD = ../src/libdvisvgm.a ../potracelib/libpotrace.a -lgtest -lgtest_main -TESTDATA = frktest.dvi frktest-wf-cmp.svg frktest-nf-cmp.svg \ - sample.dvi sample-wf-cmp.svg sample-nf-cmp.svg -EXTRA_DIST = check-conv normalize.xsl cmr10.600gf $(TESTDATA) -all: all-am - -.SUFFIXES: -.SUFFIXES: .cpp .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 tests/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign tests/Makefile -.PRECIOUS: 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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - 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-checkPROGRAMS: - -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) -BoundingBoxTest$(EXEEXT): $(BoundingBoxTest_OBJECTS) $(BoundingBoxTest_DEPENDENCIES) - @rm -f BoundingBoxTest$(EXEEXT) - $(CXXLINK) $(BoundingBoxTest_OBJECTS) $(BoundingBoxTest_LDADD) $(LIBS) -CRC32Test$(EXEEXT): $(CRC32Test_OBJECTS) $(CRC32Test_DEPENDENCIES) - @rm -f CRC32Test$(EXEEXT) - $(CXXLINK) $(CRC32Test_OBJECTS) $(CRC32Test_LDADD) $(LIBS) -CalculatorTest$(EXEEXT): $(CalculatorTest_OBJECTS) $(CalculatorTest_DEPENDENCIES) - @rm -f CalculatorTest$(EXEEXT) - $(CXXLINK) $(CalculatorTest_OBJECTS) $(CalculatorTest_LDADD) $(LIBS) -ColorSpecialTest$(EXEEXT): $(ColorSpecialTest_OBJECTS) $(ColorSpecialTest_DEPENDENCIES) - @rm -f ColorSpecialTest$(EXEEXT) - $(CXXLINK) $(ColorSpecialTest_OBJECTS) $(ColorSpecialTest_LDADD) $(LIBS) -CommandLineTest$(EXEEXT): $(CommandLineTest_OBJECTS) $(CommandLineTest_DEPENDENCIES) - @rm -f CommandLineTest$(EXEEXT) - $(CXXLINK) $(CommandLineTest_OBJECTS) $(CommandLineTest_LDADD) $(LIBS) -DirectoryTest$(EXEEXT): $(DirectoryTest_OBJECTS) $(DirectoryTest_DEPENDENCIES) - @rm -f DirectoryTest$(EXEEXT) - $(CXXLINK) $(DirectoryTest_OBJECTS) $(DirectoryTest_LDADD) $(LIBS) -FileFinderTest$(EXEEXT): $(FileFinderTest_OBJECTS) $(FileFinderTest_DEPENDENCIES) - @rm -f FileFinderTest$(EXEEXT) - $(CXXLINK) $(FileFinderTest_OBJECTS) $(FileFinderTest_LDADD) $(LIBS) -FilePathTest$(EXEEXT): $(FilePathTest_OBJECTS) $(FilePathTest_DEPENDENCIES) - @rm -f FilePathTest$(EXEEXT) - $(CXXLINK) $(FilePathTest_OBJECTS) $(FilePathTest_LDADD) $(LIBS) -FileSystemTest$(EXEEXT): $(FileSystemTest_OBJECTS) $(FileSystemTest_DEPENDENCIES) - @rm -f FileSystemTest$(EXEEXT) - $(CXXLINK) $(FileSystemTest_OBJECTS) $(FileSystemTest_LDADD) $(LIBS) -FontManagerTest$(EXEEXT): $(FontManagerTest_OBJECTS) $(FontManagerTest_DEPENDENCIES) - @rm -f FontManagerTest$(EXEEXT) - $(CXXLINK) $(FontManagerTest_OBJECTS) $(FontManagerTest_LDADD) $(LIBS) -FontMapTest$(EXEEXT): $(FontMapTest_OBJECTS) $(FontMapTest_DEPENDENCIES) - @rm -f FontMapTest$(EXEEXT) - $(CXXLINK) $(FontMapTest_OBJECTS) $(FontMapTest_LDADD) $(LIBS) -GFReaderTest$(EXEEXT): $(GFReaderTest_OBJECTS) $(GFReaderTest_DEPENDENCIES) - @rm -f GFReaderTest$(EXEEXT) - $(CXXLINK) $(GFReaderTest_OBJECTS) $(GFReaderTest_LDADD) $(LIBS) -GraphicPathTest$(EXEEXT): $(GraphicPathTest_OBJECTS) $(GraphicPathTest_DEPENDENCIES) - @rm -f GraphicPathTest$(EXEEXT) - $(CXXLINK) $(GraphicPathTest_OBJECTS) $(GraphicPathTest_LDADD) $(LIBS) -LengthTest$(EXEEXT): $(LengthTest_OBJECTS) $(LengthTest_DEPENDENCIES) - @rm -f LengthTest$(EXEEXT) - $(CXXLINK) $(LengthTest_OBJECTS) $(LengthTest_LDADD) $(LIBS) -MatrixTest$(EXEEXT): $(MatrixTest_OBJECTS) $(MatrixTest_DEPENDENCIES) - @rm -f MatrixTest$(EXEEXT) - $(CXXLINK) $(MatrixTest_OBJECTS) $(MatrixTest_LDADD) $(LIBS) -MessageExceptionTest$(EXEEXT): $(MessageExceptionTest_OBJECTS) $(MessageExceptionTest_DEPENDENCIES) - @rm -f MessageExceptionTest$(EXEEXT) - $(CXXLINK) $(MessageExceptionTest_OBJECTS) $(MessageExceptionTest_LDADD) $(LIBS) -PSInterpreterTest$(EXEEXT): $(PSInterpreterTest_OBJECTS) $(PSInterpreterTest_DEPENDENCIES) - @rm -f PSInterpreterTest$(EXEEXT) - $(CXXLINK) $(PSInterpreterTest_OBJECTS) $(PSInterpreterTest_LDADD) $(LIBS) -PageRagesTest$(EXEEXT): $(PageRagesTest_OBJECTS) $(PageRagesTest_DEPENDENCIES) - @rm -f PageRagesTest$(EXEEXT) - $(CXXLINK) $(PageRagesTest_OBJECTS) $(PageRagesTest_LDADD) $(LIBS) -PageSizeTest$(EXEEXT): $(PageSizeTest_OBJECTS) $(PageSizeTest_DEPENDENCIES) - @rm -f PageSizeTest$(EXEEXT) - $(CXXLINK) $(PageSizeTest_OBJECTS) $(PageSizeTest_LDADD) $(LIBS) -PairTest$(EXEEXT): $(PairTest_OBJECTS) $(PairTest_DEPENDENCIES) - @rm -f PairTest$(EXEEXT) - $(CXXLINK) $(PairTest_OBJECTS) $(PairTest_LDADD) $(LIBS) -SplittedCharInputBufferTest$(EXEEXT): $(SplittedCharInputBufferTest_OBJECTS) $(SplittedCharInputBufferTest_DEPENDENCIES) - @rm -f SplittedCharInputBufferTest$(EXEEXT) - $(CXXLINK) $(SplittedCharInputBufferTest_OBJECTS) $(SplittedCharInputBufferTest_LDADD) $(LIBS) -StreamInputBufferTest$(EXEEXT): $(StreamInputBufferTest_OBJECTS) $(StreamInputBufferTest_DEPENDENCIES) - @rm -f StreamInputBufferTest$(EXEEXT) - $(CXXLINK) $(StreamInputBufferTest_OBJECTS) $(StreamInputBufferTest_LDADD) $(LIBS) -StreamReaderTest$(EXEEXT): $(StreamReaderTest_OBJECTS) $(StreamReaderTest_DEPENDENCIES) - @rm -f StreamReaderTest$(EXEEXT) - $(CXXLINK) $(StreamReaderTest_OBJECTS) $(StreamReaderTest_LDADD) $(LIBS) -StreamWriterTest$(EXEEXT): $(StreamWriterTest_OBJECTS) $(StreamWriterTest_DEPENDENCIES) - @rm -f StreamWriterTest$(EXEEXT) - $(CXXLINK) $(StreamWriterTest_OBJECTS) $(StreamWriterTest_LDADD) $(LIBS) -TypesTest$(EXEEXT): $(TypesTest_OBJECTS) $(TypesTest_DEPENDENCIES) - @rm -f TypesTest$(EXEEXT) - $(CXXLINK) $(TypesTest_OBJECTS) $(TypesTest_LDADD) $(LIBS) -VectorStreamTest$(EXEEXT): $(VectorStreamTest_OBJECTS) $(VectorStreamTest_DEPENDENCIES) - @rm -f VectorStreamTest$(EXEEXT) - $(CXXLINK) $(VectorStreamTest_OBJECTS) $(VectorStreamTest_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BoundingBoxTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CRC32Test.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CalculatorTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ColorSpecialTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CommandLineTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DirectoryTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileFinderTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FilePathTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileSystemTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontManagerTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontMapTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GFReaderTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GraphicPathTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LengthTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MatrixTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MessageExceptionTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PSInterpreterTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PageRagesTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PageSizeTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PairTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SplittedCharInputBufferTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamInputBufferTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamReaderTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamWriterTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TypesTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VectorStreamTest.Po@am__quote@ - -.cpp.o: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cpp.obj: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - 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 -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - 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" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -check-TESTS: $(TESTS) - @failed=0; all=0; xfail=0; xpass=0; skip=0; \ - srcdir=$(srcdir); export srcdir; \ - list=' $(TESTS) '; \ - $(am__tty_colors); \ - if test -n "$$list"; then \ - for tst in $$list; do \ - if test -f ./$$tst; then dir=./; \ - elif test -f $$tst; then dir=; \ - else dir="$(srcdir)/"; fi; \ - if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xpass=`expr $$xpass + 1`; \ - failed=`expr $$failed + 1`; \ - col=$$red; res=XPASS; \ - ;; \ - *) \ - col=$$grn; res=PASS; \ - ;; \ - esac; \ - elif test $$? -ne 77; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xfail=`expr $$xfail + 1`; \ - col=$$lgn; res=XFAIL; \ - ;; \ - *) \ - failed=`expr $$failed + 1`; \ - col=$$red; res=FAIL; \ - ;; \ - esac; \ - else \ - skip=`expr $$skip + 1`; \ - col=$$blu; res=SKIP; \ - fi; \ - echo "$${col}$$res$${std}: $$tst"; \ - done; \ - if test "$$all" -eq 1; then \ - tests="test"; \ - All=""; \ - else \ - tests="tests"; \ - All="All "; \ - fi; \ - if test "$$failed" -eq 0; then \ - if test "$$xfail" -eq 0; then \ - banner="$$All$$all $$tests passed"; \ - else \ - if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ - banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ - fi; \ - else \ - if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all $$tests failed"; \ - else \ - if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ - banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ - fi; \ - fi; \ - dashes="$$banner"; \ - skipped=""; \ - if test "$$skip" -ne 0; then \ - if test "$$skip" -eq 1; then \ - skipped="($$skip test was not run)"; \ - else \ - skipped="($$skip tests were not run)"; \ - fi; \ - test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$skipped"; \ - fi; \ - report=""; \ - if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ - report="Please report to $(PACKAGE_BUGREPORT)"; \ - test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$report"; \ - fi; \ - dashes=`echo "$$dashes" | sed s/./=/g`; \ - if test "$$failed" -eq 0; then \ - echo "$$grn$$dashes"; \ - else \ - echo "$$red$$dashes"; \ - fi; \ - echo "$$banner"; \ - test -z "$$skipped" || echo "$$skipped"; \ - test -z "$$report" || echo "$$report"; \ - echo "$$dashes$$std"; \ - test "$$failed" -eq 0; \ - else :; fi - -distdir: $(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 - $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: check-am -all-am: Makefile -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: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -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-checkPROGRAMS clean-generic mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -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 -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: check-am install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ - clean-checkPROGRAMS clean-generic ctags distclean \ - distclean-compile distclean-generic 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 pdf pdf-am ps ps-am tags uninstall \ - uninstall-am - - -# 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: diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/MatrixTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/MatrixTest.cpp deleted file mode 100644 index 9567d52c6ea..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/MatrixTest.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/************************************************************************* -** MatrixTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "Matrix.h" - -using std::ostringstream; - -TEST(MatrixTest, svg) { - double v1[] = {1,2,3,4,5,6,7,8,9}; - Matrix m1(v1); - ostringstream oss; - m1.write(oss); - EXPECT_EQ(oss.str(), "((1,2,3),(4,5,6),(7,8,9))"); - EXPECT_EQ(m1.getSVG(), "matrix(1 4 2 5 3 6)"); - - double v2[] = {1,2}; - Matrix m2(v2, 2); - oss.str(""); - m2.write(oss); - EXPECT_EQ(oss.str(), "((1,2,0),(0,1,0),(0,0,1))"); - EXPECT_EQ(m2.getSVG(), "matrix(1 0 2 1 0 0)"); -} - - -TEST(MatrixTest, transpose) { - double v[] = {1,2,3,4,5,6,7,8,9}; - Matrix m(v); - m.transpose(); - ostringstream oss; - m.write(oss); - EXPECT_EQ(oss.str(), "((1,4,7),(2,5,8),(3,6,9))"); - EXPECT_EQ(m.getSVG(), "matrix(1 2 4 5 7 8)"); -} - - -TEST(MatrixTest, checks) { - Matrix m(1); - EXPECT_TRUE(m.isIdentity()); - double tx, ty; - EXPECT_TRUE(m.isTranslation(tx, ty)); - EXPECT_EQ(tx, 0); - EXPECT_EQ(ty, 0); - m.translate(1,2); - EXPECT_TRUE(m.isTranslation(tx, ty)); - EXPECT_EQ(tx, 1); - EXPECT_EQ(ty, 2); - m.scale(2, 2); - EXPECT_FALSE(m.isTranslation(tx, ty)); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/MessageExceptionTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/MessageExceptionTest.cpp deleted file mode 100644 index 11eb87c29eb..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/MessageExceptionTest.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/************************************************************************* -** BoundingBoxTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include "MessageException.h" - -using namespace std; - -static void throw_exception (const string &msg) { - throw MessageException(msg); -} - - -TEST(MessageExceptionTest, catch_direct) { - bool caught=false; - try { - throw_exception("test message"); - FAIL(); - } - catch (MessageException &e) { - ASSERT_TRUE(strcmp(e.what(), "test message") == 0); - caught = true; - } - catch (...) { - FAIL(); - } - ASSERT_TRUE(caught); -} - - -TEST(MessageExceptionTest, catch_indirect1) { - bool caught=false; - try { - throw_exception("test message"); - FAIL(); - } - catch (exception &e) { - ASSERT_TRUE(strcmp(e.what(), "test message") == 0); - caught = true; - } - catch (...) { - FAIL(); - } - ASSERT_TRUE(caught); -} - - -TEST(MessageExceptionTest, catch_indirect2) { - bool caught=false; - try { - throw_exception("test message"); - FAIL(); - } - catch (...) { - caught = true; - } - ASSERT_TRUE(caught); -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PSInterpreterTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PSInterpreterTest.cpp deleted file mode 100644 index d5c8c82274b..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PSInterpreterTest.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/************************************************************************* -** PSInterpreterTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include "PSInterpreter.h" - -#include -#include - -using namespace std; - -class PSTestActions : public PSActions -{ - public: - void applyscalevals (vector &p) {print("applyscalevals", p);} - void clip (vector &p) {print("clip", p);} - void closepath (vector &p) {print("closepath", p);} - void curveto (vector &p) {print("curveto", p);} - void eoclip (vector &p) {print("eoclip", p);} - void eofill (vector &p) {print("eofill", p);} - void fill (vector &p) {print("fill", p);} - void gsave (vector &p) {print("gsave", p);} - void grestore (vector &p) {print("grestore", p);} - void grestoreall(std::vector &p) {print("grestoreall", p);} - void initclip (vector &p) {print("initclip", p);} - void lineto (vector &p) {print("lineto", p);} - void moveto (vector &p) {print("moveto", p);} - void newpath (vector &p) {print("newpath", p);} - void querypos (vector &p) {print("querypos", p);} - void restore(std::vector &p) {print("restore", p);} - void rotate (vector &p) {print("rotate", p);} - void save(std::vector &p) {print("save", p);} - void scale (vector &p) {print("scale", p);} - void setcmykcolor (vector &p) {print("setcmykcolor", p);} - void setdash (vector &p) {print("setdash", p);} - void setgray (vector &p) {print("setgray", p);} - void sethsbcolor (vector &p) {print("sethsbcolor", p);} - void setlinecap (vector &p) {print("setlinecap", p);} - void setlinejoin (vector &p) {print("setlinejoin", p);} - void setlinewidth (vector &p) {print("setlinewidth", p);} - void setmatrix (vector &p) {print("setmatrix", p);} - void setmiterlimit (vector &p) {print("setmiterlimit", p);} - void setopacityalpha (vector &p) {print("setopacityalpha", p);} - void setrgbcolor (vector &p) {print("setrgbcolor", p);} - void stroke (vector &p) {print("stroke", p);} - void translate (vector &p) {print("translate", p);} - - - string result () const {return _oss.str();} - void clear () {_oss.str("");} - - protected: - void print (const char *op, const vector &p) { - _oss << op; - for (size_t i=0; i < p.size(); ++i) - _oss << ' ' << p[i]; - _oss << ';'; - } - - private: - ostringstream _oss; -}; - - -TEST(PSInterpreterTest, init) { - PSTestActions actions; - PSInterpreter psi(&actions); - ASSERT_TRUE(psi.active()); - ASSERT_EQ(actions.result(), ""); -} - - -TEST(PSInterpreterTest, gsave_grestore) { - PSTestActions actions; - PSInterpreter psi(&actions); - psi.execute("gsave "); - ASSERT_EQ(actions.result(), "gsave;"); - actions.clear(); - - psi.execute("grestore "); - ASSERT_EQ(actions.result(), "setlinewidth 1;setlinecap 0;setlinejoin 0;setmiterlimit 10;setrgbcolor 0 0 0;setmatrix 1 0 0 1 0 0;setdash 0;grestore;"); - actions.clear(); - - psi.execute("1 setlinecap 5 setmiterlimit 0 1 0 setrgbcolor gsave 0 setlinecap 10 setmiterlimit "); - ASSERT_EQ(actions.result(), "setlinecap 1;setmiterlimit 5;setrgbcolor 0 1 0;gsave;setlinecap 0;setmiterlimit 10;"); - actions.clear(); - - psi.execute("grestore "); - ASSERT_EQ(actions.result(), "setlinewidth 1;setlinecap 1;setlinejoin 0;setmiterlimit 5;setrgbcolor 0 1 0;setmatrix 1 0 0 1 0 0;setdash 0;grestore;"); -} - - -TEST(PSInterpreterTest, stroke_fill) { - PSTestActions actions; - PSInterpreter psi(&actions); - psi.execute("0 0 moveto 10 10 lineto 0 10 lineto closepath stroke "); - ASSERT_EQ(actions.result(), "newpath;moveto 0 0;lineto 10 10;lineto 0 10;closepath;stroke;"); - actions.clear(); - - psi.execute("0 0 moveto 10 10 lineto 0 10 lineto closepath fill "); - ASSERT_EQ(actions.result(), "newpath;moveto 0 0;lineto 10 10;lineto 0 10;closepath;fill;"); -} - - -TEST(PSInterpreterTest, clip) { - PSTestActions actions; - PSInterpreter psi(&actions); - psi.execute("initclip "); - ASSERT_EQ(actions.result(), "initclip;"); - actions.clear(); - - psi.execute("0 0 moveto 10 10 lineto 0 10 lineto closepath clip "); - ASSERT_EQ(actions.result(), "newpath;moveto 0 0;lineto 10 10;lineto 0 10;closepath;clip;"); -} - - -TEST(PSInterpreterTest, transform) { - PSTestActions actions; - PSInterpreter psi(&actions); - psi.execute("10 10 scale 90 rotate 100 -100 translate "); - ASSERT_EQ(actions.result(), "scale 10 10;rotate 90;translate 100 -100;"); -} - - -TEST(PSInterpreterTest, calculate) { - PSTestActions actions; - PSInterpreter psi(&actions); - psi.execute("2 3 add 4 mul 5 div rotate "); - ASSERT_EQ(actions.result(), "rotate 4;"); -} - - -TEST(PSInterpreterTest, setlinewidth) { - PSTestActions actions; - PSInterpreter psi(&actions); - psi.execute("10 setlinewidth "); - ASSERT_EQ(actions.result(), "applyscalevals 1 1 1;setlinewidth 10;"); - actions.clear(); - - psi.execute("5 5 scale 10 setlinewidth "); - ASSERT_EQ(actions.result(), "scale 5 5;applyscalevals 5 5 1;setlinewidth 10;"); - actions.clear(); - - psi.execute("90 rotate 10 setlinewidth "); - ASSERT_EQ(actions.result(), "rotate 90;applyscalevals 5 5 0;setlinewidth 10;"); - actions.clear(); - - psi.execute("-30 rotate 10 setlinewidth "); - ASSERT_EQ(actions.result(), "rotate -30;applyscalevals 5 5 0.5;setlinewidth 10;"); -} - - -TEST(PSInterpreterTest, matrix) { - PSTestActions actions; - PSInterpreter psi(&actions); - psi.execute("matrix setmatrix "); - ASSERT_EQ(actions.result(), "setmatrix 1 0 0 1 0 0;"); - actions.clear(); - psi.execute("10 100 translate 30 rotate matrix currentmatrix setmatrix "); - ASSERT_EQ(actions.result(), "translate 10 100;rotate 30;setmatrix 0.866025 0.5 -0.5 0.866025 10 100;"); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PageRagesTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PageRagesTest.cpp deleted file mode 100644 index 353ea15b7d1..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PageRagesTest.cpp +++ /dev/null @@ -1,167 +0,0 @@ -/************************************************************************* -** PageRagesTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "PageRanges.h" - -using namespace std; - -static ostream& operator << (ostream &os, const PageRanges::Range &r) { - return os << '(' << r.first << ',' << r.second << ')'; -} - - -struct Range -{ - int l, r; -}; - - -static bool is_equal (const PageRanges &pr, const Range *r) { - int i=0; - for (PageRanges::ConstIterator it=pr.begin(); it != pr.end(); ++it) { - if (it->first != r[i].l || it->second != r[i].r) - return false; - ++i; - } - return true; -} - - -TEST(PageRangesTest, single) { - PageRanges pr; - ASSERT_TRUE(pr.parse("123")); - ASSERT_FALSE(pr.ranges().empty()); - ASSERT_EQ(pr.ranges().front(), PageRanges::Range(123,123)); - ASSERT_EQ(pr.pages(), 1); -} - - -TEST(PageRangesTest, single_range) { - PageRanges pr; - ASSERT_TRUE(pr.parse("3-19")); - ASSERT_FALSE(pr.ranges().empty()); - ASSERT_EQ(pr.ranges().front(), PageRanges::Range(3,19)); - ASSERT_EQ(pr.pages(), 17); -} - - -TEST(PageRangesTest, single_range_inv) { - PageRanges pr; - ASSERT_TRUE(pr.parse("19-3")); - ASSERT_FALSE(pr.ranges().empty()); - ASSERT_EQ(pr.ranges().front(), PageRanges::Range(3,19)); - ASSERT_EQ(pr.pages(), 17); -} - - -TEST(PageRangesTest, single_range_lopen) { - PageRanges pr; - ASSERT_TRUE(pr.parse("-19")); - ASSERT_FALSE(pr.ranges().empty()); - ASSERT_EQ(pr.ranges().front(), PageRanges::Range(1,19)); - ASSERT_EQ(pr.pages(), 19); -} - - -TEST(PageRangesTest, single_range_ropen) { - PageRanges pr; - ASSERT_TRUE(pr.parse("4-", 100)); - ASSERT_FALSE(pr.ranges().empty()); - ASSERT_EQ(pr.ranges().front(), PageRanges::Range(4,100)); - ASSERT_EQ(pr.pages(), 97); -} - - -TEST(PageRangesTest, multiple1) { - PageRanges pr; - ASSERT_TRUE(pr.parse("11,6,9,1,75,6,3")); - ASSERT_EQ(pr.size(), 6); - Range cmp[] = {{1,1},{3,3},{6,6},{9,9},{11,11},{75,75}}; - ASSERT_TRUE(is_equal(pr, cmp)); - ASSERT_EQ(pr.pages(), 6); -} - - -TEST(PageRangesTest, multiple2) { - PageRanges pr; - ASSERT_TRUE(pr.parse("2,6,9,1,75,6,3")); - ASSERT_EQ(pr.size(), 4); - Range cmp[] = {{1,3},{6,6},{9,9},{75,75}}; - ASSERT_TRUE(is_equal(pr, cmp)); -} - - -TEST(PageRangesTest, multiple3) { - PageRanges pr; - ASSERT_TRUE(pr.parse("2,6,9-11,1,25-,19-13,6,3", 100)); - ASSERT_EQ(pr.size(), 5); - Range cmp[] = {{1,3},{6,6},{9,11},{13,19},{25,100}}; - ASSERT_TRUE(is_equal(pr, cmp)); -} - - -TEST(PageRangesTest, overlap1) { - PageRanges pr; - ASSERT_TRUE(pr.parse("5-11, 8-15")); - ASSERT_EQ(pr.size(), 1); - Range cmp[] = {{5,15}}; - ASSERT_TRUE(is_equal(pr, cmp)); -} - - -TEST(PageRangesTest, overlap2) { - PageRanges pr; - ASSERT_TRUE(pr.parse("23-30, 5-11, 17-23, 12-19")); - ASSERT_EQ(pr.size(), 1); - Range cmp[] = {{5,30}}; - ASSERT_TRUE(is_equal(pr, cmp)); -} - - -TEST(PageRangesTest, overlap3) { - PageRanges pr; - ASSERT_TRUE(pr.parse("22-30, 5-11, 21-23, 12-19")); - ASSERT_EQ(pr.size(), 2); - Range cmp[] = {{5,19},{21,30}}; - ASSERT_TRUE(is_equal(pr, cmp)); -} - - -TEST(PageRangesTest, overlap4) { - PageRanges pr; - ASSERT_TRUE(pr.parse("-15, 20-, 8, 12-16, 18-19", 100)); - ASSERT_EQ(pr.size(), 2); - Range cmp[] = {{1,16},{18,100}}; - ASSERT_TRUE(is_equal(pr, cmp)); - ASSERT_TRUE(pr.parse("17")); - ASSERT_EQ(pr.size(), 1); - ASSERT_EQ(pr.ranges().front(), PageRanges::Range(1,100)); -} - - -TEST(PageRangesTest, error) { - PageRanges pr; - ASSERT_FALSE(pr.parse("x")); - ASSERT_FALSE(pr.parse("5-x")); - ASSERT_FALSE(pr.parse("5 6")); - ASSERT_FALSE(pr.parse("5,")); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PageSizeTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PageSizeTest.cpp deleted file mode 100644 index 785fde6d162..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PageSizeTest.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/************************************************************************* -** PageSizeTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "PageSize.h" - - -class PageSizeTest : public ::testing::Test -{ - protected: - struct PageData - { - const char *id; - double width, height; - }; - - static const PageData pageData[]; - - PageSize ps; -}; - - -const PageSizeTest::PageData PageSizeTest::pageData[] = { - {"A4", 210, 297}, - {"a4", 210, 297}, - {"a4-p", 210, 297}, - {"a4-portrait", 210, 297}, - {"a4-l", 297, 210}, - {"a4-landscape", 297, 210}, - {"a5", 148, 210}, - {"c10", 28, 40}, - {"letter", 216, 279}, - {0, 0, 0} -}; - - -TEST_F(PageSizeTest, resize) { - EXPECT_FALSE(ps.valid()); - - for (const PageData *p = pageData; p && p->id; p++) { - ps.resize(p->id); - EXPECT_DOUBLE_EQ(ps.widthInMM(), p->width); - EXPECT_DOUBLE_EQ(ps.heightInMM(), p->height); - } -} - - -TEST_F(PageSizeTest, exceptions) { - EXPECT_THROW(ps.resize("a"), PageSizeException); - EXPECT_THROW(ps.resize("e4"), PageSizeException); - EXPECT_THROW(ps.resize("a4-unknown"), PageSizeException); -} - - - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PairTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PairTest.cpp deleted file mode 100644 index 9807cc7a353..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/PairTest.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/************************************************************************* -** PairTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "Pair.h" - -using namespace std; - -TEST(PairTest, constructor) { - DPair p(-1.5, 2); - ASSERT_EQ(p.x(), -1.5); - ASSERT_EQ(p.y(), 2); - DPair q = p; - ASSERT_EQ(q.x(), -1.5); - ASSERT_EQ(q.y(), 2); -} - - -TEST(PairTest, setter) { - DPair p(1,2); - ASSERT_EQ(p, DPair(1,2)); - p.x(3); - ASSERT_EQ(p, DPair(3,2)); - p.y(5); - ASSERT_EQ(p, DPair(3,5)); -} - - -TEST(PairTest, length) { - ASSERT_EQ(DPair(0,0).length(), 0); - ASSERT_EQ(DPair(1,0).length(), 1); - ASSERT_EQ(DPair(0,1).length(), 1); - ASSERT_EQ(DPair(-1,0).length(), 1); - ASSERT_EQ(DPair(0,-1).length(), 1); - - // check some Pythagorean triples - for (int i=1; i < 10; ++i) { - for (int j=i+1; j <= 10; ++j) { - int a = j*j-i*i; - int b = 2*i*j; - int c = j*j+i*i; - ASSERT_EQ(DPair(a, b).length(), c); - ASSERT_EQ(DPair(b, a).length(), c); - ASSERT_EQ(DPair(-a, b).length(), c); - ASSERT_EQ(DPair(-b, a).length(), c); - ASSERT_EQ(DPair(-a, -b).length(), c); - } - } -} - - -TEST(PairTest, add) { - ASSERT_EQ(DPair(2,3)+DPair(0,0), DPair(2,3)); - ASSERT_EQ(DPair(2,3)+DPair(4,5), DPair(6,8)); - ASSERT_EQ(DPair(2,3)+DPair(-4,-5), DPair(-2,-2)); -} - - -TEST(PairTest, sub) { - ASSERT_EQ(DPair(2,3)-DPair(0,0), DPair(2,3)); - ASSERT_EQ(DPair(2,3)-DPair(4,5), DPair(-2,-2)); - ASSERT_EQ(DPair(2,3)-DPair(-4,-5), DPair(6,8)); -} - - -TEST(PairTest, mul) { - ASSERT_EQ(DPair(2,3)*0.0, DPair(0,0)); - ASSERT_EQ(DPair(2,3)*1.0, DPair(2,3)); - ASSERT_EQ(DPair(2,3)*2.0, DPair(4,6)); - ASSERT_EQ(DPair(2,3)*(-2.0), DPair(-4,-6)); -} - - -TEST(PairTest, div) { - ASSERT_EQ(DPair(2,3)/1.0, DPair(2,3)); - ASSERT_EQ(DPair(2,3)/2.0, DPair(1,1.5)); - ASSERT_EQ(DPair(2,3)/(-2.0), DPair(-1,-1.5)); -} - - -TEST(PairTest, equality) { - ASSERT_TRUE(DPair(2,3) == DPair(2,3)); - ASSERT_FALSE(DPair(2,3) == DPair(-2,-3)); - ASSERT_TRUE(DPair(2,3)+DPair(4,5) == DPair(6,8)); - ASSERT_FALSE(DPair(2,3)+DPair(4,5) != DPair(6,8)); -} - - -TEST(PairTest, ortho) { - ASSERT_EQ(DPair(0,0).ortho(), DPair(0,0)); - ASSERT_EQ(DPair(1,0).ortho(), DPair(0,1)); - ASSERT_EQ(DPair(0,1).ortho(), DPair(-1,0)); - ASSERT_EQ(DPair(-1,0).ortho(), DPair(0,-1)); - ASSERT_EQ(DPair(0,-1).ortho(), DPair(1,0)); -} - - -TEST(PairTest, write) { - ostringstream oss; - DPair p(3,4); - oss << p; - ASSERT_EQ(oss.str(), "(3,4)"); - p *= 2; - oss.str(""); - oss << p; - ASSERT_EQ(oss.str(), "(6,8)"); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/SplittedCharInputBufferTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/SplittedCharInputBufferTest.cpp deleted file mode 100644 index ff8970da2c7..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/SplittedCharInputBufferTest.cpp +++ /dev/null @@ -1,181 +0,0 @@ -/************************************************************************* -** SplittedCharInputBufferTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include "InputBuffer.h" -#include "InputReader.h" - -using std::istringstream; - -TEST(SplittedCharInputBufferTest, get) { - const char *buf1 = "abcdef"; - const char *buf2 = "ghijklmnopqrstuvwxyz"; - SplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2)); - BufferInputReader in(buffer); - bool ok=true; - for (int i=0; !in.eof() && ok; i++) { - EXPECT_LT(i, 26); - EXPECT_EQ(in.get(), 'a'+i); - ok = (i < 26); - } -} - - -TEST(SplittedCharInputBufferTest, peek) { - const char *buf1 = "abcdef"; - const char *buf2 = "ghijklmnopqrstuvwxyz"; - SplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2)); - BufferInputReader in(buffer); - EXPECT_EQ(in.peek(), 'a'); - for (int i=0; i < 26; i++) - EXPECT_EQ(in.peek(i), 'a'+i); - EXPECT_EQ(in.peek(26), -1); -} - - -TEST(SplittedCharInputBufferTest, check) { - const char *buf1 = "abcde"; - const char *buf2 = "fghijklmnopqrstuvwxyz"; - SplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2)); - BufferInputReader in(buffer); - EXPECT_TRUE(in.check("abc", false)); - EXPECT_TRUE(in.check("abc", true)); - EXPECT_TRUE(in.check("def", true)); - EXPECT_TRUE(in.check("ghi", true)); - EXPECT_TRUE(in.check("jkl", true)); - EXPECT_TRUE(in.check("mnopqrst", false)); - EXPECT_TRUE(in.check("mnopqrst", true)); - EXPECT_TRUE(in.check("uvwxyz", true)); - EXPECT_EQ(in.get(), -1); -} - - -TEST(SplittedCharInputBufferTest, skip) { - const char *buf1 = "abcde"; - const char *buf2 = "fghijklmnopqrstuvwxyz"; - SplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2)); - BufferInputReader in(buffer); - in.skip(3); - EXPECT_EQ(in.peek(), 'd'); - in.skipUntil("ijk", false); - EXPECT_EQ(in.peek(), 'i'); - in.skipUntil("ijk", true); - EXPECT_EQ(in.peek(), 'l'); - in.skipUntil("z", true); - EXPECT_TRUE(in.eof()); -} - - -TEST(SplittedCharInputBufferTest, parseInt) { - const char *buf1 = "1234,-"; - const char *buf2 = "5,+6,10.-"; - SplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2)); - BufferInputReader in(buffer); - int n; - EXPECT_TRUE(in.parseInt(n)); - EXPECT_EQ(n, 1234); - EXPECT_EQ(in.get(), ','); - - EXPECT_TRUE(in.parseInt(n)); - EXPECT_EQ(n, -5); - EXPECT_EQ(in.get(), ','); - - EXPECT_TRUE(in.parseInt(n)); - EXPECT_EQ(n, 6); - EXPECT_EQ(in.get(), ','); - - EXPECT_TRUE(in.parseInt(n)); - EXPECT_EQ(n, 10); - EXPECT_EQ(in.get(), '.'); - - EXPECT_FALSE(in.parseInt(n)); - EXPECT_EQ(in.get(), '-'); -} - - -TEST(SplittedCharInputBufferTest, parseInt_base) { - const char *buf1 = "1234,-5,10,1a"; - const char *buf2 = "bc,1234a"; - SplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2)); - BufferInputReader in(buffer); - int n; - EXPECT_TRUE(in.parseInt(10, n)); - EXPECT_EQ(n, 1234); - EXPECT_EQ(in.get(), ','); - - EXPECT_FALSE(in.parseInt(10, n)); - in.get(); - EXPECT_TRUE(in.parseInt(10, n)); - EXPECT_EQ(n, 5); - EXPECT_EQ(in.get(), ','); - - EXPECT_TRUE(in.parseInt(16, n)); - EXPECT_EQ(n, 16); - EXPECT_EQ(in.get(), ','); - - EXPECT_TRUE(in.parseInt(16, n)); - EXPECT_EQ(n, 0x1abc); - EXPECT_EQ(in.get(), ','); - - EXPECT_TRUE(in.parseInt(8, n)); - EXPECT_EQ(n, 01234); - EXPECT_EQ(in.get(), 'a'); -} - - -TEST(SplittedCharInputBufferTest, parseDouble) { - const char *buf1 = "1234,-5,6.12,-3"; - const char *buf2 = ".1415,-.1,12e2,10.-"; - SplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2)); - BufferInputReader in(buffer); - double d; - EXPECT_EQ(in.parseDouble(d), 'i'); - EXPECT_EQ(d, 1234.0); - EXPECT_EQ(in.get(), ','); - - EXPECT_EQ(in.parseDouble(d), 'i'); - EXPECT_EQ(d, -5.0); - EXPECT_EQ(in.get(), ','); - - EXPECT_EQ(in.parseDouble(d), 'f'); - EXPECT_EQ(d, 6.12); - EXPECT_EQ(in.get(), ','); - - EXPECT_EQ(in.parseDouble(d), 'f'); - EXPECT_EQ(d, -3.1415); - EXPECT_EQ(in.get(), ','); - - EXPECT_EQ(in.parseDouble(d), 'f'); - EXPECT_EQ(d, -0.1); - EXPECT_EQ(in.get(), ','); - - EXPECT_EQ(in.parseDouble(d), 'f'); - EXPECT_EQ(d, 1200); - EXPECT_EQ(in.get(), ','); - - EXPECT_EQ(in.parseDouble(d), 'f'); - EXPECT_EQ(d, 10.0); - EXPECT_EQ(in.peek(), '-'); - - EXPECT_FALSE(in.parseDouble(d)); - EXPECT_EQ(in.get(), '-'); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/StreamInputBufferTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/StreamInputBufferTest.cpp deleted file mode 100644 index 56769671708..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/StreamInputBufferTest.cpp +++ /dev/null @@ -1,203 +0,0 @@ -/************************************************************************* -** StreamInputBufferTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include -#include "InputBuffer.h" -#include "InputReader.h" - -using std::istringstream; -using std::map; -using std::string; - -TEST(StreamInputBufferTest, get) { - istringstream iss("abcdefghijklmnopqrstuvwxyz"); - StreamInputBuffer buffer(iss, 10); - BufferInputReader in(buffer); - bool ok=true; - for (int i=0; !in.eof() && ok; i++) { - EXPECT_LT(i, 26); - EXPECT_EQ(in.get(), 'a'+i); - ok = (i < 26); - } -} - - -TEST(StreamInputBufferTest, peek) { - istringstream iss("abcdefghijklmnopqrstuvwxyz"); - StreamInputBuffer buffer(iss, 10); - BufferInputReader in(buffer); - EXPECT_EQ(in.peek(), 'a'); - for (int i=0; i < 20; i++) - EXPECT_EQ(in.peek(i), 'a'+i); - // we can't look forward more than BUFSIZE characters (10 in this case) - for (int i=21; i < 26; i++) - EXPECT_EQ(in.peek(i), -1); -} - - -TEST(StreamInputBufferTest, check) { - istringstream iss("abcdefghijklmnopqrstuvwxyz"); - StreamInputBuffer buffer(iss, 10); - BufferInputReader in(buffer); - EXPECT_TRUE(in.check("abc", false)); - EXPECT_TRUE(in.check("abc", true)); - EXPECT_TRUE(in.check("def", true)); - EXPECT_TRUE(in.check("ghi", true)); - EXPECT_TRUE(in.check("jkl", true)); - EXPECT_TRUE(in.check("mnopqrst", false)); - EXPECT_TRUE(in.check("mnopqrst", true)); - EXPECT_TRUE(in.check("uvwxyz", true)); -} - - -TEST(StreamInputBufferTest, skip) { - istringstream iss("abcdefghijklmnopqrstuvwxyz"); - StreamInputBuffer buffer(iss, 10); - BufferInputReader in(buffer); - in.skip(3); - EXPECT_EQ(in.peek(), 'd'); - in.skipUntil("ijk", false); - EXPECT_EQ(in.peek(), 'i'); - in.skipUntil("ijk", true); - EXPECT_EQ(in.peek(), 'l'); - in.skipUntil("z", true); - EXPECT_TRUE(in.eof()); -} - - -TEST(StreamInputBufferTest, parseInt) { - istringstream iss("1234,-5,+6,10.-"); - StreamInputBuffer buffer(iss, 10); - BufferInputReader in(buffer); - int n; - EXPECT_TRUE(in.parseInt(n)); - EXPECT_EQ(n, 1234); - EXPECT_EQ(in.get(), ','); - - EXPECT_TRUE(in.parseInt(n)); - EXPECT_EQ(n, -5); - EXPECT_EQ(in.get(), ','); - - EXPECT_TRUE(in.parseInt(n)); - EXPECT_EQ(n, 6); - EXPECT_EQ(in.get(), ','); - - EXPECT_TRUE(in.parseInt(n)); - EXPECT_EQ(n, 10); - EXPECT_EQ(in.get(), '.'); - - EXPECT_FALSE(in.parseInt(n)); - EXPECT_EQ(in.get(), '-'); -} - - -TEST(StreamInputBufferTest, parseInt_base) { - istringstream iss("1234,-5,10,1abc,1234a"); - StreamInputBuffer buffer(iss, 10); - BufferInputReader in(buffer); - int n; - EXPECT_TRUE(in.parseInt(10, n)); - EXPECT_EQ(n, 1234); - EXPECT_EQ(in.get(), ','); - - EXPECT_FALSE(in.parseInt(10, n)); - in.get(); - EXPECT_TRUE(in.parseInt(10, n)); - EXPECT_EQ(n, 5); - EXPECT_EQ(in.get(), ','); - - EXPECT_TRUE(in.parseInt(16, n)); - EXPECT_EQ(n, 16); - EXPECT_EQ(in.get(), ','); - - EXPECT_TRUE(in.parseInt(16, n)); - EXPECT_EQ(n, 0x1abc); - EXPECT_EQ(in.get(), ','); - - EXPECT_TRUE(in.parseInt(8, n)); - EXPECT_EQ(n, 01234); - EXPECT_EQ(in.get(), 'a'); -} - - -TEST(StreamInputBufferTest, parseDouble) { - istringstream iss("1234,-5,6.12,-3.1415,-.1,12e2,10.-"); - StreamInputBuffer buffer(iss, 10); - BufferInputReader in(buffer); - double d; - EXPECT_EQ(in.parseDouble(d), 'i'); - EXPECT_EQ(d, 1234.0); - EXPECT_EQ(in.get(), ','); - - EXPECT_EQ(in.parseDouble(d), 'i'); - EXPECT_EQ(d, -5.0); - EXPECT_EQ(in.get(), ','); - - EXPECT_EQ(in.parseDouble(d), 'f'); - EXPECT_EQ(d, 6.12); - EXPECT_EQ(in.get(), ','); - - EXPECT_EQ(in.parseDouble(d), 'f'); - EXPECT_EQ(d, -3.1415); - EXPECT_EQ(in.get(), ','); - - EXPECT_EQ(in.parseDouble(d), 'f'); - EXPECT_EQ(d, -0.1); - EXPECT_EQ(in.get(), ','); - - EXPECT_EQ(in.parseDouble(d), 'f'); - EXPECT_EQ(d, 1200); - EXPECT_EQ(in.get(), ','); - - EXPECT_EQ(in.parseDouble(d), 'f'); - EXPECT_EQ(d, 10.0); - EXPECT_EQ(in.peek(), '-'); - - EXPECT_FALSE(in.parseDouble(d)); - EXPECT_EQ(in.get(), '-'); -} - - -TEST(StreamInputBufferTest, attribs) { - istringstream iss("aaa=1 bbb=2 ccc=3 d e"); - StreamInputBuffer buffer(iss, 10); - BufferInputReader in(buffer); - map attr; - int s = in.parseAttributes(attr); - EXPECT_EQ(s, 3); - EXPECT_EQ(attr["aaa"], "1"); - EXPECT_EQ(attr["bbb"], "2"); - EXPECT_EQ(attr["ccc"], "3"); -} - - -TEST(StreamInputBufferTest, invalidate) { - istringstream iss("aaa=1 bbb=2 ccc=3 d e"); - StreamInputBuffer buffer(iss, 10); - EXPECT_EQ(buffer.get(), 'a'); - EXPECT_EQ(buffer.get(), 'a'); - EXPECT_EQ(buffer.get(), 'a'); - EXPECT_EQ(buffer.get(), '='); - buffer.invalidate(); - EXPECT_TRUE(buffer.eof()); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/StreamReaderTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/StreamReaderTest.cpp deleted file mode 100644 index 1b7fd35ad90..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/StreamReaderTest.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/************************************************************************* -** StreamReaderTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include "CRC32.h" -#include "StreamReader.h" - -using namespace std; - -TEST(StreamReaderTest, readString) { - istringstream iss("dvisvgm converts DVI files to SVG."); - StreamReader reader(iss); - string str = reader.readString(iss.str().length()); - EXPECT_EQ(str, iss.str()); -} - - -TEST(StreamReaderTest, readStringCRC) { - istringstream iss("dvisvgm converts DVI files to SVG."); - StreamReader reader(iss); - CRC32 crc; - string str = reader.readString(iss.str().length(), crc); - EXPECT_EQ(str, iss.str()); - EXPECT_EQ(crc.get(), 0x7c4ef359); -} - - -TEST(StreamReaderTest, readUnsigned) { - string str; - str.push_back('\x00'); - str.push_back('\x01'); - str.push_back('\x02'); - str.push_back('\x03'); - istringstream iss(str); - StreamReader reader(iss); - UInt32 val = reader.readUnsigned(4); - EXPECT_EQ(val, 0x00010203); -} - - -TEST(StreamReaderTest, readUnsignedCRC) { - string str; - str.push_back('\x00'); - str.push_back('\x01'); - str.push_back('\x02'); - str.push_back('\x03'); - istringstream iss(str); - StreamReader reader(iss); - CRC32 crc; - UInt32 val = reader.readUnsigned(4, crc); - EXPECT_EQ(val, 0x00010203); - EXPECT_EQ(crc.get(), 0x8bb98613); -} - - -TEST(StreamReaderTest, readSigned) { - string str; - str.push_back('\xff'); - str.push_back('\xee'); - str.push_back('\xdd'); - str.push_back('\xcc'); - istringstream iss(str); - StreamReader reader(iss); - Int32 val = reader.readUnsigned(4); - EXPECT_EQ(val, 0xffeeddcc); -} - - -TEST(StreamReaderTest, readSignedCRC) { - string str; - str.push_back('\xff'); - str.push_back('\xee'); - str.push_back('\xdd'); - str.push_back('\xcc'); - istringstream iss(str); - StreamReader reader(iss); - CRC32 crc; - Int32 val = reader.readUnsigned(4, crc); - EXPECT_EQ(val, 0xffeeddcc); - EXPECT_EQ(crc.get(), 0xfa79118e); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/StreamWriterTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/StreamWriterTest.cpp deleted file mode 100644 index 4256ce84448..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/StreamWriterTest.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/************************************************************************* -** StreamWriterTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include -#include "CRC32.h" -#include "StreamWriter.h" - -using namespace std; - -TEST(StreamWriterTest, writeString) { - ostringstream oss; - StreamWriter writer(oss); - string str = "dvisvgm converts DVI files to SVG."; - writer.writeString(str); - EXPECT_EQ(oss.str(), str); - - oss.str(""); - writer.writeString(str, true); - str.push_back('\0'); - EXPECT_EQ(oss.str(), str); -} - - -TEST(StreamWriterTest, writeStringCRC) { - ostringstream oss; - StreamWriter writer(oss); - CRC32 crc; - string str = "dvisvgm converts DVI files to SVG."; - writer.writeString(str, crc); - EXPECT_EQ(oss.str(), str); - EXPECT_EQ(crc.get(), 0x7C4EF359); - - oss.str(""); - crc.reset(); - writer.writeString(str, crc, true); - str.push_back('\0'); - EXPECT_EQ(oss.str(), str); - EXPECT_EQ(crc.get(), 0xc0c9482e); -} - - -TEST(StreamWriterTest, writeUnsigned) { - ostringstream oss; - StreamWriter writer(oss); - writer.writeUnsigned(0x00010203, 4); - string str; - str.push_back('\x00'); - str.push_back('\x01'); - str.push_back('\x02'); - str.push_back('\x03'); - EXPECT_EQ(oss.str(), str); -} - - -TEST(StreamWriterTest, writeUnsignedCRC) { - ostringstream oss; - StreamWriter writer(oss); - CRC32 crc; - writer.writeUnsigned(0x00010203, 4, crc); - string str; - str.push_back('\x00'); - str.push_back('\x01'); - str.push_back('\x02'); - str.push_back('\x03'); - EXPECT_EQ(oss.str(), str); - EXPECT_EQ(crc.get(), 0x8bb98613); -} - - -TEST(StreamWriterTest, writeSigned) { - ostringstream oss; - StreamWriter writer(oss); - writer.writeUnsigned(0xffeeddcc, 4); - string str; - str.push_back('\xff'); - str.push_back('\xee'); - str.push_back('\xdd'); - str.push_back('\xcc'); - EXPECT_EQ(oss.str(), str); -} - - -TEST(StreamWriterTest, writeSignedCRC) { - ostringstream oss; - StreamWriter writer(oss); - CRC32 crc; - writer.writeUnsigned(0xffeeddcc, 4, crc); - string str; - str.push_back('\xff'); - str.push_back('\xee'); - str.push_back('\xdd'); - str.push_back('\xcc'); - EXPECT_EQ(oss.str(), str); - EXPECT_EQ(crc.get(), 0xfa79118e); -} diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/TypesTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/TypesTest.cpp deleted file mode 100644 index 5d30cef2369..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/TypesTest.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/************************************************************************* -** TypesTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include "types.h" - -using namespace std; - - -TEST(TypesTest, size_signed) { - ASSERT_EQ(sizeof(Int8), 1); - ASSERT_EQ(sizeof(Int16), 2); - ASSERT_EQ(sizeof(Int32), 4); - ASSERT_EQ(sizeof(Int64), 8); -} - - -TEST(TypesTest, neg_signed) { - ASSERT_LT(Int8(-1), 0); - ASSERT_LT(Int16(-1), 0); - ASSERT_LT(Int32(-1), 0); - ASSERT_LT(Int64(-1), 0); -} - - -TEST(TypesTest, unsigned_types) { - ASSERT_EQ(sizeof(UInt8), 1); - ASSERT_EQ(sizeof(UInt16), 2); - ASSERT_EQ(sizeof(UInt32), 4); - ASSERT_EQ(sizeof(UInt64), 8); -} - - -TEST(TypesTest, neg_unsigned) { - ASSERT_GT(UInt8(-1), 0); - ASSERT_GT(UInt16(-1), 0); - ASSERT_GT(UInt32(-1), 0); - ASSERT_GT(UInt64(-1), 0); -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/VectorStreamTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/VectorStreamTest.cpp deleted file mode 100644 index 14b03ac763b..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/VectorStreamTest.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/************************************************************************* -** VectorStreamTest.cpp ** -** ** -** This file is part of dvisvgm -- the DVI to SVG converter ** -** Copyright (C) 2005-2011 Martin Gieseking ** -** ** -** 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 . ** -*************************************************************************/ - -#include -#include -#include "VectorStream.h" - -using std::string; -using std::vector; - -TEST(VectorStreamTest, read) { - const char *str = "abcdefghijklm\0nopqrstuvwxyz"; - vector vec(str, str+27); - VectorInputStream vs(vec); - for (unsigned count = 0; vs; count++) { - int c = vs.get(); - if (count < vec.size()) { - EXPECT_EQ(c, str[count]); - } - else { - EXPECT_EQ(c, -1); - } - } -} - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/check-conv b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/check-conv deleted file mode 100755 index 0def881b648..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/check-conv +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -# This file is part of the dvisvgm package and published under the -# terms of the GNU General Public License version 3 or later. -# See file COPYING for further details. -# (C) 2009-2011 Martin Gieseking - - -files=(sample frktest) -state=0 - -BLUE="\E[0;34m" -GREEN="\E[0;32m" -RED="\E[0;31m" -COLOR_OFF="\E[0m" - -if [ \! -e enable-check-conv ]; then - echo -e "${BLUE}conversion checks skipped${COLOR_OFF}" - exit 0 -fi - -for f in ${files[@]}; do - for m in "wf" "nf"; do - infile=${srcdir}/$f - outfile=$f-$m.svg - cmpfile=${srcdir}/$f-$m-cmp.svg - if [ $m = "wf" ]; then - ../src/dvisvgm -v0 -o$outfile $infile - else - ../src/dvisvgm -v0 -n -o$outfile $infile - fi - xsltproc --novalid ${srcdir}/normalize.xsl $outfile | xmllint --format - >tmp1.svg - xsltproc --novalid ${srcdir}/normalize.xsl $cmpfile | xmllint --format - >tmp2.svg - mv tmp1.svg $outfile - - diff $outfile tmp2.svg >$f-$m.diff #>/dev/null - if [ $? -ne 0 ]; then - echo -en "${RED}FAILED $COLOR_OFF" - state=1 - else - echo -en "${GREEN}PASSED $COLOR_OFF" - rm $outfile - fi - echo "converting $f.dvi (mode $m)" - if [ \! -s $f-$m.diff ]; then - rm $f-$m.diff - fi - rm tmp2.svg - done -done -exit $state diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/cmr10.600gf b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/cmr10.600gf deleted file mode 100644 index 6dca421e21c..00000000000 Binary files a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/cmr10.600gf and /dev/null differ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/frktest-nf-cmp.svg b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/frktest-nf-cmp.svg deleted file mode 100644 index 7c40a685071..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/frktest-nf-cmp.svg +++ /dev/null @@ -1,1223 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/frktest-wf-cmp.svg b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/frktest-wf-cmp.svg deleted file mode 100644 index 93212ad4abc..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/frktest-wf-cmp.svg +++ /dev/null @@ -1,353 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Nonummys -id -sem»r -aliena -auditorum -lorem -ipsum -quod -omnia -sunt -»ccatore‘: -Lorem -ipsum -˘lor -s -it -amet -con -se˝etuer -adi- -piscing -elit: -Sed -diam -tem–r -incidunt -ut -laˆre -et -˘lor -magna -aliquam -erat -volu«t -ut -wis -i -enim -ad -minim -ffiniam -qui‘ -no<rud -oblationem -cor–remque -suscipit -laˆri‘ - -D -ie -Orgel -,der - -Flđgel -,daŊ - -Fortepiano -unddaŊ - -Clavicord -sind -die -gebrĽuĚliĚĆen -ClavierinĆrumente -zum -Accompagnement. - - -SĚade, -da -die -sĚŹne -Erfindung -deŊ - -HolfeldisĚen -BogenclavierŊ - -noĚniĚt -gemeinnđŃig -geworden -iĆ; -man -kann -dahero -deĄen -besondere -Vorzđge -hierinnen -noĚ -niĚt -genau -beĆimmen. - - -gewi -zu -glauben, -da - -s - -auĚ -bey -der -Begleitung -gut -auŊnehmen -werde. - -V -ondem -ĆattliĚen -Orte -KirĚehrenbaĚ -in -der -FrŁnkisĚen -SĚweiz -f§hrt -ein -einsameŊ -StrŁĚen, -an -der -Ćeil -abƧr- -zenden -Breitseite -der -Ehrenb§rg -vor§ber, -gen -LeutenbaĚ. -In -einer -halben -Stunde - -daŊ -sĚmuĘe -Pfarrdorf -erreiĚt. -S§dŽĆliĚ -deŊselben, -kaum -eine -ViertelĆunde -entfernt, -treĎen -wir -auf -dem -Wege -naĚ -OrtspiŃ -in -einem -SeitentŁlĚen -von -unber§hrter -Na- -tursĚŽnheit -daŊ -uralte, -einsame -KirĚlein -\Sankt -MoriŃ" -mit -seinem -Ćillen -Friedhofe. -In -der -NŁhe -deŊ -KirĚleinŊ -Ćeht -ein -niedrigeŊ, -§ber -eine -Quelle -erbauteŊ -FeldkapellĚen -mit -der -Statue -deŊ -hl. -MauritiuŊ, -dargeĆellt -alŊ -Ritter -in -voller -Wehr. - - - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/frktest.dvi b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/frktest.dvi deleted file mode 100644 index 723b08a2964..00000000000 Binary files a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/frktest.dvi and /dev/null differ diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/normalize.xsl b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/normalize.xsl deleted file mode 100644 index 5a6ba2f62d6..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/normalize.xsl +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/sample-nf-cmp.svg b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/sample-nf-cmp.svg deleted file mode 100644 index 9e2dc81bfb0..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/sample-nf-cmp.svg +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/sample-wf-cmp.svg b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/sample-wf-cmp.svg deleted file mode 100644 index 44393742587..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/sample-wf-cmp.svg +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Colortest: -red, -blue, -magen -ta - - - x - 0 - cos - t - d - t - = - - - k - =0 - ( - - 1) - k - x - 2 - k - +1 - - (2 - k - +1)! - - Fon -t -st -yles: - - bold - - , - emphasized - - , - sansserif - - , - SmallCaps - - , - slanted - - 1 - - diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/sample.dvi b/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/sample.dvi deleted file mode 100644 index 87e6236021d..00000000000 Binary files a/Build/source/texk/dvisvgm/dvisvgm-1.0.9/tests/sample.dvi and /dev/null differ diff --git a/Build/source/texk/dvisvgm/version.ac b/Build/source/texk/dvisvgm/version.ac index 8243ab843f2..020fa8e6075 100644 --- a/Build/source/texk/dvisvgm/version.ac +++ b/Build/source/texk/dvisvgm/version.ac @@ -8,4 +8,4 @@ dnl dnl -------------------------------------------------------- dnl dnl m4-include this file to define the current dvisvgm version -m4_define([dvisvgm_version], [1.0.9]) +m4_define([dvisvgm_version], [1.0.10]) -- cgit v1.2.3